PageRenderTime 69ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 1ms

/compiler/parser/Lexer.hs

https://bitbucket.org/khibino/ghc-hack
Haskell | 2287 lines | 1459 code | 246 blank | 582 comment | 66 complexity | 348bfaa5f5aa34af327be0b285316727 MD5 | raw file
Possible License(s): BSD-3-Clause, BSD-2-Clause, LGPL-3.0
  1. {-# LANGUAGE CPP,MagicHash #-}
  2. {-# LINE 34 "compiler/parser/Lexer.x" #-}
  3. -- XXX The above flags turn off warnings in the generated code:
  4. {-# LANGUAGE BangPatterns #-}
  5. {-# OPTIONS_GHC -fno-warn-unused-matches #-}
  6. {-# OPTIONS_GHC -fno-warn-unused-binds #-}
  7. {-# OPTIONS_GHC -fno-warn-unused-imports #-}
  8. {-# OPTIONS_GHC -fno-warn-missing-signatures #-}
  9. -- But alex still generates some code that causes the "lazy unlifted bindings"
  10. -- warning, and old compilers don't know about it so we can't easily turn
  11. -- it off, so for now we use the sledge hammer:
  12. {-# OPTIONS_GHC -w #-}
  13. {-# OPTIONS_GHC -funbox-strict-fields #-}
  14. module Lexer (
  15. Token(..), lexer, pragState, mkPState, PState(..),
  16. P(..), ParseResult(..), getSrcLoc,
  17. getPState, getDynFlags, withThisPackage,
  18. failLocMsgP, failSpanMsgP, srcParseFail,
  19. getMessages,
  20. popContext, pushCurrentContext, setLastToken, setSrcLoc,
  21. activeContext, nextIsEOF,
  22. getLexState, popLexState, pushLexState,
  23. extension, bangPatEnabled, datatypeContextsEnabled,
  24. traditionalRecordSyntaxEnabled,
  25. addWarning,
  26. lexTokenStream
  27. ) where
  28. import Bag
  29. import ErrUtils
  30. import Outputable
  31. import StringBuffer
  32. import FastString
  33. import SrcLoc
  34. import UniqFM
  35. import DynFlags
  36. import Module
  37. import Ctype
  38. import BasicTypes ( InlineSpec(..), RuleMatchInfo(..), FractionalLit(..) )
  39. import Util ( readRational )
  40. import Control.Monad
  41. import Data.Bits
  42. import Data.Char
  43. import Data.List
  44. import Data.Maybe
  45. import Data.Map (Map)
  46. import qualified Data.Map as Map
  47. import Data.Ratio
  48. import Data.Word
  49. #if __GLASGOW_HASKELL__ >= 603
  50. #include "ghcconfig.h"
  51. #elif defined(__GLASGOW_HASKELL__)
  52. #include "config.h"
  53. #endif
  54. #if __GLASGOW_HASKELL__ >= 503
  55. import Data.Array
  56. import Data.Char (ord)
  57. import Data.Array.Base (unsafeAt)
  58. #else
  59. import Array
  60. import Char (ord)
  61. #endif
  62. #if __GLASGOW_HASKELL__ >= 503
  63. import GHC.Exts
  64. #else
  65. import GlaExts
  66. #endif
  67. alex_base :: AlexAddr
  68. alex_base = AlexA# "\x01\x00\x00\x00\x7b\x00\x00\x00\x84\x00\x00\x00\x8d\x00\x00\x00\xa9\x00\x00\x00\xb2\x00\x00\x00\xcc\x00\x00\x00\xf8\x00\x00\x00\x01\x01\x00\x00\xef\x00\x00\x00\x1d\x01\x00\x00\x58\x01\x00\x00\xfc\xff\xff\xff\xbb\x00\x00\x00\xfb\xff\xff\xff\x06\x00\x00\x00\xee\xff\xff\xff\x79\x00\x00\x00\x82\x00\x00\x00\xcd\x00\x00\x00\xe5\xff\xff\xff\xe6\xff\xff\xff\x8b\x00\x00\x00\xe7\xff\xff\xff\xe8\xff\xff\xff\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\xf6\x00\x00\x00\xca\x01\x00\x00\xcc\x01\x00\x00\xce\x01\x00\x00\xed\xff\xff\xff\x95\x00\x00\x00\x5d\x00\x00\x00\xf0\xff\xff\xff\xd6\x01\x00\x00\x2b\x02\x00\x00\x53\x02\x00\x00\x96\x02\x00\x00\xbe\x02\x00\x00\x11\x00\x00\x00\x14\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x77\x00\x00\x00\x78\x00\x00\x00\x81\x00\x00\x00\x89\x00\x00\x00\x8a\x00\x00\x00\x93\x00\x00\x00\x96\x00\x00\x00\x97\x00\x00\x00\x99\x00\x00\x00\x9f\x00\x00\x00\xa0\x00\x00\x00\xa1\x00\x00\x00\x01\x03\x00\x00\x29\x03\x00\x00\x6c\x03\x00\x00\x94\x03\x00\x00\xd7\x03\x00\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x27\x00\x00\x00\x41\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\xb7\x00\x00\x00\x62\x00\x00\x00\x57\x00\x00\x00\x63\x00\x00\x00\x6a\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x6e\x00\x00\x00\x61\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x3f\x04\x00\x00\xb9\x04\x00\x00\x33\x05\x00\x00\xad\x05\x00\x00\x27\x06\x00\x00\xa1\x06\x00\x00\x1b\x07\x00\x00\x95\x07\x00\x00\x0f\x08\x00\x00\x89\x08\x00\x00\x03\x09\x00\x00\x7d\x09\x00\x00\x56\x01\x00\x00\xf7\x09\x00\x00\x75\x0a\x00\x00\xf3\x0a\x00\x00\xd2\x00\x00\x00\xab\x01\x00\x00\x71\x0b\x00\x00\xef\x0b\x00\x00\x6d\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x72\x00\x00\x00\xeb\x0c\x00\x00\x65\x0d\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\xbf\x0d\x00\x00\x75\x00\x00\x00\xe2\x0d\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00\x00\x00\x00\x00\x02\x0e\x00\x00\x00\x00\x00\x00\x5e\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x0e\x00\x00\x00\x00\x00\x00\xf8\x0e\x00\x00\x00\x00\x00\x00\x52\x0f\x00\x00\x00\x00\x00\x00\xac\x0f\x00\x00\x00\x00\x00\x00\x06\x10\x00\x00\x46\x10\x00\x00\xa0\x10\x00\x00\xfa\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x11\x00\x00\xa8\x11\x00\x00\x63\x04\x00\x00\x00\x00\x00\x00\x02\x12\x00\x00\x5c\x12\x00\x00\x00\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x00\xb6\x12\x00\x00\x10\x13\x00\x00\x6a\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x13\x00\x00\x18\x14\x00\x00\x72\x14\x00\x00\xcc\x14\x00\x00\x06\x15\x00\x00\x60\x15\x00\x00\xde\x15\x00\x00\x38\x16\x00\x00\x92\x16\x00\x00\xec\x16\x00\x00\x46\x17\x00\x00\xa0\x17\x00\x00\xfa\x17\x00\x00\x54\x18\x00\x00\xae\x18\x00\x00\x08\x19\x00\x00\x62\x19\x00\x00\xbc\x19\x00\x00\xbe\x00\x00\x00\xe6\x00\x00\x00\xed\x00\x00\x00\xf0\x00\x00\x00\x16\x1a\x00\x00\x39\x1a\x00\x00\x5c\x1a\x00\x00\x7f\x1a\x00\x00\xa2\x1a\x00\x00\xc5\x1a\x00\x00\xe8\x1a\x00\x00\x06\x1b\x00\x00\xee\x01\x00\x00\x06\x02\x00\x00\xb5\x01\x00\x00\xb8\x15\x00\x00\xc4\x0c\x00\x00\x14\x04\x00\x00\x14\x05\x00\x00\x8e\x05\x00\x00\xae\x04\x00\x00\x24\x05\x00\x00\x9e\x05\x00\x00\x0a\x06\x00\x00\x18\x06\x00\x00\xf3\x00\x00\x00\xf4\x00\x00\x00\xfa\x00\x00\x00\x00\x00\x00\x00\x4f\x1b\x00\x00\x97\x06\x00\x00\x00\x00\x00\x00\x0e\x02\x00\x00\x12\x03\x00\x00\x00\x00\x00\x00\x98\x1b\x00\x00\xaf\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x00\x00\x00\x11\x07\x00\x00\x76\x07\x00\x00\xf0\x07\x00\x00\x7f\x06\x00\x00\x86\x07\x00\x00\xf9\x06\x00\x00\x00\x08\x00\x00\x67\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
  69. alex_table :: AlexAddr
  70. alex_table = AlexA# "\x00\x00\x0c\x00\xad\x00\xb3\x00\x0e\x00\xbe\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0e\x00\x57\x00\x0c\x00\x0c\x00\x0c\x00\x0f\x00\xff\xff\x5c\x00\x10\x00\x10\x00\x12\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\xff\xff\x0c\x00\x28\x00\xff\xff\xff\xff\xff\xff\x0c\x00\xbe\x00\xe9\x00\x75\x00\x8b\x00\xbe\x00\xbe\x00\xe8\x00\x95\x00\x9d\x00\xbe\x00\xbe\x00\xa0\x00\x25\x00\xbe\x00\xbe\x00\xc1\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\x7d\x00\xa1\x00\xbe\x00\xbe\x00\xbe\x00\x99\x00\xbe\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\x7b\x00\xbe\x00\x9f\x00\xbe\x00\xb3\x00\xa2\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\x18\x00\x88\x00\xa3\x00\xbe\x00\x0c\x00\xff\xff\xff\xff\xff\xff\x0e\x00\x40\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x26\x00\xff\xff\x41\x00\x0e\x00\x51\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\xff\xff\xff\xff\xff\xff\x0e\x00\x51\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x5d\x00\xff\xff\x42\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x0c\x00\x5e\x00\x78\x00\x53\x00\x21\x00\xff\xff\xff\xff\xff\xff\x78\x00\x0c\x00\x0c\x00\x43\x00\x53\x00\x21\x00\x0e\x00\x44\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x11\x00\x46\x00\x21\x00\x0e\x00\x4f\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\x46\x00\x27\x00\x47\x00\x49\x00\xff\xff\x0d\x00\x0d\x00\x0d\x00\x0c\x00\x4a\x00\x4b\x00\x4c\x00\x4e\x00\x4e\x00\x54\x00\x56\x00\x0c\x00\x0c\x00\x52\x00\x55\x00\x0e\x00\x21\x00\x0c\x00\x0c\x00\x0c\x00\x6e\x00\x0d\x00\xff\xff\x70\x00\x76\x00\x21\x00\x78\x00\xb6\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x0c\x00\x79\x00\x66\x00\x6d\x00\x5f\x00\x78\x00\x73\x00\x9a\x00\x0c\x00\x00\x00\x15\x00\x78\x00\x0e\x00\x21\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\x78\x00\x14\x00\xff\xff\x0f\x00\xff\xff\x0d\x00\x0d\x00\x0d\x00\x0c\x00\x45\x00\x14\x00\xb7\x00\x0e\x00\x4d\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\xb8\x00\x6b\x00\x00\x00\xb9\x00\x00\x00\x78\x00\xdb\x00\xdc\x00\x0d\x00\x2e\x00\x2e\x00\x78\x00\x21\x00\xdd\x00\xe7\x00\x00\x00\x2e\x00\x0c\x00\x0c\x00\x00\x00\x15\x00\x22\x00\x0e\x00\x00\x00\x0c\x00\x0c\x00\x0c\x00\x78\x00\x00\x00\x15\x00\x21\x00\x00\x00\x00\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x78\x00\x23\x00\x00\x00\x94\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\xb2\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x57\x00\x0c\x00\x0c\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x74\x00\x15\x00\x00\x00\x00\x00\x00\x00\x9c\x00\x9d\x00\x00\x00\x00\x00\xa0\x00\x24\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\xac\x00\x9e\x00\x00\x00\x9f\x00\x00\x00\xb2\x00\xa2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\xb2\x00\x17\x00\xff\xff\xa3\x00\xff\xff\x00\x00\xff\xff\x00\x00\xbf\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\x2f\x00\x2f\x00\x30\x00\x32\x00\x31\x00\x32\x00\x00\x00\x2f\x00\x00\x00\x32\x00\xbf\x00\x32\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\x00\x00\x29\x00\xbf\x00\xbf\x00\xd3\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xbf\x00\xcf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\x2f\x00\xd0\x00\x32\x00\x00\x00\x32\x00\x00\x00\x00\x00\xff\xff\x00\x00\xd5\x00\xbf\x00\xcd\x00\xbf\x00\xff\xff\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\x2f\x00\x00\x00\x32\x00\x00\x00\x32\x00\x1d\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xbf\x00\xcd\x00\xbf\x00\xff\xff\xff\xff\x68\x00\x3a\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x68\x00\x00\x00\x68\x00\x68\x00\x68\x00\x68\x00\x00\x00\x00\x00\x00\x00\x68\x00\x68\x00\x00\x00\x3b\x00\x68\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xbf\x00\x3a\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\x00\x00\x3c\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x68\x00\x3d\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\xff\xff\xbf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd6\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\xd6\x00\x68\x00\x00\x00\x68\x00\x68\x00\x68\x00\x68\x00\x00\x00\x00\x00\x00\x00\x68\x00\x68\x00\x00\x00\x3e\x00\x68\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\xff\xff\x3f\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\xbf\x00\x68\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x3d\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x68\x00\x68\x00\x68\x00\x68\x00\x00\x00\x00\x00\x00\x00\x68\x00\x68\x00\xbf\x00\x3e\x00\x68\x00\x68\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x68\x00\xff\xff\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\x00\x00\x3f\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x68\x00\x00\x00\xde\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x58\x00\x58\x00\x58\x00\x00\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\xcb\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x59\x00\x59\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\xff\xff\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\xc7\x00\x00\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x5a\x00\x5a\x00\x5a\x00\xde\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\x00\x00\xcc\x00\x00\x00\xcc\x00\x00\x00\x72\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5b\x00\x5b\x00\x5b\x00\xde\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x58\x00\x58\x00\x58\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x60\x00\x60\x00\x60\x00\xce\x00\x00\x00\xce\x00\x00\x00\x00\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x60\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x59\x00\x59\x00\x59\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x61\x00\x61\x00\x61\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x62\x00\x62\x00\x62\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5b\x00\x5b\x00\x5b\x00\xde\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x63\x00\x63\x00\x63\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x00\x00\xe4\x00\x00\x00\xe4\x00\x00\x00\x63\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x58\x00\x58\x00\x58\x00\xde\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x60\x00\x60\x00\x60\x00\x00\x00\x00\x00\x00\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\xe6\x00\x00\x00\xe6\x00\x00\x00\x60\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x59\x00\x59\x00\x59\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x61\x00\x61\x00\x61\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x62\x00\x62\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x63\x00\x63\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x67\x00\x67\x00\x67\x00\x67\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x67\x00\x65\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x67\x00\x65\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x67\x00\x65\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x6c\x00\x6a\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x6c\x00\x6a\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x6c\x00\x6a\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x71\x00\x71\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x71\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x9b\x00\xbf\x00\xbf\x00\x00\x00\x77\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x92\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x7a\x00\xbf\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x73\x00\xbf\x00\x92\x00\xc0\x00\x92\x00\x92\x00\x92\x00\x84\x00\x80\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\x82\x00\x92\x00\x92\x00\x92\x00\x86\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\x00\x00\x7e\x00\xc0\x00\x00\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\x00\x00\x00\x00\x00\x00\xc0\x00\xc0\x00\x00\x00\xc0\x00\xc0\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\x93\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x7c\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x93\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x93\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x93\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x93\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\xbf\x00\x85\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x96\x00\xbf\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x87\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x8a\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x89\x00\x00\x00\xbf\x00\x8a\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x8c\x00\x00\x00\xbf\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x8f\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x89\x00\x00\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x8f\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x00\x00\x8f\x00\x00\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x93\x00\x93\x00\x93\x00\x00\x00\x8f\x00\x00\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x8f\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x93\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x98\x00\x98\x00\x98\x00\x00\x00\x93\x00\x00\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x00\x00\x98\x00\x00\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x00\x00\x97\x00\x00\x00\xbf\x00\x98\x00\x00\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\x98\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa6\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x97\x00\x00\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\x97\x00\xa6\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\xa6\x00\x00\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa6\x00\xa6\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\xa6\x00\x00\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\xaa\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xaa\x00\xab\x00\xa5\x00\x00\x00\xba\x00\xa4\x00\x00\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xba\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\x00\x00\x00\x00\x00\x00\xba\x00\xba\x00\x00\x00\xba\x00\xba\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\xab\x00\x00\x00\xba\x00\x00\x00\xba\x00\xa5\x00\x00\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xa5\x00\xd1\x00\xba\x00\x00\x00\xba\x00\xae\x00\xae\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\x00\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xaf\x00\xaf\x00\xaf\x00\x00\x00\xae\x00\x00\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xb0\x00\xb0\x00\xb0\x00\x00\x00\xaf\x00\x00\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\xb0\x00\x00\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xae\x00\xae\x00\xae\x00\x00\x00\xb1\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xaf\x00\xaf\x00\xaf\x00\x00\x00\xae\x00\x00\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xb0\x00\xb0\x00\xb0\x00\x00\x00\xaf\x00\x00\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\xb0\x00\x00\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb4\x00\xb4\x00\xb4\x00\x00\x00\xb1\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb4\x00\xb4\x00\xb4\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\xb4\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xbb\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xbb\x00\x00\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\x00\x00\x00\x00\xbb\x00\xbb\x00\x00\x00\xbb\x00\xbb\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbd\x00\x00\x00\x00\x00\xbb\x00\xbb\x00\x00\x00\xbb\x00\xbb\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\xbb\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\x00\x00\x00\x00\xbd\x00\xbd\x00\x00\x00\xbd\x00\xbd\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbb\x00\xbb\x00\xbd\x00\xbb\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\xbf\x00\x00\x00\x00\x00\xbd\x00\xbd\x00\x00\x00\xbd\x00\xbd\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbb\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\xbd\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\xbd\x00\xbd\x00\xbf\x00\xbd\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xc0\x00\x00\x00\x00\x00\xbf\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\xbd\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\x00\x00\x00\x00\x00\x00\xc0\x00\xc0\x00\x00\x00\xc0\x00\xc0\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xbf\x00\xc0\x00\xbf\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\xc0\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xc6\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x00\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
  71. alex_check :: AlexAddr
  72. alex_check = AlexA# "\xff\xff\x05\x00\x01\x00\x02\x00\x09\x00\x04\x00\x05\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x23\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x2d\x00\x0a\x00\x20\x00\x2d\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x05\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x2d\x00\x0a\x00\x65\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x23\x00\x0a\x00\x23\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x20\x00\x23\x00\x24\x00\x23\x00\x2d\x00\x0a\x00\x0a\x00\x0a\x00\x2a\x00\x20\x00\x05\x00\x6e\x00\x23\x00\x2d\x00\x09\x00\x69\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x2d\x00\x0a\x00\x2d\x00\x09\x00\x21\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x0a\x00\x2d\x00\x61\x00\x6d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x67\x00\x61\x00\x72\x00\x0a\x00\x0a\x00\x6e\x00\x6c\x00\x05\x00\x20\x00\x65\x00\x69\x00\x09\x00\x2d\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x20\x00\x0a\x00\x2d\x00\x2d\x00\x2d\x00\x5e\x00\x23\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x20\x00\x22\x00\x7d\x00\x23\x00\x24\x00\x7d\x00\x23\x00\x05\x00\xff\xff\x7b\x00\x2a\x00\x09\x00\x2d\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x7c\x00\x7b\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x6c\x00\x7b\x00\x23\x00\x09\x00\x70\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x23\x00\x22\x00\xff\xff\x23\x00\xff\xff\x24\x00\x23\x00\x23\x00\x20\x00\x23\x00\x24\x00\x2a\x00\x2d\x00\x23\x00\x23\x00\xff\xff\x2a\x00\x20\x00\x05\x00\xff\xff\x7b\x00\x2d\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\x5e\x00\xff\xff\x7b\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\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7c\x00\x2d\x00\xff\xff\x7c\x00\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x7b\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x0a\x00\x7d\x00\x0a\x00\xff\xff\x0a\x00\xff\xff\x04\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\x23\x00\x24\x00\x23\x00\x24\x00\x23\x00\x24\x00\xff\xff\x2a\x00\xff\xff\x2a\x00\x21\x00\x2a\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x23\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\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\x5e\x00\x23\x00\x5e\x00\xff\xff\x5e\x00\xff\xff\xff\xff\x04\x00\xff\xff\x23\x00\x5c\x00\x45\x00\x5e\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x7c\x00\xff\xff\x7c\x00\xff\xff\x7c\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x7c\x00\x65\x00\x7e\x00\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\x23\x00\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x02\x00\x03\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x00\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\x65\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\x0a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\x23\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\x2b\x00\xff\xff\x2d\x00\xff\xff\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\x23\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2b\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x65\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x65\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\x23\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\x2b\x00\xff\xff\x2d\x00\xff\xff\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\x23\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\x2b\x00\xff\xff\x2d\x00\xff\xff\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x04\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\x02\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x7d\x00\x7e\x00\x5f\x00\x04\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x04\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\x7c\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x02\x00\xff\xff\x04\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x28\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\x7c\x00\xff\xff\x7e\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x02\x00\xff\xff\x04\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\x7c\x00\xff\xff\x7e\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\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\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x23\x00\x7c\x00\xff\xff\x7e\x00\x01\x00\x02\x00\x03\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x01\x00\x02\x00\x03\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x04\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x23\x00\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\x7c\x00\xff\xff\x7e\x00\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x78\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x78\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
  73. alex_deflt :: AlexAddr
  74. alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\x68\x00\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\xff\xff\x1b\x00\x1c\x00\x1b\x00\x1c\x00\x19\x00\x1a\x00\x19\x00\x19\x00\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2a\x00\x2a\x00\x2c\x00\x2d\x00\x2c\x00\x2d\x00\x33\x00\x34\x00\x33\x00\x35\x00\x33\x00\x33\x00\x34\x00\x35\x00\x38\x00\x39\x00\x38\x00\x39\x00\x36\x00\x37\x00\x36\x00\x36\x00\x37\x00\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
  75. alex_accept = listArray (0::Int,233) [[],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[],[],[(AlexAcc (alex_action_24))],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_1))],[(AlexAcc (alex_action_1))],[(AlexAccPred (alex_action_2) ( isNormalComment ))],[(AlexAccPred (alex_action_2) ( isNormalComment )),(AlexAcc (alex_action_24))],[(AlexAccPred (alex_action_2) ( isNormalComment ))],[(AlexAccPred (alex_action_2) ( isNormalComment ))],[(AlexAccPred (alex_action_14) ( notFollowedBy '-' ))],[],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAccPred (alex_action_8) ( atEOL ))],[(AlexAccPred (alex_action_8) ( atEOL )),(AlexAcc (alex_action_24))],[(AlexAccPred (alex_action_8) ( atEOL ))],[(AlexAccPred (alex_action_8) ( atEOL ))],[],[(AlexAcc (alex_action_24))],[],[],[(AlexAcc (alex_action_75))],[(AlexAccPred (alex_action_7) ( atEOL ))],[(AlexAccPred (alex_action_7) ( atEOL )),(AlexAcc (alex_action_24))],[(AlexAccPred (alex_action_7) ( atEOL ))],[(AlexAccPred (alex_action_7) ( atEOL )),(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_4))],[(AlexAccPred (alex_action_5) ( ifExtension (not . haddockEnabled) ))],[(AlexAccPred (alex_action_5) ( ifExtension (not . haddockEnabled) )),(AlexAcc (alex_action_24))],[(AlexAccPred (alex_action_5) ( ifExtension (not . haddockEnabled) )),(AlexAcc (alex_action_33))],[(AlexAccPred (alex_action_5) ( ifExtension (not . haddockEnabled) )),(AlexAcc (alex_action_35))],[(AlexAccPred (alex_action_5) ( ifExtension (not . haddockEnabled) )),(AlexAccPred (alex_action_37) ( ifExtension haddockEnabled ))],[(AlexAccPred (alex_action_5) ( ifExtension (not . haddockEnabled) ))],[(AlexAccPred (alex_action_5) ( ifExtension (not . haddockEnabled) )),(AlexAcc (alex_action_24))],[(AlexAccPred (alex_action_5) ( ifExtension (not . haddockEnabled) )),(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_6))],[(AlexAccPred (alex_action_7) ( atEOL ))],[(AlexAccPred (alex_action_7) ( atEOL )),(AlexAcc (alex_action_24))],[(AlexAccPred (alex_action_7) ( atEOL )),(AlexAcc (alex_action_75))],[(AlexAccPred (alex_action_7) ( atEOL ))],[(AlexAccPred (alex_action_7) ( atEOL )),(AlexAcc (alex_action_24))],[(AlexAccPred (alex_action_7) ( atEOL )),(AlexAcc (alex_action_75))],[(AlexAccSkip)],[(AlexAccPred (alex_action_10) (alexPrevCharIs '\n'))],[(AlexAccPred (alex_action_10) (alexPrevCharIs '\n'))],[],[],[],[(AlexAccSkipPred (alexPrevCharIs '\n'))],[],[],[],[],[],[],[],[(AlexAccSkipPred (alexPrevCharIs '\n'))],[],[],[(AlexAccSkip)],[(AlexAccPred (alex_action_16) (alexPrevCharIs '\n'))],[(AlexAccPred (alex_action_16) (alexPrevCharIs '\n'))],[],[],[],[(AlexAcc (alex_action_20))],[(AlexAccPred (alex_action_21) ( known_pragma linePrags ))],[(AlexAccPred (alex_action_21) ( known_pragma linePrags )),(AlexAcc (alex_action_24))],[(AlexAccPred (alex_action_21) ( known_pragma linePrags )),(AlexAccPred (alex_action_29) ( known_pragma oneWordPrags )),(AlexAccPred (alex_action_30) ( known_pragma ignoredPrags )),(AlexAccPred (alex_action_32) ( known_pragma fileHeaderPrags ))],[(AlexAccPred (alex_action_21) ( known_pragma linePrags )),(AlexAccPred (alex_action_29) ( known_pragma oneWordPrags )),(AlexAccPred (alex_action_30) ( known_pragma ignoredPrags )),(AlexAccPred (alex_action_34) ( known_pragma fileHeaderPrags ))],[],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_36))],[],[(AlexAcc (alex_action_24))],[],[],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[],[],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_26))],[],[],[(AlexAcc (alex_action_27))],[(AlexAcc (alex_action_27))],[],[],[(AlexAccPred (alex_action_28) ( known_pragma twoWordPrags ))],[],[(AlexAcc (alex_action_31))],[],[(AlexAcc (alex_action_75))],[],[(AlexAcc (alex_action_75))],[(AlexAccPred (alex_action_38) ( ifExtension haddockEnabled ))],[],[(AlexAccPred (alex_action_39) ( ifExtension parrEnabled ))],[(AlexAcc (alex_action_58))],[(AlexAccPred (alex_action_40) ( ifExtension parrEnabled ))],[(AlexAcc (alex_action_76))],[(AlexAccPred (alex_action_41) ( ifExtension thEnabled ))],[(AlexAccPred (alex_action_42) ( ifExtension thEnabled )),(AlexAccPred (alex_action_50) ( ifExtension qqEnabled ))],[],[(AlexAccPred (alex_action_43) ( ifExtension thEnabled )),(AlexAccPred (alex_action_50) ( ifExtension qqEnabled ))],[],[(AlexAccPred (alex_action_44) ( ifExtension thEnabled )),(AlexAccPred (alex_action_50) ( ifExtension qqEnabled ))],[],[(AlexAccPred (alex_action_45) ( ifExtension thEnabled )),(AlexAccPred (alex_action_50) ( ifExtension qqEnabled ))],[],[(AlexAccPred (alex_action_46) ( ifExtension thEnabled ))],[(AlexAcc (alex_action_75))],[(AlexAccPred (alex_action_47) ( ifExtension thEnabled ))],[(AlexAccPred (alex_action_47) ( ifExtension thEnabled ))],[(AlexAcc (alex_action_75))],[(AlexAccPred (alex_action_48) ( ifExtension thEnabled ))],[(AlexAccPred (alex_action_49) ( ifExtension qqEnabled ))],[],[],[],[(AlexAccPred (alex_action_50) ( ifExtension qqEnabled ))],[],[],[(AlexAccPred (alex_action_51) ( ifExtension arrowsEnabled `alexAndPred` notFollowedBySymbol ))],[(AlexAcc (alex_action_56))],[(AlexAccPred (alex_action_52) ( ifExtension arrowsEnabled ))],[(AlexAccPred (alex_action_53) ( ifExtension ipEnabled ))],[(AlexAccPred (alex_action_53) ( ifExtension ipEnabled ))],[(AlexAcc (alex_action_75))],[(AlexAccPred (alex_action_54) ( ifExtension unboxedTuplesEnabled `alexAndPred` notFollowedBySymbol ))],[(AlexAccPred (alex_action_55) ( ifExtension unboxedTuplesEnabled ))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_65))],[],[],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_67))],[(AlexAccPred (alex_action_69) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_70) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_71) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_72) ( ifExtension magicHashEnabled ))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[],[(AlexAcc (alex_action_79))],[],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_80))],[],[],[],[],[],[(AlexAccPred (alex_action_81) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_82) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_83) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_84) ( ifExtension magicHashEnabled ))],[],[],[(AlexAccPred (alex_action_85) ( ifExtension magicHashEnabled ))],[],[],[(AlexAccPred (alex_action_86) ( ifExtension magicHashEnabled ))],[],[],[(AlexAccPred (alex_action_87) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_88) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_89) ( ifExtension magicHashEnabled ))],[(AlexAccPred (alex_action_90) ( ifExtension magicHashEnabled ))],[],[],[],[],[],[],[],[],[(AlexAccPred (alex_action_91) ( ifExtension magicHashEnabled ))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_93))]]
  76. {-# LINE 419 "compiler/parser/Lexer.x" #-}
  77. -- -----------------------------------------------------------------------------
  78. -- The token type
  79. data Token
  80. = ITas -- Haskell keywords
  81. | ITcase
  82. | ITclass
  83. | ITdata
  84. | ITdefault
  85. | ITderiving
  86. | ITdo
  87. | ITelse
  88. | IThiding
  89. | ITif
  90. | ITimport
  91. | ITin
  92. | ITinfix
  93. | ITinfixl
  94. | ITinfixr
  95. | ITinstance
  96. | ITlet
  97. | ITmodule
  98. | ITnewtype
  99. | ITof
  100. | ITqualified
  101. | ITthen
  102. | ITtype
  103. | ITwhere
  104. | ITscc -- ToDo: remove (we use {-# SCC "..." #-} now)
  105. | ITforall -- GHC extension keywords
  106. | ITforeign
  107. | ITexport
  108. | ITlabel
  109. | ITdynamic
  110. | ITsafe
  111. | ITinterruptible
  112. | ITunsafe
  113. | ITstdcallconv
  114. | ITccallconv
  115. | ITcapiconv
  116. | ITprimcallconv
  117. | ITmdo
  118. | ITfamily
  119. | ITgroup
  120. | ITby
  121. | ITusing
  122. -- Pragmas
  123. | ITinline_prag InlineSpec RuleMatchInfo
  124. | ITspec_prag -- SPECIALISE
  125. | ITspec_inline_prag Bool -- SPECIALISE INLINE (or NOINLINE)
  126. | ITsource_prag
  127. | ITrules_prag
  128. | ITwarning_prag
  129. | ITdeprecated_prag
  130. | ITline_prag
  131. | ITscc_prag
  132. | ITgenerated_prag
  133. | ITcore_prag -- hdaume: core annotations
  134. | ITunpack_prag
  135. | ITnounpack_prag
  136. | ITann_prag
  137. | ITclose_prag
  138. | IToptions_prag String
  139. | ITinclude_prag String
  140. | ITlanguage_prag
  141. | ITvect_prag
  142. | ITvect_scalar_prag
  143. | ITnovect_prag
  144. | ITdotdot -- reserved symbols
  145. | ITcolon
  146. | ITdcolon
  147. | ITequal
  148. | ITlam
  149. | ITvbar
  150. | ITlarrow
  151. | ITrarrow
  152. | ITat
  153. | ITtilde
  154. | ITtildehsh
  155. | ITdarrow
  156. | ITminus
  157. | ITbang
  158. | ITstar
  159. | ITdot
  160. | ITbiglam -- GHC-extension symbols
  161. | ITocurly -- special symbols
  162. | ITccurly
  163. | ITocurlybar -- {|, for type applications
  164. | ITccurlybar -- |}, for type applications
  165. | ITvocurly
  166. | ITvccurly
  167. | ITobrack
  168. | ITopabrack -- [:, for parallel arrays with -XParallelArrays
  169. | ITcpabrack -- :], for parallel arrays with -XParallelArrays
  170. | ITcbrack
  171. | IToparen
  172. | ITcparen
  173. | IToubxparen
  174. | ITcubxparen
  175. | ITsemi
  176. | ITcomma
  177. | ITunderscore
  178. | ITbackquote
  179. | ITsimpleQuote -- '
  180. | ITvarid FastString -- identifiers
  181. | ITconid FastString
  182. | ITvarsym FastString
  183. | ITconsym FastString
  184. | ITqvarid (FastString,FastString)
  185. | ITqconid (FastString,FastString)
  186. | ITqvarsym (FastString,FastString)
  187. | ITqconsym (FastString,FastString)
  188. | ITprefixqvarsym (FastString,FastString)
  189. | ITprefixqconsym (FastString,FastString)
  190. | ITdupipvarid FastString -- GHC extension: implicit param: ?x
  191. | ITchar Char
  192. | ITstring FastString
  193. | ITinteger Integer
  194. | ITrational FractionalLit
  195. | ITprimchar Char
  196. | ITprimstring FastString
  197. | ITprimint Integer
  198. | ITprimword Integer
  199. | ITprimfloat FractionalLit
  200. | ITprimdouble FractionalLit
  201. -- Template Haskell extension tokens
  202. | ITopenExpQuote -- [| or [e|
  203. | ITopenPatQuote -- [p|
  204. | ITopenDecQuote -- [d|
  205. | ITopenTypQuote -- [t|
  206. | ITcloseQuote -- |]
  207. | ITidEscape FastString -- $x
  208. | ITparenEscape -- $(
  209. | ITtyQuote -- ''
  210. | ITquasiQuote (FastString,FastString,RealSrcSpan) -- [:...|...|]
  211. -- Arrow notation extension
  212. | ITproc
  213. | ITrec
  214. | IToparenbar -- (|
  215. | ITcparenbar -- |)
  216. | ITlarrowtail -- -<
  217. | ITrarrowtail -- >-
  218. | ITLarrowtail -- -<<
  219. | ITRarrowtail -- >>-
  220. | ITunknown String -- Used when the lexer can't make sense of it
  221. | ITeof -- end of file token
  222. -- Documentation annotations
  223. | ITdocCommentNext String -- something beginning '-- |'
  224. | ITdocCommentPrev String -- something beginning '-- ^'
  225. | ITdocCommentNamed String -- something beginning '-- $'
  226. | ITdocSection Int String -- a section heading
  227. | ITdocOptions String -- doc options (prune, ignore-exports, etc)
  228. | ITdocOptionsOld String -- doc options declared "-- # ..."-style
  229. | ITlineComment String -- comment starting by "--"
  230. | ITblockComment String -- comment in {- -}
  231. deriving Show
  232. -- the bitmap provided as the third component indicates whether the
  233. -- corresponding extension keyword is valid under the extension options
  234. -- provided to the compiler; if the extension corresponding to *any* of the
  235. -- bits set in the bitmap is enabled, the keyword is valid (this setup
  236. -- facilitates using a keyword in two different extensions that can be
  237. -- activated independently)
  238. --
  239. reservedWordsFM :: UniqFM (Token, Int)
  240. reservedWordsFM = listToUFM $
  241. map (\(x, y, z) -> (mkFastString x, (y, z)))
  242. [( "_", ITunderscore, 0 ),
  243. ( "as", ITas, 0 ),
  244. ( "case", ITcase, 0 ),
  245. ( "class", ITclass, 0 ),
  246. ( "data", ITdata, 0 ),
  247. ( "default", ITdefault, 0 ),
  248. ( "deriving", ITderiving, 0 ),
  249. ( "do", ITdo, 0 ),
  250. ( "else", ITelse, 0 ),
  251. ( "hiding", IThiding, 0 ),
  252. ( "if", ITif, 0 ),
  253. ( "import", ITimport, 0 ),
  254. ( "in", ITin, 0 ),
  255. ( "infix", ITinfix, 0 ),
  256. ( "infixl", ITinfixl, 0 ),
  257. ( "infixr", ITinfixr, 0 ),
  258. ( "instance", ITinstance, 0 ),
  259. ( "let", ITlet, 0 ),
  260. ( "module", ITmodule, 0 ),
  261. ( "newtype", ITnewtype, 0 ),
  262. ( "of", ITof, 0 ),
  263. ( "qualified", ITqualified, 0 ),
  264. ( "then", ITthen, 0 ),
  265. ( "type", ITtype, 0 ),
  266. ( "where", ITwhere, 0 ),
  267. ( "_scc_", ITscc, 0 ), -- ToDo: remove
  268. ( "forall", ITforall, bit explicitForallBit .|.
  269. bit inRulePragBit),
  270. ( "mdo", ITmdo, bit recursiveDoBit),
  271. ( "family", ITfamily, bit tyFamBit),
  272. ( "group", ITgroup, bit transformComprehensionsBit),
  273. ( "by", ITby, bit transformComprehensionsBit),
  274. ( "using", ITusing, bit transformComprehensionsBit),
  275. ( "foreign", ITforeign, bit ffiBit),
  276. ( "export", ITexport, bit ffiBit),
  277. ( "label", ITlabel, bit ffiBit),
  278. ( "dynamic", ITdynamic, bit ffiBit),
  279. ( "safe", ITsafe, bit ffiBit .|.
  280. bit safeHaskellBit),
  281. ( "interruptible", ITinterruptible, bit interruptibleFfiBit),
  282. ( "unsafe", ITunsafe, bit ffiBit),
  283. ( "stdcall", ITstdcallconv, bit ffiBit),
  284. ( "ccall", ITccallconv, bit ffiBit),
  285. ( "capi", ITcapiconv, bit cApiFfiBit),
  286. ( "prim", ITprimcallconv, bit ffiBit),
  287. ( "rec", ITrec, bit recBit),
  288. ( "proc", ITproc, bit arrowsBit)
  289. ]
  290. reservedSymsFM :: UniqFM (Token, Int -> Bool)
  291. reservedSymsFM = listToUFM $
  292. map (\ (x,y,z) -> (mkFastString x,(y,z)))
  293. [ ("..", ITdotdot, always)
  294. -- (:) is a reserved op, meaning only list cons
  295. ,(":", ITcolon, always)
  296. ,("::", ITdcolon, always)
  297. ,("=", ITequal, always)
  298. ,("\\", ITlam, always)
  299. ,("|", ITvbar, always)
  300. ,("<-", ITlarrow, always)
  301. ,("->", ITrarrow, always)
  302. ,("@", ITat, always)
  303. ,("~", ITtilde, always)
  304. ,("~#", ITtildehsh, always)
  305. ,("=>", ITdarrow, always)
  306. ,("-", ITminus, always)
  307. ,("!", ITbang, always)
  308. -- For data T (a::*) = MkT
  309. ,("*", ITstar, always) -- \i -> kindSigsEnabled i || tyFamEnabled i)
  310. -- For 'forall a . t'
  311. ,(".", ITdot, always) -- \i -> explicitForallEnabled i || inRulePrag i)
  312. ,("-<", ITlarrowtail, arrowsEnabled)
  313. ,(">-", ITrarrowtail, arrowsEnabled)
  314. ,("-<<", ITLarrowtail, arrowsEnabled)
  315. ,(">>-", ITRarrowtail, arrowsEnabled)
  316. ,("∷", ITdcolon, unicodeSyntaxEnabled)
  317. ,("⇒", ITdarrow, unicodeSyntaxEnabled)
  318. ,("∀", ITforall, \i -> unicodeSyntaxEnabled i &&
  319. explicitForallEnabled i)
  320. ,("→", ITrarrow, unicodeSyntaxEnabled)
  321. ,("←", ITlarrow, unicodeSyntaxEnabled)
  322. ,("⤙", ITlarrowtail, \i -> unicodeSyntaxEnabled i && arrowsEnabled i)
  323. ,("⤚", ITrarrowtail, \i -> unicodeSyntaxEnabled i && arrowsEnabled i)
  324. ,("⤛", ITLarrowtail, \i -> unicodeSyntaxEnabled i && arrowsEnabled i)
  325. ,("⤜", ITRarrowtail, \i -> unicodeSyntaxEnabled i && arrowsEnabled i)
  326. ,("★", ITstar, unicodeSyntaxEnabled)
  327. -- ToDo: ideally, and should be "specials", so that they cannot
  328. -- form part of a large operator. This would let us have a better
  329. -- syntax for kinds: ɑ** would be a legal kind signature. (maybe).
  330. ]
  331. -- -----------------------------------------------------------------------------
  332. -- Lexer actions
  333. type Action = RealSrcSpan -> StringBuffer -> Int -> P (RealLocated Token)
  334. special :: Token -> Action
  335. special tok span _buf _len = return (L span tok)
  336. token, layout_token :: Token -> Action
  337. token t span _buf _len = return (L span t)
  338. layout_token t span _buf _len = pushLexState layout >> return (L span t)
  339. idtoken :: (StringBuffer -> Int -> Token) -> Action
  340. idtoken f span buf len = return (L span $! (f buf len))
  341. skip_one_varid :: (FastString -> Token) -> Action
  342. skip_one_varid f span buf len
  343. = return (L span $! f (lexemeToFastString (stepOn buf) (len-1)))
  344. strtoken :: (String -> Token) -> Action
  345. strtoken f span buf len =
  346. return (L span $! (f $! lexemeToString buf len))
  347. init_strtoken :: Int -> (String -> Token) -> Action
  348. -- like strtoken, but drops the last N character(s)
  349. init_strtoken drop f span buf len =
  350. return (L span $! (f $! lexemeToString buf (len-drop)))
  351. begin :: Int -> Action
  352. begin code _span _str _len = do pushLexState code; lexToken
  353. pop :: Action
  354. pop _span _buf _len = do _ <- popLexState
  355. lexToken
  356. hopefully_open_brace :: Action
  357. hopefully_open_brace span buf len
  358. = do relaxed <- extension relaxedLayout
  359. ctx <- getContext
  360. (AI l _) <- getInput
  361. let offset = srcLocCol l
  362. isOK = relaxed ||
  363. case ctx of
  364. Layout prev_off : _ -> prev_off < offset
  365. _ -> True
  366. if isOK then pop_and open_brace span buf len
  367. else failSpanMsgP (RealSrcSpan span) (text "Missing block")
  368. pop_and :: Action -> Action
  369. pop_and act span buf len = do _ <- popLexState
  370. act span buf len
  371. {-# INLINE nextCharIs #-}
  372. nextCharIs :: StringBuffer -> (Char -> Bool) -> Bool
  373. nextCharIs buf p = not (atEnd buf) && p (currentChar buf)
  374. notFollowedBy :: Char -> AlexAccPred Int
  375. notFollowedBy char _ _ _ (AI _ buf)
  376. = nextCharIs buf (/=char)
  377. notFollowedBySymbol :: AlexAccPred Int
  378. notFollowedBySymbol _ _ _ (AI _ buf)
  379. = nextCharIs buf (`notElem` "!#$%&*+./<=>?@\\^|-~")
  380. -- We must reject doc comments as being ordinary comments everywhere.
  381. -- In some cases the doc comment will be selected as the lexeme due to
  382. -- maximal munch, but not always, because the nested comment rule is
  383. -- valid in all states, but the doc-comment rules are only valid in
  384. -- the non-layout states.
  385. isNormalComment :: AlexAccPred Int
  386. isNormalComment bits _ _ (AI _ buf)
  387. | haddockEnabled bits = notFollowedByDocOrPragma
  388. | otherwise = nextCharIs buf (/='#')
  389. where
  390. notFollowedByDocOrPragma
  391. = not $ spaceAndP buf (`nextCharIs` (`elem` "|^*$#"))
  392. spaceAndP :: StringBuffer -> (StringBuffer -> Bool) -> Bool
  393. spaceAndP buf p = p buf || nextCharIs buf (==' ') && p (snd (nextChar buf))
  394. atEOL :: AlexAccPred Int
  395. atEOL _ _ _ (AI _ buf) = atEnd buf || currentChar buf == '\n'
  396. ifExtension :: (Int -> Bool) -> AlexAccPred Int
  397. ifExtension pred bits _ _ _ = pred bits
  398. multiline_doc_comment :: Action
  399. multiline_doc_comment span buf _len = withLexedDocType (worker "")
  400. where
  401. worker commentAcc input docType oneLine = case alexGetChar' input of
  402. Just ('\n', input')
  403. | oneLine -> docCommentEnd input commentAcc docType buf span
  404. | otherwise -> case checkIfCommentLine input' of
  405. Just input -> worker ('\n':commentAcc) input docType False
  406. Nothing -> docCommentEnd input commentAcc docType buf span
  407. Just (c, input) -> worker (c:commentAcc) input docType oneLine
  408. Nothing -> docCommentEnd input commentAcc docType buf span
  409. checkIfCommentLine input = check (dropNonNewlineSpace input)
  410. where
  411. check input = case alexGetChar' input of
  412. Just ('-', input) -> case alexGetChar' input of
  413. Just ('-', input) -> case alexGetChar' input of
  414. Just (c, _) | c /= '-' -> Just input
  415. _ -> Nothing
  416. _ -> Nothing
  417. _ -> Nothing
  418. dropNonNewlineSpace input = case alexGetChar' input of
  419. Just (c, input')
  420. | isSpace c && c /= '\n' -> dropNonNewlineSpace input'
  421. | otherwise -> input
  422. Nothing -> input
  423. lineCommentToken :: Action
  424. lineCommentToken span buf len = do
  425. b <- extension rawTokenStreamEnabled
  426. if b then strtoken ITlineComment span buf len else lexToken
  427. {-
  428. nested comments require traversing by hand, they can't be parsed
  429. using regular expressions.
  430. -}
  431. nested_comment :: P (RealLocated Token) -> Action
  432. nested_comment cont span _str _len = do
  433. input <- getInput
  434. go "" (1::Int) input
  435. where
  436. go commentAcc 0 input = do setInput input
  437. b <- extension rawTokenStreamEnabled
  438. if b
  439. then docCommentEnd input commentAcc ITblockComment _str span
  440. else cont
  441. go commentAcc n input = case alexGetChar' input of
  442. Nothing -> errBrace input span
  443. Just ('-',input) -> case alexGetChar' input of
  444. Nothing -> errBrace input span
  445. Just ('\125',input) -> go commentAcc (n-1) input
  446. Just (_,_) -> go ('-':commentAcc) n input
  447. Just ('\123',input) -> case alexGetChar' input of
  448. Nothing -> errBrace input span
  449. Just ('-',input) -> go ('-':'\123':commentAcc) (n+1) input
  450. Just (_,_) -> go ('\123':commentAcc) n input
  451. Just (c,input) -> go (c:commentAcc) n input
  452. nested_doc_comment :: Action
  453. nested_doc_comment span buf _len = withLexedDocType (go "")
  454. where
  455. go commentAcc input docType _ = case alexGetChar' input of
  456. Nothing -> errBrace input span
  457. Just ('-',input) -> case alexGetChar' input of
  458. Nothing -> errBrace input span
  459. Just ('\125',input) ->
  460. docCommentEnd input commentAcc docType buf span
  461. Just (_,_) -> go ('-':commentAcc) input docType False
  462. Just ('\123', input) -> case alexGetChar' input of
  463. Nothing -> errBrace input span
  464. Just ('-',input) -> do
  465. setInput input
  466. let cont = do input <- getInput; go commentAcc input docType False
  467. nested_comment cont span buf _len
  468. Just (_,_) -> go ('\123':commentAcc) input docType False
  469. Just (c,input) -> go (c:commentAcc) input docType False
  470. withLexedDocType :: (AlexInput -> (String -> Token) -> Bool -> P (RealLocated Token))
  471. -> P (RealLocated Token)
  472. withLexedDocType lexDocComment = do
  473. input@(AI _ buf) <- getInput
  474. case prevChar buf ' ' of
  475. '|' -> lexDocComment input ITdocCommentNext False
  476. '^' -> lexDocComment input ITdocCommentPrev False
  477. '$' -> lexDocComment input ITdocCommentNamed False
  478. '*' -> lexDocSection 1 input
  479. '#' -> lexDocComment input ITdocOptionsOld False
  480. _ -> panic "withLexedDocType: Bad doc type"
  481. where
  482. lexDocSection n input = case alexGetChar' input of
  483. Just ('*', input) -> lexDocSection (n+1) input
  484. Just (_, _) -> lexDocComment input (ITdocSection n) True
  485. Nothing -> do setInput input; lexToken -- eof reached, lex it normally
  486. -- RULES pragmas turn on the forall and '.' keywords, and we turn them
  487. -- off again at the end of the pragma.
  488. rulePrag :: Action
  489. rulePrag span _buf _len = do
  490. setExts (.|. bit inRulePragBit)
  491. return (L span ITrules_prag)
  492. endPrag :: Action
  493. endPrag span _buf _len = do
  494. setExts (.&. complement (bit inRulePragBit))
  495. return (L span ITclose_prag)
  496. -- docCommentEnd
  497. -------------------------------------------------------------------------------
  498. -- This function is quite tricky. We can't just return a new token, we also
  499. -- need to update the state of the parser. Why? Because the token is longer
  500. -- than what was lexed by Alex, and the lexToken function doesn't know this, so
  501. -- it writes the wrong token length to the parser state. This function is
  502. -- called afterwards, so it can just update the state.
  503. docCommentEnd :: AlexInput -> String -> (String -> Token) -> StringBuffer ->
  504. RealSrcSpan -> P (RealLocated Token)
  505. docCommentEnd input commentAcc docType buf span = do
  506. setInput input
  507. let (AI loc nextBuf) = input
  508. comment = reverse commentAcc
  509. span' = mkRealSrcSpan (realSrcSpanStart span) loc
  510. last_len = byteDiff buf nextBuf
  511. span `seq` setLastToken span' last_len
  512. return (L span' (docType comment))
  513. errBrace :: AlexInput -> RealSrcSpan -> P a
  514. errBrace (AI end _) span = failLocMsgP (realSrcSpanStart span) end "unterminated `{-'"
  515. open_brace, close_brace :: Action
  516. open_brace span _str _len = do
  517. ctx <- getContext
  518. setContext (NoLayout:ctx)
  519. return (L span ITocurly)
  520. close_brace span _str _len = do
  521. popContext
  522. return (L span ITccurly)
  523. qvarid, qconid :: StringBuffer -> Int -> Token
  524. qvarid buf len = ITqvarid $! splitQualName buf len False
  525. qconid buf len = ITqconid $! splitQualName buf len False
  526. splitQualName :: StringBuffer -> Int -> Bool -> (FastString,FastString)
  527. -- takes a StringBuffer and a length, and returns the module name
  528. -- and identifier parts of a qualified name. Splits at the *last* dot,
  529. -- because of hierarchical module names.
  530. splitQualName orig_buf len parens = split orig_buf orig_buf
  531. where
  532. split buf dot_buf
  533. | orig_buf `byteDiff` buf >= len = done dot_buf
  534. | c == '.' = found_dot buf'
  535. | otherwise = split buf' dot_buf
  536. where
  537. (c,buf') = nextChar buf
  538. -- careful, we might get names like M....
  539. -- so, if the character after the dot is not upper-case, this is
  540. -- the end of the qualifier part.
  541. found_dot buf -- buf points after the '.'
  542. | isUpper c = split buf' buf
  543. | otherwise = done buf
  544. where
  545. (c,buf') = nextChar buf
  546. done dot_buf =
  547. (lexemeToFastString orig_buf (qual_size - 1),
  548. if parens -- Prelude.(+)
  549. then lexemeToFastString (stepOn dot_buf) (len - qual_size - 2)
  550. else lexemeToFastString dot_buf (len - qual_size))
  551. where
  552. qual_size = orig_buf `byteDiff` dot_buf
  553. varid :: Action
  554. varid span buf len =
  555. fs `seq`
  556. case lookupUFM reservedWordsFM fs of
  557. Just (keyword,0) -> do
  558. maybe_layout keyword
  559. return (L span keyword)
  560. Just (keyword,exts) -> do
  561. b <- extension (\i -> exts .&. i /= 0)
  562. if b then do maybe_layout keyword
  563. return (L span keyword)
  564. else return (L span (ITvarid fs))
  565. _other -> return (L span (ITvarid fs))
  566. where
  567. fs = lexemeToFastString buf len
  568. conid :: StringBuffer -> Int -> Token
  569. conid buf len = ITconid fs
  570. where fs = lexemeToFastString buf len
  571. qvarsym, qconsym, prefixqvarsym, prefixqconsym :: StringBuffer -> Int -> Token
  572. qvarsym buf len = ITqvarsym $! splitQualName buf len False
  573. qconsym buf len = ITqconsym $! splitQualName buf len False
  574. prefixqvarsym buf len = ITprefixqvarsym $! splitQualName buf len True
  575. prefixqconsym buf len = ITprefixqconsym $! splitQualName buf len True
  576. varsym, consym :: Action
  577. varsym = sym ITvarsym
  578. consym = sym ITconsym
  579. sym :: (FastString -> Token) -> RealSrcSpan -> StringBuffer -> Int
  580. -> P (RealLocated Token)
  581. sym con span buf len =
  582. case lookupUFM reservedSymsFM fs of
  583. Just (keyword,exts) -> do
  584. b <- extension exts
  585. if b then return (L span keyword)
  586. else return (L span $! con fs)
  587. _other -> return (L span $! con fs)
  588. where
  589. fs = lexemeToFastString buf len
  590. -- Variations on the integral numeric literal.
  591. tok_integral :: (Integer -> Token)
  592. -> (Integer -> Integer)
  593. -> Int -> Int
  594. -> (Integer, (Char -> Int))
  595. -> Action
  596. tok_integral itint transint transbuf translen (radix,char_to_int) span buf len
  597. = return $ L span $ itint $! transint $ parseUnsignedInteger
  598. (offsetBytes transbuf buf) (subtract translen len) radix char_to_int
  599. -- some conveniences for use with tok_integral
  600. tok_num :: (Integer -> Integer)
  601. -> Int -> Int
  602. -> (Integer, (Char->Int)) -> Action
  603. tok_num = tok_integral ITinteger
  604. tok_primint :: (Integer -> Integer)
  605. -> Int -> Int
  606. -> (Integer, (Char->Int)) -> Action
  607. tok_primint = tok_integral ITprimint
  608. tok_primword :: Int -> Int
  609. -> (Integer, (Char->Int)) -> Action
  610. tok_primword = tok_integral ITprimword positive
  611. positive, negative :: (Integer -> Integer)
  612. positive = id
  613. negative = negate
  614. decimal, octal, hexadecimal :: (Integer, Char -> Int)
  615. decimal = (10,octDecDigit)
  616. octal = (8,octDecDigit)
  617. hexadecimal = (16,hexDigit)
  618. -- readRational can understand negative rationals, exponents, everything.
  619. tok_float, tok_primfloat, tok_primdouble :: String -> Token
  620. tok_float str = ITrational $! readFractionalLit str
  621. tok_primfloat str = ITprimfloat $! readFractionalLit str
  622. tok_primdouble str = ITprimdouble $! readFractionalLit str
  623. readFractionalLit :: String -> FractionalLit
  624. readFractionalLit str = (FL $! str) $! readRational str
  625. -- -----------------------------------------------------------------------------
  626. -- Layout processing
  627. -- we're at the first token on a line, insert layout tokens if necessary
  628. do_bol :: Action
  629. do_bol span _str _len = do
  630. pos <- getOffside
  631. case pos of
  632. LT -> do
  633. --trace "layout: inserting '}'" $ do
  634. popContext
  635. -- do NOT pop the lex state, we might have a ';' to insert
  636. return (L span ITvccurly)
  637. EQ -> do
  638. --trace "layout: inserting ';'" $ do
  639. _ <- popLexState
  640. return (L span ITsemi)
  641. GT -> do
  642. _ <- popLexState
  643. lexToken
  644. -- certain keywords put us in the "layout" state, where we might
  645. -- add an opening curly brace.
  646. maybe_layout :: Token -> P ()
  647. maybe_layout t = do -- If the alternative layout rule is enabled then
  648. -- we never create an implicit layout context here.
  649. -- Layout is handled XXX instead.
  650. -- The code for closing implicit contexts, or
  651. -- inserting implicit semi-colons, is therefore
  652. -- irrelevant as it only applies in an implicit
  653. -- context.
  654. alr <- extension alternativeLayoutRule
  655. unless alr $ f t
  656. where f ITdo = pushLexState layout_do
  657. f ITmdo = pushLexState layout_do
  658. f ITof = pushLexState layout
  659. f ITlet = pushLexState layout
  660. f ITwhere = pushLexState layout
  661. f ITrec = pushLexState layout
  662. f _ = return ()
  663. -- Pushing a new implicit layout context. If the indentation of the
  664. -- next token is not greater than the previous layout context, then
  665. -- Haskell 98 says that the new layout context should be empty; that is
  666. -- the lexer must generate {}.
  667. --
  668. -- We are slightly more lenient than this: when the new context is started
  669. -- by a 'do', then we allow the new context to be at the same indentation as
  670. -- the previous context. This is what the 'strict' argument is for.
  671. --
  672. new_layout_context :: Bool -> Action
  673. new_layout_context strict span _buf _len = do
  674. _ <- popLexState
  675. (AI l _) <- getInput
  676. let offset = srcLocCol l
  677. ctx <- getContext
  678. nondecreasing <- extension nondecreasingIndentation
  679. let strict' = strict || not nondecreasing
  680. case ctx of
  681. Layout prev_off : _ |
  682. (strict' && prev_off >= offset ||
  683. not strict' && prev_off > offset) -> do
  684. -- token is indented to the left of the previous context.
  685. -- we must generate a {} sequence now.
  686. pushLexState layout_left
  687. return (L span ITvocurly)
  688. _ -> do
  689. setContext (Layout offset : ctx)
  690. return (L span ITvocurly)
  691. do_layout_left :: Action
  692. do_layout_left span _buf _len = do
  693. _ <- popLexState
  694. pushLexState bol -- we must be at the start of a line
  695. return (L span ITvccurly)
  696. -- -----------------------------------------------------------------------------
  697. -- LINE pragmas
  698. setLine :: Int -> Action
  699. setLine code span buf len = do
  700. let line = parseUnsignedInteger buf len 10 octDecDigit
  701. setSrcLoc (mkRealSrcLoc (srcSpanFile span) (fromIntegral line - 1) 1)
  702. -- subtract one: the line number refers to the *following* line
  703. _ <- popLexState
  704. pushLexState code
  705. lexToken
  706. setFile :: Int -> Action
  707. setFile code span buf len = do
  708. let file = mkFastString (go (lexemeToString (stepOn buf) (len-2)))
  709. where go ('\\':c:cs) = c : go cs
  710. go (c:cs) = c : go cs
  711. go [] = []
  712. -- decode escapes in the filename. e.g. on Windows
  713. -- when our filenames have backslashes in, gcc seems to
  714. -- escape the backslashes. One symptom of not doing this
  715. -- is that filenames in error messages look a bit strange:
  716. -- C:\\foo\bar.hs
  717. -- only the first backslash is doubled, because we apply
  718. -- System.FilePath.normalise before printing out
  719. -- filenames and it does not remove duplicate
  720. -- backslashes after the drive letter (should it?).
  721. setAlrLastLoc $ alrInitialLoc file
  722. setSrcLoc (mkRealSrcLoc file (srcSpanEndLine span) (srcSpanEndCol span))
  723. addSrcFile file
  724. _ <- popLexState
  725. pushLexState code
  726. lexToken
  727. alrInitialLoc :: FastString -> RealSrcSpan
  728. alrInitialLoc file = mkRealSrcSpan loc loc
  729. where -- This is a hack to ensure that the first line in a file
  730. -- looks like it is after the initial location:
  731. loc = mkRealSrcLoc file (-1) (-1)
  732. -- -----------------------------------------------------------------------------
  733. -- Options, includes and language pragmas.
  734. lex_string_prag :: (String -> Token) -> Action
  735. lex_string_prag mkTok span _buf _len
  736. = do input <- getInput
  737. start <- getSrcLoc
  738. tok <- go [] input
  739. end <- getSrcLoc
  740. return (L (mkRealSrcSpan start end) tok)
  741. where go acc input
  742. = if isString input "#-}"
  743. then do setInput input
  744. return (mkTok (reverse acc))
  745. else case alexGetChar input of
  746. Just (c,i) -> go (c:acc) i
  747. Nothing -> err input
  748. isString _ [] = True
  749. isString i (x:xs)
  750. = case alexGetChar i of
  751. Just (c,i') | c == x -> isString i' xs
  752. _other -> False
  753. err (AI end _) = failLocMsgP (realSrcSpanStart span) end "unterminated options pragma"
  754. -- -----------------------------------------------------------------------------
  755. -- Strings & Chars
  756. -- This stuff is horrible. I hates it.
  757. lex_string_tok :: Action
  758. lex_string_tok span _buf _len = do
  759. tok <- lex_string ""
  760. end <- getSrcLoc
  761. return (L (mkRealSrcSpan (realSrcSpanStart span) end) tok)
  762. lex_string :: String -> P Token
  763. lex_string s = do
  764. i <- getInput
  765. case alexGetChar' i of
  766. Nothing -> lit_error i
  767. Just ('"',i) -> do
  768. setInput i
  769. magicHash <- extension magicHashEnabled
  770. if magicHash
  771. then do
  772. i <- getInput
  773. case alexGetChar' i of
  774. Just ('#',i) -> do
  775. setInput i
  776. if any (> '\xFF') s
  777. then failMsgP "primitive string literal must contain only characters <= \'\\xFF\'"
  778. else let s' = mkZFastString (reverse s) in
  779. return (ITprimstring s')
  780. -- mkZFastString is a hack to avoid encoding the
  781. -- string in UTF-8. We just want the exact bytes.
  782. _other ->
  783. return (ITstring (mkFastString (reverse s)))
  784. else
  785. return (ITstring (mkFastString (reverse s)))
  786. Just ('\\',i)
  787. | Just ('&',i) <- next -> do
  788. setInput i; lex_string s
  789. | Just (c,i) <- next, c <= '\x7f' && is_space c -> do
  790. -- is_space only works for <= '\x7f' (#3751, #5425)
  791. setInput i; lex_stringgap s
  792. where next = alexGetChar' i
  793. Just (c, i1) -> do
  794. case c of
  795. '\\' -> do setInput i1; c' <- lex_escape; lex_string (c':s)
  796. c | isAny c -> do setInput i1; lex_string (c:s)
  797. _other -> lit_error i
  798. lex_stringgap :: String -> P Token
  799. lex_stringgap s = do
  800. i <- getInput
  801. c <- getCharOrFail i
  802. case c of
  803. '\\' -> lex_string s
  804. c | c <= '\x7f' && is_space c -> lex_stringgap s
  805. -- is_space only works for <= '\x7f' (#3751, #5425)
  806. _other -> lit_error i
  807. lex_char_tok :: Action
  808. -- Here we are basically parsing character literals, such as 'x' or '\n'
  809. -- but, when Template Haskell is on, we additionally spot
  810. -- 'x and ''T, returning ITsimpleQuote and ITtyQuote respectively,
  811. -- but WITHOUT CONSUMING the x or T part (the parser does that).
  812. -- So we have to do two characters of lookahead: when we see 'x we need to
  813. -- see if there's a trailing quote
  814. lex_char_tok span _buf _len = do -- We've seen '
  815. i1 <- getInput -- Look ahead to first character
  816. let loc = realSrcSpanStart span
  817. case alexGetChar' i1 of
  818. Nothing -> lit_error i1
  819. Just ('\'', i2@(AI end2 _)) -> do -- We've seen ''
  820. setInput i2
  821. return (L (mkRealSrcSpan loc end2) ITtyQuote)
  822. Just ('\\', i2@(AI _end2 _)) -> do -- We've seen 'backslash
  823. setInput i2
  824. lit_ch <- lex_escape
  825. i3 <- getInput
  826. mc <- getCharOrFail i3 -- Trailing quote
  827. if mc == '\'' then finish_char_tok loc lit_ch
  828. else lit_error i3
  829. Just (c, i2@(AI _end2 _))
  830. | not (isAny c) -> lit_error i1
  831. | otherwise ->
  832. -- We've seen 'x, where x is a valid character
  833. -- (i.e. not newline etc) but not a quote or backslash
  834. case alexGetChar' i2 of -- Look ahead one more character
  835. Just ('\'', i3) -> do -- We've seen 'x'
  836. setInput i3
  837. finish_char_tok loc c
  838. _other -> do -- We've seen 'x not followed by quote
  839. -- (including the possibility of EOF)
  840. -- If TH is on, just parse the quote only
  841. let (AI end _) = i1
  842. return (L (mkRealSrcSpan loc end) ITsimpleQuote)
  843. finish_char_tok :: RealSrcLoc -> Char -> P (RealLocated Token)
  844. finish_char_tok loc ch -- We've already seen the closing quote
  845. -- Just need to check for trailing #
  846. = do magicHash <- extension magicHashEnabled
  847. i@(AI end _) <- getInput
  848. if magicHash then do
  849. case alexGetChar' i of
  850. Just ('#',i@(AI end _)) -> do
  851. setInput i
  852. return (L (mkRealSrcSpan loc end) (ITprimchar ch))
  853. _other ->
  854. return (L (mkRealSrcSpan loc end) (ITchar ch))
  855. else do
  856. return (L (mkRealSrcSpan loc end) (ITchar ch))
  857. isAny :: Char -> Bool
  858. isAny c | c > '\x7f' = isPrint c
  859. | otherwise = is_any c
  860. lex_escape :: P Char
  861. lex_escape = do
  862. i0 <- getInput
  863. c <- getCharOrFail i0
  864. case c of
  865. 'a' -> return '\a'
  866. 'b' -> return '\b'
  867. 'f' -> return '\f'
  868. 'n' -> return '\n'
  869. 'r' -> return '\r'
  870. 't' -> return '\t'
  871. 'v' -> return '\v'
  872. '\\' -> return '\\'
  873. '"' -> return '\"'
  874. '\'' -> return '\''
  875. '^' -> do i1 <- getInput
  876. c <- getCharOrFail i1
  877. if c >= '@' && c <= '_'
  878. then return (chr (ord c - ord '@'))
  879. else lit_error i1
  880. 'x' -> readNum is_hexdigit 16 hexDigit
  881. 'o' -> readNum is_octdigit 8 octDecDigit
  882. x | is_decdigit x -> readNum2 is_decdigit 10 octDecDigit (octDecDigit x)
  883. c1 -> do
  884. i <- getInput
  885. case alexGetChar' i of
  886. Nothing -> lit_error i0
  887. Just (c2,i2) ->
  888. case alexGetChar' i2 of
  889. Nothing -> do lit_error i0
  890. Just (c3,i3) ->
  891. let str = [c1,c2,c3] in
  892. case [ (c,rest) | (p,c) <- silly_escape_chars,
  893. Just rest <- [stripPrefix p str] ] of
  894. (escape_char,[]):_ -> do
  895. setInput i3
  896. return escape_char
  897. (escape_char,_:_):_ -> do
  898. setInput i2
  899. return escape_char
  900. [] -> lit_error i0
  901. readNum :: (Char -> Bool) -> Int -> (Char -> Int) -> P Char
  902. readNum is_digit base conv = do
  903. i <- getInput
  904. c <- getCharOrFail i
  905. if is_digit c
  906. then readNum2 is_digit base conv (conv c)
  907. else lit_error i
  908. readNum2 :: (Char -> Bool) -> Int -> (Char -> Int) -> Int -> P Char
  909. readNum2 is_digit base conv i = do
  910. input <- getInput
  911. read i input
  912. where read i input = do
  913. case alexGetChar' input of
  914. Just (c,input') | is_digit c -> do
  915. let i' = i*base + conv c
  916. if i' > 0x10ffff
  917. then setInput input >> lexError "numeric escape sequence out of range"
  918. else read i' input'
  919. _other -> do
  920. setInput input; return (chr i)
  921. silly_escape_chars :: [(String, Char)]
  922. silly_escape_chars = [
  923. ("NUL", '\NUL'),
  924. ("SOH", '\SOH'),
  925. ("STX", '\STX'),
  926. ("ETX", '\ETX'),
  927. ("EOT", '\EOT'),
  928. ("ENQ", '\ENQ'),
  929. ("ACK", '\ACK'),
  930. ("BEL", '\BEL'),
  931. ("BS", '\BS'),
  932. ("HT", '\HT'),
  933. ("LF", '\LF'),
  934. ("VT", '\VT'),
  935. ("FF", '\FF'),
  936. ("CR", '\CR'),
  937. ("SO", '\SO'),
  938. ("SI", '\SI'),
  939. ("DLE", '\DLE'),
  940. ("DC1", '\DC1'),
  941. ("DC2", '\DC2'),
  942. ("DC3", '\DC3'),
  943. ("DC4", '\DC4'),
  944. ("NAK", '\NAK'),
  945. ("SYN", '\SYN'),
  946. ("ETB", '\ETB'),
  947. ("CAN", '\CAN'),
  948. ("EM", '\EM'),
  949. ("SUB", '\SUB'),
  950. ("ESC", '\ESC'),
  951. ("FS", '\FS'),
  952. ("GS", '\GS'),
  953. ("RS", '\RS'),
  954. ("US", '\US'),
  955. ("SP", '\SP'),
  956. ("DEL", '\DEL')
  957. ]
  958. -- before calling lit_error, ensure that the current input is pointing to
  959. -- the position of the error in the buffer. This is so that we can report
  960. -- a correct location to the user, but also so we can detect UTF-8 decoding
  961. -- errors if they occur.
  962. lit_error :: AlexInput -> P a
  963. lit_error i = do setInput i; lexError "lexical error in string/character literal"
  964. getCharOrFail :: AlexInput -> P Char
  965. getCharOrFail i = do
  966. case alexGetChar' i of
  967. Nothing -> lexError "unexpected end-of-file in string/character literal"
  968. Just (c,i) -> do setInput i; return c
  969. -- -----------------------------------------------------------------------------
  970. -- QuasiQuote
  971. lex_quasiquote_tok :: Action
  972. lex_quasiquote_tok span buf len = do
  973. let quoter = tail (lexemeToString buf (len - 1))
  974. -- 'tail' drops the initial '[',
  975. -- while the -1 drops the trailing '|'
  976. quoteStart <- getSrcLoc
  977. quote <- lex_quasiquote quoteStart ""
  978. end <- getSrcLoc
  979. return (L (mkRealSrcSpan (realSrcSpanStart span) end)
  980. (ITquasiQuote (mkFastString quoter,
  981. mkFastString (reverse quote),
  982. mkRealSrcSpan quoteStart end)))
  983. lex_quasiquote :: RealSrcLoc -> String -> P String
  984. lex_quasiquote start s = do
  985. i <- getInput
  986. case alexGetChar' i of
  987. Nothing -> quasiquote_error start
  988. -- NB: The string "|]" terminates the quasiquote,
  989. -- with absolutely no escaping. See the extensive
  990. -- discussion on Trac #5348 for why there is no
  991. -- escape handling.
  992. Just ('|',i)
  993. | Just (']',i) <- alexGetChar' i
  994. -> do { setInput i; return s }
  995. Just (c, i) -> do
  996. setInput i; lex_quasiquote start (c : s)
  997. quasiquote_error :: RealSrcLoc -> P a
  998. quasiquote_error start = do
  999. (AI end buf) <- getInput
  1000. reportLexError start end buf "unterminated quasiquotation"
  1001. -- -----------------------------------------------------------------------------
  1002. -- Warnings
  1003. warn :: WarningFlag -> SDoc -> Action
  1004. warn option warning srcspan _buf _len = do
  1005. addWarning option (RealSrcSpan srcspan) warning
  1006. lexToken
  1007. warnThen :: WarningFlag -> SDoc -> Action -> Action
  1008. warnThen option warning action srcspan buf len = do
  1009. addWarning option (RealSrcSpan srcspan) warning
  1010. action srcspan buf len
  1011. -- -----------------------------------------------------------------------------
  1012. -- The Parse Monad
  1013. data LayoutContext
  1014. = NoLayout
  1015. | Layout !Int
  1016. deriving Show
  1017. data ParseResult a
  1018. = POk PState a
  1019. | PFailed
  1020. SrcSpan -- The start and end of the text span related to
  1021. -- the error. Might be used in environments which can
  1022. -- show this span, e.g. by highlighting it.
  1023. Message -- The error message
  1024. data PState = PState {
  1025. buffer :: StringBuffer,
  1026. dflags :: DynFlags,
  1027. messages :: Messages,
  1028. last_loc :: RealSrcSpan, -- pos of previous token
  1029. last_len :: !Int, -- len of previous token
  1030. loc :: RealSrcLoc, -- current loc (end of prev token + 1)
  1031. extsBitmap :: !Int, -- bitmap that determines permitted
  1032. -- extensions
  1033. context :: [LayoutContext],
  1034. lex_state :: [Int],
  1035. srcfiles :: [FastString],
  1036. -- Used in the alternative layout rule:
  1037. -- These tokens are the next ones to be sent out. They are
  1038. -- just blindly emitted, without the rule looking at them again:
  1039. alr_pending_implicit_tokens :: [RealLocated Token],
  1040. -- This is the next token to be considered or, if it is Nothing,
  1041. -- we need to get the next token from the input stream:
  1042. alr_next_token :: Maybe (RealLocated Token),
  1043. -- This is what we consider to be the locatino of the last token
  1044. -- emitted:
  1045. alr_last_loc :: RealSrcSpan,
  1046. -- The stack of layout contexts:
  1047. alr_context :: [ALRContext],
  1048. -- Are we expecting a '{'? If it's Just, then the ALRLayout tells
  1049. -- us what sort of layout the '{' will open:
  1050. alr_expecting_ocurly :: Maybe ALRLayout,
  1051. -- Have we just had the '}' for a let block? If so, than an 'in'
  1052. -- token doesn't need to close anything:
  1053. alr_justClosedExplicitLetBlock :: Bool
  1054. }
  1055. -- last_loc and last_len are used when generating error messages,
  1056. -- and in pushCurrentContext only. Sigh, if only Happy passed the
  1057. -- current token to happyError, we could at least get rid of last_len.
  1058. -- Getting rid of last_loc would require finding another way to
  1059. -- implement pushCurrentContext (which is only called from one place).
  1060. data ALRContext = ALRNoLayout Bool{- does it contain commas? -}
  1061. Bool{- is it a 'let' block? -}
  1062. | ALRLayout ALRLayout Int
  1063. data ALRLayout = ALRLayoutLet
  1064. | ALRLayoutWhere
  1065. | ALRLayoutOf
  1066. | ALRLayoutDo
  1067. newtype P a = P { unP :: PState -> ParseResult a }
  1068. instance Monad P where
  1069. return = returnP
  1070. (>>=) = thenP
  1071. fail = failP
  1072. returnP :: a -> P a
  1073. returnP a = a `seq` (P $ \s -> POk s a)
  1074. thenP :: P a -> (a -> P b) -> P b
  1075. (P m) `thenP` k = P $ \ s ->
  1076. case m s of
  1077. POk s1 a -> (unP (k a)) s1
  1078. PFailed span err -> PFailed span err
  1079. failP :: String -> P a
  1080. failP msg = P $ \s -> PFailed (RealSrcSpan (last_loc s)) (text msg)
  1081. failMsgP :: String -> P a
  1082. failMsgP msg = P $ \s -> PFailed (RealSrcSpan (last_loc s)) (text msg)
  1083. failLocMsgP :: RealSrcLoc -> RealSrcLoc -> String -> P a
  1084. failLocMsgP loc1 loc2 str = P $ \_ -> PFailed (RealSrcSpan (mkRealSrcSpan loc1 loc2)) (text str)
  1085. failSpanMsgP :: SrcSpan -> SDoc -> P a
  1086. failSpanMsgP span msg = P $ \_ -> PFailed span msg
  1087. getPState :: P PState
  1088. getPState = P $ \s -> POk s s
  1089. getDynFlags :: P DynFlags
  1090. getDynFlags = P $ \s -> POk s (dflags s)
  1091. withThisPackage :: (PackageId -> a) -> P a
  1092. withThisPackage f
  1093. = do pkg <- liftM thisPackage getDynFlags
  1094. return $ f pkg
  1095. extension :: (Int -> Bool) -> P Bool
  1096. extension p = P $ \s -> POk s (p $! extsBitmap s)
  1097. getExts :: P Int
  1098. getExts = P $ \s -> POk s (extsBitmap s)
  1099. setExts :: (Int -> Int) -> P ()
  1100. setExts f = P $ \s -> POk s{ extsBitmap = f (extsBitmap s) } ()
  1101. setSrcLoc :: RealSrcLoc -> P ()
  1102. setSrcLoc new_loc = P $ \s -> POk s{loc=new_loc} ()
  1103. getSrcLoc :: P RealSrcLoc
  1104. getSrcLoc = P $ \s@(PState{ loc=loc }) -> POk s loc
  1105. addSrcFile :: FastString -> P ()
  1106. addSrcFile f = P $ \s -> POk s{ srcfiles = f : srcfiles s } ()
  1107. setLastToken :: RealSrcSpan -> Int -> P ()
  1108. setLastToken loc len = P $ \s -> POk s {
  1109. last_loc=loc,
  1110. last_len=len
  1111. } ()
  1112. data AlexInput = AI RealSrcLoc StringBuffer
  1113. alexInputPrevChar :: AlexInput -> Char
  1114. alexInputPrevChar (AI _ buf) = prevChar buf '\n'
  1115. -- backwards compatibility for Alex 2.x
  1116. alexGetChar :: AlexInput -> Maybe (Char,AlexInput)
  1117. alexGetChar inp = case alexGetByte inp of
  1118. Nothing -> Nothing
  1119. Just (b,i) -> c `seq` Just (c,i)
  1120. where c = chr $ fromIntegral b
  1121. alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)
  1122. alexGetByte (AI loc s)
  1123. | atEnd s = Nothing
  1124. | otherwise = byte `seq` loc' `seq` s' `seq`
  1125. --trace (show (ord c)) $
  1126. Just (byte, (AI loc' s'))
  1127. where (c,s') = nextChar s
  1128. loc' = advanceSrcLoc loc c
  1129. byte = fromIntegral $ ord adj_c
  1130. non_graphic = '\x0'
  1131. upper = '\x1'
  1132. lower = '\x2'
  1133. digit = '\x3'
  1134. symbol = '\x4'
  1135. space = '\x5'
  1136. other_graphic = '\x6'
  1137. adj_c
  1138. | c <= '\x06' = non_graphic
  1139. | c <= '\x7f' = c
  1140. -- Alex doesn't handle Unicode, so when Unicode
  1141. -- character is encountered we output these values
  1142. -- with the actual character value hidden in the state.
  1143. | otherwise =
  1144. case generalCategory c of
  1145. UppercaseLetter -> upper
  1146. LowercaseLetter -> lower
  1147. TitlecaseLetter -> upper
  1148. ModifierLetter -> other_graphic
  1149. OtherLetter -> lower -- see #1103
  1150. NonSpacingMark -> other_graphic
  1151. SpacingCombiningMark -> other_graphic
  1152. EnclosingMark -> other_graphic
  1153. DecimalNumber -> digit
  1154. LetterNumber -> other_graphic
  1155. OtherNumber -> digit -- see #4373
  1156. ConnectorPunctuation -> symbol
  1157. DashPunctuation -> symbol
  1158. OpenPunctuation -> other_graphic
  1159. ClosePunctuation -> other_graphic
  1160. InitialQuote -> other_graphic
  1161. FinalQuote -> other_graphic
  1162. OtherPunctuation -> symbol
  1163. MathSymbol -> symbol
  1164. CurrencySymbol -> symbol
  1165. ModifierSymbol -> symbol
  1166. OtherSymbol -> symbol
  1167. Space -> space
  1168. _other -> non_graphic
  1169. -- This version does not squash unicode characters, it is used when
  1170. -- lexing strings.
  1171. alexGetChar' :: AlexInput -> Maybe (Char,AlexInput)
  1172. alexGetChar' (AI loc s)
  1173. | atEnd s = Nothing
  1174. | otherwise = c `seq` loc' `seq` s' `seq`
  1175. --trace (show (ord c)) $
  1176. Just (c, (AI loc' s'))
  1177. where (c,s') = nextChar s
  1178. loc' = advanceSrcLoc loc c
  1179. getInput :: P AlexInput
  1180. getInput = P $ \s@PState{ loc=l, buffer=b } -> POk s (AI l b)
  1181. setInput :: AlexInput -> P ()
  1182. setInput (AI l b) = P $ \s -> POk s{ loc=l, buffer=b } ()
  1183. nextIsEOF :: P Bool
  1184. nextIsEOF = do
  1185. AI _ s <- getInput
  1186. return $ atEnd s
  1187. pushLexState :: Int -> P ()
  1188. pushLexState ls = P $ \s@PState{ lex_state=l } -> POk s{lex_state=ls:l} ()
  1189. popLexState :: P Int
  1190. popLexState = P $ \s@PState{ lex_state=ls:l } -> POk s{ lex_state=l } ls
  1191. getLexState :: P Int
  1192. getLexState = P $ \s@PState{ lex_state=ls:_ } -> POk s ls
  1193. popNextToken :: P (Maybe (RealLocated Token))
  1194. popNextToken
  1195. = P $ \s@PState{ alr_next_token = m } ->
  1196. POk (s {alr_next_token = Nothing}) m
  1197. activeContext :: P Bool
  1198. activeContext = do
  1199. ctxt <- getALRContext
  1200. expc <- getAlrExpectingOCurly
  1201. impt <- implicitTokenPending
  1202. case (ctxt,expc) of
  1203. ([],Nothing) -> return impt
  1204. _other -> return True
  1205. setAlrLastLoc :: RealSrcSpan -> P ()
  1206. setAlrLastLoc l = P $ \s -> POk (s {alr_last_loc = l}) ()
  1207. getAlrLastLoc :: P RealSrcSpan
  1208. getAlrLastLoc = P $ \s@(PState {alr_last_loc = l}) -> POk s l
  1209. getALRContext :: P [ALRContext]
  1210. getALRContext = P $ \s@(PState {alr_context = cs}) -> POk s cs
  1211. setALRContext :: [ALRContext] -> P ()
  1212. setALRContext cs = P $ \s -> POk (s {alr_context = cs}) ()
  1213. getJustClosedExplicitLetBlock :: P Bool
  1214. getJustClosedExplicitLetBlock
  1215. = P $ \s@(PState {alr_justClosedExplicitLetBlock = b}) -> POk s b
  1216. setJustClosedExplicitLetBlock :: Bool -> P ()
  1217. setJustClosedExplicitLetBlock b
  1218. = P $ \s -> POk (s {alr_justClosedExplicitLetBlock = b}) ()
  1219. setNextToken :: RealLocated Token -> P ()
  1220. setNextToken t = P $ \s -> POk (s {alr_next_token = Just t}) ()
  1221. implicitTokenPending :: P Bool
  1222. implicitTokenPending
  1223. = P $ \s@PState{ alr_pending_implicit_tokens = ts } ->
  1224. case ts of
  1225. [] -> POk s False
  1226. _ -> POk s True
  1227. popPendingImplicitToken :: P (Maybe (RealLocated Token))
  1228. popPendingImplicitToken
  1229. = P $ \s@PState{ alr_pending_implicit_tokens = ts } ->
  1230. case ts of
  1231. [] -> POk s Nothing
  1232. (t : ts') -> POk (s {alr_pending_implicit_tokens = ts'}) (Just t)
  1233. setPendingImplicitTokens :: [RealLocated Token] -> P ()
  1234. setPendingImplicitTokens ts = P $ \s -> POk (s {alr_pending_implicit_tokens = ts}) ()
  1235. getAlrExpectingOCurly :: P (Maybe ALRLayout)
  1236. getAlrExpectingOCurly = P $ \s@(PState {alr_expecting_ocurly = b}) -> POk s b
  1237. setAlrExpectingOCurly :: Maybe ALRLayout -> P ()
  1238. setAlrExpectingOCurly b = P $ \s -> POk (s {alr_expecting_ocurly = b}) ()
  1239. -- for reasons of efficiency, flags indicating language extensions (eg,
  1240. -- -fglasgow-exts or -XParallelArrays) are represented by a bitmap
  1241. -- stored in an unboxed Int
  1242. ffiBit :: Int
  1243. ffiBit= 0
  1244. interruptibleFfiBit :: Int
  1245. interruptibleFfiBit = 1
  1246. cApiFfiBit :: Int
  1247. cApiFfiBit = 2
  1248. parrBit :: Int
  1249. parrBit = 3
  1250. arrowsBit :: Int
  1251. arrowsBit = 4
  1252. thBit :: Int
  1253. thBit = 5
  1254. ipBit :: Int
  1255. ipBit = 6
  1256. explicitForallBit :: Int
  1257. explicitForallBit = 7 -- the 'forall' keyword and '.' symbol
  1258. bangPatBit :: Int
  1259. bangPatBit = 8 -- Tells the parser to understand bang-patterns
  1260. -- (doesn't affect the lexer)
  1261. tyFamBit :: Int
  1262. tyFamBit = 9 -- indexed type families: 'family' keyword and kind sigs
  1263. haddockBit :: Int
  1264. haddockBit = 10 -- Lex and parse Haddock comments
  1265. magicHashBit :: Int
  1266. magicHashBit = 11 -- "#" in both functions and operators
  1267. kindSigsBit :: Int
  1268. kindSigsBit = 12 -- Kind signatures on type variables
  1269. recursiveDoBit :: Int
  1270. recursiveDoBit = 13 -- mdo
  1271. unicodeSyntaxBit :: Int
  1272. unicodeSyntaxBit = 14 -- the forall symbol, arrow symbols, etc
  1273. unboxedTuplesBit :: Int
  1274. unboxedTuplesBit = 15 -- (# and #)
  1275. datatypeContextsBit :: Int
  1276. datatypeContextsBit = 16
  1277. transformComprehensionsBit :: Int
  1278. transformComprehensionsBit = 17
  1279. qqBit :: Int
  1280. qqBit = 18 -- enable quasiquoting
  1281. inRulePragBit :: Int
  1282. inRulePragBit = 19
  1283. rawTokenStreamBit :: Int
  1284. rawTokenStreamBit = 20 -- producing a token stream with all comments included
  1285. recBit :: Int
  1286. recBit = 22 -- rec
  1287. alternativeLayoutRuleBit :: Int
  1288. alternativeLayoutRuleBit = 23
  1289. relaxedLayoutBit :: Int
  1290. relaxedLayoutBit = 24
  1291. nondecreasingIndentationBit :: Int
  1292. nondecreasingIndentationBit = 25
  1293. safeHaskellBit :: Int
  1294. safeHaskellBit = 26
  1295. traditionalRecordSyntaxBit :: Int
  1296. traditionalRecordSyntaxBit = 27
  1297. always :: Int -> Bool
  1298. always _ = True
  1299. parrEnabled :: Int -> Bool
  1300. parrEnabled flags = testBit flags parrBit
  1301. arrowsEnabled :: Int -> Bool
  1302. arrowsEnabled flags = testBit flags arrowsBit
  1303. thEnabled :: Int -> Bool
  1304. thEnabled flags = testBit flags thBit
  1305. ipEnabled :: Int -> Bool
  1306. ipEnabled flags = testBit flags ipBit
  1307. explicitForallEnabled :: Int -> Bool
  1308. explicitForallEnabled flags = testBit flags explicitForallBit
  1309. bangPatEnabled :: Int -> Bool
  1310. bangPatEnabled flags = testBit flags bangPatBit
  1311. -- tyFamEnabled :: Int -> Bool
  1312. -- tyFamEnabled flags = testBit flags tyFamBit
  1313. haddockEnabled :: Int -> Bool
  1314. haddockEnabled flags = testBit flags haddockBit
  1315. magicHashEnabled :: Int -> Bool
  1316. magicHashEnabled flags = testBit flags magicHashBit
  1317. -- kindSigsEnabled :: Int -> Bool
  1318. -- kindSigsEnabled flags = testBit flags kindSigsBit
  1319. unicodeSyntaxEnabled :: Int -> Bool
  1320. unicodeSyntaxEnabled flags = testBit flags unicodeSyntaxBit
  1321. unboxedTuplesEnabled :: Int -> Bool
  1322. unboxedTuplesEnabled flags = testBit flags unboxedTuplesBit
  1323. datatypeContextsEnabled :: Int -> Bool
  1324. datatypeContextsEnabled flags = testBit flags datatypeContextsBit
  1325. qqEnabled :: Int -> Bool
  1326. qqEnabled flags = testBit flags qqBit
  1327. -- inRulePrag :: Int -> Bool
  1328. -- inRulePrag flags = testBit flags inRulePragBit
  1329. rawTokenStreamEnabled :: Int -> Bool
  1330. rawTokenStreamEnabled flags = testBit flags rawTokenStreamBit
  1331. alternativeLayoutRule :: Int -> Bool
  1332. alternativeLayoutRule flags = testBit flags alternativeLayoutRuleBit
  1333. relaxedLayout :: Int -> Bool
  1334. relaxedLayout flags = testBit flags relaxedLayoutBit
  1335. nondecreasingIndentation :: Int -> Bool
  1336. nondecreasingIndentation flags = testBit flags nondecreasingIndentationBit
  1337. traditionalRecordSyntaxEnabled :: Int -> Bool
  1338. traditionalRecordSyntaxEnabled flags = testBit flags traditionalRecordSyntaxBit
  1339. -- PState for parsing options pragmas
  1340. --
  1341. pragState :: DynFlags -> StringBuffer -> RealSrcLoc -> PState
  1342. pragState dynflags buf loc = (mkPState dynflags buf loc) {
  1343. lex_state = [bol, option_prags, 0]
  1344. }
  1345. -- create a parse state
  1346. --
  1347. mkPState :: DynFlags -> StringBuffer -> RealSrcLoc -> PState
  1348. mkPState flags buf loc =
  1349. PState {
  1350. buffer = buf,
  1351. dflags = flags,
  1352. messages = emptyMessages,
  1353. last_loc = mkRealSrcSpan loc loc,
  1354. last_len = 0,
  1355. loc = loc,
  1356. extsBitmap = fromIntegral bitmap,
  1357. context = [],
  1358. lex_state = [bol, 0],
  1359. srcfiles = [],
  1360. alr_pending_implicit_tokens = [],
  1361. alr_next_token = Nothing,
  1362. alr_last_loc = alrInitialLoc (fsLit "<no file>"),
  1363. alr_context = [],
  1364. alr_expecting_ocurly = Nothing,
  1365. alr_justClosedExplicitLetBlock = False
  1366. }
  1367. where
  1368. bitmap = ffiBit `setBitIf` xopt Opt_ForeignFunctionInterface flags
  1369. .|. interruptibleFfiBit `setBitIf` xopt Opt_InterruptibleFFI flags
  1370. .|. cApiFfiBit `setBitIf` xopt Opt_CApiFFI flags
  1371. .|. parrBit `setBitIf` xopt Opt_ParallelArrays flags
  1372. .|. arrowsBit `setBitIf` xopt Opt_Arrows flags
  1373. .|. thBit `setBitIf` xopt Opt_TemplateHaskell flags
  1374. .|. qqBit `setBitIf` xopt Opt_QuasiQuotes flags
  1375. .|. ipBit `setBitIf` xopt Opt_ImplicitParams flags
  1376. .|. explicitForallBit `setBitIf` xopt Opt_ExplicitForAll flags
  1377. .|. bangPatBit `setBitIf` xopt Opt_BangPatterns flags
  1378. .|. tyFamBit `setBitIf` xopt Opt_TypeFamilies flags
  1379. .|. haddockBit `setBitIf` dopt Opt_Haddock flags
  1380. .|. magicHashBit `setBitIf` xopt Opt_MagicHash flags
  1381. .|. kindSigsBit `setBitIf` xopt Opt_KindSignatures flags
  1382. .|. recursiveDoBit `setBitIf` xopt Opt_RecursiveDo flags
  1383. .|. recBit `setBitIf` xopt Opt_DoRec flags
  1384. .|. recBit `setBitIf` xopt Opt_Arrows flags
  1385. .|. unicodeSyntaxBit `setBitIf` xopt Opt_UnicodeSyntax flags
  1386. .|. unboxedTuplesBit `setBitIf` xopt Opt_UnboxedTuples flags
  1387. .|. datatypeContextsBit `setBitIf` xopt Opt_DatatypeContexts flags
  1388. .|. transformComprehensionsBit `setBitIf` xopt Opt_TransformListComp flags
  1389. .|. transformComprehensionsBit `setBitIf` xopt Opt_MonadComprehensions flags
  1390. .|. rawTokenStreamBit `setBitIf` dopt Opt_KeepRawTokenStream flags
  1391. .|. alternativeLayoutRuleBit `setBitIf` xopt Opt_AlternativeLayoutRule flags
  1392. .|. relaxedLayoutBit `setBitIf` xopt Opt_RelaxedLayout flags
  1393. .|. nondecreasingIndentationBit `setBitIf` xopt Opt_NondecreasingIndentation flags
  1394. .|. safeHaskellBit `setBitIf` safeImportsOn flags
  1395. .|. traditionalRecordSyntaxBit `setBitIf` xopt Opt_TraditionalRecordSyntax flags
  1396. --
  1397. setBitIf :: Int -> Bool -> Int
  1398. b `setBitIf` cond | cond = bit b
  1399. | otherwise = 0
  1400. addWarning :: WarningFlag -> SrcSpan -> SDoc -> P ()
  1401. addWarning option srcspan warning
  1402. = P $ \s@PState{messages=(ws,es), dflags=d} ->
  1403. let warning' = mkWarnMsg srcspan alwaysQualify warning
  1404. ws' = if wopt option d then ws `snocBag` warning' else ws
  1405. in POk s{messages=(ws', es)} ()
  1406. getMessages :: PState -> Messages
  1407. getMessages PState{messages=ms} = ms
  1408. getContext :: P [LayoutContext]
  1409. getContext = P $ \s@PState{context=ctx} -> POk s ctx
  1410. setContext :: [LayoutContext] -> P ()
  1411. setContext ctx = P $ \s -> POk s{context=ctx} ()
  1412. popContext :: P ()
  1413. popContext = P $ \ s@(PState{ buffer = buf, context = ctx,
  1414. last_len = len, last_loc = last_loc }) ->
  1415. case ctx of
  1416. (_:tl) -> POk s{ context = tl } ()
  1417. [] -> PFailed (RealSrcSpan last_loc) (srcParseErr buf len)
  1418. -- Push a new layout context at the indentation of the last token read.
  1419. -- This is only used at the outer level of a module when the 'module'
  1420. -- keyword is missing.
  1421. pushCurrentContext :: P ()
  1422. pushCurrentContext = P $ \ s@PState{ last_loc=loc, context=ctx } ->
  1423. POk s{context = Layout (srcSpanStartCol loc) : ctx} ()
  1424. getOffside :: P Ordering
  1425. getOffside = P $ \s@PState{last_loc=loc, context=stk} ->
  1426. let offs = srcSpanStartCol loc in
  1427. let ord = case stk of
  1428. (Layout n:_) -> --trace ("layout: " ++ show n ++ ", offs: " ++ show offs) $
  1429. compare offs n
  1430. _ -> GT
  1431. in POk s ord
  1432. -- ---------------------------------------------------------------------------
  1433. -- Construct a parse error
  1434. srcParseErr
  1435. :: StringBuffer -- current buffer (placed just after the last token)
  1436. -> Int -- length of the previous token
  1437. -> Message
  1438. srcParseErr buf len
  1439. = hcat [ if null token
  1440. then ptext (sLit "parse error (possibly incorrect indentation)")
  1441. else hcat [ptext (sLit "parse error on input "),
  1442. char '`', text token, char '\'']
  1443. ]
  1444. where token = lexemeToString (offsetBytes (-len) buf) len
  1445. -- Report a parse failure, giving the span of the previous token as
  1446. -- the location of the error. This is the entry point for errors
  1447. -- detected during parsing.
  1448. srcParseFail :: P a
  1449. srcParseFail = P $ \PState{ buffer = buf, last_len = len,
  1450. last_loc = last_loc } ->
  1451. PFailed (RealSrcSpan last_loc) (srcParseErr buf len)
  1452. -- A lexical error is reported at a particular position in the source file,
  1453. -- not over a token range.
  1454. lexError :: String -> P a
  1455. lexError str = do
  1456. loc <- getSrcLoc
  1457. (AI end buf) <- getInput
  1458. reportLexError loc end buf str
  1459. -- -----------------------------------------------------------------------------
  1460. -- This is the top-level function: called from the parser each time a
  1461. -- new token is to be read from the input.
  1462. lexer :: (Located Token -> P a) -> P a
  1463. lexer cont = do
  1464. alr <- extension alternativeLayoutRule
  1465. let lexTokenFun = if alr then lexTokenAlr else lexToken
  1466. (L span tok) <- lexTokenFun
  1467. --trace ("token: " ++ show tok) $ do
  1468. cont (L (RealSrcSpan span) tok)
  1469. lexTokenAlr :: P (RealLocated Token)
  1470. lexTokenAlr = do mPending <- popPendingImplicitToken
  1471. t <- case mPending of
  1472. Nothing ->
  1473. do mNext <- popNextToken
  1474. t <- case mNext of
  1475. Nothing -> lexToken
  1476. Just next -> return next
  1477. alternativeLayoutRuleToken t
  1478. Just t ->
  1479. return t
  1480. setAlrLastLoc (getLoc t)
  1481. case unLoc t of
  1482. ITwhere -> setAlrExpectingOCurly (Just ALRLayoutWhere)
  1483. ITlet -> setAlrExpectingOCurly (Just ALRLayoutLet)
  1484. ITof -> setAlrExpectingOCurly (Just ALRLayoutOf)
  1485. ITdo -> setAlrExpectingOCurly (Just ALRLayoutDo)
  1486. ITmdo -> setAlrExpectingOCurly (Just ALRLayoutDo)
  1487. ITrec -> setAlrExpectingOCurly (Just ALRLayoutDo)
  1488. _ -> return ()
  1489. return t
  1490. alternativeLayoutRuleToken :: RealLocated Token -> P (RealLocated Token)
  1491. alternativeLayoutRuleToken t
  1492. = do context <- getALRContext
  1493. lastLoc <- getAlrLastLoc
  1494. mExpectingOCurly <- getAlrExpectingOCurly
  1495. justClosedExplicitLetBlock <- getJustClosedExplicitLetBlock
  1496. setJustClosedExplicitLetBlock False
  1497. dflags <- getDynFlags
  1498. let transitional = xopt Opt_AlternativeLayoutRuleTransitional dflags
  1499. thisLoc = getLoc t
  1500. thisCol = srcSpanStartCol thisLoc
  1501. newLine = srcSpanStartLine thisLoc > srcSpanEndLine lastLoc
  1502. case (unLoc t, context, mExpectingOCurly) of
  1503. -- This case handles a GHC extension to the original H98
  1504. -- layout rule...
  1505. (ITocurly, _, Just alrLayout) ->
  1506. do setAlrExpectingOCurly Nothing
  1507. let isLet = case alrLayout of
  1508. ALRLayoutLet -> True
  1509. _ -> False
  1510. setALRContext (ALRNoLayout (containsCommas ITocurly) isLet : context)
  1511. return t
  1512. -- ...and makes this case unnecessary
  1513. {-
  1514. -- I think our implicit open-curly handling is slightly
  1515. -- different to John's, in how it interacts with newlines
  1516. -- and "in"
  1517. (ITocurly, _, Just _) ->
  1518. do setAlrExpectingOCurly Nothing
  1519. setNextToken t
  1520. lexTokenAlr
  1521. -}
  1522. (_, ALRLayout _ col : ls, Just expectingOCurly)
  1523. | (thisCol > col) ||
  1524. (thisCol == col &&
  1525. isNonDecreasingIntentation expectingOCurly) ->
  1526. do setAlrExpectingOCurly Nothing
  1527. setALRContext (ALRLayout expectingOCurly thisCol : context)
  1528. setNextToken t
  1529. return (L thisLoc ITocurly)
  1530. | otherwise ->
  1531. do setAlrExpectingOCurly Nothing
  1532. setPendingImplicitTokens [L lastLoc ITccurly]
  1533. setNextToken t
  1534. return (L lastLoc ITocurly)
  1535. (_, _, Just expectingOCurly) ->
  1536. do setAlrExpectingOCurly Nothing
  1537. setALRContext (ALRLayout expectingOCurly thisCol : context)
  1538. setNextToken t
  1539. return (L thisLoc ITocurly)
  1540. -- We do the [] cases earlier than in the spec, as we
  1541. -- have an actual EOF token
  1542. (ITeof, ALRLayout _ _ : ls, _) ->
  1543. do setALRContext ls
  1544. setNextToken t
  1545. return (L thisLoc ITccurly)
  1546. (ITeof, _, _) ->
  1547. return t
  1548. -- the other ITeof case omitted; general case below covers it
  1549. (ITin, _, _)
  1550. | justClosedExplicitLetBlock ->
  1551. return t
  1552. (ITin, ALRLayout ALRLayoutLet _ : ls, _)
  1553. | newLine ->
  1554. do setPendingImplicitTokens [t]
  1555. setALRContext ls
  1556. return (L thisLoc ITccurly)
  1557. -- This next case is to handle a transitional issue:
  1558. (ITwhere, ALRLayout _ col : ls, _)
  1559. | newLine && thisCol == col && transitional ->
  1560. do addWarning Opt_WarnAlternativeLayoutRuleTransitional
  1561. (RealSrcSpan thisLoc)
  1562. (transitionalAlternativeLayoutWarning
  1563. "`where' clause at the same depth as implicit layout block")
  1564. setALRContext ls
  1565. setNextToken t
  1566. -- Note that we use lastLoc, as we may need to close
  1567. -- more layouts, or give a semicolon
  1568. return (L lastLoc ITccurly)
  1569. -- This next case is to handle a transitional issue:
  1570. (ITvbar, ALRLayout _ col : ls, _)
  1571. | newLine && thisCol == col && transitional ->
  1572. do addWarning Opt_WarnAlternativeLayoutRuleTransitional
  1573. (RealSrcSpan thisLoc)
  1574. (transitionalAlternativeLayoutWarning
  1575. "`|' at the same depth as implicit layout block")
  1576. setALRContext ls
  1577. setNextToken t
  1578. -- Note that we use lastLoc, as we may need to close
  1579. -- more layouts, or give a semicolon
  1580. return (L lastLoc ITccurly)
  1581. (_, ALRLayout _ col : ls, _)
  1582. | newLine && thisCol == col ->
  1583. do setNextToken t
  1584. return (L thisLoc ITsemi)
  1585. | newLine && thisCol < col ->
  1586. do setALRContext ls
  1587. setNextToken t
  1588. -- Note that we use lastLoc, as we may need to close
  1589. -- more layouts, or give a semicolon
  1590. return (L lastLoc ITccurly)
  1591. -- We need to handle close before open, as 'then' is both
  1592. -- an open and a close
  1593. (u, _, _)
  1594. | isALRclose u ->
  1595. case context of
  1596. ALRLayout _ _ : ls ->
  1597. do setALRContext ls
  1598. setNextToken t
  1599. return (L thisLoc ITccurly)
  1600. ALRNoLayout _ isLet : ls ->
  1601. do let ls' = if isALRopen u
  1602. then ALRNoLayout (containsCommas u) False : ls
  1603. else ls
  1604. setALRContext ls'
  1605. when isLet $ setJustClosedExplicitLetBlock True
  1606. return t
  1607. [] ->
  1608. do let ls = if isALRopen u
  1609. then [ALRNoLayout (containsCommas u) False]
  1610. else ls
  1611. setALRContext ls
  1612. -- XXX This is an error in John's code, but
  1613. -- it looks reachable to me at first glance
  1614. return t
  1615. (u, _, _)
  1616. | isALRopen u ->
  1617. do setALRContext (ALRNoLayout (containsCommas u) False : context)
  1618. return t
  1619. (ITin, ALRLayout ALRLayoutLet _ : ls, _) ->
  1620. do setALRContext ls
  1621. setPendingImplicitTokens [t]
  1622. return (L thisLoc ITccurly)
  1623. (ITin, ALRLayout _ _ : ls, _) ->
  1624. do setALRContext ls
  1625. setNextToken t
  1626. return (L thisLoc ITccurly)
  1627. -- the other ITin case omitted; general case below covers it
  1628. (ITcomma, ALRLayout _ _ : ls, _)
  1629. | topNoLayoutContainsCommas ls ->
  1630. do setALRContext ls
  1631. setNextToken t
  1632. return (L thisLoc ITccurly)
  1633. (ITwhere, ALRLayout ALRLayoutDo _ : ls, _) ->
  1634. do setALRContext ls
  1635. setPendingImplicitTokens [t]
  1636. return (L thisLoc ITccurly)
  1637. -- the other ITwhere case omitted; general case below covers it
  1638. (_, _, _) -> return t
  1639. transitionalAlternativeLayoutWarning :: String -> SDoc
  1640. transitionalAlternativeLayoutWarning msg
  1641. = text "transitional layout will not be accepted in the future:"
  1642. $$ text msg
  1643. isALRopen :: Token -> Bool
  1644. isALRopen ITcase = True
  1645. isALRopen ITif = True
  1646. isALRopen ITthen = True
  1647. isALRopen IToparen = True
  1648. isALRopen ITobrack = True
  1649. isALRopen ITocurly = True
  1650. -- GHC Extensions:
  1651. isALRopen IToubxparen = True
  1652. isALRopen ITparenEscape = True
  1653. isALRopen _ = False
  1654. isALRclose :: Token -> Bool
  1655. isALRclose ITof = True
  1656. isALRclose ITthen = True
  1657. isALRclose ITelse = True
  1658. isALRclose ITcparen = True
  1659. isALRclose ITcbrack = True
  1660. isALRclose ITccurly = True
  1661. -- GHC Extensions:
  1662. isALRclose ITcubxparen = True
  1663. isALRclose _ = False
  1664. isNonDecreasingIntentation :: ALRLayout -> Bool
  1665. isNonDecreasingIntentation ALRLayoutDo = True
  1666. isNonDecreasingIntentation _ = False
  1667. containsCommas :: Token -> Bool
  1668. containsCommas IToparen = True
  1669. containsCommas ITobrack = True
  1670. -- John doesn't have {} as containing commas, but records contain them,
  1671. -- which caused a problem parsing Cabal's Distribution.Simple.InstallDirs
  1672. -- (defaultInstallDirs).
  1673. containsCommas ITocurly = True
  1674. -- GHC Extensions:
  1675. containsCommas IToubxparen = True
  1676. containsCommas _ = False
  1677. topNoLayoutContainsCommas :: [ALRContext] -> Bool
  1678. topNoLayoutContainsCommas [] = False
  1679. topNoLayoutContainsCommas (ALRLayout _ _ : ls) = topNoLayoutContainsCommas ls
  1680. topNoLayoutContainsCommas (ALRNoLayout b _ : _) = b
  1681. lexToken :: P (RealLocated Token)
  1682. lexToken = do
  1683. inp@(AI loc1 buf) <- getInput
  1684. sc <- getLexState
  1685. exts <- getExts
  1686. case alexScanUser exts inp sc of
  1687. AlexEOF -> do
  1688. let span = mkRealSrcSpan loc1 loc1
  1689. setLastToken span 0
  1690. return (L span ITeof)
  1691. AlexError (AI loc2 buf) ->
  1692. reportLexError loc1 loc2 buf "lexical error"
  1693. AlexSkip inp2 _ -> do
  1694. setInput inp2
  1695. lexToken
  1696. AlexToken inp2@(AI end buf2) _ t -> do
  1697. setInput inp2
  1698. let span = mkRealSrcSpan loc1 end
  1699. let bytes = byteDiff buf buf2
  1700. span `seq` setLastToken span bytes
  1701. t span buf bytes
  1702. reportLexError :: RealSrcLoc -> RealSrcLoc -> StringBuffer -> [Char] -> P a
  1703. reportLexError loc1 loc2 buf str
  1704. | atEnd buf = failLocMsgP loc1 loc2 (str ++ " at end of input")
  1705. | otherwise =
  1706. let c = fst (nextChar buf)
  1707. in if c == '\0' -- decoding errors are mapped to '\0', see utf8DecodeChar#
  1708. then failLocMsgP loc2 loc2 (str ++ " (UTF-8 decoding error)")
  1709. else failLocMsgP loc1 loc2 (str ++ " at character " ++ show c)
  1710. lexTokenStream :: StringBuffer -> RealSrcLoc -> DynFlags -> ParseResult [Located Token]
  1711. lexTokenStream buf loc dflags = unP go initState
  1712. where dflags' = dopt_set (dopt_unset dflags Opt_Haddock) Opt_KeepRawTokenStream
  1713. initState = mkPState dflags' buf loc
  1714. go = do
  1715. ltok <- lexer return
  1716. case ltok of
  1717. L _ ITeof -> return []
  1718. _ -> liftM (ltok:) go
  1719. linePrags = Map.singleton "line" (begin line_prag2)
  1720. fileHeaderPrags = Map.fromList([("options", lex_string_prag IToptions_prag),
  1721. ("options_ghc", lex_string_prag IToptions_prag),
  1722. ("options_haddock", lex_string_prag ITdocOptions),
  1723. ("language", token ITlanguage_prag),
  1724. ("include", lex_string_prag ITinclude_prag)])
  1725. ignoredPrags = Map.fromList (map ignored pragmas)
  1726. where ignored opt = (opt, nested_comment lexToken)
  1727. impls = ["hugs", "nhc98", "jhc", "yhc", "catch", "derive"]
  1728. options_pragmas = map ("options_" ++) impls
  1729. -- CFILES is a hugs-only thing.
  1730. pragmas = options_pragmas ++ ["cfiles", "contract"]
  1731. oneWordPrags = Map.fromList([("rules", rulePrag),
  1732. ("inline", token (ITinline_prag Inline FunLike)),
  1733. ("inlinable", token (ITinline_prag Inlinable FunLike)),
  1734. ("inlineable", token (ITinline_prag Inlinable FunLike)),
  1735. -- Spelling variant
  1736. ("notinline", token (ITinline_prag NoInline FunLike)),
  1737. ("specialize", token ITspec_prag),
  1738. ("source", token ITsource_prag),
  1739. ("warning", token ITwarning_prag),
  1740. ("deprecated", token ITdeprecated_prag),
  1741. ("scc", token ITscc_prag),
  1742. ("generated", token ITgenerated_prag),
  1743. ("core", token ITcore_prag),
  1744. ("unpack", token ITunpack_prag),
  1745. ("nounpack", token ITnounpack_prag),
  1746. ("ann", token ITann_prag),
  1747. ("vectorize", token ITvect_prag),
  1748. ("novectorize", token ITnovect_prag)])
  1749. twoWordPrags = Map.fromList([("inline conlike", token (ITinline_prag Inline ConLike)),
  1750. ("notinline conlike", token (ITinline_prag NoInline ConLike)),
  1751. ("specialize inline", token (ITspec_inline_prag True)),
  1752. ("specialize notinline", token (ITspec_inline_prag False)),
  1753. ("vectorize scalar", token ITvect_scalar_prag)])
  1754. dispatch_pragmas :: Map String Action -> Action
  1755. dispatch_pragmas prags span buf len = case Map.lookup (clean_pragma (lexemeToString buf len)) prags of
  1756. Just found -> found span buf len
  1757. Nothing -> lexError "unknown pragma"
  1758. known_pragma :: Map String Action -> AlexAccPred Int
  1759. known_pragma prags _ _ len (AI _ buf) = (isJust $ Map.lookup (clean_pragma (lexemeToString (offsetBytes (- len) buf) len)) prags)
  1760. && (nextCharIs buf (\c -> not (isAlphaNum c || c == '_')))
  1761. clean_pragma :: String -> String
  1762. clean_pragma prag = canon_ws (map toLower (unprefix prag))
  1763. where unprefix prag' = case stripPrefix "{-#" prag' of
  1764. Just rest -> rest
  1765. Nothing -> prag'
  1766. canonical prag' = case prag' of
  1767. "noinline" -> "notinline"
  1768. "specialise" -> "specialize"
  1769. "vectorise" -> "vectorize"
  1770. "novectorise" -> "novectorize"
  1771. "constructorlike" -> "conlike"
  1772. _ -> prag'
  1773. canon_ws s = unwords (map canonical (words s))
  1774. bol,layout,layout_do,layout_left,line_prag1,line_prag1a,line_prag1b,line_prag2,line_prag2a,line_prag2b,option_prags :: Int
  1775. bol = 1
  1776. layout = 2
  1777. layout_do = 3
  1778. layout_left = 4
  1779. line_prag1 = 5
  1780. line_prag1a = 6
  1781. line_prag1b = 7
  1782. line_prag2 = 8
  1783. line_prag2a = 9
  1784. line_prag2b = 10
  1785. option_prags = 11
  1786. alex_action_1 = warn Opt_WarnTabs (text "Warning: Tab character")
  1787. alex_action_2 = nested_comment lexToken
  1788. alex_action_3 = lineCommentToken
  1789. alex_action_4 = lineCommentToken
  1790. alex_action_5 = lineCommentToken
  1791. alex_action_6 = lineCommentToken
  1792. alex_action_7 = lineCommentToken
  1793. alex_action_8 = lineCommentToken
  1794. alex_action_10 = begin line_prag1
  1795. alex_action_13 = do_bol
  1796. alex_action_14 = hopefully_open_brace
  1797. alex_action_16 = begin line_prag1
  1798. alex_action_17 = new_layout_context True
  1799. alex_action_18 = new_layout_context False
  1800. alex_action_19 = do_layout_left
  1801. alex_action_20 = begin bol
  1802. alex_action_21 = dispatch_pragmas linePrags
  1803. alex_action_22 = setLine line_prag1a
  1804. alex_action_23 = setFile line_prag1b
  1805. alex_action_24 = pop
  1806. alex_action_25 = setLine line_prag2a
  1807. alex_action_26 = setFile line_prag2b
  1808. alex_action_27 = pop
  1809. alex_action_28 = dispatch_pragmas twoWordPrags
  1810. alex_action_29 = dispatch_pragmas oneWordPrags
  1811. alex_action_30 = dispatch_pragmas ignoredPrags
  1812. alex_action_31 = endPrag
  1813. alex_action_32 = dispatch_pragmas fileHeaderPrags
  1814. alex_action_33 = multiline_doc_comment
  1815. alex_action_34 = nested_comment lexToken
  1816. alex_action_35 = lineCommentToken
  1817. alex_action_36 = warnThen Opt_WarnUnrecognisedPragmas (text "Unrecognised pragma")
  1818. (nested_comment lexToken)
  1819. alex_action_37 = multiline_doc_comment
  1820. alex_action_38 = nested_doc_comment
  1821. alex_action_39 = token ITopabrack
  1822. alex_action_40 = token ITcpabrack
  1823. alex_action_41 = token ITopenExpQuote
  1824. alex_action_42 = token ITopenExpQuote
  1825. alex_action_43 = token ITopenPatQuote
  1826. alex_action_44 = layout_token ITopenDecQuote
  1827. alex_action_45 = token ITopenTypQuote
  1828. alex_action_46 = token ITcloseQuote
  1829. alex_action_47 = skip_one_varid ITidEscape
  1830. alex_action_48 = token ITparenEscape
  1831. alex_action_49 = lex_quasiquote_tok
  1832. alex_action_50 = lex_quasiquote_tok
  1833. alex_action_51 = special IToparenbar
  1834. alex_action_52 = special ITcparenbar
  1835. alex_action_53 = skip_one_varid ITdupipvarid
  1836. alex_action_54 = token IToubxparen
  1837. alex_action_55 = token ITcubxparen
  1838. alex_action_56 = special IToparen
  1839. alex_action_57 = special ITcparen
  1840. alex_action_58 = special ITobrack
  1841. alex_action_59 = special ITcbrack
  1842. alex_action_60 = special ITcomma
  1843. alex_action_61 = special ITsemi
  1844. alex_action_62 = special ITbackquote
  1845. alex_action_63 = open_brace
  1846. alex_action_64 = close_brace
  1847. alex_action_65 = idtoken qvarid
  1848. alex_action_66 = idtoken qconid
  1849. alex_action_67 = varid
  1850. alex_action_68 = idtoken conid
  1851. alex_action_69 = idtoken qvarid
  1852. alex_action_70 = idtoken qconid
  1853. alex_action_71 = varid
  1854. alex_action_72 = idtoken conid
  1855. alex_action_73 = idtoken qvarsym
  1856. alex_action_74 = idtoken qconsym
  1857. alex_action_75 = varsym
  1858. alex_action_76 = consym
  1859. alex_action_77 = tok_num positive 0 0 decimal
  1860. alex_action_78 = tok_num positive 2 2 octal
  1861. alex_action_79 = tok_num positive 2 2 hexadecimal
  1862. alex_action_80 = strtoken tok_float
  1863. alex_action_81 = tok_primint positive 0 1 decimal
  1864. alex_action_82 = tok_primint positive 2 3 octal
  1865. alex_action_83 = tok_primint positive 2 3 hexadecimal
  1866. alex_action_84 = tok_primint negative 1 2 decimal
  1867. alex_action_85 = tok_primint negative 3 4 octal
  1868. alex_action_86 = tok_primint negative 3 4 hexadecimal
  1869. alex_action_87 = tok_primword 0 2 decimal
  1870. alex_action_88 = tok_primword 2 4 octal
  1871. alex_action_89 = tok_primword 2 4 hexadecimal
  1872. alex_action_90 = init_strtoken 1 tok_primfloat
  1873. alex_action_91 = init_strtoken 2 tok_primdouble
  1874. alex_action_92 = lex_char_tok
  1875. alex_action_93 = lex_string_tok
  1876. {-# LINE 1 "templates/GenericTemplate.hs" #-}
  1877. {-# LINE 1 "templates/GenericTemplate.hs" #-}
  1878. {-# LINE 1 "<built-in>" #-}
  1879. {-# LINE 1 "<command-line>" #-}
  1880. {-# LINE 1 "templates/GenericTemplate.hs" #-}
  1881. -- -----------------------------------------------------------------------------
  1882. -- ALEX TEMPLATE
  1883. --
  1884. -- This code is in the PUBLIC DOMAIN; you may copy it freely and use
  1885. -- it for any purpose whatsoever.
  1886. -- -----------------------------------------------------------------------------
  1887. -- INTERNALS and main scanner engine
  1888. {-# LINE 37 "templates/GenericTemplate.hs" #-}
  1889. {-# LINE 47 "templates/GenericTemplate.hs" #-}
  1890. data AlexAddr = AlexA# Addr#
  1891. #if __GLASGOW_HASKELL__ < 503
  1892. uncheckedShiftL# = shiftL#
  1893. #endif
  1894. {-# INLINE alexIndexInt16OffAddr #-}
  1895. alexIndexInt16OffAddr (AlexA# arr) off =
  1896. #ifdef WORDS_BIGENDIAN
  1897. narrow16Int# i
  1898. where
  1899. i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
  1900. high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
  1901. low = int2Word# (ord# (indexCharOffAddr# arr off'))
  1902. off' = off *# 2#
  1903. #else
  1904. indexInt16OffAddr# arr off
  1905. #endif
  1906. {-# INLINE alexIndexInt32OffAddr #-}
  1907. alexIndexInt32OffAddr (AlexA# arr) off =
  1908. #ifdef WORDS_BIGENDIAN
  1909. narrow32Int# i
  1910. where
  1911. i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
  1912. (b2 `uncheckedShiftL#` 16#) `or#`
  1913. (b1 `uncheckedShiftL#` 8#) `or#` b0)
  1914. b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
  1915. b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
  1916. b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
  1917. b0 = int2Word# (ord# (indexCharOffAddr# arr off'))
  1918. off' = off *# 4#
  1919. #else
  1920. indexInt32OffAddr# arr off
  1921. #endif
  1922. #if __GLASGOW_HASKELL__ < 503
  1923. quickIndex arr i = arr ! i
  1924. #else
  1925. -- GHC >= 503, unsafeAt is available from Data.Array.Base.
  1926. quickIndex = unsafeAt
  1927. #endif
  1928. -- -----------------------------------------------------------------------------
  1929. -- Main lexing routines
  1930. data AlexReturn a
  1931. = AlexEOF
  1932. | AlexError !AlexInput
  1933. | AlexSkip !AlexInput !Int
  1934. | AlexToken !AlexInput !Int a
  1935. -- alexScan :: AlexInput -> StartCode -> AlexReturn a
  1936. alexScan input (I# (sc))
  1937. = alexScanUser undefined input (I# (sc))
  1938. alexScanUser user input (I# (sc))
  1939. = case alex_scan_tkn user input 0# input sc AlexNone of
  1940. (AlexNone, input') ->
  1941. case alexGetChar input of
  1942. Nothing ->
  1943. AlexEOF
  1944. Just _ ->
  1945. AlexError input'
  1946. (AlexLastSkip input'' len, _) ->
  1947. AlexSkip input'' len
  1948. (AlexLastAcc k input''' len, _) ->
  1949. AlexToken input''' len k
  1950. -- Push the input through the DFA, remembering the most recent accepting
  1951. -- state it encountered.
  1952. alex_scan_tkn user orig_input len input s last_acc =
  1953. input `seq` -- strict in the input
  1954. let
  1955. new_acc = check_accs (alex_accept `quickIndex` (I# (s)))
  1956. in
  1957. new_acc `seq`
  1958. case alexGetChar input of
  1959. Nothing -> (new_acc, input)
  1960. Just (c, new_input) ->
  1961. let
  1962. (base) = alexIndexInt32OffAddr alex_base s
  1963. ((I# (ord_c))) = ord c
  1964. (offset) = (base +# ord_c)
  1965. (check) = alexIndexInt16OffAddr alex_check offset
  1966. (new_s) = if (offset >=# 0#) && (check ==# ord_c)
  1967. then alexIndexInt16OffAddr alex_table offset
  1968. else alexIndexInt16OffAddr alex_deflt s
  1969. in
  1970. case new_s of
  1971. -1# -> (new_acc, input)
  1972. -- on an error, we want to keep the input *before* the
  1973. -- character that failed, not after.
  1974. _ -> alex_scan_tkn user orig_input (len +# 1#)
  1975. new_input new_s new_acc
  1976. where
  1977. check_accs [] = last_acc
  1978. check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))
  1979. check_accs (AlexAccSkip : _) = AlexLastSkip input (I# (len))
  1980. check_accs (AlexAccPred a predx : rest)
  1981. | predx user orig_input (I# (len)) input
  1982. = AlexLastAcc a input (I# (len))
  1983. check_accs (AlexAccSkipPred predx : rest)
  1984. | predx user orig_input (I# (len)) input
  1985. = AlexLastSkip input (I# (len))
  1986. check_accs (_ : rest) = check_accs rest
  1987. data AlexLastAcc a
  1988. = AlexNone
  1989. | AlexLastAcc a !AlexInput !Int
  1990. | AlexLastSkip !AlexInput !Int
  1991. data AlexAcc a user
  1992. = AlexAcc a
  1993. | AlexAccSkip
  1994. | AlexAccPred a (AlexAccPred user)
  1995. | AlexAccSkipPred (AlexAccPred user)
  1996. type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool
  1997. -- -----------------------------------------------------------------------------
  1998. -- Predicates on a rule
  1999. alexAndPred p1 p2 user in1 len in2
  2000. = p1 user in1 len in2 && p2 user in1 len in2
  2001. --alexPrevCharIsPred :: Char -> AlexAccPred _
  2002. alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input
  2003. --alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _
  2004. alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input
  2005. --alexRightContext :: Int -> AlexAccPred _
  2006. alexRightContext (I# (sc)) user _ _ input =
  2007. case alex_scan_tkn user input 0# input sc AlexNone of
  2008. (AlexNone, _) -> False
  2009. _ -> True
  2010. -- TODO: there's no need to find the longest
  2011. -- match when checking the right context, just
  2012. -- the first match will do.
  2013. -- used by wrappers
  2014. iUnbox (I# (i)) = i