diff --git a/bindings-bfd.cabal b/bindings-bfd.cabal
--- a/bindings-bfd.cabal
+++ b/bindings-bfd.cabal
@@ -1,10 +1,10 @@
 name:                   bindings-bfd
-version:                1.0.0
+version:                1.2.0.0
 cabal-version:          >= 1.4
 build-type:             Simple
 license:                LGPL-3
 license-file:           LICENSE
-copyright:              (c) 2009,2010,2011 Mick Nelso
+copyright:              (c) 2009-2012 Mick Nelso
 author:                 Mick Nelso
 maintainer:             mcnster@gmail.com
 stability:              alpha
@@ -15,11 +15,11 @@
 description:            These are bindings for `libbfd', a library of the GNU
                         `binutils' package.  The bindings let a Haskell program
                         query the structure of any executable, object, or 
-                        library file format supported by the GNU Project (alot).
+                        library file format supported by the GNU Project (many).
                         It also has support for disassembly of code in these
                         files where available.
 category:               FFI, Development
-tested-with:            GHC==7.0.3
+tested-with:            GHC==7.0.4
 extra-source-files:     README,
                         LICENSE,
                         TODO,
@@ -30,6 +30,7 @@
    exposed-modules:     Bindings.Bfd
                         Bindings.Bfd.Disasm
                         Bindings.Bfd.Disasm.I386.Address
+                        Bindings.Bfd.Disasm.I386.Cell
                         Bindings.Bfd.Disasm.I386.CondCode
                         Bindings.Bfd.Disasm.I386.EffectiveAddr
                         Bindings.Bfd.Disasm.I386.Insn
@@ -40,6 +41,7 @@
                         Bindings.Bfd.Disasm.I386.Parse
                         Bindings.Bfd.Disasm.I386.Precision
                         Bindings.Bfd.Disasm.I386.Prefix
+                        Bindings.Bfd.Disasm.I386.Register
                         Bindings.Bfd.Disasm.I386.Term
                         Bindings.Bfd.Disasm.I386.XmmType
                         Bindings.Bfd.Disasm.Info
@@ -58,10 +60,10 @@
                         Bindings.Bfd.Symbol.Flags
                         Bindings.Bfd.SymbolTable
                         Bindings.Bfd.Target
-   build-depends:       array >= 0.3 && < 1,
-                        base >= 4.1.0.0 && < 5,
-                        containers >= 0.2.0.1 && < 1,
-                        unix >= 2.3.2.0 && < 3
+   build-depends:       array >= 0.3 && < 0.4,
+                        base >= 4.3 && < 4.4,
+                        containers >= 0.4 && < 0.5,
+                        unix >= 2.4 && < 2.5
    hs-source-dirs:      src
    extensions:          CPP, 
                         ForeignFunctionInterface
diff --git a/dist/build/Bindings/Bfd/Disasm/I386/Lex.hs b/dist/build/Bindings/Bfd/Disasm/I386/Lex.hs
--- a/dist/build/Bindings/Bfd/Disasm/I386/Lex.hs
+++ b/dist/build/Bindings/Bfd/Disasm/I386/Lex.hs
@@ -28,7 +28,6 @@
 #endif
 {-# LINE 1 "templates/wrappers.hs" #-}
 {-# LINE 1 "templates/wrappers.hs" #-}
-{-# LINE 1 "<built-in>" #-}
 {-# LINE 1 "<command-line>" #-}
 {-# LINE 1 "templates/wrappers.hs" #-}
 -- -----------------------------------------------------------------------------
@@ -120,19 +119,19 @@
 -- For compatibility with previous versions of Alex, and because we can.
 
 alex_base :: AlexAddr
-alex_base = AlexA# "\xf6\xff\xff\xff\xfc\xff\xff\xff\x00\x00\x00\x00\xdc\xff\xff\xff\x43\x00\x00\x00\x5d\x00\x00\x00\xaa\x00\x00\x00\xc4\x00\x00\x00\x1f\x01\x00\x00\x10\x01\x00\x00\x6c\x01\x00\x00\x86\x01\x00\x00\x92\x01\x00\x00\xd4\xff\xff\xff\x8d\xff\xff\xff\xdf\x01\x00\x00\xf9\x01\x00\x00\x44\x02\x00\x00\x4e\x02\x00\x00\xd6\xff\xff\xff\x93\xff\xff\xff\x58\x02\x00\x00\x62\x02\x00\x00\xe7\xff\xff\xff\xa0\xff\xff\xff\x99\x02\x00\x00\xb3\x02\x00\x00\x00\x03\x00\x00\x1a\x03\x00\x00\x67\x03\x00\x00\x81\x03\x00\x00\xcc\x03\x00\x00\xe6\x03\x00\x00\x33\x04\x00\x00\x4d\x04\x00\x00\xa8\x04\x00\x00\xc2\x04\x00\x00\x0d\x05\x00\x00\x27\x05\x00\x00\x72\x05\x00\x00\x8c\x05\x00\x00\xd9\x05\x00\x00\xf3\x05\x00\x00\x3e\x06\x00\x00\x58\x06\x00\x00\xab\x06\x00\x00\xc5\x06\x00\x00\xfd\xff\xff\xff\xc9\xff\xff\xff\x00\x00\x00\x00\xc2\xff\xff\xff\xc4\xff\xff\xff\xcd\xff\xff\xff\x09\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x4d\x00\x00\x00\x18\x07\x00\x00\x32\x07\x00\x00\x7f\x07\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\x00\x00\x00\x00\xd3\xff\xff\xff\xd7\xff\xff\xff\xd5\xff\xff\xff\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+alex_base = AlexA# "\xf6\xff\xff\xff\xfc\xff\xff\xff\x00\x00\x00\x00\x10\x00\x00\x00\x5f\x00\x00\x00\x79\x00\x00\x00\xc8\x00\x00\x00\xe2\x00\x00\x00\x3d\x01\x00\x00\x2e\x01\x00\x00\x8c\x01\x00\x00\xa6\x01\x00\x00\xe1\x01\x00\x00\xd4\xff\xff\xff\x8d\xff\xff\xff\xfb\x01\x00\x00\x4a\x02\x00\x00\x64\x02\x00\x00\x6e\x02\x00\x00\xd6\xff\xff\xff\x92\xff\xff\xff\xa5\x02\x00\x00\xaf\x02\x00\x00\xdb\xff\xff\xff\x94\xff\xff\xff\xb9\x02\x00\x00\x04\x03\x00\x00\x1e\x03\x00\x00\x6d\x03\x00\x00\x87\x03\x00\x00\xe2\x03\x00\x00\xfc\x03\x00\x00\x47\x04\x00\x00\x61\x04\x00\x00\xb0\x04\x00\x00\xca\x04\x00\x00\x15\x05\x00\x00\x2f\x05\x00\x00\x8a\x05\x00\x00\xa4\x05\x00\x00\xef\x05\x00\x00\x09\x06\x00\x00\x64\x06\x00\x00\x7e\x06\x00\x00\xc9\x06\x00\x00\xe3\x06\x00\x00\x3e\x07\x00\x00\xed\xff\xff\xff\xbf\xff\xff\xff\x00\x00\x00\x00\xac\xff\xff\xff\xae\xff\xff\xff\xad\xff\xff\xff\xe7\xff\xff\xff\x00\x00\x00\x00\xe9\xff\xff\xff\x1a\x00\x00\x00\x58\x07\x00\x00\xa3\x07\x00\x00\xbd\x07\x00\x00\x00\x00\x00\x00\xa0\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\xc3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb3\xff\xff\xff\xb7\xff\xff\xff\xb9\xff\xff\xff\xf8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
 alex_table :: AlexAddr
-alex_table = AlexA# "\x00\x00\x01\x00\x01\x00\x01\x00\x0e\x00\x0b\x00\x14\x00\x01\x00\x01\x00\x01\x00\x3d\x00\x12\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x01\x00\x18\x00\x16\x00\x46\x00\x13\x00\x3a\x00\x01\x00\x2c\x00\x3f\x00\x43\x00\x47\x00\x2f\x00\x44\x00\x0d\x00\x33\x00\x34\x00\x0f\x00\x10\x00\x10\x00\x3b\x00\x10\x00\x3b\x00\x3b\x00\x3b\x00\x10\x00\x3b\x00\x45\x00\x35\x00\x31\x00\x36\x00\x17\x00\x40\x00\x3c\x00\x3e\x00\x41\x00\x42\x00\x00\x00\x00\x00\x3c\x00\x04\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x03\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x21\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x05\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x06\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x07\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\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\x00\x00\x00\x3b\x00\x3b\x00\x08\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x02\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x3d\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\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\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x0c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\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\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1d\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1a\x00\x00\x00\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\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1e\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\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\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x22\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x23\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x2e\x00\x3b\x00\x3b\x00\x20\x00\x00\x00\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\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x29\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x26\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x00\x00\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\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x28\x00\x00\x00\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\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x2a\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\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\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x01\x00\x01\x00\x01\x00\x0e\x00\x0b\x00\x14\x00\x01\x00\x01\x00\x01\x00\x12\x00\x18\x00\x16\x00\x2c\x00\x33\x00\x34\x00\x31\x00\x35\x00\x36\x00\x3c\x00\x40\x00\x44\x00\x01\x00\x2f\x00\x45\x00\x4a\x00\x13\x00\x3a\x00\x01\x00\x46\x00\x43\x00\x47\x00\x4b\x00\x42\x00\x48\x00\x0d\x00\x00\x00\x00\x00\x0f\x00\x10\x00\x10\x00\x3b\x00\x10\x00\x3b\x00\x3b\x00\x3b\x00\x10\x00\x3b\x00\x49\x00\x41\x00\x3c\x00\x00\x00\x17\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x03\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x21\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x04\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x05\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x06\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x07\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x08\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x02\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x0c\x00\x3b\x00\x3b\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x1d\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1e\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x22\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x23\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x2e\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x29\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x26\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x2a\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x30\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x0b\x00\x0c\x00\x0d\x00\x30\x00\x78\x00\x30\x00\x0b\x00\x0c\x00\x0d\x00\x2e\x00\x78\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x30\x00\x78\x00\x23\x00\x24\x00\x25\x00\x20\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x58\x00\x2c\x00\x2d\x00\x62\x00\x61\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x64\x00\x29\x00\x29\x00\x3e\x00\x62\x00\x73\x00\x29\x00\x61\x00\x64\x00\xff\xff\xff\xff\x73\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x20\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x0b\x00\x0c\x00\x0d\x00\x30\x00\x78\x00\x30\x00\x0b\x00\x0c\x00\x0d\x00\x78\x00\x30\x00\x78\x00\x20\x00\x62\x00\x61\x00\x29\x00\x64\x00\x29\x00\x73\x00\x70\x00\x62\x00\x20\x00\x58\x00\x61\x00\x23\x00\x24\x00\x25\x00\x20\x00\x64\x00\x28\x00\x29\x00\x2a\x00\x29\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x6e\x00\x73\x00\xff\xff\x3e\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x20\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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,71) [[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[],[(AlexAcc (alex_action_14))],[],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[],[],[],[(AlexAcc (alex_action_5))],[],[],[],[(AlexAcc (alex_action_6))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_7))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_8))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_9))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_10))],[],[],[(AlexAcc (alex_action_14))],[],[],[(AlexAcc (alex_action_11))],[],[],[],[],[(AlexAcc (alex_action_12))],[],[],[(AlexAcc (alex_action_13))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[],[],[],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))]]
-{-# LINE 42 "src/Bindings/Bfd/Disasm/I386/Lex.x" #-}
+alex_accept = listArray (0::Int,75) [[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[],[(AlexAcc (alex_action_14))],[],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[],[],[],[(AlexAcc (alex_action_5))],[],[],[],[(AlexAcc (alex_action_6))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_7))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_8))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_9))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_10))],[],[],[(AlexAcc (alex_action_14))],[],[],[(AlexAcc (alex_action_11))],[],[],[],[],[(AlexAcc (alex_action_12))],[],[],[(AlexAcc (alex_action_13))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[],[(AlexAcc (alex_action_15))],[],[],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[],[],[],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))]]
+{-# LINE 44 "src/Bindings/Bfd/Disasm/I386/Lex.x" #-}
 
 data Token = Offset           Int
            | Constant         Int
@@ -181,15 +180,16 @@
 alex_action_13 =  register         
 alex_action_14 =  mnemonic         
 alex_action_15 =  mnemonic         
-alex_action_16 =  parensL          
-alex_action_17 =  parensR          
-alex_action_18 =  comma            
-alex_action_19 =  colon            
-alex_action_20 =  hash             
-alex_action_21 =  star             
+alex_action_16 =  mnemonic         
+alex_action_17 =  mnemonic         
+alex_action_18 =  parensL          
+alex_action_19 =  parensR          
+alex_action_20 =  comma            
+alex_action_21 =  colon            
+alex_action_22 =  hash             
+alex_action_23 =  star             
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
 {-# LINE 1 "<command-line>" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 -- -----------------------------------------------------------------------------
diff --git a/dist/build/Bindings/Bfd/Disasm/I386/Parse.hs b/dist/build/Bindings/Bfd/Disasm/I386/Parse.hs
--- a/dist/build/Bindings/Bfd/Disasm/I386/Parse.hs
+++ b/dist/build/Bindings/Bfd/Disasm/I386/Parse.hs
@@ -15,6 +15,7 @@
 import Bindings.Bfd.Disasm.I386.Mnemonic       as R
 import Bindings.Bfd.Disasm.I386.Operand        as O
 import Bindings.Bfd.Disasm.I386.Prefix
+import Bindings.Bfd.Disasm.I386.Register
 import qualified Data.Array as Happy_Data_Array
 import qualified GHC.Exts as Happy_GHC_Exts
 
@@ -92,6 +93,12 @@
 happyOut14 :: (HappyAbsSyn ) -> (EffectiveAddr)
 happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut14 #-}
+happyIn15 :: (Register) -> (HappyAbsSyn )
+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn15 #-}
+happyOut15 :: (HappyAbsSyn ) -> (Register)
+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut15 #-}
 happyInTok :: (Token) -> (HappyAbsSyn )
 happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyInTok #-}
@@ -101,21 +108,21 @@
 
 
 happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\x3f\x00\x59\x00\x01\x00\x55\x00\x01\x00\x00\x00\x00\x00\x57\x00\x56\x00\x00\x00\x31\x00\x53\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x52\x00\x26\x00\x23\x00\x00\x00\x00\x00\x00\x00\x39\x00\x54\x00\x2a\x00\x00\x00\x00\x00\x51\x00\x00\x00\x21\x00\x04\x00\x21\x00\x50\x00\x2c\x00\x00\x00\x00\x00\x4d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4b\x00\x49\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x48\x00\x48\x00\x00\x00\x00\x00\x41\x00\x45\x00\x4a\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+happyActOffsets = HappyA# "\x44\x00\x61\x00\x01\x00\x5e\x00\x01\x00\x00\x00\x00\x00\x5f\x00\x5d\x00\x00\x00\x22\x00\x5c\x00\x00\x00\x00\x00\x5a\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x37\x00\x33\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x57\x00\x00\x00\x3b\x00\x00\x00\x59\x00\x00\x00\x33\x00\x04\x00\x33\x00\x58\x00\x1b\x00\x00\x00\x00\x00\x55\x00\x55\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x54\x00\x4f\x00\x56\x00\x00\x00\x00\x00\x00\x00\x50\x00\x50\x00\x00\x00\x00\x00\x47\x00\x4d\x00\x53\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
 happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\x3b\x00\x00\x00\x15\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x46\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x1c\x00\x29\x00\x00\x00\x44\x00\x00\x00\x00\x00\x43\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x12\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+happyGotoOffsets = HappyA# "\x51\x00\x00\x00\x16\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x42\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x1e\x00\x25\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x49\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x2d\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
 happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\x00\x00\x00\x00\xfc\xff\x00\x00\xfc\xff\xfd\xff\xfb\xff\xfa\xff\xf9\xff\xf8\xff\xec\xff\xec\xff\xe6\xff\xe2\xff\xe1\xff\xe9\xff\xea\xff\xe8\xff\x00\x00\x00\x00\xfe\xff\xe4\xff\xe7\xff\x00\x00\x00\x00\x00\x00\xe3\xff\xf6\xff\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\xf0\xff\xec\xff\xf3\xff\xf5\xff\xec\xff\xec\xff\xf1\xff\xeb\xff\xe5\xff\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\xf2\xff\xf4\xff\xef\xff\x00\x00\x00\x00\xee\xff\xe8\xff\xec\xff\x00\x00\x00\x00\x00\x00\xdf\xff\xed\xff\xde\xff"#
+happyDefActions = HappyA# "\x00\x00\x00\x00\xfc\xff\x00\x00\xfc\xff\xfd\xff\xfb\xff\xfa\xff\xf9\xff\xf8\xff\xec\xff\xec\xff\xe6\xff\xe2\xff\xe8\xff\xe1\xff\xe9\xff\xea\xff\xdd\xff\x00\x00\x00\x00\xfe\xff\xe4\xff\xe7\xff\x00\x00\x00\x00\xe3\xff\x00\x00\xf6\xff\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\xf0\xff\xec\xff\xf3\xff\xf5\xff\xec\xff\xec\xff\xf1\xff\xeb\xff\xe5\xff\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\xf2\xff\xf4\xff\xef\xff\x00\x00\x00\x00\xee\xff\xe8\xff\xec\xff\x00\x00\x00\x00\x00\x00\xdf\xff\xed\xff\xde\xff"#
 
 happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x02\x00\x01\x00\x02\x00\x03\x00\x01\x00\x02\x00\x06\x00\x07\x00\x02\x00\x06\x00\x07\x00\x01\x00\x0c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x01\x00\x05\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x04\x00\x05\x00\x01\x00\x07\x00\x01\x00\x09\x00\x0a\x00\x06\x00\x07\x00\x06\x00\x07\x00\x01\x00\x06\x00\x05\x00\x05\x00\x09\x00\x07\x00\x07\x00\x09\x00\x0a\x00\x05\x00\x09\x00\x07\x00\x0b\x00\x09\x00\x0a\x00\x09\x00\x00\x00\x0b\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x04\x00\x05\x00\x02\x00\x02\x00\x0a\x00\x02\x00\x02\x00\x08\x00\x01\x00\x0b\x00\x08\x00\x06\x00\x01\x00\xff\xff\x06\x00\x09\x00\xff\xff\x03\x00\x09\x00\x07\x00\xff\xff\x0b\x00\x09\x00\x06\x00\xff\xff\x0a\x00\x04\x00\x0b\x00\x09\x00\x09\x00\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff"#
+happyCheck = HappyA# "\xff\xff\x02\x00\x01\x00\x02\x00\x03\x00\x01\x00\x02\x00\x06\x00\x07\x00\x0b\x00\x06\x00\x07\x00\x01\x00\x0c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x01\x00\x0b\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x04\x00\x05\x00\x09\x00\x07\x00\x0b\x00\x09\x00\x0a\x00\x0b\x00\x05\x00\x09\x00\x07\x00\x0b\x00\x09\x00\x0a\x00\x0b\x00\x05\x00\x05\x00\x07\x00\x01\x00\x09\x00\x0a\x00\x0b\x00\x0b\x00\x06\x00\x07\x00\x05\x00\x01\x00\x06\x00\x09\x00\x0a\x00\x09\x00\x0b\x00\x07\x00\x09\x00\x0a\x00\x0b\x00\x08\x00\x09\x00\x04\x00\x05\x00\x02\x00\x02\x00\x02\x00\x0b\x00\x02\x00\x0a\x00\x02\x00\x00\x00\x0b\x00\x08\x00\x01\x00\x08\x00\x06\x00\x01\x00\x09\x00\xff\xff\x06\x00\x09\x00\x03\x00\x06\x00\xff\xff\xff\xff\x0b\x00\x09\x00\x07\x00\xff\xff\x0a\x00\x04\x00\x09\x00\x0b\x00\x09\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff"#
 
 happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\x3b\x00\x0f\x00\x10\x00\x11\x00\x0f\x00\x10\x00\x12\x00\x13\x00\x2f\x00\x12\x00\x13\x00\x05\x00\x14\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x14\x00\x34\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x23\x00\x24\x00\x0f\x00\x25\x00\x0f\x00\x0c\x00\x0d\x00\x12\x00\x13\x00\x17\x00\x13\x00\x0f\x00\x18\x00\x36\x00\x21\x00\x19\x00\x22\x00\x13\x00\x0c\x00\x0d\x00\x26\x00\x33\x00\x27\x00\x1d\x00\x0c\x00\x0d\x00\x1f\x00\x03\x00\x1d\x00\x29\x00\x0d\x00\x15\x00\x0d\x00\x2c\x00\x2d\x00\x03\x00\x05\x00\x30\x00\x31\x00\x1a\x00\x1b\x00\x1d\x00\x3d\x00\x3a\x00\x1d\x00\x3b\x00\x36\x00\x38\x00\x00\x00\x2e\x00\x39\x00\x00\x00\x29\x00\x2f\x00\x13\x00\x00\x00\x1d\x00\x34\x00\x2b\x00\x00\x00\x1a\x00\x03\x00\x1d\x00\x20\x00\x21\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00"#
+happyTable = HappyA# "\x00\x00\x3c\x00\x10\x00\x11\x00\x12\x00\x10\x00\x11\x00\x13\x00\x14\x00\x2e\x00\x13\x00\x14\x00\x05\x00\x15\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x15\x00\x2b\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x24\x00\x25\x00\x34\x00\x26\x00\x1e\x00\x0c\x00\x0d\x00\x0e\x00\x22\x00\x20\x00\x23\x00\x1e\x00\x0c\x00\x0d\x00\x0e\x00\x27\x00\x35\x00\x28\x00\x10\x00\x0c\x00\x0d\x00\x0e\x00\x36\x00\x13\x00\x14\x00\x37\x00\x10\x00\x13\x00\x2a\x00\x0d\x00\x1a\x00\x36\x00\x14\x00\x16\x00\x0d\x00\x17\x00\x2d\x00\x2e\x00\x03\x00\x05\x00\x30\x00\x31\x00\x32\x00\x18\x00\x1c\x00\x1a\x00\x1e\x00\x03\x00\x1e\x00\x3e\x00\x3b\x00\x3c\x00\x13\x00\x39\x00\x3a\x00\x00\x00\x13\x00\x30\x00\x2a\x00\x13\x00\x00\x00\x00\x00\x1e\x00\x35\x00\x14\x00\x00\x00\x1c\x00\x03\x00\x21\x00\x1e\x00\x22\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00"#
 
-happyReduceArr = Happy_Data_Array.array (1, 33) [
+happyReduceArr = Happy_Data_Array.array (1, 34) [
 	(1 , happyReduce_1),
 	(2 , happyReduce_2),
 	(3 , happyReduce_3),
@@ -148,11 +155,12 @@
 	(30 , happyReduce_30),
 	(31 , happyReduce_31),
 	(32 , happyReduce_32),
-	(33 , happyReduce_33)
+	(33 , happyReduce_33),
+	(34 , happyReduce_34)
 	]
 
 happy_n_terms = 14 :: Int
-happy_n_nonterms = 11 :: Int
+happy_n_nonterms = 12 :: Int
 
 happyReduce_1 = happySpecReduce_2  0# happyReduction_1
 happyReduction_1 happy_x_2
@@ -160,7 +168,7 @@
 	 =  case happyOutTok happy_x_1 of { (PrefixedMnemonic happy_var_1) -> 
 	case happyOut5 happy_x_2 of { happy_var_2 -> 
 	happyIn4
-		 (Insn (toPrefix $ head happy_var_1) (toMnemonic $ head $ tail happy_var_1) happy_var_2
+		 (Insn 0 (toPrefix $ head happy_var_1) (toMnemonic $ head $ tail happy_var_1) happy_var_2
 	)}}
 
 happyReduce_2 = happySpecReduce_2  0# happyReduction_2
@@ -169,7 +177,7 @@
 	 =  case happyOutTok happy_x_1 of { (L.Mnemonic       happy_var_1) -> 
 	case happyOut5 happy_x_2 of { happy_var_2 -> 
 	happyIn4
-		 (Insn (Nothing           ) (toMnemonic               happy_var_1) happy_var_2
+		 (Insn 0 (Nothing           ) (toMnemonic               happy_var_1) happy_var_2
 	)}}
 
 happyReduce_3 = happySpecReduce_0  1# happyReduction_3
@@ -360,7 +368,7 @@
 
 happyReduce_23 = happySpecReduce_1  5# happyReduction_23
 happyReduction_23 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (Register         happy_var_1) -> 
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
 	happyIn9
 		 (DirD happy_var_1
 	)}
@@ -368,7 +376,7 @@
 happyReduce_24 = happySpecReduce_2  6# happyReduction_24
 happyReduction_24 happy_x_2
 	happy_x_1
-	 =  case happyOutTok happy_x_2 of { (Register         happy_var_2) -> 
+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
 	happyIn10
 		 (DirJ happy_var_2
 	)}
@@ -377,17 +385,17 @@
 happyReduction_25 happy_x_1
 	 =  case happyOut13 happy_x_1 of { happy_var_1 -> 
 	happyIn11
-		 (IndD "" (fst happy_var_1) (snd happy_var_1) Nothing
+		 (IndD Nothing   (fst happy_var_1) (snd happy_var_1) Nothing
 	)}
 
 happyReduce_26 = happySpecReduce_3  7# happyReduction_26
 happyReduction_26 happy_x_3
 	happy_x_2
 	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (Register         happy_var_1) -> 
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
 	case happyOut13 happy_x_3 of { happy_var_3 -> 
 	happyIn11
-		 (IndD happy_var_1 (fst happy_var_3) (snd happy_var_3) Nothing
+		 (IndD (Just happy_var_1) (fst happy_var_3) (snd happy_var_3) Nothing
 	)}}
 
 happyReduce_27 = happySpecReduce_2  8# happyReduction_27
@@ -425,9 +433,9 @@
 happyReduction_31 happy_x_3
 	happy_x_2
 	happy_x_1
-	 =  case happyOutTok happy_x_2 of { (Register         happy_var_2) -> 
+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
 	happyIn14
-		 (EA happy_var_2 ""  1
+		 (EA (Just happy_var_2) Nothing    1
 	)}
 
 happyReduce_32 = happyReduce 6# 10# happyReduction_32
@@ -438,10 +446,10 @@
 	happy_x_2 `HappyStk`
 	happy_x_1 `HappyStk`
 	happyRest)
-	 = case happyOutTok happy_x_3 of { (Register         happy_var_3) -> 
+	 = case happyOut15 happy_x_3 of { happy_var_3 -> 
 	case happyOutTok happy_x_5 of { (Offset           happy_var_5) -> 
 	happyIn14
-		 (EA "" happy_var_3 happy_var_5
+		 (EA Nothing   (Just happy_var_3) happy_var_5
 	) `HappyStk` happyRest}}
 
 happyReduce_33 = happyReduce 7# 10# happyReduction_33
@@ -453,13 +461,20 @@
 	happy_x_2 `HappyStk`
 	happy_x_1 `HappyStk`
 	happyRest)
-	 = case happyOutTok happy_x_2 of { (Register         happy_var_2) -> 
-	case happyOutTok happy_x_4 of { (Register         happy_var_4) -> 
+	 = case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut15 happy_x_4 of { happy_var_4 -> 
 	case happyOutTok happy_x_6 of { (Offset           happy_var_6) -> 
 	happyIn14
-		 (EA happy_var_2 happy_var_4 happy_var_6
+		 (EA (Just happy_var_2) (Just happy_var_4) happy_var_6
 	) `HappyStk` happyRest}}}
 
+happyReduce_34 = happySpecReduce_1  11# happyReduction_34
+happyReduction_34 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Register         happy_var_1) -> 
+	happyIn15
+		 (toRegister happy_var_1
+	)}
+
 happyNewToken action sts stk [] =
 	happyDoAction 13# notHappyAtAll action sts stk []
 
@@ -511,7 +526,6 @@
 happyError tks = error $ "Parse.y: parse error at: " ++ (show $ take 10 tks)
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
 {-# LINE 1 "<command-line>" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
diff --git a/src/Bindings/Bfd.hs-boot b/src/Bindings/Bfd.hs-boot
--- a/src/Bindings/Bfd.hs-boot
+++ b/src/Bindings/Bfd.hs-boot
@@ -16,20 +16,23 @@
 -- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>.
 
 module Bindings.Bfd (
-     Bfd(ptr)
+     Bfd (ptr)
    , Bfd'
-   , Bindings.Bfd.mk
+   , getPrintSymbol
    , getOctetsPerByte
    , getTarget
    , getSections
+   , mk 
 ) where
 
-import Foreign.C
-import Foreign.Ptr
-import Foreign.Storable
+import Foreign.C        ( CString )
+import Foreign.Ptr      ( Ptr )
+import Foreign.Storable ( Storable )
 
-import {-# SOURCE #-} Bindings.Bfd.Section
-import {-# SOURCE #-} Bindings.Bfd.Target
+import                Bindings.Bfd.Misc    ( File )
+import {-# SOURCE #-} Bindings.Bfd.Section ( Section )
+import {-# SOURCE #-} Bindings.Bfd.Symbol  ( Symbol )
+import {-# SOURCE #-} Bindings.Bfd.Target  ( Target )
 
 
 data Bfd = Bfd {
@@ -47,9 +50,11 @@
 instance Storable Bfd'
 
 
-mk
-   :: Ptr Bfd'
-   -> Bfd
+getPrintSymbol
+   :: Bfd
+   -> File
+   -> Symbol
+   -> IO (IO ())
 
 getOctetsPerByte
    :: Bfd
@@ -62,4 +67,8 @@
 getSections
    :: Bfd
    -> IO [Section]
+
+mk
+   :: Ptr Bfd'
+   -> Bfd
 
diff --git a/src/Bindings/Bfd.hsc b/src/Bindings/Bfd.hsc
--- a/src/Bindings/Bfd.hsc
+++ b/src/Bindings/Bfd.hsc
@@ -16,13 +16,15 @@
 -- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>.
 
 -- | This is the top-level module containing operations that can be performed
--- on a Binary Format Descriptor (BFD).  A BFD is opened on the binary file
--- to be queried\/manipulated and serves an opaque pointer. 
+-- on a Binary Format Descriptor (BFD).  One BFD is opened for every binary file
+-- to be queried\/manipulated and serves an opaque handle.  The usual workflow
+-- is to 'open' a binary file (returning a 'Bfd'), perform operations on the
+-- 'Bfd' handle, then 'close' the 'Bfd'. 
 
 module Bindings.Bfd (
    -- * Types
      Bfd (ptr)
-   -- * Initialization
+   -- * Library Initialization
    , initialize
    -- * File Operations
    , targetsAndFormats
@@ -59,6 +61,7 @@
    , getDynamicRelocations
    -- *
    , demangle
+   , getPrintSymbol
    -- * Internal
    , Bfd'
    , Bindings.Bfd.mk
@@ -70,10 +73,10 @@
 import Data.Bits  ( (.&.), bit )
 import Data.Word  ( Word )
 
-import Foreign.C        ( CString, CInt, CUInt, newCString, peekCString
+import Foreign.C        ( CInt, CLong, CString, CUInt, newCString, peekCString
                         , withCString )
 import Foreign.Marshal  ( free, mallocArray, peekArray, toBool )
-import Foreign.Ptr      ( Ptr, nullPtr, wordPtrToPtr )
+import Foreign.Ptr      ( FunPtr, Ptr, nullPtr, wordPtrToPtr )
 import Foreign.Storable ( Storable, alignment, peek, peekByteOff, poke, sizeOf )
 
 import Prelude hiding ( catch )
@@ -84,28 +87,31 @@
                                                   , throwExceptionIfNull )
 import Bindings.Bfd.Flags         as BfdFlags     ( Flags ( HasReloc ) )
 import Bindings.Bfd.Format                        ( Format ( Object ) )
-import Bindings.Bfd.Misc                          ( Vma, Vma' )
+import Bindings.Bfd.Misc                          ( File, Vma, Vma' )
 import Bindings.Bfd.Relocation                    ( Relocation )
 import Bindings.Bfd.Section       as Section      ( Section, SectionName
                                                   , getNext, getSize, getVma )
+import Bindings.Bfd.Symbol                        ( Symbol )
 import Bindings.Bfd.SymbolTable   as SymbolTable  ( SymbolTable, mk, tablePtr )
-import Bindings.Bfd.Target        as Target       ( Target, TargetName
-                                                  , canonicalizeDynamicReloc
-                                                  , canonicalizeDynamicSymtab
-                                                  , canonicalizeSymtab
-                                                  , getDynamicRelocUpperBound
-                                                  , getDynamicSymtabUpperBound
-                                                  , getName, getSymtabUpperBound
-                                                  , listSupported )
+import Bindings.Bfd.Target        as Target       ( Target, TargetName, find
+                                                  , getName, listSupported
+                                                  , unTarget'CanonicalizeDynamicReloc
+                                                  , unTarget'CanonicalizeDynamicSymtab
+                                                  , unTarget'CanonicalizeSymtab
+                                                  , unTarget'GetDynamicRelocUpperBound
+                                                  , unTarget'GetDynamicSymtabUpperBound
+                                                  , unTarget'GetSymtabUpperBound 
+                                                  , unTarget'PrintSymbol )
 
 #include <bfd.h>
 
 
--- PUBLIC ######################################################################
+-- ### PUBLIC ##################################################################
 
--- Types =======================================================================
+-- === Types ===================================================================
 
--- | The opaque pointer to the Binary File Descriptor.
+-- | The opaque handle to the Binary File Descriptor.  One 'Bfd' handle is
+-- associated with exactly one binary file to be queried\/manipulated.
 data Bfd = Bfd {
                        ptr       :: Ptr Bfd'
                      , filePath  :: CString
@@ -114,18 +120,21 @@
            }
      deriving (Show)
 
--- Initialization ==============================================================
 
+-- === Library Initialization ==================================================
+
 -- | Initialize the library.  You need to call 'initialize' once, before using 
 -- any of the functions in this library.
 initialize
    :: IO ()
 initialize = c_bfd_init
 
--- File Operations =============================================================
 
+-- === File Operations =========================================================
+
 -- | Returns a list of tuples representing the possible combinations of 
--- 'TargetName' and 'Format' that are valid for this file on this platform.
+-- 'TargetName' and 'Format' that are valid for the 'FilePath' on this platform
+-- (see 'listSupported').
 --
 -- /Possible Exceptions:/  Same as 'open'.
 targetsAndFormats 
@@ -155,23 +164,17 @@
                          else return xs
                False -> return xs
 
--- | Opens the file 'FilePath' with the given target 'TargetName' and open mode 
--- (as defined by the Unix fopen(3) function) and returns a 'Bfd' object on 
--- success. FIXME: and marks it cacheable. 
+-- | Opens the 'FilePath' with the given 'TargetName' and /open mode/ as defined 
+-- by the Unix fopen(3) function, and returns a 'Bfd' handle on success.
+-- FIXME: and marks it cacheable.
 --
--- If the target is 'Nothing' then the environment variable /GNUTARGET/ is
--- checked for a target name; if this is NULL or not defined then it chooses the
--- the default target if set (see 'setDefault') and sets an internal flag in
--- the 'Bfd' object indicating that the target was defaulted (see 
--- 'isTargetDefaulted'), or if not set, the first entry in the target list for 
--- the platform.  Passing the string \"default\" as the 'TargetName' or setting 
--- the environment variable to \"default\" also causes the above behavior.
+-- Calls 'find'.  Refer to 'find' for a description of how the 'Target' is
+-- selected.
 --
--- /Important:/ Before you use the returned 'Bfd' object from a file you have
--- opened, you must call 'checkFormat' to 1) validate that the supplied 
--- 'TargetName' is appropriate for the opened file, and 2) set the 'Format' for
--- the 'Bfd'.  So for most intents and purposes, opening a file is a two-step
--- process.
+-- /Important:/ Before using the returned 'Bfd' handle a call must be made to 
+-- 'checkFormat' to 1) validate that the associated 'TargetName' is appropriate
+-- for the file; and, 2) set the 'Format'.  So for most intents and purposes, 
+-- opening a file is a two-step process:  'open' followed by 'checkFormat'.
 --
 -- /Possible Exceptions:/  'NoMemory' (if any allocation fails), 'SystemCall' 
 -- (if open failed), and 'InvalidTarget' (if supplied target is unknown).
@@ -193,10 +196,12 @@
       bfd <- throwExceptionIfNull "open" fp (show targ) cmd
       return $ Bfd bfd fp' targ' mode'
 
--- | Close a 'Bfd' and if all went well, return 'True'.  If the 'Bfd' was open
--- for writing, then pending operations are completed and the file written out
--- and closed.  If the created file is executable, then chmod(3) is called to
--- mark it as such.
+-- | Close a 'Bfd' handle and if all went well return 'True'.  Otherwise 
+-- 'False'.
+--
+-- If the 'Bfd' was open for writing then pending operations are completed and
+-- the file written out and closed.  If the created file is executable then 
+-- /chmod(3)/ is called to mark it as such.
 close
    :: Bfd
    -> IO Bool
@@ -208,11 +213,13 @@
       free $ mode bfd
       return $ toBool r
 
--- | Close a 'Bfd' and if all went well, return 'True'.  Differs from 'close'
--- in that it does not complete any pending operations.  This function would be
--- used if the application had just used a 'Bfd' for swapping and didn't want to
--- use any of the writing code.  If the created file is executable, then 
--- chmod(3) is called to mark it as such.
+-- | Close a 'Bfd' handle and if all went well, return 'True'.  Otherwise 
+-- 'False'.
+--
+-- Differs from 'close' in that it does not complete any pending operations.  
+-- This function is used if the application had just used a 'Bfd' for swapping 
+-- and didn't want to use any of the written code.  If the created file is
+-- executable, then /chmod(3)/ is called to mark it as such.
 closeAllDone
    :: Bfd
    -> IO Bool
@@ -224,15 +231,18 @@
       free $ mode bfd
       return $ toBool r
 
--- Setting the Format ==========================================================
 
--- | The second part of opening a file (see 'open').  Validates that the 
--- 'TargetName' is appropriate for the opened file and if not, silently picks
--- a more suitable 'TargetName', and also sets the 'Format' of the 'Bfd' object
--- representing the opened file.
+-- === Setting the Format ======================================================
+
+-- | Before a 'Bfd' handle can be used, its 'Format' must be set exactly once.
 --
+-- This function also validates that the 'TargetName' used in the 'open' call is
+-- appropriate for the file and if not silently picks a more suitable 
+-- 'TargetName' from the available targets on the platform (see 'listSupported').
+--
 -- /Important:/ You must call this function before using the vast majority of
--- these functions operating on the 'Bfd' as it updates critical data structures.
+-- functions operating on the 'Bfd' handle as it updates critical data
+-- structures.
 --
 -- /Possible Exceptions:/ 'InvalidOperation' (if the file was opened write-only),
 checkFormat
@@ -250,8 +260,9 @@
    -> IO [TargetName]
 -}
 
--- Attributes ==================================================================
 
+-- === Attributes ==============================================================
+
 -- | Returns the disassembler associated with the 'Bfd'.
 getDisasm
    :: Bfd
@@ -267,7 +278,7 @@
       fn <- peekByteOff (ptr bfd) (#offset struct bfd, filename)
       return $ unBfd'Filename fn
 
--- | Returns a 'List' of the 'Bfd's set 'Flags'.
+-- | Returns a 'List' of the 'Flags' set for the 'Bfd'.
 getFlags
    :: Bfd
    -> IO [BfdFlags.Flags]
@@ -459,12 +470,11 @@
    -> IO SymbolTable
 getSymbolTable bfd =
    do
-      xvec  <- getTarget bfd
-      bound <- getSymtabUpperBound xvec bfd
+      bound <- getSymtabUpperBound bfd
       let
          ptrs = bound `quot` (#const sizeof(struct bfd_symbol *))
       pps <- mallocArray ptrs
-      count <- canonicalizeSymtab xvec bfd pps
+      count <- canonicalizeSymtab bfd pps
       return $ SymbolTable.mk pps count
 
 getDynamicSymbolTable
@@ -472,12 +482,11 @@
    -> IO SymbolTable
 getDynamicSymbolTable bfd =
    do
-      xvec  <- getTarget bfd
-      bound <- getDynamicSymtabUpperBound xvec bfd
+      bound <- getDynamicSymtabUpperBound bfd
       let
          ptrs = fromIntegral bound `quot` (#const sizeof(struct bfd_symbol *))
       pps <- mallocArray ptrs
-      count <- canonicalizeDynamicSymtab xvec bfd pps
+      count <- canonicalizeDynamicSymtab bfd pps
       return $ SymbolTable.mk pps count
 
 #if 0
@@ -502,12 +511,11 @@
    -> IO [Relocation]
 getDynamicRelocations bfd st =
    do
-      xvec  <- getTarget bfd
-      bound <- getDynamicRelocUpperBound xvec bfd
+      bound <- getDynamicRelocUpperBound bfd
       let
          ptrs = fromIntegral bound `quot` (#const sizeof(arelent *))
       ppr <- mallocArray ptrs
-      count <- canonicalizeDynamicReloc xvec bfd ppr $ tablePtr st
+      count <- canonicalizeDynamicReloc bfd ppr $ tablePtr st
       prs <- peekArray count ppr
       mapM peek prs
 
@@ -527,6 +535,19 @@
                s' <- peekCString s
                return s'
 
+getPrintSymbol
+   :: Bfd
+   -> File
+   -> Symbol
+   -> IO (IO ())
+getPrintSymbol bfd file sym =
+   do 
+      targ <- getTarget bfd
+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_print_symbol)
+      let
+         f = d_Bfd_File_Symbol_CUInt_Void (unTarget'PrintSymbol fn) (ptr bfd) file sym 2
+      return f
+
 -- Internal ====================================================================
 
 data Bfd' = Filename      String
@@ -591,6 +612,91 @@
 
 -- PRIVATE #####################################################################
 
+canonicalizeDynamicReloc
+   :: Bfd
+   -> Ptr (Ptr Relocation)
+   -> Ptr Symbol
+   -> IO Int
+canonicalizeDynamicReloc bfd rels syms =
+   do
+      targ <- getTarget bfd
+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_dynamic_reloc)
+      r <- d_Bfd_PtrPtrRelocation_PtrSymbol_CLong (unTarget'CanonicalizeDynamicReloc fn) (ptr bfd) rels syms
+      return $ fromIntegral r
+
+canonicalizeDynamicSymtab
+   :: Bfd
+   -> Ptr Symbol
+   -> IO Int
+canonicalizeDynamicSymtab bfd ps =
+   do
+      targ <- getTarget bfd
+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_dynamic_symtab)
+      r <- d_Bfd_PtrSymbol_CLong (unTarget'CanonicalizeDynamicSymtab fn) (ptr bfd) ps
+      return $ fromIntegral r
+
+canonicalizeSymtab
+   :: Bfd
+   -> Ptr Symbol
+   -> IO Int
+canonicalizeSymtab bfd ps =
+   do
+      targ <- getTarget bfd
+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_symtab)
+      r <- d_Bfd_PtrSymbol_CLong (unTarget'CanonicalizeSymtab fn) (ptr bfd) ps
+      return $ fromIntegral r
+
+getDynamicRelocUpperBound
+   :: Bfd
+   -> IO Int
+getDynamicRelocUpperBound bfd =
+   do
+      targ <- getTarget bfd
+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_dynamic_reloc_upper_bound)
+      r <- d_Bfd_CLong (unTarget'GetDynamicRelocUpperBound fn) (ptr bfd)
+      return $ fromIntegral r
+
+getDynamicSymtabUpperBound
+   :: Bfd
+   -> IO Int
+getDynamicSymtabUpperBound bfd =
+   do
+      targ <- getTarget bfd
+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_dynamic_symtab_upper_bound)
+      r <- d_Bfd_CLong (unTarget'GetDynamicSymtabUpperBound fn) (ptr bfd)
+      return $ fromIntegral r
+
+getSymtabUpperBound
+   :: Bfd
+   -> IO Int
+getSymtabUpperBound bfd =
+   do
+      targ <- getTarget bfd
+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_symtab_upper_bound)
+      r <- d_Bfd_CLong (unTarget'GetSymtabUpperBound fn) $ ptr bfd
+      return $ fromIntegral r
+
+#if 0
+getSyntheticSymtab
+   :: Bfd
+   -> SymbolTable
+   -> SymbolTable
+   -> Ptr Symbol
+   -> IO Int
+getSyntheticSymtab bfd sst dst synth =
+   do
+      targ <- getTarget bfd
+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_synthetic_symtab)
+      r <- d_Bfd_CLong_PtrSymbol_CLong_PtrSymbol_PtrSymbol_CLong (fn' fn) (ptr bfd) sts stp dts dtp synth
+      return $ fromIntegral r
+   where
+      fn' = unTarget'GetSyntheticSymtab
+      sts = fromIntegral $ tableSize sst
+      stp = tablePtr sst
+      dts = fromIntegral $ tableSize dst
+      dtp = tablePtr dst
+#endif
+
 unBfd'Filename
    :: Bfd'
    -> String
@@ -701,3 +807,26 @@
 foreign import ccall unsafe "bfd.h _bfd_peek_is_thin_archive" c__bfd_peek_is_thin_archive
    :: Ptr Bfd'
    -> IO CInt
+
+foreign import ccall unsafe "dynamic" d_Bfd_CLong
+   :: FunPtr (Ptr Bfd' -> IO CLong)
+   -> (Ptr Bfd' -> IO CLong)
+
+#if 0
+foreign import ccall unsafe "dynamic" d_Bfd_CLong_PtrSymbol_CLong_PtrSymbol_PtrSymbol_CLong
+   :: FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong) 
+   -> (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong)
+#endif
+
+foreign import ccall unsafe "dynamic" d_Bfd_File_Symbol_CUInt_Void
+   :: FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ()) 
+   -> (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ())
+
+foreign import ccall unsafe "dynamic" d_Bfd_PtrPtrRelocation_PtrSymbol_CLong
+   :: FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong) 
+   -> (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong)
+
+foreign import ccall unsafe "dynamic" d_Bfd_PtrSymbol_CLong
+   :: FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)
+   -> (Ptr Bfd' -> Ptr Symbol -> IO CLong)
+
diff --git a/src/Bindings/Bfd/Disasm/I386/Cell.hs b/src/Bindings/Bfd/Disasm/I386/Cell.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Bfd/Disasm/I386/Cell.hs
@@ -0,0 +1,30 @@
+module Bindings.Bfd.Disasm.I386.Cell where
+
+import Bindings.Bfd.Disasm.I386.Address
+import Bindings.Bfd.Disasm.I386.EffectiveAddr
+import Bindings.Bfd.Disasm.I386.Register
+
+
+data Cell   = Stk Int Int        -- width, offset from rsp
+            | Reg Register
+            | Flg Char
+            | Ind Int (Maybe Register) EffectiveAddr (Maybe Int) (Maybe Address)
+     deriving (Show)
+
+{-
+checkWidth
+   :: Int
+   -> [Cell]
+   -> [Cell]
+checkWidth w cs = map f cs
+   where
+      f c =
+         case width c == w of
+            True  -> c
+            False -> error $ "Cell.checkWidth: " ++ show w ++ " " ++ show c
+
+width
+   :: Cell
+   -> Int
+width c = error $ "Cell.width: " ++ show c
+-}
diff --git a/src/Bindings/Bfd/Disasm/I386/CondCode.hs b/src/Bindings/Bfd/Disasm/I386/CondCode.hs
--- a/src/Bindings/Bfd/Disasm/I386/CondCode.hs
+++ b/src/Bindings/Bfd/Disasm/I386/CondCode.hs
@@ -13,14 +13,29 @@
               | NotEqual
               | NotSigned
               | Parity
+              | NotParity
               | Signed
-              | Zero
      deriving (Show)
 
 
 toCondCode
    :: String
    -> Maybe CondCode
-toCondCode ""  = Nothing
-toCondCode "z" = Just Zero
-toCondCode s  = error $ "toCondCode: " ++ show s
+toCondCode ""   = Nothing
+toCondCode "a"  = Just Above
+toCondCode "ae" = Just AboveOrEqual
+toCondCode "b"  = Just Below
+toCondCode "be" = Just BelowOrEqual
+toCondCode "e"  = Just Equal
+toCondCode "g"  = Just Greater
+toCondCode "ge" = Just GreaterOrEqual
+toCondCode "l"  = Just Less
+toCondCode "le" = Just LessOrEqual
+toCondCode "ne" = Just NotEqual
+toCondCode "ns" = Just NotSigned
+toCondCode "nz" = Just NotEqual
+toCondCode "p"  = Just Parity
+toCondCode "np" = Just NotParity
+toCondCode "s"  = Just Signed
+toCondCode "z"  = Just Equal
+toCondCode s    = error $ "toCondCode: " ++ show s
diff --git a/src/Bindings/Bfd/Disasm/I386/EffectiveAddr.hs b/src/Bindings/Bfd/Disasm/I386/EffectiveAddr.hs
--- a/src/Bindings/Bfd/Disasm/I386/EffectiveAddr.hs
+++ b/src/Bindings/Bfd/Disasm/I386/EffectiveAddr.hs
@@ -1,10 +1,21 @@
 module Bindings.Bfd.Disasm.I386.EffectiveAddr where
 
+import Bindings.Bfd.Disasm.I386.Register
 
+
 data EffectiveAddr = EA {
-                          base   :: String
-                        , index  :: String
+                          base   :: Maybe Register
+                        , index  :: Maybe Register
                         , scale  :: Int
                      }
                    | NoEA
      deriving (Eq, Ord, Show)
+
+
+registers
+   :: EffectiveAddr
+   -> [Register]
+registers (EA (Just r1)  Nothing  _) =      [r1]
+registers (EA  Nothing  (Just r2) _) =      [r2]
+registers (EA (Just r1) (Just r2) _) = r1 : [r2]
+registers x                          = error $ "EffectiveAddr.registers: " ++ show x
diff --git a/src/Bindings/Bfd/Disasm/I386/Insn.hs b/src/Bindings/Bfd/Disasm/I386/Insn.hs
--- a/src/Bindings/Bfd/Disasm/I386/Insn.hs
+++ b/src/Bindings/Bfd/Disasm/I386/Insn.hs
@@ -6,7 +6,8 @@
 
 
 data Insn = Insn {
-                       prefix    :: Maybe Prefix
+                       length    :: Int
+                     , prefix    :: Maybe Prefix
                      , mnemonic  :: Mnemonic
                      , operands  :: [Operand]
             }
diff --git a/src/Bindings/Bfd/Disasm/I386/Lex.x b/src/Bindings/Bfd/Disasm/I386/Lex.x
--- a/src/Bindings/Bfd/Disasm/I386/Lex.x
+++ b/src/Bindings/Bfd/Disasm/I386/Lex.x
@@ -31,6 +31,8 @@
    "%"$alphanum+"("$decdigit")"                             { register         }
    "%"$alphanum+                                            { register         }
    $alphanum+".s"{0,1}                                      { mnemonic         }
+   $alphanum+",pt"{0,1}                                     { mnemonic         }
+   $alphanum+",pn"{0,1}                                     { mnemonic         }
    "(bad)"                                                  { mnemonic         }
    "("                                                      { parensL          }
    ")"                                                      { parensR          }
diff --git a/src/Bindings/Bfd/Disasm/I386/Mnemonic.hs b/src/Bindings/Bfd/Disasm/I386/Mnemonic.hs
--- a/src/Bindings/Bfd/Disasm/I386/Mnemonic.hs
+++ b/src/Bindings/Bfd/Disasm/I386/Mnemonic.hs
@@ -7,47 +7,51 @@
 
 
 data Mnemonic = Add {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | AddCarry {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | AddScalar {
                      precision :: Precision
                 }
-              | BitwiseAnd {
-                     width1   :: Int
+              | BitAnd {
+                     bits1   :: Int
                 }
-              | BitwiseExclOr  {
+               | BitAndXmm                         -- FIXME
+              | BitExclOr  {
                      xmmType  :: XmmType
                 }
-              | BitwiseNot {
-                     width1   :: Int
+              | BitNot {
+                     bits1   :: Int
                 }
-              | BitwiseOr {
-                     width1   :: Int
+              | BitOr {
+                     bits1   :: Int
                 }
+               | BitOrXmm                          -- FIXME
+               | BitScan                           -- FIXME
               | Branch {
                      condCode :: CondCode
                 }
               | Call {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | Compare {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | CompareExchange {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | CompareString {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | CompareUnordered {
                      precision :: Precision
                 }
+               | CompareXmm                        -- FIXME
               | Convert {
-                     width1   :: Int
-                   , width2   :: Int
+                     bits1   :: Int
+                   , bits2   :: Int
                    , isSplit  :: Bool
                 }
               | ConvertXmm {
@@ -58,48 +62,59 @@
                 }
               | Cpuid
               | Decrement {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | Direction {
                      isSet :: Bool
                 }
               | Divide {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | DivideInt {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | DivideScalar {
                      precision   :: Precision
                 }
               | Exchange {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | ExchangeAdd {
-                     width1   :: Int
+                     bits1   :: Int
                 }
+               | Fpu                                     -- FIXME
+               | FpuCopyPop {
+                     bits1    :: Int
+                 }
+               | FpuLoadValue {
+                     bits1    :: Int
+                 }
+              | Halt
               | Increment {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | Jump {
                      mbWidth :: Maybe Int
                 }
               | Leave {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | LoadEffAddr {
-                     width1   :: Int
+                     bits1   :: Int
                 }
+              | LogicalExclOr
               | Loop
+               | Maximum                                 -- FIXME
+               | Minimum                                 -- FIXME
               | Move {
-                     width1            :: Int
-                   , mbWidthSignExtend :: Maybe (Int, Bool)
+                     bits1            :: Int
+                   , mbWidthSignExtend :: Maybe (Int, Bool) -- (bits, T=se,F=ze)
                 }
               | MoveAligned {
-                     precision   :: Precision
+                     xmmType     :: XmmType
                 }
               | MoveCond {
-                     width1   :: Int
+                     bits1   :: Int
                    , condCode :: CondCode
                 }
               | MoveNonTemp {
@@ -110,68 +125,75 @@
                    , isHigh1     :: Bool
                    , isHigh2     :: Bool
                 }
-              | MoveScalar {
-                     precision   :: Precision
+               | MoveScalar {
+                     bits1       :: Int
                 }
               | MoveString {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | MoveUnaligned {
                      precision   :: Precision
                 }
               | Multiply {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | MultiplyInt {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | MultiplyScalar {
                      xmmType  :: XmmType
                 }
               | Negate {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | NoOp
+              | Pause
               | Pop {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | Push {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | Return {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | Rotate {
-                     width1   :: Int
+                     bits1   :: Int
                    , isRight  :: Bool
                 }
+              | ScanString {
+                     bits1   :: Int
+                }
               | Set {
                      condCode :: CondCode
                 }
               | Shift {
-                     width1   :: Int
+                     bits1   :: Int
                    , isRight  :: Bool
                    , isArith  :: Bool
                 }
+               | SquareRoot                        -- FIXME
               | StoreString {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | Subtract {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | SubtractBorrow {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | SubtractScalar {
                      precision   :: Precision
                 }
               | Test {
-                     width1   :: Int
+                     bits1   :: Int
                 }
               | Unpack {
                      order       :: Order
-                   , precision   :: Precision
+                   , xmmType     :: XmmType
+                   , mbWidth     :: Maybe Int
                 }
+              | FIXME
      deriving (Show)
 
 
@@ -179,163 +201,235 @@
    :: String
    -> Mnemonic
 toMnemonic s
-   | s == "adcl" = AddCarry 4
-   | s == "addb" = Add 1
-   | s == "addl" = Add 4
-   | s == "addq" = Add 8
-   | s == "addsd" = AddScalar Double
-   | s == "addss" = AddScalar Single
-   | s == "addw" = Add 2
-   | s == "andb" = BitwiseAnd 1
-   | s == "andl" = BitwiseAnd 4
-   | s == "andq" = BitwiseAnd 8
-   | s == "andw" = BitwiseAnd 2
-   | s == "callq" = Call 8
-   | s == "cld" = Direction False
-   | s == "cltd" = Convert 4 8 True
-   | s == "cltq" = Convert 4 8 False
-   | s == "cmovael" = MoveCond 4 AboveOrEqual
-   | s == "cmovaeq" = MoveCond 8 AboveOrEqual
-   | s == "cmoval" = MoveCond 4 Above
-   | s == "cmovaq" = MoveCond 8 Above
-   | s == "cmovbel" = MoveCond 4 BelowOrEqual
-   | s == "cmovbeq" = MoveCond 8 BelowOrEqual
-   | s == "cmovbl" = MoveCond 4 Below
-   | s == "cmovbq" = MoveCond 8 Below
-   | s == "cmovel" = MoveCond 4 Equal
-   | s == "cmoveq" = MoveCond 8 Equal
-   | s == "cmovgel" = MoveCond 4 GreaterOrEqual
-   | s == "cmovgl" = MoveCond 4 Greater
-   | s == "cmovlel" = MoveCond 4 LessOrEqual
-   | s == "cmovll" = MoveCond 4 Less
-   | s == "cmovnel" = MoveCond 4 NotEqual
-   | s == "cmovneq" = MoveCond 8 NotEqual
-   | s == "cmpb" = Compare 1
-   | s == "cmpl" = Compare 4
-   | s == "cmpsb" = CompareString 1
-   | s == "cmpq" = Compare 8
-   | s == "cmpw" = Compare 2
-   | s == "cmpxchgl" = CompareExchange 4
-   | s == "cmpxchgq" = CompareExchange 8
-   | s == "cpuid" = Cpuid
-   | s == "cvtpd2ps" = ConvertXmm 2 (FloatingPt Double) (FloatingPt Single) False
-   | s == "cvtps2pd" = ConvertXmm 2 (FloatingPt Single) (FloatingPt Double) False
-   | s == "cvtsd2ss" = ConvertXmm 1 (FloatingPt Double) (Int 0) False -- shouldn't this have a size postfix?  it doesn't...
-   | s == "cvtsi2sdl" = ConvertXmm 1 (Int 4) (FloatingPt Double) False
-   | s == "cvtsi2sdq" = ConvertXmm 1 (Int 8) (FloatingPt Double) False
-   | s == "cvtsi2ssl" = ConvertXmm 1 (Int 4) (FloatingPt Single) False
-   | s == "cvtsi2ssq" = ConvertXmm 1 (Int 8) (FloatingPt Single) False
-   | s == "cvtss2sd" = ConvertXmm 1 (FloatingPt Single) (FloatingPt Double) False
-   | s == "cvttsd2si" = ConvertXmm 1 (FloatingPt Double) (Int 0) True -- shouldn't this have a size postfix?  it doesn't...
-   | s == "cvttss2siq" = ConvertXmm 1 (FloatingPt Single) (Int 8) True
-   | s == "cwtl" = Convert 2 4 False
-   | s == "decb" = Decrement 1
-   | s == "decl" = Decrement 4
-   | s == "decq" = Decrement 8
-   | s == "divl" = Divide 4
-   | s == "divq" = Divide 8
-   | s == "divsd" = DivideScalar Double
-   | s == "divss" = DivideScalar Single
-   | s == "idivl" = DivideInt 4
-   | s == "imull" = MultiplyInt 4
-   | s == "imulq" = MultiplyInt 8
-   | s == "incl" = Increment 4
-   | s == "incq" = Increment 8
-   | s == "ja" = Branch Above
-   | s == "jae" = Branch AboveOrEqual
-   | s == "jb" = Branch Below
-   | s == "jbe" = Branch BelowOrEqual
-   | s == "je" = Branch Equal
-   | s == "jg" = Branch Greater
-   | s == "jge" = Branch GreaterOrEqual
-   | s == "jl" = Branch Less
-   | s == "jle" = Branch LessOrEqual
-   | s == "jne" = Branch NotEqual
-   | s == "jns" = Branch NotSigned
-   | s == "jmp" = Jump Nothing
-   | s == "jmpq" = Jump $ Just 8
-   | s == "jp" = Branch Parity
-   | s == "js" = Branch Signed
-   | s == "leal" = LoadEffAddr 4
-   | s == "leaq" = LoadEffAddr 8
-   | s == "leaveq" = Leave 8
-   | s == "movabsq" = Move 8 Nothing
-   | s == "movaps" = MoveAligned Single
-   | s == "movb" = Move 1 Nothing
-   | s == "movl" = Move 4 Nothing
-   | s == "movlpd" = MovePacked Double False False
-   | s == "movntps" = MoveNonTemp $ Right $ FloatingPt Single
-   | s == "movq" = Move 8 Nothing
-   | s == "movsbl" = Move 1 $ Just (4, True)
-   | s == "movsbq" = Move 1 $ Just (8, True)
-   | s == "movsd" = MoveString 4
-   | s == "movslq" = Move 4 $ Just (8, True)
-   | s == "movsq" = MoveString 8
-   | s == "movss" = MoveScalar Single
-   | s == "movswl" = Move 2 $ Just (4, True)
-   | s == "movswq" = Move 2 $ Just (8, True)
-   | s == "movups" = MoveUnaligned Single
-   | s == "movw" = Move 2 Nothing
-   | s == "movzbl" = Move 1 $ Just (4, False)
-   | s == "movzwl" = Move 2 $ Just (4, False)
-   | s == "mull" = Multiply 4
-   | s == "mulq" = Multiply 8
-   | s == "mulss" = MultiplyScalar $ FloatingPt Single
-   | s == "negl" = Negate 4
-   | s == "negq" = Negate 8
-   | s == "nop" = NoOp
-   | s == "nopl" = NoOp
-   | s == "nopw" = NoOp
-   | s == "notl" = BitwiseNot 4
-   | s == "notq" = BitwiseNot 8
-   | s == "orb" = BitwiseOr 1
-   | s == "orl" = BitwiseOr 4
-   | s == "orq" = BitwiseOr 8
-   | s == "orw" = BitwiseOr 2
-   | s == "popq" = Pop 8
-   | s == "pushq" = Push 8
-   | s == "roll" = Rotate 4 False
-   | s == "retq" = Return 8
-   | s == "sarl" = Shift 4 True True
-   | s == "sarq" = Shift 8 True True
-   | s == "sbbl" = SubtractBorrow 4
-   | s == "sbbq" = SubtractBorrow 8
-   | s == "seta" = Set Above
-   | s == "setb" = Set Below
-   | s == "setbe" = Set BelowOrEqual
-   | s == "sete" = Set Equal
-   | s == "setg" = Set Greater
-   | s == "setl" = Set Less
-   | s == "setle" = Set LessOrEqual
-   | s == "setne" = Set NotEqual
-   | s == "shll" = Shift 4 False False
-   | s == "shlq" = Shift 8 False False
-   | s == "shrb" = Shift 1 True False
-   | s == "shrl" = Shift 4 True False
-   | s == "shrq" = Shift 8 True False
-   | s == "shrw" = Shift 2 True False
-   | s == "stosq" = StoreString 8
-   | s == "subb" = Subtract 1
-   | s == "subl" = Subtract 4
-   | s == "subq" = Subtract 8
-   | s == "subss" = SubtractScalar Single
-   | s == "testb" = Test 1
-   | s == "testl" = Test 4
-   | s == "testq" = Test 8
-   | s == "testw" = Test 2
-   | s == "ucomiss" = CompareUnordered Single
-   | s == "unpcklpd" = Unpack Low Double
-   | s == "unpcklps" = Unpack Low Single
-   | s == "xaddl" = ExchangeAdd 4
-   | s == "xchgl" = Exchange 4
-   | s == "xchgq" = Exchange 8
-   | s == "xchgw" = Exchange 2
-   | s == "xorb" = BitwiseExclOr $ Int 1
-   | s == "xorl" = BitwiseExclOr $ Int 4
-   | s == "xorpd" = BitwiseExclOr $ FloatingPt Double
-   | s == "xorps" = BitwiseExclOr $ FloatingPt Single
-   | s == "xorq" = BitwiseExclOr $ Int 8
-   | s == "xorw" = BitwiseExclOr $ Int 2
+   | s == "adcl"       = AddCarry 32
+   | s == "addb"       = Add 8
+   | s == "addl"       = Add 32
+   | s == "addq"       = Add 64
+   | s == "addsd"      = AddScalar Double
+   | s == "addss"      = AddScalar Single
+   | s == "addw"       = Add 16
+   | s == "andb"       = BitAnd 8
+   | s == "andl"       = BitAnd 32
+   | s == "andnpd"     = BitAndXmm
+   | s == "andpd"      = BitAndXmm
+   | s == "andq"       = BitAnd 64
+   | s == "andw"       = BitAnd 16
+   | s == "bsfq"       = BitScan
+   | s == "callq"      = Call 64
+   | s == "cbtw"       = Convert 8 16 False
+   | s == "cld"        = Direction False
+   | s == "cltd"       = Convert 32 64 True
+   | s == "cltq"       = Convert 32 64 False
+   | s == "cmovael"    = MoveCond 32 AboveOrEqual
+   | s == "cmovaeq"    = MoveCond 64 AboveOrEqual
+   | s == "cmoval"     = MoveCond 32 Above
+   | s == "cmovaq"     = MoveCond 64 Above
+   | s == "cmovbel"    = MoveCond 32 BelowOrEqual
+   | s == "cmovbeq"    = MoveCond 64 BelowOrEqual
+   | s == "cmovbl"     = MoveCond 32 Below
+   | s == "cmovbq"     = MoveCond 64 Below
+   | s == "cmovel"     = MoveCond 32 Equal
+   | s == "cmoveq"     = MoveCond 64 Equal
+   | s == "cmovgel"    = MoveCond 32 GreaterOrEqual
+   | s == "cmovgeq"    = MoveCond 64 GreaterOrEqual
+   | s == "cmovgl"     = MoveCond 32 Greater
+   | s == "cmovgq"     = MoveCond 64 Greater
+   | s == "cmovlel"    = MoveCond 32 LessOrEqual
+   | s == "cmovleq"    = MoveCond 64 LessOrEqual
+   | s == "cmovlew"    = MoveCond 16 LessOrEqual
+   | s == "cmovll"     = MoveCond 32 Less
+   | s == "cmovlq"     = MoveCond 64 Less
+   | s == "cmovnel"    = MoveCond 32 NotEqual
+   | s == "cmovneq"    = MoveCond 64 NotEqual
+   | s == "cmovnpl"    = MoveCond 32 NotParity
+   | s == "cmovnsl"    = MoveCond 32 NotSigned
+   | s == "cmovnsq"    = MoveCond 64 NotSigned
+   | s == "cmovpl"     = MoveCond 32 Parity
+   | s == "cmovpq"     = MoveCond 64 Parity
+   | s == "cmovsl"     = MoveCond 32 Signed
+   | s == "cmpb"       = Compare 8
+   | s == "cmpeqsd"    = CompareXmm
+   | s == "cmpl"       = Compare 32
+   | s == "cmpneqsd"   = CompareXmm
+   | s == "cmpnlesd"   = CompareXmm
+   | s == "cmpnltsd"   = CompareXmm
+   | s == "cmpsb"      = CompareString 8
+   | s == "cmpq"       = Compare 64
+   | s == "cmpw"       = Compare 16
+   | s == "cmpxchgl"   = CompareExchange 32
+   | s == "cmpxchgq"   = CompareExchange 64
+   | s == "cpuid"      = Cpuid
+   | s == "cqto"       = Convert 64 128 False                              -- FIXME
+   | s == "cvtpd2ps"   = ConvertXmm 16 (FloatingPt Double) (FloatingPt Single) False
+   | s == "cvtps2pd"   = ConvertXmm 16 (FloatingPt Single) (FloatingPt Double) False
+   | s == "cvtsd2ss"   = ConvertXmm 8 (FloatingPt Double) (Int 0) False -- shouldn't this have a size postfix?  it doesn't...
+   | s == "cvtsi2sdl"  = ConvertXmm 8 (Int 32) (FloatingPt Double) False
+   | s == "cvtsi2sdq"  = ConvertXmm 8 (Int 64) (FloatingPt Double) False
+   | s == "cvtsi2ssl"  = ConvertXmm 8 (Int 32) (FloatingPt Single) False
+   | s == "cvtsi2ssq"  = ConvertXmm 8 (Int 64) (FloatingPt Single) False
+   | s == "cvtss2sd"   = ConvertXmm 8 (FloatingPt Single) (FloatingPt Double) False
+   | s == "cvttsd2si"  = ConvertXmm 8 (FloatingPt Double) (Int 0) True -- shouldn't this have a size postfix?  it doesn't...
+   | s == "cvttsd2siq" = ConvertXmm 8 (FloatingPt Double) (Int 8) True
+   | s == "cvttss2siq" = ConvertXmm 8 (FloatingPt Single) (Int 8) True
+   | s == "cwtl"       = Convert 16 32 False
+   | s == "decb"       = Decrement 8
+   | s == "decl"       = Decrement 32
+   | s == "decq"       = Decrement 64
+   | s == "decw"       = Decrement 16
+   | s == "divl"       = Divide 32
+   | s == "divq"       = Divide 64
+   | s == "divsd"      = DivideScalar Double
+   | s == "divss"      = DivideScalar Single
+   | s == "fchs"       = Fpu
+   | s == "fcmove"     = Fpu
+   | s == "fcmovne"    = Fpu
+   | s == "fld"        = Fpu
+   | s == "fldcw"      = Fpu
+   | s == "fldl"       = FpuLoadValue 64
+   | s == "fnstcw"     = Fpu
+   | s == "fstp"       = Fpu
+   | s == "fstpl"      = FpuCopyPop 64
+   | s == "fxch"       = Fpu
+   | s == "hlt"        = Halt
+   | s == "idivl"      = DivideInt 32
+   | s == "idivq"      = DivideInt 64
+   | s == "imull"      = MultiplyInt 32
+   | s == "imulq"      = MultiplyInt 64
+   | s == "incl"       = Increment 32
+   | s == "incq"       = Increment 64
+   | s == "incw"       = Increment 16
+   | s == "ja"         = Branch Above
+   | s == "ja,pn"      = Branch Above                   -- FIXME
+   | s == "jae"        = Branch AboveOrEqual
+   | s == "jae,pn"     = Branch AboveOrEqual            -- FIXME
+   | s == "jb"         = Branch Below
+   | s == "jbe"        = Branch BelowOrEqual
+   | s == "jbe,pn"     = Branch BelowOrEqual            -- FIXME
+   | s == "jbe,pt"     = Branch BelowOrEqual            -- FIXME
+   | s == "je"         = Branch Equal
+   | s == "je,pn"      = Branch Equal                   -- FIXME
+   | s == "jg"         = Branch Greater
+   | s == "jge"        = Branch GreaterOrEqual
+   | s == "jl"         = Branch Less
+   | s == "jl,pt"      = Branch Less                    -- FIXME
+   | s == "jle"        = Branch LessOrEqual
+   | s == "jle,pn"     = Branch LessOrEqual             -- FIXME
+   | s == "jne"        = Branch NotEqual
+   | s == "jne,pn"     = Branch NotEqual                -- FIXME
+   | s == "jne,pt"     = Branch NotEqual		-- FIXME
+   | s == "jnp"        = Branch NotParity
+   | s == "jns"        = Branch NotSigned
+   | s == "jmp"        = Jump Nothing
+   | s == "jmpq"       = Jump $ Just 64
+   | s == "jp"         = Branch Parity
+   | s == "jp,pn"      = Branch Parity                  -- FIXME
+   | s == "js"         = Branch Signed
+   | s == "js,pn"      = Branch Signed                  -- FIXME
+   | s == "leal"       = LoadEffAddr 32
+   | s == "leaq"       = LoadEffAddr 64
+   | s == "leaveq"     = Leave 64
+   | s == "maxsd"      = Maximum                         -- FIXME
+   | s == "minsd"      = Minimum                         -- FIXME
+   | s == "movabsq"    = Move 64 Nothing
+   | s == "movapd"     = MoveAligned $ FloatingPt Double
+   | s == "movaps"     = MoveAligned $ FloatingPt Single
+   | s == "movb"       = Move 8 Nothing
+   | s == "movdqa"     = MoveAligned $ Int 128
+   | s == "movl"       = Move 32 Nothing
+   | s == "movlpd"     = MovePacked Double False False
+   | s == "movntps"    = MoveNonTemp $ Right $ FloatingPt Single
+   | s == "movq"       = Move 64 Nothing
+   | s == "movsb"      = MoveString 8
+   | s == "movsbl"     = Move 8 $ Just (32, True)
+   | s == "movsbq"     = Move 8 $ Just (64, True)
+   | s == "movsbw"     = Move 8 $ Just (16, True)
+   | s == "movsd"      = MoveScalar 64
+   | s == "movslq"     = Move 32 $ Just (64, True)
+   | s == "movsq"      = MoveString 64
+   | s == "movss"      = MoveScalar 32
+   | s == "movswl"     = Move 16 $ Just (32, True)
+   | s == "movswq"     = Move 16 $ Just (64, True)
+   | s == "movups"     = MoveUnaligned Single
+   | s == "movw"       = Move 16 Nothing
+   | s == "movzbl"     = Move 8 $ Just (32, False)
+   | s == "movzbq"     = Move 8 $ Just (64, False)
+   | s == "movzbw"     = Move 8 $ Just (16, False)
+   | s == "movzwl"     = Move 16 $ Just (32, False)
+   | s == "movzwq"     = Move 16 $ Just (64, False)
+   | s == "mull"       = Multiply 32
+   | s == "mulq"       = Multiply 64
+   | s == "mulsd"      = MultiplyScalar $ FloatingPt Double
+   | s == "mulss"      = MultiplyScalar $ FloatingPt Single
+   | s == "negl"       = Negate 32
+   | s == "negq"       = Negate 64
+   | s == "nop"        = NoOp
+   | s == "nopl"       = NoOp
+   | s == "nopw"       = NoOp
+   | s == "notl"       = BitNot 32
+   | s == "notq"       = BitNot 64
+   | s == "orb"        = BitOr 8
+   | s == "orl"        = BitOr 32
+   | s == "orpd"       = BitOrXmm
+   | s == "orq"        = BitOr 64
+   | s == "orw"        = BitOr 16
+   | s == "pause"      = Pause
+   | s == "popq"       = Pop 64
+   | s == "punpcklqdq" = Unpack Low (Int 64) (Just 128)
+   | s == "pushq"      = Push 64
+   | s == "pxor"       = LogicalExclOr
+   | s == "roll"       = Rotate 32 False
+   | s == "retq"       = Return 64
+   | s == "sarl"       = Shift 32 True True
+   | s == "sarq"       = Shift 64 True True
+   | s == "sbbl"       = SubtractBorrow 32
+   | s == "sbbq"       = SubtractBorrow 64
+   | s == "scasb"      = ScanString 8
+   | s == "seta"       = Set Above
+   | s == "setae"      = Set AboveOrEqual
+   | s == "setb"       = Set Below
+   | s == "setbe"      = Set BelowOrEqual
+   | s == "sete"       = Set Equal
+   | s == "setg"       = Set Greater
+   | s == "setge"      = Set GreaterOrEqual
+   | s == "setl"       = Set Less
+   | s == "setle"      = Set LessOrEqual
+   | s == "setne"      = Set NotEqual
+   | s == "setnp"      = Set NotParity
+   | s == "setp"       = Set Parity
+   | s == "shlb"       = Shift 8 False False
+   | s == "shll"       = Shift 32 False False
+   | s == "shlq"       = Shift 64 False False
+   | s == "shrb"       = Shift 8 True False
+   | s == "shrl"       = Shift 32 True False
+   | s == "shrq"       = Shift 64 True False
+   | s == "shrw"       = Shift 16 True False
+   | s == "sqrtsd"     = SquareRoot
+   | s == "stosq"      = StoreString 64
+   | s == "subb"       = Subtract 8
+   | s == "subl"       = Subtract 32
+   | s == "subq"       = Subtract 64
+   | s == "subw"       = Subtract 16
+   | s == "subsd"      = SubtractScalar Double
+   | s == "subss"      = SubtractScalar Single
+   | s == "testb"      = Test 8
+   | s == "testl"      = Test 32
+   | s == "testq"      = Test 64
+   | s == "testw"      = Test 16
+   | s == "ucomisd"    = CompareUnordered Double
+   | s == "ucomiss"    = CompareUnordered Single
+   | s == "unpcklpd"   = Unpack Low (FloatingPt Double) Nothing
+   | s == "unpcklps"   = Unpack Low (FloatingPt Single) Nothing
+   | s == "xaddl"      = ExchangeAdd 32
+   | s == "xaddq"      = ExchangeAdd 64
+   | s == "xchgl"      = Exchange 32
+   | s == "xchgq"      = Exchange 64
+   | s == "xchgw"      = Exchange 16
+   | s == "xorb"       = BitExclOr $ Int 8
+   | s == "xorl"       = BitExclOr $ Int 32
+   | s == "xorpd"      = BitExclOr $ FloatingPt Double
+   | s == "xorps"      = BitExclOr $ FloatingPt Single
+   | s == "xorq"       = BitExclOr $ Int 64
+   | s == "xorw"       = BitExclOr $ Int 16
    | otherwise = error $ "toMnemonic: " ++ show s
 
 
@@ -358,9 +452,28 @@
 isBranch (Loop    ) = True
 isBranch _          = False
 
+isHalt
+   :: Mnemonic
+   -> Bool
+isHalt Halt = True
+isHalt _    = False
+
 isReturn
    :: Mnemonic
    -> Bool
 isReturn (Return _) = True
 isReturn _          = False
+{-
+unpcklps unpack and interleave low packed single precision floating point
+unpcklpd unpack and interleave low packed double precision floating point
+unpckhps unpack and interleave high packed single precision floating point
+unpckhpd unpack and interleave high packed double precision floating point
+punpckl unpack and interleave low 1 8
+                                  1 16
+                                  2 8
+                                  2 16
+                                  4 8
+                                  4 16
+                                  8 16
+-}
 
diff --git a/src/Bindings/Bfd/Disasm/I386/Operand.hs b/src/Bindings/Bfd/Disasm/I386/Operand.hs
--- a/src/Bindings/Bfd/Disasm/I386/Operand.hs
+++ b/src/Bindings/Bfd/Disasm/I386/Operand.hs
@@ -1,23 +1,25 @@
 module Bindings.Bfd.Disasm.I386.Operand where
 
 import Bindings.Bfd.Disasm.I386.Address
+import Bindings.Bfd.Disasm.I386.Cell
 import Bindings.Bfd.Disasm.I386.EffectiveAddr
+import Bindings.Bfd.Disasm.I386.Register      as R
 
 
 data Operand = Abs  {
                        address      :: Address
                }
              | DirD {
-                       direct       :: String
+                       direct       :: Register
                }
              | DirJ {
-                       direct       :: String
+                       direct       :: Register
                }
              | Imm  {
                        immed        :: Int
                }
              | IndD {
-                       section      :: String
+                       section      :: Maybe Register
                      , effAddr      :: EffectiveAddr
                      , displacement :: Maybe Int
                      , mbAddress    :: Maybe Address
@@ -51,3 +53,12 @@
    -> Bool
 isDirJ (DirJ _) = True
 isDirJ _        = False
+
+defines
+   :: Int
+   -> Operand
+   -> [Cell]
+defines _ (DirD r       ) = [Reg r]
+defines w (IndD s ea d a) = [Ind w s ea d a]
+defines _ o        = error $ "Operand.defines: " ++ show o
+
diff --git a/src/Bindings/Bfd/Disasm/I386/Parse.y b/src/Bindings/Bfd/Disasm/I386/Parse.y
--- a/src/Bindings/Bfd/Disasm/I386/Parse.y
+++ b/src/Bindings/Bfd/Disasm/I386/Parse.y
@@ -14,6 +14,7 @@
 import Bindings.Bfd.Disasm.I386.Mnemonic       as R
 import Bindings.Bfd.Disasm.I386.Operand        as O
 import Bindings.Bfd.Disasm.I386.Prefix
+import Bindings.Bfd.Disasm.I386.Register
 }
 
 %name parse
@@ -34,8 +35,8 @@
 
 %%
 insn     :: { Insn }
-         :  PREFIXEDMNEMONIC operands                 { Insn (toPrefix $ head $1) (toMnemonic $ head $ tail $1) $2 }
-         |  MNEMONIC         operands                 { Insn (Nothing           ) (toMnemonic               $1) $2 }
+         :  PREFIXEDMNEMONIC operands                 { Insn 0 (toPrefix $ head $1) (toMnemonic $ head $ tail $1) $2 }
+         |  MNEMONIC         operands                 { Insn 0 (Nothing           ) (toMnemonic               $1) $2 }
 
 operands :: { [Operand] }
          :  {- empty -}                               { [                                                    ]} -- nop
@@ -66,14 +67,14 @@
          :  CONSTANT                                  { Imm $1 }
 
 directD  :: { Operand }
-         :  REGISTER                                  { DirD $1 }
+         :  register                                  { DirD $1 }
 
 directJ  :: { Operand }
-         :  '*' REGISTER                              { DirJ $2 }
+         :  '*' register                              { DirJ $2 }
 
 indirD   :: { Operand }
-         :  indir1                                    { IndD "" (fst $1) (snd $1) Nothing }
-         |  REGISTER ':' indir1                       { IndD $1 (fst $3) (snd $3) Nothing }
+         :  indir1                                    { IndD Nothing   (fst $1) (snd $1) Nothing }
+         |  register ':' indir1                       { IndD (Just $1) (fst $3) (snd $3) Nothing }
 
 
 indirJ   :: { Operand }
@@ -85,9 +86,12 @@
          |  OFFSET                                    { (NoEA, Just $1) }
 
 effAddr  :: { EffectiveAddr }
-         :  '(' REGISTER ')'                          { EA $2 ""  1 }
-         |  '(' ',' REGISTER ',' OFFSET ')'           { EA "" $3 $5 }
-         |  '(' REGISTER ',' REGISTER ',' OFFSET ')'  { EA $2 $4 $6 }
+         :  '(' register ')'                          { EA (Just $2) Nothing    1 }
+         |  '(' ',' register ',' OFFSET ')'           { EA Nothing   (Just $3) $5 }
+         |  '(' register ',' register ',' OFFSET ')'  { EA (Just $2) (Just $4) $6 }
+
+register :: { Register }
+         :  REGISTER                                  { toRegister $1 }
 
 {
 happyError :: [Token] -> a
diff --git a/src/Bindings/Bfd/Disasm/I386/Register.hs b/src/Bindings/Bfd/Disasm/I386/Register.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Bfd/Disasm/I386/Register.hs
@@ -0,0 +1,131 @@
+module Bindings.Bfd.Disasm.I386.Register where
+
+
+data Register  = X Char Int Int
+               | I Char Int Int
+               | N Int  Int Int
+               | P Char Int Int
+               | Q      Int Int
+               | F Int
+               | Z Int  Int Int
+               | S Char
+               | C [Register]
+     deriving (Eq, Ord, Show)
+
+
+toRegister
+   :: String
+   -> Register
+toRegister "ah"     = X 'a' 8  15
+toRegister "al"     = X 'a' 0   7
+toRegister "ax"     = X 'a' 0  15
+toRegister "bh"     = X 'b' 8  15
+toRegister "bl"     = X 'b' 0   7
+toRegister "bp"     = P 'b' 0  15
+toRegister "bpl"    = P 'b' 0   7
+toRegister "bx"     = X 'b' 0  15
+toRegister "ch"     = X 'c' 8  15
+toRegister "cl"     = X 'c' 0   7
+toRegister "cx"     = X 'c' 0  15
+toRegister "dh"     = X 'd' 8  15
+toRegister "di"     = I 'd' 0  15
+toRegister "dil"    = I 'd' 0   7
+toRegister "dl"     = X 'd' 0   7
+toRegister "ds"     = S 'd'
+toRegister "dx"     = X 'd' 0  15
+toRegister "dxax"   = C [(X 'd' 0 15), (X 'a' 0 15)]
+toRegister "eax"    = X 'a' 0  31
+toRegister "ebp"    = P 'b' 0  31
+toRegister "ebx"    = X 'b' 0  31
+toRegister "ecx"    = X 'c' 0  31
+toRegister "edi"    = I 'd' 0  31
+toRegister "edx"    = X 'd' 0  31
+toRegister "edxeax" = C [(X 'd' 0 31), (X 'a' 0 31)]
+toRegister "es"     = S 'e'
+toRegister "esi"    = I 's' 0  31
+toRegister "fs"     = S 'f'
+toRegister "r8"     = N  8  0  63
+toRegister "r8b"    = N  8  0   7
+toRegister "r8d"    = N  8  0  31
+toRegister "r8w"    = N  8  0  15
+toRegister "r9"     = N  9  0  63
+toRegister "r9b"    = N  9  0   7
+toRegister "r9d"    = N  9  0  31
+toRegister "r9w"    = N  9  0  15
+toRegister "r10"    = N 10  0  63
+toRegister "r10b"   = N 10  0   7
+toRegister "r10d"   = N 10  0  31
+toRegister "r10w"   = N 10  0  15
+toRegister "r11"    = N 11  0  63
+toRegister "r11b"   = N 11  0   7
+toRegister "r11d"   = N 11  0  31
+toRegister "r11w"   = N 11  0  15
+toRegister "r12"    = N 12  0  63
+toRegister "r12b"   = N 12  0   7
+toRegister "r12d"   = N 12  0  31
+toRegister "r12w"   = N 12  0  15
+toRegister "r13"    = N 13  0  63
+toRegister "r13b"   = N 13  0   7
+toRegister "r13d"   = N 13  0  31
+toRegister "r13w"   = N 13  0  15
+toRegister "r14"    = N 14  0  63
+toRegister "r14b"   = N 14  0   7
+toRegister "r14d"   = N 14  0  31
+toRegister "r14w"   = N 14  0  15
+toRegister "r15"    = N 15  0  63
+toRegister "r15b"   = N 15  0   7
+toRegister "r15d"   = N 15  0  31
+toRegister "r15w"   = N 15  0  15
+toRegister "rax"    = X 'a' 0  63
+toRegister "rbp"    = P 'b' 0  63
+toRegister "rbx"    = X 'b' 0  63
+toRegister "rcx"    = X 'c' 0  63
+toRegister "rdi"    = I 'd' 0  63
+toRegister "rdx"    = X 'd' 0  63
+toRegister "rdxrax" = C [X 'd' 0 63, X 'a' 0 63]
+toRegister "rip"    = Q     0  63
+toRegister "rsi"    = I 's' 0  63
+toRegister "rsp"    = P 's' 0  63
+toRegister "si"     = I 's' 0  15
+toRegister "sil"    = I 's' 0   7
+toRegister "st"     = F (-1)
+toRegister "st(0)"  = F  0
+toRegister "st(1)"  = F  1
+toRegister "xmm0"   = Z  0  0 127
+toRegister "xmm1"   = Z  1  0 127
+toRegister "xmm2"   = Z  2  0 127
+toRegister "xmm3"   = Z  3  0 127
+toRegister "xmm4"   = Z  4  0 127
+toRegister "xmm5"   = Z  5  0 127
+toRegister "xmm6"   = Z  6  0 127
+toRegister "xmm7"   = Z  7  0 127
+toRegister "xmm8"   = Z  8  0 127
+toRegister "xmm9"   = Z  9  0 127
+toRegister "xmm10"  = Z 10  0 127
+toRegister "xmm11"  = Z 11  0 127
+toRegister "xmm12"  = Z 12  0 127
+toRegister "xmm13"  = Z 13  0 127
+toRegister "xmm14"  = Z 14  0 127
+toRegister "xmm15"  = Z 15  0 127
+toRegister r        = error $ "Register.toRegister: " ++ r
+
+size
+   :: Register
+   -> Int
+size (X _ a b) = b - a + 1
+size (I _ a b) = b - a + 1
+size (N _ a b) = b - a + 1
+size (P _ a b) = b - a + 1
+size (F _) = 80
+size (Z _ a b) = b - a + 1 
+size (S _) = 16
+size x = error $ "Register.size: " ++ show x
+
+restrictBits
+   :: Int
+   -> Int
+   -> Register
+   -> Register
+restrictBits a b (X r _ _) = X r a b
+restrictBits a b (Z r _ _) = Z r a b
+restrictBits _ _ r         = error $ "Register.restrictBits: " ++ show r
diff --git a/src/Bindings/Bfd/Disasm/I386/Term.hs b/src/Bindings/Bfd/Disasm/I386/Term.hs
--- a/src/Bindings/Bfd/Disasm/I386/Term.hs
+++ b/src/Bindings/Bfd/Disasm/I386/Term.hs
@@ -1,29 +1,49 @@
 module Bindings.Bfd.Disasm.I386.Term where
 
-import Bindings.Bfd.Disasm.I386.Operand
+import qualified Bindings.Bfd.Disasm.I386.Cell as C
+import Bindings.Bfd.Disasm.I386.Operand  as O
+import Bindings.Bfd.Disasm.I386.Register as R
 
 
-data Term = Term `Add` Term
-          | Term `BitAnd` Term
-          | Term `BitExclOr` Term
-          | Term `BitOr` Term
-          | Term `BitTest` Term
-          | Term `GreaterOrEqual` Term
-          | Term `Subtract` Term
-          | If Term Term Term
-          | Flag Char Term             -- right hand side
-          -- terminals
-          | Opr Int Operand            -- Int is width
-          | Stk Int Int
-          | Reg String
-          | Flg Char
-          | Con Int                    -- assumed to be 64-bits
-          | Udf                        -- undefined
-          | Nul
-          | Todo                       -- FIXME
+data Term   = Term `Add` Term
+            | Term `BitAnd` Term
+            | Term `BitExclOr` Term
+            | Term `BitOr` Term
+            | Term `BitTest` Term
+            | Term `DivideIntQuotient` Term
+            | Term `DivideIntRemainder` Term
+            | Term `Subtract` Term
+            | SignExtend Term
+            | If Term Term Term          -- cond; true; false
+            | Flag Char Term             -- source of Assign
+            -- terminals
+            | Opr Int Operand            -- Operand: Int is width
+            | OprA Int Operand           -- same as Opr, except gets address instead of val (for lea)
+            | Stk Int Int                -- offset from rsp, width
+            | Reg Register
+            | Flg Char                   -- target of Assign
+            | Con Int                    -- constant; assumed to be 64-bits
+            | Udf                        -- undefined
+            | Todo String                -- FIXME
      deriving (Show)
 
-type Assign = (Term, Term)
-
+type Assign = (Term, Term)             -- (read, write)
 
+{-
+restrictBits
+   :: Int
+   -> Int
+   -> Term
+   -> Term
+restrictBits a b (Reg r) = Reg $ R.restrictBits a b r
+restrictBits _ _ t = error $ "Term.restrictBits: " ++ show t
+-}
 
+defines
+   :: Term
+   -> [C.Cell]
+defines (Opr w op) = O.defines w op
+defines (Stk a b ) = [C.Stk b a]
+defines (Reg r   ) = [C.Reg r  ]
+defines (Flg f   ) = [C.Flg f  ]
+defines t          = error $ "Term.defines: " ++ show t
diff --git a/src/Bindings/Bfd/Symbol.hsc b/src/Bindings/Bfd/Symbol.hsc
--- a/src/Bindings/Bfd/Symbol.hsc
+++ b/src/Bindings/Bfd/Symbol.hsc
@@ -40,21 +40,27 @@
    , Symbol'
 ) where
 
-import Data.Bits
-import Data.Word
+import Data.Bits ( (.&.), bit )
+import Data.Word ( Word )
 
-import Foreign.C
-import Foreign.Ptr
-import Foreign.Storable
+import Foreign.C        ( CString, CUInt, newCString, peekCString )
+import Foreign.Ptr      ( Ptr, wordPtrToPtr )
+import Foreign.Storable ( Storable, alignment, peekByteOff, pokeByteOff, sizeOf )
 
-import System.Posix.IO
+import System.Posix.IO ( FdOption(NonBlockingRead), closeFd, createPipe, fdRead
+                       , setFdOption )
 
-import {-# SOURCE #-} Bindings.Bfd              as Bfd
-import                Bindings.Bfd.Flavour
-import                Bindings.Bfd.Misc
-import {-# SOURCE #-} Bindings.Bfd.Section      as Section
-import                Bindings.Bfd.Symbol.Flags as SymbolFlags
-import                Bindings.Bfd.Target       as Target
+import {-# SOURCE #-} Bindings.Bfd              as Bfd         ( Bfd, Bfd'
+                                                               , getPrintSymbol
+                                                               , getTarget, mk)
+import                Bindings.Bfd.Flavour                     ( Flavour(Unknown) )
+import                Bindings.Bfd.Misc                        ( Vma, c_fdopen
+                                                               , c_fflush )
+import {-# SOURCE #-} Bindings.Bfd.Section      as Section     ( Section
+                                                               , getOutputSection
+                                                               , getVma )
+import                Bindings.Bfd.Symbol.Flags as SymbolFlags ( Flags(Local, Synthetic) )
+import                Bindings.Bfd.Target       as Target      ( getFlavour )
 
 #include <bfd.h>
 
@@ -294,8 +300,7 @@
       mode <- newCString "w"
       fpWrite <- c_fdopen pipeWrite' mode
 
-      xvec <- getTarget bfd
-      f    <- getPrintSymbol xvec bfd fpWrite sym
+      f    <- getPrintSymbol bfd fpWrite sym
 
       f
       _ <- c_fflush fpWrite
diff --git a/src/Bindings/Bfd/SymbolTable.hs b/src/Bindings/Bfd/SymbolTable.hs
--- a/src/Bindings/Bfd/SymbolTable.hs
+++ b/src/Bindings/Bfd/SymbolTable.hs
@@ -90,8 +90,13 @@
 
       sects <- getSections bfd
       let
-         lastSect = last sects
-      lastSectVma  <- getVma lastSect
+         f (v,rs) s =
+            do
+               v' <- Section.getVma s
+               case v' > v of
+                  True  -> return (v',s )
+                  False -> return (v ,rs)
+      (lastSectVma,lastSect) <- foldM f (0,externsSect) sects
       lastSectSize <- Section.getSize lastSect
 
       let
diff --git a/src/Bindings/Bfd/Target.hs-boot b/src/Bindings/Bfd/Target.hs-boot
--- a/src/Bindings/Bfd/Target.hs-boot
+++ b/src/Bindings/Bfd/Target.hs-boot
@@ -15,10 +15,14 @@
 -- You should have received a copy of the GNU Lesser General Public License
 -- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>.
 
-module Bindings.Bfd.Target where
+module Bindings.Bfd.Target (
+     Target
+   , Target'
+   , TargetName
+) where
 
-import Foreign.Ptr
-import Foreign.Storable
+import Foreign.Ptr      ( Ptr )
+import Foreign.Storable ( Storable )
 
 
 type TargetName = String
diff --git a/src/Bindings/Bfd/Target.hsc b/src/Bindings/Bfd/Target.hsc
--- a/src/Bindings/Bfd/Target.hsc
+++ b/src/Bindings/Bfd/Target.hsc
@@ -15,161 +15,81 @@
 -- You should have received a copy of the GNU Lesser General Public License
 -- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>.
 
--- | The "Target" represents a particular back-end used to interpret the "Bfd".
+-- | The "Target" represents a particular back-end used to interpret the Binary
+-- File Descriptor (BFD).  A 'Bfd' handle will be associated with exactly one
+-- 'Target' as set in the 'open' function.
 module Bindings.Bfd.Target (
    -- * Types
      Target
    , TargetName
    -- * Platform
    , listSupported
+   , find
    , setDefault
-   -- * Byte Order
+   -- * Attributes
+   , getFlavour
+   , getName
+   -- ** Byte Order
    , getByteorder
    , getHeaderByteorder
-   -- *
+   -- ** Flags
    , getObjectFlags
    , getSectionFlags
-   , Bindings.Bfd.Target.getFlavour
-   , getName
-   -- ** Symtabs
-   , getSymtabUpperBound
-   , canonicalizeSymtab
-   , getDynamicSymtabUpperBound
-   , canonicalizeDynamicSymtab
-   , getSyntheticSymtab
-   -- ** Relocations
-   , getDynamicRelocUpperBound
-   , canonicalizeDynamicReloc
    -- * Testing
+   , isCoffFamily
    -- ** Byte Order
    , isBigEndian
    , isLittleEndian
    , isHeaderBigEndian
    , isHeaderLittleEndian
-   -- ** Coff Family
-   , isCoffFamily
-   -- *
-   , getPrintSymbol
    -- * Internal
    , Target'
+   , unTarget'CanonicalizeDynamicReloc
+   , unTarget'CanonicalizeDynamicSymtab
+   , unTarget'CanonicalizeSymtab
+   , unTarget'GetDynamicRelocUpperBound
+   , unTarget'GetDynamicSymtabUpperBound
+   , unTarget'GetSymtabUpperBound
+   , unTarget'GetSyntheticSymtab
+   , unTarget'PrintSymbol
 ) where
 
-import Data.Bits
-import Data.Word
+import Data.Bits ( (.&.), bit )
+import Data.Word ( Word )
 
-import Foreign.C
-import Foreign.Marshal
-import Foreign.Ptr
-import Foreign.Storable
+import Foreign.C        ( CInt, CLong, CString, CUInt, newCString, peekCString
+                        , withCString )
+import Foreign.Marshal  ( free, peekArray0, toBool )
+import Foreign.Ptr      ( FunPtr, Ptr, castPtrToFunPtr, nullPtr, wordPtrToPtr )
+import Foreign.Storable ( Storable, alignment, peekByteOff, sizeOf )
 
-import {-# SOURCE #-} Bindings.Bfd
-import                Bindings.Bfd.Endian
-import                Bindings.Bfd.Exception
-import                Bindings.Bfd.Flags         as BfdFlags
-import                Bindings.Bfd.Flavour
-import                Bindings.Bfd.Misc
-import {-# SOURCE #-} Bindings.Bfd.Relocation
-import                Bindings.Bfd.Section.Flags as SectionFlags
-import {-# SOURCE #-} Bindings.Bfd.Symbol        as Symbol
-import {-# SOURCE #-} Bindings.Bfd.SymbolTable
+import {-# SOURCE #-} Bindings.Bfd                               ( Bfd, Bfd'
+                                                                 , ptr )
+import                Bindings.Bfd.Endian                        ( Endian(..) )
+import                Bindings.Bfd.Exception                     ( throwExceptionIfFalse)
+import                Bindings.Bfd.Flags         as BfdFlags     ( Flags(HasReloc) )
+import                Bindings.Bfd.Flavour                       ( Flavour(Coff, Xcoff) )
+import                Bindings.Bfd.Misc                          ( File )
+import {-# SOURCE #-} Bindings.Bfd.Relocation                    ( Relocation )
+import                Bindings.Bfd.Section.Flags as SectionFlags ( Flags(Alloc) ) 
+import {-# SOURCE #-} Bindings.Bfd.Symbol        as Symbol       ( Symbol )
 
 #include <bfd.h>
 
 
-type TargetName = String
+-- ### PUBLIC ##################################################################
 
+-- === Types ===================================================================
+
 type Target = Ptr Target'
 
-data Target' = Name                       TargetName
-             | Flavour                    Flavour
-             | Byteorder                  Endian
-             | HeaderByteorder            Endian
-             | ObjectFlags                [BfdFlags.Flags]
-             | SectionFlags               [SectionFlags.Flags]
-             | GetSymtabUpperBound        (FunPtr (Ptr Bfd' -> IO CLong))
-             | CanonicalizeSymtab         (FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong))
-             | PrintSymbol                (FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ()))
-             | GetDynamicSymtabUpperBound (FunPtr (Ptr Bfd' -> IO CLong))
-             | CanonicalizeDynamicSymtab  (FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong))
-             | GetSyntheticSymtab         (FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong))
-             | GetDynamicRelocUpperBound  (FunPtr (Ptr Bfd' -> IO CLong))
-             | CanonicalizeDynamicReloc   (FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong))
-     deriving (Show)
+type TargetName = String
 
-instance Storable Target' where
-   sizeOf _ = #size struct bfd_target
-   alignment = sizeOf
-   peekByteOff buf off
-      | off == (#offset struct bfd_target, name) =
-         do
-            val <- (#peek struct bfd_target, name) buf
-            s   <- peekCString val
-            return $ Bindings.Bfd.Target.Name s
-      | off == (#offset struct bfd_target, flavour) =
-         do
-            val <- (#peek struct bfd_target, flavour) buf :: IO CUInt
-            return $ Flavour $ toEnum $ fromIntegral val
-      | off == (#offset struct bfd_target, byteorder) =
-         do
-            val <- (#peek struct bfd_target, byteorder) buf :: IO CUInt
-            return $ Byteorder $ toEnum $ fromIntegral val
-      | off == (#offset struct bfd_target, header_byteorder) =
-         do
-            val <- (#peek struct bfd_target, header_byteorder) buf :: IO CUInt
-            return $ HeaderByteorder $ toEnum $ fromIntegral val
-      | off == (#offset struct bfd_target, object_flags) =
-         do
-            val <- (#peek struct bfd_target, object_flags) buf :: IO CUInt
-            let
-               flags = filter f $ enumFrom HasReloc
-                  where
-                     f e = val .&. (bit $ fromEnum e) /= 0
-            return $ ObjectFlags flags
-      | off == (#offset struct bfd_target, section_flags) =
-         do
-            val <- (#peek struct bfd_target, section_flags) buf :: IO CUInt
-            let
-               flags = filter f $ enumFrom Alloc
-                  where
-                     f e = val .&. (bit $ fromEnum e) /= 0
-            return $ SectionFlags flags
-      | off == (#offset struct bfd_target, _bfd_get_symtab_upper_bound) =
-         do
-            val <- (#peek struct bfd_target, _bfd_get_symtab_upper_bound) buf :: IO Word
-            return $ GetSymtabUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
-      | off == (#offset struct bfd_target, _bfd_canonicalize_symtab) =
-         do
-            val <- (#peek struct bfd_target, _bfd_canonicalize_symtab) buf :: IO Word
-            return $ CanonicalizeSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
-      | off == (#offset struct bfd_target, _bfd_print_symbol) =
-         do
-            val <- (#peek struct bfd_target, _bfd_print_symbol) buf :: IO Word
-            return $ PrintSymbol $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
-      | off == (#offset struct bfd_target, _bfd_get_dynamic_symtab_upper_bound) =
-         do
-            val <- (#peek struct bfd_target, _bfd_get_dynamic_symtab_upper_bound) buf :: IO Word
-            return $ GetDynamicSymtabUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
-      | off == (#offset struct bfd_target, _bfd_canonicalize_dynamic_symtab) =
-         do
-            val <- (#peek struct bfd_target, _bfd_canonicalize_dynamic_symtab) buf :: IO Word
-            return $ CanonicalizeDynamicSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
-      | off == (#offset struct bfd_target, _bfd_get_synthetic_symtab) =
-         do
-            val <- (#peek struct bfd_target, _bfd_get_synthetic_symtab) buf :: IO Word
-            return $ GetSyntheticSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
-      | off == (#offset struct bfd_target, _bfd_get_dynamic_reloc_upper_bound) =
-         do
-            val <- (#peek struct bfd_target, _bfd_get_dynamic_reloc_upper_bound) buf :: IO Word
-            return $ GetDynamicRelocUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
-      | off == (#offset struct bfd_target, _bfd_canonicalize_dynamic_reloc) =
-         do
-            val <- (#peek struct bfd_target, _bfd_canonicalize_dynamic_reloc) buf :: IO Word
-            return $ CanonicalizeDynamicReloc $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
-      | otherwise = error $ "internal error: Bfd.Target.peekByteOff " ++ show off
 
+-- --- Platform and Bfd ========================================================
 
--- | Return a list of target names that can possibly be interpreted by this
--- particular platform.
+-- | Returns the /Platform Target List/; that is, the target names that are 
+-- supported by the platform that /libbfd/ was compiled for.
 listSupported
    :: IO [TargetName]
 listSupported = 
@@ -181,49 +101,44 @@
       free pts                       -- FIXME is this dodgy?
       return res
 
--- | Set the default target name for use with 'open' etc. when 'TargetName' is
--- equal to \"default\" or empty.  Returns 'True' if successful.
+-- | Returns a handle to the target named 'TargetName'.  If /target/ is 
+-- 'Nothing', choose the one in the environment variable /GNUTARGET/; if that is
+-- null or not defined, then choose the first entry in the /Platform Target List/
+-- (see 'listSupported').
+-- 
+-- Passing the 'String' \"default\" as /target/ or setting the environment
+-- variable to \"default\" will cause the /Default Target/ to be returned (see 
+-- 'setDefault'), and the fact that the target is defaulted will be set in the
+-- BFD if /bfd/ isn't 'Nothing'.  This will cause 'checkFormat' to loop over all
+-- the targets to find the one that matches the file being read.
+find
+   :: Maybe TargetName -- ^ target
+   -> Maybe Bfd        -- ^ bfd
+   -> IO Target
+find mbTarg mbBfd =
+   do
+      targ <- maybe (return nullPtr) (\t -> newCString t) mbTarg
+      let
+         bfd = maybe nullPtr (\b -> ptr b) mbBfd
+      r <- c_bfd_find_target targ bfd
+      free targ
+      return r
+
+-- | Set the /Default Target/ for use when 'TargetName' is equal to \"default\"
+-- or 'Nothing' in the 'find' and 'open' functions.
 --
 -- /Possible exceptions:/ 'InvalidTarget'
 setDefault
    :: TargetName
-   -> IO Bool
+   -> IO ()
 setDefault tn =
    do
       r <- withCString tn (\s -> c_bfd_set_default_target s)
-      throwExceptionIfFalse "setDefault" tn (return $ toBool r)
+      _ <- throwExceptionIfFalse "setDefault" tn (return $ toBool r)
+      return ()
 
-getByteorder
-   :: Target
-   -> IO Endian
-getByteorder targ =
-   do
-      bo <- peekByteOff targ (#offset struct bfd_target, byteorder)
-      return $ unTarget'Byteorder bo
 
-getHeaderByteorder
-   :: Target
-   -> IO Endian
-getHeaderByteorder targ =
-   do
-      bo <- peekByteOff targ (#offset struct bfd_target, header_byteorder)
-      return $ unTarget'HeaderByteorder bo
-
-getObjectFlags
-   :: Target
-   -> IO [BfdFlags.Flags]
-getObjectFlags targ =
-   do
-      f <- peekByteOff targ (#offset struct bfd_target, object_flags)
-      return $ unTarget'ObjectFlags f
-
-getSectionFlags
-   :: Target
-   -> IO [SectionFlags.Flags]
-getSectionFlags targ =
-   do
-      f <- peekByteOff targ (#offset struct bfd_target, section_flags)
-      return $ unTarget'SectionFlags f
+-- === Attributes ==============================================================
 
 getFlavour
    :: Target
@@ -243,91 +158,54 @@
          tn' = unTarget'Name tn
       return tn'
 
+-- Byte Order ------------------------------------------------------------------
 
-getSymtabUpperBound
+getByteorder
    :: Target
-   -> Bfd
-   -> IO Int
-getSymtabUpperBound targ bfd =
+   -> IO Endian
+getByteorder targ =
    do
-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_symtab_upper_bound)
-      r <- d_Bfd_CLong (unTarget'GetSymtabUpperBound fn) $ ptr bfd
-      return $ fromIntegral r
+      bo <- peekByteOff targ (#offset struct bfd_target, byteorder)
+      return $ unTarget'Byteorder bo
 
-canonicalizeSymtab
+getHeaderByteorder
    :: Target
-   -> Bfd
-   -> Ptr Symbol
-   -> IO Int
-canonicalizeSymtab targ bfd ps =
+   -> IO Endian
+getHeaderByteorder targ =
    do
-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_symtab)
-      r <- d_Bfd_PtrSymbol_CLong (unTarget'CanonicalizeSymtab fn) (ptr bfd) ps
-      return $ fromIntegral r
+      bo <- peekByteOff targ (#offset struct bfd_target, header_byteorder)
+      return $ unTarget'HeaderByteorder bo
 
-getDynamicSymtabUpperBound
-   :: Target
-   -> Bfd
-   -> IO Int
-getDynamicSymtabUpperBound targ bfd =
-   do
-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_dynamic_symtab_upper_bound)
-      r <- d_Bfd_CLong (unTarget'GetDynamicSymtabUpperBound fn) (ptr bfd)
-      return $ fromIntegral r
+-- Flags -----------------------------------------------------------------------
 
-canonicalizeDynamicSymtab
+getObjectFlags
    :: Target
-   -> Bfd
-   -> Ptr Symbol
-   -> IO Int
-canonicalizeDynamicSymtab targ bfd ps =
+   -> IO [BfdFlags.Flags]
+getObjectFlags targ =
    do
-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_dynamic_symtab)
-      r <- d_Bfd_PtrSymbol_CLong (unTarget'CanonicalizeDynamicSymtab fn) (ptr bfd) ps
-      return $ fromIntegral r
+      f <- peekByteOff targ (#offset struct bfd_target, object_flags)
+      return $ unTarget'ObjectFlags f
 
-getSyntheticSymtab
+getSectionFlags
    :: Target
-   -> Bfd
-   -> SymbolTable
-   -> SymbolTable
-   -> Ptr Symbol
-   -> IO Int
-getSyntheticSymtab targ bfd sst dst synth =
+   -> IO [SectionFlags.Flags]
+getSectionFlags targ =
    do
-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_synthetic_symtab)
-      r <- d_Bfd_CLong_PtrSymbol_CLong_PtrSymbol_PtrSymbol_CLong (fn' fn) (ptr bfd) sts stp dts dtp synth
-      return $ fromIntegral r
-   where
-      fn' = unTarget'GetSyntheticSymtab
-      sts = fromIntegral $ tableSize sst
-      stp = tablePtr sst
-      dts = fromIntegral $ tableSize dst
-      dtp = tablePtr dst
+      f <- peekByteOff targ (#offset struct bfd_target, section_flags)
+      return $ unTarget'SectionFlags f
 
-getDynamicRelocUpperBound
-   :: Target
-   -> Bfd
-   -> IO Int
-getDynamicRelocUpperBound targ bfd =
-   do
-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_dynamic_reloc_upper_bound)
-      r <- d_Bfd_CLong (unTarget'GetDynamicRelocUpperBound fn) (ptr bfd)
-      return $ fromIntegral r
+-- Testing =====================================================================
 
-canonicalizeDynamicReloc
+-- | Returns 'True' if the 'Flavour' of the 'Target' is either 'Coff' or 'Xcoff'.
+--  Otherwise 'False'.
+isCoffFamily
    :: Target
-   -> Bfd
-   -> Ptr (Ptr Relocation)
-   -> Ptr Symbol
-   -> IO Int
-canonicalizeDynamicReloc targ bfd rels syms =
+   -> IO Bool
+isCoffFamily targ =
    do
-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_dynamic_reloc)
-      r <- d_Bfd_PtrPtrRelocation_PtrSymbol_CLong (unTarget'CanonicalizeDynamicReloc fn) (ptr bfd) rels syms
-      return $ fromIntegral r
+      flav <- getFlavour targ
+      return $ flav == Coff || flav == Xcoff
 
--- Testing =====================================================================
 -- Byte Order ------------------------------------------------------------------
 
 -- | Returns 'True' if the 'Target's byte order (see 'getByteorder') is 'Big'.
@@ -370,20 +248,145 @@
       bo <- getHeaderByteorder targ
       return $ bo == Little
 
--- Coff Family -----------------------------------------------------------------
+-- Internal ====================================================================
 
--- | Returns 'True' if the 'Flavour' of the 'Target' is either 'Coff' or 'Xcoff'.
---  Otherwise 'False'.
-isCoffFamily
-   :: Target
-   -> IO Bool
-isCoffFamily targ =
-   do
-      flav <- getFlavour targ
-      return $ flav == Coff || flav == Xcoff
+data Target' = Name                       TargetName
+             | Flavour                    Flavour
+             | Byteorder                  Endian
+             | HeaderByteorder            Endian
+             | ObjectFlags                [BfdFlags.Flags]
+             | SectionFlags               [SectionFlags.Flags]
+             | GetSymtabUpperBound        (FunPtr (Ptr Bfd' -> IO CLong))
+             | CanonicalizeSymtab         (FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong))
+             | PrintSymbol                (FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ()))
+             | GetDynamicSymtabUpperBound (FunPtr (Ptr Bfd' -> IO CLong))
+             | CanonicalizeDynamicSymtab  (FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong))
+             | GetSyntheticSymtab         (FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong))
+             | GetDynamicRelocUpperBound  (FunPtr (Ptr Bfd' -> IO CLong))
+             | CanonicalizeDynamicReloc   (FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong))
+     deriving (Show)
 
--- -----------------------------------------------------------------------------
+instance Storable Target' where
+   sizeOf _ = #size struct bfd_target
+   alignment = sizeOf
+   peekByteOff buf off
+      | off == (#offset struct bfd_target, name) =
+         do
+            val <- (#peek struct bfd_target, name) buf
+            s   <- peekCString val
+            return $ Bindings.Bfd.Target.Name s
+      | off == (#offset struct bfd_target, flavour) =
+         do
+            val <- (#peek struct bfd_target, flavour) buf :: IO CUInt
+            return $ Flavour $ toEnum $ fromIntegral val
+      | off == (#offset struct bfd_target, byteorder) =
+         do
+            val <- (#peek struct bfd_target, byteorder) buf :: IO CUInt
+            return $ Byteorder $ toEnum $ fromIntegral val
+      | off == (#offset struct bfd_target, header_byteorder) =
+         do
+            val <- (#peek struct bfd_target, header_byteorder) buf :: IO CUInt
+            return $ HeaderByteorder $ toEnum $ fromIntegral val
+      | off == (#offset struct bfd_target, object_flags) =
+         do
+            val <- (#peek struct bfd_target, object_flags) buf :: IO CUInt
+            let
+               flags = filter f $ enumFrom HasReloc
+                  where
+                     f e = val .&. (bit $ fromEnum e) /= 0
+            return $ ObjectFlags flags
+      | off == (#offset struct bfd_target, section_flags) =
+         do
+            val <- (#peek struct bfd_target, section_flags) buf :: IO CUInt
+            let
+               flags = filter f $ enumFrom Alloc
+                  where
+                     f e = val .&. (bit $ fromEnum e) /= 0
+            return $ SectionFlags flags
+      | off == (#offset struct bfd_target, _bfd_get_symtab_upper_bound) =
+         do
+            val <- (#peek struct bfd_target, _bfd_get_symtab_upper_bound) buf :: IO Word
+            return $ GetSymtabUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
+      | off == (#offset struct bfd_target, _bfd_canonicalize_symtab) =
+         do
+            val <- (#peek struct bfd_target, _bfd_canonicalize_symtab) buf :: IO Word
+            return $ CanonicalizeSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
+      | off == (#offset struct bfd_target, _bfd_print_symbol) =
+         do
+            val <- (#peek struct bfd_target, _bfd_print_symbol) buf :: IO Word
+            return $ PrintSymbol $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
+      | off == (#offset struct bfd_target, _bfd_get_dynamic_symtab_upper_bound) =
+         do
+            val <- (#peek struct bfd_target, _bfd_get_dynamic_symtab_upper_bound) buf :: IO Word
+            return $ GetDynamicSymtabUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
+      | off == (#offset struct bfd_target, _bfd_canonicalize_dynamic_symtab) =
+         do
+            val <- (#peek struct bfd_target, _bfd_canonicalize_dynamic_symtab) buf :: IO Word
+            return $ CanonicalizeDynamicSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
+      | off == (#offset struct bfd_target, _bfd_get_synthetic_symtab) =
+         do
+            val <- (#peek struct bfd_target, _bfd_get_synthetic_symtab) buf :: IO Word
+            return $ GetSyntheticSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
+      | off == (#offset struct bfd_target, _bfd_get_dynamic_reloc_upper_bound) =
+         do
+            val <- (#peek struct bfd_target, _bfd_get_dynamic_reloc_upper_bound) buf :: IO Word
+            return $ GetDynamicRelocUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
+      | off == (#offset struct bfd_target, _bfd_canonicalize_dynamic_reloc) =
+         do
+            val <- (#peek struct bfd_target, _bfd_canonicalize_dynamic_reloc) buf :: IO Word
+            return $ CanonicalizeDynamicReloc $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val
+      | otherwise = error $ "internal error: Bfd.Target.peekByteOff " ++ show off
 
+unTarget'CanonicalizeDynamicReloc
+   :: Target'
+   -> FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong)
+unTarget'CanonicalizeDynamicReloc (CanonicalizeDynamicReloc fn) = fn
+unTarget'CanonicalizeDynamicReloc _                             = error "unTarget'CanonicalizeDynamicReloc"
+
+unTarget'CanonicalizeDynamicSymtab
+   :: Target'
+   -> FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)
+unTarget'CanonicalizeDynamicSymtab (CanonicalizeDynamicSymtab fn) = fn
+unTarget'CanonicalizeDynamicSymtab _                              = error "unTarget'CanonicalizeDynamicSymtab"
+
+unTarget'CanonicalizeSymtab
+   :: Target'
+   -> FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)
+unTarget'CanonicalizeSymtab (CanonicalizeSymtab fn) = fn
+unTarget'CanonicalizeSymtab _                       = error "unTarget'CanonicalizeSymtab"
+
+unTarget'GetDynamicRelocUpperBound
+   :: Target'
+   -> FunPtr (Ptr Bfd' -> IO CLong)
+unTarget'GetDynamicRelocUpperBound (GetDynamicRelocUpperBound fn) = fn
+unTarget'GetDynamicRelocUpperBound _                              = error "unTarget'GetDynamicRelocUpperBound"
+
+unTarget'GetDynamicSymtabUpperBound
+   :: Target'
+   -> FunPtr (Ptr Bfd' -> IO CLong)
+unTarget'GetDynamicSymtabUpperBound (GetDynamicSymtabUpperBound fn) = fn
+unTarget'GetDynamicSymtabUpperBound _                               = error "unTarget'GetDynamicSymtabUpperBound"
+
+unTarget'GetSymtabUpperBound
+   :: Target'
+   -> FunPtr (Ptr Bfd' -> IO CLong)
+unTarget'GetSymtabUpperBound (GetSymtabUpperBound fn) = fn
+unTarget'GetSymtabUpperBound _                        = error "unTarget'GetSymtabUpperBound"
+
+unTarget'GetSyntheticSymtab
+   :: Target'
+   -> FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong)
+unTarget'GetSyntheticSymtab (GetSyntheticSymtab fn) = fn
+unTarget'GetSyntheticSymtab _                       = error "unTarget'GetSyntheticSymtab"
+
+unTarget'PrintSymbol
+   :: Target'
+   -> FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ())
+unTarget'PrintSymbol (PrintSymbol fn) = fn
+unTarget'PrintSymbol x                = error $ "internal error: unXVec2 " ++ show x
+
+-- PRIVATE #####################################################################
+
 unTarget'Name
    :: Target'
    -> TargetName
@@ -420,93 +423,17 @@
 unTarget'SectionFlags (SectionFlags b) = b
 unTarget'SectionFlags _                = error "unTarget'SectionFlags"
 
-unTarget'GetSymtabUpperBound
-   :: Target'
-   -> FunPtr (Ptr Bfd' -> IO CLong)
-unTarget'GetSymtabUpperBound (GetSymtabUpperBound fn) = fn
-unTarget'GetSymtabUpperBound _                        = error "unTarget'GetSymtabUpperBound"
-
-unTarget'CanonicalizeSymtab
-   :: Target'
-   -> FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)
-unTarget'CanonicalizeSymtab (CanonicalizeSymtab fn) = fn
-unTarget'CanonicalizeSymtab _                       = error "unTarget'CanonicalizeSymtab"
-
-unTarget'GetDynamicSymtabUpperBound
-   :: Target'
-   -> FunPtr (Ptr Bfd' -> IO CLong)
-unTarget'GetDynamicSymtabUpperBound (GetDynamicSymtabUpperBound fn) = fn
-unTarget'GetDynamicSymtabUpperBound _                               = error "unTarget'GetDynamicSymtabUpperBound"
-
-unTarget'CanonicalizeDynamicSymtab
-   :: Target'
-   -> FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)
-unTarget'CanonicalizeDynamicSymtab (CanonicalizeDynamicSymtab fn) = fn
-unTarget'CanonicalizeDynamicSymtab _                              = error "unTarget'CanonicalizeDynamicSymtab"
-
-unTarget'GetSyntheticSymtab
-   :: Target'
-   -> FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong)
-unTarget'GetSyntheticSymtab (GetSyntheticSymtab fn) = fn
-unTarget'GetSyntheticSymtab _                       = error "unTarget'GetSyntheticSymtab"
-
-unTarget'GetDynamicRelocUpperBound
-   :: Target'
-   -> FunPtr (Ptr Bfd' -> IO CLong)
-unTarget'GetDynamicRelocUpperBound (GetDynamicRelocUpperBound fn) = fn
-unTarget'GetDynamicRelocUpperBound _                              = error "unTarget'GetDynamicRelocUpperBound"
-
-unTarget'CanonicalizeDynamicReloc
-   :: Target'
-   -> FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong)
-unTarget'CanonicalizeDynamicReloc (CanonicalizeDynamicReloc fn) = fn
-unTarget'CanonicalizeDynamicReloc _                             = error "unTarget'CanonicalizeDynamicReloc"
-
-unXVec2
-   :: Target'
-   -> FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ())
-unXVec2 (PrintSymbol fn) = fn
-unXVec2 x                = error $ "internal error: unXVec2 " ++ show x
-
-
-getPrintSymbol
-   :: Target
-   -> Bfd
-   -> File
-   -> Symbol
-   -> IO (IO ())
-getPrintSymbol targ bfd file sym =
-   do 
-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_print_symbol)
-      let
-         f = d_Bfd_File_Symbol_CUInt_Void (unXVec2 fn) (ptr bfd) file sym 2
-      return f
-
--- -----------------------------------------------------------------------------
+-- Foreign ---------------------------------------------------------------------
 
 foreign import ccall unsafe "bfd.h bfd_target_list" c_bfd_target_list
    :: Ptr CString
 
+foreign import ccall unsafe "bfd.h bfd_find_target" c_bfd_find_target
+   :: CString
+   -> Ptr Bfd'
+   -> IO Target
+
 foreign import ccall unsafe "bfd.h bfd_set_default_target" c_bfd_set_default_target
    :: CString
    -> IO CInt
 
-foreign import ccall unsafe "dynamic" d_Bfd_CLong
-   :: FunPtr (Ptr Bfd' -> IO CLong)
-   -> (Ptr Bfd' -> IO CLong)
-
-foreign import ccall unsafe "dynamic" d_Bfd_CLong_PtrSymbol_CLong_PtrSymbol_PtrSymbol_CLong
-   :: FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong) 
-   -> (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong)
-
-foreign import ccall unsafe "dynamic" d_Bfd_PtrSymbol_CLong
-   :: FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)
-   -> (Ptr Bfd' -> Ptr Symbol -> IO CLong)
-
-foreign import ccall unsafe "dynamic" d_Bfd_PtrPtrRelocation_PtrSymbol_CLong
-   :: FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong) 
-   -> (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong)
-
-foreign import ccall unsafe "dynamic" d_Bfd_File_Symbol_CUInt_Void
-   :: FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ()) 
-   -> (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ())
