packages feed

cryptonite 0.21 → 0.22

raw patch · 86 files changed

+5679/−18216 lines, 86 filesdep −byteabledep ~memoryPVP ok

version bump matches the API change (PVP)

Dependencies removed: byteable

Dependency ranges changed: memory

API changes (from Hackage documentation)

- Crypto.PubKey.Ed448: data DhSecret
- Crypto.PubKey.Ed448: data PublicKey
- Crypto.PubKey.Ed448: data SecretKey
- Crypto.PubKey.Ed448: dh :: PublicKey -> SecretKey -> DhSecret
- Crypto.PubKey.Ed448: dhSecret :: ByteArrayAccess b => b -> CryptoFailable DhSecret
- Crypto.PubKey.Ed448: generateSecretKey :: MonadRandom m => m SecretKey
- Crypto.PubKey.Ed448: instance Control.DeepSeq.NFData Crypto.PubKey.Ed448.DhSecret
- Crypto.PubKey.Ed448: instance Control.DeepSeq.NFData Crypto.PubKey.Ed448.PublicKey
- Crypto.PubKey.Ed448: instance Control.DeepSeq.NFData Crypto.PubKey.Ed448.SecretKey
- Crypto.PubKey.Ed448: instance Data.ByteArray.Types.ByteArrayAccess Crypto.PubKey.Ed448.DhSecret
- Crypto.PubKey.Ed448: instance Data.ByteArray.Types.ByteArrayAccess Crypto.PubKey.Ed448.PublicKey
- Crypto.PubKey.Ed448: instance Data.ByteArray.Types.ByteArrayAccess Crypto.PubKey.Ed448.SecretKey
- Crypto.PubKey.Ed448: instance GHC.Classes.Eq Crypto.PubKey.Ed448.DhSecret
- Crypto.PubKey.Ed448: instance GHC.Classes.Eq Crypto.PubKey.Ed448.PublicKey
- Crypto.PubKey.Ed448: instance GHC.Classes.Eq Crypto.PubKey.Ed448.SecretKey
- Crypto.PubKey.Ed448: instance GHC.Show.Show Crypto.PubKey.Ed448.DhSecret
- Crypto.PubKey.Ed448: instance GHC.Show.Show Crypto.PubKey.Ed448.PublicKey
- Crypto.PubKey.Ed448: instance GHC.Show.Show Crypto.PubKey.Ed448.SecretKey
- Crypto.PubKey.Ed448: publicKey :: ByteArrayAccess bs => bs -> CryptoFailable PublicKey
- Crypto.PubKey.Ed448: secretKey :: ByteArrayAccess bs => bs -> CryptoFailable SecretKey
- Crypto.PubKey.Ed448: toPublic :: SecretKey -> PublicKey
+ Crypto.Error: CryptoError_OutputLengthTooBig :: CryptoError
+ Crypto.Error: CryptoError_OutputLengthTooSmall :: CryptoError
+ Crypto.Error: CryptoError_PrimeSizeInvalid :: CryptoError
+ Crypto.Error: CryptoError_SaltTooSmall :: CryptoError
+ Crypto.Hash.Algorithms: Blake2b_160 :: Blake2b_160
+ Crypto.Hash.Algorithms: Blake2b_224 :: Blake2b_224
+ Crypto.Hash.Algorithms: Blake2b_256 :: Blake2b_256
+ Crypto.Hash.Algorithms: Blake2b_384 :: Blake2b_384
+ Crypto.Hash.Algorithms: Blake2s_160 :: Blake2s_160
+ Crypto.Hash.Algorithms: SHAKE128 :: SHAKE128
+ Crypto.Hash.Algorithms: SHAKE256 :: SHAKE256
+ Crypto.Hash.Algorithms: data Blake2b_160
+ Crypto.Hash.Algorithms: data Blake2b_224
+ Crypto.Hash.Algorithms: data Blake2b_256
+ Crypto.Hash.Algorithms: data Blake2b_384
+ Crypto.Hash.Algorithms: data Blake2s_160
+ Crypto.Hash.Algorithms: data SHAKE128 (bitlen :: Nat)
+ Crypto.Hash.Algorithms: data SHAKE256 (bitlen :: Nat)
+ Crypto.KDF.Argon2: Argon2d :: Variant
+ Crypto.KDF.Argon2: Argon2i :: Variant
+ Crypto.KDF.Argon2: Argon2id :: Variant
+ Crypto.KDF.Argon2: Options :: !TimeCost -> !MemoryCost -> !Parallelism -> !Variant -> !Version -> Options
+ Crypto.KDF.Argon2: Version10 :: Version
+ Crypto.KDF.Argon2: Version13 :: Version
+ Crypto.KDF.Argon2: [iterations] :: Options -> !TimeCost
+ Crypto.KDF.Argon2: [memory] :: Options -> !MemoryCost
+ Crypto.KDF.Argon2: [parallelism] :: Options -> !Parallelism
+ Crypto.KDF.Argon2: [variant] :: Options -> !Variant
+ Crypto.KDF.Argon2: [version] :: Options -> !Version
+ Crypto.KDF.Argon2: data Options
+ Crypto.KDF.Argon2: data Variant
+ Crypto.KDF.Argon2: data Version
+ Crypto.KDF.Argon2: defaultOptions :: Options
+ Crypto.KDF.Argon2: hash :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Options -> password -> salt -> Int -> CryptoFailable out
+ Crypto.KDF.Argon2: instance GHC.Classes.Eq Crypto.KDF.Argon2.Options
+ Crypto.KDF.Argon2: instance GHC.Classes.Eq Crypto.KDF.Argon2.Variant
+ Crypto.KDF.Argon2: instance GHC.Classes.Eq Crypto.KDF.Argon2.Version
+ Crypto.KDF.Argon2: instance GHC.Classes.Ord Crypto.KDF.Argon2.Options
+ Crypto.KDF.Argon2: instance GHC.Classes.Ord Crypto.KDF.Argon2.Variant
+ Crypto.KDF.Argon2: instance GHC.Classes.Ord Crypto.KDF.Argon2.Version
+ Crypto.KDF.Argon2: instance GHC.Enum.Bounded Crypto.KDF.Argon2.Variant
+ Crypto.KDF.Argon2: instance GHC.Enum.Bounded Crypto.KDF.Argon2.Version
+ Crypto.KDF.Argon2: instance GHC.Enum.Enum Crypto.KDF.Argon2.Variant
+ Crypto.KDF.Argon2: instance GHC.Enum.Enum Crypto.KDF.Argon2.Version
+ Crypto.KDF.Argon2: instance GHC.Read.Read Crypto.KDF.Argon2.Options
+ Crypto.KDF.Argon2: instance GHC.Read.Read Crypto.KDF.Argon2.Variant
+ Crypto.KDF.Argon2: instance GHC.Read.Read Crypto.KDF.Argon2.Version
+ Crypto.KDF.Argon2: instance GHC.Show.Show Crypto.KDF.Argon2.Options
+ Crypto.KDF.Argon2: instance GHC.Show.Show Crypto.KDF.Argon2.Variant
+ Crypto.KDF.Argon2: instance GHC.Show.Show Crypto.KDF.Argon2.Version
+ Crypto.KDF.Argon2: type MemoryCost = Word32
+ Crypto.KDF.Argon2: type Parallelism = Word32
+ Crypto.KDF.Argon2: type TimeCost = Word32
+ Crypto.KDF.PBKDF2: fastPBKDF2_SHA1 :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Parameters -> password -> salt -> out
+ Crypto.KDF.PBKDF2: fastPBKDF2_SHA256 :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Parameters -> password -> salt -> out
+ Crypto.KDF.PBKDF2: fastPBKDF2_SHA512 :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Parameters -> password -> salt -> out
+ Crypto.OTP: FourSteps :: ClockSkew
+ Crypto.OTP: NoSkew :: ClockSkew
+ Crypto.OTP: OTP4 :: OTPDigits
+ Crypto.OTP: OTP5 :: OTPDigits
+ Crypto.OTP: OTP6 :: OTPDigits
+ Crypto.OTP: OTP7 :: OTPDigits
+ Crypto.OTP: OTP8 :: OTPDigits
+ Crypto.OTP: OTP9 :: OTPDigits
+ Crypto.OTP: OneStep :: ClockSkew
+ Crypto.OTP: ThreeSteps :: ClockSkew
+ Crypto.OTP: TwoSteps :: ClockSkew
+ Crypto.OTP: data ClockSkew
+ Crypto.OTP: data OTPDigits
+ Crypto.OTP: data TOTPParams h
+ Crypto.OTP: defaultTOTPParams :: TOTPParams SHA1
+ Crypto.OTP: hotp :: forall hash key. (HashAlgorithm hash, ByteArrayAccess key) => hash -> OTPDigits -> key -> Word64 -> OTP
+ Crypto.OTP: instance GHC.Enum.Enum Crypto.OTP.ClockSkew
+ Crypto.OTP: instance GHC.Show.Show Crypto.OTP.ClockSkew
+ Crypto.OTP: instance GHC.Show.Show Crypto.OTP.OTPDigits
+ Crypto.OTP: instance GHC.Show.Show h => GHC.Show.Show (Crypto.OTP.TOTPParams h)
+ Crypto.OTP: mkTOTPParams :: (HashAlgorithm hash) => hash -> OTPTime -> Word16 -> OTPDigits -> ClockSkew -> Either String (TOTPParams hash)
+ Crypto.OTP: resynchronize :: (HashAlgorithm hash, ByteArrayAccess key) => hash -> OTPDigits -> Word16 -> key -> Word64 -> (OTP, [OTP]) -> Maybe Word64
+ Crypto.OTP: totp :: (HashAlgorithm hash, ByteArrayAccess key) => TOTPParams hash -> key -> OTPTime -> OTP
+ Crypto.OTP: totpVerify :: (HashAlgorithm hash, ByteArrayAccess key) => TOTPParams hash -> key -> OTPTime -> OTP -> Bool
+ Crypto.OTP: type OTP = Word32
+ Crypto.OTP: type OTPTime = Word64
+ Crypto.PubKey.Curve448: data DhSecret
+ Crypto.PubKey.Curve448: data PublicKey
+ Crypto.PubKey.Curve448: data SecretKey
+ Crypto.PubKey.Curve448: dh :: PublicKey -> SecretKey -> DhSecret
+ Crypto.PubKey.Curve448: dhSecret :: ByteArrayAccess b => b -> CryptoFailable DhSecret
+ Crypto.PubKey.Curve448: generateSecretKey :: MonadRandom m => m SecretKey
+ Crypto.PubKey.Curve448: instance Control.DeepSeq.NFData Crypto.PubKey.Curve448.DhSecret
+ Crypto.PubKey.Curve448: instance Control.DeepSeq.NFData Crypto.PubKey.Curve448.PublicKey
+ Crypto.PubKey.Curve448: instance Control.DeepSeq.NFData Crypto.PubKey.Curve448.SecretKey
+ Crypto.PubKey.Curve448: instance Data.ByteArray.Types.ByteArrayAccess Crypto.PubKey.Curve448.DhSecret
+ Crypto.PubKey.Curve448: instance Data.ByteArray.Types.ByteArrayAccess Crypto.PubKey.Curve448.PublicKey
+ Crypto.PubKey.Curve448: instance Data.ByteArray.Types.ByteArrayAccess Crypto.PubKey.Curve448.SecretKey
+ Crypto.PubKey.Curve448: instance GHC.Classes.Eq Crypto.PubKey.Curve448.DhSecret
+ Crypto.PubKey.Curve448: instance GHC.Classes.Eq Crypto.PubKey.Curve448.PublicKey
+ Crypto.PubKey.Curve448: instance GHC.Classes.Eq Crypto.PubKey.Curve448.SecretKey
+ Crypto.PubKey.Curve448: instance GHC.Show.Show Crypto.PubKey.Curve448.DhSecret
+ Crypto.PubKey.Curve448: instance GHC.Show.Show Crypto.PubKey.Curve448.PublicKey
+ Crypto.PubKey.Curve448: instance GHC.Show.Show Crypto.PubKey.Curve448.SecretKey
+ Crypto.PubKey.Curve448: publicKey :: ByteArrayAccess bs => bs -> CryptoFailable PublicKey
+ Crypto.PubKey.Curve448: secretKey :: ByteArrayAccess bs => bs -> CryptoFailable SecretKey
+ Crypto.PubKey.Curve448: toPublic :: SecretKey -> PublicKey

Files

CHANGELOG.md view
@@ -1,3 +1,24 @@+## 0.22++* Add Argon2 (Password Hashing Competition winner) hash function+* Update blake2 to latest upstream version+* Add extra blake2 hashing size+* Add faster PBKDF2 functions for SHA1/SHA256/SHA512+* Add SHAKE128 and SHAKE256+* Cleanup prime generation, and add tests+* Add Time-based One Time Password (TOTP) and HMAC-based One Time Password (HOTP)+* Rename Ed448 module name to Curve448, old module name still valid for now++## 0.21++* Drop automated tests with GHC 7.0, GHC 7.4, GHC 7.6. support dropped, but probably still working.+* Improve non-aligned support in C sources, ChaCha and SHA3 now probably work on arch without support for unaligned access. not complete or tested.+* Add another ECC framework that is more flexible, allowing different implementations to work instead of+  the existing Pure haskell NIST implementation.+* Add ECIES basic primitives+* Add XSalsa20 stream cipher+* Process partial buffer correctly with Poly1305+ ## 0.20  * Fixed hash truncation used in ECDSA signature & verification (Olivier Chéron)
Crypto/ECC.hs view
@@ -34,7 +34,7 @@ import qualified Crypto.Internal.ByteArray as B import           Crypto.Number.Serialize (i2ospOf_, os2ip) import qualified Crypto.PubKey.Curve25519 as X25519-import qualified Crypto.PubKey.Ed448 as X448+import qualified Crypto.PubKey.Curve448 as X448 import           Data.Function (on) import           Data.ByteArray (convert) 
Crypto/Error/Types.hs view
@@ -43,6 +43,12 @@     -- Message authentification error     | CryptoError_MacKeyInvalid     | CryptoError_AuthenticationTagSizeInvalid+    -- Prime generation error+    | CryptoError_PrimeSizeInvalid+    -- Parameter errors+    | CryptoError_SaltTooSmall+    | CryptoError_OutputLengthTooSmall+    | CryptoError_OutputLengthTooBig     deriving (Show,Eq,Enum,Data,Typeable)  instance E.Exception CryptoError
Crypto/Hash/Algorithms.hs view
@@ -11,10 +11,15 @@ module Crypto.Hash.Algorithms     ( HashAlgorithm     -- * hash algorithms+    , Blake2s_160(..)     , Blake2s_224(..)-    , Blake2sp_224(..)     , Blake2s_256(..)+    , Blake2sp_224(..)     , Blake2sp_256(..)+    , Blake2b_160(..)+    , Blake2b_224(..)+    , Blake2b_256(..)+    , Blake2b_384(..)     , Blake2b_512(..)     , Blake2bp_512(..)     , MD2(..)@@ -37,6 +42,10 @@     , SHA3_256(..)     , SHA3_384(..)     , SHA3_512(..)+#if MIN_VERSION_base(4,7,0)+    , SHAKE128(..)+    , SHAKE256(..)+#endif     , Skein256_224(..)     , Skein256_256(..)     , Skein512_224(..)@@ -67,3 +76,6 @@ import           Crypto.Hash.Skein256 import           Crypto.Hash.Skein512 import           Crypto.Hash.Whirlpool+#if MIN_VERSION_base(4,7,0)+import           Crypto.Hash.SHAKE+#endif
Crypto/Hash/Blake2b.hs view
@@ -9,18 +9,69 @@ -- Blake2b cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Blake2b-    (  Blake2b_512 (..)+    (  Blake2b_160 (..), Blake2b_224 (..), Blake2b_256 (..), Blake2b_384 (..), Blake2b_512 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  +-- | Blake2b (160 bits) cryptographic hash algorithm+data Blake2b_160 = Blake2b_160+    deriving (Show,Data,Typeable)++instance HashAlgorithm Blake2b_160 where+    hashBlockSize  _          = 128+    hashDigestSize _          = 20+    hashInternalContextSize _ = 361+    hashInternalInit p        = c_blake2b_init p 160+    hashInternalUpdate        = c_blake2b_update+    hashInternalFinalize p    = c_blake2b_finalize p 160++-- | Blake2b (224 bits) cryptographic hash algorithm+data Blake2b_224 = Blake2b_224+    deriving (Show,Data,Typeable)++instance HashAlgorithm Blake2b_224 where+    hashBlockSize  _          = 128+    hashDigestSize _          = 28+    hashInternalContextSize _ = 361+    hashInternalInit p        = c_blake2b_init p 224+    hashInternalUpdate        = c_blake2b_update+    hashInternalFinalize p    = c_blake2b_finalize p 224++-- | Blake2b (256 bits) cryptographic hash algorithm+data Blake2b_256 = Blake2b_256+    deriving (Show,Data,Typeable)++instance HashAlgorithm Blake2b_256 where+    hashBlockSize  _          = 128+    hashDigestSize _          = 32+    hashInternalContextSize _ = 361+    hashInternalInit p        = c_blake2b_init p 256+    hashInternalUpdate        = c_blake2b_update+    hashInternalFinalize p    = c_blake2b_finalize p 256++-- | Blake2b (384 bits) cryptographic hash algorithm+data Blake2b_384 = Blake2b_384+    deriving (Show,Data,Typeable)++instance HashAlgorithm Blake2b_384 where+    hashBlockSize  _          = 128+    hashDigestSize _          = 48+    hashInternalContextSize _ = 361+    hashInternalInit p        = c_blake2b_init p 384+    hashInternalUpdate        = c_blake2b_update+    hashInternalFinalize p    = c_blake2b_finalize p 384+ -- | Blake2b (512 bits) cryptographic hash algorithm data Blake2b_512 = Blake2b_512-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Blake2b_512 where     hashBlockSize  _          = 128
Crypto/Hash/Blake2bp.hs view
@@ -9,18 +9,21 @@ -- Blake2bp cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Blake2bp     (  Blake2bp_512 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)   -- | Blake2bp (512 bits) cryptographic hash algorithm data Blake2bp_512 = Blake2bp_512-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Blake2bp_512 where     hashBlockSize  _          = 128
Crypto/Hash/Blake2s.hs view
@@ -9,18 +9,33 @@ -- Blake2s cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Blake2s-    (  Blake2s_224 (..), Blake2s_256 (..)+    (  Blake2s_160 (..), Blake2s_224 (..), Blake2s_256 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  +-- | Blake2s (160 bits) cryptographic hash algorithm+data Blake2s_160 = Blake2s_160+    deriving (Show,Data,Typeable)++instance HashAlgorithm Blake2s_160 where+    hashBlockSize  _          = 64+    hashDigestSize _          = 20+    hashInternalContextSize _ = 185+    hashInternalInit p        = c_blake2s_init p 160+    hashInternalUpdate        = c_blake2s_update+    hashInternalFinalize p    = c_blake2s_finalize p 160+ -- | Blake2s (224 bits) cryptographic hash algorithm data Blake2s_224 = Blake2s_224-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Blake2s_224 where     hashBlockSize  _          = 64@@ -32,7 +47,7 @@  -- | Blake2s (256 bits) cryptographic hash algorithm data Blake2s_256 = Blake2s_256-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Blake2s_256 where     hashBlockSize  _          = 64
Crypto/Hash/Blake2sp.hs view
@@ -9,18 +9,21 @@ -- Blake2sp cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Blake2sp     (  Blake2sp_224 (..), Blake2sp_256 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)   -- | Blake2sp (224 bits) cryptographic hash algorithm data Blake2sp_224 = Blake2sp_224-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Blake2sp_224 where     hashBlockSize  _          = 64@@ -32,7 +35,7 @@  -- | Blake2sp (256 bits) cryptographic hash algorithm data Blake2sp_256 = Blake2sp_256-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Blake2sp_256 where     hashBlockSize  _          = 64
Crypto/Hash/Keccak.hs view
@@ -9,18 +9,21 @@ -- Keccak cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Keccak     (  Keccak_224 (..), Keccak_256 (..), Keccak_384 (..), Keccak_512 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)   -- | Keccak (224 bits) cryptographic hash algorithm data Keccak_224 = Keccak_224-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Keccak_224 where     hashBlockSize  _          = 144@@ -32,7 +35,7 @@  -- | Keccak (256 bits) cryptographic hash algorithm data Keccak_256 = Keccak_256-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Keccak_256 where     hashBlockSize  _          = 136@@ -44,7 +47,7 @@  -- | Keccak (384 bits) cryptographic hash algorithm data Keccak_384 = Keccak_384-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Keccak_384 where     hashBlockSize  _          = 104@@ -56,7 +59,7 @@  -- | Keccak (512 bits) cryptographic hash algorithm data Keccak_512 = Keccak_512-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Keccak_512 where     hashBlockSize  _          = 72
Crypto/Hash/MD2.hs view
@@ -9,15 +9,18 @@ -- MD2 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.MD2 ( MD2 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | MD2 cryptographic hash algorithm data MD2 = MD2-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm MD2 where     hashBlockSize  _          = 16
Crypto/Hash/MD4.hs view
@@ -9,15 +9,18 @@ -- MD4 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.MD4 ( MD4 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | MD4 cryptographic hash algorithm data MD4 = MD4-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm MD4 where     hashBlockSize  _          = 64
Crypto/Hash/MD5.hs view
@@ -9,15 +9,18 @@ -- MD5 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.MD5 ( MD5 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | MD5 cryptographic hash algorithm data MD5 = MD5-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm MD5 where     hashBlockSize  _          = 64
Crypto/Hash/RIPEMD160.hs view
@@ -9,15 +9,18 @@ -- RIPEMD160 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.RIPEMD160 ( RIPEMD160 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | RIPEMD160 cryptographic hash algorithm data RIPEMD160 = RIPEMD160-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm RIPEMD160 where     hashBlockSize  _          = 64
Crypto/Hash/SHA1.hs view
@@ -9,15 +9,18 @@ -- SHA1 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.SHA1 ( SHA1 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | SHA1 cryptographic hash algorithm data SHA1 = SHA1-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA1 where     hashBlockSize  _          = 64
Crypto/Hash/SHA224.hs view
@@ -9,15 +9,18 @@ -- SHA224 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.SHA224 ( SHA224 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | SHA224 cryptographic hash algorithm data SHA224 = SHA224-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA224 where     hashBlockSize  _          = 64
Crypto/Hash/SHA256.hs view
@@ -9,15 +9,18 @@ -- SHA256 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.SHA256 ( SHA256 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | SHA256 cryptographic hash algorithm data SHA256 = SHA256-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA256 where     hashBlockSize  _          = 64
Crypto/Hash/SHA3.hs view
@@ -9,18 +9,20 @@ -- SHA3 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.SHA3     (  SHA3_224 (..), SHA3_256 (..), SHA3_384 (..), SHA3_512 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32) - -- | SHA3 (224 bits) cryptographic hash algorithm data SHA3_224 = SHA3_224-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA3_224 where     hashBlockSize  _          = 144@@ -32,7 +34,7 @@  -- | SHA3 (256 bits) cryptographic hash algorithm data SHA3_256 = SHA3_256-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA3_256 where     hashBlockSize  _          = 136@@ -44,7 +46,7 @@  -- | SHA3 (384 bits) cryptographic hash algorithm data SHA3_384 = SHA3_384-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA3_384 where     hashBlockSize  _          = 104@@ -56,7 +58,7 @@  -- | SHA3 (512 bits) cryptographic hash algorithm data SHA3_512 = SHA3_512-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA3_512 where     hashBlockSize  _          = 72@@ -65,7 +67,6 @@     hashInternalInit p        = c_sha3_init p 512     hashInternalUpdate        = c_sha3_update     hashInternalFinalize p    = c_sha3_finalize p 512-  foreign import ccall unsafe "cryptonite_sha3_init"     c_sha3_init :: Ptr (Context a) -> Word32 -> IO ()
Crypto/Hash/SHA384.hs view
@@ -9,15 +9,18 @@ -- SHA384 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.SHA384 ( SHA384 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | SHA384 cryptographic hash algorithm data SHA384 = SHA384-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA384 where     hashBlockSize  _          = 128
Crypto/Hash/SHA512.hs view
@@ -9,15 +9,18 @@ -- SHA512 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.SHA512 ( SHA512 (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | SHA512 cryptographic hash algorithm data SHA512 = SHA512-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA512 where     hashBlockSize  _          = 128
Crypto/Hash/SHA512t.hs view
@@ -9,18 +9,21 @@ -- SHA512t cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.SHA512t     (  SHA512t_224 (..), SHA512t_256 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)   -- | SHA512t (224 bits) cryptographic hash algorithm data SHA512t_224 = SHA512t_224-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA512t_224 where     hashBlockSize  _          = 128@@ -32,7 +35,7 @@  -- | SHA512t (256 bits) cryptographic hash algorithm data SHA512t_256 = SHA512t_256-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm SHA512t_256 where     hashBlockSize  _          = 128
+ Crypto/Hash/SHAKE.hs view
@@ -0,0 +1,91 @@+-- |+-- Module      : Crypto.Hash.SHAKE+-- License     : BSD-style+-- Maintainer  : Vincent Hanquez <vincent@snarc.org>+-- Stability   : experimental+-- Portability : unknown+--+-- module containing the binding functions to work with the+-- SHA3 extendable output functions (SHAKE).+--+{-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}+module Crypto.Hash.SHAKE+    (  SHAKE128 (..), SHAKE256 (..)+    ) where++import           Crypto.Hash.Types+import           Foreign.Ptr (Ptr)+import           Data.Typeable+import           Data.Word (Word8, Word32)++import           Data.Proxy (Proxy(..))+import           GHC.TypeLits (Nat, KnownNat, natVal)+import           Crypto.Internal.Nat++-- | SHAKE128 (128 bits) extendable output function.  Supports an arbitrary+-- digest size (multiple of 8 bits), to be specified as a type parameter+-- of kind 'Nat'.+--+-- Note: outputs from @'SHAKE128' n@ and @'SHAKE128' m@ for the same input are+-- correlated (one being a prefix of the other).  Results are unrelated to+-- 'SHAKE256' results.+data SHAKE128 (bitlen :: Nat) = SHAKE128+    deriving (Show, Typeable)++instance (IsDivisibleBy8 bitLen, KnownNat bitLen) => HashAlgorithm (SHAKE128 bitLen) where+    hashBlockSize  _          = 168+    hashDigestSize _          = byteLen (Proxy :: Proxy bitLen)+    hashInternalContextSize _ = 376+    hashInternalInit p        = c_sha3_init p 128+    hashInternalUpdate        = c_sha3_update+    hashInternalFinalize      = shakeFinalizeOutput (Proxy :: Proxy bitLen)++-- | SHAKE256 (256 bits) extendable output function.  Supports an arbitrary+-- digest size (multiple of 8 bits), to be specified as a type parameter+-- of kind 'Nat'.+--+-- Note: outputs from @'SHAKE256' n@ and @'SHAKE256' m@ for the same input are+-- correlated (one being a prefix of the other).  Results are unrelated to+-- 'SHAKE128' results.+data SHAKE256 (bitlen :: Nat) = SHAKE256+    deriving (Show, Typeable)++instance (IsDivisibleBy8 bitLen, KnownNat bitLen) => HashAlgorithm (SHAKE256 bitLen) where+    hashBlockSize  _          = 136+    hashDigestSize _          = byteLen (Proxy :: Proxy bitLen)+    hashInternalContextSize _ = 344+    hashInternalInit p        = c_sha3_init p 256+    hashInternalUpdate        = c_sha3_update+    hashInternalFinalize      = shakeFinalizeOutput (Proxy :: Proxy bitLen)++shakeFinalizeOutput :: (IsDivisibleBy8 bitLen, KnownNat bitLen)+                    => proxy bitLen+                    -> Ptr (Context a)+                    -> Ptr (Digest a)+                    -> IO ()+shakeFinalizeOutput d ctx dig = do+    c_sha3_finalize_shake ctx+    c_sha3_output ctx dig (fromInteger (natVal d `div` 8))++byteLen :: (KnownNat bitlen, IsDivisibleBy8 bitlen, Num a) => proxy bitlen -> a+byteLen d = fromInteger (natVal d `div` 8)++foreign import ccall unsafe "cryptonite_sha3_init"+    c_sha3_init :: Ptr (Context a) -> Word32 -> IO ()++foreign import ccall "cryptonite_sha3_update"+    c_sha3_update :: Ptr (Context a) -> Ptr Word8 -> Word32 -> IO ()++foreign import ccall unsafe "cryptonite_sha3_finalize_shake"+    c_sha3_finalize_shake :: Ptr (Context a) -> IO ()++foreign import ccall unsafe "cryptonite_sha3_output"+    c_sha3_output :: Ptr (Context a) -> Ptr (Digest a) -> Word32 -> IO ()
Crypto/Hash/Skein256.hs view
@@ -9,18 +9,21 @@ -- Skein256 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Skein256     (  Skein256_224 (..), Skein256_256 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)   -- | Skein256 (224 bits) cryptographic hash algorithm data Skein256_224 = Skein256_224-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Skein256_224 where     hashBlockSize  _          = 32@@ -32,7 +35,7 @@  -- | Skein256 (256 bits) cryptographic hash algorithm data Skein256_256 = Skein256_256-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Skein256_256 where     hashBlockSize  _          = 32
Crypto/Hash/Skein512.hs view
@@ -9,18 +9,21 @@ -- Skein512 cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Skein512     (  Skein512_224 (..), Skein512_256 (..), Skein512_384 (..), Skein512_512 (..)     ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)   -- | Skein512 (224 bits) cryptographic hash algorithm data Skein512_224 = Skein512_224-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Skein512_224 where     hashBlockSize  _          = 64@@ -32,7 +35,7 @@  -- | Skein512 (256 bits) cryptographic hash algorithm data Skein512_256 = Skein512_256-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Skein512_256 where     hashBlockSize  _          = 64@@ -44,7 +47,7 @@  -- | Skein512 (384 bits) cryptographic hash algorithm data Skein512_384 = Skein512_384-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Skein512_384 where     hashBlockSize  _          = 64@@ -56,7 +59,7 @@  -- | Skein512 (512 bits) cryptographic hash algorithm data Skein512_512 = Skein512_512-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Skein512_512 where     hashBlockSize  _          = 64
Crypto/Hash/Tiger.hs view
@@ -9,15 +9,18 @@ -- Tiger cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Tiger ( Tiger (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | Tiger cryptographic hash algorithm data Tiger = Tiger-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Tiger where     hashBlockSize  _          = 64
Crypto/Hash/Whirlpool.hs view
@@ -9,15 +9,18 @@ -- Whirlpool cryptographic hash. -- {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable #-} module Crypto.Hash.Whirlpool ( Whirlpool (..) ) where  import           Crypto.Hash.Types import           Foreign.Ptr (Ptr)+import           Data.Data+import           Data.Typeable import           Data.Word (Word8, Word32)  -- | Whirlpool cryptographic hash algorithm data Whirlpool = Whirlpool-    deriving (Show)+    deriving (Show,Data,Typeable)  instance HashAlgorithm Whirlpool where     hashBlockSize  _          = 64
+ Crypto/Internal/Nat.hs view
@@ -0,0 +1,101 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}+module Crypto.Internal.Nat+    ( type IsDivisibleBy8+    ) where++import           GHC.TypeLits++type family IsDiv8 (bitLen :: Nat) (n :: Nat) where+    IsDiv8 bitLen 0 = 'True+#if MIN_VERSION_base(4,9,0)+    IsDiv8 bitLen 1 = TypeError ('Text "bitLen " ':<>: 'ShowType bitLen ':<>: 'Text " is not divisible by 8")+    IsDiv8 bitLen 2 = TypeError ('Text "bitLen " ':<>: 'ShowType bitLen ':<>: 'Text " is not divisible by 8")+    IsDiv8 bitLen 3 = TypeError ('Text "bitLen " ':<>: 'ShowType bitLen ':<>: 'Text " is not divisible by 8")+    IsDiv8 bitLen 4 = TypeError ('Text "bitLen " ':<>: 'ShowType bitLen ':<>: 'Text " is not divisible by 8")+    IsDiv8 bitLen 5 = TypeError ('Text "bitLen " ':<>: 'ShowType bitLen ':<>: 'Text " is not divisible by 8")+    IsDiv8 bitLen 6 = TypeError ('Text "bitLen " ':<>: 'ShowType bitLen ':<>: 'Text " is not divisible by 8")+    IsDiv8 bitLen 7 = TypeError ('Text "bitLen " ':<>: 'ShowType bitLen ':<>: 'Text " is not divisible by 8")+#else+    IsDiv8 bitLen 1 = 'False+    IsDiv8 bitLen 2 = 'False+    IsDiv8 bitLen 3 = 'False+    IsDiv8 bitLen 4 = 'False+    IsDiv8 bitLen 5 = 'False+    IsDiv8 bitLen 6 = 'False+    IsDiv8 bitLen 7 = 'False+#endif+    IsDiv8 bitLen n = IsDiv8 n (Mod8 n)++type family Mod8 (n :: Nat) where+    Mod8 0 = 0+    Mod8 1 = 1+    Mod8 2 = 2+    Mod8 3 = 3+    Mod8 4 = 4+    Mod8 5 = 5+    Mod8 6 = 6+    Mod8 7 = 7+    Mod8 8 = 0+    Mod8 9 = 1+    Mod8 10 = 2+    Mod8 11 = 3+    Mod8 12 = 4+    Mod8 13 = 5+    Mod8 14 = 6+    Mod8 15 = 7+    Mod8 16 = 0+    Mod8 17 = 1+    Mod8 18 = 2+    Mod8 19 = 3+    Mod8 20 = 4+    Mod8 21 = 5+    Mod8 22 = 6+    Mod8 23 = 7+    Mod8 24 = 0+    Mod8 25 = 1+    Mod8 26 = 2+    Mod8 27 = 3+    Mod8 28 = 4+    Mod8 29 = 5+    Mod8 30 = 6+    Mod8 31 = 7+    Mod8 32 = 0+    Mod8 33 = 1+    Mod8 34 = 2+    Mod8 35 = 3+    Mod8 36 = 4+    Mod8 37 = 5+    Mod8 38 = 6+    Mod8 39 = 7+    Mod8 40 = 0+    Mod8 41 = 1+    Mod8 42 = 2+    Mod8 43 = 3+    Mod8 44 = 4+    Mod8 45 = 5+    Mod8 46 = 6+    Mod8 47 = 7+    Mod8 48 = 0+    Mod8 49 = 1+    Mod8 50 = 2+    Mod8 51 = 3+    Mod8 52 = 4+    Mod8 53 = 5+    Mod8 54 = 6+    Mod8 55 = 7+    Mod8 56 = 0+    Mod8 57 = 1+    Mod8 58 = 2+    Mod8 59 = 3+    Mod8 60 = 4+    Mod8 61 = 5+    Mod8 62 = 6+    Mod8 63 = 7+    Mod8 n = Mod8 (n - 64)++type IsDivisibleBy8 bitLen = IsDiv8 bitLen bitLen ~ 'True
+ Crypto/KDF/Argon2.hs view
@@ -0,0 +1,155 @@+-- |+-- Module      : Crypto.KDF.Argon2+-- License     : BSD-style+-- Maintainer  : Vincent Hanquez <vincent@snarc.org>+-- Stability   : experimental+-- Portability : unknown+--+-- Argon2 hashing function (P-H-C winner)+--+-- Recommended to use this module qualified+--+-- File started from Argon2.hs, from Oliver Charles+-- at https://github.com/ocharles/argon2+--+module Crypto.KDF.Argon2+    (+      Options(..)+    , TimeCost+    , MemoryCost+    , Parallelism+    , Variant(..)+    , Version(..)+    , defaultOptions+    -- * Hashing function+    , hash+    ) where++import           Crypto.Internal.ByteArray (ScrubbedBytes, ByteArray, ByteArrayAccess)+import qualified Crypto.Internal.ByteArray as B+import           Crypto.Error+import           Control.Monad (when)+import           Data.Word+import           Foreign.C+import           Foreign.Ptr++-- | Which variant of Argon2 to use. You should choose the variant that is most+-- applicable to your intention to hash inputs.+data Variant =+      Argon2d  -- ^ Argon2i uses data-independent memory access, which is preferred+               -- for password hashing and password-based key derivation. Argon2i+               -- is slower as it makes more passes over the memory to protect from+               -- tradeoff attacks.+    | Argon2i -- ^ Argon2d is faster and uses data-depending memory access, which+              -- makes it suitable for cryptocurrencies and applications with no+              -- threats from side-channel timing attacks.+    | Argon2id -- ^ Argon2id is a hybrid of Argon2i and Argon2d, using a combination+               -- of data-depending and data-independent memory accesses, which gives+               -- some of Argon2i's resistance to side-channel cache timing attacks+               -- and much of Argon2d's resistance to GPU cracking attacks+    deriving (Eq,Ord,Read,Show,Enum,Bounded)++-- | Which version of Argon2 to use+data Version = Version10 | Version13+    deriving (Eq,Ord,Read,Show,Enum,Bounded)++-- | The time cost, which defines the amount of computation realized and therefore the execution time, given in number of iterations.+--+-- 'FFI.ARGON2_MIN_TIME' <= 'hashIterations' <= 'FFI.ARGON2_MAX_TIME'+type TimeCost = Word32++-- | The memory cost, which defines the memory usage, given in kibibytes.+--+-- max 'FFI.ARGON2_MIN_MEMORY' (8 * 'hashParallelism') <= 'hashMemory' <= 'FFI.ARGON2_MAX_MEMORY'+type MemoryCost = Word32++-- \ A parallelism degree, which defines the number of parallel threads.+--+-- 'FFI.ARGON2_MIN_LANES' <= 'hashParallelism' <= 'FFI.ARGON2_MAX_LANES' && 'FFI.ARGON_MIN_THREADS' <= 'hashParallelism' <= 'FFI.ARGON2_MAX_THREADS'+type Parallelism = Word32++-- | Parameters that can be adjusted to change the runtime performance of the+-- hashing.+data Options = Options+    { iterations  :: !TimeCost+    , memory      :: !MemoryCost+    , parallelism :: !Parallelism+    , variant     :: !Variant     -- ^ Which variant of Argon2 to use.+    , version     :: !Version     -- ^ Which version of Argon2 to use.+    }+    deriving (Eq,Ord,Read,Show)++saltMinLength :: Int+saltMinLength = 8++outputMinLength :: Int+outputMinLength = 4++outputMaxLength :: Int+outputMaxLength = 0xffffffff++defaultOptions :: Options+defaultOptions =+    Options { iterations  = 1+            , memory      = 2 ^ (17 :: Int)+            , parallelism = 4+            , variant     = Argon2i+            , version     = Version13+            }++hash :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out)+     => Options+     -> password+     -> salt+     -> Int+     -> CryptoFailable out+hash options password salt outLen+    | saltLen < saltMinLength  = CryptoFailed CryptoError_SaltTooSmall+    | outLen < outputMinLength = CryptoFailed CryptoError_OutputLengthTooSmall+    | outLen > outputMaxLength = CryptoFailed CryptoError_OutputLengthTooBig+    | otherwise                = CryptoPassed $ B.allocAndFreeze outLen $ \out -> do+        res <- B.withByteArray password $ \pPass ->+               B.withByteArray salt     $ \pSalt ->+                    argon2_hash (iterations options)+                                (memory options)+                                (parallelism options)+                                pPass+                                (csizeOfInt passwordLen)+                                pSalt+                                (csizeOfInt saltLen)+                                out+                                (csizeOfInt outLen)+                                (cOfVariant $ variant options)+                                (cOfVersion $ version options)+        when (res /= 0) $ error "argon2: hash: internal error"+  where+    saltLen = B.length salt+    passwordLen = B.length password++data Pass+data Salt+data HashOut++type CVariant = CInt -- valid value is 0 (Argon2d), 1 (Argon2i) and 2 (Argon2id)+type CVersion = CInt -- valid value is 0x10, 0x13++cOfVersion :: Version -> CVersion+cOfVersion Version10 = 0x10+cOfVersion Version13 = 0x13++cOfVariant :: Variant -> CVariant+cOfVariant Argon2d  = 0+cOfVariant Argon2i  = 1+cOfVariant Argon2id = 2++csizeOfInt :: Int -> CSize+csizeOfInt = fromIntegral++foreign import ccall unsafe "cryptonite_argon2_hash"+    argon2_hash :: Word32 -> Word32 -> Word32+                -> Ptr Pass -> CSize+                -> Ptr Salt -> CSize+                -> Ptr HashOut -> CSize+                -> CVariant+                -> CVersion+                -> IO CInt
Crypto/KDF/PBKDF2.hs view
@@ -8,17 +8,23 @@ -- Password Based Key Derivation Function 2 -- {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE ForeignFunctionInterface #-}+ module Crypto.KDF.PBKDF2     ( PRF     , prfHMAC     , Parameters(..)     , generate+    , fastPBKDF2_SHA1+    , fastPBKDF2_SHA256+    , fastPBKDF2_SHA512     ) where  import           Data.Word import           Data.Bits import           Foreign.Marshal.Alloc-import           Foreign.Ptr (plusPtr)+import           Foreign.Ptr (plusPtr, Ptr)+import           Foreign.C.Types (CUInt(..), CInt(..), CSize(..))  import           Crypto.Hash (HashAlgorithm) import qualified Crypto.MAC.HMAC as HMAC@@ -100,3 +106,70 @@             c = fromIntegral ((w `shiftR` 8) .&. 0xff)             d = fromIntegral (w .&. 0xff) {-# NOINLINE generate #-}++fastPBKDF2_SHA1 :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out)+                => Parameters+                -> password+                -> salt+                -> out+fastPBKDF2_SHA1 params password salt =+    B.allocAndFreeze (outputLength params) $ \outPtr ->+    B.withByteArray password $ \passPtr ->+    B.withByteArray salt $ \saltPtr ->+        c_cryptonite_fastpbkdf2_hmac_sha1+            passPtr (fromIntegral $ B.length password)+            saltPtr (fromIntegral $ B.length salt)+            (fromIntegral $ iterCounts params)+            outPtr (fromIntegral $ outputLength params)++fastPBKDF2_SHA256 :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out)+                  => Parameters+                  -> password+                  -> salt+                  -> out+fastPBKDF2_SHA256 params password salt =+    B.allocAndFreeze (outputLength params) $ \outPtr ->+    B.withByteArray password $ \passPtr ->+    B.withByteArray salt $ \saltPtr ->+        c_cryptonite_fastpbkdf2_hmac_sha256+            passPtr (fromIntegral $ B.length password)+            saltPtr (fromIntegral $ B.length salt)+            (fromIntegral $ iterCounts params)+            outPtr (fromIntegral $ outputLength params)++fastPBKDF2_SHA512 :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out)+                  => Parameters+                  -> password+                  -> salt+                  -> out+fastPBKDF2_SHA512 params password salt =+    B.allocAndFreeze (outputLength params) $ \outPtr ->+    B.withByteArray password $ \passPtr ->+    B.withByteArray salt $ \saltPtr ->+        c_cryptonite_fastpbkdf2_hmac_sha512+            passPtr (fromIntegral $ B.length password)+            saltPtr (fromIntegral $ B.length salt)+            (fromIntegral $ iterCounts params)+            outPtr (fromIntegral $ outputLength params)+++foreign import ccall unsafe "cryptonite_pbkdf2.h cryptonite_fastpbkdf2_hmac_sha1"+    c_cryptonite_fastpbkdf2_hmac_sha1 :: Ptr Word8 -> CSize+                                      -> Ptr Word8 -> CSize+                                      -> CUInt+                                      -> Ptr Word8 -> CSize+                                      -> IO ()++foreign import ccall unsafe "cryptonite_pbkdf2.h cryptonite_fastpbkdf2_hmac_sha256"+    c_cryptonite_fastpbkdf2_hmac_sha256 :: Ptr Word8 -> CSize+                                        -> Ptr Word8 -> CSize+                                        -> CUInt+                                        -> Ptr Word8 -> CSize+                                        -> IO ()++foreign import ccall unsafe "cryptonite_pbkdf2.h cryptonite_fastpbkdf2_hmac_sha512"+    c_cryptonite_fastpbkdf2_hmac_sha512 :: Ptr Word8 -> CSize+                                        -> Ptr Word8 -> CSize+                                        -> CUInt+                                        -> Ptr Word8 -> CSize+                                        -> IO ()
Crypto/Number/Prime.hs view
@@ -27,6 +27,7 @@ import Crypto.Number.ModArithmetic (expSafe) import Crypto.Random.Types import Crypto.Random.Probabilistic+import Crypto.Error  import Data.Bits @@ -37,25 +38,48 @@ isProbablyPrime :: Integer -> Bool isProbablyPrime !n     | any (\p -> p `divides` n) (filter (< n) firstPrimes) = False-    | primalityTestFermat 50 (n`div`2) n                   = primalityTestMillerRabin 30 n+    | n >= 2 && n <= 2903                                  = True+    | primalityTestFermat 50 (n `div` 2) n                 = primalityTestMillerRabin 30 n     | otherwise                                            = False --- | generate a prime number of the required bitsize+-- | generate a prime number of the required bitsize (i.e. in the range+--   [2^(b-1)+2^(b-2), 2^b)).+--+--   May throw a CryptoError_PrimeSizeInvalid if the requested size is less+--   than 5 bits, as the smallest prime meeting these conditions is 29.+--   This function requires that the two highest bits are set, so that when+--   multiplied with another prime to create a key, it is guaranteed to be of+--   the proper size. generatePrime :: MonadRandom m => Int -> m Integer generatePrime bits = do-    sp <- generateParams bits (Just SetTwoHighest) True-    return $ findPrimeFrom sp+    if bits < 5 then+        throwCryptoError $ CryptoFailed $ CryptoError_PrimeSizeInvalid+    else do+        sp <- generateParams bits (Just SetTwoHighest) True+        let prime = findPrimeFrom sp+        if prime < 1 `shiftL` bits then+            return $ prime+        else generatePrime bits  -- | generate a prime number of the form 2p+1 where p is also prime. -- it is also knowed as a Sophie Germaine prime or safe prime. -- -- The number of safe prime is significantly smaller to the number of prime, -- as such it shouldn't be used if this number is supposed to be kept safe.+--+-- May throw a CryptoError_PrimeSizeInvalid if the requested size is less than+-- 6 bits, as the smallest safe prime with the two highest bits set is 59. generateSafePrime :: MonadRandom m => Int -> m Integer generateSafePrime bits = do-    sp <- generateParams bits (Just SetTwoHighest) True-    let p = findPrimeFromWith (\i -> isProbablyPrime (2*i+1)) (sp `div` 2)-    return (2*p+1)+    if bits < 6 then+        throwCryptoError $ CryptoFailed $ CryptoError_PrimeSizeInvalid+    else do+        sp <- generateParams bits (Just SetTwoHighest) True+        let p = findPrimeFromWith (\i -> isProbablyPrime (2*i+1)) (sp `div` 2)+        let val = 2 * p + 1+        if val < 1 `shiftL` bits then+            return $ val+        else generateSafePrime bits  -- | find a prime from a starting point where the property hold. findPrimeFromWith :: (Integer -> Bool) -> Integer -> Integer
+ Crypto/OTP.hs view
@@ -0,0 +1,179 @@+{-# LANGUAGE ScopedTypeVariables #-}++-- | One-time password implementation as defined by the+-- <http://tools.ietf.org/html/rfc4226 HOTP> and <http://tools.ietf.org/html/rfc6238 TOTP>+-- specifications.+--+-- Both implementations use a shared key between the client and the server. HOTP passwords+-- are based on a synchronized counter. TOTP passwords use the same approach but calculate+-- the counter as a number of time steps from the Unix epoch to the current time, thus+-- requiring that both client and server have synchronized clocks.+--+-- Probably the best-known use of TOTP is in Google's 2-factor authentication.+--+-- The TOTP API doesn't depend on any particular time package, so the user needs to supply+-- the current @OTPTime@ value, based on the system time. For example, using the @hourglass@+-- package, you could create a @getOTPTime@ function:+--+-- >>> import Time.System+-- >>> import Time.Types+-- >>>+-- >>> let getOTPTime = timeCurrent >>= \(Elapsed t) -> return (fromIntegral t :: OTPTime)+--+-- Or if you prefer, the @time@ package could be used:+--+-- >>> import Data.Time.Clock.POSIX+-- >>>+-- >>> let getOTPTime = getPOSIXTime >>= \t -> return (floor t :: OTPTime)+--++module Crypto.OTP+    ( OTP+    , OTPDigits (..)+    , OTPTime+    , hotp+    , resynchronize+    , totp+    , totpVerify+    , TOTPParams+    , ClockSkew (..)+    , defaultTOTPParams+    , mkTOTPParams+    )+where++import           Data.Bits (shiftL, shiftR, (.&.), (.|.))+import           Data.ByteArray.Mapping (fromW64BE)+import           Data.List (elemIndex)+import           Data.Word+import           Foreign.Storable (poke)+import           Control.Monad (unless)+import           Crypto.Hash (HashAlgorithm, SHA1(..))+import           Crypto.MAC.HMAC+import           Crypto.Internal.ByteArray (ByteArrayAccess, ByteArray, Bytes)+import qualified Crypto.Internal.ByteArray as B+++-- | A one-time password which is a sequence of 4 to 9 digits.+type OTP = Word32++-- | The strength of the calculated HOTP value, namely+-- the number of digits (between 4 and 9) in the extracted value.+data OTPDigits = OTP4 | OTP5 | OTP6 | OTP7 | OTP8 | OTP9 deriving (Show)++-- | An integral time value in seconds.+type OTPTime = Word64++hotp :: forall hash key. (HashAlgorithm hash, ByteArrayAccess key)+    => hash+    -> OTPDigits+    -- ^ Number of digits in the HOTP value extracted from the calculated HMAC+    -> key+    -- ^ Shared secret between the client and server+    -> Word64+    -- ^ Counter value synchronized between the client and server+    -> OTP+    -- ^ The HOTP value+hotp _ d k c = dt `mod` digitsPower d+  where+    mac = hmac k (fromW64BE c :: Bytes) :: HMAC hash+    offset = fromIntegral (B.index mac (B.length mac - 1) .&. 0xf)+    dt = (fromIntegral (B.index mac offset       .&. 0x7f) `shiftL` 24) .|.+         (fromIntegral (B.index mac (offset + 1) .&. 0xff) `shiftL` 16) .|.+         (fromIntegral (B.index mac (offset + 2) .&. 0xff) `shiftL`  8) .|.+         fromIntegral  (B.index mac (offset + 3) .&. 0xff)++-- | Attempt to resynchronize the server's counter value+-- with the client, given a sequence of HOTP values.+resynchronize :: (HashAlgorithm hash, ByteArrayAccess key)+    => hash+    -> OTPDigits+    -> Word16+    -- ^ The look-ahead window parameter. Up to this many values will+    -- be calculated and checked against the value(s) submitted by the client+    -> key+    -- ^ The shared secret+    -> Word64+    -- ^ The current server counter value+    -> (OTP, [OTP])+    -- ^ The first OTP submitted by the client and a list of additional+    -- sequential OTPs (which may be empty)+    -> Maybe Word64+    -- ^ The new counter value, synchronized with the client's current counter+    -- or Nothing if the submitted OTP values didn't match anywhere within the window+resynchronize h d s k c (p1, extras) = do+    offBy <- fmap fromIntegral (elemIndex p1 range)+    checkExtraOtps (c + offBy + 1) extras+  where+    checkExtraOtps ctr [] = Just ctr+    checkExtraOtps ctr (p:ps)+        | hotp h d k ctr /= p = Nothing+        | otherwise           = checkExtraOtps (ctr + 1) ps++    range = map (hotp h d k)[c..c + fromIntegral s]++digitsPower :: OTPDigits -> Word32+digitsPower OTP4 = 10000+digitsPower OTP5 = 100000+digitsPower OTP6 = 1000000+digitsPower OTP7 = 10000000+digitsPower OTP8 = 100000000+digitsPower OTP9 = 1000000000+++data TOTPParams h = TP !h !OTPTime !Word16 !OTPDigits !ClockSkew deriving (Show)++data ClockSkew = NoSkew | OneStep | TwoSteps | ThreeSteps | FourSteps deriving (Enum, Show)++-- | The default TOTP configuration.+defaultTOTPParams :: TOTPParams SHA1+defaultTOTPParams = TP SHA1 0 30 OTP6 TwoSteps++-- | Create a TOTP configuration with customized parameters.+mkTOTPParams :: (HashAlgorithm hash)+    => hash+    -> OTPTime+    -- ^ The T0 parameter in seconds. This is the Unix time from which to start+    -- counting steps (default 0). Must be before the current time.+    -> Word16+    -- ^ The time step parameter X in seconds (default 30, maximum allowed 300)+    -> OTPDigits+    -- ^ Number of required digits in the OTP (default 6)+    -> ClockSkew+    -- ^ The number of time steps to check either side of the current value+    -- to allow for clock skew between client and server and or delay in+    -- submitting the value. The default is two time steps.+    -> Either String (TOTPParams hash)+mkTOTPParams h t0 x d skew = do+    unless (x > 0) (Left "Time step must be greater than zero")+    unless (x <= 300) (Left "Time step cannot be greater than 300 seconds")+    return (TP h t0 x d skew)++-- | Calculate a totp value for the given time.+totp :: (HashAlgorithm hash, ByteArrayAccess key)+    => TOTPParams hash+    -> key+    -- ^ The shared secret+    -> OTPTime+    -- ^ The time for which the OTP should be calculated.+    -- This is usually the current time as returned by @Data.Time.Clock.POSIX.getPOSIXTime@+    -> OTP+totp (TP h t0 x d _) k now = hotp h d k (timeToCounter now t0 x)++-- | Check a supplied TOTP value is valid for the given time,+-- within the window defined by the skew parameter.+totpVerify :: (HashAlgorithm hash, ByteArrayAccess key)+    => TOTPParams hash+    -> key+    -> OTPTime+    -> OTP+    -> Bool+totpVerify (TP h t0 x d skew) k now otp = otp `elem` map (hotp h d k) (range window [])+  where+    t = timeToCounter now t0 x+    window = fromIntegral (fromEnum skew)+    range 0 acc = t : acc+    range n acc = range (n-1) ((t-n) : (t+n) : acc)++timeToCounter :: Word64 -> Word64 -> Word16 -> Word64+timeToCounter now t0 x = (now - t0) `div` fromIntegral x
+ Crypto/PubKey/Curve448.hs view
@@ -0,0 +1,108 @@+-- |+-- Module      : Crypto.PubKey.Curve448+-- License     : BSD-style+-- Maintainer  : John Galt <jgalt@centromere.net>+-- Stability   : experimental+-- Portability : unknown+--+-- Curve448 support+--+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MagicHash #-}+module Crypto.PubKey.Curve448+    ( SecretKey+    , PublicKey+    , DhSecret+    -- * Smart constructors+    , dhSecret+    , publicKey+    , secretKey+    -- * methods+    , dh+    , toPublic+    , generateSecretKey+    ) where++import           Data.Word+import           Foreign.Ptr+import           GHC.Ptr++import           Crypto.Error+import           Crypto.Random+import           Crypto.Internal.Compat+import           Crypto.Internal.Imports+import           Crypto.Internal.ByteArray (ByteArrayAccess, ScrubbedBytes, Bytes, withByteArray)+import qualified Crypto.Internal.ByteArray as B++-- | A Curve448 Secret key+newtype SecretKey = SecretKey ScrubbedBytes+    deriving (Show,Eq,ByteArrayAccess,NFData)++-- | A Curve448 public key+newtype PublicKey = PublicKey Bytes+    deriving (Show,Eq,ByteArrayAccess,NFData)++-- | A Curve448 Diffie Hellman secret related to a+-- public key and a secret key.+newtype DhSecret = DhSecret ScrubbedBytes+    deriving (Show,Eq,ByteArrayAccess,NFData)++-- | Try to build a public key from a bytearray+publicKey :: ByteArrayAccess bs => bs -> CryptoFailable PublicKey+publicKey bs+    | B.length bs == x448_bytes = CryptoPassed $ PublicKey $ B.copyAndFreeze bs (\_ -> return ())+    | otherwise                 = CryptoFailed CryptoError_PublicKeySizeInvalid++-- | Try to build a secret key from a bytearray+secretKey :: ByteArrayAccess bs => bs -> CryptoFailable SecretKey+secretKey bs+    | B.length bs == x448_bytes = unsafeDoIO $+        withByteArray bs $ \inp -> do+            valid <- isValidPtr inp+            if valid+                then (CryptoPassed . SecretKey) <$> B.copy bs (\_ -> return ())+                else return $ CryptoFailed CryptoError_SecretKeyStructureInvalid+    | otherwise = CryptoFailed CryptoError_SecretKeySizeInvalid+  where+        isValidPtr :: Ptr Word8 -> IO Bool+        isValidPtr _ =+            return True+{-# NOINLINE secretKey #-}++-- | Create a DhSecret from a bytearray object+dhSecret :: ByteArrayAccess b => b -> CryptoFailable DhSecret+dhSecret bs+    | B.length bs == x448_bytes = CryptoPassed $ DhSecret $ B.copyAndFreeze bs (\_ -> return ())+    | otherwise                 = CryptoFailed CryptoError_SharedSecretSizeInvalid++-- | Compute the Diffie Hellman secret from a public key and a secret key+dh :: PublicKey -> SecretKey -> DhSecret+dh (PublicKey pub) (SecretKey sec) = DhSecret <$>+    B.allocAndFreeze x448_bytes $ \result ->+    withByteArray sec           $ \psec   ->+    withByteArray pub           $ \ppub   ->+        ccryptonite_ed448 result psec ppub+{-# NOINLINE dh #-}++-- | Create a public key from a secret key+toPublic :: SecretKey -> PublicKey+toPublic (SecretKey sec) = PublicKey <$>+    B.allocAndFreeze x448_bytes     $ \result ->+    withByteArray sec               $ \psec   ->+        ccryptonite_ed448 result psec basePoint+  where+        basePoint = Ptr "\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+{-# NOINLINE toPublic #-}++-- | Generate a secret key.+generateSecretKey :: MonadRandom m => m SecretKey+generateSecretKey = SecretKey <$> getRandomBytes x448_bytes++x448_bytes :: Int+x448_bytes = 448 `quot` 8++foreign import ccall "cryptonite_x448"+    ccryptonite_ed448 :: Ptr Word8 -- ^ public+                      -> Ptr Word8 -- ^ secret+                      -> Ptr Word8 -- ^ basepoint+                      -> IO ()
Crypto/PubKey/Ed448.hs view
@@ -7,102 +7,14 @@ -- -- Ed448 support --+-- /Functions and types exported here will be DEPRECATED in a future version./+-- For Diffie-Hellman over curve448 please use module "Crypto.PubKey.Curve448"+-- instead.+-- {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MagicHash #-} module Crypto.PubKey.Ed448-    ( SecretKey-    , PublicKey-    , DhSecret-    -- * Smart constructors-    , dhSecret-    , publicKey-    , secretKey-    -- * methods-    , dh-    , toPublic-    , generateSecretKey+    ( module Crypto.PubKey.Curve448     ) where -import           Data.Word-import           Foreign.Ptr-import           GHC.Ptr--import           Crypto.Error-import           Crypto.Random-import           Crypto.Internal.Compat-import           Crypto.Internal.Imports-import           Crypto.Internal.ByteArray (ByteArrayAccess, ScrubbedBytes, Bytes, withByteArray)-import qualified Crypto.Internal.ByteArray as B---- | A Ed448 Secret key-newtype SecretKey = SecretKey ScrubbedBytes-    deriving (Show,Eq,ByteArrayAccess,NFData)---- | A Ed448 public key-newtype PublicKey = PublicKey Bytes-    deriving (Show,Eq,ByteArrayAccess,NFData)---- | A Ed448 Diffie Hellman secret related to a--- public key and a secret key.-newtype DhSecret = DhSecret ScrubbedBytes-    deriving (Show,Eq,ByteArrayAccess,NFData)---- | Try to build a public key from a bytearray-publicKey :: ByteArrayAccess bs => bs -> CryptoFailable PublicKey-publicKey bs-    | B.length bs == x448_bytes = CryptoPassed $ PublicKey $ B.copyAndFreeze bs (\_ -> return ())-    | otherwise                 = CryptoFailed CryptoError_PublicKeySizeInvalid---- | Try to build a secret key from a bytearray-secretKey :: ByteArrayAccess bs => bs -> CryptoFailable SecretKey-secretKey bs-    | B.length bs == x448_bytes = unsafeDoIO $-        withByteArray bs $ \inp -> do-            valid <- isValidPtr inp-            if valid-                then (CryptoPassed . SecretKey) <$> B.copy bs (\_ -> return ())-                else return $ CryptoFailed CryptoError_SecretKeyStructureInvalid-    | otherwise = CryptoFailed CryptoError_SecretKeySizeInvalid-  where-        isValidPtr :: Ptr Word8 -> IO Bool-        isValidPtr _ =-            return True-{-# NOINLINE secretKey #-}---- | Create a DhSecret from a bytearray object-dhSecret :: ByteArrayAccess b => b -> CryptoFailable DhSecret-dhSecret bs-    | B.length bs == x448_bytes = CryptoPassed $ DhSecret $ B.copyAndFreeze bs (\_ -> return ())-    | otherwise                 = CryptoFailed CryptoError_SharedSecretSizeInvalid---- | Compute the Diffie Hellman secret from a public key and a secret key-dh :: PublicKey -> SecretKey -> DhSecret-dh (PublicKey pub) (SecretKey sec) = DhSecret <$>-    B.allocAndFreeze x448_bytes $ \result ->-    withByteArray sec           $ \psec   ->-    withByteArray pub           $ \ppub   ->-        ccryptonite_ed448 result psec ppub-{-# NOINLINE dh #-}---- | Create a public key from a secret key-toPublic :: SecretKey -> PublicKey-toPublic (SecretKey sec) = PublicKey <$>-    B.allocAndFreeze x448_bytes     $ \result ->-    withByteArray sec               $ \psec   ->-        ccryptonite_ed448 result psec basePoint-  where-        basePoint = Ptr "\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#-{-# NOINLINE toPublic #-}---- | Generate a secret key.-generateSecretKey :: MonadRandom m => m SecretKey-generateSecretKey = SecretKey <$> getRandomBytes x448_bytes--x448_bytes :: Int-x448_bytes = 448 `quot` 8--foreign import ccall "cryptonite_x448"-    ccryptonite_ed448 :: Ptr Word8 -- ^ public-                      -> Ptr Word8 -- ^ secret-                      -> Ptr Word8 -- ^ basepoint-                      -> IO ()+import Crypto.PubKey.Curve448
+ cbits/argon2/argon2.c view
@@ -0,0 +1,142 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#include <string.h>+#include <stdlib.h>+#include <stdio.h>++#include "argon2.h"+#include "core.c"++int cryptonite_argon2_ctx(argon2_context *context, argon2_type type) {+    /* 1. Validate all inputs */+    int result = validate_inputs(context);+    uint32_t memory_blocks, segment_length;+    argon2_instance_t instance;++    if (ARGON2_OK != result) {+        return result;+    }++    if (Argon2_d != type && Argon2_i != type && Argon2_id != type) {+        return ARGON2_INCORRECT_TYPE;+    }++    /* 2. Align memory size */+    /* Minimum memory_blocks = 8L blocks, where L is the number of lanes */+    memory_blocks = context->m_cost;++    if (memory_blocks < 2 * ARGON2_SYNC_POINTS * context->lanes) {+        memory_blocks = 2 * ARGON2_SYNC_POINTS * context->lanes;+    }++    segment_length = memory_blocks / (context->lanes * ARGON2_SYNC_POINTS);+    /* Ensure that all segments have equal length */+    memory_blocks = segment_length * (context->lanes * ARGON2_SYNC_POINTS);++    instance.version = context->version;+    instance.memory = NULL;+    instance.passes = context->t_cost;+    instance.memory_blocks = memory_blocks;+    instance.segment_length = segment_length;+    instance.lane_length = segment_length * ARGON2_SYNC_POINTS;+    instance.lanes = context->lanes;+    instance.threads = context->threads;+    instance.type = type;++    /* 3. Initialization: Hashing inputs, allocating memory, filling first+     * blocks+     */+    result = initialize(&instance, context);++    if (ARGON2_OK != result) {+        return result;+    }++    /* 4. Filling memory */+    result = fill_memory_blocks(&instance);++    if (ARGON2_OK != result) {+        return result;+    }+    /* 5. Finalization */+    finalize(context, &instance);++    return ARGON2_OK;+}++int cryptonite_argon2_hash(const uint32_t t_cost, const uint32_t m_cost,+                const uint32_t parallelism, const void *pwd,+                const size_t pwdlen, const void *salt, const size_t saltlen,+                void *hash, const size_t hashlen, argon2_type type,+                const uint32_t version){++    argon2_context context;+    int result;+    uint8_t *out;++    if (hashlen > ARGON2_MAX_OUTLEN) {+        return ARGON2_OUTPUT_TOO_LONG;+    }++    if (hashlen < ARGON2_MIN_OUTLEN) {+        return ARGON2_OUTPUT_TOO_SHORT;+    }++    out = malloc(hashlen);+    if (!out) {+        return ARGON2_MEMORY_ALLOCATION_ERROR;+    }++    context.out = (uint8_t *)out;+    context.outlen = (uint32_t)hashlen;+    context.pwd = CONST_CAST(uint8_t *)pwd;+    context.pwdlen = (uint32_t)pwdlen;+    context.salt = CONST_CAST(uint8_t *)salt;+    context.saltlen = (uint32_t)saltlen;+    context.secret = NULL;+    context.secretlen = 0;+    context.ad = NULL;+    context.adlen = 0;+    context.t_cost = t_cost;+    context.m_cost = m_cost;+    context.lanes = parallelism;+    context.threads = parallelism;+    context.allocate_cbk = NULL;+    context.free_cbk = NULL;+    context.flags = ARGON2_DEFAULT_FLAGS;+    context.version = version;++    result = cryptonite_argon2_ctx(&context, type);++    if (result != ARGON2_OK) {+        clear_internal_memory(out, hashlen);+        free(out);+        return result;+    }++    /* if raw hash requested, write it */+    if (hash) {+        memcpy(hash, out, hashlen);+    }++    clear_internal_memory(out, hashlen);+    free(out);++    return ARGON2_OK;+}+
+ cbits/argon2/argon2.h view
@@ -0,0 +1,267 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#ifndef ARGON2_H+#define ARGON2_H++#include <stdint.h>+#include <stddef.h>+#include <limits.h>++#if defined(__cplusplus)+extern "C" {+#endif++/* Symbols visibility control */+#ifdef A2_VISCTL+#define ARGON2_PUBLIC __attribute__((visibility("default")))+#elif _MSC_VER+#define ARGON2_PUBLIC __declspec(dllexport)+#else+#define ARGON2_PUBLIC+#endif++/*+ * Argon2 input parameter restrictions+ */++/* Minimum and maximum number of lanes (degree of parallelism) */+#define ARGON2_MIN_LANES UINT32_C(1)+#define ARGON2_MAX_LANES UINT32_C(0xFFFFFF)++/* Minimum and maximum number of threads */+#define ARGON2_MIN_THREADS UINT32_C(1)+#define ARGON2_MAX_THREADS UINT32_C(0xFFFFFF)++/* Number of synchronization points between lanes per pass */+#define ARGON2_SYNC_POINTS UINT32_C(4)++/* Minimum and maximum digest size in bytes */+#define ARGON2_MIN_OUTLEN UINT32_C(4)+#define ARGON2_MAX_OUTLEN UINT32_C(0xFFFFFFFF)++/* Minimum and maximum number of memory blocks (each of BLOCK_SIZE bytes) */+#define ARGON2_MIN_MEMORY (2 * ARGON2_SYNC_POINTS) /* 2 blocks per slice */++#define ARGON2_MIN(a, b) ((a) < (b) ? (a) : (b))+/* Max memory size is addressing-space/2, topping at 2^32 blocks (4 TB) */+#define ARGON2_MAX_MEMORY_BITS                                                 \+    ARGON2_MIN(UINT32_C(32), (sizeof(void *) * CHAR_BIT - 10 - 1))+#define ARGON2_MAX_MEMORY                                                      \+    ARGON2_MIN(UINT32_C(0xFFFFFFFF), UINT64_C(1) << ARGON2_MAX_MEMORY_BITS)++/* Minimum and maximum number of passes */+#define ARGON2_MIN_TIME UINT32_C(1)+#define ARGON2_MAX_TIME UINT32_C(0xFFFFFFFF)++/* Minimum and maximum password length in bytes */+#define ARGON2_MIN_PWD_LENGTH UINT32_C(0)+#define ARGON2_MAX_PWD_LENGTH UINT32_C(0xFFFFFFFF)++/* Minimum and maximum associated data length in bytes */+#define ARGON2_MIN_AD_LENGTH UINT32_C(0)+#define ARGON2_MAX_AD_LENGTH UINT32_C(0xFFFFFFFF)++/* Minimum and maximum salt length in bytes */+#define ARGON2_MIN_SALT_LENGTH UINT32_C(8)+#define ARGON2_MAX_SALT_LENGTH UINT32_C(0xFFFFFFFF)++/* Minimum and maximum key length in bytes */+#define ARGON2_MIN_SECRET UINT32_C(0)+#define ARGON2_MAX_SECRET UINT32_C(0xFFFFFFFF)++/* Flags to determine which fields are securely wiped (default = no wipe). */+#define ARGON2_DEFAULT_FLAGS UINT32_C(0)+#define ARGON2_FLAG_CLEAR_PASSWORD (UINT32_C(1) << 0)+#define ARGON2_FLAG_CLEAR_SECRET (UINT32_C(1) << 1)++/* Global flag to determine if we are wiping internal memory buffers. This flag+ * is defined in core.c and deafults to 1 (wipe internal memory). */+//extern int FLAG_clear_internal_memory;++/* Error codes */+typedef enum Argon2_ErrorCodes {+    ARGON2_OK = 0,++    ARGON2_OUTPUT_PTR_NULL = -1,++    ARGON2_OUTPUT_TOO_SHORT = -2,+    ARGON2_OUTPUT_TOO_LONG = -3,++    ARGON2_PWD_TOO_SHORT = -4,+    ARGON2_PWD_TOO_LONG = -5,++    ARGON2_SALT_TOO_SHORT = -6,+    ARGON2_SALT_TOO_LONG = -7,++    ARGON2_AD_TOO_SHORT = -8,+    ARGON2_AD_TOO_LONG = -9,++    ARGON2_SECRET_TOO_SHORT = -10,+    ARGON2_SECRET_TOO_LONG = -11,++    ARGON2_TIME_TOO_SMALL = -12,+    ARGON2_TIME_TOO_LARGE = -13,++    ARGON2_MEMORY_TOO_LITTLE = -14,+    ARGON2_MEMORY_TOO_MUCH = -15,++    ARGON2_LANES_TOO_FEW = -16,+    ARGON2_LANES_TOO_MANY = -17,++    ARGON2_PWD_PTR_MISMATCH = -18,    /* NULL ptr with non-zero length */+    ARGON2_SALT_PTR_MISMATCH = -19,   /* NULL ptr with non-zero length */+    ARGON2_SECRET_PTR_MISMATCH = -20, /* NULL ptr with non-zero length */+    ARGON2_AD_PTR_MISMATCH = -21,     /* NULL ptr with non-zero length */++    ARGON2_MEMORY_ALLOCATION_ERROR = -22,++    ARGON2_FREE_MEMORY_CBK_NULL = -23,+    ARGON2_ALLOCATE_MEMORY_CBK_NULL = -24,++    ARGON2_INCORRECT_PARAMETER = -25,+    ARGON2_INCORRECT_TYPE = -26,++    ARGON2_OUT_PTR_MISMATCH = -27,++    ARGON2_THREADS_TOO_FEW = -28,+    ARGON2_THREADS_TOO_MANY = -29,++    ARGON2_MISSING_ARGS = -30,++    ARGON2_ENCODING_FAIL = -31,++    ARGON2_DECODING_FAIL = -32,++    ARGON2_THREAD_FAIL = -33,++    ARGON2_DECODING_LENGTH_FAIL = -34,++    ARGON2_VERIFY_MISMATCH = -35+} argon2_error_codes;++/* Memory allocator types --- for external allocation */+typedef int (*allocate_fptr)(uint8_t **memory, size_t bytes_to_allocate);+typedef void (*deallocate_fptr)(uint8_t *memory, size_t bytes_to_allocate);++/* Argon2 external data structures */++/*+ *****+ * Context: structure to hold Argon2 inputs:+ *  output array and its length,+ *  password and its length,+ *  salt and its length,+ *  secret and its length,+ *  associated data and its length,+ *  number of passes, amount of used memory (in KBytes, can be rounded up a bit)+ *  number of parallel threads that will be run.+ * All the parameters above affect the output hash value.+ * Additionally, two function pointers can be provided to allocate and+ * deallocate the memory (if NULL, memory will be allocated internally).+ * Also, three flags indicate whether to erase password, secret as soon as they+ * are pre-hashed (and thus not needed anymore), and the entire memory+ *****+ * Simplest situation: you have output array out[8], password is stored in+ * pwd[32], salt is stored in salt[16], you do not have keys nor associated+ * data. You need to spend 1 GB of RAM and you run 5 passes of Argon2d with+ * 4 parallel lanes.+ * You want to erase the password, but you're OK with last pass not being+ * erased. You want to use the default memory allocator.+ * Then you initialize:+ Argon2_Context(out,8,pwd,32,salt,16,NULL,0,NULL,0,5,1<<20,4,4,NULL,NULL,true,false,false,false)+ */+typedef struct Argon2_Context {+    uint8_t *out;    /* output array */+    uint32_t outlen; /* digest length */++    uint8_t *pwd;    /* password array */+    uint32_t pwdlen; /* password length */++    uint8_t *salt;    /* salt array */+    uint32_t saltlen; /* salt length */++    uint8_t *secret;    /* key array */+    uint32_t secretlen; /* key length */++    uint8_t *ad;    /* associated data array */+    uint32_t adlen; /* associated data length */++    uint32_t t_cost;  /* number of passes */+    uint32_t m_cost;  /* amount of memory requested (KB) */+    uint32_t lanes;   /* number of lanes */+    uint32_t threads; /* maximum number of threads */++    uint32_t version; /* version number */++    allocate_fptr allocate_cbk; /* pointer to memory allocator */+    deallocate_fptr free_cbk;   /* pointer to memory deallocator */++    uint32_t flags; /* array of bool options */+} argon2_context;++/* Argon2 primitive type */+typedef enum Argon2_type {+  Argon2_d = 0,+  Argon2_i = 1,+  Argon2_id = 2+} argon2_type;++/* Version of the algorithm */+typedef enum Argon2_version {+    ARGON2_VERSION_10 = 0x10,+    ARGON2_VERSION_13 = 0x13,+    ARGON2_VERSION_NUMBER = ARGON2_VERSION_13+} argon2_version;++/*+ * Function that performs memory-hard hashing with certain degree of parallelism+ * @param  context  Pointer to the Argon2 internal structure+ * @return Error code if smth is wrong, ARGON2_OK otherwise+ */+ARGON2_PUBLIC int cryptonite_argon2_ctx(argon2_context *context, argon2_type type);++/**+ * Hashes a password with Argon2i, producing a raw hash by allocating memory at+ * @hash+ * @param t_cost Number of iterations+ * @param m_cost Sets memory usage to m_cost kibibytes+ * @param parallelism Number of threads and compute lanes+ * @param pwd Pointer to password+ * @param pwdlen Password size in bytes+ * @param salt Pointer to salt+ * @param saltlen Salt size in bytes+ * @param hash Buffer where to write the raw hash - updated by the function+ * @param hashlen Desired length of the hash in bytes+ * @pre   Different parallelism levels will give different results+ * @pre   Returns ARGON2_OK if successful+ */++/* generic function underlying the above ones */+ARGON2_PUBLIC int cryptonite_argon2_hash(const uint32_t t_cost, const uint32_t m_cost,+                              const uint32_t parallelism, const void *pwd,+                              const size_t pwdlen, const void *salt,+                              const size_t saltlen, void *hash,+                              const size_t hashlen, argon2_type type,+                              const uint32_t version);+++#if defined(__cplusplus)+}+#endif++#endif
+ cbits/argon2/blamka-round-opt.h view
@@ -0,0 +1,180 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#ifndef BLAKE_ROUND_MKA_OPT_H+#define BLAKE_ROUND_MKA_OPT_H++#include "blake2-impl.h"++#include <emmintrin.h>+#if defined(__SSSE3__)+#include <tmmintrin.h> /* for _mm_shuffle_epi8 and _mm_alignr_epi8 */+#endif++#if defined(__XOP__) && (defined(__GNUC__) || defined(__clang__))+#include <x86intrin.h>+#endif++#if !defined(__XOP__)+#if defined(__SSSE3__)+#define r16                                                                    \+    (_mm_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9))+#define r24                                                                    \+    (_mm_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10))+#define _mm_roti_epi64(x, c)                                                   \+    (-(c) == 32)                                                               \+        ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1))                      \+        : (-(c) == 24)                                                         \+              ? _mm_shuffle_epi8((x), r24)                                     \+              : (-(c) == 16)                                                   \+                    ? _mm_shuffle_epi8((x), r16)                               \+                    : (-(c) == 63)                                             \+                          ? _mm_xor_si128(_mm_srli_epi64((x), -(c)),           \+                                          _mm_add_epi64((x), (x)))             \+                          : _mm_xor_si128(_mm_srli_epi64((x), -(c)),           \+                                          _mm_slli_epi64((x), 64 - (-(c))))+#else /* defined(__SSE2__) */+#define _mm_roti_epi64(r, c)                                                   \+    _mm_xor_si128(_mm_srli_epi64((r), -(c)), _mm_slli_epi64((r), 64 - (-(c))))+#endif+#else+#endif++static BLAKE2_INLINE __m128i fBlaMka(__m128i x, __m128i y) {+    const __m128i z = _mm_mul_epu32(x, y);+    return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z));+}++#define G1(A0, B0, C0, D0, A1, B1, C1, D1)                                     \+    do {                                                                       \+        A0 = fBlaMka(A0, B0);                                                  \+        A1 = fBlaMka(A1, B1);                                                  \+                                                                               \+        D0 = _mm_xor_si128(D0, A0);                                            \+        D1 = _mm_xor_si128(D1, A1);                                            \+                                                                               \+        D0 = _mm_roti_epi64(D0, -32);                                          \+        D1 = _mm_roti_epi64(D1, -32);                                          \+                                                                               \+        C0 = fBlaMka(C0, D0);                                                  \+        C1 = fBlaMka(C1, D1);                                                  \+                                                                               \+        B0 = _mm_xor_si128(B0, C0);                                            \+        B1 = _mm_xor_si128(B1, C1);                                            \+                                                                               \+        B0 = _mm_roti_epi64(B0, -24);                                          \+        B1 = _mm_roti_epi64(B1, -24);                                          \+    } while ((void)0, 0)++#define G2(A0, B0, C0, D0, A1, B1, C1, D1)                                     \+    do {                                                                       \+        A0 = fBlaMka(A0, B0);                                                  \+        A1 = fBlaMka(A1, B1);                                                  \+                                                                               \+        D0 = _mm_xor_si128(D0, A0);                                            \+        D1 = _mm_xor_si128(D1, A1);                                            \+                                                                               \+        D0 = _mm_roti_epi64(D0, -16);                                          \+        D1 = _mm_roti_epi64(D1, -16);                                          \+                                                                               \+        C0 = fBlaMka(C0, D0);                                                  \+        C1 = fBlaMka(C1, D1);                                                  \+                                                                               \+        B0 = _mm_xor_si128(B0, C0);                                            \+        B1 = _mm_xor_si128(B1, C1);                                            \+                                                                               \+        B0 = _mm_roti_epi64(B0, -63);                                          \+        B1 = _mm_roti_epi64(B1, -63);                                          \+    } while ((void)0, 0)++#if defined(__SSSE3__)+#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1)                            \+    do {                                                                       \+        __m128i t0 = _mm_alignr_epi8(B1, B0, 8);                               \+        __m128i t1 = _mm_alignr_epi8(B0, B1, 8);                               \+        B0 = t0;                                                               \+        B1 = t1;                                                               \+                                                                               \+        t0 = C0;                                                               \+        C0 = C1;                                                               \+        C1 = t0;                                                               \+                                                                               \+        t0 = _mm_alignr_epi8(D1, D0, 8);                                       \+        t1 = _mm_alignr_epi8(D0, D1, 8);                                       \+        D0 = t1;                                                               \+        D1 = t0;                                                               \+    } while ((void)0, 0)++#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1)                          \+    do {                                                                       \+        __m128i t0 = _mm_alignr_epi8(B0, B1, 8);                               \+        __m128i t1 = _mm_alignr_epi8(B1, B0, 8);                               \+        B0 = t0;                                                               \+        B1 = t1;                                                               \+                                                                               \+        t0 = C0;                                                               \+        C0 = C1;                                                               \+        C1 = t0;                                                               \+                                                                               \+        t0 = _mm_alignr_epi8(D0, D1, 8);                                       \+        t1 = _mm_alignr_epi8(D1, D0, 8);                                       \+        D0 = t1;                                                               \+        D1 = t0;                                                               \+    } while ((void)0, 0)+#else /* SSE2 */+#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1)                            \+    do {                                                                       \+        __m128i t0 = D0;                                                       \+        __m128i t1 = B0;                                                       \+        D0 = C0;                                                               \+        C0 = C1;                                                               \+        C1 = D0;                                                               \+        D0 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t0, t0));               \+        D1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(D1, D1));               \+        B0 = _mm_unpackhi_epi64(B0, _mm_unpacklo_epi64(B1, B1));               \+        B1 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(t1, t1));               \+    } while ((void)0, 0)++#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1)                          \+    do {                                                                       \+        __m128i t0, t1;                                                        \+        t0 = C0;                                                               \+        C0 = C1;                                                               \+        C1 = t0;                                                               \+        t0 = B0;                                                               \+        t1 = D0;                                                               \+        B0 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(B0, B0));               \+        B1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(B1, B1));               \+        D0 = _mm_unpackhi_epi64(D0, _mm_unpacklo_epi64(D1, D1));               \+        D1 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t1, t1));               \+    } while ((void)0, 0)+#endif++#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1)                           \+    do {                                                                       \+        G1(A0, B0, C0, D0, A1, B1, C1, D1);                                    \+        G2(A0, B0, C0, D0, A1, B1, C1, D1);                                    \+                                                                               \+        DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1);                           \+                                                                               \+        G1(A0, B0, C0, D0, A1, B1, C1, D1);                                    \+        G2(A0, B0, C0, D0, A1, B1, C1, D1);                                    \+                                                                               \+        UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1);                         \+    } while ((void)0, 0)++#endif
+ cbits/argon2/blamka-round-ref.h view
@@ -0,0 +1,56 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#ifndef BLAKE_ROUND_MKA_H+#define BLAKE_ROUND_MKA_H++#include "blake2.h"+#include "blake2-impl.h"++/*designed by the Lyra PHC team */+static BLAKE2_INLINE uint64_t fBlaMka(uint64_t x, uint64_t y) {+    const uint64_t m = UINT64_C(0xFFFFFFFF);+    const uint64_t xy = (x & m) * (y & m);+    return x + y + 2 * xy;+}++#define G(a, b, c, d)                                                          \+    do {                                                                       \+        a = fBlaMka(a, b);                                                     \+        d = rotr64(d ^ a, 32);                                                 \+        c = fBlaMka(c, d);                                                     \+        b = rotr64(b ^ c, 24);                                                 \+        a = fBlaMka(a, b);                                                     \+        d = rotr64(d ^ a, 16);                                                 \+        c = fBlaMka(c, d);                                                     \+        b = rotr64(b ^ c, 63);                                                 \+    } while ((void)0, 0)++#define BLAKE2_ROUND_NOMSG(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,   \+                           v12, v13, v14, v15)                                 \+    do {                                                                       \+        G(v0, v4, v8, v12);                                                    \+        G(v1, v5, v9, v13);                                                    \+        G(v2, v6, v10, v14);                                                   \+        G(v3, v7, v11, v15);                                                   \+        G(v0, v5, v10, v15);                                                   \+        G(v1, v6, v11, v12);                                                   \+        G(v2, v7, v8, v13);                                                    \+        G(v3, v4, v9, v14);                                                    \+    } while ((void)0, 0)++#endif
+ cbits/argon2/core.c view
@@ -0,0 +1,701 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++/*For memory wiping*/+#ifdef _MSC_VER+#include <windows.h>+#include <winbase.h> /* For SecureZeroMemory */+#endif+#if defined __STDC_LIB_EXT1__+#define __STDC_WANT_LIB_EXT1__ 1+#endif+#define VC_GE_2005(version) (version >= 1400)++#include <inttypes.h>+#include <stdio.h>+#include <stdlib.h>+#include <string.h>++#include "core.h"+#include "thread.c"+#include "blake2.h"+#include "blake2-impl.h"++#ifdef GENKAT+#include "genkat.h"+#endif++#ifdef SUPPORT_SSE+#include "opt.c"+#else+#include "ref.c"+#endif++#if defined(__clang__)+#if __has_attribute(optnone)+#define NOT_OPTIMIZED __attribute__((optnone))+#endif+#elif defined(__GNUC__)+#define GCC_VERSION                                                            \+    (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)+#if GCC_VERSION >= 40400+#define NOT_OPTIMIZED __attribute__((optimize("O0")))+#endif+#endif+#ifndef NOT_OPTIMIZED+#define NOT_OPTIMIZED+#endif++/* Argon2 Team - Begin Code */+static int blake2b_long(void *pout, size_t outlen, const void *in, size_t inlen) {+    uint8_t *out = (uint8_t *)pout;+    blake2b_state blake_state;+    uint8_t outlen_bytes[sizeof(uint32_t)] = {0};+    int ret = -1;++    if (outlen > UINT32_MAX) {+        goto fail;+    }++    /* Ensure little-endian byte order! */+    store32(outlen_bytes, (uint32_t)outlen);++#define TRY(statement)                                                         \+    do {                                                                       \+        ret = statement;                                                       \+        if (ret < 0) {                                                         \+            goto fail;                                                         \+        }                                                                      \+    } while ((void)0, 0)++    if (outlen <= BLAKE2B_OUTBYTES) {+        TRY(blake2b_init(&blake_state, outlen));+        TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes)));+        TRY(blake2b_update(&blake_state, in, inlen));+        TRY(blake2b_final(&blake_state, out, outlen));+    } else {+        uint32_t toproduce;+        uint8_t out_buffer[BLAKE2B_OUTBYTES];+        uint8_t in_buffer[BLAKE2B_OUTBYTES];+        TRY(blake2b_init(&blake_state, BLAKE2B_OUTBYTES));+        TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes)));+        TRY(blake2b_update(&blake_state, in, inlen));+        TRY(blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES));+        memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2);+        out += BLAKE2B_OUTBYTES / 2;+        toproduce = (uint32_t)outlen - BLAKE2B_OUTBYTES / 2;++        while (toproduce > BLAKE2B_OUTBYTES) {+            memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES);+            TRY(blake2b(out_buffer, BLAKE2B_OUTBYTES, in_buffer,+                        BLAKE2B_OUTBYTES, NULL, 0));+            memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2);+            out += BLAKE2B_OUTBYTES / 2;+            toproduce -= BLAKE2B_OUTBYTES / 2;+        }++        memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES);+        TRY(blake2b(out_buffer, toproduce, in_buffer, BLAKE2B_OUTBYTES, NULL,+                    0));+        memcpy(out, out_buffer, toproduce);+    }+fail:+    clear_internal_memory(&blake_state, sizeof(blake_state));+    return ret;+#undef TRY+}+/* Argon2 Team - End Code */++/***************Instance and Position constructors**********/+static void init_block_value(block *b, uint8_t in) { memset(b->v, in, sizeof(b->v)); }++static void copy_block(block *dst, const block *src) {+    memcpy(dst->v, src->v, sizeof(uint64_t) * ARGON2_QWORDS_IN_BLOCK);+}++static void xor_block(block *dst, const block *src) {+    int i;+    for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {+        dst->v[i] ^= src->v[i];+    }+}++static void load_block(block *dst, const void *input) {+    unsigned i;+    for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {+        dst->v[i] = load64((const uint8_t *)input + i * sizeof(dst->v[i]));+    }+}++static void store_block(void *output, const block *src) {+    unsigned i;+    for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {+        store64((uint8_t *)output + i * sizeof(src->v[i]), src->v[i]);+    }+}++/***************Memory functions*****************/+static +int allocate_memory(const argon2_context *context, uint8_t **memory,+                    size_t num, size_t size) {+    size_t memory_size = num*size;+    if (memory == NULL) {+        return ARGON2_MEMORY_ALLOCATION_ERROR;+    }++    /* 1. Check for multiplication overflow */+    if (size != 0 && memory_size / size != num) {+        return ARGON2_MEMORY_ALLOCATION_ERROR;+    }++    /* 2. Try to allocate with appropriate allocator */+    if (context->allocate_cbk) {+        (context->allocate_cbk)(memory, memory_size);+    } else {+        *memory = malloc(memory_size);+    }++    if (*memory == NULL) {+        return ARGON2_MEMORY_ALLOCATION_ERROR;+    }++    return ARGON2_OK;+}+static +void free_memory(const argon2_context *context, uint8_t *memory,+                 size_t num, size_t size) {+    size_t memory_size = num*size;+    clear_internal_memory(memory, memory_size);+    if (context->free_cbk) {+        (context->free_cbk)(memory, memory_size);+    } else {+        free(memory);+    }+}++void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) {+#if defined(_MSC_VER) && VC_GE_2005(_MSC_VER)+    SecureZeroMemory(v, n);+#elif defined memset_s+    memset_s(v, n, 0, n);+#elif defined(__OpenBSD__)+    explicit_bzero(v, n);+#else+    static void *(*const volatile memset_sec)(void *, int, size_t) = &memset;+    memset_sec(v, 0, n);+#endif+}++/* Memory clear flag defaults to true. */+static int FLAG_clear_internal_memory = 1;+static void clear_internal_memory(void *v, size_t n) {+  if (FLAG_clear_internal_memory && v) {+    secure_wipe_memory(v, n);+  }+}++static void finalize(const argon2_context *context, argon2_instance_t *instance) {+    if (context != NULL && instance != NULL) {+        block blockhash;+        uint32_t l;++        copy_block(&blockhash, instance->memory + instance->lane_length - 1);++        /* XOR the last blocks */+        for (l = 1; l < instance->lanes; ++l) {+            uint32_t last_block_in_lane =+                l * instance->lane_length + (instance->lane_length - 1);+            xor_block(&blockhash, instance->memory + last_block_in_lane);+        }++        /* Hash the result */+        {+            uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE];+            store_block(blockhash_bytes, &blockhash);+            blake2b_long(context->out, context->outlen, blockhash_bytes,+                         ARGON2_BLOCK_SIZE);+            /* clear blockhash and blockhash_bytes */+            clear_internal_memory(blockhash.v, ARGON2_BLOCK_SIZE);+            clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE);+        }++#ifdef GENKAT+        print_tag(context->out, context->outlen);+#endif++        free_memory(context, (uint8_t *)instance->memory,+                    instance->memory_blocks, sizeof(block));+    }+}++static uint32_t index_alpha(const argon2_instance_t *instance,+                     const argon2_position_t *position, uint32_t pseudo_rand,+                     int same_lane) {+    /*+     * Pass 0:+     *      This lane : all already finished segments plus already constructed+     * blocks in this segment+     *      Other lanes : all already finished segments+     * Pass 1+:+     *      This lane : (SYNC_POINTS - 1) last segments plus already constructed+     * blocks in this segment+     *      Other lanes : (SYNC_POINTS - 1) last segments+     */+    uint32_t reference_area_size;+    uint64_t relative_position;+    uint32_t start_position, absolute_position;++    if (0 == position->pass) {+        /* First pass */+        if (0 == position->slice) {+            /* First slice */+            reference_area_size =+                position->index - 1; /* all but the previous */+        } else {+            if (same_lane) {+                /* The same lane => add current segment */+                reference_area_size =+                    position->slice * instance->segment_length ++                    position->index - 1;+            } else {+                reference_area_size =+                    position->slice * instance->segment_length ++                    ((position->index == 0) ? (-1) : 0);+            }+        }+    } else {+        /* Second pass */+        if (same_lane) {+            reference_area_size = instance->lane_length -+                                  instance->segment_length + position->index -+                                  1;+        } else {+            reference_area_size = instance->lane_length -+                                  instance->segment_length ++                                  ((position->index == 0) ? (-1) : 0);+        }+    }++    /* 1.2.4. Mapping pseudo_rand to 0..<reference_area_size-1> and produce+     * relative position */+    relative_position = pseudo_rand;+    relative_position = relative_position * relative_position >> 32;+    relative_position = reference_area_size - 1 -+                        (reference_area_size * relative_position >> 32);++    /* 1.2.5 Computing starting position */+    start_position = 0;++    if (0 != position->pass) {+        start_position = (position->slice == ARGON2_SYNC_POINTS - 1)+                             ? 0+                             : (position->slice + 1) * instance->segment_length;+    }++    /* 1.2.6. Computing absolute position */+    absolute_position = (start_position + relative_position) %+                        instance->lane_length; /* absolute position */+    return absolute_position;+}++/* Single-threaded version for p=1 case */+static int fill_memory_blocks_st(argon2_instance_t *instance) {+    uint32_t r, s, l;++    for (r = 0; r < instance->passes; ++r) {+        for (s = 0; s < ARGON2_SYNC_POINTS; ++s) {+            for (l = 0; l < instance->lanes; ++l) {+                argon2_position_t position = {r, l, (uint8_t)s, 0};+                fill_segment(instance, position);+            }+        }+#ifdef GENKAT+        internal_kat(instance, r); /* Print all memory blocks */+#endif+    }+    return ARGON2_OK;+}++#if !defined(ARGON2_NO_THREADS)++#ifdef _WIN32+static unsigned __stdcall fill_segment_thr(void *thread_data)+#else+static void *fill_segment_thr(void *thread_data)+#endif+{+    argon2_thread_data *my_data = thread_data;+    fill_segment(my_data->instance_ptr, my_data->pos);+    argon2_thread_exit();+    return 0;+}++/* Multi-threaded version for p > 1 case */+static int fill_memory_blocks_mt(argon2_instance_t *instance) {+    uint32_t r, s;+    argon2_thread_handle_t *thread = NULL;+    argon2_thread_data *thr_data = NULL;+    int rc = ARGON2_OK;++    /* 1. Allocating space for threads */+    thread = calloc(instance->lanes, sizeof(argon2_thread_handle_t));+    if (thread == NULL) {+        rc = ARGON2_MEMORY_ALLOCATION_ERROR;+        goto fail;+    }++    thr_data = calloc(instance->lanes, sizeof(argon2_thread_data));+    if (thr_data == NULL) {+        rc = ARGON2_MEMORY_ALLOCATION_ERROR;+        goto fail;+    }++    for (r = 0; r < instance->passes; ++r) {+        for (s = 0; s < ARGON2_SYNC_POINTS; ++s) {+            uint32_t l;++            /* 2. Calling threads */+            for (l = 0; l < instance->lanes; ++l) {+                argon2_position_t position;++                /* 2.1 Join a thread if limit is exceeded */+                if (l >= instance->threads) {+                    if (argon2_thread_join(thread[l - instance->threads])) {+                        rc = ARGON2_THREAD_FAIL;+                        goto fail;+                    }+                }++                /* 2.2 Create thread */+                position.pass = r;+                position.lane = l;+                position.slice = (uint8_t)s;+                position.index = 0;+                thr_data[l].instance_ptr =+                    instance; /* preparing the thread input */+                memcpy(&(thr_data[l].pos), &position,+                       sizeof(argon2_position_t));+                if (argon2_thread_create(&thread[l], &fill_segment_thr,+                                         (void *)&thr_data[l])) {+                    rc = ARGON2_THREAD_FAIL;+                    goto fail;+                }++                /* fill_segment(instance, position); */+                /*Non-thread equivalent of the lines above */+            }++            /* 3. Joining remaining threads */+            for (l = instance->lanes - instance->threads; l < instance->lanes;+                 ++l) {+                if (argon2_thread_join(thread[l])) {+                    rc = ARGON2_THREAD_FAIL;+                    goto fail;+                }+            }+        }++#ifdef GENKAT+        internal_kat(instance, r); /* Print all memory blocks */+#endif+    }++fail:+    if (thread != NULL) {+        free(thread);+    }+    if (thr_data != NULL) {+        free(thr_data);+    }+    return rc;+}++#endif /* ARGON2_NO_THREADS */+static +int fill_memory_blocks(argon2_instance_t *instance) {+	if (instance == NULL || instance->lanes == 0) {+	    return ARGON2_INCORRECT_PARAMETER;+    }+#if defined(ARGON2_NO_THREADS)+    return fill_memory_blocks_st(instance);+#else+    return instance->threads == 1 ?+			fill_memory_blocks_st(instance) : fill_memory_blocks_mt(instance);+#endif+}+static +int validate_inputs(const argon2_context *context) {+    if (NULL == context) {+        return ARGON2_INCORRECT_PARAMETER;+    }++    if (NULL == context->out) {+        return ARGON2_OUTPUT_PTR_NULL;+    }++    /* Validate output length */+    if (ARGON2_MIN_OUTLEN > context->outlen) {+        return ARGON2_OUTPUT_TOO_SHORT;+    }++    if (ARGON2_MAX_OUTLEN < context->outlen) {+        return ARGON2_OUTPUT_TOO_LONG;+    }++    /* Validate password (required param) */+    if (NULL == context->pwd) {+        if (0 != context->pwdlen) {+            return ARGON2_PWD_PTR_MISMATCH;+        }+    }++    if (ARGON2_MIN_PWD_LENGTH > context->pwdlen) {+      return ARGON2_PWD_TOO_SHORT;+    }++    if (ARGON2_MAX_PWD_LENGTH < context->pwdlen) {+        return ARGON2_PWD_TOO_LONG;+    }++    /* Validate salt (required param) */+    if (NULL == context->salt) {+        if (0 != context->saltlen) {+            return ARGON2_SALT_PTR_MISMATCH;+        }+    }++    if (ARGON2_MIN_SALT_LENGTH > context->saltlen) {+        return ARGON2_SALT_TOO_SHORT;+    }++    if (ARGON2_MAX_SALT_LENGTH < context->saltlen) {+        return ARGON2_SALT_TOO_LONG;+    }++    /* Validate secret (optional param) */+    if (NULL == context->secret) {+        if (0 != context->secretlen) {+            return ARGON2_SECRET_PTR_MISMATCH;+        }+    } else {+        if (ARGON2_MIN_SECRET > context->secretlen) {+            return ARGON2_SECRET_TOO_SHORT;+        }+        if (ARGON2_MAX_SECRET < context->secretlen) {+            return ARGON2_SECRET_TOO_LONG;+        }+    }++    /* Validate associated data (optional param) */+    if (NULL == context->ad) {+        if (0 != context->adlen) {+            return ARGON2_AD_PTR_MISMATCH;+        }+    } else {+        if (ARGON2_MIN_AD_LENGTH > context->adlen) {+            return ARGON2_AD_TOO_SHORT;+        }+        if (ARGON2_MAX_AD_LENGTH < context->adlen) {+            return ARGON2_AD_TOO_LONG;+        }+    }++    /* Validate memory cost */+    if (ARGON2_MIN_MEMORY > context->m_cost) {+        return ARGON2_MEMORY_TOO_LITTLE;+    }++    if (ARGON2_MAX_MEMORY < context->m_cost) {+        return ARGON2_MEMORY_TOO_MUCH;+    }++    if (context->m_cost < 8 * context->lanes) {+        return ARGON2_MEMORY_TOO_LITTLE;+    }++    /* Validate time cost */+    if (ARGON2_MIN_TIME > context->t_cost) {+        return ARGON2_TIME_TOO_SMALL;+    }++    if (ARGON2_MAX_TIME < context->t_cost) {+        return ARGON2_TIME_TOO_LARGE;+    }++    /* Validate lanes */+    if (ARGON2_MIN_LANES > context->lanes) {+        return ARGON2_LANES_TOO_FEW;+    }++    if (ARGON2_MAX_LANES < context->lanes) {+        return ARGON2_LANES_TOO_MANY;+    }++    /* Validate threads */+    if (ARGON2_MIN_THREADS > context->threads) {+        return ARGON2_THREADS_TOO_FEW;+    }++    if (ARGON2_MAX_THREADS < context->threads) {+        return ARGON2_THREADS_TOO_MANY;+    }++    if (NULL != context->allocate_cbk && NULL == context->free_cbk) {+        return ARGON2_FREE_MEMORY_CBK_NULL;+    }++    if (NULL == context->allocate_cbk && NULL != context->free_cbk) {+        return ARGON2_ALLOCATE_MEMORY_CBK_NULL;+    }++    return ARGON2_OK;+}+static +void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance) {+    uint32_t l;+    /* Make the first and second block in each lane as G(H0||i||0) or+       G(H0||i||1) */+    uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE];+    for (l = 0; l < instance->lanes; ++l) {++        store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 0);+        store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH + 4, l);+        blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash,+                     ARGON2_PREHASH_SEED_LENGTH);+        load_block(&instance->memory[l * instance->lane_length + 0],+                   blockhash_bytes);++        store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 1);+        blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash,+                     ARGON2_PREHASH_SEED_LENGTH);+        load_block(&instance->memory[l * instance->lane_length + 1],+                   blockhash_bytes);+    }+    clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE);+}+static +void initial_hash(uint8_t *blockhash, argon2_context *context,+                  argon2_type type) {+    blake2b_state BlakeHash;+    uint8_t value[sizeof(uint32_t)];++    if (NULL == context || NULL == blockhash) {+        return;+    }++    blake2b_init(&BlakeHash, ARGON2_PREHASH_DIGEST_LENGTH);++    store32(&value, context->lanes);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    store32(&value, context->outlen);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    store32(&value, context->m_cost);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    store32(&value, context->t_cost);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    store32(&value, context->version);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    store32(&value, (uint32_t)type);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    store32(&value, context->pwdlen);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    if (context->pwd != NULL) {+        blake2b_update(&BlakeHash, (const uint8_t *)context->pwd,+                       context->pwdlen);++        if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) {+            secure_wipe_memory(context->pwd, context->pwdlen);+            context->pwdlen = 0;+        }+    }++    store32(&value, context->saltlen);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    if (context->salt != NULL) {+        blake2b_update(&BlakeHash, (const uint8_t *)context->salt,+                       context->saltlen);+    }++    store32(&value, context->secretlen);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    if (context->secret != NULL) {+        blake2b_update(&BlakeHash, (const uint8_t *)context->secret,+                       context->secretlen);++        if (context->flags & ARGON2_FLAG_CLEAR_SECRET) {+            secure_wipe_memory(context->secret, context->secretlen);+            context->secretlen = 0;+        }+    }++    store32(&value, context->adlen);+    blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));++    if (context->ad != NULL) {+        blake2b_update(&BlakeHash, (const uint8_t *)context->ad,+                       context->adlen);+    }++    blake2b_final(&BlakeHash, blockhash, ARGON2_PREHASH_DIGEST_LENGTH);+}+static +int initialize(argon2_instance_t *instance, argon2_context *context) {+    uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH];+    int result = ARGON2_OK;++    if (instance == NULL || context == NULL)+        return ARGON2_INCORRECT_PARAMETER;+    instance->context_ptr = context;++    /* 1. Memory allocation */+    result = allocate_memory(context, (uint8_t **)&(instance->memory),+                             instance->memory_blocks, sizeof(block));+    if (result != ARGON2_OK) {+        return result;+    }++    /* 2. Initial hashing */+    /* H_0 + 8 extra bytes to produce the first blocks */+    /* uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; */+    /* Hashing all inputs */+    initial_hash(blockhash, context, instance->type);+    /* Zeroing 8 extra bytes */+    clear_internal_memory(blockhash + ARGON2_PREHASH_DIGEST_LENGTH,+                          ARGON2_PREHASH_SEED_LENGTH -+                              ARGON2_PREHASH_DIGEST_LENGTH);++#ifdef GENKAT+    initial_kat(blockhash, context, instance->type);+#endif++    /* 3. Creating first blocks, we always have at least two blocks in a slice+     */+    fill_first_blocks(blockhash, instance);+    /* Clearing the hash */+    clear_internal_memory(blockhash, ARGON2_PREHASH_SEED_LENGTH);++    return ARGON2_OK;+}
+ cbits/argon2/core.h view
@@ -0,0 +1,234 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#ifndef ARGON2_CORE_H+#define ARGON2_CORE_H++#include "argon2.h"++#if defined(_MSC_VER)+#define ALIGN(n) __declspec(align(16))+#elif defined(__GNUC__) || defined(__clang)+#define ALIGN(x) __attribute__((__aligned__(x)))+#else+#define ALIGN(x)+#endif++#define CONST_CAST(x) (x)(uintptr_t)++/**********************Argon2 internal constants*******************************/++enum argon2_core_constants {+    /* Memory block size in bytes */+    ARGON2_BLOCK_SIZE = 1024,+    ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 8,+    ARGON2_OWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 16,++    /* Number of pseudo-random values generated by one call to Blake in Argon2i+       to+       generate reference block positions */+    ARGON2_ADDRESSES_IN_BLOCK = 128,++    /* Pre-hashing digest length and its extension*/+    ARGON2_PREHASH_DIGEST_LENGTH = 64,+    ARGON2_PREHASH_SEED_LENGTH = 72+};++/*************************Argon2 internal data types***********************/++/*+ * Structure for the (1KB) memory block implemented as 128 64-bit words.+ * Memory blocks can be copied, XORed. Internal words can be accessed by [] (no+ * bounds checking).+ */+typedef struct block_ { uint64_t v[ARGON2_QWORDS_IN_BLOCK]; } block;++/*****************Functions that work with the block******************/++/* Initialize each byte of the block with @in */+static void init_block_value(block *b, uint8_t in);++/* Copy block @src to block @dst */+static void copy_block(block *dst, const block *src);++/* XOR @src onto @dst bytewise */+static void xor_block(block *dst, const block *src);++/*+ * Argon2 instance: memory pointer, number of passes, amount of memory, type,+ * and derived values.+ * Used to evaluate the number and location of blocks to construct in each+ * thread+ */+typedef struct Argon2_instance_t {+    block *memory;          /* Memory pointer */+    uint32_t version;+    uint32_t passes;        /* Number of passes */+    uint32_t memory_blocks; /* Number of blocks in memory */+    uint32_t segment_length;+    uint32_t lane_length;+    uint32_t lanes;+    uint32_t threads;+    argon2_type type;+    int print_internals; /* whether to print the memory blocks */+    argon2_context *context_ptr; /* points back to original context */+} argon2_instance_t;++/*+ * Argon2 position: where we construct the block right now. Used to distribute+ * work between threads.+ */+typedef struct Argon2_position_t {+    uint32_t pass;+    uint32_t lane;+    uint8_t slice;+    uint32_t index;+} argon2_position_t;++/*Struct that holds the inputs for thread handling FillSegment*/+typedef struct Argon2_thread_data {+    argon2_instance_t *instance_ptr;+    argon2_position_t pos;+} argon2_thread_data;++/*************************Argon2 core functions********************************/++/* Allocates memory to the given pointer, uses the appropriate allocator as+ * specified in the context. Total allocated memory is num*size.+ * @param context argon2_context which specifies the allocator+ * @param memory pointer to the pointer to the memory+ * @param size the size in bytes for each element to be allocated+ * @param num the number of elements to be allocated+ * @return ARGON2_OK if @memory is a valid pointer and memory is allocated+ */+static int allocate_memory(const argon2_context *context, uint8_t **memory,+                    size_t num, size_t size);++/*+ * Frees memory at the given pointer, uses the appropriate deallocator as+ * specified in the context. Also cleans the memory using clear_internal_memory.+ * @param context argon2_context which specifies the deallocator+ * @param memory pointer to buffer to be freed+ * @param size the size in bytes for each element to be deallocated+ * @param num the number of elements to be deallocated+ */+static void free_memory(const argon2_context *context, uint8_t *memory,+                 size_t num, size_t size);++/* Function that securely cleans the memory. This ignores any flags set+ * regarding clearing memory. Usually one just calls clear_internal_memory.+ * @param mem Pointer to the memory+ * @param s Memory size in bytes+ */+static void secure_wipe_memory(void *v, size_t n);++/* Function that securely clears the memory if FLAG_clear_internal_memory is+ * set. If the flag isn't set, this function does nothing.+ * @param mem Pointer to the memory+ * @param s Memory size in bytes+ */+static void clear_internal_memory(void *v, size_t n);++/*+ * Computes absolute position of reference block in the lane following a skewed+ * distribution and using a pseudo-random value as input+ * @param instance Pointer to the current instance+ * @param position Pointer to the current position+ * @param pseudo_rand 32-bit pseudo-random value used to determine the position+ * @param same_lane Indicates if the block will be taken from the current lane.+ * If so we can reference the current segment+ * @pre All pointers must be valid+ */+static uint32_t index_alpha(const argon2_instance_t *instance,+                     const argon2_position_t *position, uint32_t pseudo_rand,+                     int same_lane);++/*+ * Function that validates all inputs against predefined restrictions and return+ * an error code+ * @param context Pointer to current Argon2 context+ * @return ARGON2_OK if everything is all right, otherwise one of error codes+ * (all defined in <argon2.h>+ */+static int validate_inputs(const argon2_context *context);++/*+ * Hashes all the inputs into @a blockhash[PREHASH_DIGEST_LENGTH], clears+ * password and secret if needed+ * @param  context  Pointer to the Argon2 internal structure containing memory+ * pointer, and parameters for time and space requirements.+ * @param  blockhash Buffer for pre-hashing digest+ * @param  type Argon2 type+ * @pre    @a blockhash must have at least @a PREHASH_DIGEST_LENGTH bytes+ * allocated+ */+static void initial_hash(uint8_t *blockhash, argon2_context *context,+                  argon2_type type);++/*+ * Function creates first 2 blocks per lane+ * @param instance Pointer to the current instance+ * @param blockhash Pointer to the pre-hashing digest+ * @pre blockhash must point to @a PREHASH_SEED_LENGTH allocated values+ */+static void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance);++/*+ * Function allocates memory, hashes the inputs with Blake,  and creates first+ * two blocks. Returns the pointer to the main memory with 2 blocks per lane+ * initialized+ * @param  context  Pointer to the Argon2 internal structure containing memory+ * pointer, and parameters for time and space requirements.+ * @param  instance Current Argon2 instance+ * @return Zero if successful, -1 if memory failed to allocate. @context->state+ * will be modified if successful.+ */+static int initialize(argon2_instance_t *instance, argon2_context *context);++/*+ * XORing the last block of each lane, hashing it, making the tag. Deallocates+ * the memory.+ * @param context Pointer to current Argon2 context (use only the out parameters+ * from it)+ * @param instance Pointer to current instance of Argon2+ * @pre instance->state must point to necessary amount of memory+ * @pre context->out must point to outlen bytes of memory+ * @pre if context->free_cbk is not NULL, it should point to a function that+ * deallocates memory+ */+static void finalize(const argon2_context *context, argon2_instance_t *instance);++/*+ * Function that fills the segment using previous segments also from other+ * threads+ * @param context current context+ * @param instance Pointer to the current instance+ * @param position Current position+ * @pre all block pointers must be valid+ */+static void fill_segment(const argon2_instance_t *instance,+                  argon2_position_t position);++/*+ * Function that fills the entire memory t_cost times based on the first two+ * blocks in each lane+ * @param instance Pointer to the current instance+ * @return ARGON2_OK if successful, @context->state+ */+static int fill_memory_blocks(argon2_instance_t *instance);++#endif
+ cbits/argon2/opt.c view
@@ -0,0 +1,186 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#include <stdint.h>+#include <string.h>+#include <stdlib.h>++#include "argon2.h"+#include "opt.h"++#include "blake2/blake2.h"+#include "blake2/blamka-round-opt.h"++static void fill_block(__m128i *state, const block *ref_block, block *next_block,+                int with_xor) {+    __m128i block_XY[ARGON2_OWORDS_IN_BLOCK];+    unsigned int i;++    if (with_xor) {+        for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {+            state[i] = _mm_xor_si128(+                state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i));+            block_XY[i] = _mm_xor_si128(+                state[i], _mm_loadu_si128((const __m128i *)next_block->v + i));+        }+    } else {+        for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {+            block_XY[i] = state[i] = _mm_xor_si128(+                state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i));+        }+    }++    for (i = 0; i < 8; ++i) {+        BLAKE2_ROUND(state[8 * i + 0], state[8 * i + 1], state[8 * i + 2],+            state[8 * i + 3], state[8 * i + 4], state[8 * i + 5],+            state[8 * i + 6], state[8 * i + 7]);+    }++    for (i = 0; i < 8; ++i) {+        BLAKE2_ROUND(state[8 * 0 + i], state[8 * 1 + i], state[8 * 2 + i],+            state[8 * 3 + i], state[8 * 4 + i], state[8 * 5 + i],+            state[8 * 6 + i], state[8 * 7 + i]);+    }++    for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {+        state[i] = _mm_xor_si128(state[i], block_XY[i]);+        _mm_storeu_si128((__m128i *)next_block->v + i, state[i]);+    }+}++static void next_addresses(block *address_block, block *input_block) {+    /*Temporary zero-initialized blocks*/+    __m128i zero_block[ARGON2_OWORDS_IN_BLOCK];+    __m128i zero2_block[ARGON2_OWORDS_IN_BLOCK];++    memset(zero_block, 0, sizeof(zero_block));+    memset(zero2_block, 0, sizeof(zero2_block));++    /*Increasing index counter*/+    input_block->v[6]++;++    /*First iteration of G*/+    fill_block(zero_block, input_block, address_block, 0);++    /*Second iteration of G*/+    fill_block(zero2_block, address_block, address_block, 0);+}++static void fill_segment(const argon2_instance_t *instance,+                  argon2_position_t position) {+    block *ref_block = NULL, *curr_block = NULL;+    block address_block, input_block;+    uint64_t pseudo_rand, ref_index, ref_lane;+    uint32_t prev_offset, curr_offset;+    uint32_t starting_index, i;+    __m128i state[64];+    int data_independent_addressing;++    if (instance == NULL) {+        return;+    }++    data_independent_addressing =+        (instance->type == Argon2_i) ||+        (instance->type == Argon2_id && (position.pass == 0) &&+         (position.slice < ARGON2_SYNC_POINTS / 2));++    if (data_independent_addressing) {+        init_block_value(&input_block, 0);++        input_block.v[0] = position.pass;+        input_block.v[1] = position.lane;+        input_block.v[2] = position.slice;+        input_block.v[3] = instance->memory_blocks;+        input_block.v[4] = instance->passes;+        input_block.v[5] = instance->type;+    }++    starting_index = 0;++    if ((0 == position.pass) && (0 == position.slice)) {+        starting_index = 2; /* we have already generated the first two blocks */++        /* Don't forget to generate the first block of addresses: */+        if (data_independent_addressing) {+            next_addresses(&address_block, &input_block);+        }+    }++    /* Offset of the current block */+    curr_offset = position.lane * instance->lane_length ++                  position.slice * instance->segment_length + starting_index;++    if (0 == curr_offset % instance->lane_length) {+        /* Last block in this lane */+        prev_offset = curr_offset + instance->lane_length - 1;+    } else {+        /* Previous block */+        prev_offset = curr_offset - 1;+    }++    memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE);++    for (i = starting_index; i < instance->segment_length;+         ++i, ++curr_offset, ++prev_offset) {+        /*1.1 Rotating prev_offset if needed */+        if (curr_offset % instance->lane_length == 1) {+            prev_offset = curr_offset - 1;+        }++        /* 1.2 Computing the index of the reference block */+        /* 1.2.1 Taking pseudo-random value from the previous block */+        if (data_independent_addressing) {+            if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {+                next_addresses(&address_block, &input_block);+            }+            pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];+        } else {+            pseudo_rand = instance->memory[prev_offset].v[0];+        }++        /* 1.2.2 Computing the lane of the reference block */+        ref_lane = ((pseudo_rand >> 32)) % instance->lanes;++        if ((position.pass == 0) && (position.slice == 0)) {+            /* Can not reference other lanes yet */+            ref_lane = position.lane;+        }++        /* 1.2.3 Computing the number of possible reference block within the+         * lane.+         */+        position.index = i;+        ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,+                                ref_lane == position.lane);++        /* 2 Creating a new block */+        ref_block =+            instance->memory + instance->lane_length * ref_lane + ref_index;+        curr_block = instance->memory + curr_offset;+        if (ARGON2_VERSION_10 == instance->version) {+            /* version 1.2.1 and earlier: overwrite, not XOR */+            fill_block(state, ref_block, curr_block, 0);+        } else {+            if(0 == position.pass) {+                fill_block(state, ref_block, curr_block, 0);+            } else {+                fill_block(state, ref_block, curr_block, 1);+            }+        }+    }+}
+ cbits/argon2/opt.h view
@@ -0,0 +1,35 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#ifndef ARGON2_OPT_H+#define ARGON2_OPT_H++#include "core.h"+#include <emmintrin.h>++/*+ * Function fills a new memory block and optionally XORs the old block over the new one.+ * Memory must be initialized.+ * @param state Pointer to the just produced block. Content will be updated(!)+ * @param ref_block Pointer to the reference block+ * @param next_block Pointer to the block to be XORed over. May coincide with @ref_block+ * @param with_xor Whether to XOR into the new block (1) or just overwrite (0)+ * @pre all block pointers must be valid+ */+static void fill_block(__m128i *s, const block *ref_block, block *next_block, int with_xor);++#endif /* ARGON2_OPT_H */
+ cbits/argon2/ref.c view
@@ -0,0 +1,185 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#include <stdint.h>+#include <string.h>+#include <stdlib.h>++#include "argon2.h"+#include "ref.h"++#include "blamka-round-ref.h"+#include "blake2-impl.h"+#include "blake2.h"+++static void fill_block(const block *prev_block, const block *ref_block,+                block *next_block, int with_xor) {+    block blockR, block_tmp;+    unsigned i;++    copy_block(&blockR, ref_block);+    xor_block(&blockR, prev_block);+    copy_block(&block_tmp, &blockR);+    /* Now blockR = ref_block + prev_block and block_tmp = ref_block + prev_block */+    if (with_xor) {+        /* Saving the next block contents for XOR over: */+        xor_block(&block_tmp, next_block);+        /* Now blockR = ref_block + prev_block and+           block_tmp = ref_block + prev_block + next_block */+    }++    /* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then+       (16,17,..31)... finally (112,113,...127) */+    for (i = 0; i < 8; ++i) {+        BLAKE2_ROUND_NOMSG(+            blockR.v[16 * i], blockR.v[16 * i + 1], blockR.v[16 * i + 2],+            blockR.v[16 * i + 3], blockR.v[16 * i + 4], blockR.v[16 * i + 5],+            blockR.v[16 * i + 6], blockR.v[16 * i + 7], blockR.v[16 * i + 8],+            blockR.v[16 * i + 9], blockR.v[16 * i + 10], blockR.v[16 * i + 11],+            blockR.v[16 * i + 12], blockR.v[16 * i + 13], blockR.v[16 * i + 14],+            blockR.v[16 * i + 15]);+    }++    /* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then+       (2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) */+    for (i = 0; i < 8; i++) {+        BLAKE2_ROUND_NOMSG(+            blockR.v[2 * i], blockR.v[2 * i + 1], blockR.v[2 * i + 16],+            blockR.v[2 * i + 17], blockR.v[2 * i + 32], blockR.v[2 * i + 33],+            blockR.v[2 * i + 48], blockR.v[2 * i + 49], blockR.v[2 * i + 64],+            blockR.v[2 * i + 65], blockR.v[2 * i + 80], blockR.v[2 * i + 81],+            blockR.v[2 * i + 96], blockR.v[2 * i + 97], blockR.v[2 * i + 112],+            blockR.v[2 * i + 113]);+    }++    copy_block(next_block, &block_tmp);+    xor_block(next_block, &blockR);+}++static void next_addresses(block *address_block, block *input_block,+                           const block *zero_block) {+    input_block->v[6]++;+    fill_block(zero_block, input_block, address_block, 0);+    fill_block(zero_block, address_block, address_block, 0);+}++static void fill_segment(const argon2_instance_t *instance,+                  argon2_position_t position) {+    block *ref_block = NULL, *curr_block = NULL;+    block address_block, input_block, zero_block;+    uint64_t pseudo_rand, ref_index, ref_lane;+    uint32_t prev_offset, curr_offset;+    uint32_t starting_index;+    uint32_t i;+    int data_independent_addressing;++    if (instance == NULL) {+        return;+    }++    data_independent_addressing =+        (instance->type == Argon2_i) ||+        (instance->type == Argon2_id && (position.pass == 0) &&+         (position.slice < ARGON2_SYNC_POINTS / 2));++    if (data_independent_addressing) {+        init_block_value(&zero_block, 0);+        init_block_value(&input_block, 0);++        input_block.v[0] = position.pass;+        input_block.v[1] = position.lane;+        input_block.v[2] = position.slice;+        input_block.v[3] = instance->memory_blocks;+        input_block.v[4] = instance->passes;+        input_block.v[5] = instance->type;+    }++    starting_index = 0;++    if ((0 == position.pass) && (0 == position.slice)) {+        starting_index = 2; /* we have already generated the first two blocks */++        /* Don't forget to generate the first block of addresses: */+        if (data_independent_addressing) {+            next_addresses(&address_block, &input_block, &zero_block);+        }+    }++    /* Offset of the current block */+    curr_offset = position.lane * instance->lane_length ++                  position.slice * instance->segment_length + starting_index;++    if (0 == curr_offset % instance->lane_length) {+        /* Last block in this lane */+        prev_offset = curr_offset + instance->lane_length - 1;+    } else {+        /* Previous block */+        prev_offset = curr_offset - 1;+    }++    for (i = starting_index; i < instance->segment_length;+         ++i, ++curr_offset, ++prev_offset) {+        /*1.1 Rotating prev_offset if needed */+        if (curr_offset % instance->lane_length == 1) {+            prev_offset = curr_offset - 1;+        }++        /* 1.2 Computing the index of the reference block */+        /* 1.2.1 Taking pseudo-random value from the previous block */+        if (data_independent_addressing) {+            if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {+                next_addresses(&address_block, &input_block, &zero_block);+            }+            pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];+        } else {+            pseudo_rand = instance->memory[prev_offset].v[0];+        }++        /* 1.2.2 Computing the lane of the reference block */+        ref_lane = ((pseudo_rand >> 32)) % instance->lanes;++        if ((position.pass == 0) && (position.slice == 0)) {+            /* Can not reference other lanes yet */+            ref_lane = position.lane;+        }++        /* 1.2.3 Computing the number of possible reference block within the+         * lane.+         */+        position.index = i;+        ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,+                                ref_lane == position.lane);++        /* 2 Creating a new block */+        ref_block =+            instance->memory + instance->lane_length * ref_lane + ref_index;+        curr_block = instance->memory + curr_offset;+        if (ARGON2_VERSION_10 == instance->version) {+            /* version 1.2.1 and earlier: overwrite, not XOR */+            fill_block(instance->memory + prev_offset, ref_block, curr_block, 0);+        } else {+            if(0 == position.pass) {+                fill_block(instance->memory + prev_offset, ref_block,+                           curr_block, 0);+            } else {+                fill_block(instance->memory + prev_offset, ref_block,+                           curr_block, 1);+            }+        }+    }+}
+ cbits/argon2/ref.h view
@@ -0,0 +1,35 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#ifndef ARGON2_REF_H+#define ARGON2_REF_H++#include "core.h"++/*+ * Function fills a new memory block and optionally XORs the old block over the new one.+ * @next_block must be initialized.+ * @param prev_block Pointer to the previous block+ * @param ref_block Pointer to the reference block+ * @param next_block Pointer to the block to be constructed+ * @param with_xor Whether to XOR into the new block (1) or just overwrite (0)+ * @pre all block pointers must be valid+ */+static void fill_block(const block *prev_block, const block *ref_block,+                block *next_block, int with_xor);++#endif /* ARGON2_REF_H */
+ cbits/argon2/thread.c view
@@ -0,0 +1,57 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#if !defined(ARGON2_NO_THREADS)++#include "thread.h"+#if defined(_WIN32)+#include <windows.h>+#endif++static int argon2_thread_create(argon2_thread_handle_t *handle,+                         argon2_thread_func_t func, void *args) {+    if (NULL == handle || func == NULL) {+        return -1;+    }+#if defined(_WIN32)+    *handle = _beginthreadex(NULL, 0, func, args, 0, NULL);+    return *handle != 0 ? 0 : -1;+#else+    return pthread_create(handle, NULL, func, args);+#endif+}++static int argon2_thread_join(argon2_thread_handle_t handle) {+#if defined(_WIN32)+    if (WaitForSingleObject((HANDLE)handle, INFINITE) == WAIT_OBJECT_0) {+        return CloseHandle((HANDLE)handle) != 0 ? 0 : -1;+    }+    return -1;+#else+    return pthread_join(handle, NULL);+#endif+}++static void argon2_thread_exit(void) {+#if defined(_WIN32)+    _endthreadex(0);+#else+    pthread_exit(NULL);+#endif+}++#endif /* ARGON2_NO_THREADS */
+ cbits/argon2/thread.h view
@@ -0,0 +1,67 @@+/*+ * Argon2 reference source code package - reference C implementations+ *+ * Copyright 2015+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves+ *+ * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of+ * these licenses can be found at:+ *+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0+ *+ * You should have received a copy of both of these licenses along with this+ * software. If not, they may be obtained at the above URLs.+ */++#ifndef ARGON2_THREAD_H+#define ARGON2_THREAD_H++#if !defined(ARGON2_NO_THREADS)++/*+        Here we implement an abstraction layer for the simpĺe requirements+        of the Argon2 code. We only require 3 primitives---thread creation,+        joining, and termination---so full emulation of the pthreads API+        is unwarranted. Currently we wrap pthreads and Win32 threads.++        The API defines 2 types: the function pointer type,+   argon2_thread_func_t,+        and the type of the thread handle---argon2_thread_handle_t.+*/+#if defined(_WIN32)+#include <process.h>+typedef unsigned(__stdcall *argon2_thread_func_t)(void *);+typedef uintptr_t argon2_thread_handle_t;+#else+#include <pthread.h>+typedef void *(*argon2_thread_func_t)(void *);+typedef pthread_t argon2_thread_handle_t;+#endif++/* Creates a thread+ * @param handle pointer to a thread handle, which is the output of this+ * function. Must not be NULL.+ * @param func A function pointer for the thread's entry point. Must not be+ * NULL.+ * @param args Pointer that is passed as an argument to @func. May be NULL.+ * @return 0 if @handle and @func are valid pointers and a thread is successfuly+ * created.+ */+static int argon2_thread_create(argon2_thread_handle_t *handle,+                         argon2_thread_func_t func, void *args);++/* Waits for a thread to terminate+ * @param handle Handle to a thread created with argon2_thread_create.+ * @return 0 if @handle is a valid handle, and joining completed successfully.+*/+static int argon2_thread_join(argon2_thread_handle_t handle);++/* Terminate the current thread. Must be run inside a thread created by+ * argon2_thread_create.+*/+static void argon2_thread_exit(void);++#endif /* ARGON2_NO_THREADS */+#endif
cbits/blake2/ref/blake2-impl.h view
@@ -1,23 +1,36 @@ /*    BLAKE2 reference source code package - reference C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2_IMPL_H__-#define __BLAKE2_IMPL_H__+#ifndef BLAKE2_IMPL_H+#define BLAKE2_IMPL_H  #include <stdint.h> #include <string.h> -static inline uint32_t load32( const void *src )+#if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L)+  #if   defined(_MSC_VER)+    #define BLAKE2_INLINE __inline+  #elif defined(__GNUC__)+    #define BLAKE2_INLINE __inline__+  #else+    #define BLAKE2_INLINE+  #endif+#else+  #define BLAKE2_INLINE inline+#endif++static BLAKE2_INLINE uint32_t load32( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN)   uint32_t w;@@ -25,15 +38,14 @@   return w; #else   const uint8_t *p = ( const uint8_t * )src;-  uint32_t w = *p++;-  w |= ( uint32_t )( *p++ ) <<  8;-  w |= ( uint32_t )( *p++ ) << 16;-  w |= ( uint32_t )( *p++ ) << 24;-  return w;+  return (( uint32_t )( p[0] ) <<  0) |+         (( uint32_t )( p[1] ) <<  8) |+         (( uint32_t )( p[2] ) << 16) |+         (( uint32_t )( p[3] ) << 24) ; #endif } -static inline uint64_t load64( const void *src )+static BLAKE2_INLINE uint64_t load64( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN)   uint64_t w;@@ -41,97 +53,108 @@   return w; #else   const uint8_t *p = ( const uint8_t * )src;-  uint64_t w = *p++;-  w |= ( uint64_t )( *p++ ) <<  8;-  w |= ( uint64_t )( *p++ ) << 16;-  w |= ( uint64_t )( *p++ ) << 24;-  w |= ( uint64_t )( *p++ ) << 32;-  w |= ( uint64_t )( *p++ ) << 40;-  w |= ( uint64_t )( *p++ ) << 48;-  w |= ( uint64_t )( *p++ ) << 56;-  return w;+  return (( uint64_t )( p[0] ) <<  0) |+         (( uint64_t )( p[1] ) <<  8) |+         (( uint64_t )( p[2] ) << 16) |+         (( uint64_t )( p[3] ) << 24) |+         (( uint64_t )( p[4] ) << 32) |+         (( uint64_t )( p[5] ) << 40) |+         (( uint64_t )( p[6] ) << 48) |+         (( uint64_t )( p[7] ) << 56) ; #endif } -static inline void store32( void *dst, uint32_t w )+static BLAKE2_INLINE uint16_t load16( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN)-  memcpy(dst, &w, sizeof w);+  uint16_t w;+  memcpy(&w, src, sizeof w);+  return w; #else-  uint8_t *p = ( uint8_t * )dst;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w;+  const uint8_t *p = ( const uint8_t * )src;+  return (( uint16_t )( p[0] ) <<  0) |+         (( uint16_t )( p[1] ) <<  8) ; #endif } -static inline void store64( void *dst, uint64_t w )+static BLAKE2_INLINE void store16( void *dst, uint16_t w ) { #if defined(NATIVE_LITTLE_ENDIAN)   memcpy(dst, &w, sizeof w); #else   uint8_t *p = ( uint8_t * )dst;   *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;   *p++ = ( uint8_t )w; #endif } -static inline uint64_t load48( const void *src )+static BLAKE2_INLINE void store32( void *dst, uint32_t w ) {-  const uint8_t *p = ( const uint8_t * )src;-  uint64_t w = *p++;-  w |= ( uint64_t )( *p++ ) <<  8;-  w |= ( uint64_t )( *p++ ) << 16;-  w |= ( uint64_t )( *p++ ) << 24;-  w |= ( uint64_t )( *p++ ) << 32;-  w |= ( uint64_t )( *p++ ) << 40;-  return w;+#if defined(NATIVE_LITTLE_ENDIAN)+  memcpy(dst, &w, sizeof w);+#else+  uint8_t *p = ( uint8_t * )dst;+  p[0] = (uint8_t)(w >>  0);+  p[1] = (uint8_t)(w >>  8);+  p[2] = (uint8_t)(w >> 16);+  p[3] = (uint8_t)(w >> 24);+#endif } -static inline void store48( void *dst, uint64_t w )+static BLAKE2_INLINE void store64( void *dst, uint64_t w ) {+#if defined(NATIVE_LITTLE_ENDIAN)+  memcpy(dst, &w, sizeof w);+#else   uint8_t *p = ( uint8_t * )dst;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w;+  p[0] = (uint8_t)(w >>  0);+  p[1] = (uint8_t)(w >>  8);+  p[2] = (uint8_t)(w >> 16);+  p[3] = (uint8_t)(w >> 24);+  p[4] = (uint8_t)(w >> 32);+  p[5] = (uint8_t)(w >> 40);+  p[6] = (uint8_t)(w >> 48);+  p[7] = (uint8_t)(w >> 56);+#endif } -static inline uint32_t rotl32( const uint32_t w, const unsigned c )+static BLAKE2_INLINE uint64_t load48( const void *src ) {-  return ( w << c ) | ( w >> ( 32 - c ) );+  const uint8_t *p = ( const uint8_t * )src;+  return (( uint64_t )( p[0] ) <<  0) |+         (( uint64_t )( p[1] ) <<  8) |+         (( uint64_t )( p[2] ) << 16) |+         (( uint64_t )( p[3] ) << 24) |+         (( uint64_t )( p[4] ) << 32) |+         (( uint64_t )( p[5] ) << 40) ; } -static inline uint64_t rotl64( const uint64_t w, const unsigned c )+static BLAKE2_INLINE void store48( void *dst, uint64_t w ) {-  return ( w << c ) | ( w >> ( 64 - c ) );+  uint8_t *p = ( uint8_t * )dst;+  p[0] = (uint8_t)(w >>  0);+  p[1] = (uint8_t)(w >>  8);+  p[2] = (uint8_t)(w >> 16);+  p[3] = (uint8_t)(w >> 24);+  p[4] = (uint8_t)(w >> 32);+  p[5] = (uint8_t)(w >> 40); } -static inline uint32_t rotr32( const uint32_t w, const unsigned c )+static BLAKE2_INLINE uint32_t rotr32( const uint32_t w, const unsigned c ) {   return ( w >> c ) | ( w << ( 32 - c ) ); } -static inline uint64_t rotr64( const uint64_t w, const unsigned c )+static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c ) {   return ( w >> c ) | ( w << ( 64 - c ) ); }  /* prevents compiler optimizing out memset() */-static inline void secure_zero_memory(void *v, size_t n)+static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n) {   static void *(*const volatile memset_v)(void *, int, size_t) = &memset;   memset_v(v, 0, n); }  #endif-
− cbits/blake2/ref/blake2-kat.h
@@ -1,16467 +0,0 @@-/*-   BLAKE2 reference source code package - reference C implementations--   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>--   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.--   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.-*/-#pragma once-#ifndef __BLAKE2_KAT_H__-#define __BLAKE2_KAT_H__---#include <stdint.h>--#define KAT_LENGTH 256----static const uint8_t blake2s_kat[KAT_LENGTH][BLAKE2S_OUTBYTES] =-{-  {-    0x69, 0x21, 0x7A, 0x30, 0x79, 0x90, 0x80, 0x94,-    0xE1, 0x11, 0x21, 0xD0, 0x42, 0x35, 0x4A, 0x7C,-    0x1F, 0x55, 0xB6, 0x48, 0x2C, 0xA1, 0xA5, 0x1E,-    0x1B, 0x25, 0x0D, 0xFD, 0x1E, 0xD0, 0xEE, 0xF9-  },-  {-    0xE3, 0x4D, 0x74, 0xDB, 0xAF, 0x4F, 0xF4, 0xC6,-    0xAB, 0xD8, 0x71, 0xCC, 0x22, 0x04, 0x51, 0xD2,-    0xEA, 0x26, 0x48, 0x84, 0x6C, 0x77, 0x57, 0xFB,-    0xAA, 0xC8, 0x2F, 0xE5, 0x1A, 0xD6, 0x4B, 0xEA-  },-  {-    0xDD, 0xAD, 0x9A, 0xB1, 0x5D, 0xAC, 0x45, 0x49,-    0xBA, 0x42, 0xF4, 0x9D, 0x26, 0x24, 0x96, 0xBE,-    0xF6, 0xC0, 0xBA, 0xE1, 0xDD, 0x34, 0x2A, 0x88,-    0x08, 0xF8, 0xEA, 0x26, 0x7C, 0x6E, 0x21, 0x0C-  },-  {-    0xE8, 0xF9, 0x1C, 0x6E, 0xF2, 0x32, 0xA0, 0x41,-    0x45, 0x2A, 0xB0, 0xE1, 0x49, 0x07, 0x0C, 0xDD,-    0x7D, 0xD1, 0x76, 0x9E, 0x75, 0xB3, 0xA5, 0x92,-    0x1B, 0xE3, 0x78, 0x76, 0xC4, 0x5C, 0x99, 0x00-  },-  {-    0x0C, 0xC7, 0x0E, 0x00, 0x34, 0x8B, 0x86, 0xBA,-    0x29, 0x44, 0xD0, 0xC3, 0x20, 0x38, 0xB2, 0x5C,-    0x55, 0x58, 0x4F, 0x90, 0xDF, 0x23, 0x04, 0xF5,-    0x5F, 0xA3, 0x32, 0xAF, 0x5F, 0xB0, 0x1E, 0x20-  },-  {-    0xEC, 0x19, 0x64, 0x19, 0x10, 0x87, 0xA4, 0xFE,-    0x9D, 0xF1, 0xC7, 0x95, 0x34, 0x2A, 0x02, 0xFF,-    0xC1, 0x91, 0xA5, 0xB2, 0x51, 0x76, 0x48, 0x56,-    0xAE, 0x5B, 0x8B, 0x57, 0x69, 0xF0, 0xC6, 0xCD-  },-  {-    0xE1, 0xFA, 0x51, 0x61, 0x8D, 0x7D, 0xF4, 0xEB,-    0x70, 0xCF, 0x0D, 0x5A, 0x9E, 0x90, 0x6F, 0x80,-    0x6E, 0x9D, 0x19, 0xF7, 0xF4, 0xF0, 0x1E, 0x3B,-    0x62, 0x12, 0x88, 0xE4, 0x12, 0x04, 0x05, 0xD6-  },-  {-    0x59, 0x80, 0x01, 0xFA, 0xFB, 0xE8, 0xF9, 0x4E,-    0xC6, 0x6D, 0xC8, 0x27, 0xD0, 0x12, 0xCF, 0xCB,-    0xBA, 0x22, 0x28, 0x56, 0x9F, 0x44, 0x8E, 0x89,-    0xEA, 0x22, 0x08, 0xC8, 0xBF, 0x76, 0x92, 0x93-  },-  {-    0xC7, 0xE8, 0x87, 0xB5, 0x46, 0x62, 0x36, 0x35,-    0xE9, 0x3E, 0x04, 0x95, 0x59, 0x8F, 0x17, 0x26,-    0x82, 0x19, 0x96, 0xC2, 0x37, 0x77, 0x05, 0xB9,-    0x3A, 0x1F, 0x63, 0x6F, 0x87, 0x2B, 0xFA, 0x2D-  },-  {-    0xC3, 0x15, 0xA4, 0x37, 0xDD, 0x28, 0x06, 0x2A,-    0x77, 0x0D, 0x48, 0x19, 0x67, 0x13, 0x6B, 0x1B,-    0x5E, 0xB8, 0x8B, 0x21, 0xEE, 0x53, 0xD0, 0x32,-    0x9C, 0x58, 0x97, 0x12, 0x6E, 0x9D, 0xB0, 0x2C-  },-  {-    0xBB, 0x47, 0x3D, 0xED, 0xDC, 0x05, 0x5F, 0xEA,-    0x62, 0x28, 0xF2, 0x07, 0xDA, 0x57, 0x53, 0x47,-    0xBB, 0x00, 0x40, 0x4C, 0xD3, 0x49, 0xD3, 0x8C,-    0x18, 0x02, 0x63, 0x07, 0xA2, 0x24, 0xCB, 0xFF-  },-  {-    0x68, 0x7E, 0x18, 0x73, 0xA8, 0x27, 0x75, 0x91,-    0xBB, 0x33, 0xD9, 0xAD, 0xF9, 0xA1, 0x39, 0x12,-    0xEF, 0xEF, 0xE5, 0x57, 0xCA, 0xFC, 0x39, 0xA7,-    0x95, 0x26, 0x23, 0xE4, 0x72, 0x55, 0xF1, 0x6D-  },-  {-    0x1A, 0xC7, 0xBA, 0x75, 0x4D, 0x6E, 0x2F, 0x94,-    0xE0, 0xE8, 0x6C, 0x46, 0xBF, 0xB2, 0x62, 0xAB,-    0xBB, 0x74, 0xF4, 0x50, 0xEF, 0x45, 0x6D, 0x6B,-    0x4D, 0x97, 0xAA, 0x80, 0xCE, 0x6D, 0xA7, 0x67-  },-  {-    0x01, 0x2C, 0x97, 0x80, 0x96, 0x14, 0x81, 0x6B,-    0x5D, 0x94, 0x94, 0x47, 0x7D, 0x4B, 0x68, 0x7D,-    0x15, 0xB9, 0x6E, 0xB6, 0x9C, 0x0E, 0x80, 0x74,-    0xA8, 0x51, 0x6F, 0x31, 0x22, 0x4B, 0x5C, 0x98-  },-  {-    0x91, 0xFF, 0xD2, 0x6C, 0xFA, 0x4D, 0xA5, 0x13,-    0x4C, 0x7E, 0xA2, 0x62, 0xF7, 0x88, 0x9C, 0x32,-    0x9F, 0x61, 0xF6, 0xA6, 0x57, 0x22, 0x5C, 0xC2,-    0x12, 0xF4, 0x00, 0x56, 0xD9, 0x86, 0xB3, 0xF4-  },-  {-    0xD9, 0x7C, 0x82, 0x8D, 0x81, 0x82, 0xA7, 0x21,-    0x80, 0xA0, 0x6A, 0x78, 0x26, 0x83, 0x30, 0x67,-    0x3F, 0x7C, 0x4E, 0x06, 0x35, 0x94, 0x7C, 0x04,-    0xC0, 0x23, 0x23, 0xFD, 0x45, 0xC0, 0xA5, 0x2D-  },-  {-    0xEF, 0xC0, 0x4C, 0xDC, 0x39, 0x1C, 0x7E, 0x91,-    0x19, 0xBD, 0x38, 0x66, 0x8A, 0x53, 0x4E, 0x65,-    0xFE, 0x31, 0x03, 0x6D, 0x6A, 0x62, 0x11, 0x2E,-    0x44, 0xEB, 0xEB, 0x11, 0xF9, 0xC5, 0x70, 0x80-  },-  {-    0x99, 0x2C, 0xF5, 0xC0, 0x53, 0x44, 0x2A, 0x5F,-    0xBC, 0x4F, 0xAF, 0x58, 0x3E, 0x04, 0xE5, 0x0B,-    0xB7, 0x0D, 0x2F, 0x39, 0xFB, 0xB6, 0xA5, 0x03,-    0xF8, 0x9E, 0x56, 0xA6, 0x3E, 0x18, 0x57, 0x8A-  },-  {-    0x38, 0x64, 0x0E, 0x9F, 0x21, 0x98, 0x3E, 0x67,-    0xB5, 0x39, 0xCA, 0xCC, 0xAE, 0x5E, 0xCF, 0x61,-    0x5A, 0xE2, 0x76, 0x4F, 0x75, 0xA0, 0x9C, 0x9C,-    0x59, 0xB7, 0x64, 0x83, 0xC1, 0xFB, 0xC7, 0x35-  },-  {-    0x21, 0x3D, 0xD3, 0x4C, 0x7E, 0xFE, 0x4F, 0xB2,-    0x7A, 0x6B, 0x35, 0xF6, 0xB4, 0x00, 0x0D, 0x1F,-    0xE0, 0x32, 0x81, 0xAF, 0x3C, 0x72, 0x3E, 0x5C,-    0x9F, 0x94, 0x74, 0x7A, 0x5F, 0x31, 0xCD, 0x3B-  },-  {-    0xEC, 0x24, 0x6E, 0xEE, 0xB9, 0xCE, 0xD3, 0xF7,-    0xAD, 0x33, 0xED, 0x28, 0x66, 0x0D, 0xD9, 0xBB,-    0x07, 0x32, 0x51, 0x3D, 0xB4, 0xE2, 0xFA, 0x27,-    0x8B, 0x60, 0xCD, 0xE3, 0x68, 0x2A, 0x4C, 0xCD-  },-  {-    0xAC, 0x9B, 0x61, 0xD4, 0x46, 0x64, 0x8C, 0x30,-    0x05, 0xD7, 0x89, 0x2B, 0xF3, 0xA8, 0x71, 0x9F,-    0x4C, 0x81, 0x81, 0xCF, 0xDC, 0xBC, 0x2B, 0x79,-    0xFE, 0xF1, 0x0A, 0x27, 0x9B, 0x91, 0x10, 0x95-  },-  {-    0x7B, 0xF8, 0xB2, 0x29, 0x59, 0xE3, 0x4E, 0x3A,-    0x43, 0xF7, 0x07, 0x92, 0x23, 0xE8, 0x3A, 0x97,-    0x54, 0x61, 0x7D, 0x39, 0x1E, 0x21, 0x3D, 0xFD,-    0x80, 0x8E, 0x41, 0xB9, 0xBE, 0xAD, 0x4C, 0xE7-  },-  {-    0x68, 0xD4, 0xB5, 0xD4, 0xFA, 0x0E, 0x30, 0x2B,-    0x64, 0xCC, 0xC5, 0xAF, 0x79, 0x29, 0x13, 0xAC,-    0x4C, 0x88, 0xEC, 0x95, 0xC0, 0x7D, 0xDF, 0x40,-    0x69, 0x42, 0x56, 0xEB, 0x88, 0xCE, 0x9F, 0x3D-  },-  {-    0xB2, 0xC2, 0x42, 0x0F, 0x05, 0xF9, 0xAB, 0xE3,-    0x63, 0x15, 0x91, 0x93, 0x36, 0xB3, 0x7E, 0x4E,-    0x0F, 0xA3, 0x3F, 0xF7, 0xE7, 0x6A, 0x49, 0x27,-    0x67, 0x00, 0x6F, 0xDB, 0x5D, 0x93, 0x54, 0x62-  },-  {-    0x13, 0x4F, 0x61, 0xBB, 0xD0, 0xBB, 0xB6, 0x9A,-    0xED, 0x53, 0x43, 0x90, 0x45, 0x51, 0xA3, 0xE6,-    0xC1, 0xAA, 0x7D, 0xCD, 0xD7, 0x7E, 0x90, 0x3E,-    0x70, 0x23, 0xEB, 0x7C, 0x60, 0x32, 0x0A, 0xA7-  },-  {-    0x46, 0x93, 0xF9, 0xBF, 0xF7, 0xD4, 0xF3, 0x98,-    0x6A, 0x7D, 0x17, 0x6E, 0x6E, 0x06, 0xF7, 0x2A,-    0xD1, 0x49, 0x0D, 0x80, 0x5C, 0x99, 0xE2, 0x53,-    0x47, 0xB8, 0xDE, 0x77, 0xB4, 0xDB, 0x6D, 0x9B-  },-  {-    0x85, 0x3E, 0x26, 0xF7, 0x41, 0x95, 0x3B, 0x0F,-    0xD5, 0xBD, 0xB4, 0x24, 0xE8, 0xAB, 0x9E, 0x8B,-    0x37, 0x50, 0xEA, 0xA8, 0xEF, 0x61, 0xE4, 0x79,-    0x02, 0xC9, 0x1E, 0x55, 0x4E, 0x9C, 0x73, 0xB9-  },-  {-    0xF7, 0xDE, 0x53, 0x63, 0x61, 0xAB, 0xAA, 0x0E,-    0x15, 0x81, 0x56, 0xCF, 0x0E, 0xA4, 0xF6, 0x3A,-    0x99, 0xB5, 0xE4, 0x05, 0x4F, 0x8F, 0xA4, 0xC9,-    0xD4, 0x5F, 0x62, 0x85, 0xCA, 0xD5, 0x56, 0x94-  },-  {-    0x4C, 0x23, 0x06, 0x08, 0x86, 0x0A, 0x99, 0xAE,-    0x8D, 0x7B, 0xD5, 0xC2, 0xCC, 0x17, 0xFA, 0x52,-    0x09, 0x6B, 0x9A, 0x61, 0xBE, 0xDB, 0x17, 0xCB,-    0x76, 0x17, 0x86, 0x4A, 0xD2, 0x9C, 0xA7, 0xA6-  },-  {-    0xAE, 0xB9, 0x20, 0xEA, 0x87, 0x95, 0x2D, 0xAD,-    0xB1, 0xFB, 0x75, 0x92, 0x91, 0xE3, 0x38, 0x81,-    0x39, 0xA8, 0x72, 0x86, 0x50, 0x01, 0x88, 0x6E,-    0xD8, 0x47, 0x52, 0xE9, 0x3C, 0x25, 0x0C, 0x2A-  },-  {-    0xAB, 0xA4, 0xAD, 0x9B, 0x48, 0x0B, 0x9D, 0xF3,-    0xD0, 0x8C, 0xA5, 0xE8, 0x7B, 0x0C, 0x24, 0x40,-    0xD4, 0xE4, 0xEA, 0x21, 0x22, 0x4C, 0x2E, 0xB4,-    0x2C, 0xBA, 0xE4, 0x69, 0xD0, 0x89, 0xB9, 0x31-  },-  {-    0x05, 0x82, 0x56, 0x07, 0xD7, 0xFD, 0xF2, 0xD8,-    0x2E, 0xF4, 0xC3, 0xC8, 0xC2, 0xAE, 0xA9, 0x61,-    0xAD, 0x98, 0xD6, 0x0E, 0xDF, 0xF7, 0xD0, 0x18,-    0x98, 0x3E, 0x21, 0x20, 0x4C, 0x0D, 0x93, 0xD1-  },-  {-    0xA7, 0x42, 0xF8, 0xB6, 0xAF, 0x82, 0xD8, 0xA6,-    0xCA, 0x23, 0x57, 0xC5, 0xF1, 0xCF, 0x91, 0xDE,-    0xFB, 0xD0, 0x66, 0x26, 0x7D, 0x75, 0xC0, 0x48,-    0xB3, 0x52, 0x36, 0x65, 0x85, 0x02, 0x59, 0x62-  },-  {-    0x2B, 0xCA, 0xC8, 0x95, 0x99, 0x00, 0x0B, 0x42,-    0xC9, 0x5A, 0xE2, 0x38, 0x35, 0xA7, 0x13, 0x70,-    0x4E, 0xD7, 0x97, 0x89, 0xC8, 0x4F, 0xEF, 0x14,-    0x9A, 0x87, 0x4F, 0xF7, 0x33, 0xF0, 0x17, 0xA2-  },-  {-    0xAC, 0x1E, 0xD0, 0x7D, 0x04, 0x8F, 0x10, 0x5A,-    0x9E, 0x5B, 0x7A, 0xB8, 0x5B, 0x09, 0xA4, 0x92,-    0xD5, 0xBA, 0xFF, 0x14, 0xB8, 0xBF, 0xB0, 0xE9,-    0xFD, 0x78, 0x94, 0x86, 0xEE, 0xA2, 0xB9, 0x74-  },-  {-    0xE4, 0x8D, 0x0E, 0xCF, 0xAF, 0x49, 0x7D, 0x5B,-    0x27, 0xC2, 0x5D, 0x99, 0xE1, 0x56, 0xCB, 0x05,-    0x79, 0xD4, 0x40, 0xD6, 0xE3, 0x1F, 0xB6, 0x24,-    0x73, 0x69, 0x6D, 0xBF, 0x95, 0xE0, 0x10, 0xE4-  },-  {-    0x12, 0xA9, 0x1F, 0xAD, 0xF8, 0xB2, 0x16, 0x44,-    0xFD, 0x0F, 0x93, 0x4F, 0x3C, 0x4A, 0x8F, 0x62,-    0xBA, 0x86, 0x2F, 0xFD, 0x20, 0xE8, 0xE9, 0x61,-    0x15, 0x4C, 0x15, 0xC1, 0x38, 0x84, 0xED, 0x3D-  },-  {-    0x7C, 0xBE, 0xE9, 0x6E, 0x13, 0x98, 0x97, 0xDC,-    0x98, 0xFB, 0xEF, 0x3B, 0xE8, 0x1A, 0xD4, 0xD9,-    0x64, 0xD2, 0x35, 0xCB, 0x12, 0x14, 0x1F, 0xB6,-    0x67, 0x27, 0xE6, 0xE5, 0xDF, 0x73, 0xA8, 0x78-  },-  {-    0xEB, 0xF6, 0x6A, 0xBB, 0x59, 0x7A, 0xE5, 0x72,-    0xA7, 0x29, 0x7C, 0xB0, 0x87, 0x1E, 0x35, 0x5A,-    0xCC, 0xAF, 0xAD, 0x83, 0x77, 0xB8, 0xE7, 0x8B,-    0xF1, 0x64, 0xCE, 0x2A, 0x18, 0xDE, 0x4B, 0xAF-  },-  {-    0x71, 0xB9, 0x33, 0xB0, 0x7E, 0x4F, 0xF7, 0x81,-    0x8C, 0xE0, 0x59, 0xD0, 0x08, 0x82, 0x9E, 0x45,-    0x3C, 0x6F, 0xF0, 0x2E, 0xC0, 0xA7, 0xDB, 0x39,-    0x3F, 0xC2, 0xD8, 0x70, 0xF3, 0x7A, 0x72, 0x86-  },-  {-    0x7C, 0xF7, 0xC5, 0x13, 0x31, 0x22, 0x0B, 0x8D,-    0x3E, 0xBA, 0xED, 0x9C, 0x29, 0x39, 0x8A, 0x16,-    0xD9, 0x81, 0x56, 0xE2, 0x61, 0x3C, 0xB0, 0x88,-    0xF2, 0xB0, 0xE0, 0x8A, 0x1B, 0xE4, 0xCF, 0x4F-  },-  {-    0x3E, 0x41, 0xA1, 0x08, 0xE0, 0xF6, 0x4A, 0xD2,-    0x76, 0xB9, 0x79, 0xE1, 0xCE, 0x06, 0x82, 0x79,-    0xE1, 0x6F, 0x7B, 0xC7, 0xE4, 0xAA, 0x1D, 0x21,-    0x1E, 0x17, 0xB8, 0x11, 0x61, 0xDF, 0x16, 0x02-  },-  {-    0x88, 0x65, 0x02, 0xA8, 0x2A, 0xB4, 0x7B, 0xA8,-    0xD8, 0x67, 0x10, 0xAA, 0x9D, 0xE3, 0xD4, 0x6E,-    0xA6, 0x5C, 0x47, 0xAF, 0x6E, 0xE8, 0xDE, 0x45,-    0x0C, 0xCE, 0xB8, 0xB1, 0x1B, 0x04, 0x5F, 0x50-  },-  {-    0xC0, 0x21, 0xBC, 0x5F, 0x09, 0x54, 0xFE, 0xE9,-    0x4F, 0x46, 0xEA, 0x09, 0x48, 0x7E, 0x10, 0xA8,-    0x48, 0x40, 0xD0, 0x2F, 0x64, 0x81, 0x0B, 0xC0,-    0x8D, 0x9E, 0x55, 0x1F, 0x7D, 0x41, 0x68, 0x14-  },-  {-    0x20, 0x30, 0x51, 0x6E, 0x8A, 0x5F, 0xE1, 0x9A,-    0xE7, 0x9C, 0x33, 0x6F, 0xCE, 0x26, 0x38, 0x2A,-    0x74, 0x9D, 0x3F, 0xD0, 0xEC, 0x91, 0xE5, 0x37,-    0xD4, 0xBD, 0x23, 0x58, 0xC1, 0x2D, 0xFB, 0x22-  },-  {-    0x55, 0x66, 0x98, 0xDA, 0xC8, 0x31, 0x7F, 0xD3,-    0x6D, 0xFB, 0xDF, 0x25, 0xA7, 0x9C, 0xB1, 0x12,-    0xD5, 0x42, 0x58, 0x60, 0x60, 0x5C, 0xBA, 0xF5,-    0x07, 0xF2, 0x3B, 0xF7, 0xE9, 0xF4, 0x2A, 0xFE-  },-  {-    0x2F, 0x86, 0x7B, 0xA6, 0x77, 0x73, 0xFD, 0xC3,-    0xE9, 0x2F, 0xCE, 0xD9, 0x9A, 0x64, 0x09, 0xAD,-    0x39, 0xD0, 0xB8, 0x80, 0xFD, 0xE8, 0xF1, 0x09,-    0xA8, 0x17, 0x30, 0xC4, 0x45, 0x1D, 0x01, 0x78-  },-  {-    0x17, 0x2E, 0xC2, 0x18, 0xF1, 0x19, 0xDF, 0xAE,-    0x98, 0x89, 0x6D, 0xFF, 0x29, 0xDD, 0x98, 0x76,-    0xC9, 0x4A, 0xF8, 0x74, 0x17, 0xF9, 0xAE, 0x4C,-    0x70, 0x14, 0xBB, 0x4E, 0x4B, 0x96, 0xAF, 0xC7-  },-  {-    0x3F, 0x85, 0x81, 0x4A, 0x18, 0x19, 0x5F, 0x87,-    0x9A, 0xA9, 0x62, 0xF9, 0x5D, 0x26, 0xBD, 0x82,-    0xA2, 0x78, 0xF2, 0xB8, 0x23, 0x20, 0x21, 0x8F,-    0x6B, 0x3B, 0xD6, 0xF7, 0xF6, 0x67, 0xA6, 0xD9-  },-  {-    0x1B, 0x61, 0x8F, 0xBA, 0xA5, 0x66, 0xB3, 0xD4,-    0x98, 0xC1, 0x2E, 0x98, 0x2C, 0x9E, 0xC5, 0x2E,-    0x4D, 0xA8, 0x5A, 0x8C, 0x54, 0xF3, 0x8F, 0x34,-    0xC0, 0x90, 0x39, 0x4F, 0x23, 0xC1, 0x84, 0xC1-  },-  {-    0x0C, 0x75, 0x8F, 0xB5, 0x69, 0x2F, 0xFD, 0x41,-    0xA3, 0x57, 0x5D, 0x0A, 0xF0, 0x0C, 0xC7, 0xFB,-    0xF2, 0xCB, 0xE5, 0x90, 0x5A, 0x58, 0x32, 0x3A,-    0x88, 0xAE, 0x42, 0x44, 0xF6, 0xE4, 0xC9, 0x93-  },-  {-    0xA9, 0x31, 0x36, 0x0C, 0xAD, 0x62, 0x8C, 0x7F,-    0x12, 0xA6, 0xC1, 0xC4, 0xB7, 0x53, 0xB0, 0xF4,-    0x06, 0x2A, 0xEF, 0x3C, 0xE6, 0x5A, 0x1A, 0xE3,-    0xF1, 0x93, 0x69, 0xDA, 0xDF, 0x3A, 0xE2, 0x3D-  },-  {-    0xCB, 0xAC, 0x7D, 0x77, 0x3B, 0x1E, 0x3B, 0x3C,-    0x66, 0x91, 0xD7, 0xAB, 0xB7, 0xE9, 0xDF, 0x04,-    0x5C, 0x8B, 0xA1, 0x92, 0x68, 0xDE, 0xD1, 0x53,-    0x20, 0x7F, 0x5E, 0x80, 0x43, 0x52, 0xEC, 0x5D-  },-  {-    0x23, 0xA1, 0x96, 0xD3, 0x80, 0x2E, 0xD3, 0xC1,-    0xB3, 0x84, 0x01, 0x9A, 0x82, 0x32, 0x58, 0x40,-    0xD3, 0x2F, 0x71, 0x95, 0x0C, 0x45, 0x80, 0xB0,-    0x34, 0x45, 0xE0, 0x89, 0x8E, 0x14, 0x05, 0x3C-  },-  {-    0xF4, 0x49, 0x54, 0x70, 0xF2, 0x26, 0xC8, 0xC2,-    0x14, 0xBE, 0x08, 0xFD, 0xFA, 0xD4, 0xBC, 0x4A,-    0x2A, 0x9D, 0xBE, 0xA9, 0x13, 0x6A, 0x21, 0x0D,-    0xF0, 0xD4, 0xB6, 0x49, 0x29, 0xE6, 0xFC, 0x14-  },-  {-    0xE2, 0x90, 0xDD, 0x27, 0x0B, 0x46, 0x7F, 0x34,-    0xAB, 0x1C, 0x00, 0x2D, 0x34, 0x0F, 0xA0, 0x16,-    0x25, 0x7F, 0xF1, 0x9E, 0x58, 0x33, 0xFD, 0xBB,-    0xF2, 0xCB, 0x40, 0x1C, 0x3B, 0x28, 0x17, 0xDE-  },-  {-    0x9F, 0xC7, 0xB5, 0xDE, 0xD3, 0xC1, 0x50, 0x42,-    0xB2, 0xA6, 0x58, 0x2D, 0xC3, 0x9B, 0xE0, 0x16,-    0xD2, 0x4A, 0x68, 0x2D, 0x5E, 0x61, 0xAD, 0x1E,-    0xFF, 0x9C, 0x63, 0x30, 0x98, 0x48, 0xF7, 0x06-  },-  {-    0x8C, 0xCA, 0x67, 0xA3, 0x6D, 0x17, 0xD5, 0xE6,-    0x34, 0x1C, 0xB5, 0x92, 0xFD, 0x7B, 0xEF, 0x99,-    0x26, 0xC9, 0xE3, 0xAA, 0x10, 0x27, 0xEA, 0x11,-    0xA7, 0xD8, 0xBD, 0x26, 0x0B, 0x57, 0x6E, 0x04-  },-  {-    0x40, 0x93, 0x92, 0xF5, 0x60, 0xF8, 0x68, 0x31,-    0xDA, 0x43, 0x73, 0xEE, 0x5E, 0x00, 0x74, 0x26,-    0x05, 0x95, 0xD7, 0xBC, 0x24, 0x18, 0x3B, 0x60,-    0xED, 0x70, 0x0D, 0x45, 0x83, 0xD3, 0xF6, 0xF0-  },-  {-    0x28, 0x02, 0x16, 0x5D, 0xE0, 0x90, 0x91, 0x55,-    0x46, 0xF3, 0x39, 0x8C, 0xD8, 0x49, 0x16, 0x4A,-    0x19, 0xF9, 0x2A, 0xDB, 0xC3, 0x61, 0xAD, 0xC9,-    0x9B, 0x0F, 0x20, 0xC8, 0xEA, 0x07, 0x10, 0x54-  },-  {-    0xAD, 0x83, 0x91, 0x68, 0xD9, 0xF8, 0xA4, 0xBE,-    0x95, 0xBA, 0x9E, 0xF9, 0xA6, 0x92, 0xF0, 0x72,-    0x56, 0xAE, 0x43, 0xFE, 0x6F, 0x98, 0x64, 0xE2,-    0x90, 0x69, 0x1B, 0x02, 0x56, 0xCE, 0x50, 0xA9-  },-  {-    0x75, 0xFD, 0xAA, 0x50, 0x38, 0xC2, 0x84, 0xB8,-    0x6D, 0x6E, 0x8A, 0xFF, 0xE8, 0xB2, 0x80, 0x7E,-    0x46, 0x7B, 0x86, 0x60, 0x0E, 0x79, 0xAF, 0x36,-    0x89, 0xFB, 0xC0, 0x63, 0x28, 0xCB, 0xF8, 0x94-  },-  {-    0xE5, 0x7C, 0xB7, 0x94, 0x87, 0xDD, 0x57, 0x90,-    0x24, 0x32, 0xB2, 0x50, 0x73, 0x38, 0x13, 0xBD,-    0x96, 0xA8, 0x4E, 0xFC, 0xE5, 0x9F, 0x65, 0x0F,-    0xAC, 0x26, 0xE6, 0x69, 0x6A, 0xEF, 0xAF, 0xC3-  },-  {-    0x56, 0xF3, 0x4E, 0x8B, 0x96, 0x55, 0x7E, 0x90,-    0xC1, 0xF2, 0x4B, 0x52, 0xD0, 0xC8, 0x9D, 0x51,-    0x08, 0x6A, 0xCF, 0x1B, 0x00, 0xF6, 0x34, 0xCF,-    0x1D, 0xDE, 0x92, 0x33, 0xB8, 0xEA, 0xAA, 0x3E-  },-  {-    0x1B, 0x53, 0xEE, 0x94, 0xAA, 0xF3, 0x4E, 0x4B,-    0x15, 0x9D, 0x48, 0xDE, 0x35, 0x2C, 0x7F, 0x06,-    0x61, 0xD0, 0xA4, 0x0E, 0xDF, 0xF9, 0x5A, 0x0B,-    0x16, 0x39, 0xB4, 0x09, 0x0E, 0x97, 0x44, 0x72-  },-  {-    0x05, 0x70, 0x5E, 0x2A, 0x81, 0x75, 0x7C, 0x14,-    0xBD, 0x38, 0x3E, 0xA9, 0x8D, 0xDA, 0x54, 0x4E,-    0xB1, 0x0E, 0x6B, 0xC0, 0x7B, 0xAE, 0x43, 0x5E,-    0x25, 0x18, 0xDB, 0xE1, 0x33, 0x52, 0x53, 0x75-  },-  {-    0xD8, 0xB2, 0x86, 0x6E, 0x8A, 0x30, 0x9D, 0xB5,-    0x3E, 0x52, 0x9E, 0xC3, 0x29, 0x11, 0xD8, 0x2F,-    0x5C, 0xA1, 0x6C, 0xFF, 0x76, 0x21, 0x68, 0x91,-    0xA9, 0x67, 0x6A, 0xA3, 0x1A, 0xAA, 0x6C, 0x42-  },-  {-    0xF5, 0x04, 0x1C, 0x24, 0x12, 0x70, 0xEB, 0x04,-    0xC7, 0x1E, 0xC2, 0xC9, 0x5D, 0x4C, 0x38, 0xD8,-    0x03, 0xB1, 0x23, 0x7B, 0x0F, 0x29, 0xFD, 0x4D,-    0xB3, 0xEB, 0x39, 0x76, 0x69, 0xE8, 0x86, 0x99-  },-  {-    0x9A, 0x4C, 0xE0, 0x77, 0xC3, 0x49, 0x32, 0x2F,-    0x59, 0x5E, 0x0E, 0xE7, 0x9E, 0xD0, 0xDA, 0x5F,-    0xAB, 0x66, 0x75, 0x2C, 0xBF, 0xEF, 0x8F, 0x87,-    0xD0, 0xE9, 0xD0, 0x72, 0x3C, 0x75, 0x30, 0xDD-  },-  {-    0x65, 0x7B, 0x09, 0xF3, 0xD0, 0xF5, 0x2B, 0x5B,-    0x8F, 0x2F, 0x97, 0x16, 0x3A, 0x0E, 0xDF, 0x0C,-    0x04, 0xF0, 0x75, 0x40, 0x8A, 0x07, 0xBB, 0xEB,-    0x3A, 0x41, 0x01, 0xA8, 0x91, 0x99, 0x0D, 0x62-  },-  {-    0x1E, 0x3F, 0x7B, 0xD5, 0xA5, 0x8F, 0xA5, 0x33,-    0x34, 0x4A, 0xA8, 0xED, 0x3A, 0xC1, 0x22, 0xBB,-    0x9E, 0x70, 0xD4, 0xEF, 0x50, 0xD0, 0x04, 0x53,-    0x08, 0x21, 0x94, 0x8F, 0x5F, 0xE6, 0x31, 0x5A-  },-  {-    0x80, 0xDC, 0xCF, 0x3F, 0xD8, 0x3D, 0xFD, 0x0D,-    0x35, 0xAA, 0x28, 0x58, 0x59, 0x22, 0xAB, 0x89,-    0xD5, 0x31, 0x39, 0x97, 0x67, 0x3E, 0xAF, 0x90,-    0x5C, 0xEA, 0x9C, 0x0B, 0x22, 0x5C, 0x7B, 0x5F-  },-  {-    0x8A, 0x0D, 0x0F, 0xBF, 0x63, 0x77, 0xD8, 0x3B,-    0xB0, 0x8B, 0x51, 0x4B, 0x4B, 0x1C, 0x43, 0xAC,-    0xC9, 0x5D, 0x75, 0x17, 0x14, 0xF8, 0x92, 0x56,-    0x45, 0xCB, 0x6B, 0xC8, 0x56, 0xCA, 0x15, 0x0A-  },-  {-    0x9F, 0xA5, 0xB4, 0x87, 0x73, 0x8A, 0xD2, 0x84,-    0x4C, 0xC6, 0x34, 0x8A, 0x90, 0x19, 0x18, 0xF6,-    0x59, 0xA3, 0xB8, 0x9E, 0x9C, 0x0D, 0xFE, 0xEA,-    0xD3, 0x0D, 0xD9, 0x4B, 0xCF, 0x42, 0xEF, 0x8E-  },-  {-    0x80, 0x83, 0x2C, 0x4A, 0x16, 0x77, 0xF5, 0xEA,-    0x25, 0x60, 0xF6, 0x68, 0xE9, 0x35, 0x4D, 0xD3,-    0x69, 0x97, 0xF0, 0x37, 0x28, 0xCF, 0xA5, 0x5E,-    0x1B, 0x38, 0x33, 0x7C, 0x0C, 0x9E, 0xF8, 0x18-  },-  {-    0xAB, 0x37, 0xDD, 0xB6, 0x83, 0x13, 0x7E, 0x74,-    0x08, 0x0D, 0x02, 0x6B, 0x59, 0x0B, 0x96, 0xAE,-    0x9B, 0xB4, 0x47, 0x72, 0x2F, 0x30, 0x5A, 0x5A,-    0xC5, 0x70, 0xEC, 0x1D, 0xF9, 0xB1, 0x74, 0x3C-  },-  {-    0x3E, 0xE7, 0x35, 0xA6, 0x94, 0xC2, 0x55, 0x9B,-    0x69, 0x3A, 0xA6, 0x86, 0x29, 0x36, 0x1E, 0x15,-    0xD1, 0x22, 0x65, 0xAD, 0x6A, 0x3D, 0xED, 0xF4,-    0x88, 0xB0, 0xB0, 0x0F, 0xAC, 0x97, 0x54, 0xBA-  },-  {-    0xD6, 0xFC, 0xD2, 0x32, 0x19, 0xB6, 0x47, 0xE4,-    0xCB, 0xD5, 0xEB, 0x2D, 0x0A, 0xD0, 0x1E, 0xC8,-    0x83, 0x8A, 0x4B, 0x29, 0x01, 0xFC, 0x32, 0x5C,-    0xC3, 0x70, 0x19, 0x81, 0xCA, 0x6C, 0x88, 0x8B-  },-  {-    0x05, 0x20, 0xEC, 0x2F, 0x5B, 0xF7, 0xA7, 0x55,-    0xDA, 0xCB, 0x50, 0xC6, 0xBF, 0x23, 0x3E, 0x35,-    0x15, 0x43, 0x47, 0x63, 0xDB, 0x01, 0x39, 0xCC,-    0xD9, 0xFA, 0xEF, 0xBB, 0x82, 0x07, 0x61, 0x2D-  },-  {-    0xAF, 0xF3, 0xB7, 0x5F, 0x3F, 0x58, 0x12, 0x64,-    0xD7, 0x66, 0x16, 0x62, 0xB9, 0x2F, 0x5A, 0xD3,-    0x7C, 0x1D, 0x32, 0xBD, 0x45, 0xFF, 0x81, 0xA4,-    0xED, 0x8A, 0xDC, 0x9E, 0xF3, 0x0D, 0xD9, 0x89-  },-  {-    0xD0, 0xDD, 0x65, 0x0B, 0xEF, 0xD3, 0xBA, 0x63,-    0xDC, 0x25, 0x10, 0x2C, 0x62, 0x7C, 0x92, 0x1B,-    0x9C, 0xBE, 0xB0, 0xB1, 0x30, 0x68, 0x69, 0x35,-    0xB5, 0xC9, 0x27, 0xCB, 0x7C, 0xCD, 0x5E, 0x3B-  },-  {-    0xE1, 0x14, 0x98, 0x16, 0xB1, 0x0A, 0x85, 0x14,-    0xFB, 0x3E, 0x2C, 0xAB, 0x2C, 0x08, 0xBE, 0xE9,-    0xF7, 0x3C, 0xE7, 0x62, 0x21, 0x70, 0x12, 0x46,-    0xA5, 0x89, 0xBB, 0xB6, 0x73, 0x02, 0xD8, 0xA9-  },-  {-    0x7D, 0xA3, 0xF4, 0x41, 0xDE, 0x90, 0x54, 0x31,-    0x7E, 0x72, 0xB5, 0xDB, 0xF9, 0x79, 0xDA, 0x01,-    0xE6, 0xBC, 0xEE, 0xBB, 0x84, 0x78, 0xEA, 0xE6,-    0xA2, 0x28, 0x49, 0xD9, 0x02, 0x92, 0x63, 0x5C-  },-  {-    0x12, 0x30, 0xB1, 0xFC, 0x8A, 0x7D, 0x92, 0x15,-    0xED, 0xC2, 0xD4, 0xA2, 0xDE, 0xCB, 0xDD, 0x0A,-    0x6E, 0x21, 0x6C, 0x92, 0x42, 0x78, 0xC9, 0x1F,-    0xC5, 0xD1, 0x0E, 0x7D, 0x60, 0x19, 0x2D, 0x94-  },-  {-    0x57, 0x50, 0xD7, 0x16, 0xB4, 0x80, 0x8F, 0x75,-    0x1F, 0xEB, 0xC3, 0x88, 0x06, 0xBA, 0x17, 0x0B,-    0xF6, 0xD5, 0x19, 0x9A, 0x78, 0x16, 0xBE, 0x51,-    0x4E, 0x3F, 0x93, 0x2F, 0xBE, 0x0C, 0xB8, 0x71-  },-  {-    0x6F, 0xC5, 0x9B, 0x2F, 0x10, 0xFE, 0xBA, 0x95,-    0x4A, 0xA6, 0x82, 0x0B, 0x3C, 0xA9, 0x87, 0xEE,-    0x81, 0xD5, 0xCC, 0x1D, 0xA3, 0xC6, 0x3C, 0xE8,-    0x27, 0x30, 0x1C, 0x56, 0x9D, 0xFB, 0x39, 0xCE-  },-  {-    0xC7, 0xC3, 0xFE, 0x1E, 0xEB, 0xDC, 0x7B, 0x5A,-    0x93, 0x93, 0x26, 0xE8, 0xDD, 0xB8, 0x3E, 0x8B,-    0xF2, 0xB7, 0x80, 0xB6, 0x56, 0x78, 0xCB, 0x62,-    0xF2, 0x08, 0xB0, 0x40, 0xAB, 0xDD, 0x35, 0xE2-  },-  {-    0x0C, 0x75, 0xC1, 0xA1, 0x5C, 0xF3, 0x4A, 0x31,-    0x4E, 0xE4, 0x78, 0xF4, 0xA5, 0xCE, 0x0B, 0x8A,-    0x6B, 0x36, 0x52, 0x8E, 0xF7, 0xA8, 0x20, 0x69,-    0x6C, 0x3E, 0x42, 0x46, 0xC5, 0xA1, 0x58, 0x64-  },-  {-    0x21, 0x6D, 0xC1, 0x2A, 0x10, 0x85, 0x69, 0xA3,-    0xC7, 0xCD, 0xDE, 0x4A, 0xED, 0x43, 0xA6, 0xC3,-    0x30, 0x13, 0x9D, 0xDA, 0x3C, 0xCC, 0x4A, 0x10,-    0x89, 0x05, 0xDB, 0x38, 0x61, 0x89, 0x90, 0x50-  },-  {-    0xA5, 0x7B, 0xE6, 0xAE, 0x67, 0x56, 0xF2, 0x8B,-    0x02, 0xF5, 0x9D, 0xAD, 0xF7, 0xE0, 0xD7, 0xD8,-    0x80, 0x7F, 0x10, 0xFA, 0x15, 0xCE, 0xD1, 0xAD,-    0x35, 0x85, 0x52, 0x1A, 0x1D, 0x99, 0x5A, 0x89-  },-  {-    0x81, 0x6A, 0xEF, 0x87, 0x59, 0x53, 0x71, 0x6C,-    0xD7, 0xA5, 0x81, 0xF7, 0x32, 0xF5, 0x3D, 0xD4,-    0x35, 0xDA, 0xB6, 0x6D, 0x09, 0xC3, 0x61, 0xD2,-    0xD6, 0x59, 0x2D, 0xE1, 0x77, 0x55, 0xD8, 0xA8-  },-  {-    0x9A, 0x76, 0x89, 0x32, 0x26, 0x69, 0x3B, 0x6E,-    0xA9, 0x7E, 0x6A, 0x73, 0x8F, 0x9D, 0x10, 0xFB,-    0x3D, 0x0B, 0x43, 0xAE, 0x0E, 0x8B, 0x7D, 0x81,-    0x23, 0xEA, 0x76, 0xCE, 0x97, 0x98, 0x9C, 0x7E-  },-  {-    0x8D, 0xAE, 0xDB, 0x9A, 0x27, 0x15, 0x29, 0xDB,-    0xB7, 0xDC, 0x3B, 0x60, 0x7F, 0xE5, 0xEB, 0x2D,-    0x32, 0x11, 0x77, 0x07, 0x58, 0xDD, 0x3B, 0x0A,-    0x35, 0x93, 0xD2, 0xD7, 0x95, 0x4E, 0x2D, 0x5B-  },-  {-    0x16, 0xDB, 0xC0, 0xAA, 0x5D, 0xD2, 0xC7, 0x74,-    0xF5, 0x05, 0x10, 0x0F, 0x73, 0x37, 0x86, 0xD8,-    0xA1, 0x75, 0xFC, 0xBB, 0xB5, 0x9C, 0x43, 0xE1,-    0xFB, 0xFF, 0x3E, 0x1E, 0xAF, 0x31, 0xCB, 0x4A-  },-  {-    0x86, 0x06, 0xCB, 0x89, 0x9C, 0x6A, 0xEA, 0xF5,-    0x1B, 0x9D, 0xB0, 0xFE, 0x49, 0x24, 0xA9, 0xFD,-    0x5D, 0xAB, 0xC1, 0x9F, 0x88, 0x26, 0xF2, 0xBC,-    0x1C, 0x1D, 0x7D, 0xA1, 0x4D, 0x2C, 0x2C, 0x99-  },-  {-    0x84, 0x79, 0x73, 0x1A, 0xED, 0xA5, 0x7B, 0xD3,-    0x7E, 0xAD, 0xB5, 0x1A, 0x50, 0x7E, 0x30, 0x7F,-    0x3B, 0xD9, 0x5E, 0x69, 0xDB, 0xCA, 0x94, 0xF3,-    0xBC, 0x21, 0x72, 0x60, 0x66, 0xAD, 0x6D, 0xFD-  },-  {-    0x58, 0x47, 0x3A, 0x9E, 0xA8, 0x2E, 0xFA, 0x3F,-    0x3B, 0x3D, 0x8F, 0xC8, 0x3E, 0xD8, 0x86, 0x31,-    0x27, 0xB3, 0x3A, 0xE8, 0xDE, 0xAE, 0x63, 0x07,-    0x20, 0x1E, 0xDB, 0x6D, 0xDE, 0x61, 0xDE, 0x29-  },-  {-    0x9A, 0x92, 0x55, 0xD5, 0x3A, 0xF1, 0x16, 0xDE,-    0x8B, 0xA2, 0x7C, 0xE3, 0x5B, 0x4C, 0x7E, 0x15,-    0x64, 0x06, 0x57, 0xA0, 0xFC, 0xB8, 0x88, 0xC7,-    0x0D, 0x95, 0x43, 0x1D, 0xAC, 0xD8, 0xF8, 0x30-  },-  {-    0x9E, 0xB0, 0x5F, 0xFB, 0xA3, 0x9F, 0xD8, 0x59,-    0x6A, 0x45, 0x49, 0x3E, 0x18, 0xD2, 0x51, 0x0B,-    0xF3, 0xEF, 0x06, 0x5C, 0x51, 0xD6, 0xE1, 0x3A,-    0xBE, 0x66, 0xAA, 0x57, 0xE0, 0x5C, 0xFD, 0xB7-  },-  {-    0x81, 0xDC, 0xC3, 0xA5, 0x05, 0xEA, 0xCE, 0x3F,-    0x87, 0x9D, 0x8F, 0x70, 0x27, 0x76, 0x77, 0x0F,-    0x9D, 0xF5, 0x0E, 0x52, 0x1D, 0x14, 0x28, 0xA8,-    0x5D, 0xAF, 0x04, 0xF9, 0xAD, 0x21, 0x50, 0xE0-  },-  {-    0xE3, 0xE3, 0xC4, 0xAA, 0x3A, 0xCB, 0xBC, 0x85,-    0x33, 0x2A, 0xF9, 0xD5, 0x64, 0xBC, 0x24, 0x16,-    0x5E, 0x16, 0x87, 0xF6, 0xB1, 0xAD, 0xCB, 0xFA,-    0xE7, 0x7A, 0x8F, 0x03, 0xC7, 0x2A, 0xC2, 0x8C-  },-  {-    0x67, 0x46, 0xC8, 0x0B, 0x4E, 0xB5, 0x6A, 0xEA,-    0x45, 0xE6, 0x4E, 0x72, 0x89, 0xBB, 0xA3, 0xED,-    0xBF, 0x45, 0xEC, 0xF8, 0x20, 0x64, 0x81, 0xFF,-    0x63, 0x02, 0x12, 0x29, 0x84, 0xCD, 0x52, 0x6A-  },-  {-    0x2B, 0x62, 0x8E, 0x52, 0x76, 0x4D, 0x7D, 0x62,-    0xC0, 0x86, 0x8B, 0x21, 0x23, 0x57, 0xCD, 0xD1,-    0x2D, 0x91, 0x49, 0x82, 0x2F, 0x4E, 0x98, 0x45,-    0xD9, 0x18, 0xA0, 0x8D, 0x1A, 0xE9, 0x90, 0xC0-  },-  {-    0xE4, 0xBF, 0xE8, 0x0D, 0x58, 0xC9, 0x19, 0x94,-    0x61, 0x39, 0x09, 0xDC, 0x4B, 0x1A, 0x12, 0x49,-    0x68, 0x96, 0xC0, 0x04, 0xAF, 0x7B, 0x57, 0x01,-    0x48, 0x3D, 0xE4, 0x5D, 0x28, 0x23, 0xD7, 0x8E-  },-  {-    0xEB, 0xB4, 0xBA, 0x15, 0x0C, 0xEF, 0x27, 0x34,-    0x34, 0x5B, 0x5D, 0x64, 0x1B, 0xBE, 0xD0, 0x3A,-    0x21, 0xEA, 0xFA, 0xE9, 0x33, 0xC9, 0x9E, 0x00,-    0x92, 0x12, 0xEF, 0x04, 0x57, 0x4A, 0x85, 0x30-  },-  {-    0x39, 0x66, 0xEC, 0x73, 0xB1, 0x54, 0xAC, 0xC6,-    0x97, 0xAC, 0x5C, 0xF5, 0xB2, 0x4B, 0x40, 0xBD,-    0xB0, 0xDB, 0x9E, 0x39, 0x88, 0x36, 0xD7, 0x6D,-    0x4B, 0x88, 0x0E, 0x3B, 0x2A, 0xF1, 0xAA, 0x27-  },-  {-    0xEF, 0x7E, 0x48, 0x31, 0xB3, 0xA8, 0x46, 0x36,-    0x51, 0x8D, 0x6E, 0x4B, 0xFC, 0xE6, 0x4A, 0x43,-    0xDB, 0x2A, 0x5D, 0xDA, 0x9C, 0xCA, 0x2B, 0x44,-    0xF3, 0x90, 0x33, 0xBD, 0xC4, 0x0D, 0x62, 0x43-  },-  {-    0x7A, 0xBF, 0x6A, 0xCF, 0x5C, 0x8E, 0x54, 0x9D,-    0xDB, 0xB1, 0x5A, 0xE8, 0xD8, 0xB3, 0x88, 0xC1,-    0xC1, 0x97, 0xE6, 0x98, 0x73, 0x7C, 0x97, 0x85,-    0x50, 0x1E, 0xD1, 0xF9, 0x49, 0x30, 0xB7, 0xD9-  },-  {-    0x88, 0x01, 0x8D, 0xED, 0x66, 0x81, 0x3F, 0x0C,-    0xA9, 0x5D, 0xEF, 0x47, 0x4C, 0x63, 0x06, 0x92,-    0x01, 0x99, 0x67, 0xB9, 0xE3, 0x68, 0x88, 0xDA,-    0xDD, 0x94, 0x12, 0x47, 0x19, 0xB6, 0x82, 0xF6-  },-  {-    0x39, 0x30, 0x87, 0x6B, 0x9F, 0xC7, 0x52, 0x90,-    0x36, 0xB0, 0x08, 0xB1, 0xB8, 0xBB, 0x99, 0x75,-    0x22, 0xA4, 0x41, 0x63, 0x5A, 0x0C, 0x25, 0xEC,-    0x02, 0xFB, 0x6D, 0x90, 0x26, 0xE5, 0x5A, 0x97-  },-  {-    0x0A, 0x40, 0x49, 0xD5, 0x7E, 0x83, 0x3B, 0x56,-    0x95, 0xFA, 0xC9, 0x3D, 0xD1, 0xFB, 0xEF, 0x31,-    0x66, 0xB4, 0x4B, 0x12, 0xAD, 0x11, 0x24, 0x86,-    0x62, 0x38, 0x3A, 0xE0, 0x51, 0xE1, 0x58, 0x27-  },-  {-    0x81, 0xDC, 0xC0, 0x67, 0x8B, 0xB6, 0xA7, 0x65,-    0xE4, 0x8C, 0x32, 0x09, 0x65, 0x4F, 0xE9, 0x00,-    0x89, 0xCE, 0x44, 0xFF, 0x56, 0x18, 0x47, 0x7E,-    0x39, 0xAB, 0x28, 0x64, 0x76, 0xDF, 0x05, 0x2B-  },-  {-    0xE6, 0x9B, 0x3A, 0x36, 0xA4, 0x46, 0x19, 0x12,-    0xDC, 0x08, 0x34, 0x6B, 0x11, 0xDD, 0xCB, 0x9D,-    0xB7, 0x96, 0xF8, 0x85, 0xFD, 0x01, 0x93, 0x6E,-    0x66, 0x2F, 0xE2, 0x92, 0x97, 0xB0, 0x99, 0xA4-  },-  {-    0x5A, 0xC6, 0x50, 0x3B, 0x0D, 0x8D, 0xA6, 0x91,-    0x76, 0x46, 0xE6, 0xDC, 0xC8, 0x7E, 0xDC, 0x58,-    0xE9, 0x42, 0x45, 0x32, 0x4C, 0xC2, 0x04, 0xF4,-    0xDD, 0x4A, 0xF0, 0x15, 0x63, 0xAC, 0xD4, 0x27-  },-  {-    0xDF, 0x6D, 0xDA, 0x21, 0x35, 0x9A, 0x30, 0xBC,-    0x27, 0x17, 0x80, 0x97, 0x1C, 0x1A, 0xBD, 0x56,-    0xA6, 0xEF, 0x16, 0x7E, 0x48, 0x08, 0x87, 0x88,-    0x8E, 0x73, 0xA8, 0x6D, 0x3B, 0xF6, 0x05, 0xE9-  },-  {-    0xE8, 0xE6, 0xE4, 0x70, 0x71, 0xE7, 0xB7, 0xDF,-    0x25, 0x80, 0xF2, 0x25, 0xCF, 0xBB, 0xED, 0xF8,-    0x4C, 0xE6, 0x77, 0x46, 0x62, 0x66, 0x28, 0xD3,-    0x30, 0x97, 0xE4, 0xB7, 0xDC, 0x57, 0x11, 0x07-  },-  {-    0x53, 0xE4, 0x0E, 0xAD, 0x62, 0x05, 0x1E, 0x19,-    0xCB, 0x9B, 0xA8, 0x13, 0x3E, 0x3E, 0x5C, 0x1C,-    0xE0, 0x0D, 0xDC, 0xAD, 0x8A, 0xCF, 0x34, 0x2A,-    0x22, 0x43, 0x60, 0xB0, 0xAC, 0xC1, 0x47, 0x77-  },-  {-    0x9C, 0xCD, 0x53, 0xFE, 0x80, 0xBE, 0x78, 0x6A,-    0xA9, 0x84, 0x63, 0x84, 0x62, 0xFB, 0x28, 0xAF,-    0xDF, 0x12, 0x2B, 0x34, 0xD7, 0x8F, 0x46, 0x87,-    0xEC, 0x63, 0x2B, 0xB1, 0x9D, 0xE2, 0x37, 0x1A-  },-  {-    0xCB, 0xD4, 0x80, 0x52, 0xC4, 0x8D, 0x78, 0x84,-    0x66, 0xA3, 0xE8, 0x11, 0x8C, 0x56, 0xC9, 0x7F,-    0xE1, 0x46, 0xE5, 0x54, 0x6F, 0xAA, 0xF9, 0x3E,-    0x2B, 0xC3, 0xC4, 0x7E, 0x45, 0x93, 0x97, 0x53-  },-  {-    0x25, 0x68, 0x83, 0xB1, 0x4E, 0x2A, 0xF4, 0x4D,-    0xAD, 0xB2, 0x8E, 0x1B, 0x34, 0xB2, 0xAC, 0x0F,-    0x0F, 0x4C, 0x91, 0xC3, 0x4E, 0xC9, 0x16, 0x9E,-    0x29, 0x03, 0x61, 0x58, 0xAC, 0xAA, 0x95, 0xB9-  },-  {-    0x44, 0x71, 0xB9, 0x1A, 0xB4, 0x2D, 0xB7, 0xC4,-    0xDD, 0x84, 0x90, 0xAB, 0x95, 0xA2, 0xEE, 0x8D,-    0x04, 0xE3, 0xEF, 0x5C, 0x3D, 0x6F, 0xC7, 0x1A,-    0xC7, 0x4B, 0x2B, 0x26, 0x91, 0x4D, 0x16, 0x41-  },-  {-    0xA5, 0xEB, 0x08, 0x03, 0x8F, 0x8F, 0x11, 0x55,-    0xED, 0x86, 0xE6, 0x31, 0x90, 0x6F, 0xC1, 0x30,-    0x95, 0xF6, 0xBB, 0xA4, 0x1D, 0xE5, 0xD4, 0xE7,-    0x95, 0x75, 0x8E, 0xC8, 0xC8, 0xDF, 0x8A, 0xF1-  },-  {-    0xDC, 0x1D, 0xB6, 0x4E, 0xD8, 0xB4, 0x8A, 0x91,-    0x0E, 0x06, 0x0A, 0x6B, 0x86, 0x63, 0x74, 0xC5,-    0x78, 0x78, 0x4E, 0x9A, 0xC4, 0x9A, 0xB2, 0x77,-    0x40, 0x92, 0xAC, 0x71, 0x50, 0x19, 0x34, 0xAC-  },-  {-    0x28, 0x54, 0x13, 0xB2, 0xF2, 0xEE, 0x87, 0x3D,-    0x34, 0x31, 0x9E, 0xE0, 0xBB, 0xFB, 0xB9, 0x0F,-    0x32, 0xDA, 0x43, 0x4C, 0xC8, 0x7E, 0x3D, 0xB5,-    0xED, 0x12, 0x1B, 0xB3, 0x98, 0xED, 0x96, 0x4B-  },-  {-    0x02, 0x16, 0xE0, 0xF8, 0x1F, 0x75, 0x0F, 0x26,-    0xF1, 0x99, 0x8B, 0xC3, 0x93, 0x4E, 0x3E, 0x12,-    0x4C, 0x99, 0x45, 0xE6, 0x85, 0xA6, 0x0B, 0x25,-    0xE8, 0xFB, 0xD9, 0x62, 0x5A, 0xB6, 0xB5, 0x99-  },-  {-    0x38, 0xC4, 0x10, 0xF5, 0xB9, 0xD4, 0x07, 0x20,-    0x50, 0x75, 0x5B, 0x31, 0xDC, 0xA8, 0x9F, 0xD5,-    0x39, 0x5C, 0x67, 0x85, 0xEE, 0xB3, 0xD7, 0x90,-    0xF3, 0x20, 0xFF, 0x94, 0x1C, 0x5A, 0x93, 0xBF-  },-  {-    0xF1, 0x84, 0x17, 0xB3, 0x9D, 0x61, 0x7A, 0xB1,-    0xC1, 0x8F, 0xDF, 0x91, 0xEB, 0xD0, 0xFC, 0x6D,-    0x55, 0x16, 0xBB, 0x34, 0xCF, 0x39, 0x36, 0x40,-    0x37, 0xBC, 0xE8, 0x1F, 0xA0, 0x4C, 0xEC, 0xB1-  },-  {-    0x1F, 0xA8, 0x77, 0xDE, 0x67, 0x25, 0x9D, 0x19,-    0x86, 0x3A, 0x2A, 0x34, 0xBC, 0xC6, 0x96, 0x2A,-    0x2B, 0x25, 0xFC, 0xBF, 0x5C, 0xBE, 0xCD, 0x7E,-    0xDE, 0x8F, 0x1F, 0xA3, 0x66, 0x88, 0xA7, 0x96-  },-  {-    0x5B, 0xD1, 0x69, 0xE6, 0x7C, 0x82, 0xC2, 0xC2,-    0xE9, 0x8E, 0xF7, 0x00, 0x8B, 0xDF, 0x26, 0x1F,-    0x2D, 0xDF, 0x30, 0xB1, 0xC0, 0x0F, 0x9E, 0x7F,-    0x27, 0x5B, 0xB3, 0xE8, 0xA2, 0x8D, 0xC9, 0xA2-  },-  {-    0xC8, 0x0A, 0xBE, 0xEB, 0xB6, 0x69, 0xAD, 0x5D,-    0xEE, 0xB5, 0xF5, 0xEC, 0x8E, 0xA6, 0xB7, 0xA0,-    0x5D, 0xDF, 0x7D, 0x31, 0xEC, 0x4C, 0x0A, 0x2E,-    0xE2, 0x0B, 0x0B, 0x98, 0xCA, 0xEC, 0x67, 0x46-  },-  {-    0xE7, 0x6D, 0x3F, 0xBD, 0xA5, 0xBA, 0x37, 0x4E,-    0x6B, 0xF8, 0xE5, 0x0F, 0xAD, 0xC3, 0xBB, 0xB9,-    0xBA, 0x5C, 0x20, 0x6E, 0xBD, 0xEC, 0x89, 0xA3,-    0xA5, 0x4C, 0xF3, 0xDD, 0x84, 0xA0, 0x70, 0x16-  },-  {-    0x7B, 0xBA, 0x9D, 0xC5, 0xB5, 0xDB, 0x20, 0x71,-    0xD1, 0x77, 0x52, 0xB1, 0x04, 0x4C, 0x1E, 0xCE,-    0xD9, 0x6A, 0xAF, 0x2D, 0xD4, 0x6E, 0x9B, 0x43,-    0x37, 0x50, 0xE8, 0xEA, 0x0D, 0xCC, 0x18, 0x70-  },-  {-    0xF2, 0x9B, 0x1B, 0x1A, 0xB9, 0xBA, 0xB1, 0x63,-    0x01, 0x8E, 0xE3, 0xDA, 0x15, 0x23, 0x2C, 0xCA,-    0x78, 0xEC, 0x52, 0xDB, 0xC3, 0x4E, 0xDA, 0x5B,-    0x82, 0x2E, 0xC1, 0xD8, 0x0F, 0xC2, 0x1B, 0xD0-  },-  {-    0x9E, 0xE3, 0xE3, 0xE7, 0xE9, 0x00, 0xF1, 0xE1,-    0x1D, 0x30, 0x8C, 0x4B, 0x2B, 0x30, 0x76, 0xD2,-    0x72, 0xCF, 0x70, 0x12, 0x4F, 0x9F, 0x51, 0xE1,-    0xDA, 0x60, 0xF3, 0x78, 0x46, 0xCD, 0xD2, 0xF4-  },-  {-    0x70, 0xEA, 0x3B, 0x01, 0x76, 0x92, 0x7D, 0x90,-    0x96, 0xA1, 0x85, 0x08, 0xCD, 0x12, 0x3A, 0x29,-    0x03, 0x25, 0x92, 0x0A, 0x9D, 0x00, 0xA8, 0x9B,-    0x5D, 0xE0, 0x42, 0x73, 0xFB, 0xC7, 0x6B, 0x85-  },-  {-    0x67, 0xDE, 0x25, 0xC0, 0x2A, 0x4A, 0xAB, 0xA2,-    0x3B, 0xDC, 0x97, 0x3C, 0x8B, 0xB0, 0xB5, 0x79,-    0x6D, 0x47, 0xCC, 0x06, 0x59, 0xD4, 0x3D, 0xFF,-    0x1F, 0x97, 0xDE, 0x17, 0x49, 0x63, 0xB6, 0x8E-  },-  {-    0xB2, 0x16, 0x8E, 0x4E, 0x0F, 0x18, 0xB0, 0xE6,-    0x41, 0x00, 0xB5, 0x17, 0xED, 0x95, 0x25, 0x7D,-    0x73, 0xF0, 0x62, 0x0D, 0xF8, 0x85, 0xC1, 0x3D,-    0x2E, 0xCF, 0x79, 0x36, 0x7B, 0x38, 0x4C, 0xEE-  },-  {-    0x2E, 0x7D, 0xEC, 0x24, 0x28, 0x85, 0x3B, 0x2C,-    0x71, 0x76, 0x07, 0x45, 0x54, 0x1F, 0x7A, 0xFE,-    0x98, 0x25, 0xB5, 0xDD, 0x77, 0xDF, 0x06, 0x51,-    0x1D, 0x84, 0x41, 0xA9, 0x4B, 0xAC, 0xC9, 0x27-  },-  {-    0xCA, 0x9F, 0xFA, 0xC4, 0xC4, 0x3F, 0x0B, 0x48,-    0x46, 0x1D, 0xC5, 0xC2, 0x63, 0xBE, 0xA3, 0xF6,-    0xF0, 0x06, 0x11, 0xCE, 0xAC, 0xAB, 0xF6, 0xF8,-    0x95, 0xBA, 0x2B, 0x01, 0x01, 0xDB, 0xB6, 0x8D-  },-  {-    0x74, 0x10, 0xD4, 0x2D, 0x8F, 0xD1, 0xD5, 0xE9,-    0xD2, 0xF5, 0x81, 0x5C, 0xB9, 0x34, 0x17, 0x99,-    0x88, 0x28, 0xEF, 0x3C, 0x42, 0x30, 0xBF, 0xBD,-    0x41, 0x2D, 0xF0, 0xA4, 0xA7, 0xA2, 0x50, 0x7A-  },-  {-    0x50, 0x10, 0xF6, 0x84, 0x51, 0x6D, 0xCC, 0xD0,-    0xB6, 0xEE, 0x08, 0x52, 0xC2, 0x51, 0x2B, 0x4D,-    0xC0, 0x06, 0x6C, 0xF0, 0xD5, 0x6F, 0x35, 0x30,-    0x29, 0x78, 0xDB, 0x8A, 0xE3, 0x2C, 0x6A, 0x81-  },-  {-    0xAC, 0xAA, 0xB5, 0x85, 0xF7, 0xB7, 0x9B, 0x71,-    0x99, 0x35, 0xCE, 0xB8, 0x95, 0x23, 0xDD, 0xC5,-    0x48, 0x27, 0xF7, 0x5C, 0x56, 0x88, 0x38, 0x56,-    0x15, 0x4A, 0x56, 0xCD, 0xCD, 0x5E, 0xE9, 0x88-  },-  {-    0x66, 0x6D, 0xE5, 0xD1, 0x44, 0x0F, 0xEE, 0x73,-    0x31, 0xAA, 0xF0, 0x12, 0x3A, 0x62, 0xEF, 0x2D,-    0x8B, 0xA5, 0x74, 0x53, 0xA0, 0x76, 0x96, 0x35,-    0xAC, 0x6C, 0xD0, 0x1E, 0x63, 0x3F, 0x77, 0x12-  },-  {-    0xA6, 0xF9, 0x86, 0x58, 0xF6, 0xEA, 0xBA, 0xF9,-    0x02, 0xD8, 0xB3, 0x87, 0x1A, 0x4B, 0x10, 0x1D,-    0x16, 0x19, 0x6E, 0x8A, 0x4B, 0x24, 0x1E, 0x15,-    0x58, 0xFE, 0x29, 0x96, 0x6E, 0x10, 0x3E, 0x8D-  },-  {-    0x89, 0x15, 0x46, 0xA8, 0xB2, 0x9F, 0x30, 0x47,-    0xDD, 0xCF, 0xE5, 0xB0, 0x0E, 0x45, 0xFD, 0x55,-    0x75, 0x63, 0x73, 0x10, 0x5E, 0xA8, 0x63, 0x7D,-    0xFC, 0xFF, 0x54, 0x7B, 0x6E, 0xA9, 0x53, 0x5F-  },-  {-    0x18, 0xDF, 0xBC, 0x1A, 0xC5, 0xD2, 0x5B, 0x07,-    0x61, 0x13, 0x7D, 0xBD, 0x22, 0xC1, 0x7C, 0x82,-    0x9D, 0x0F, 0x0E, 0xF1, 0xD8, 0x23, 0x44, 0xE9,-    0xC8, 0x9C, 0x28, 0x66, 0x94, 0xDA, 0x24, 0xE8-  },-  {-    0xB5, 0x4B, 0x9B, 0x67, 0xF8, 0xFE, 0xD5, 0x4B,-    0xBF, 0x5A, 0x26, 0x66, 0xDB, 0xDF, 0x4B, 0x23,-    0xCF, 0xF1, 0xD1, 0xB6, 0xF4, 0xAF, 0xC9, 0x85,-    0xB2, 0xE6, 0xD3, 0x30, 0x5A, 0x9F, 0xF8, 0x0F-  },-  {-    0x7D, 0xB4, 0x42, 0xE1, 0x32, 0xBA, 0x59, 0xBC,-    0x12, 0x89, 0xAA, 0x98, 0xB0, 0xD3, 0xE8, 0x06,-    0x00, 0x4F, 0x8E, 0xC1, 0x28, 0x11, 0xAF, 0x1E,-    0x2E, 0x33, 0xC6, 0x9B, 0xFD, 0xE7, 0x29, 0xE1-  },-  {-    0x25, 0x0F, 0x37, 0xCD, 0xC1, 0x5E, 0x81, 0x7D,-    0x2F, 0x16, 0x0D, 0x99, 0x56, 0xC7, 0x1F, 0xE3,-    0xEB, 0x5D, 0xB7, 0x45, 0x56, 0xE4, 0xAD, 0xF9,-    0xA4, 0xFF, 0xAF, 0xBA, 0x74, 0x01, 0x03, 0x96-  },-  {-    0x4A, 0xB8, 0xA3, 0xDD, 0x1D, 0xDF, 0x8A, 0xD4,-    0x3D, 0xAB, 0x13, 0xA2, 0x7F, 0x66, 0xA6, 0x54,-    0x4F, 0x29, 0x05, 0x97, 0xFA, 0x96, 0x04, 0x0E,-    0x0E, 0x1D, 0xB9, 0x26, 0x3A, 0xA4, 0x79, 0xF8-  },-  {-    0xEE, 0x61, 0x72, 0x7A, 0x07, 0x66, 0xDF, 0x93,-    0x9C, 0xCD, 0xC8, 0x60, 0x33, 0x40, 0x44, 0xC7,-    0x9A, 0x3C, 0x9B, 0x15, 0x62, 0x00, 0xBC, 0x3A,-    0xA3, 0x29, 0x73, 0x48, 0x3D, 0x83, 0x41, 0xAE-  },-  {-    0x3F, 0x68, 0xC7, 0xEC, 0x63, 0xAC, 0x11, 0xEB,-    0xB9, 0x8F, 0x94, 0xB3, 0x39, 0xB0, 0x5C, 0x10,-    0x49, 0x84, 0xFD, 0xA5, 0x01, 0x03, 0x06, 0x01,-    0x44, 0xE5, 0xA2, 0xBF, 0xCC, 0xC9, 0xDA, 0x95-  },-  {-    0x05, 0x6F, 0x29, 0x81, 0x6B, 0x8A, 0xF8, 0xF5,-    0x66, 0x82, 0xBC, 0x4D, 0x7C, 0xF0, 0x94, 0x11,-    0x1D, 0xA7, 0x73, 0x3E, 0x72, 0x6C, 0xD1, 0x3D,-    0x6B, 0x3E, 0x8E, 0xA0, 0x3E, 0x92, 0xA0, 0xD5-  },-  {-    0xF5, 0xEC, 0x43, 0xA2, 0x8A, 0xCB, 0xEF, 0xF1,-    0xF3, 0x31, 0x8A, 0x5B, 0xCA, 0xC7, 0xC6, 0x6D,-    0xDB, 0x52, 0x30, 0xB7, 0x9D, 0xB2, 0xD1, 0x05,-    0xBC, 0xBE, 0x15, 0xF3, 0xC1, 0x14, 0x8D, 0x69-  },-  {-    0x2A, 0x69, 0x60, 0xAD, 0x1D, 0x8D, 0xD5, 0x47,-    0x55, 0x5C, 0xFB, 0xD5, 0xE4, 0x60, 0x0F, 0x1E,-    0xAA, 0x1C, 0x8E, 0xDA, 0x34, 0xDE, 0x03, 0x74,-    0xEC, 0x4A, 0x26, 0xEA, 0xAA, 0xA3, 0x3B, 0x4E-  },-  {-    0xDC, 0xC1, 0xEA, 0x7B, 0xAA, 0xB9, 0x33, 0x84,-    0xF7, 0x6B, 0x79, 0x68, 0x66, 0x19, 0x97, 0x54,-    0x74, 0x2F, 0x7B, 0x96, 0xD6, 0xB4, 0xC1, 0x20,-    0x16, 0x5C, 0x04, 0xA6, 0xC4, 0xF5, 0xCE, 0x10-  },-  {-    0x13, 0xD5, 0xDF, 0x17, 0x92, 0x21, 0x37, 0x9C,-    0x6A, 0x78, 0xC0, 0x7C, 0x79, 0x3F, 0xF5, 0x34,-    0x87, 0xCA, 0xE6, 0xBF, 0x9F, 0xE8, 0x82, 0x54,-    0x1A, 0xB0, 0xE7, 0x35, 0xE3, 0xEA, 0xDA, 0x3B-  },-  {-    0x8C, 0x59, 0xE4, 0x40, 0x76, 0x41, 0xA0, 0x1E,-    0x8F, 0xF9, 0x1F, 0x99, 0x80, 0xDC, 0x23, 0x6F,-    0x4E, 0xCD, 0x6F, 0xCF, 0x52, 0x58, 0x9A, 0x09,-    0x9A, 0x96, 0x16, 0x33, 0x96, 0x77, 0x14, 0xE1-  },-  {-    0x83, 0x3B, 0x1A, 0xC6, 0xA2, 0x51, 0xFD, 0x08,-    0xFD, 0x6D, 0x90, 0x8F, 0xEA, 0x2A, 0x4E, 0xE1,-    0xE0, 0x40, 0xBC, 0xA9, 0x3F, 0xC1, 0xA3, 0x8E,-    0xC3, 0x82, 0x0E, 0x0C, 0x10, 0xBD, 0x82, 0xEA-  },-  {-    0xA2, 0x44, 0xF9, 0x27, 0xF3, 0xB4, 0x0B, 0x8F,-    0x6C, 0x39, 0x15, 0x70, 0xC7, 0x65, 0x41, 0x8F,-    0x2F, 0x6E, 0x70, 0x8E, 0xAC, 0x90, 0x06, 0xC5,-    0x1A, 0x7F, 0xEF, 0xF4, 0xAF, 0x3B, 0x2B, 0x9E-  },-  {-    0x3D, 0x99, 0xED, 0x95, 0x50, 0xCF, 0x11, 0x96,-    0xE6, 0xC4, 0xD2, 0x0C, 0x25, 0x96, 0x20, 0xF8,-    0x58, 0xC3, 0xD7, 0x03, 0x37, 0x4C, 0x12, 0x8C,-    0xE7, 0xB5, 0x90, 0x31, 0x0C, 0x83, 0x04, 0x6D-  },-  {-    0x2B, 0x35, 0xC4, 0x7D, 0x7B, 0x87, 0x76, 0x1F,-    0x0A, 0xE4, 0x3A, 0xC5, 0x6A, 0xC2, 0x7B, 0x9F,-    0x25, 0x83, 0x03, 0x67, 0xB5, 0x95, 0xBE, 0x8C,-    0x24, 0x0E, 0x94, 0x60, 0x0C, 0x6E, 0x33, 0x12-  },-  {-    0x5D, 0x11, 0xED, 0x37, 0xD2, 0x4D, 0xC7, 0x67,-    0x30, 0x5C, 0xB7, 0xE1, 0x46, 0x7D, 0x87, 0xC0,-    0x65, 0xAC, 0x4B, 0xC8, 0xA4, 0x26, 0xDE, 0x38,-    0x99, 0x1F, 0xF5, 0x9A, 0xA8, 0x73, 0x5D, 0x02-  },-  {-    0xB8, 0x36, 0x47, 0x8E, 0x1C, 0xA0, 0x64, 0x0D,-    0xCE, 0x6F, 0xD9, 0x10, 0xA5, 0x09, 0x62, 0x72,-    0xC8, 0x33, 0x09, 0x90, 0xCD, 0x97, 0x86, 0x4A,-    0xC2, 0xBF, 0x14, 0xEF, 0x6B, 0x23, 0x91, 0x4A-  },-  {-    0x91, 0x00, 0xF9, 0x46, 0xD6, 0xCC, 0xDE, 0x3A,-    0x59, 0x7F, 0x90, 0xD3, 0x9F, 0xC1, 0x21, 0x5B,-    0xAD, 0xDC, 0x74, 0x13, 0x64, 0x3D, 0x85, 0xC2,-    0x1C, 0x3E, 0xEE, 0x5D, 0x2D, 0xD3, 0x28, 0x94-  },-  {-    0xDA, 0x70, 0xEE, 0xDD, 0x23, 0xE6, 0x63, 0xAA,-    0x1A, 0x74, 0xB9, 0x76, 0x69, 0x35, 0xB4, 0x79,-    0x22, 0x2A, 0x72, 0xAF, 0xBA, 0x5C, 0x79, 0x51,-    0x58, 0xDA, 0xD4, 0x1A, 0x3B, 0xD7, 0x7E, 0x40-  },-  {-    0xF0, 0x67, 0xED, 0x6A, 0x0D, 0xBD, 0x43, 0xAA,-    0x0A, 0x92, 0x54, 0xE6, 0x9F, 0xD6, 0x6B, 0xDD,-    0x8A, 0xCB, 0x87, 0xDE, 0x93, 0x6C, 0x25, 0x8C,-    0xFB, 0x02, 0x28, 0x5F, 0x2C, 0x11, 0xFA, 0x79-  },-  {-    0x71, 0x5C, 0x99, 0xC7, 0xD5, 0x75, 0x80, 0xCF,-    0x97, 0x53, 0xB4, 0xC1, 0xD7, 0x95, 0xE4, 0x5A,-    0x83, 0xFB, 0xB2, 0x28, 0xC0, 0xD3, 0x6F, 0xBE,-    0x20, 0xFA, 0xF3, 0x9B, 0xDD, 0x6D, 0x4E, 0x85-  },-  {-    0xE4, 0x57, 0xD6, 0xAD, 0x1E, 0x67, 0xCB, 0x9B,-    0xBD, 0x17, 0xCB, 0xD6, 0x98, 0xFA, 0x6D, 0x7D,-    0xAE, 0x0C, 0x9B, 0x7A, 0xD6, 0xCB, 0xD6, 0x53,-    0x96, 0x34, 0xE3, 0x2A, 0x71, 0x9C, 0x84, 0x92-  },-  {-    0xEC, 0xE3, 0xEA, 0x81, 0x03, 0xE0, 0x24, 0x83,-    0xC6, 0x4A, 0x70, 0xA4, 0xBD, 0xCE, 0xE8, 0xCE,-    0xB6, 0x27, 0x8F, 0x25, 0x33, 0xF3, 0xF4, 0x8D,-    0xBE, 0xED, 0xFB, 0xA9, 0x45, 0x31, 0xD4, 0xAE-  },-  {-    0x38, 0x8A, 0xA5, 0xD3, 0x66, 0x7A, 0x97, 0xC6,-    0x8D, 0x3D, 0x56, 0xF8, 0xF3, 0xEE, 0x8D, 0x3D,-    0x36, 0x09, 0x1F, 0x17, 0xFE, 0x5D, 0x1B, 0x0D,-    0x5D, 0x84, 0xC9, 0x3B, 0x2F, 0xFE, 0x40, 0xBD-  },-  {-    0x8B, 0x6B, 0x31, 0xB9, 0xAD, 0x7C, 0x3D, 0x5C,-    0xD8, 0x4B, 0xF9, 0x89, 0x47, 0xB9, 0xCD, 0xB5,-    0x9D, 0xF8, 0xA2, 0x5F, 0xF7, 0x38, 0x10, 0x10,-    0x13, 0xBE, 0x4F, 0xD6, 0x5E, 0x1D, 0xD1, 0xA3-  },-  {-    0x06, 0x62, 0x91, 0xF6, 0xBB, 0xD2, 0x5F, 0x3C,-    0x85, 0x3D, 0xB7, 0xD8, 0xB9, 0x5C, 0x9A, 0x1C,-    0xFB, 0x9B, 0xF1, 0xC1, 0xC9, 0x9F, 0xB9, 0x5A,-    0x9B, 0x78, 0x69, 0xD9, 0x0F, 0x1C, 0x29, 0x03-  },-  {-    0xA7, 0x07, 0xEF, 0xBC, 0xCD, 0xCE, 0xED, 0x42,-    0x96, 0x7A, 0x66, 0xF5, 0x53, 0x9B, 0x93, 0xED,-    0x75, 0x60, 0xD4, 0x67, 0x30, 0x40, 0x16, 0xC4,-    0x78, 0x0D, 0x77, 0x55, 0xA5, 0x65, 0xD4, 0xC4-  },-  {-    0x38, 0xC5, 0x3D, 0xFB, 0x70, 0xBE, 0x7E, 0x79,-    0x2B, 0x07, 0xA6, 0xA3, 0x5B, 0x8A, 0x6A, 0x0A,-    0xBA, 0x02, 0xC5, 0xC5, 0xF3, 0x8B, 0xAF, 0x5C,-    0x82, 0x3F, 0xDF, 0xD9, 0xE4, 0x2D, 0x65, 0x7E-  },-  {-    0xF2, 0x91, 0x13, 0x86, 0x50, 0x1D, 0x9A, 0xB9,-    0xD7, 0x20, 0xCF, 0x8A, 0xD1, 0x05, 0x03, 0xD5,-    0x63, 0x4B, 0xF4, 0xB7, 0xD1, 0x2B, 0x56, 0xDF,-    0xB7, 0x4F, 0xEC, 0xC6, 0xE4, 0x09, 0x3F, 0x68-  },-  {-    0xC6, 0xF2, 0xBD, 0xD5, 0x2B, 0x81, 0xE6, 0xE4,-    0xF6, 0x59, 0x5A, 0xBD, 0x4D, 0x7F, 0xB3, 0x1F,-    0x65, 0x11, 0x69, 0xD0, 0x0F, 0xF3, 0x26, 0x92,-    0x6B, 0x34, 0x94, 0x7B, 0x28, 0xA8, 0x39, 0x59-  },-  {-    0x29, 0x3D, 0x94, 0xB1, 0x8C, 0x98, 0xBB, 0x32,-    0x23, 0x36, 0x6B, 0x8C, 0xE7, 0x4C, 0x28, 0xFB,-    0xDF, 0x28, 0xE1, 0xF8, 0x4A, 0x33, 0x50, 0xB0,-    0xEB, 0x2D, 0x18, 0x04, 0xA5, 0x77, 0x57, 0x9B-  },-  {-    0x2C, 0x2F, 0xA5, 0xC0, 0xB5, 0x15, 0x33, 0x16,-    0x5B, 0xC3, 0x75, 0xC2, 0x2E, 0x27, 0x81, 0x76,-    0x82, 0x70, 0xA3, 0x83, 0x98, 0x5D, 0x13, 0xBD,-    0x6B, 0x67, 0xB6, 0xFD, 0x67, 0xF8, 0x89, 0xEB-  },-  {-    0xCA, 0xA0, 0x9B, 0x82, 0xB7, 0x25, 0x62, 0xE4,-    0x3F, 0x4B, 0x22, 0x75, 0xC0, 0x91, 0x91, 0x8E,-    0x62, 0x4D, 0x91, 0x16, 0x61, 0xCC, 0x81, 0x1B,-    0xB5, 0xFA, 0xEC, 0x51, 0xF6, 0x08, 0x8E, 0xF7-  },-  {-    0x24, 0x76, 0x1E, 0x45, 0xE6, 0x74, 0x39, 0x53,-    0x79, 0xFB, 0x17, 0x72, 0x9C, 0x78, 0xCB, 0x93,-    0x9E, 0x6F, 0x74, 0xC5, 0xDF, 0xFB, 0x9C, 0x96,-    0x1F, 0x49, 0x59, 0x82, 0xC3, 0xED, 0x1F, 0xE3-  },-  {-    0x55, 0xB7, 0x0A, 0x82, 0x13, 0x1E, 0xC9, 0x48,-    0x88, 0xD7, 0xAB, 0x54, 0xA7, 0xC5, 0x15, 0x25,-    0x5C, 0x39, 0x38, 0xBB, 0x10, 0xBC, 0x78, 0x4D,-    0xC9, 0xB6, 0x7F, 0x07, 0x6E, 0x34, 0x1A, 0x73-  },-  {-    0x6A, 0xB9, 0x05, 0x7B, 0x97, 0x7E, 0xBC, 0x3C,-    0xA4, 0xD4, 0xCE, 0x74, 0x50, 0x6C, 0x25, 0xCC,-    0xCD, 0xC5, 0x66, 0x49, 0x7C, 0x45, 0x0B, 0x54,-    0x15, 0xA3, 0x94, 0x86, 0xF8, 0x65, 0x7A, 0x03-  },-  {-    0x24, 0x06, 0x6D, 0xEE, 0xE0, 0xEC, 0xEE, 0x15,-    0xA4, 0x5F, 0x0A, 0x32, 0x6D, 0x0F, 0x8D, 0xBC,-    0x79, 0x76, 0x1E, 0xBB, 0x93, 0xCF, 0x8C, 0x03,-    0x77, 0xAF, 0x44, 0x09, 0x78, 0xFC, 0xF9, 0x94-  },-  {-    0x20, 0x00, 0x0D, 0x3F, 0x66, 0xBA, 0x76, 0x86,-    0x0D, 0x5A, 0x95, 0x06, 0x88, 0xB9, 0xAA, 0x0D,-    0x76, 0xCF, 0xEA, 0x59, 0xB0, 0x05, 0xD8, 0x59,-    0x91, 0x4B, 0x1A, 0x46, 0x65, 0x3A, 0x93, 0x9B-  },-  {-    0xB9, 0x2D, 0xAA, 0x79, 0x60, 0x3E, 0x3B, 0xDB,-    0xC3, 0xBF, 0xE0, 0xF4, 0x19, 0xE4, 0x09, 0xB2,-    0xEA, 0x10, 0xDC, 0x43, 0x5B, 0xEE, 0xFE, 0x29,-    0x59, 0xDA, 0x16, 0x89, 0x5D, 0x5D, 0xCA, 0x1C-  },-  {-    0xE9, 0x47, 0x94, 0x87, 0x05, 0xB2, 0x06, 0xD5,-    0x72, 0xB0, 0xE8, 0xF6, 0x2F, 0x66, 0xA6, 0x55,-    0x1C, 0xBD, 0x6B, 0xC3, 0x05, 0xD2, 0x6C, 0xE7,-    0x53, 0x9A, 0x12, 0xF9, 0xAA, 0xDF, 0x75, 0x71-  },-  {-    0x3D, 0x67, 0xC1, 0xB3, 0xF9, 0xB2, 0x39, 0x10,-    0xE3, 0xD3, 0x5E, 0x6B, 0x0F, 0x2C, 0xCF, 0x44,-    0xA0, 0xB5, 0x40, 0xA4, 0x5C, 0x18, 0xBA, 0x3C,-    0x36, 0x26, 0x4D, 0xD4, 0x8E, 0x96, 0xAF, 0x6A-  },-  {-    0xC7, 0x55, 0x8B, 0xAB, 0xDA, 0x04, 0xBC, 0xCB,-    0x76, 0x4D, 0x0B, 0xBF, 0x33, 0x58, 0x42, 0x51,-    0x41, 0x90, 0x2D, 0x22, 0x39, 0x1D, 0x9F, 0x8C,-    0x59, 0x15, 0x9F, 0xEC, 0x9E, 0x49, 0xB1, 0x51-  },-  {-    0x0B, 0x73, 0x2B, 0xB0, 0x35, 0x67, 0x5A, 0x50,-    0xFF, 0x58, 0xF2, 0xC2, 0x42, 0xE4, 0x71, 0x0A,-    0xEC, 0xE6, 0x46, 0x70, 0x07, 0x9C, 0x13, 0x04,-    0x4C, 0x79, 0xC9, 0xB7, 0x49, 0x1F, 0x70, 0x00-  },-  {-    0xD1, 0x20, 0xB5, 0xEF, 0x6D, 0x57, 0xEB, 0xF0,-    0x6E, 0xAF, 0x96, 0xBC, 0x93, 0x3C, 0x96, 0x7B,-    0x16, 0xCB, 0xE6, 0xE2, 0xBF, 0x00, 0x74, 0x1C,-    0x30, 0xAA, 0x1C, 0x54, 0xBA, 0x64, 0x80, 0x1F-  },-  {-    0x58, 0xD2, 0x12, 0xAD, 0x6F, 0x58, 0xAE, 0xF0,-    0xF8, 0x01, 0x16, 0xB4, 0x41, 0xE5, 0x7F, 0x61,-    0x95, 0xBF, 0xEF, 0x26, 0xB6, 0x14, 0x63, 0xED,-    0xEC, 0x11, 0x83, 0xCD, 0xB0, 0x4F, 0xE7, 0x6D-  },-  {-    0xB8, 0x83, 0x6F, 0x51, 0xD1, 0xE2, 0x9B, 0xDF,-    0xDB, 0xA3, 0x25, 0x56, 0x53, 0x60, 0x26, 0x8B,-    0x8F, 0xAD, 0x62, 0x74, 0x73, 0xED, 0xEC, 0xEF,-    0x7E, 0xAE, 0xFE, 0xE8, 0x37, 0xC7, 0x40, 0x03-  },-  {-    0xC5, 0x47, 0xA3, 0xC1, 0x24, 0xAE, 0x56, 0x85,-    0xFF, 0xA7, 0xB8, 0xED, 0xAF, 0x96, 0xEC, 0x86,-    0xF8, 0xB2, 0xD0, 0xD5, 0x0C, 0xEE, 0x8B, 0xE3,-    0xB1, 0xF0, 0xC7, 0x67, 0x63, 0x06, 0x9D, 0x9C-  },-  {-    0x5D, 0x16, 0x8B, 0x76, 0x9A, 0x2F, 0x67, 0x85,-    0x3D, 0x62, 0x95, 0xF7, 0x56, 0x8B, 0xE4, 0x0B,-    0xB7, 0xA1, 0x6B, 0x8D, 0x65, 0xBA, 0x87, 0x63,-    0x5D, 0x19, 0x78, 0xD2, 0xAB, 0x11, 0xBA, 0x2A-  },-  {-    0xA2, 0xF6, 0x75, 0xDC, 0x73, 0x02, 0x63, 0x8C,-    0xB6, 0x02, 0x01, 0x06, 0x4C, 0xA5, 0x50, 0x77,-    0x71, 0x4D, 0x71, 0xFE, 0x09, 0x6A, 0x31, 0x5F,-    0x2F, 0xE7, 0x40, 0x12, 0x77, 0xCA, 0xA5, 0xAF-  },-  {-    0xC8, 0xAA, 0xB5, 0xCD, 0x01, 0x60, 0xAE, 0x78,-    0xCD, 0x2E, 0x8A, 0xC5, 0xFB, 0x0E, 0x09, 0x3C,-    0xDB, 0x5C, 0x4B, 0x60, 0x52, 0xA0, 0xA9, 0x7B,-    0xB0, 0x42, 0x16, 0x82, 0x6F, 0xA7, 0xA4, 0x37-  },-  {-    0xFF, 0x68, 0xCA, 0x40, 0x35, 0xBF, 0xEB, 0x43,-    0xFB, 0xF1, 0x45, 0xFD, 0xDD, 0x5E, 0x43, 0xF1,-    0xCE, 0xA5, 0x4F, 0x11, 0xF7, 0xBE, 0xE1, 0x30,-    0x58, 0xF0, 0x27, 0x32, 0x9A, 0x4A, 0x5F, 0xA4-  },-  {-    0x1D, 0x4E, 0x54, 0x87, 0xAE, 0x3C, 0x74, 0x0F,-    0x2B, 0xA6, 0xE5, 0x41, 0xAC, 0x91, 0xBC, 0x2B,-    0xFC, 0xD2, 0x99, 0x9C, 0x51, 0x8D, 0x80, 0x7B,-    0x42, 0x67, 0x48, 0x80, 0x3A, 0x35, 0x0F, 0xD4-  },-  {-    0x6D, 0x24, 0x4E, 0x1A, 0x06, 0xCE, 0x4E, 0xF5,-    0x78, 0xDD, 0x0F, 0x63, 0xAF, 0xF0, 0x93, 0x67,-    0x06, 0x73, 0x51, 0x19, 0xCA, 0x9C, 0x8D, 0x22,-    0xD8, 0x6C, 0x80, 0x14, 0x14, 0xAB, 0x97, 0x41-  },-  {-    0xDE, 0xCF, 0x73, 0x29, 0xDB, 0xCC, 0x82, 0x7B,-    0x8F, 0xC5, 0x24, 0xC9, 0x43, 0x1E, 0x89, 0x98,-    0x02, 0x9E, 0xCE, 0x12, 0xCE, 0x93, 0xB7, 0xB2,-    0xF3, 0xE7, 0x69, 0xA9, 0x41, 0xFB, 0x8C, 0xEA-  },-  {-    0x2F, 0xAF, 0xCC, 0x0F, 0x2E, 0x63, 0xCB, 0xD0,-    0x77, 0x55, 0xBE, 0x7B, 0x75, 0xEC, 0xEA, 0x0A,-    0xDF, 0xF9, 0xAA, 0x5E, 0xDE, 0x2A, 0x52, 0xFD,-    0xAB, 0x4D, 0xFD, 0x03, 0x74, 0xCD, 0x48, 0x3F-  },-  {-    0xAA, 0x85, 0x01, 0x0D, 0xD4, 0x6A, 0x54, 0x6B,-    0x53, 0x5E, 0xF4, 0xCF, 0x5F, 0x07, 0xD6, 0x51,-    0x61, 0xE8, 0x98, 0x28, 0xF3, 0xA7, 0x7D, 0xB7,-    0xB9, 0xB5, 0x6F, 0x0D, 0xF5, 0x9A, 0xAE, 0x45-  },-  {-    0x07, 0xE8, 0xE1, 0xEE, 0x73, 0x2C, 0xB0, 0xD3,-    0x56, 0xC9, 0xC0, 0xD1, 0x06, 0x9C, 0x89, 0xD1,-    0x7A, 0xDF, 0x6A, 0x9A, 0x33, 0x4F, 0x74, 0x5E,-    0xC7, 0x86, 0x73, 0x32, 0x54, 0x8C, 0xA8, 0xE9-  },-  {-    0x0E, 0x01, 0xE8, 0x1C, 0xAD, 0xA8, 0x16, 0x2B,-    0xFD, 0x5F, 0x8A, 0x8C, 0x81, 0x8A, 0x6C, 0x69,-    0xFE, 0xDF, 0x02, 0xCE, 0xB5, 0x20, 0x85, 0x23,-    0xCB, 0xE5, 0x31, 0x3B, 0x89, 0xCA, 0x10, 0x53-  },-  {-    0x6B, 0xB6, 0xC6, 0x47, 0x26, 0x55, 0x08, 0x43,-    0x99, 0x85, 0x2E, 0x00, 0x24, 0x9F, 0x8C, 0xB2,-    0x47, 0x89, 0x6D, 0x39, 0x2B, 0x02, 0xD7, 0x3B,-    0x7F, 0x0D, 0xD8, 0x18, 0xE1, 0xE2, 0x9B, 0x07-  },-  {-    0x42, 0xD4, 0x63, 0x6E, 0x20, 0x60, 0xF0, 0x8F,-    0x41, 0xC8, 0x82, 0xE7, 0x6B, 0x39, 0x6B, 0x11,-    0x2E, 0xF6, 0x27, 0xCC, 0x24, 0xC4, 0x3D, 0xD5,-    0xF8, 0x3A, 0x1D, 0x1A, 0x7E, 0xAD, 0x71, 0x1A-  },-  {-    0x48, 0x58, 0xC9, 0xA1, 0x88, 0xB0, 0x23, 0x4F,-    0xB9, 0xA8, 0xD4, 0x7D, 0x0B, 0x41, 0x33, 0x65,-    0x0A, 0x03, 0x0B, 0xD0, 0x61, 0x1B, 0x87, 0xC3,-    0x89, 0x2E, 0x94, 0x95, 0x1F, 0x8D, 0xF8, 0x52-  },-  {-    0x3F, 0xAB, 0x3E, 0x36, 0x98, 0x8D, 0x44, 0x5A,-    0x51, 0xC8, 0x78, 0x3E, 0x53, 0x1B, 0xE3, 0xA0,-    0x2B, 0xE4, 0x0C, 0xD0, 0x47, 0x96, 0xCF, 0xB6,-    0x1D, 0x40, 0x34, 0x74, 0x42, 0xD3, 0xF7, 0x94-  },-  {-    0xEB, 0xAB, 0xC4, 0x96, 0x36, 0xBD, 0x43, 0x3D,-    0x2E, 0xC8, 0xF0, 0xE5, 0x18, 0x73, 0x2E, 0xF8,-    0xFA, 0x21, 0xD4, 0xD0, 0x71, 0xCC, 0x3B, 0xC4,-    0x6C, 0xD7, 0x9F, 0xA3, 0x8A, 0x28, 0xB8, 0x10-  },-  {-    0xA1, 0xD0, 0x34, 0x35, 0x23, 0xB8, 0x93, 0xFC,-    0xA8, 0x4F, 0x47, 0xFE, 0xB4, 0xA6, 0x4D, 0x35,-    0x0A, 0x17, 0xD8, 0xEE, 0xF5, 0x49, 0x7E, 0xCE,-    0x69, 0x7D, 0x02, 0xD7, 0x91, 0x78, 0xB5, 0x91-  },-  {-    0x26, 0x2E, 0xBF, 0xD9, 0x13, 0x0B, 0x7D, 0x28,-    0x76, 0x0D, 0x08, 0xEF, 0x8B, 0xFD, 0x3B, 0x86,-    0xCD, 0xD3, 0xB2, 0x11, 0x3D, 0x2C, 0xAE, 0xF7,-    0xEA, 0x95, 0x1A, 0x30, 0x3D, 0xFA, 0x38, 0x46-  },-  {-    0xF7, 0x61, 0x58, 0xED, 0xD5, 0x0A, 0x15, 0x4F,-    0xA7, 0x82, 0x03, 0xED, 0x23, 0x62, 0x93, 0x2F,-    0xCB, 0x82, 0x53, 0xAA, 0xE3, 0x78, 0x90, 0x3E,-    0xDE, 0xD1, 0xE0, 0x3F, 0x70, 0x21, 0xA2, 0x57-  },-  {-    0x26, 0x17, 0x8E, 0x95, 0x0A, 0xC7, 0x22, 0xF6,-    0x7A, 0xE5, 0x6E, 0x57, 0x1B, 0x28, 0x4C, 0x02,-    0x07, 0x68, 0x4A, 0x63, 0x34, 0xA1, 0x77, 0x48,-    0xA9, 0x4D, 0x26, 0x0B, 0xC5, 0xF5, 0x52, 0x74-  },-  {-    0xC3, 0x78, 0xD1, 0xE4, 0x93, 0xB4, 0x0E, 0xF1,-    0x1F, 0xE6, 0xA1, 0x5D, 0x9C, 0x27, 0x37, 0xA3,-    0x78, 0x09, 0x63, 0x4C, 0x5A, 0xBA, 0xD5, 0xB3,-    0x3D, 0x7E, 0x39, 0x3B, 0x4A, 0xE0, 0x5D, 0x03-  },-  {-    0x98, 0x4B, 0xD8, 0x37, 0x91, 0x01, 0xBE, 0x8F,-    0xD8, 0x06, 0x12, 0xD8, 0xEA, 0x29, 0x59, 0xA7,-    0x86, 0x5E, 0xC9, 0x71, 0x85, 0x23, 0x55, 0x01,-    0x07, 0xAE, 0x39, 0x38, 0xDF, 0x32, 0x01, 0x1B-  },-  {-    0xC6, 0xF2, 0x5A, 0x81, 0x2A, 0x14, 0x48, 0x58,-    0xAC, 0x5C, 0xED, 0x37, 0xA9, 0x3A, 0x9F, 0x47,-    0x59, 0xBA, 0x0B, 0x1C, 0x0F, 0xDC, 0x43, 0x1D,-    0xCE, 0x35, 0xF9, 0xEC, 0x1F, 0x1F, 0x4A, 0x99-  },-  {-    0x92, 0x4C, 0x75, 0xC9, 0x44, 0x24, 0xFF, 0x75,-    0xE7, 0x4B, 0x8B, 0x4E, 0x94, 0x35, 0x89, 0x58,-    0xB0, 0x27, 0xB1, 0x71, 0xDF, 0x5E, 0x57, 0x89,-    0x9A, 0xD0, 0xD4, 0xDA, 0xC3, 0x73, 0x53, 0xB6-  },-  {-    0x0A, 0xF3, 0x58, 0x92, 0xA6, 0x3F, 0x45, 0x93,-    0x1F, 0x68, 0x46, 0xED, 0x19, 0x03, 0x61, 0xCD,-    0x07, 0x30, 0x89, 0xE0, 0x77, 0x16, 0x57, 0x14,-    0xB5, 0x0B, 0x81, 0xA2, 0xE3, 0xDD, 0x9B, 0xA1-  },-  {-    0xCC, 0x80, 0xCE, 0xFB, 0x26, 0xC3, 0xB2, 0xB0,-    0xDA, 0xEF, 0x23, 0x3E, 0x60, 0x6D, 0x5F, 0xFC,-    0x80, 0xFA, 0x17, 0x42, 0x7D, 0x18, 0xE3, 0x04,-    0x89, 0x67, 0x3E, 0x06, 0xEF, 0x4B, 0x87, 0xF7-  },-  {-    0xC2, 0xF8, 0xC8, 0x11, 0x74, 0x47, 0xF3, 0x97,-    0x8B, 0x08, 0x18, 0xDC, 0xF6, 0xF7, 0x01, 0x16,-    0xAC, 0x56, 0xFD, 0x18, 0x4D, 0xD1, 0x27, 0x84,-    0x94, 0xE1, 0x03, 0xFC, 0x6D, 0x74, 0xA8, 0x87-  },-  {-    0xBD, 0xEC, 0xF6, 0xBF, 0xC1, 0xBA, 0x0D, 0xF6,-    0xE8, 0x62, 0xC8, 0x31, 0x99, 0x22, 0x07, 0x79,-    0x6A, 0xCC, 0x79, 0x79, 0x68, 0x35, 0x88, 0x28,-    0xC0, 0x6E, 0x7A, 0x51, 0xE0, 0x90, 0x09, 0x8F-  },-  {-    0x24, 0xD1, 0xA2, 0x6E, 0x3D, 0xAB, 0x02, 0xFE,-    0x45, 0x72, 0xD2, 0xAA, 0x7D, 0xBD, 0x3E, 0xC3,-    0x0F, 0x06, 0x93, 0xDB, 0x26, 0xF2, 0x73, 0xD0,-    0xAB, 0x2C, 0xB0, 0xC1, 0x3B, 0x5E, 0x64, 0x51-  },-  {-    0xEC, 0x56, 0xF5, 0x8B, 0x09, 0x29, 0x9A, 0x30,-    0x0B, 0x14, 0x05, 0x65, 0xD7, 0xD3, 0xE6, 0x87,-    0x82, 0xB6, 0xE2, 0xFB, 0xEB, 0x4B, 0x7E, 0xA9,-    0x7A, 0xC0, 0x57, 0x98, 0x90, 0x61, 0xDD, 0x3F-  },-  {-    0x11, 0xA4, 0x37, 0xC1, 0xAB, 0xA3, 0xC1, 0x19,-    0xDD, 0xFA, 0xB3, 0x1B, 0x3E, 0x8C, 0x84, 0x1D,-    0xEE, 0xEB, 0x91, 0x3E, 0xF5, 0x7F, 0x7E, 0x48,-    0xF2, 0xC9, 0xCF, 0x5A, 0x28, 0xFA, 0x42, 0xBC-  },-  {-    0x53, 0xC7, 0xE6, 0x11, 0x4B, 0x85, 0x0A, 0x2C,-    0xB4, 0x96, 0xC9, 0xB3, 0xC6, 0x9A, 0x62, 0x3E,-    0xAE, 0xA2, 0xCB, 0x1D, 0x33, 0xDD, 0x81, 0x7E,-    0x47, 0x65, 0xED, 0xAA, 0x68, 0x23, 0xC2, 0x28-  },-  {-    0x15, 0x4C, 0x3E, 0x96, 0xFE, 0xE5, 0xDB, 0x14,-    0xF8, 0x77, 0x3E, 0x18, 0xAF, 0x14, 0x85, 0x79,-    0x13, 0x50, 0x9D, 0xA9, 0x99, 0xB4, 0x6C, 0xDD,-    0x3D, 0x4C, 0x16, 0x97, 0x60, 0xC8, 0x3A, 0xD2-  },-  {-    0x40, 0xB9, 0x91, 0x6F, 0x09, 0x3E, 0x02, 0x7A,-    0x87, 0x86, 0x64, 0x18, 0x18, 0x92, 0x06, 0x20,-    0x47, 0x2F, 0xBC, 0xF6, 0x8F, 0x70, 0x1D, 0x1B,-    0x68, 0x06, 0x32, 0xE6, 0x99, 0x6B, 0xDE, 0xD3-  },-  {-    0x24, 0xC4, 0xCB, 0xBA, 0x07, 0x11, 0x98, 0x31,-    0xA7, 0x26, 0xB0, 0x53, 0x05, 0xD9, 0x6D, 0xA0,-    0x2F, 0xF8, 0xB1, 0x48, 0xF0, 0xDA, 0x44, 0x0F,-    0xE2, 0x33, 0xBC, 0xAA, 0x32, 0xC7, 0x2F, 0x6F-  },-  {-    0x5D, 0x20, 0x15, 0x10, 0x25, 0x00, 0x20, 0xB7,-    0x83, 0x68, 0x96, 0x88, 0xAB, 0xBF, 0x8E, 0xCF,-    0x25, 0x94, 0xA9, 0x6A, 0x08, 0xF2, 0xBF, 0xEC,-    0x6C, 0xE0, 0x57, 0x44, 0x65, 0xDD, 0xED, 0x71-  },-  {-    0x04, 0x3B, 0x97, 0xE3, 0x36, 0xEE, 0x6F, 0xDB,-    0xBE, 0x2B, 0x50, 0xF2, 0x2A, 0xF8, 0x32, 0x75,-    0xA4, 0x08, 0x48, 0x05, 0xD2, 0xD5, 0x64, 0x59,-    0x62, 0x45, 0x4B, 0x6C, 0x9B, 0x80, 0x53, 0xA0-  },-  {-    0x56, 0x48, 0x35, 0xCB, 0xAE, 0xA7, 0x74, 0x94,-    0x85, 0x68, 0xBE, 0x36, 0xCF, 0x52, 0xFC, 0xDD,-    0x83, 0x93, 0x4E, 0xB0, 0xA2, 0x75, 0x12, 0xDB,-    0xE3, 0xE2, 0xDB, 0x47, 0xB9, 0xE6, 0x63, 0x5A-  },-  {-    0xF2, 0x1C, 0x33, 0xF4, 0x7B, 0xDE, 0x40, 0xA2,-    0xA1, 0x01, 0xC9, 0xCD, 0xE8, 0x02, 0x7A, 0xAF,-    0x61, 0xA3, 0x13, 0x7D, 0xE2, 0x42, 0x2B, 0x30,-    0x03, 0x5A, 0x04, 0xC2, 0x70, 0x89, 0x41, 0x83-  },-  {-    0x9D, 0xB0, 0xEF, 0x74, 0xE6, 0x6C, 0xBB, 0x84,-    0x2E, 0xB0, 0xE0, 0x73, 0x43, 0xA0, 0x3C, 0x5C,-    0x56, 0x7E, 0x37, 0x2B, 0x3F, 0x23, 0xB9, 0x43,-    0xC7, 0x88, 0xA4, 0xF2, 0x50, 0xF6, 0x78, 0x91-  },-  {-    0xAB, 0x8D, 0x08, 0x65, 0x5F, 0xF1, 0xD3, 0xFE,-    0x87, 0x58, 0xD5, 0x62, 0x23, 0x5F, 0xD2, 0x3E,-    0x7C, 0xF9, 0xDC, 0xAA, 0xD6, 0x58, 0x87, 0x2A,-    0x49, 0xE5, 0xD3, 0x18, 0x3B, 0x6C, 0xCE, 0xBD-  },-  {-    0x6F, 0x27, 0xF7, 0x7E, 0x7B, 0xCF, 0x46, 0xA1,-    0xE9, 0x63, 0xAD, 0xE0, 0x30, 0x97, 0x33, 0x54,-    0x30, 0x31, 0xDC, 0xCD, 0xD4, 0x7C, 0xAA, 0xC1,-    0x74, 0xD7, 0xD2, 0x7C, 0xE8, 0x07, 0x7E, 0x8B-  },-  {-    0xE3, 0xCD, 0x54, 0xDA, 0x7E, 0x44, 0x4C, 0xAA,-    0x62, 0x07, 0x56, 0x95, 0x25, 0xA6, 0x70, 0xEB,-    0xAE, 0x12, 0x78, 0xDE, 0x4E, 0x3F, 0xE2, 0x68,-    0x4B, 0x3E, 0x33, 0xF5, 0xEF, 0x90, 0xCC, 0x1B-  },-  {-    0xB2, 0xC3, 0xE3, 0x3A, 0x51, 0xD2, 0x2C, 0x4C,-    0x08, 0xFC, 0x09, 0x89, 0xC8, 0x73, 0xC9, 0xCC,-    0x41, 0x50, 0x57, 0x9B, 0x1E, 0x61, 0x63, 0xFA,-    0x69, 0x4A, 0xD5, 0x1D, 0x53, 0xD7, 0x12, 0xDC-  },-  {-    0xBE, 0x7F, 0xDA, 0x98, 0x3E, 0x13, 0x18, 0x9B,-    0x4C, 0x77, 0xE0, 0xA8, 0x09, 0x20, 0xB6, 0xE0,-    0xE0, 0xEA, 0x80, 0xC3, 0xB8, 0x4D, 0xBE, 0x7E,-    0x71, 0x17, 0xD2, 0x53, 0xF4, 0x81, 0x12, 0xF4-  },-  {-    0xB6, 0x00, 0x8C, 0x28, 0xFA, 0xE0, 0x8A, 0xA4,-    0x27, 0xE5, 0xBD, 0x3A, 0xAD, 0x36, 0xF1, 0x00,-    0x21, 0xF1, 0x6C, 0x77, 0xCF, 0xEA, 0xBE, 0xD0,-    0x7F, 0x97, 0xCC, 0x7D, 0xC1, 0xF1, 0x28, 0x4A-  },-  {-    0x6E, 0x4E, 0x67, 0x60, 0xC5, 0x38, 0xF2, 0xE9,-    0x7B, 0x3A, 0xDB, 0xFB, 0xBC, 0xDE, 0x57, 0xF8,-    0x96, 0x6B, 0x7E, 0xA8, 0xFC, 0xB5, 0xBF, 0x7E,-    0xFE, 0xC9, 0x13, 0xFD, 0x2A, 0x2B, 0x0C, 0x55-  },-  {-    0x4A, 0xE5, 0x1F, 0xD1, 0x83, 0x4A, 0xA5, 0xBD,-    0x9A, 0x6F, 0x7E, 0xC3, 0x9F, 0xC6, 0x63, 0x33,-    0x8D, 0xC5, 0xD2, 0xE2, 0x07, 0x61, 0x56, 0x6D,-    0x90, 0xCC, 0x68, 0xB1, 0xCB, 0x87, 0x5E, 0xD8-  },-  {-    0xB6, 0x73, 0xAA, 0xD7, 0x5A, 0xB1, 0xFD, 0xB5,-    0x40, 0x1A, 0xBF, 0xA1, 0xBF, 0x89, 0xF3, 0xAD,-    0xD2, 0xEB, 0xC4, 0x68, 0xDF, 0x36, 0x24, 0xA4,-    0x78, 0xF4, 0xFE, 0x85, 0x9D, 0x8D, 0x55, 0xE2-  },-  {-    0x13, 0xC9, 0x47, 0x1A, 0x98, 0x55, 0x91, 0x35,-    0x39, 0x83, 0x66, 0x60, 0x39, 0x8D, 0xA0, 0xF3,-    0xF9, 0x9A, 0xDA, 0x08, 0x47, 0x9C, 0x69, 0xD1,-    0xB7, 0xFC, 0xAA, 0x34, 0x61, 0xDD, 0x7E, 0x59-  },-  {-    0x2C, 0x11, 0xF4, 0xA7, 0xF9, 0x9A, 0x1D, 0x23,-    0xA5, 0x8B, 0xB6, 0x36, 0x35, 0x0F, 0xE8, 0x49,-    0xF2, 0x9C, 0xBA, 0xC1, 0xB2, 0xA1, 0x11, 0x2D,-    0x9F, 0x1E, 0xD5, 0xBC, 0x5B, 0x31, 0x3C, 0xCD-  },-  {-    0xC7, 0xD3, 0xC0, 0x70, 0x6B, 0x11, 0xAE, 0x74,-    0x1C, 0x05, 0xA1, 0xEF, 0x15, 0x0D, 0xD6, 0x5B,-    0x54, 0x94, 0xD6, 0xD5, 0x4C, 0x9A, 0x86, 0xE2,-    0x61, 0x78, 0x54, 0xE6, 0xAE, 0xEE, 0xBB, 0xD9-  },-  {-    0x19, 0x4E, 0x10, 0xC9, 0x38, 0x93, 0xAF, 0xA0,-    0x64, 0xC3, 0xAC, 0x04, 0xC0, 0xDD, 0x80, 0x8D,-    0x79, 0x1C, 0x3D, 0x4B, 0x75, 0x56, 0xE8, 0x9D,-    0x8D, 0x9C, 0xB2, 0x25, 0xC4, 0xB3, 0x33, 0x39-  },-  {-    0x6F, 0xC4, 0x98, 0x8B, 0x8F, 0x78, 0x54, 0x6B,-    0x16, 0x88, 0x99, 0x18, 0x45, 0x90, 0x8F, 0x13,-    0x4B, 0x6A, 0x48, 0x2E, 0x69, 0x94, 0xB3, 0xD4,-    0x83, 0x17, 0xBF, 0x08, 0xDB, 0x29, 0x21, 0x85-  },-  {-    0x56, 0x65, 0xBE, 0xB8, 0xB0, 0x95, 0x55, 0x25,-    0x81, 0x3B, 0x59, 0x81, 0xCD, 0x14, 0x2E, 0xD4,-    0xD0, 0x3F, 0xBA, 0x38, 0xA6, 0xF3, 0xE5, 0xAD,-    0x26, 0x8E, 0x0C, 0xC2, 0x70, 0xD1, 0xCD, 0x11-  },-  {-    0xB8, 0x83, 0xD6, 0x8F, 0x5F, 0xE5, 0x19, 0x36,-    0x43, 0x1B, 0xA4, 0x25, 0x67, 0x38, 0x05, 0x3B,-    0x1D, 0x04, 0x26, 0xD4, 0xCB, 0x64, 0xB1, 0x6E,-    0x83, 0xBA, 0xDC, 0x5E, 0x9F, 0xBE, 0x3B, 0x81-  },-  {-    0x53, 0xE7, 0xB2, 0x7E, 0xA5, 0x9C, 0x2F, 0x6D,-    0xBB, 0x50, 0x76, 0x9E, 0x43, 0x55, 0x4D, 0xF3,-    0x5A, 0xF8, 0x9F, 0x48, 0x22, 0xD0, 0x46, 0x6B,-    0x00, 0x7D, 0xD6, 0xF6, 0xDE, 0xAF, 0xFF, 0x02-  },-  {-    0x1F, 0x1A, 0x02, 0x29, 0xD4, 0x64, 0x0F, 0x01,-    0x90, 0x15, 0x88, 0xD9, 0xDE, 0xC2, 0x2D, 0x13,-    0xFC, 0x3E, 0xB3, 0x4A, 0x61, 0xB3, 0x29, 0x38,-    0xEF, 0xBF, 0x53, 0x34, 0xB2, 0x80, 0x0A, 0xFA-  },-  {-    0xC2, 0xB4, 0x05, 0xAF, 0xA0, 0xFA, 0x66, 0x68,-    0x85, 0x2A, 0xEE, 0x4D, 0x88, 0x04, 0x08, 0x53,-    0xFA, 0xB8, 0x00, 0xE7, 0x2B, 0x57, 0x58, 0x14,-    0x18, 0xE5, 0x50, 0x6F, 0x21, 0x4C, 0x7D, 0x1F-  },-  {-    0xC0, 0x8A, 0xA1, 0xC2, 0x86, 0xD7, 0x09, 0xFD,-    0xC7, 0x47, 0x37, 0x44, 0x97, 0x71, 0x88, 0xC8,-    0x95, 0xBA, 0x01, 0x10, 0x14, 0x24, 0x7E, 0x4E,-    0xFA, 0x8D, 0x07, 0xE7, 0x8F, 0xEC, 0x69, 0x5C-  },-  {-    0xF0, 0x3F, 0x57, 0x89, 0xD3, 0x33, 0x6B, 0x80,-    0xD0, 0x02, 0xD5, 0x9F, 0xDF, 0x91, 0x8B, 0xDB,-    0x77, 0x5B, 0x00, 0x95, 0x6E, 0xD5, 0x52, 0x8E,-    0x86, 0xAA, 0x99, 0x4A, 0xCB, 0x38, 0xFE, 0x2D-  },-};-----static const uint8_t blake2s_keyed_kat[KAT_LENGTH][BLAKE2S_OUTBYTES] =-{-  {-    0x48, 0xA8, 0x99, 0x7D, 0xA4, 0x07, 0x87, 0x6B,-    0x3D, 0x79, 0xC0, 0xD9, 0x23, 0x25, 0xAD, 0x3B,-    0x89, 0xCB, 0xB7, 0x54, 0xD8, 0x6A, 0xB7, 0x1A,-    0xEE, 0x04, 0x7A, 0xD3, 0x45, 0xFD, 0x2C, 0x49-  },-  {-    0x40, 0xD1, 0x5F, 0xEE, 0x7C, 0x32, 0x88, 0x30,-    0x16, 0x6A, 0xC3, 0xF9, 0x18, 0x65, 0x0F, 0x80,-    0x7E, 0x7E, 0x01, 0xE1, 0x77, 0x25, 0x8C, 0xDC,-    0x0A, 0x39, 0xB1, 0x1F, 0x59, 0x80, 0x66, 0xF1-  },-  {-    0x6B, 0xB7, 0x13, 0x00, 0x64, 0x4C, 0xD3, 0x99,-    0x1B, 0x26, 0xCC, 0xD4, 0xD2, 0x74, 0xAC, 0xD1,-    0xAD, 0xEA, 0xB8, 0xB1, 0xD7, 0x91, 0x45, 0x46,-    0xC1, 0x19, 0x8B, 0xBE, 0x9F, 0xC9, 0xD8, 0x03-  },-  {-    0x1D, 0x22, 0x0D, 0xBE, 0x2E, 0xE1, 0x34, 0x66,-    0x1F, 0xDF, 0x6D, 0x9E, 0x74, 0xB4, 0x17, 0x04,-    0x71, 0x05, 0x56, 0xF2, 0xF6, 0xE5, 0xA0, 0x91,-    0xB2, 0x27, 0x69, 0x74, 0x45, 0xDB, 0xEA, 0x6B-  },-  {-    0xF6, 0xC3, 0xFB, 0xAD, 0xB4, 0xCC, 0x68, 0x7A,-    0x00, 0x64, 0xA5, 0xBE, 0x6E, 0x79, 0x1B, 0xEC,-    0x63, 0xB8, 0x68, 0xAD, 0x62, 0xFB, 0xA6, 0x1B,-    0x37, 0x57, 0xEF, 0x9C, 0xA5, 0x2E, 0x05, 0xB2-  },-  {-    0x49, 0xC1, 0xF2, 0x11, 0x88, 0xDF, 0xD7, 0x69,-    0xAE, 0xA0, 0xE9, 0x11, 0xDD, 0x6B, 0x41, 0xF1,-    0x4D, 0xAB, 0x10, 0x9D, 0x2B, 0x85, 0x97, 0x7A,-    0xA3, 0x08, 0x8B, 0x5C, 0x70, 0x7E, 0x85, 0x98-  },-  {-    0xFD, 0xD8, 0x99, 0x3D, 0xCD, 0x43, 0xF6, 0x96,-    0xD4, 0x4F, 0x3C, 0xEA, 0x0F, 0xF3, 0x53, 0x45,-    0x23, 0x4E, 0xC8, 0xEE, 0x08, 0x3E, 0xB3, 0xCA,-    0xDA, 0x01, 0x7C, 0x7F, 0x78, 0xC1, 0x71, 0x43-  },-  {-    0xE6, 0xC8, 0x12, 0x56, 0x37, 0x43, 0x8D, 0x09,-    0x05, 0xB7, 0x49, 0xF4, 0x65, 0x60, 0xAC, 0x89,-    0xFD, 0x47, 0x1C, 0xF8, 0x69, 0x2E, 0x28, 0xFA,-    0xB9, 0x82, 0xF7, 0x3F, 0x01, 0x9B, 0x83, 0xA9-  },-  {-    0x19, 0xFC, 0x8C, 0xA6, 0x97, 0x9D, 0x60, 0xE6,-    0xED, 0xD3, 0xB4, 0x54, 0x1E, 0x2F, 0x96, 0x7C,-    0xED, 0x74, 0x0D, 0xF6, 0xEC, 0x1E, 0xAE, 0xBB,-    0xFE, 0x81, 0x38, 0x32, 0xE9, 0x6B, 0x29, 0x74-  },-  {-    0xA6, 0xAD, 0x77, 0x7C, 0xE8, 0x81, 0xB5, 0x2B,-    0xB5, 0xA4, 0x42, 0x1A, 0xB6, 0xCD, 0xD2, 0xDF,-    0xBA, 0x13, 0xE9, 0x63, 0x65, 0x2D, 0x4D, 0x6D,-    0x12, 0x2A, 0xEE, 0x46, 0x54, 0x8C, 0x14, 0xA7-  },-  {-    0xF5, 0xC4, 0xB2, 0xBA, 0x1A, 0x00, 0x78, 0x1B,-    0x13, 0xAB, 0xA0, 0x42, 0x52, 0x42, 0xC6, 0x9C,-    0xB1, 0x55, 0x2F, 0x3F, 0x71, 0xA9, 0xA3, 0xBB,-    0x22, 0xB4, 0xA6, 0xB4, 0x27, 0x7B, 0x46, 0xDD-  },-  {-    0xE3, 0x3C, 0x4C, 0x9B, 0xD0, 0xCC, 0x7E, 0x45,-    0xC8, 0x0E, 0x65, 0xC7, 0x7F, 0xA5, 0x99, 0x7F,-    0xEC, 0x70, 0x02, 0x73, 0x85, 0x41, 0x50, 0x9E,-    0x68, 0xA9, 0x42, 0x38, 0x91, 0xE8, 0x22, 0xA3-  },-  {-    0xFB, 0xA1, 0x61, 0x69, 0xB2, 0xC3, 0xEE, 0x10,-    0x5B, 0xE6, 0xE1, 0xE6, 0x50, 0xE5, 0xCB, 0xF4,-    0x07, 0x46, 0xB6, 0x75, 0x3D, 0x03, 0x6A, 0xB5,-    0x51, 0x79, 0x01, 0x4A, 0xD7, 0xEF, 0x66, 0x51-  },-  {-    0xF5, 0xC4, 0xBE, 0xC6, 0xD6, 0x2F, 0xC6, 0x08,-    0xBF, 0x41, 0xCC, 0x11, 0x5F, 0x16, 0xD6, 0x1C,-    0x7E, 0xFD, 0x3F, 0xF6, 0xC6, 0x56, 0x92, 0xBB,-    0xE0, 0xAF, 0xFF, 0xB1, 0xFE, 0xDE, 0x74, 0x75-  },-  {-    0xA4, 0x86, 0x2E, 0x76, 0xDB, 0x84, 0x7F, 0x05,-    0xBA, 0x17, 0xED, 0xE5, 0xDA, 0x4E, 0x7F, 0x91,-    0xB5, 0x92, 0x5C, 0xF1, 0xAD, 0x4B, 0xA1, 0x27,-    0x32, 0xC3, 0x99, 0x57, 0x42, 0xA5, 0xCD, 0x6E-  },-  {-    0x65, 0xF4, 0xB8, 0x60, 0xCD, 0x15, 0xB3, 0x8E,-    0xF8, 0x14, 0xA1, 0xA8, 0x04, 0x31, 0x4A, 0x55,-    0xBE, 0x95, 0x3C, 0xAA, 0x65, 0xFD, 0x75, 0x8A,-    0xD9, 0x89, 0xFF, 0x34, 0xA4, 0x1C, 0x1E, 0xEA-  },-  {-    0x19, 0xBA, 0x23, 0x4F, 0x0A, 0x4F, 0x38, 0x63,-    0x7D, 0x18, 0x39, 0xF9, 0xD9, 0xF7, 0x6A, 0xD9,-    0x1C, 0x85, 0x22, 0x30, 0x71, 0x43, 0xC9, 0x7D,-    0x5F, 0x93, 0xF6, 0x92, 0x74, 0xCE, 0xC9, 0xA7-  },-  {-    0x1A, 0x67, 0x18, 0x6C, 0xA4, 0xA5, 0xCB, 0x8E,-    0x65, 0xFC, 0xA0, 0xE2, 0xEC, 0xBC, 0x5D, 0xDC,-    0x14, 0xAE, 0x38, 0x1B, 0xB8, 0xBF, 0xFE, 0xB9,-    0xE0, 0xA1, 0x03, 0x44, 0x9E, 0x3E, 0xF0, 0x3C-  },-  {-    0xAF, 0xBE, 0xA3, 0x17, 0xB5, 0xA2, 0xE8, 0x9C,-    0x0B, 0xD9, 0x0C, 0xCF, 0x5D, 0x7F, 0xD0, 0xED,-    0x57, 0xFE, 0x58, 0x5E, 0x4B, 0xE3, 0x27, 0x1B,-    0x0A, 0x6B, 0xF0, 0xF5, 0x78, 0x6B, 0x0F, 0x26-  },-  {-    0xF1, 0xB0, 0x15, 0x58, 0xCE, 0x54, 0x12, 0x62,-    0xF5, 0xEC, 0x34, 0x29, 0x9D, 0x6F, 0xB4, 0x09,-    0x00, 0x09, 0xE3, 0x43, 0x4B, 0xE2, 0xF4, 0x91,-    0x05, 0xCF, 0x46, 0xAF, 0x4D, 0x2D, 0x41, 0x24-  },-  {-    0x13, 0xA0, 0xA0, 0xC8, 0x63, 0x35, 0x63, 0x5E,-    0xAA, 0x74, 0xCA, 0x2D, 0x5D, 0x48, 0x8C, 0x79,-    0x7B, 0xBB, 0x4F, 0x47, 0xDC, 0x07, 0x10, 0x50,-    0x15, 0xED, 0x6A, 0x1F, 0x33, 0x09, 0xEF, 0xCE-  },-  {-    0x15, 0x80, 0xAF, 0xEE, 0xBE, 0xBB, 0x34, 0x6F,-    0x94, 0xD5, 0x9F, 0xE6, 0x2D, 0xA0, 0xB7, 0x92,-    0x37, 0xEA, 0xD7, 0xB1, 0x49, 0x1F, 0x56, 0x67,-    0xA9, 0x0E, 0x45, 0xED, 0xF6, 0xCA, 0x8B, 0x03-  },-  {-    0x20, 0xBE, 0x1A, 0x87, 0x5B, 0x38, 0xC5, 0x73,-    0xDD, 0x7F, 0xAA, 0xA0, 0xDE, 0x48, 0x9D, 0x65,-    0x5C, 0x11, 0xEF, 0xB6, 0xA5, 0x52, 0x69, 0x8E,-    0x07, 0xA2, 0xD3, 0x31, 0xB5, 0xF6, 0x55, 0xC3-  },-  {-    0xBE, 0x1F, 0xE3, 0xC4, 0xC0, 0x40, 0x18, 0xC5,-    0x4C, 0x4A, 0x0F, 0x6B, 0x9A, 0x2E, 0xD3, 0xC5,-    0x3A, 0xBE, 0x3A, 0x9F, 0x76, 0xB4, 0xD2, 0x6D,-    0xE5, 0x6F, 0xC9, 0xAE, 0x95, 0x05, 0x9A, 0x99-  },-  {-    0xE3, 0xE3, 0xAC, 0xE5, 0x37, 0xEB, 0x3E, 0xDD,-    0x84, 0x63, 0xD9, 0xAD, 0x35, 0x82, 0xE1, 0x3C,-    0xF8, 0x65, 0x33, 0xFF, 0xDE, 0x43, 0xD6, 0x68,-    0xDD, 0x2E, 0x93, 0xBB, 0xDB, 0xD7, 0x19, 0x5A-  },-  {-    0x11, 0x0C, 0x50, 0xC0, 0xBF, 0x2C, 0x6E, 0x7A,-    0xEB, 0x7E, 0x43, 0x5D, 0x92, 0xD1, 0x32, 0xAB,-    0x66, 0x55, 0x16, 0x8E, 0x78, 0xA2, 0xDE, 0xCD,-    0xEC, 0x33, 0x30, 0x77, 0x76, 0x84, 0xD9, 0xC1-  },-  {-    0xE9, 0xBA, 0x8F, 0x50, 0x5C, 0x9C, 0x80, 0xC0,-    0x86, 0x66, 0xA7, 0x01, 0xF3, 0x36, 0x7E, 0x6C,-    0xC6, 0x65, 0xF3, 0x4B, 0x22, 0xE7, 0x3C, 0x3C,-    0x04, 0x17, 0xEB, 0x1C, 0x22, 0x06, 0x08, 0x2F-  },-  {-    0x26, 0xCD, 0x66, 0xFC, 0xA0, 0x23, 0x79, 0xC7,-    0x6D, 0xF1, 0x23, 0x17, 0x05, 0x2B, 0xCA, 0xFD,-    0x6C, 0xD8, 0xC3, 0xA7, 0xB8, 0x90, 0xD8, 0x05,-    0xF3, 0x6C, 0x49, 0x98, 0x97, 0x82, 0x43, 0x3A-  },-  {-    0x21, 0x3F, 0x35, 0x96, 0xD6, 0xE3, 0xA5, 0xD0,-    0xE9, 0x93, 0x2C, 0xD2, 0x15, 0x91, 0x46, 0x01,-    0x5E, 0x2A, 0xBC, 0x94, 0x9F, 0x47, 0x29, 0xEE,-    0x26, 0x32, 0xFE, 0x1E, 0xDB, 0x78, 0xD3, 0x37-  },-  {-    0x10, 0x15, 0xD7, 0x01, 0x08, 0xE0, 0x3B, 0xE1,-    0xC7, 0x02, 0xFE, 0x97, 0x25, 0x36, 0x07, 0xD1,-    0x4A, 0xEE, 0x59, 0x1F, 0x24, 0x13, 0xEA, 0x67,-    0x87, 0x42, 0x7B, 0x64, 0x59, 0xFF, 0x21, 0x9A-  },-  {-    0x3C, 0xA9, 0x89, 0xDE, 0x10, 0xCF, 0xE6, 0x09,-    0x90, 0x94, 0x72, 0xC8, 0xD3, 0x56, 0x10, 0x80,-    0x5B, 0x2F, 0x97, 0x77, 0x34, 0xCF, 0x65, 0x2C,-    0xC6, 0x4B, 0x3B, 0xFC, 0x88, 0x2D, 0x5D, 0x89-  },-  {-    0xB6, 0x15, 0x6F, 0x72, 0xD3, 0x80, 0xEE, 0x9E,-    0xA6, 0xAC, 0xD1, 0x90, 0x46, 0x4F, 0x23, 0x07,-    0xA5, 0xC1, 0x79, 0xEF, 0x01, 0xFD, 0x71, 0xF9,-    0x9F, 0x2D, 0x0F, 0x7A, 0x57, 0x36, 0x0A, 0xEA-  },-  {-    0xC0, 0x3B, 0xC6, 0x42, 0xB2, 0x09, 0x59, 0xCB,-    0xE1, 0x33, 0xA0, 0x30, 0x3E, 0x0C, 0x1A, 0xBF,-    0xF3, 0xE3, 0x1E, 0xC8, 0xE1, 0xA3, 0x28, 0xEC,-    0x85, 0x65, 0xC3, 0x6D, 0xEC, 0xFF, 0x52, 0x65-  },-  {-    0x2C, 0x3E, 0x08, 0x17, 0x6F, 0x76, 0x0C, 0x62,-    0x64, 0xC3, 0xA2, 0xCD, 0x66, 0xFE, 0xC6, 0xC3,-    0xD7, 0x8D, 0xE4, 0x3F, 0xC1, 0x92, 0x45, 0x7B,-    0x2A, 0x4A, 0x66, 0x0A, 0x1E, 0x0E, 0xB2, 0x2B-  },-  {-    0xF7, 0x38, 0xC0, 0x2F, 0x3C, 0x1B, 0x19, 0x0C,-    0x51, 0x2B, 0x1A, 0x32, 0xDE, 0xAB, 0xF3, 0x53,-    0x72, 0x8E, 0x0E, 0x9A, 0xB0, 0x34, 0x49, 0x0E,-    0x3C, 0x34, 0x09, 0x94, 0x6A, 0x97, 0xAE, 0xEC-  },-  {-    0x8B, 0x18, 0x80, 0xDF, 0x30, 0x1C, 0xC9, 0x63,-    0x41, 0x88, 0x11, 0x08, 0x89, 0x64, 0x83, 0x92,-    0x87, 0xFF, 0x7F, 0xE3, 0x1C, 0x49, 0xEA, 0x6E,-    0xBD, 0x9E, 0x48, 0xBD, 0xEE, 0xE4, 0x97, 0xC5-  },-  {-    0x1E, 0x75, 0xCB, 0x21, 0xC6, 0x09, 0x89, 0x02,-    0x03, 0x75, 0xF1, 0xA7, 0xA2, 0x42, 0x83, 0x9F,-    0x0B, 0x0B, 0x68, 0x97, 0x3A, 0x4C, 0x2A, 0x05,-    0xCF, 0x75, 0x55, 0xED, 0x5A, 0xAE, 0xC4, 0xC1-  },-  {-    0x62, 0xBF, 0x8A, 0x9C, 0x32, 0xA5, 0xBC, 0xCF,-    0x29, 0x0B, 0x6C, 0x47, 0x4D, 0x75, 0xB2, 0xA2,-    0xA4, 0x09, 0x3F, 0x1A, 0x9E, 0x27, 0x13, 0x94,-    0x33, 0xA8, 0xF2, 0xB3, 0xBC, 0xE7, 0xB8, 0xD7-  },-  {-    0x16, 0x6C, 0x83, 0x50, 0xD3, 0x17, 0x3B, 0x5E,-    0x70, 0x2B, 0x78, 0x3D, 0xFD, 0x33, 0xC6, 0x6E,-    0xE0, 0x43, 0x27, 0x42, 0xE9, 0xB9, 0x2B, 0x99,-    0x7F, 0xD2, 0x3C, 0x60, 0xDC, 0x67, 0x56, 0xCA-  },-  {-    0x04, 0x4A, 0x14, 0xD8, 0x22, 0xA9, 0x0C, 0xAC,-    0xF2, 0xF5, 0xA1, 0x01, 0x42, 0x8A, 0xDC, 0x8F,-    0x41, 0x09, 0x38, 0x6C, 0xCB, 0x15, 0x8B, 0xF9,-    0x05, 0xC8, 0x61, 0x8B, 0x8E, 0xE2, 0x4E, 0xC3-  },-  {-    0x38, 0x7D, 0x39, 0x7E, 0xA4, 0x3A, 0x99, 0x4B,-    0xE8, 0x4D, 0x2D, 0x54, 0x4A, 0xFB, 0xE4, 0x81,-    0xA2, 0x00, 0x0F, 0x55, 0x25, 0x26, 0x96, 0xBB,-    0xA2, 0xC5, 0x0C, 0x8E, 0xBD, 0x10, 0x13, 0x47-  },-  {-    0x56, 0xF8, 0xCC, 0xF1, 0xF8, 0x64, 0x09, 0xB4,-    0x6C, 0xE3, 0x61, 0x66, 0xAE, 0x91, 0x65, 0x13,-    0x84, 0x41, 0x57, 0x75, 0x89, 0xDB, 0x08, 0xCB,-    0xC5, 0xF6, 0x6C, 0xA2, 0x97, 0x43, 0xB9, 0xFD-  },-  {-    0x97, 0x06, 0xC0, 0x92, 0xB0, 0x4D, 0x91, 0xF5,-    0x3D, 0xFF, 0x91, 0xFA, 0x37, 0xB7, 0x49, 0x3D,-    0x28, 0xB5, 0x76, 0xB5, 0xD7, 0x10, 0x46, 0x9D,-    0xF7, 0x94, 0x01, 0x66, 0x22, 0x36, 0xFC, 0x03-  },-  {-    0x87, 0x79, 0x68, 0x68, 0x6C, 0x06, 0x8C, 0xE2,-    0xF7, 0xE2, 0xAD, 0xCF, 0xF6, 0x8B, 0xF8, 0x74,-    0x8E, 0xDF, 0x3C, 0xF8, 0x62, 0xCF, 0xB4, 0xD3,-    0x94, 0x7A, 0x31, 0x06, 0x95, 0x80, 0x54, 0xE3-  },-  {-    0x88, 0x17, 0xE5, 0x71, 0x98, 0x79, 0xAC, 0xF7,-    0x02, 0x47, 0x87, 0xEC, 0xCD, 0xB2, 0x71, 0x03,-    0x55, 0x66, 0xCF, 0xA3, 0x33, 0xE0, 0x49, 0x40,-    0x7C, 0x01, 0x78, 0xCC, 0xC5, 0x7A, 0x5B, 0x9F-  },-  {-    0x89, 0x38, 0x24, 0x9E, 0x4B, 0x50, 0xCA, 0xDA,-    0xCC, 0xDF, 0x5B, 0x18, 0x62, 0x13, 0x26, 0xCB,-    0xB1, 0x52, 0x53, 0xE3, 0x3A, 0x20, 0xF5, 0x63,-    0x6E, 0x99, 0x5D, 0x72, 0x47, 0x8D, 0xE4, 0x72-  },-  {-    0xF1, 0x64, 0xAB, 0xBA, 0x49, 0x63, 0xA4, 0x4D,-    0x10, 0x72, 0x57, 0xE3, 0x23, 0x2D, 0x90, 0xAC,-    0xA5, 0xE6, 0x6A, 0x14, 0x08, 0x24, 0x8C, 0x51,-    0x74, 0x1E, 0x99, 0x1D, 0xB5, 0x22, 0x77, 0x56-  },-  {-    0xD0, 0x55, 0x63, 0xE2, 0xB1, 0xCB, 0xA0, 0xC4,-    0xA2, 0xA1, 0xE8, 0xBD, 0xE3, 0xA1, 0xA0, 0xD9,-    0xF5, 0xB4, 0x0C, 0x85, 0xA0, 0x70, 0xD6, 0xF5,-    0xFB, 0x21, 0x06, 0x6E, 0xAD, 0x5D, 0x06, 0x01-  },-  {-    0x03, 0xFB, 0xB1, 0x63, 0x84, 0xF0, 0xA3, 0x86,-    0x6F, 0x4C, 0x31, 0x17, 0x87, 0x76, 0x66, 0xEF,-    0xBF, 0x12, 0x45, 0x97, 0x56, 0x4B, 0x29, 0x3D,-    0x4A, 0xAB, 0x0D, 0x26, 0x9F, 0xAB, 0xDD, 0xFA-  },-  {-    0x5F, 0xA8, 0x48, 0x6A, 0xC0, 0xE5, 0x29, 0x64,-    0xD1, 0x88, 0x1B, 0xBE, 0x33, 0x8E, 0xB5, 0x4B,-    0xE2, 0xF7, 0x19, 0x54, 0x92, 0x24, 0x89, 0x20,-    0x57, 0xB4, 0xDA, 0x04, 0xBA, 0x8B, 0x34, 0x75-  },-  {-    0xCD, 0xFA, 0xBC, 0xEE, 0x46, 0x91, 0x11, 0x11,-    0x23, 0x6A, 0x31, 0x70, 0x8B, 0x25, 0x39, 0xD7,-    0x1F, 0xC2, 0x11, 0xD9, 0xB0, 0x9C, 0x0D, 0x85,-    0x30, 0xA1, 0x1E, 0x1D, 0xBF, 0x6E, 0xED, 0x01-  },-  {-    0x4F, 0x82, 0xDE, 0x03, 0xB9, 0x50, 0x47, 0x93,-    0xB8, 0x2A, 0x07, 0xA0, 0xBD, 0xCD, 0xFF, 0x31,-    0x4D, 0x75, 0x9E, 0x7B, 0x62, 0xD2, 0x6B, 0x78,-    0x49, 0x46, 0xB0, 0xD3, 0x6F, 0x91, 0x6F, 0x52-  },-  {-    0x25, 0x9E, 0xC7, 0xF1, 0x73, 0xBC, 0xC7, 0x6A,-    0x09, 0x94, 0xC9, 0x67, 0xB4, 0xF5, 0xF0, 0x24,-    0xC5, 0x60, 0x57, 0xFB, 0x79, 0xC9, 0x65, 0xC4,-    0xFA, 0xE4, 0x18, 0x75, 0xF0, 0x6A, 0x0E, 0x4C-  },-  {-    0x19, 0x3C, 0xC8, 0xE7, 0xC3, 0xE0, 0x8B, 0xB3,-    0x0F, 0x54, 0x37, 0xAA, 0x27, 0xAD, 0xE1, 0xF1,-    0x42, 0x36, 0x9B, 0x24, 0x6A, 0x67, 0x5B, 0x23,-    0x83, 0xE6, 0xDA, 0x9B, 0x49, 0xA9, 0x80, 0x9E-  },-  {-    0x5C, 0x10, 0x89, 0x6F, 0x0E, 0x28, 0x56, 0xB2,-    0xA2, 0xEE, 0xE0, 0xFE, 0x4A, 0x2C, 0x16, 0x33,-    0x56, 0x5D, 0x18, 0xF0, 0xE9, 0x3E, 0x1F, 0xAB,-    0x26, 0xC3, 0x73, 0xE8, 0xF8, 0x29, 0x65, 0x4D-  },-  {-    0xF1, 0x60, 0x12, 0xD9, 0x3F, 0x28, 0x85, 0x1A,-    0x1E, 0xB9, 0x89, 0xF5, 0xD0, 0xB4, 0x3F, 0x3F,-    0x39, 0xCA, 0x73, 0xC9, 0xA6, 0x2D, 0x51, 0x81,-    0xBF, 0xF2, 0x37, 0x53, 0x6B, 0xD3, 0x48, 0xC3-  },-  {-    0x29, 0x66, 0xB3, 0xCF, 0xAE, 0x1E, 0x44, 0xEA,-    0x99, 0x6D, 0xC5, 0xD6, 0x86, 0xCF, 0x25, 0xFA,-    0x05, 0x3F, 0xB6, 0xF6, 0x72, 0x01, 0xB9, 0xE4,-    0x6E, 0xAD, 0xE8, 0x5D, 0x0A, 0xD6, 0xB8, 0x06-  },-  {-    0xDD, 0xB8, 0x78, 0x24, 0x85, 0xE9, 0x00, 0xBC,-    0x60, 0xBC, 0xF4, 0xC3, 0x3A, 0x6F, 0xD5, 0x85,-    0x68, 0x0C, 0xC6, 0x83, 0xD5, 0x16, 0xEF, 0xA0,-    0x3E, 0xB9, 0x98, 0x5F, 0xAD, 0x87, 0x15, 0xFB-  },-  {-    0x4C, 0x4D, 0x6E, 0x71, 0xAE, 0xA0, 0x57, 0x86,-    0x41, 0x31, 0x48, 0xFC, 0x7A, 0x78, 0x6B, 0x0E,-    0xCA, 0xF5, 0x82, 0xCF, 0xF1, 0x20, 0x9F, 0x5A,-    0x80, 0x9F, 0xBA, 0x85, 0x04, 0xCE, 0x66, 0x2C-  },-  {-    0xFB, 0x4C, 0x5E, 0x86, 0xD7, 0xB2, 0x22, 0x9B,-    0x99, 0xB8, 0xBA, 0x6D, 0x94, 0xC2, 0x47, 0xEF,-    0x96, 0x4A, 0xA3, 0xA2, 0xBA, 0xE8, 0xED, 0xC7,-    0x75, 0x69, 0xF2, 0x8D, 0xBB, 0xFF, 0x2D, 0x4E-  },-  {-    0xE9, 0x4F, 0x52, 0x6D, 0xE9, 0x01, 0x96, 0x33,-    0xEC, 0xD5, 0x4A, 0xC6, 0x12, 0x0F, 0x23, 0x95,-    0x8D, 0x77, 0x18, 0xF1, 0xE7, 0x71, 0x7B, 0xF3,-    0x29, 0x21, 0x1A, 0x4F, 0xAE, 0xED, 0x4E, 0x6D-  },-  {-    0xCB, 0xD6, 0x66, 0x0A, 0x10, 0xDB, 0x3F, 0x23,-    0xF7, 0xA0, 0x3D, 0x4B, 0x9D, 0x40, 0x44, 0xC7,-    0x93, 0x2B, 0x28, 0x01, 0xAC, 0x89, 0xD6, 0x0B,-    0xC9, 0xEB, 0x92, 0xD6, 0x5A, 0x46, 0xC2, 0xA0-  },-  {-    0x88, 0x18, 0xBB, 0xD3, 0xDB, 0x4D, 0xC1, 0x23,-    0xB2, 0x5C, 0xBB, 0xA5, 0xF5, 0x4C, 0x2B, 0xC4,-    0xB3, 0xFC, 0xF9, 0xBF, 0x7D, 0x7A, 0x77, 0x09,-    0xF4, 0xAE, 0x58, 0x8B, 0x26, 0x7C, 0x4E, 0xCE-  },-  {-    0xC6, 0x53, 0x82, 0x51, 0x3F, 0x07, 0x46, 0x0D,-    0xA3, 0x98, 0x33, 0xCB, 0x66, 0x6C, 0x5E, 0xD8,-    0x2E, 0x61, 0xB9, 0xE9, 0x98, 0xF4, 0xB0, 0xC4,-    0x28, 0x7C, 0xEE, 0x56, 0xC3, 0xCC, 0x9B, 0xCD-  },-  {-    0x89, 0x75, 0xB0, 0x57, 0x7F, 0xD3, 0x55, 0x66,-    0xD7, 0x50, 0xB3, 0x62, 0xB0, 0x89, 0x7A, 0x26,-    0xC3, 0x99, 0x13, 0x6D, 0xF0, 0x7B, 0xAB, 0xAB,-    0xBD, 0xE6, 0x20, 0x3F, 0xF2, 0x95, 0x4E, 0xD4-  },-  {-    0x21, 0xFE, 0x0C, 0xEB, 0x00, 0x52, 0xBE, 0x7F,-    0xB0, 0xF0, 0x04, 0x18, 0x7C, 0xAC, 0xD7, 0xDE,-    0x67, 0xFA, 0x6E, 0xB0, 0x93, 0x8D, 0x92, 0x76,-    0x77, 0xF2, 0x39, 0x8C, 0x13, 0x23, 0x17, 0xA8-  },-  {-    0x2E, 0xF7, 0x3F, 0x3C, 0x26, 0xF1, 0x2D, 0x93,-    0x88, 0x9F, 0x3C, 0x78, 0xB6, 0xA6, 0x6C, 0x1D,-    0x52, 0xB6, 0x49, 0xDC, 0x9E, 0x85, 0x6E, 0x2C,-    0x17, 0x2E, 0xA7, 0xC5, 0x8A, 0xC2, 0xB5, 0xE3-  },-  {-    0x38, 0x8A, 0x3C, 0xD5, 0x6D, 0x73, 0x86, 0x7A,-    0xBB, 0x5F, 0x84, 0x01, 0x49, 0x2B, 0x6E, 0x26,-    0x81, 0xEB, 0x69, 0x85, 0x1E, 0x76, 0x7F, 0xD8,-    0x42, 0x10, 0xA5, 0x60, 0x76, 0xFB, 0x3D, 0xD3-  },-  {-    0xAF, 0x53, 0x3E, 0x02, 0x2F, 0xC9, 0x43, 0x9E,-    0x4E, 0x3C, 0xB8, 0x38, 0xEC, 0xD1, 0x86, 0x92,-    0x23, 0x2A, 0xDF, 0x6F, 0xE9, 0x83, 0x95, 0x26,-    0xD3, 0xC3, 0xDD, 0x1B, 0x71, 0x91, 0x0B, 0x1A-  },-  {-    0x75, 0x1C, 0x09, 0xD4, 0x1A, 0x93, 0x43, 0x88,-    0x2A, 0x81, 0xCD, 0x13, 0xEE, 0x40, 0x81, 0x8D,-    0x12, 0xEB, 0x44, 0xC6, 0xC7, 0xF4, 0x0D, 0xF1,-    0x6E, 0x4A, 0xEA, 0x8F, 0xAB, 0x91, 0x97, 0x2A-  },-  {-    0x5B, 0x73, 0xDD, 0xB6, 0x8D, 0x9D, 0x2B, 0x0A,-    0xA2, 0x65, 0xA0, 0x79, 0x88, 0xD6, 0xB8, 0x8A,-    0xE9, 0xAA, 0xC5, 0x82, 0xAF, 0x83, 0x03, 0x2F,-    0x8A, 0x9B, 0x21, 0xA2, 0xE1, 0xB7, 0xBF, 0x18-  },-  {-    0x3D, 0xA2, 0x91, 0x26, 0xC7, 0xC5, 0xD7, 0xF4,-    0x3E, 0x64, 0x24, 0x2A, 0x79, 0xFE, 0xAA, 0x4E,-    0xF3, 0x45, 0x9C, 0xDE, 0xCC, 0xC8, 0x98, 0xED,-    0x59, 0xA9, 0x7F, 0x6E, 0xC9, 0x3B, 0x9D, 0xAB-  },-  {-    0x56, 0x6D, 0xC9, 0x20, 0x29, 0x3D, 0xA5, 0xCB,-    0x4F, 0xE0, 0xAA, 0x8A, 0xBD, 0xA8, 0xBB, 0xF5,-    0x6F, 0x55, 0x23, 0x13, 0xBF, 0xF1, 0x90, 0x46,-    0x64, 0x1E, 0x36, 0x15, 0xC1, 0xE3, 0xED, 0x3F-  },-  {-    0x41, 0x15, 0xBE, 0xA0, 0x2F, 0x73, 0xF9, 0x7F,-    0x62, 0x9E, 0x5C, 0x55, 0x90, 0x72, 0x0C, 0x01,-    0xE7, 0xE4, 0x49, 0xAE, 0x2A, 0x66, 0x97, 0xD4,-    0xD2, 0x78, 0x33, 0x21, 0x30, 0x36, 0x92, 0xF9-  },-  {-    0x4C, 0xE0, 0x8F, 0x47, 0x62, 0x46, 0x8A, 0x76,-    0x70, 0x01, 0x21, 0x64, 0x87, 0x8D, 0x68, 0x34,-    0x0C, 0x52, 0xA3, 0x5E, 0x66, 0xC1, 0x88, 0x4D,-    0x5C, 0x86, 0x48, 0x89, 0xAB, 0xC9, 0x66, 0x77-  },-  {-    0x81, 0xEA, 0x0B, 0x78, 0x04, 0x12, 0x4E, 0x0C,-    0x22, 0xEA, 0x5F, 0xC7, 0x11, 0x04, 0xA2, 0xAF,-    0xCB, 0x52, 0xA1, 0xFA, 0x81, 0x6F, 0x3E, 0xCB,-    0x7D, 0xCB, 0x5D, 0x9D, 0xEA, 0x17, 0x86, 0xD0-  },-  {-    0xFE, 0x36, 0x27, 0x33, 0xB0, 0x5F, 0x6B, 0xED,-    0xAF, 0x93, 0x79, 0xD7, 0xF7, 0x93, 0x6E, 0xDE,-    0x20, 0x9B, 0x1F, 0x83, 0x23, 0xC3, 0x92, 0x25,-    0x49, 0xD9, 0xE7, 0x36, 0x81, 0xB5, 0xDB, 0x7B-  },-  {-    0xEF, 0xF3, 0x7D, 0x30, 0xDF, 0xD2, 0x03, 0x59,-    0xBE, 0x4E, 0x73, 0xFD, 0xF4, 0x0D, 0x27, 0x73,-    0x4B, 0x3D, 0xF9, 0x0A, 0x97, 0xA5, 0x5E, 0xD7,-    0x45, 0x29, 0x72, 0x94, 0xCA, 0x85, 0xD0, 0x9F-  },-  {-    0x17, 0x2F, 0xFC, 0x67, 0x15, 0x3D, 0x12, 0xE0,-    0xCA, 0x76, 0xA8, 0xB6, 0xCD, 0x5D, 0x47, 0x31,-    0x88, 0x5B, 0x39, 0xCE, 0x0C, 0xAC, 0x93, 0xA8,-    0x97, 0x2A, 0x18, 0x00, 0x6C, 0x8B, 0x8B, 0xAF-  },-  {-    0xC4, 0x79, 0x57, 0xF1, 0xCC, 0x88, 0xE8, 0x3E,-    0xF9, 0x44, 0x58, 0x39, 0x70, 0x9A, 0x48, 0x0A,-    0x03, 0x6B, 0xED, 0x5F, 0x88, 0xAC, 0x0F, 0xCC,-    0x8E, 0x1E, 0x70, 0x3F, 0xFA, 0xAC, 0x13, 0x2C-  },-  {-    0x30, 0xF3, 0x54, 0x83, 0x70, 0xCF, 0xDC, 0xED,-    0xA5, 0xC3, 0x7B, 0x56, 0x9B, 0x61, 0x75, 0xE7,-    0x99, 0xEE, 0xF1, 0xA6, 0x2A, 0xAA, 0x94, 0x32,-    0x45, 0xAE, 0x76, 0x69, 0xC2, 0x27, 0xA7, 0xB5-  },-  {-    0xC9, 0x5D, 0xCB, 0x3C, 0xF1, 0xF2, 0x7D, 0x0E,-    0xEF, 0x2F, 0x25, 0xD2, 0x41, 0x38, 0x70, 0x90,-    0x4A, 0x87, 0x7C, 0x4A, 0x56, 0xC2, 0xDE, 0x1E,-    0x83, 0xE2, 0xBC, 0x2A, 0xE2, 0xE4, 0x68, 0x21-  },-  {-    0xD5, 0xD0, 0xB5, 0xD7, 0x05, 0x43, 0x4C, 0xD4,-    0x6B, 0x18, 0x57, 0x49, 0xF6, 0x6B, 0xFB, 0x58,-    0x36, 0xDC, 0xDF, 0x6E, 0xE5, 0x49, 0xA2, 0xB7,-    0xA4, 0xAE, 0xE7, 0xF5, 0x80, 0x07, 0xCA, 0xAF-  },-  {-    0xBB, 0xC1, 0x24, 0xA7, 0x12, 0xF1, 0x5D, 0x07,-    0xC3, 0x00, 0xE0, 0x5B, 0x66, 0x83, 0x89, 0xA4,-    0x39, 0xC9, 0x17, 0x77, 0xF7, 0x21, 0xF8, 0x32,-    0x0C, 0x1C, 0x90, 0x78, 0x06, 0x6D, 0x2C, 0x7E-  },-  {-    0xA4, 0x51, 0xB4, 0x8C, 0x35, 0xA6, 0xC7, 0x85,-    0x4C, 0xFA, 0xAE, 0x60, 0x26, 0x2E, 0x76, 0x99,-    0x08, 0x16, 0x38, 0x2A, 0xC0, 0x66, 0x7E, 0x5A,-    0x5C, 0x9E, 0x1B, 0x46, 0xC4, 0x34, 0x2D, 0xDF-  },-  {-    0xB0, 0xD1, 0x50, 0xFB, 0x55, 0xE7, 0x78, 0xD0,-    0x11, 0x47, 0xF0, 0xB5, 0xD8, 0x9D, 0x99, 0xEC,-    0xB2, 0x0F, 0xF0, 0x7E, 0x5E, 0x67, 0x60, 0xD6,-    0xB6, 0x45, 0xEB, 0x5B, 0x65, 0x4C, 0x62, 0x2B-  },-  {-    0x34, 0xF7, 0x37, 0xC0, 0xAB, 0x21, 0x99, 0x51,-    0xEE, 0xE8, 0x9A, 0x9F, 0x8D, 0xAC, 0x29, 0x9C,-    0x9D, 0x4C, 0x38, 0xF3, 0x3F, 0xA4, 0x94, 0xC5,-    0xC6, 0xEE, 0xFC, 0x92, 0xB6, 0xDB, 0x08, 0xBC-  },-  {-    0x1A, 0x62, 0xCC, 0x3A, 0x00, 0x80, 0x0D, 0xCB,-    0xD9, 0x98, 0x91, 0x08, 0x0C, 0x1E, 0x09, 0x84,-    0x58, 0x19, 0x3A, 0x8C, 0xC9, 0xF9, 0x70, 0xEA,-    0x99, 0xFB, 0xEF, 0xF0, 0x03, 0x18, 0xC2, 0x89-  },-  {-    0xCF, 0xCE, 0x55, 0xEB, 0xAF, 0xC8, 0x40, 0xD7,-    0xAE, 0x48, 0x28, 0x1C, 0x7F, 0xD5, 0x7E, 0xC8,-    0xB4, 0x82, 0xD4, 0xB7, 0x04, 0x43, 0x74, 0x95,-    0x49, 0x5A, 0xC4, 0x14, 0xCF, 0x4A, 0x37, 0x4B-  },-  {-    0x67, 0x46, 0xFA, 0xCF, 0x71, 0x14, 0x6D, 0x99,-    0x9D, 0xAB, 0xD0, 0x5D, 0x09, 0x3A, 0xE5, 0x86,-    0x64, 0x8D, 0x1E, 0xE2, 0x8E, 0x72, 0x61, 0x7B,-    0x99, 0xD0, 0xF0, 0x08, 0x6E, 0x1E, 0x45, 0xBF-  },-  {-    0x57, 0x1C, 0xED, 0x28, 0x3B, 0x3F, 0x23, 0xB4,-    0xE7, 0x50, 0xBF, 0x12, 0xA2, 0xCA, 0xF1, 0x78,-    0x18, 0x47, 0xBD, 0x89, 0x0E, 0x43, 0x60, 0x3C,-    0xDC, 0x59, 0x76, 0x10, 0x2B, 0x7B, 0xB1, 0x1B-  },-  {-    0xCF, 0xCB, 0x76, 0x5B, 0x04, 0x8E, 0x35, 0x02,-    0x2C, 0x5D, 0x08, 0x9D, 0x26, 0xE8, 0x5A, 0x36,-    0xB0, 0x05, 0xA2, 0xB8, 0x04, 0x93, 0xD0, 0x3A,-    0x14, 0x4E, 0x09, 0xF4, 0x09, 0xB6, 0xAF, 0xD1-  },-  {-    0x40, 0x50, 0xC7, 0xA2, 0x77, 0x05, 0xBB, 0x27,-    0xF4, 0x20, 0x89, 0xB2, 0x99, 0xF3, 0xCB, 0xE5,-    0x05, 0x4E, 0xAD, 0x68, 0x72, 0x7E, 0x8E, 0xF9,-    0x31, 0x8C, 0xE6, 0xF2, 0x5C, 0xD6, 0xF3, 0x1D-  },-  {-    0x18, 0x40, 0x70, 0xBD, 0x5D, 0x26, 0x5F, 0xBD,-    0xC1, 0x42, 0xCD, 0x1C, 0x5C, 0xD0, 0xD7, 0xE4,-    0x14, 0xE7, 0x03, 0x69, 0xA2, 0x66, 0xD6, 0x27,-    0xC8, 0xFB, 0xA8, 0x4F, 0xA5, 0xE8, 0x4C, 0x34-  },-  {-    0x9E, 0xDD, 0xA9, 0xA4, 0x44, 0x39, 0x02, 0xA9,-    0x58, 0x8C, 0x0D, 0x0C, 0xCC, 0x62, 0xB9, 0x30,-    0x21, 0x84, 0x79, 0xA6, 0x84, 0x1E, 0x6F, 0xE7,-    0xD4, 0x30, 0x03, 0xF0, 0x4B, 0x1F, 0xD6, 0x43-  },-  {-    0xE4, 0x12, 0xFE, 0xEF, 0x79, 0x08, 0x32, 0x4A,-    0x6D, 0xA1, 0x84, 0x16, 0x29, 0xF3, 0x5D, 0x3D,-    0x35, 0x86, 0x42, 0x01, 0x93, 0x10, 0xEC, 0x57,-    0xC6, 0x14, 0x83, 0x6B, 0x63, 0xD3, 0x07, 0x63-  },-  {-    0x1A, 0x2B, 0x8E, 0xDF, 0xF3, 0xF9, 0xAC, 0xC1,-    0x55, 0x4F, 0xCB, 0xAE, 0x3C, 0xF1, 0xD6, 0x29,-    0x8C, 0x64, 0x62, 0xE2, 0x2E, 0x5E, 0xB0, 0x25,-    0x96, 0x84, 0xF8, 0x35, 0x01, 0x2B, 0xD1, 0x3F-  },-  {-    0x28, 0x8C, 0x4A, 0xD9, 0xB9, 0x40, 0x97, 0x62,-    0xEA, 0x07, 0xC2, 0x4A, 0x41, 0xF0, 0x4F, 0x69,-    0xA7, 0xD7, 0x4B, 0xEE, 0x2D, 0x95, 0x43, 0x53,-    0x74, 0xBD, 0xE9, 0x46, 0xD7, 0x24, 0x1C, 0x7B-  },-  {-    0x80, 0x56, 0x91, 0xBB, 0x28, 0x67, 0x48, 0xCF,-    0xB5, 0x91, 0xD3, 0xAE, 0xBE, 0x7E, 0x6F, 0x4E,-    0x4D, 0xC6, 0xE2, 0x80, 0x8C, 0x65, 0x14, 0x3C,-    0xC0, 0x04, 0xE4, 0xEB, 0x6F, 0xD0, 0x9D, 0x43-  },-  {-    0xD4, 0xAC, 0x8D, 0x3A, 0x0A, 0xFC, 0x6C, 0xFA,-    0x7B, 0x46, 0x0A, 0xE3, 0x00, 0x1B, 0xAE, 0xB3,-    0x6D, 0xAD, 0xB3, 0x7D, 0xA0, 0x7D, 0x2E, 0x8A,-    0xC9, 0x18, 0x22, 0xDF, 0x34, 0x8A, 0xED, 0x3D-  },-  {-    0xC3, 0x76, 0x61, 0x70, 0x14, 0xD2, 0x01, 0x58,-    0xBC, 0xED, 0x3D, 0x3B, 0xA5, 0x52, 0xB6, 0xEC,-    0xCF, 0x84, 0xE6, 0x2A, 0xA3, 0xEB, 0x65, 0x0E,-    0x90, 0x02, 0x9C, 0x84, 0xD1, 0x3E, 0xEA, 0x69-  },-  {-    0xC4, 0x1F, 0x09, 0xF4, 0x3C, 0xEC, 0xAE, 0x72,-    0x93, 0xD6, 0x00, 0x7C, 0xA0, 0xA3, 0x57, 0x08,-    0x7D, 0x5A, 0xE5, 0x9B, 0xE5, 0x00, 0xC1, 0xCD,-    0x5B, 0x28, 0x9E, 0xE8, 0x10, 0xC7, 0xB0, 0x82-  },-  {-    0x03, 0xD1, 0xCE, 0xD1, 0xFB, 0xA5, 0xC3, 0x91,-    0x55, 0xC4, 0x4B, 0x77, 0x65, 0xCB, 0x76, 0x0C,-    0x78, 0x70, 0x8D, 0xCF, 0xC8, 0x0B, 0x0B, 0xD8,-    0xAD, 0xE3, 0xA5, 0x6D, 0xA8, 0x83, 0x0B, 0x29-  },-  {-    0x09, 0xBD, 0xE6, 0xF1, 0x52, 0x21, 0x8D, 0xC9,-    0x2C, 0x41, 0xD7, 0xF4, 0x53, 0x87, 0xE6, 0x3E,-    0x58, 0x69, 0xD8, 0x07, 0xEC, 0x70, 0xB8, 0x21,-    0x40, 0x5D, 0xBD, 0x88, 0x4B, 0x7F, 0xCF, 0x4B-  },-  {-    0x71, 0xC9, 0x03, 0x6E, 0x18, 0x17, 0x9B, 0x90,-    0xB3, 0x7D, 0x39, 0xE9, 0xF0, 0x5E, 0xB8, 0x9C,-    0xC5, 0xFC, 0x34, 0x1F, 0xD7, 0xC4, 0x77, 0xD0,-    0xD7, 0x49, 0x32, 0x85, 0xFA, 0xCA, 0x08, 0xA4-  },-  {-    0x59, 0x16, 0x83, 0x3E, 0xBB, 0x05, 0xCD, 0x91,-    0x9C, 0xA7, 0xFE, 0x83, 0xB6, 0x92, 0xD3, 0x20,-    0x5B, 0xEF, 0x72, 0x39, 0x2B, 0x2C, 0xF6, 0xBB,-    0x0A, 0x6D, 0x43, 0xF9, 0x94, 0xF9, 0x5F, 0x11-  },-  {-    0xF6, 0x3A, 0xAB, 0x3E, 0xC6, 0x41, 0xB3, 0xB0,-    0x24, 0x96, 0x4C, 0x2B, 0x43, 0x7C, 0x04, 0xF6,-    0x04, 0x3C, 0x4C, 0x7E, 0x02, 0x79, 0x23, 0x99,-    0x95, 0x40, 0x19, 0x58, 0xF8, 0x6B, 0xBE, 0x54-  },-  {-    0xF1, 0x72, 0xB1, 0x80, 0xBF, 0xB0, 0x97, 0x40,-    0x49, 0x31, 0x20, 0xB6, 0x32, 0x6C, 0xBD, 0xC5,-    0x61, 0xE4, 0x77, 0xDE, 0xF9, 0xBB, 0xCF, 0xD2,-    0x8C, 0xC8, 0xC1, 0xC5, 0xE3, 0x37, 0x9A, 0x31-  },-  {-    0xCB, 0x9B, 0x89, 0xCC, 0x18, 0x38, 0x1D, 0xD9,-    0x14, 0x1A, 0xDE, 0x58, 0x86, 0x54, 0xD4, 0xE6,-    0xA2, 0x31, 0xD5, 0xBF, 0x49, 0xD4, 0xD5, 0x9A,-    0xC2, 0x7D, 0x86, 0x9C, 0xBE, 0x10, 0x0C, 0xF3-  },-  {-    0x7B, 0xD8, 0x81, 0x50, 0x46, 0xFD, 0xD8, 0x10,-    0xA9, 0x23, 0xE1, 0x98, 0x4A, 0xAE, 0xBD, 0xCD,-    0xF8, 0x4D, 0x87, 0xC8, 0x99, 0x2D, 0x68, 0xB5,-    0xEE, 0xB4, 0x60, 0xF9, 0x3E, 0xB3, 0xC8, 0xD7-  },-  {-    0x60, 0x7B, 0xE6, 0x68, 0x62, 0xFD, 0x08, 0xEE,-    0x5B, 0x19, 0xFA, 0xCA, 0xC0, 0x9D, 0xFD, 0xBC,-    0xD4, 0x0C, 0x31, 0x21, 0x01, 0xD6, 0x6E, 0x6E,-    0xBD, 0x2B, 0x84, 0x1F, 0x1B, 0x9A, 0x93, 0x25-  },-  {-    0x9F, 0xE0, 0x3B, 0xBE, 0x69, 0xAB, 0x18, 0x34,-    0xF5, 0x21, 0x9B, 0x0D, 0xA8, 0x8A, 0x08, 0xB3,-    0x0A, 0x66, 0xC5, 0x91, 0x3F, 0x01, 0x51, 0x96,-    0x3C, 0x36, 0x05, 0x60, 0xDB, 0x03, 0x87, 0xB3-  },-  {-    0x90, 0xA8, 0x35, 0x85, 0x71, 0x7B, 0x75, 0xF0,-    0xE9, 0xB7, 0x25, 0xE0, 0x55, 0xEE, 0xEE, 0xB9,-    0xE7, 0xA0, 0x28, 0xEA, 0x7E, 0x6C, 0xBC, 0x07,-    0xB2, 0x09, 0x17, 0xEC, 0x03, 0x63, 0xE3, 0x8C-  },-  {-    0x33, 0x6E, 0xA0, 0x53, 0x0F, 0x4A, 0x74, 0x69,-    0x12, 0x6E, 0x02, 0x18, 0x58, 0x7E, 0xBB, 0xDE,-    0x33, 0x58, 0xA0, 0xB3, 0x1C, 0x29, 0xD2, 0x00,-    0xF7, 0xDC, 0x7E, 0xB1, 0x5C, 0x6A, 0xAD, 0xD8-  },-  {-    0xA7, 0x9E, 0x76, 0xDC, 0x0A, 0xBC, 0xA4, 0x39,-    0x6F, 0x07, 0x47, 0xCD, 0x7B, 0x74, 0x8D, 0xF9,-    0x13, 0x00, 0x76, 0x26, 0xB1, 0xD6, 0x59, 0xDA,-    0x0C, 0x1F, 0x78, 0xB9, 0x30, 0x3D, 0x01, 0xA3-  },-  {-    0x44, 0xE7, 0x8A, 0x77, 0x37, 0x56, 0xE0, 0x95,-    0x15, 0x19, 0x50, 0x4D, 0x70, 0x38, 0xD2, 0x8D,-    0x02, 0x13, 0xA3, 0x7E, 0x0C, 0xE3, 0x75, 0x37,-    0x17, 0x57, 0xBC, 0x99, 0x63, 0x11, 0xE3, 0xB8-  },-  {-    0x77, 0xAC, 0x01, 0x2A, 0x3F, 0x75, 0x4D, 0xCF,-    0xEA, 0xB5, 0xEB, 0x99, 0x6B, 0xE9, 0xCD, 0x2D,-    0x1F, 0x96, 0x11, 0x1B, 0x6E, 0x49, 0xF3, 0x99,-    0x4D, 0xF1, 0x81, 0xF2, 0x85, 0x69, 0xD8, 0x25-  },-  {-    0xCE, 0x5A, 0x10, 0xDB, 0x6F, 0xCC, 0xDA, 0xF1,-    0x40, 0xAA, 0xA4, 0xDE, 0xD6, 0x25, 0x0A, 0x9C,-    0x06, 0xE9, 0x22, 0x2B, 0xC9, 0xF9, 0xF3, 0x65,-    0x8A, 0x4A, 0xFF, 0x93, 0x5F, 0x2B, 0x9F, 0x3A-  },-  {-    0xEC, 0xC2, 0x03, 0xA7, 0xFE, 0x2B, 0xE4, 0xAB,-    0xD5, 0x5B, 0xB5, 0x3E, 0x6E, 0x67, 0x35, 0x72,-    0xE0, 0x07, 0x8D, 0xA8, 0xCD, 0x37, 0x5E, 0xF4,-    0x30, 0xCC, 0x97, 0xF9, 0xF8, 0x00, 0x83, 0xAF-  },-  {-    0x14, 0xA5, 0x18, 0x6D, 0xE9, 0xD7, 0xA1, 0x8B,-    0x04, 0x12, 0xB8, 0x56, 0x3E, 0x51, 0xCC, 0x54,-    0x33, 0x84, 0x0B, 0x4A, 0x12, 0x9A, 0x8F, 0xF9,-    0x63, 0xB3, 0x3A, 0x3C, 0x4A, 0xFE, 0x8E, 0xBB-  },-  {-    0x13, 0xF8, 0xEF, 0x95, 0xCB, 0x86, 0xE6, 0xA6,-    0x38, 0x93, 0x1C, 0x8E, 0x10, 0x76, 0x73, 0xEB,-    0x76, 0xBA, 0x10, 0xD7, 0xC2, 0xCD, 0x70, 0xB9,-    0xD9, 0x92, 0x0B, 0xBE, 0xED, 0x92, 0x94, 0x09-  },-  {-    0x0B, 0x33, 0x8F, 0x4E, 0xE1, 0x2F, 0x2D, 0xFC,-    0xB7, 0x87, 0x13, 0x37, 0x79, 0x41, 0xE0, 0xB0,-    0x63, 0x21, 0x52, 0x58, 0x1D, 0x13, 0x32, 0x51,-    0x6E, 0x4A, 0x2C, 0xAB, 0x19, 0x42, 0xCC, 0xA4-  },-  {-    0xEA, 0xAB, 0x0E, 0xC3, 0x7B, 0x3B, 0x8A, 0xB7,-    0x96, 0xE9, 0xF5, 0x72, 0x38, 0xDE, 0x14, 0xA2,-    0x64, 0xA0, 0x76, 0xF3, 0x88, 0x7D, 0x86, 0xE2,-    0x9B, 0xB5, 0x90, 0x6D, 0xB5, 0xA0, 0x0E, 0x02-  },-  {-    0x23, 0xCB, 0x68, 0xB8, 0xC0, 0xE6, 0xDC, 0x26,-    0xDC, 0x27, 0x76, 0x6D, 0xDC, 0x0A, 0x13, 0xA9,-    0x94, 0x38, 0xFD, 0x55, 0x61, 0x7A, 0xA4, 0x09,-    0x5D, 0x8F, 0x96, 0x97, 0x20, 0xC8, 0x72, 0xDF-  },-  {-    0x09, 0x1D, 0x8E, 0xE3, 0x0D, 0x6F, 0x29, 0x68,-    0xD4, 0x6B, 0x68, 0x7D, 0xD6, 0x52, 0x92, 0x66,-    0x57, 0x42, 0xDE, 0x0B, 0xB8, 0x3D, 0xCC, 0x00,-    0x04, 0xC7, 0x2C, 0xE1, 0x00, 0x07, 0xA5, 0x49-  },-  {-    0x7F, 0x50, 0x7A, 0xBC, 0x6D, 0x19, 0xBA, 0x00,-    0xC0, 0x65, 0xA8, 0x76, 0xEC, 0x56, 0x57, 0x86,-    0x88, 0x82, 0xD1, 0x8A, 0x22, 0x1B, 0xC4, 0x6C,-    0x7A, 0x69, 0x12, 0x54, 0x1F, 0x5B, 0xC7, 0xBA-  },-  {-    0xA0, 0x60, 0x7C, 0x24, 0xE1, 0x4E, 0x8C, 0x22,-    0x3D, 0xB0, 0xD7, 0x0B, 0x4D, 0x30, 0xEE, 0x88,-    0x01, 0x4D, 0x60, 0x3F, 0x43, 0x7E, 0x9E, 0x02,-    0xAA, 0x7D, 0xAF, 0xA3, 0xCD, 0xFB, 0xAD, 0x94-  },-  {-    0xDD, 0xBF, 0xEA, 0x75, 0xCC, 0x46, 0x78, 0x82,-    0xEB, 0x34, 0x83, 0xCE, 0x5E, 0x2E, 0x75, 0x6A,-    0x4F, 0x47, 0x01, 0xB7, 0x6B, 0x44, 0x55, 0x19,-    0xE8, 0x9F, 0x22, 0xD6, 0x0F, 0xA8, 0x6E, 0x06-  },-  {-    0x0C, 0x31, 0x1F, 0x38, 0xC3, 0x5A, 0x4F, 0xB9,-    0x0D, 0x65, 0x1C, 0x28, 0x9D, 0x48, 0x68, 0x56,-    0xCD, 0x14, 0x13, 0xDF, 0x9B, 0x06, 0x77, 0xF5,-    0x3E, 0xCE, 0x2C, 0xD9, 0xE4, 0x77, 0xC6, 0x0A-  },-  {-    0x46, 0xA7, 0x3A, 0x8D, 0xD3, 0xE7, 0x0F, 0x59,-    0xD3, 0x94, 0x2C, 0x01, 0xDF, 0x59, 0x9D, 0xEF,-    0x78, 0x3C, 0x9D, 0xA8, 0x2F, 0xD8, 0x32, 0x22,-    0xCD, 0x66, 0x2B, 0x53, 0xDC, 0xE7, 0xDB, 0xDF-  },-  {-    0xAD, 0x03, 0x8F, 0xF9, 0xB1, 0x4D, 0xE8, 0x4A,-    0x80, 0x1E, 0x4E, 0x62, 0x1C, 0xE5, 0xDF, 0x02,-    0x9D, 0xD9, 0x35, 0x20, 0xD0, 0xC2, 0xFA, 0x38,-    0xBF, 0xF1, 0x76, 0xA8, 0xB1, 0xD1, 0x69, 0x8C-  },-  {-    0xAB, 0x70, 0xC5, 0xDF, 0xBD, 0x1E, 0xA8, 0x17,-    0xFE, 0xD0, 0xCD, 0x06, 0x72, 0x93, 0xAB, 0xF3,-    0x19, 0xE5, 0xD7, 0x90, 0x1C, 0x21, 0x41, 0xD5,-    0xD9, 0x9B, 0x23, 0xF0, 0x3A, 0x38, 0xE7, 0x48-  },-  {-    0x1F, 0xFF, 0xDA, 0x67, 0x93, 0x2B, 0x73, 0xC8,-    0xEC, 0xAF, 0x00, 0x9A, 0x34, 0x91, 0xA0, 0x26,-    0x95, 0x3B, 0xAB, 0xFE, 0x1F, 0x66, 0x3B, 0x06,-    0x97, 0xC3, 0xC4, 0xAE, 0x8B, 0x2E, 0x7D, 0xCB-  },-  {-    0xB0, 0xD2, 0xCC, 0x19, 0x47, 0x2D, 0xD5, 0x7F,-    0x2B, 0x17, 0xEF, 0xC0, 0x3C, 0x8D, 0x58, 0xC2,-    0x28, 0x3D, 0xBB, 0x19, 0xDA, 0x57, 0x2F, 0x77,-    0x55, 0x85, 0x5A, 0xA9, 0x79, 0x43, 0x17, 0xA0-  },-  {-    0xA0, 0xD1, 0x9A, 0x6E, 0xE3, 0x39, 0x79, 0xC3,-    0x25, 0x51, 0x0E, 0x27, 0x66, 0x22, 0xDF, 0x41,-    0xF7, 0x15, 0x83, 0xD0, 0x75, 0x01, 0xB8, 0x70,-    0x71, 0x12, 0x9A, 0x0A, 0xD9, 0x47, 0x32, 0xA5-  },-  {-    0x72, 0x46, 0x42, 0xA7, 0x03, 0x2D, 0x10, 0x62,-    0xB8, 0x9E, 0x52, 0xBE, 0xA3, 0x4B, 0x75, 0xDF,-    0x7D, 0x8F, 0xE7, 0x72, 0xD9, 0xFE, 0x3C, 0x93,-    0xDD, 0xF3, 0xC4, 0x54, 0x5A, 0xB5, 0xA9, 0x9B-  },-  {-    0xAD, 0xE5, 0xEA, 0xA7, 0xE6, 0x1F, 0x67, 0x2D,-    0x58, 0x7E, 0xA0, 0x3D, 0xAE, 0x7D, 0x7B, 0x55,-    0x22, 0x9C, 0x01, 0xD0, 0x6B, 0xC0, 0xA5, 0x70,-    0x14, 0x36, 0xCB, 0xD1, 0x83, 0x66, 0xA6, 0x26-  },-  {-    0x01, 0x3B, 0x31, 0xEB, 0xD2, 0x28, 0xFC, 0xDD,-    0xA5, 0x1F, 0xAB, 0xB0, 0x3B, 0xB0, 0x2D, 0x60,-    0xAC, 0x20, 0xCA, 0x21, 0x5A, 0xAF, 0xA8, 0x3B,-    0xDD, 0x85, 0x5E, 0x37, 0x55, 0xA3, 0x5F, 0x0B-  },-  {-    0x33, 0x2E, 0xD4, 0x0B, 0xB1, 0x0D, 0xDE, 0x3C,-    0x95, 0x4A, 0x75, 0xD7, 0xB8, 0x99, 0x9D, 0x4B,-    0x26, 0xA1, 0xC0, 0x63, 0xC1, 0xDC, 0x6E, 0x32,-    0xC1, 0xD9, 0x1B, 0xAB, 0x7B, 0xBB, 0x7D, 0x16-  },-  {-    0xC7, 0xA1, 0x97, 0xB3, 0xA0, 0x5B, 0x56, 0x6B,-    0xCC, 0x9F, 0xAC, 0xD2, 0x0E, 0x44, 0x1D, 0x6F,-    0x6C, 0x28, 0x60, 0xAC, 0x96, 0x51, 0xCD, 0x51,-    0xD6, 0xB9, 0xD2, 0xCD, 0xEE, 0xEA, 0x03, 0x90-  },-  {-    0xBD, 0x9C, 0xF6, 0x4E, 0xA8, 0x95, 0x3C, 0x03,-    0x71, 0x08, 0xE6, 0xF6, 0x54, 0x91, 0x4F, 0x39,-    0x58, 0xB6, 0x8E, 0x29, 0xC1, 0x67, 0x00, 0xDC,-    0x18, 0x4D, 0x94, 0xA2, 0x17, 0x08, 0xFF, 0x60-  },-  {-    0x88, 0x35, 0xB0, 0xAC, 0x02, 0x11, 0x51, 0xDF,-    0x71, 0x64, 0x74, 0xCE, 0x27, 0xCE, 0x4D, 0x3C,-    0x15, 0xF0, 0xB2, 0xDA, 0xB4, 0x80, 0x03, 0xCF,-    0x3F, 0x3E, 0xFD, 0x09, 0x45, 0x10, 0x6B, 0x9A-  },-  {-    0x3B, 0xFE, 0xFA, 0x33, 0x01, 0xAA, 0x55, 0xC0,-    0x80, 0x19, 0x0C, 0xFF, 0xDA, 0x8E, 0xAE, 0x51,-    0xD9, 0xAF, 0x48, 0x8B, 0x4C, 0x1F, 0x24, 0xC3,-    0xD9, 0xA7, 0x52, 0x42, 0xFD, 0x8E, 0xA0, 0x1D-  },-  {-    0x08, 0x28, 0x4D, 0x14, 0x99, 0x3C, 0xD4, 0x7D,-    0x53, 0xEB, 0xAE, 0xCF, 0x0D, 0xF0, 0x47, 0x8C,-    0xC1, 0x82, 0xC8, 0x9C, 0x00, 0xE1, 0x85, 0x9C,-    0x84, 0x85, 0x16, 0x86, 0xDD, 0xF2, 0xC1, 0xB7-  },-  {-    0x1E, 0xD7, 0xEF, 0x9F, 0x04, 0xC2, 0xAC, 0x8D,-    0xB6, 0xA8, 0x64, 0xDB, 0x13, 0x10, 0x87, 0xF2,-    0x70, 0x65, 0x09, 0x8E, 0x69, 0xC3, 0xFE, 0x78,-    0x71, 0x8D, 0x9B, 0x94, 0x7F, 0x4A, 0x39, 0xD0-  },-  {-    0xC1, 0x61, 0xF2, 0xDC, 0xD5, 0x7E, 0x9C, 0x14,-    0x39, 0xB3, 0x1A, 0x9D, 0xD4, 0x3D, 0x8F, 0x3D,-    0x7D, 0xD8, 0xF0, 0xEB, 0x7C, 0xFA, 0xC6, 0xFB,-    0x25, 0xA0, 0xF2, 0x8E, 0x30, 0x6F, 0x06, 0x61-  },-  {-    0xC0, 0x19, 0x69, 0xAD, 0x34, 0xC5, 0x2C, 0xAF,-    0x3D, 0xC4, 0xD8, 0x0D, 0x19, 0x73, 0x5C, 0x29,-    0x73, 0x1A, 0xC6, 0xE7, 0xA9, 0x20, 0x85, 0xAB,-    0x92, 0x50, 0xC4, 0x8D, 0xEA, 0x48, 0xA3, 0xFC-  },-  {-    0x17, 0x20, 0xB3, 0x65, 0x56, 0x19, 0xD2, 0xA5,-    0x2B, 0x35, 0x21, 0xAE, 0x0E, 0x49, 0xE3, 0x45,-    0xCB, 0x33, 0x89, 0xEB, 0xD6, 0x20, 0x8A, 0xCA,-    0xF9, 0xF1, 0x3F, 0xDA, 0xCC, 0xA8, 0xBE, 0x49-  },-  {-    0x75, 0x62, 0x88, 0x36, 0x1C, 0x83, 0xE2, 0x4C,-    0x61, 0x7C, 0xF9, 0x5C, 0x90, 0x5B, 0x22, 0xD0,-    0x17, 0xCD, 0xC8, 0x6F, 0x0B, 0xF1, 0xD6, 0x58,-    0xF4, 0x75, 0x6C, 0x73, 0x79, 0x87, 0x3B, 0x7F-  },-  {-    0xE7, 0xD0, 0xED, 0xA3, 0x45, 0x26, 0x93, 0xB7,-    0x52, 0xAB, 0xCD, 0xA1, 0xB5, 0x5E, 0x27, 0x6F,-    0x82, 0x69, 0x8F, 0x5F, 0x16, 0x05, 0x40, 0x3E,-    0xFF, 0x83, 0x0B, 0xEA, 0x00, 0x71, 0xA3, 0x94-  },-  {-    0x2C, 0x82, 0xEC, 0xAA, 0x6B, 0x84, 0x80, 0x3E,-    0x04, 0x4A, 0xF6, 0x31, 0x18, 0xAF, 0xE5, 0x44,-    0x68, 0x7C, 0xB6, 0xE6, 0xC7, 0xDF, 0x49, 0xED,-    0x76, 0x2D, 0xFD, 0x7C, 0x86, 0x93, 0xA1, 0xBC-  },-  {-    0x61, 0x36, 0xCB, 0xF4, 0xB4, 0x41, 0x05, 0x6F,-    0xA1, 0xE2, 0x72, 0x24, 0x98, 0x12, 0x5D, 0x6D,-    0xED, 0x45, 0xE1, 0x7B, 0x52, 0x14, 0x39, 0x59,-    0xC7, 0xF4, 0xD4, 0xE3, 0x95, 0x21, 0x8A, 0xC2-  },-  {-    0x72, 0x1D, 0x32, 0x45, 0xAA, 0xFE, 0xF2, 0x7F,-    0x6A, 0x62, 0x4F, 0x47, 0x95, 0x4B, 0x6C, 0x25,-    0x50, 0x79, 0x52, 0x6F, 0xFA, 0x25, 0xE9, 0xFF,-    0x77, 0xE5, 0xDC, 0xFF, 0x47, 0x3B, 0x15, 0x97-  },-  {-    0x9D, 0xD2, 0xFB, 0xD8, 0xCE, 0xF1, 0x6C, 0x35,-    0x3C, 0x0A, 0xC2, 0x11, 0x91, 0xD5, 0x09, 0xEB,-    0x28, 0xDD, 0x9E, 0x3E, 0x0D, 0x8C, 0xEA, 0x5D,-    0x26, 0xCA, 0x83, 0x93, 0x93, 0x85, 0x1C, 0x3A-  },-  {-    0xB2, 0x39, 0x4C, 0xEA, 0xCD, 0xEB, 0xF2, 0x1B,-    0xF9, 0xDF, 0x2C, 0xED, 0x98, 0xE5, 0x8F, 0x1C,-    0x3A, 0x4B, 0xBB, 0xFF, 0x66, 0x0D, 0xD9, 0x00,-    0xF6, 0x22, 0x02, 0xD6, 0x78, 0x5C, 0xC4, 0x6E-  },-  {-    0x57, 0x08, 0x9F, 0x22, 0x27, 0x49, 0xAD, 0x78,-    0x71, 0x76, 0x5F, 0x06, 0x2B, 0x11, 0x4F, 0x43,-    0xBA, 0x20, 0xEC, 0x56, 0x42, 0x2A, 0x8B, 0x1E,-    0x3F, 0x87, 0x19, 0x2C, 0x0E, 0xA7, 0x18, 0xC6-  },-  {-    0xE4, 0x9A, 0x94, 0x59, 0x96, 0x1C, 0xD3, 0x3C,-    0xDF, 0x4A, 0xAE, 0x1B, 0x10, 0x78, 0xA5, 0xDE,-    0xA7, 0xC0, 0x40, 0xE0, 0xFE, 0xA3, 0x40, 0xC9,-    0x3A, 0x72, 0x48, 0x72, 0xFC, 0x4A, 0xF8, 0x06-  },-  {-    0xED, 0xE6, 0x7F, 0x72, 0x0E, 0xFF, 0xD2, 0xCA,-    0x9C, 0x88, 0x99, 0x41, 0x52, 0xD0, 0x20, 0x1D,-    0xEE, 0x6B, 0x0A, 0x2D, 0x2C, 0x07, 0x7A, 0xCA,-    0x6D, 0xAE, 0x29, 0xF7, 0x3F, 0x8B, 0x63, 0x09-  },-  {-    0xE0, 0xF4, 0x34, 0xBF, 0x22, 0xE3, 0x08, 0x80,-    0x39, 0xC2, 0x1F, 0x71, 0x9F, 0xFC, 0x67, 0xF0,-    0xF2, 0xCB, 0x5E, 0x98, 0xA7, 0xA0, 0x19, 0x4C,-    0x76, 0xE9, 0x6B, 0xF4, 0xE8, 0xE1, 0x7E, 0x61-  },-  {-    0x27, 0x7C, 0x04, 0xE2, 0x85, 0x34, 0x84, 0xA4,-    0xEB, 0xA9, 0x10, 0xAD, 0x33, 0x6D, 0x01, 0xB4,-    0x77, 0xB6, 0x7C, 0xC2, 0x00, 0xC5, 0x9F, 0x3C,-    0x8D, 0x77, 0xEE, 0xF8, 0x49, 0x4F, 0x29, 0xCD-  },-  {-    0x15, 0x6D, 0x57, 0x47, 0xD0, 0xC9, 0x9C, 0x7F,-    0x27, 0x09, 0x7D, 0x7B, 0x7E, 0x00, 0x2B, 0x2E,-    0x18, 0x5C, 0xB7, 0x2D, 0x8D, 0xD7, 0xEB, 0x42,-    0x4A, 0x03, 0x21, 0x52, 0x81, 0x61, 0x21, 0x9F-  },-  {-    0x20, 0xDD, 0xD1, 0xED, 0x9B, 0x1C, 0xA8, 0x03,-    0x94, 0x6D, 0x64, 0xA8, 0x3A, 0xE4, 0x65, 0x9D,-    0xA6, 0x7F, 0xBA, 0x7A, 0x1A, 0x3E, 0xDD, 0xB1,-    0xE1, 0x03, 0xC0, 0xF5, 0xE0, 0x3E, 0x3A, 0x2C-  },-  {-    0xF0, 0xAF, 0x60, 0x4D, 0x3D, 0xAB, 0xBF, 0x9A,-    0x0F, 0x2A, 0x7D, 0x3D, 0xDA, 0x6B, 0xD3, 0x8B,-    0xBA, 0x72, 0xC6, 0xD0, 0x9B, 0xE4, 0x94, 0xFC,-    0xEF, 0x71, 0x3F, 0xF1, 0x01, 0x89, 0xB6, 0xE6-  },-  {-    0x98, 0x02, 0xBB, 0x87, 0xDE, 0xF4, 0xCC, 0x10,-    0xC4, 0xA5, 0xFD, 0x49, 0xAA, 0x58, 0xDF, 0xE2,-    0xF3, 0xFD, 0xDB, 0x46, 0xB4, 0x70, 0x88, 0x14,-    0xEA, 0xD8, 0x1D, 0x23, 0xBA, 0x95, 0x13, 0x9B-  },-  {-    0x4F, 0x8C, 0xE1, 0xE5, 0x1D, 0x2F, 0xE7, 0xF2,-    0x40, 0x43, 0xA9, 0x04, 0xD8, 0x98, 0xEB, 0xFC,-    0x91, 0x97, 0x54, 0x18, 0x75, 0x34, 0x13, 0xAA,-    0x09, 0x9B, 0x79, 0x5E, 0xCB, 0x35, 0xCE, 0xDB-  },-  {-    0xBD, 0xDC, 0x65, 0x14, 0xD7, 0xEE, 0x6A, 0xCE,-    0x0A, 0x4A, 0xC1, 0xD0, 0xE0, 0x68, 0x11, 0x22,-    0x88, 0xCB, 0xCF, 0x56, 0x04, 0x54, 0x64, 0x27,-    0x05, 0x63, 0x01, 0x77, 0xCB, 0xA6, 0x08, 0xBD-  },-  {-    0xD6, 0x35, 0x99, 0x4F, 0x62, 0x91, 0x51, 0x7B,-    0x02, 0x81, 0xFF, 0xDD, 0x49, 0x6A, 0xFA, 0x86,-    0x27, 0x12, 0xE5, 0xB3, 0xC4, 0xE5, 0x2E, 0x4C,-    0xD5, 0xFD, 0xAE, 0x8C, 0x0E, 0x72, 0xFB, 0x08-  },-  {-    0x87, 0x8D, 0x9C, 0xA6, 0x00, 0xCF, 0x87, 0xE7,-    0x69, 0xCC, 0x30, 0x5C, 0x1B, 0x35, 0x25, 0x51,-    0x86, 0x61, 0x5A, 0x73, 0xA0, 0xDA, 0x61, 0x3B,-    0x5F, 0x1C, 0x98, 0xDB, 0xF8, 0x12, 0x83, 0xEA-  },-  {-    0xA6, 0x4E, 0xBE, 0x5D, 0xC1, 0x85, 0xDE, 0x9F,-    0xDD, 0xE7, 0x60, 0x7B, 0x69, 0x98, 0x70, 0x2E,-    0xB2, 0x34, 0x56, 0x18, 0x49, 0x57, 0x30, 0x7D,-    0x2F, 0xA7, 0x2E, 0x87, 0xA4, 0x77, 0x02, 0xD6-  },-  {-    0xCE, 0x50, 0xEA, 0xB7, 0xB5, 0xEB, 0x52, 0xBD,-    0xC9, 0xAD, 0x8E, 0x5A, 0x48, 0x0A, 0xB7, 0x80,-    0xCA, 0x93, 0x20, 0xE4, 0x43, 0x60, 0xB1, 0xFE,-    0x37, 0xE0, 0x3F, 0x2F, 0x7A, 0xD7, 0xDE, 0x01-  },-  {-    0xEE, 0xDD, 0xB7, 0xC0, 0xDB, 0x6E, 0x30, 0xAB,-    0xE6, 0x6D, 0x79, 0xE3, 0x27, 0x51, 0x1E, 0x61,-    0xFC, 0xEB, 0xBC, 0x29, 0xF1, 0x59, 0xB4, 0x0A,-    0x86, 0xB0, 0x46, 0xEC, 0xF0, 0x51, 0x38, 0x23-  },-  {-    0x78, 0x7F, 0xC9, 0x34, 0x40, 0xC1, 0xEC, 0x96,-    0xB5, 0xAD, 0x01, 0xC1, 0x6C, 0xF7, 0x79, 0x16,-    0xA1, 0x40, 0x5F, 0x94, 0x26, 0x35, 0x6E, 0xC9,-    0x21, 0xD8, 0xDF, 0xF3, 0xEA, 0x63, 0xB7, 0xE0-  },-  {-    0x7F, 0x0D, 0x5E, 0xAB, 0x47, 0xEE, 0xFD, 0xA6,-    0x96, 0xC0, 0xBF, 0x0F, 0xBF, 0x86, 0xAB, 0x21,-    0x6F, 0xCE, 0x46, 0x1E, 0x93, 0x03, 0xAB, 0xA6,-    0xAC, 0x37, 0x41, 0x20, 0xE8, 0x90, 0xE8, 0xDF-  },-  {-    0xB6, 0x80, 0x04, 0xB4, 0x2F, 0x14, 0xAD, 0x02,-    0x9F, 0x4C, 0x2E, 0x03, 0xB1, 0xD5, 0xEB, 0x76,-    0xD5, 0x71, 0x60, 0xE2, 0x64, 0x76, 0xD2, 0x11,-    0x31, 0xBE, 0xF2, 0x0A, 0xDA, 0x7D, 0x27, 0xF4-  },-  {-    0xB0, 0xC4, 0xEB, 0x18, 0xAE, 0x25, 0x0B, 0x51,-    0xA4, 0x13, 0x82, 0xEA, 0xD9, 0x2D, 0x0D, 0xC7,-    0x45, 0x5F, 0x93, 0x79, 0xFC, 0x98, 0x84, 0x42,-    0x8E, 0x47, 0x70, 0x60, 0x8D, 0xB0, 0xFA, 0xEC-  },-  {-    0xF9, 0x2B, 0x7A, 0x87, 0x0C, 0x05, 0x9F, 0x4D,-    0x46, 0x46, 0x4C, 0x82, 0x4E, 0xC9, 0x63, 0x55,-    0x14, 0x0B, 0xDC, 0xE6, 0x81, 0x32, 0x2C, 0xC3,-    0xA9, 0x92, 0xFF, 0x10, 0x3E, 0x3F, 0xEA, 0x52-  },-  {-    0x53, 0x64, 0x31, 0x26, 0x14, 0x81, 0x33, 0x98,-    0xCC, 0x52, 0x5D, 0x4C, 0x4E, 0x14, 0x6E, 0xDE,-    0xB3, 0x71, 0x26, 0x5F, 0xBA, 0x19, 0x13, 0x3A,-    0x2C, 0x3D, 0x21, 0x59, 0x29, 0x8A, 0x17, 0x42-  },-  {-    0xF6, 0x62, 0x0E, 0x68, 0xD3, 0x7F, 0xB2, 0xAF,-    0x50, 0x00, 0xFC, 0x28, 0xE2, 0x3B, 0x83, 0x22,-    0x97, 0xEC, 0xD8, 0xBC, 0xE9, 0x9E, 0x8B, 0xE4,-    0xD0, 0x4E, 0x85, 0x30, 0x9E, 0x3D, 0x33, 0x74-  },-  {-    0x53, 0x16, 0xA2, 0x79, 0x69, 0xD7, 0xFE, 0x04,-    0xFF, 0x27, 0xB2, 0x83, 0x96, 0x1B, 0xFF, 0xC3,-    0xBF, 0x5D, 0xFB, 0x32, 0xFB, 0x6A, 0x89, 0xD1,-    0x01, 0xC6, 0xC3, 0xB1, 0x93, 0x7C, 0x28, 0x71-  },-  {-    0x81, 0xD1, 0x66, 0x4F, 0xDF, 0x3C, 0xB3, 0x3C,-    0x24, 0xEE, 0xBA, 0xC0, 0xBD, 0x64, 0x24, 0x4B,-    0x77, 0xC4, 0xAB, 0xEA, 0x90, 0xBB, 0xE8, 0xB5,-    0xEE, 0x0B, 0x2A, 0xAF, 0xCF, 0x2D, 0x6A, 0x53-  },-  {-    0x34, 0x57, 0x82, 0xF2, 0x95, 0xB0, 0x88, 0x03,-    0x52, 0xE9, 0x24, 0xA0, 0x46, 0x7B, 0x5F, 0xBC,-    0x3E, 0x8F, 0x3B, 0xFB, 0xC3, 0xC7, 0xE4, 0x8B,-    0x67, 0x09, 0x1F, 0xB5, 0xE8, 0x0A, 0x94, 0x42-  },-  {-    0x79, 0x41, 0x11, 0xEA, 0x6C, 0xD6, 0x5E, 0x31,-    0x1F, 0x74, 0xEE, 0x41, 0xD4, 0x76, 0xCB, 0x63,-    0x2C, 0xE1, 0xE4, 0xB0, 0x51, 0xDC, 0x1D, 0x9E,-    0x9D, 0x06, 0x1A, 0x19, 0xE1, 0xD0, 0xBB, 0x49-  },-  {-    0x2A, 0x85, 0xDA, 0xF6, 0x13, 0x88, 0x16, 0xB9,-    0x9B, 0xF8, 0xD0, 0x8B, 0xA2, 0x11, 0x4B, 0x7A,-    0xB0, 0x79, 0x75, 0xA7, 0x84, 0x20, 0xC1, 0xA3,-    0xB0, 0x6A, 0x77, 0x7C, 0x22, 0xDD, 0x8B, 0xCB-  },-  {-    0x89, 0xB0, 0xD5, 0xF2, 0x89, 0xEC, 0x16, 0x40,-    0x1A, 0x06, 0x9A, 0x96, 0x0D, 0x0B, 0x09, 0x3E,-    0x62, 0x5D, 0xA3, 0xCF, 0x41, 0xEE, 0x29, 0xB5,-    0x9B, 0x93, 0x0C, 0x58, 0x20, 0x14, 0x54, 0x55-  },-  {-    0xD0, 0xFD, 0xCB, 0x54, 0x39, 0x43, 0xFC, 0x27,-    0xD2, 0x08, 0x64, 0xF5, 0x21, 0x81, 0x47, 0x1B,-    0x94, 0x2C, 0xC7, 0x7C, 0xA6, 0x75, 0xBC, 0xB3,-    0x0D, 0xF3, 0x1D, 0x35, 0x8E, 0xF7, 0xB1, 0xEB-  },-  {-    0xB1, 0x7E, 0xA8, 0xD7, 0x70, 0x63, 0xC7, 0x09,-    0xD4, 0xDC, 0x6B, 0x87, 0x94, 0x13, 0xC3, 0x43,-    0xE3, 0x79, 0x0E, 0x9E, 0x62, 0xCA, 0x85, 0xB7,-    0x90, 0x0B, 0x08, 0x6F, 0x6B, 0x75, 0xC6, 0x72-  },-  {-    0xE7, 0x1A, 0x3E, 0x2C, 0x27, 0x4D, 0xB8, 0x42,-    0xD9, 0x21, 0x14, 0xF2, 0x17, 0xE2, 0xC0, 0xEA,-    0xC8, 0xB4, 0x50, 0x93, 0xFD, 0xFD, 0x9D, 0xF4,-    0xCA, 0x71, 0x62, 0x39, 0x48, 0x62, 0xD5, 0x01-  },-  {-    0xC0, 0x47, 0x67, 0x59, 0xAB, 0x7A, 0xA3, 0x33,-    0x23, 0x4F, 0x6B, 0x44, 0xF5, 0xFD, 0x85, 0x83,-    0x90, 0xEC, 0x23, 0x69, 0x4C, 0x62, 0x2C, 0xB9,-    0x86, 0xE7, 0x69, 0xC7, 0x8E, 0xDD, 0x73, 0x3E-  },-  {-    0x9A, 0xB8, 0xEA, 0xBB, 0x14, 0x16, 0x43, 0x4D,-    0x85, 0x39, 0x13, 0x41, 0xD5, 0x69, 0x93, 0xC5,-    0x54, 0x58, 0x16, 0x7D, 0x44, 0x18, 0xB1, 0x9A,-    0x0F, 0x2A, 0xD8, 0xB7, 0x9A, 0x83, 0xA7, 0x5B-  },-  {-    0x79, 0x92, 0xD0, 0xBB, 0xB1, 0x5E, 0x23, 0x82,-    0x6F, 0x44, 0x3E, 0x00, 0x50, 0x5D, 0x68, 0xD3,-    0xED, 0x73, 0x72, 0x99, 0x5A, 0x5C, 0x3E, 0x49,-    0x86, 0x54, 0x10, 0x2F, 0xBC, 0xD0, 0x96, 0x4E-  },-  {-    0xC0, 0x21, 0xB3, 0x00, 0x85, 0x15, 0x14, 0x35,-    0xDF, 0x33, 0xB0, 0x07, 0xCC, 0xEC, 0xC6, 0x9D,-    0xF1, 0x26, 0x9F, 0x39, 0xBA, 0x25, 0x09, 0x2B,-    0xED, 0x59, 0xD9, 0x32, 0xAC, 0x0F, 0xDC, 0x28-  },-  {-    0x91, 0xA2, 0x5E, 0xC0, 0xEC, 0x0D, 0x9A, 0x56,-    0x7F, 0x89, 0xC4, 0xBF, 0xE1, 0xA6, 0x5A, 0x0E,-    0x43, 0x2D, 0x07, 0x06, 0x4B, 0x41, 0x90, 0xE2,-    0x7D, 0xFB, 0x81, 0x90, 0x1F, 0xD3, 0x13, 0x9B-  },-  {-    0x59, 0x50, 0xD3, 0x9A, 0x23, 0xE1, 0x54, 0x5F,-    0x30, 0x12, 0x70, 0xAA, 0x1A, 0x12, 0xF2, 0xE6,-    0xC4, 0x53, 0x77, 0x6E, 0x4D, 0x63, 0x55, 0xDE,-    0x42, 0x5C, 0xC1, 0x53, 0xF9, 0x81, 0x88, 0x67-  },-  {-    0xD7, 0x9F, 0x14, 0x72, 0x0C, 0x61, 0x0A, 0xF1,-    0x79, 0xA3, 0x76, 0x5D, 0x4B, 0x7C, 0x09, 0x68,-    0xF9, 0x77, 0x96, 0x2D, 0xBF, 0x65, 0x5B, 0x52,-    0x12, 0x72, 0xB6, 0xF1, 0xE1, 0x94, 0x48, 0x8E-  },-  {-    0xE9, 0x53, 0x1B, 0xFC, 0x8B, 0x02, 0x99, 0x5A,-    0xEA, 0xA7, 0x5B, 0xA2, 0x70, 0x31, 0xFA, 0xDB,-    0xCB, 0xF4, 0xA0, 0xDA, 0xB8, 0x96, 0x1D, 0x92,-    0x96, 0xCD, 0x7E, 0x84, 0xD2, 0x5D, 0x60, 0x06-  },-  {-    0x34, 0xE9, 0xC2, 0x6A, 0x01, 0xD7, 0xF1, 0x61,-    0x81, 0xB4, 0x54, 0xA9, 0xD1, 0x62, 0x3C, 0x23,-    0x3C, 0xB9, 0x9D, 0x31, 0xC6, 0x94, 0x65, 0x6E,-    0x94, 0x13, 0xAC, 0xA3, 0xE9, 0x18, 0x69, 0x2F-  },-  {-    0xD9, 0xD7, 0x42, 0x2F, 0x43, 0x7B, 0xD4, 0x39,-    0xDD, 0xD4, 0xD8, 0x83, 0xDA, 0xE2, 0xA0, 0x83,-    0x50, 0x17, 0x34, 0x14, 0xBE, 0x78, 0x15, 0x51,-    0x33, 0xFF, 0xF1, 0x96, 0x4C, 0x3D, 0x79, 0x72-  },-  {-    0x4A, 0xEE, 0x0C, 0x7A, 0xAF, 0x07, 0x54, 0x14,-    0xFF, 0x17, 0x93, 0xEA, 0xD7, 0xEA, 0xCA, 0x60,-    0x17, 0x75, 0xC6, 0x15, 0xDB, 0xD6, 0x0B, 0x64,-    0x0B, 0x0A, 0x9F, 0x0C, 0xE5, 0x05, 0xD4, 0x35-  },-  {-    0x6B, 0xFD, 0xD1, 0x54, 0x59, 0xC8, 0x3B, 0x99,-    0xF0, 0x96, 0xBF, 0xB4, 0x9E, 0xE8, 0x7B, 0x06,-    0x3D, 0x69, 0xC1, 0x97, 0x4C, 0x69, 0x28, 0xAC,-    0xFC, 0xFB, 0x40, 0x99, 0xF8, 0xC4, 0xEF, 0x67-  },-  {-    0x9F, 0xD1, 0xC4, 0x08, 0xFD, 0x75, 0xC3, 0x36,-    0x19, 0x3A, 0x2A, 0x14, 0xD9, 0x4F, 0x6A, 0xF5,-    0xAD, 0xF0, 0x50, 0xB8, 0x03, 0x87, 0xB4, 0xB0,-    0x10, 0xFB, 0x29, 0xF4, 0xCC, 0x72, 0x70, 0x7C-  },-  {-    0x13, 0xC8, 0x84, 0x80, 0xA5, 0xD0, 0x0D, 0x6C,-    0x8C, 0x7A, 0xD2, 0x11, 0x0D, 0x76, 0xA8, 0x2D,-    0x9B, 0x70, 0xF4, 0xFA, 0x66, 0x96, 0xD4, 0xE5,-    0xDD, 0x42, 0xA0, 0x66, 0xDC, 0xAF, 0x99, 0x20-  },-  {-    0x82, 0x0E, 0x72, 0x5E, 0xE2, 0x5F, 0xE8, 0xFD,-    0x3A, 0x8D, 0x5A, 0xBE, 0x4C, 0x46, 0xC3, 0xBA,-    0x88, 0x9D, 0xE6, 0xFA, 0x91, 0x91, 0xAA, 0x22,-    0xBA, 0x67, 0xD5, 0x70, 0x54, 0x21, 0x54, 0x2B-  },-  {-    0x32, 0xD9, 0x3A, 0x0E, 0xB0, 0x2F, 0x42, 0xFB,-    0xBC, 0xAF, 0x2B, 0xAD, 0x00, 0x85, 0xB2, 0x82,-    0xE4, 0x60, 0x46, 0xA4, 0xDF, 0x7A, 0xD1, 0x06,-    0x57, 0xC9, 0xD6, 0x47, 0x63, 0x75, 0xB9, 0x3E-  },-  {-    0xAD, 0xC5, 0x18, 0x79, 0x05, 0xB1, 0x66, 0x9C,-    0xD8, 0xEC, 0x9C, 0x72, 0x1E, 0x19, 0x53, 0x78,-    0x6B, 0x9D, 0x89, 0xA9, 0xBA, 0xE3, 0x07, 0x80,-    0xF1, 0xE1, 0xEA, 0xB2, 0x4A, 0x00, 0x52, 0x3C-  },-  {-    0xE9, 0x07, 0x56, 0xFF, 0x7F, 0x9A, 0xD8, 0x10,-    0xB2, 0x39, 0xA1, 0x0C, 0xED, 0x2C, 0xF9, 0xB2,-    0x28, 0x43, 0x54, 0xC1, 0xF8, 0xC7, 0xE0, 0xAC,-    0xCC, 0x24, 0x61, 0xDC, 0x79, 0x6D, 0x6E, 0x89-  },-  {-    0x12, 0x51, 0xF7, 0x6E, 0x56, 0x97, 0x84, 0x81,-    0x87, 0x53, 0x59, 0x80, 0x1D, 0xB5, 0x89, 0xA0,-    0xB2, 0x2F, 0x86, 0xD8, 0xD6, 0x34, 0xDC, 0x04,-    0x50, 0x6F, 0x32, 0x2E, 0xD7, 0x8F, 0x17, 0xE8-  },-  {-    0x3A, 0xFA, 0x89, 0x9F, 0xD9, 0x80, 0xE7, 0x3E,-    0xCB, 0x7F, 0x4D, 0x8B, 0x8F, 0x29, 0x1D, 0xC9,-    0xAF, 0x79, 0x6B, 0xC6, 0x5D, 0x27, 0xF9, 0x74,-    0xC6, 0xF1, 0x93, 0xC9, 0x19, 0x1A, 0x09, 0xFD-  },-  {-    0xAA, 0x30, 0x5B, 0xE2, 0x6E, 0x5D, 0xED, 0xDC,-    0x3C, 0x10, 0x10, 0xCB, 0xC2, 0x13, 0xF9, 0x5F,-    0x05, 0x1C, 0x78, 0x5C, 0x5B, 0x43, 0x1E, 0x6A,-    0x7C, 0xD0, 0x48, 0xF1, 0x61, 0x78, 0x75, 0x28-  },-  {-    0x8E, 0xA1, 0x88, 0x4F, 0xF3, 0x2E, 0x9D, 0x10,-    0xF0, 0x39, 0xB4, 0x07, 0xD0, 0xD4, 0x4E, 0x7E,-    0x67, 0x0A, 0xBD, 0x88, 0x4A, 0xEE, 0xE0, 0xFB,-    0x75, 0x7A, 0xE9, 0x4E, 0xAA, 0x97, 0x37, 0x3D-  },-  {-    0xD4, 0x82, 0xB2, 0x15, 0x5D, 0x4D, 0xEC, 0x6B,-    0x47, 0x36, 0xA1, 0xF1, 0x61, 0x7B, 0x53, 0xAA,-    0xA3, 0x73, 0x10, 0x27, 0x7D, 0x3F, 0xEF, 0x0C,-    0x37, 0xAD, 0x41, 0x76, 0x8F, 0xC2, 0x35, 0xB4-  },-  {-    0x4D, 0x41, 0x39, 0x71, 0x38, 0x7E, 0x7A, 0x88,-    0x98, 0xA8, 0xDC, 0x2A, 0x27, 0x50, 0x07, 0x78,-    0x53, 0x9E, 0xA2, 0x14, 0xA2, 0xDF, 0xE9, 0xB3,-    0xD7, 0xE8, 0xEB, 0xDC, 0xE5, 0xCF, 0x3D, 0xB3-  },-  {-    0x69, 0x6E, 0x5D, 0x46, 0xE6, 0xC5, 0x7E, 0x87,-    0x96, 0xE4, 0x73, 0x5D, 0x08, 0x91, 0x6E, 0x0B,-    0x79, 0x29, 0xB3, 0xCF, 0x29, 0x8C, 0x29, 0x6D,-    0x22, 0xE9, 0xD3, 0x01, 0x96, 0x53, 0x37, 0x1C-  },-  {-    0x1F, 0x56, 0x47, 0xC1, 0xD3, 0xB0, 0x88, 0x22,-    0x88, 0x85, 0x86, 0x5C, 0x89, 0x40, 0x90, 0x8B,-    0xF4, 0x0D, 0x1A, 0x82, 0x72, 0x82, 0x19, 0x73,-    0xB1, 0x60, 0x00, 0x8E, 0x7A, 0x3C, 0xE2, 0xEB-  },-  {-    0xB6, 0xE7, 0x6C, 0x33, 0x0F, 0x02, 0x1A, 0x5B,-    0xDA, 0x65, 0x87, 0x50, 0x10, 0xB0, 0xED, 0xF0,-    0x91, 0x26, 0xC0, 0xF5, 0x10, 0xEA, 0x84, 0x90,-    0x48, 0x19, 0x20, 0x03, 0xAE, 0xF4, 0xC6, 0x1C-  },-  {-    0x3C, 0xD9, 0x52, 0xA0, 0xBE, 0xAD, 0xA4, 0x1A,-    0xBB, 0x42, 0x4C, 0xE4, 0x7F, 0x94, 0xB4, 0x2B,-    0xE6, 0x4E, 0x1F, 0xFB, 0x0F, 0xD0, 0x78, 0x22,-    0x76, 0x80, 0x79, 0x46, 0xD0, 0xD0, 0xBC, 0x55-  },-  {-    0x98, 0xD9, 0x26, 0x77, 0x43, 0x9B, 0x41, 0xB7,-    0xBB, 0x51, 0x33, 0x12, 0xAF, 0xB9, 0x2B, 0xCC,-    0x8E, 0xE9, 0x68, 0xB2, 0xE3, 0xB2, 0x38, 0xCE,-    0xCB, 0x9B, 0x0F, 0x34, 0xC9, 0xBB, 0x63, 0xD0-  },-  {-    0xEC, 0xBC, 0xA2, 0xCF, 0x08, 0xAE, 0x57, 0xD5,-    0x17, 0xAD, 0x16, 0x15, 0x8A, 0x32, 0xBF, 0xA7,-    0xDC, 0x03, 0x82, 0xEA, 0xED, 0xA1, 0x28, 0xE9,-    0x18, 0x86, 0x73, 0x4C, 0x24, 0xA0, 0xB2, 0x9D-  },-  {-    0x94, 0x2C, 0xC7, 0xC0, 0xB5, 0x2E, 0x2B, 0x16,-    0xA4, 0xB8, 0x9F, 0xA4, 0xFC, 0x7E, 0x0B, 0xF6,-    0x09, 0xE2, 0x9A, 0x08, 0xC1, 0xA8, 0x54, 0x34,-    0x52, 0xB7, 0x7C, 0x7B, 0xFD, 0x11, 0xBB, 0x28-  },-  {-    0x8A, 0x06, 0x5D, 0x8B, 0x61, 0xA0, 0xDF, 0xFB,-    0x17, 0x0D, 0x56, 0x27, 0x73, 0x5A, 0x76, 0xB0,-    0xE9, 0x50, 0x60, 0x37, 0x80, 0x8C, 0xBA, 0x16,-    0xC3, 0x45, 0x00, 0x7C, 0x9F, 0x79, 0xCF, 0x8F-  },-  {-    0x1B, 0x9F, 0xA1, 0x97, 0x14, 0x65, 0x9C, 0x78,-    0xFF, 0x41, 0x38, 0x71, 0x84, 0x92, 0x15, 0x36,-    0x10, 0x29, 0xAC, 0x80, 0x2B, 0x1C, 0xBC, 0xD5,-    0x4E, 0x40, 0x8B, 0xD8, 0x72, 0x87, 0xF8, 0x1F-  },-  {-    0x8D, 0xAB, 0x07, 0x1B, 0xCD, 0x6C, 0x72, 0x92,-    0xA9, 0xEF, 0x72, 0x7B, 0x4A, 0xE0, 0xD8, 0x67,-    0x13, 0x30, 0x1D, 0xA8, 0x61, 0x8D, 0x9A, 0x48,-    0xAD, 0xCE, 0x55, 0xF3, 0x03, 0xA8, 0x69, 0xA1-  },-  {-    0x82, 0x53, 0xE3, 0xE7, 0xC7, 0xB6, 0x84, 0xB9,-    0xCB, 0x2B, 0xEB, 0x01, 0x4C, 0xE3, 0x30, 0xFF,-    0x3D, 0x99, 0xD1, 0x7A, 0xBB, 0xDB, 0xAB, 0xE4,-    0xF4, 0xD6, 0x74, 0xDE, 0xD5, 0x3F, 0xFC, 0x6B-  },-  {-    0xF1, 0x95, 0xF3, 0x21, 0xE9, 0xE3, 0xD6, 0xBD,-    0x7D, 0x07, 0x45, 0x04, 0xDD, 0x2A, 0xB0, 0xE6,-    0x24, 0x1F, 0x92, 0xE7, 0x84, 0xB1, 0xAA, 0x27,-    0x1F, 0xF6, 0x48, 0xB1, 0xCA, 0xB6, 0xD7, 0xF6-  },-  {-    0x27, 0xE4, 0xCC, 0x72, 0x09, 0x0F, 0x24, 0x12,-    0x66, 0x47, 0x6A, 0x7C, 0x09, 0x49, 0x5F, 0x2D,-    0xB1, 0x53, 0xD5, 0xBC, 0xBD, 0x76, 0x19, 0x03,-    0xEF, 0x79, 0x27, 0x5E, 0xC5, 0x6B, 0x2E, 0xD8-  },-  {-    0x89, 0x9C, 0x24, 0x05, 0x78, 0x8E, 0x25, 0xB9,-    0x9A, 0x18, 0x46, 0x35, 0x5E, 0x64, 0x6D, 0x77,-    0xCF, 0x40, 0x00, 0x83, 0x41, 0x5F, 0x7D, 0xC5,-    0xAF, 0xE6, 0x9D, 0x6E, 0x17, 0xC0, 0x00, 0x23-  },-  {-    0xA5, 0x9B, 0x78, 0xC4, 0x90, 0x57, 0x44, 0x07,-    0x6B, 0xFE, 0xE8, 0x94, 0xDE, 0x70, 0x7D, 0x4F,-    0x12, 0x0B, 0x5C, 0x68, 0x93, 0xEA, 0x04, 0x00,-    0x29, 0x7D, 0x0B, 0xB8, 0x34, 0x72, 0x76, 0x32-  },-  {-    0x59, 0xDC, 0x78, 0xB1, 0x05, 0x64, 0x97, 0x07,-    0xA2, 0xBB, 0x44, 0x19, 0xC4, 0x8F, 0x00, 0x54,-    0x00, 0xD3, 0x97, 0x3D, 0xE3, 0x73, 0x66, 0x10,-    0x23, 0x04, 0x35, 0xB1, 0x04, 0x24, 0xB2, 0x4F-  },-  {-    0xC0, 0x14, 0x9D, 0x1D, 0x7E, 0x7A, 0x63, 0x53,-    0xA6, 0xD9, 0x06, 0xEF, 0xE7, 0x28, 0xF2, 0xF3,-    0x29, 0xFE, 0x14, 0xA4, 0x14, 0x9A, 0x3E, 0xA7,-    0x76, 0x09, 0xBC, 0x42, 0xB9, 0x75, 0xDD, 0xFA-  },-  {-    0xA3, 0x2F, 0x24, 0x14, 0x74, 0xA6, 0xC1, 0x69,-    0x32, 0xE9, 0x24, 0x3B, 0xE0, 0xCF, 0x09, 0xBC,-    0xDC, 0x7E, 0x0C, 0xA0, 0xE7, 0xA6, 0xA1, 0xB9,-    0xB1, 0xA0, 0xF0, 0x1E, 0x41, 0x50, 0x23, 0x77-  },-  {-    0xB2, 0x39, 0xB2, 0xE4, 0xF8, 0x18, 0x41, 0x36,-    0x1C, 0x13, 0x39, 0xF6, 0x8E, 0x2C, 0x35, 0x9F,-    0x92, 0x9A, 0xF9, 0xAD, 0x9F, 0x34, 0xE0, 0x1A,-    0xAB, 0x46, 0x31, 0xAD, 0x6D, 0x55, 0x00, 0xB0-  },-  {-    0x85, 0xFB, 0x41, 0x9C, 0x70, 0x02, 0xA3, 0xE0,-    0xB4, 0xB6, 0xEA, 0x09, 0x3B, 0x4C, 0x1A, 0xC6,-    0x93, 0x66, 0x45, 0xB6, 0x5D, 0xAC, 0x5A, 0xC1,-    0x5A, 0x85, 0x28, 0xB7, 0xB9, 0x4C, 0x17, 0x54-  },-  {-    0x96, 0x19, 0x72, 0x06, 0x25, 0xF1, 0x90, 0xB9,-    0x3A, 0x3F, 0xAD, 0x18, 0x6A, 0xB3, 0x14, 0x18,-    0x96, 0x33, 0xC0, 0xD3, 0xA0, 0x1E, 0x6F, 0x9B,-    0xC8, 0xC4, 0xA8, 0xF8, 0x2F, 0x38, 0x3D, 0xBF-  },-  {-    0x7D, 0x62, 0x0D, 0x90, 0xFE, 0x69, 0xFA, 0x46,-    0x9A, 0x65, 0x38, 0x38, 0x89, 0x70, 0xA1, 0xAA,-    0x09, 0xBB, 0x48, 0xA2, 0xD5, 0x9B, 0x34, 0x7B,-    0x97, 0xE8, 0xCE, 0x71, 0xF4, 0x8C, 0x7F, 0x46-  },-  {-    0x29, 0x43, 0x83, 0x56, 0x85, 0x96, 0xFB, 0x37,-    0xC7, 0x5B, 0xBA, 0xCD, 0x97, 0x9C, 0x5F, 0xF6,-    0xF2, 0x0A, 0x55, 0x6B, 0xF8, 0x87, 0x9C, 0xC7,-    0x29, 0x24, 0x85, 0x5D, 0xF9, 0xB8, 0x24, 0x0E-  },-  {-    0x16, 0xB1, 0x8A, 0xB3, 0x14, 0x35, 0x9C, 0x2B,-    0x83, 0x3C, 0x1C, 0x69, 0x86, 0xD4, 0x8C, 0x55,-    0xA9, 0xFC, 0x97, 0xCD, 0xE9, 0xA3, 0xC1, 0xF1,-    0x0A, 0x31, 0x77, 0x14, 0x0F, 0x73, 0xF7, 0x38-  },-  {-    0x8C, 0xBB, 0xDD, 0x14, 0xBC, 0x33, 0xF0, 0x4C,-    0xF4, 0x58, 0x13, 0xE4, 0xA1, 0x53, 0xA2, 0x73,-    0xD3, 0x6A, 0xDA, 0xD5, 0xCE, 0x71, 0xF4, 0x99,-    0xEE, 0xB8, 0x7F, 0xB8, 0xAC, 0x63, 0xB7, 0x29-  },-  {-    0x69, 0xC9, 0xA4, 0x98, 0xDB, 0x17, 0x4E, 0xCA,-    0xEF, 0xCC, 0x5A, 0x3A, 0xC9, 0xFD, 0xED, 0xF0,-    0xF8, 0x13, 0xA5, 0xBE, 0xC7, 0x27, 0xF1, 0xE7,-    0x75, 0xBA, 0xBD, 0xEC, 0x77, 0x18, 0x81, 0x6E-  },-  {-    0xB4, 0x62, 0xC3, 0xBE, 0x40, 0x44, 0x8F, 0x1D,-    0x4F, 0x80, 0x62, 0x62, 0x54, 0xE5, 0x35, 0xB0,-    0x8B, 0xC9, 0xCD, 0xCF, 0xF5, 0x99, 0xA7, 0x68,-    0x57, 0x8D, 0x4B, 0x28, 0x81, 0xA8, 0xE3, 0xF0-  },-  {-    0x55, 0x3E, 0x9D, 0x9C, 0x5F, 0x36, 0x0A, 0xC0,-    0xB7, 0x4A, 0x7D, 0x44, 0xE5, 0xA3, 0x91, 0xDA,-    0xD4, 0xCE, 0xD0, 0x3E, 0x0C, 0x24, 0x18, 0x3B,-    0x7E, 0x8E, 0xCA, 0xBD, 0xF1, 0x71, 0x5A, 0x64-  },-  {-    0x7A, 0x7C, 0x55, 0xA5, 0x6F, 0xA9, 0xAE, 0x51,-    0xE6, 0x55, 0xE0, 0x19, 0x75, 0xD8, 0xA6, 0xFF,-    0x4A, 0xE9, 0xE4, 0xB4, 0x86, 0xFC, 0xBE, 0x4E,-    0xAC, 0x04, 0x45, 0x88, 0xF2, 0x45, 0xEB, 0xEA-  },-  {-    0x2A, 0xFD, 0xF3, 0xC8, 0x2A, 0xBC, 0x48, 0x67,-    0xF5, 0xDE, 0x11, 0x12, 0x86, 0xC2, 0xB3, 0xBE,-    0x7D, 0x6E, 0x48, 0x65, 0x7B, 0xA9, 0x23, 0xCF,-    0xBF, 0x10, 0x1A, 0x6D, 0xFC, 0xF9, 0xDB, 0x9A-  },-  {-    0x41, 0x03, 0x7D, 0x2E, 0xDC, 0xDC, 0xE0, 0xC4,-    0x9B, 0x7F, 0xB4, 0xA6, 0xAA, 0x09, 0x99, 0xCA,-    0x66, 0x97, 0x6C, 0x74, 0x83, 0xAF, 0xE6, 0x31,-    0xD4, 0xED, 0xA2, 0x83, 0x14, 0x4F, 0x6D, 0xFC-  },-  {-    0xC4, 0x46, 0x6F, 0x84, 0x97, 0xCA, 0x2E, 0xEB,-    0x45, 0x83, 0xA0, 0xB0, 0x8E, 0x9D, 0x9A, 0xC7,-    0x43, 0x95, 0x70, 0x9F, 0xDA, 0x10, 0x9D, 0x24,-    0xF2, 0xE4, 0x46, 0x21, 0x96, 0x77, 0x9C, 0x5D-  },-  {-    0x75, 0xF6, 0x09, 0x33, 0x8A, 0xA6, 0x7D, 0x96,-    0x9A, 0x2A, 0xE2, 0xA2, 0x36, 0x2B, 0x2D, 0xA9,-    0xD7, 0x7C, 0x69, 0x5D, 0xFD, 0x1D, 0xF7, 0x22,-    0x4A, 0x69, 0x01, 0xDB, 0x93, 0x2C, 0x33, 0x64-  },-  {-    0x68, 0x60, 0x6C, 0xEB, 0x98, 0x9D, 0x54, 0x88,-    0xFC, 0x7C, 0xF6, 0x49, 0xF3, 0xD7, 0xC2, 0x72,-    0xEF, 0x05, 0x5D, 0xA1, 0xA9, 0x3F, 0xAE, 0xCD,-    0x55, 0xFE, 0x06, 0xF6, 0x96, 0x70, 0x98, 0xCA-  },-  {-    0x44, 0x34, 0x6B, 0xDE, 0xB7, 0xE0, 0x52, 0xF6,-    0x25, 0x50, 0x48, 0xF0, 0xD9, 0xB4, 0x2C, 0x42,-    0x5B, 0xAB, 0x9C, 0x3D, 0xD2, 0x41, 0x68, 0x21,-    0x2C, 0x3E, 0xCF, 0x1E, 0xBF, 0x34, 0xE6, 0xAE-  },-  {-    0x8E, 0x9C, 0xF6, 0xE1, 0xF3, 0x66, 0x47, 0x1F,-    0x2A, 0xC7, 0xD2, 0xEE, 0x9B, 0x5E, 0x62, 0x66,-    0xFD, 0xA7, 0x1F, 0x8F, 0x2E, 0x41, 0x09, 0xF2,-    0x23, 0x7E, 0xD5, 0xF8, 0x81, 0x3F, 0xC7, 0x18-  },-  {-    0x84, 0xBB, 0xEB, 0x84, 0x06, 0xD2, 0x50, 0x95,-    0x1F, 0x8C, 0x1B, 0x3E, 0x86, 0xA7, 0xC0, 0x10,-    0x08, 0x29, 0x21, 0x83, 0x3D, 0xFD, 0x95, 0x55,-    0xA2, 0xF9, 0x09, 0xB1, 0x08, 0x6E, 0xB4, 0xB8-  },-  {-    0xEE, 0x66, 0x6F, 0x3E, 0xEF, 0x0F, 0x7E, 0x2A,-    0x9C, 0x22, 0x29, 0x58, 0xC9, 0x7E, 0xAF, 0x35,-    0xF5, 0x1C, 0xED, 0x39, 0x3D, 0x71, 0x44, 0x85,-    0xAB, 0x09, 0xA0, 0x69, 0x34, 0x0F, 0xDF, 0x88-  },-  {-    0xC1, 0x53, 0xD3, 0x4A, 0x65, 0xC4, 0x7B, 0x4A,-    0x62, 0xC5, 0xCA, 0xCF, 0x24, 0x01, 0x09, 0x75,-    0xD0, 0x35, 0x6B, 0x2F, 0x32, 0xC8, 0xF5, 0xDA,-    0x53, 0x0D, 0x33, 0x88, 0x16, 0xAD, 0x5D, 0xE6-  },-  {-    0x9F, 0xC5, 0x45, 0x01, 0x09, 0xE1, 0xB7, 0x79,-    0xF6, 0xC7, 0xAE, 0x79, 0xD5, 0x6C, 0x27, 0x63,-    0x5C, 0x8D, 0xD4, 0x26, 0xC5, 0xA9, 0xD5, 0x4E,-    0x25, 0x78, 0xDB, 0x98, 0x9B, 0x8C, 0x3B, 0x4E-  },-  {-    0xD1, 0x2B, 0xF3, 0x73, 0x2E, 0xF4, 0xAF, 0x5C,-    0x22, 0xFA, 0x90, 0x35, 0x6A, 0xF8, 0xFC, 0x50,-    0xFC, 0xB4, 0x0F, 0x8F, 0x2E, 0xA5, 0xC8, 0x59,-    0x47, 0x37, 0xA3, 0xB3, 0xD5, 0xAB, 0xDB, 0xD7-  },-  {-    0x11, 0x03, 0x0B, 0x92, 0x89, 0xBB, 0xA5, 0xAF,-    0x65, 0x26, 0x06, 0x72, 0xAB, 0x6F, 0xEE, 0x88,-    0xB8, 0x74, 0x20, 0xAC, 0xEF, 0x4A, 0x17, 0x89,-    0xA2, 0x07, 0x3B, 0x7E, 0xC2, 0xF2, 0xA0, 0x9E-  },-  {-    0x69, 0xCB, 0x19, 0x2B, 0x84, 0x44, 0x00, 0x5C,-    0x8C, 0x0C, 0xEB, 0x12, 0xC8, 0x46, 0x86, 0x07,-    0x68, 0x18, 0x8C, 0xDA, 0x0A, 0xEC, 0x27, 0xA9,-    0xC8, 0xA5, 0x5C, 0xDE, 0xE2, 0x12, 0x36, 0x32-  },-  {-    0xDB, 0x44, 0x4C, 0x15, 0x59, 0x7B, 0x5F, 0x1A,-    0x03, 0xD1, 0xF9, 0xED, 0xD1, 0x6E, 0x4A, 0x9F,-    0x43, 0xA6, 0x67, 0xCC, 0x27, 0x51, 0x75, 0xDF,-    0xA2, 0xB7, 0x04, 0xE3, 0xBB, 0x1A, 0x9B, 0x83-  },-  {-    0x3F, 0xB7, 0x35, 0x06, 0x1A, 0xBC, 0x51, 0x9D,-    0xFE, 0x97, 0x9E, 0x54, 0xC1, 0xEE, 0x5B, 0xFA,-    0xD0, 0xA9, 0xD8, 0x58, 0xB3, 0x31, 0x5B, 0xAD,-    0x34, 0xBD, 0xE9, 0x99, 0xEF, 0xD7, 0x24, 0xDD-  },-};-----static const uint8_t blake2b_kat[KAT_LENGTH][BLAKE2B_OUTBYTES] =-{-  {-    0x78, 0x6A, 0x02, 0xF7, 0x42, 0x01, 0x59, 0x03,-    0xC6, 0xC6, 0xFD, 0x85, 0x25, 0x52, 0xD2, 0x72,-    0x91, 0x2F, 0x47, 0x40, 0xE1, 0x58, 0x47, 0x61,-    0x8A, 0x86, 0xE2, 0x17, 0xF7, 0x1F, 0x54, 0x19,-    0xD2, 0x5E, 0x10, 0x31, 0xAF, 0xEE, 0x58, 0x53,-    0x13, 0x89, 0x64, 0x44, 0x93, 0x4E, 0xB0, 0x4B,-    0x90, 0x3A, 0x68, 0x5B, 0x14, 0x48, 0xB7, 0x55,-    0xD5, 0x6F, 0x70, 0x1A, 0xFE, 0x9B, 0xE2, 0xCE-  },-  {-    0x2F, 0xA3, 0xF6, 0x86, 0xDF, 0x87, 0x69, 0x95,-    0x16, 0x7E, 0x7C, 0x2E, 0x5D, 0x74, 0xC4, 0xC7,-    0xB6, 0xE4, 0x8F, 0x80, 0x68, 0xFE, 0x0E, 0x44,-    0x20, 0x83, 0x44, 0xD4, 0x80, 0xF7, 0x90, 0x4C,-    0x36, 0x96, 0x3E, 0x44, 0x11, 0x5F, 0xE3, 0xEB,-    0x2A, 0x3A, 0xC8, 0x69, 0x4C, 0x28, 0xBC, 0xB4,-    0xF5, 0xA0, 0xF3, 0x27, 0x6F, 0x2E, 0x79, 0x48,-    0x7D, 0x82, 0x19, 0x05, 0x7A, 0x50, 0x6E, 0x4B-  },-  {-    0x1C, 0x08, 0x79, 0x8D, 0xC6, 0x41, 0xAB, 0xA9,-    0xDE, 0xE4, 0x35, 0xE2, 0x25, 0x19, 0xA4, 0x72,-    0x9A, 0x09, 0xB2, 0xBF, 0xE0, 0xFF, 0x00, 0xEF,-    0x2D, 0xCD, 0x8E, 0xD6, 0xF8, 0xA0, 0x7D, 0x15,-    0xEA, 0xF4, 0xAE, 0xE5, 0x2B, 0xBF, 0x18, 0xAB,-    0x56, 0x08, 0xA6, 0x19, 0x0F, 0x70, 0xB9, 0x04,-    0x86, 0xC8, 0xA7, 0xD4, 0x87, 0x37, 0x10, 0xB1,-    0x11, 0x5D, 0x3D, 0xEB, 0xBB, 0x43, 0x27, 0xB5-  },-  {-    0x40, 0xA3, 0x74, 0x72, 0x73, 0x02, 0xD9, 0xA4,-    0x76, 0x9C, 0x17, 0xB5, 0xF4, 0x09, 0xFF, 0x32,-    0xF5, 0x8A, 0xA2, 0x4F, 0xF1, 0x22, 0xD7, 0x60,-    0x3E, 0x4F, 0xDA, 0x15, 0x09, 0xE9, 0x19, 0xD4,-    0x10, 0x7A, 0x52, 0xC5, 0x75, 0x70, 0xA6, 0xD9,-    0x4E, 0x50, 0x96, 0x7A, 0xEA, 0x57, 0x3B, 0x11,-    0xF8, 0x6F, 0x47, 0x3F, 0x53, 0x75, 0x65, 0xC6,-    0x6F, 0x70, 0x39, 0x83, 0x0A, 0x85, 0xD1, 0x86-  },-  {-    0x77, 0xDD, 0xF4, 0xB1, 0x44, 0x25, 0xEB, 0x3D,-    0x05, 0x3C, 0x1E, 0x84, 0xE3, 0x46, 0x9D, 0x92,-    0xC4, 0xCD, 0x91, 0x0E, 0xD2, 0x0F, 0x92, 0x03,-    0x5E, 0x0C, 0x99, 0xD8, 0xA7, 0xA8, 0x6C, 0xEC,-    0xAF, 0x69, 0xF9, 0x66, 0x3C, 0x20, 0xA7, 0xAA,-    0x23, 0x0B, 0xC8, 0x2F, 0x60, 0xD2, 0x2F, 0xB4,-    0xA0, 0x0B, 0x09, 0xD3, 0xEB, 0x8F, 0xC6, 0x5E,-    0xF5, 0x47, 0xFE, 0x63, 0xC8, 0xD3, 0xDD, 0xCE-  },-  {-    0xCB, 0xAA, 0x0B, 0xA7, 0xD4, 0x82, 0xB1, 0xF3,-    0x01, 0x10, 0x9A, 0xE4, 0x10, 0x51, 0x99, 0x1A,-    0x32, 0x89, 0xBC, 0x11, 0x98, 0x00, 0x5A, 0xF2,-    0x26, 0xC5, 0xE4, 0xF1, 0x03, 0xB6, 0x65, 0x79,-    0xF4, 0x61, 0x36, 0x10, 0x44, 0xC8, 0xBA, 0x34,-    0x39, 0xFF, 0x12, 0xC5, 0x15, 0xFB, 0x29, 0xC5,-    0x21, 0x61, 0xB7, 0xEB, 0x9C, 0x28, 0x37, 0xB7,-    0x6A, 0x5D, 0xC3, 0x3F, 0x7C, 0xB2, 0xE2, 0xE8-  },-  {-    0xF9, 0x5D, 0x45, 0xCF, 0x69, 0xAF, 0x5C, 0x20,-    0x23, 0xBD, 0xB5, 0x05, 0x82, 0x1E, 0x62, 0xE8,-    0x5D, 0x7C, 0xAE, 0xDF, 0x7B, 0xED, 0xA1, 0x2C,-    0x02, 0x48, 0x77, 0x5B, 0x0C, 0x88, 0x20, 0x5E,-    0xEB, 0x35, 0xAF, 0x3A, 0x90, 0x81, 0x6F, 0x66,-    0x08, 0xCE, 0x7D, 0xD4, 0x4E, 0xC2, 0x8D, 0xB1,-    0x14, 0x06, 0x14, 0xE1, 0xDD, 0xEB, 0xF3, 0xAA,-    0x9C, 0xD1, 0x84, 0x3E, 0x0F, 0xAD, 0x2C, 0x36-  },-  {-    0x8F, 0x94, 0x5B, 0xA7, 0x00, 0xF2, 0x53, 0x0E,-    0x5C, 0x2A, 0x7D, 0xF7, 0xD5, 0xDC, 0xE0, 0xF8,-    0x3F, 0x9E, 0xFC, 0x78, 0xC0, 0x73, 0xFE, 0x71,-    0xAE, 0x1F, 0x88, 0x20, 0x4A, 0x4F, 0xD1, 0xCF,-    0x70, 0xA0, 0x73, 0xF5, 0xD1, 0xF9, 0x42, 0xED,-    0x62, 0x3A, 0xA1, 0x6E, 0x90, 0xA8, 0x71, 0x24,-    0x6C, 0x90, 0xC4, 0x5B, 0x62, 0x1B, 0x34, 0x01,-    0xA5, 0xDD, 0xBD, 0x9D, 0xF6, 0x26, 0x41, 0x65-  },-  {-    0xE9, 0x98, 0xE0, 0xDC, 0x03, 0xEC, 0x30, 0xEB,-    0x99, 0xBB, 0x6B, 0xFA, 0xAF, 0x66, 0x18, 0xAC,-    0xC6, 0x20, 0x32, 0x0D, 0x72, 0x20, 0xB3, 0xAF,-    0x2B, 0x23, 0xD1, 0x12, 0xD8, 0xE9, 0xCB, 0x12,-    0x62, 0xF3, 0xC0, 0xD6, 0x0D, 0x18, 0x3B, 0x1E,-    0xE7, 0xF0, 0x96, 0xD1, 0x2D, 0xAE, 0x42, 0xC9,-    0x58, 0x41, 0x86, 0x00, 0x21, 0x4D, 0x04, 0xF5,-    0xED, 0x6F, 0x5E, 0x71, 0x8B, 0xE3, 0x55, 0x66-  },-  {-    0x6A, 0x9A, 0x09, 0x0C, 0x61, 0xB3, 0x41, 0x0A,-    0xED, 0xE7, 0xEC, 0x91, 0x38, 0x14, 0x6C, 0xEB,-    0x2C, 0x69, 0x66, 0x2F, 0x46, 0x0C, 0x3D, 0xA5,-    0x3C, 0x65, 0x15, 0xC1, 0xEB, 0x31, 0xF4, 0x1C,-    0xA3, 0xD2, 0x80, 0xE5, 0x67, 0x88, 0x2F, 0x95,-    0xCF, 0x66, 0x4A, 0x94, 0x14, 0x7D, 0x78, 0xF4,-    0x2C, 0xFC, 0x71, 0x4A, 0x40, 0xD2, 0x2E, 0xF1,-    0x94, 0x70, 0xE0, 0x53, 0x49, 0x35, 0x08, 0xA2-  },-  {-    0x29, 0x10, 0x25, 0x11, 0xD7, 0x49, 0xDB, 0x3C,-    0xC9, 0xB4, 0xE3, 0x35, 0xFA, 0x1F, 0x5E, 0x8F,-    0xAC, 0xA8, 0x42, 0x1D, 0x55, 0x8F, 0x6A, 0x3F,-    0x33, 0x21, 0xD5, 0x0D, 0x04, 0x4A, 0x24, 0x8B,-    0xA5, 0x95, 0xCF, 0xC3, 0xEF, 0xD3, 0xD2, 0xAD,-    0xC9, 0x73, 0x34, 0xDA, 0x73, 0x24, 0x13, 0xF5,-    0xCB, 0xF4, 0x75, 0x1C, 0x36, 0x2B, 0xA1, 0xD5,-    0x38, 0x62, 0xAC, 0x1E, 0x8D, 0xAB, 0xEE, 0xE8-  },-  {-    0xC9, 0x7A, 0x47, 0x79, 0xD4, 0x7E, 0x6F, 0x77,-    0x72, 0x9B, 0x59, 0x17, 0xD0, 0x13, 0x8A, 0xBB,-    0x35, 0x98, 0x0A, 0xB6, 0x41, 0xBD, 0x73, 0xA8,-    0x85, 0x9E, 0xB1, 0xAC, 0x98, 0xC0, 0x53, 0x62,-    0xED, 0x7D, 0x60, 0x8F, 0x2E, 0x95, 0x87, 0xD6,-    0xBA, 0x9E, 0x27, 0x1D, 0x34, 0x31, 0x25, 0xD4,-    0x0D, 0x93, 0x3A, 0x8E, 0xD0, 0x4E, 0xC1, 0xFE,-    0x75, 0xEC, 0x40, 0x7C, 0x7A, 0x53, 0xC3, 0x4E-  },-  {-    0x10, 0xF0, 0xDC, 0x91, 0xB9, 0xF8, 0x45, 0xFB,-    0x95, 0xFA, 0xD6, 0x86, 0x0E, 0x6C, 0xE1, 0xAD,-    0xFA, 0x00, 0x2C, 0x7F, 0xC3, 0x27, 0x11, 0x6D,-    0x44, 0xD0, 0x47, 0xCD, 0x7D, 0x58, 0x70, 0xD7,-    0x72, 0xBB, 0x12, 0xB5, 0xFA, 0xC0, 0x0E, 0x02,-    0xB0, 0x8A, 0xC2, 0xA0, 0x17, 0x4D, 0x04, 0x46,-    0xC3, 0x6A, 0xB3, 0x5F, 0x14, 0xCA, 0x31, 0x89,-    0x4C, 0xD6, 0x1C, 0x78, 0xC8, 0x49, 0xB4, 0x8A-  },-  {-    0xDE, 0xA9, 0x10, 0x1C, 0xAC, 0x62, 0xB8, 0xF6,-    0xA3, 0xC6, 0x50, 0xF9, 0x0E, 0xEA, 0x5B, 0xFA,-    0xE2, 0x65, 0x3A, 0x4E, 0xAF, 0xD6, 0x3A, 0x6D,-    0x1F, 0x0F, 0x13, 0x2D, 0xB9, 0xE4, 0xF2, 0xB1,-    0xB6, 0x62, 0x43, 0x2E, 0xC8, 0x5B, 0x17, 0xBC,-    0xAC, 0x41, 0xE7, 0x75, 0x63, 0x78, 0x81, 0xF6,-    0xAA, 0xB3, 0x8D, 0xD6, 0x6D, 0xCB, 0xD0, 0x80,-    0xF0, 0x99, 0x0A, 0x7A, 0x6E, 0x98, 0x54, 0xFE-  },-  {-    0x44, 0x1F, 0xFA, 0xA0, 0x8C, 0xD7, 0x9D, 0xFF,-    0x4A, 0xFC, 0x9B, 0x9E, 0x5B, 0x56, 0x20, 0xEE,-    0xC0, 0x86, 0x73, 0x0C, 0x25, 0xF6, 0x61, 0xB1,-    0xD6, 0xFB, 0xFB, 0xD1, 0xCE, 0xC3, 0x14, 0x8D,-    0xD7, 0x22, 0x58, 0xC6, 0x56, 0x41, 0xF2, 0xFC,-    0xA5, 0xEB, 0x15, 0x5F, 0xAD, 0xBC, 0xAB, 0xB1,-    0x3C, 0x6E, 0x21, 0xDC, 0x11, 0xFA, 0xF7, 0x2C,-    0x2A, 0x28, 0x1B, 0x7D, 0x56, 0x14, 0x5F, 0x19-  },-  {-    0x44, 0x4B, 0x24, 0x0F, 0xE3, 0xED, 0x86, 0xD0,-    0xE2, 0xEF, 0x4C, 0xE7, 0xD8, 0x51, 0xED, 0xDE,-    0x22, 0x15, 0x55, 0x82, 0xAA, 0x09, 0x14, 0x79,-    0x7B, 0x72, 0x6C, 0xD0, 0x58, 0xB6, 0xF4, 0x59,-    0x32, 0xE0, 0xE1, 0x29, 0x51, 0x68, 0x76, 0x52,-    0x7B, 0x1D, 0xD8, 0x8F, 0xC6, 0x6D, 0x71, 0x19,-    0xF4, 0xAB, 0x3B, 0xED, 0x93, 0xA6, 0x1A, 0x0E,-    0x2D, 0x2D, 0x2A, 0xEA, 0xC3, 0x36, 0xD9, 0x58-  },-  {-    0xBF, 0xBA, 0xBB, 0xEF, 0x45, 0x55, 0x4C, 0xCF,-    0xA0, 0xDC, 0x83, 0x75, 0x2A, 0x19, 0xCC, 0x35,-    0xD5, 0x92, 0x09, 0x56, 0xB3, 0x01, 0xD5, 0x58,-    0xD7, 0x72, 0x28, 0x2B, 0xC8, 0x67, 0x00, 0x91,-    0x68, 0xE9, 0xE9, 0x86, 0x06, 0xBB, 0x5B, 0xA7,-    0x3A, 0x38, 0x5D, 0xE5, 0x74, 0x92, 0x28, 0xC9,-    0x25, 0xA8, 0x50, 0x19, 0xB7, 0x1F, 0x72, 0xFE,-    0x29, 0xB3, 0xCD, 0x37, 0xCA, 0x52, 0xEF, 0xE6-  },-  {-    0x9C, 0x4D, 0x0C, 0x3E, 0x1C, 0xDB, 0xBF, 0x48,-    0x5B, 0xEC, 0x86, 0xF4, 0x1C, 0xEC, 0x7C, 0x98,-    0x37, 0x3F, 0x0E, 0x09, 0xF3, 0x92, 0x84, 0x9A,-    0xAA, 0x22, 0x9E, 0xBF, 0xBF, 0x39, 0x7B, 0x22,-    0x08, 0x55, 0x29, 0xCB, 0x7E, 0xF3, 0x9F, 0x9C,-    0x7C, 0x22, 0x22, 0xA5, 0x14, 0x18, 0x2B, 0x1E,-    0xFF, 0xAA, 0x17, 0x8C, 0xC3, 0x68, 0x7B, 0x1B,-    0x2B, 0x6C, 0xBC, 0xB6, 0xFD, 0xEB, 0x96, 0xF8-  },-  {-    0x47, 0x71, 0x76, 0xB3, 0xBF, 0xCB, 0xAD, 0xD7,-    0x65, 0x7C, 0x23, 0xC2, 0x46, 0x25, 0xE4, 0xD0,-    0xD6, 0x74, 0xD1, 0x86, 0x8F, 0x00, 0x60, 0x06,-    0x39, 0x8A, 0xF9, 0x7A, 0xA4, 0x18, 0x77, 0xC8,-    0xE7, 0x0D, 0x3D, 0x14, 0xC3, 0xBB, 0xC9, 0xBB,-    0xCD, 0xCE, 0xA8, 0x01, 0xBD, 0x0E, 0x15, 0x99,-    0xAF, 0x1F, 0x3E, 0xEC, 0x67, 0x40, 0x51, 0x70,-    0xF4, 0xE2, 0x6C, 0x96, 0x4A, 0x57, 0xA8, 0xB7-  },-  {-    0xA7, 0x8C, 0x49, 0x0E, 0xDA, 0x31, 0x73, 0xBB,-    0x3F, 0x10, 0xDE, 0xE5, 0x2F, 0x11, 0x0F, 0xB1,-    0xC0, 0x8E, 0x03, 0x02, 0x23, 0x0B, 0x85, 0xDD,-    0xD7, 0xC1, 0x12, 0x57, 0xD9, 0x2D, 0xE1, 0x48,-    0x78, 0x5E, 0xF0, 0x0C, 0x03, 0x9C, 0x0B, 0xB8,-    0xEB, 0x98, 0x08, 0xA3, 0x5B, 0x2D, 0x8C, 0x08,-    0x0F, 0x57, 0x28, 0x59, 0x71, 0x4C, 0x9D, 0x40,-    0x69, 0xC5, 0xBC, 0xAF, 0x09, 0x0E, 0x89, 0x8E-  },-  {-    0x58, 0xD0, 0x23, 0x39, 0x7B, 0xEB, 0x5B, 0x41,-    0x45, 0xCB, 0x22, 0x55, 0xB0, 0x7D, 0x74, 0x29,-    0x0B, 0x36, 0xD9, 0xFD, 0x1E, 0x59, 0x4A, 0xFB,-    0xD8, 0xEE, 0xA4, 0x7C, 0x20, 0x5B, 0x2E, 0xFB,-    0xFE, 0x6F, 0x46, 0x19, 0x0F, 0xAF, 0x95, 0xAF,-    0x50, 0x4A, 0xB0, 0x72, 0xE3, 0x6F, 0x6C, 0x85,-    0xD7, 0x67, 0xA3, 0x21, 0xBF, 0xD7, 0xF2, 0x26,-    0x87, 0xA4, 0xAB, 0xBF, 0x49, 0x4A, 0x68, 0x9C-  },-  {-    0x40, 0x01, 0xEC, 0x74, 0xD5, 0xA4, 0x6F, 0xD2,-    0x9C, 0x2C, 0x3C, 0xDB, 0xE5, 0xD1, 0xB9, 0xF2,-    0x0E, 0x51, 0xA9, 0x41, 0xBE, 0x98, 0xD2, 0xA4,-    0xE1, 0xE2, 0xFB, 0xF8, 0x66, 0xA6, 0x72, 0x12,-    0x1D, 0xB6, 0xF8, 0x1A, 0x51, 0x4C, 0xFD, 0x10,-    0xE7, 0x35, 0x8D, 0x57, 0x1B, 0xDB, 0xA4, 0x8E,-    0x4C, 0xE7, 0x08, 0xB9, 0xD1, 0x24, 0x89, 0x4B,-    0xC0, 0xB5, 0xED, 0x55, 0x49, 0x35, 0xF7, 0x3A-  },-  {-    0xCC, 0xD1, 0xB2, 0x2D, 0xAB, 0x65, 0x11, 0x22,-    0x5D, 0x24, 0x01, 0xEA, 0x2D, 0x86, 0x25, 0xD2,-    0x06, 0xA1, 0x24, 0x73, 0xCC, 0x73, 0x2B, 0x61,-    0x5E, 0x56, 0x40, 0xCE, 0xFF, 0xF0, 0xA4, 0xAD,-    0xF9, 0x71, 0xB0, 0xE8, 0x27, 0xA6, 0x19, 0xE0,-    0xA8, 0x0F, 0x5D, 0xB9, 0xCC, 0xD0, 0x96, 0x23,-    0x29, 0x01, 0x0D, 0x07, 0xE3, 0x4A, 0x20, 0x64,-    0xE7, 0x31, 0xC5, 0x20, 0x81, 0x7B, 0x21, 0x83-  },-  {-    0xB4, 0xA0, 0xA9, 0xE3, 0x57, 0x4E, 0xDB, 0x9E,-    0x1E, 0x72, 0xAA, 0x31, 0xE3, 0x9C, 0xC5, 0xF3,-    0x0D, 0xBF, 0x94, 0x3F, 0x8C, 0xAB, 0xC4, 0x08,-    0x44, 0x96, 0x54, 0xA3, 0x91, 0x31, 0xE6, 0x6D,-    0x71, 0x8A, 0x18, 0x81, 0x91, 0x43, 0xE3, 0xEA,-    0x96, 0xB4, 0xA1, 0x89, 0x59, 0x88, 0xA1, 0xC0,-    0x05, 0x6C, 0xF2, 0xB6, 0xE0, 0x4F, 0x9A, 0xC1,-    0x9D, 0x65, 0x73, 0x83, 0xC2, 0x91, 0x0C, 0x44-  },-  {-    0x44, 0x7B, 0xEC, 0xAB, 0x16, 0x63, 0x06, 0x08,-    0xD3, 0x9F, 0x4F, 0x05, 0x8B, 0x16, 0xF7, 0xAF,-    0x95, 0xB8, 0x5A, 0x76, 0xAA, 0x0F, 0xA7, 0xCE,-    0xA2, 0xB8, 0x07, 0x55, 0xFB, 0x76, 0xE9, 0xC8,-    0x04, 0xF2, 0xCA, 0x78, 0xF0, 0x26, 0x43, 0xC9,-    0x15, 0xFB, 0xF2, 0xFC, 0xE5, 0xE1, 0x9D, 0xE8,-    0x60, 0x00, 0xDE, 0x03, 0xB1, 0x88, 0x61, 0x81,-    0x5A, 0x83, 0x12, 0x60, 0x71, 0xF8, 0xA3, 0x7B-  },-  {-    0x54, 0xE6, 0xDA, 0xB9, 0x97, 0x73, 0x80, 0xA5,-    0x66, 0x58, 0x22, 0xDB, 0x93, 0x37, 0x4E, 0xDA,-    0x52, 0x8D, 0x9B, 0xEB, 0x62, 0x6F, 0x9B, 0x94,-    0x02, 0x70, 0x71, 0xCB, 0x26, 0x67, 0x5E, 0x11,-    0x2B, 0x4A, 0x7F, 0xEC, 0x94, 0x1E, 0xE6, 0x0A,-    0x81, 0xE4, 0xD2, 0xEA, 0x3F, 0xF7, 0xBC, 0x52,-    0xCF, 0xC4, 0x5D, 0xFB, 0xFE, 0x73, 0x5A, 0x1C,-    0x64, 0x6B, 0x2C, 0xF6, 0xD6, 0xA4, 0x9B, 0x62-  },-  {-    0x3E, 0xA6, 0x26, 0x25, 0x94, 0x9E, 0x36, 0x46,-    0x70, 0x4D, 0x7E, 0x3C, 0x90, 0x6F, 0x82, 0xF6,-    0xC0, 0x28, 0xF5, 0x40, 0xF5, 0xF7, 0x2A, 0x79,-    0x4B, 0x0C, 0x57, 0xBF, 0x97, 0xB7, 0x64, 0x9B,-    0xFE, 0xB9, 0x0B, 0x01, 0xD3, 0xCA, 0x3E, 0x82,-    0x9D, 0xE2, 0x1B, 0x38, 0x26, 0xE6, 0xF8, 0x70,-    0x14, 0xD3, 0xC7, 0x73, 0x50, 0xCB, 0x5A, 0x15,-    0xFF, 0x5D, 0x46, 0x8A, 0x81, 0xBE, 0xC1, 0x60-  },-  {-    0x21, 0x3C, 0xFE, 0x14, 0x5C, 0x54, 0xA3, 0x36,-    0x91, 0x56, 0x99, 0x80, 0xE5, 0x93, 0x8C, 0x88,-    0x83, 0xA4, 0x6D, 0x84, 0xD1, 0x49, 0xC8, 0xFF,-    0x1A, 0x67, 0xCD, 0x28, 0x7B, 0x4D, 0x49, 0xC6,-    0xDA, 0x69, 0xD3, 0xA0, 0x35, 0x44, 0x3D, 0xB0,-    0x85, 0x98, 0x3D, 0x0E, 0xFE, 0x63, 0x70, 0x6B,-    0xD5, 0xB6, 0xF1, 0x5A, 0x7D, 0xA4, 0x59, 0xE8,-    0xD5, 0x0A, 0x19, 0x09, 0x3D, 0xB5, 0x5E, 0x80-  },-  {-    0x57, 0x16, 0xC4, 0xA3, 0x8F, 0x38, 0xDB, 0x10,-    0x4E, 0x49, 0x4A, 0x0A, 0x27, 0xCB, 0xE8, 0x9A,-    0x26, 0xA6, 0xBB, 0x6F, 0x49, 0x9E, 0xC0, 0x1C,-    0x8C, 0x01, 0xAA, 0x7C, 0xB8, 0x84, 0x97, 0xE7,-    0x51, 0x48, 0xCD, 0x6E, 0xEE, 0x12, 0xA7, 0x16,-    0x8B, 0x6F, 0x78, 0xAB, 0x74, 0xE4, 0xBE, 0x74,-    0x92, 0x51, 0xA1, 0xA7, 0x4C, 0x38, 0xC8, 0x6D,-    0x61, 0x29, 0x17, 0x7E, 0x28, 0x89, 0xE0, 0xB6-  },-  {-    0x03, 0x04, 0x60, 0xA9, 0x8B, 0xDF, 0x9F, 0xF1,-    0x7C, 0xD9, 0x64, 0x04, 0xF2, 0x8F, 0xC3, 0x04,-    0xF2, 0xB7, 0xC0, 0x4E, 0xAA, 0xDE, 0x53, 0x67,-    0x7F, 0xD2, 0x8F, 0x78, 0x8C, 0xA2, 0x21, 0x86,-    0xB8, 0xBC, 0x80, 0xDD, 0x21, 0xD1, 0x7F, 0x85,-    0x49, 0xC7, 0x11, 0xAF, 0xF0, 0xE5, 0x14, 0xE1,-    0x9D, 0x4E, 0x15, 0xF5, 0x99, 0x02, 0x52, 0xA0,-    0x3E, 0x08, 0x2F, 0x28, 0xDC, 0x20, 0x52, 0xF6-  },-  {-    0x19, 0xE7, 0xF1, 0xCC, 0xEE, 0x88, 0xA1, 0x06,-    0x72, 0x33, 0x3E, 0x39, 0x0C, 0xF2, 0x20, 0x13,-    0xA8, 0xC7, 0x34, 0xC6, 0xCB, 0x9E, 0xAB, 0x41,-    0xF1, 0x7C, 0x3C, 0x80, 0x32, 0xA2, 0xE4, 0xAC,-    0xA0, 0x56, 0x9E, 0xA3, 0x6F, 0x08, 0x60, 0xC7,-    0xA1, 0xAF, 0x28, 0xFA, 0x47, 0x68, 0x40, 0xD6,-    0x60, 0x11, 0x16, 0x88, 0x59, 0x33, 0x4A, 0x9E,-    0x4E, 0xF9, 0xCC, 0x2E, 0x61, 0xA0, 0xE2, 0x9E-  },-  {-    0x29, 0xF8, 0xB8, 0xC7, 0x8C, 0x80, 0xF2, 0xFC,-    0xB4, 0xBD, 0xF7, 0x82, 0x5E, 0xD9, 0x0A, 0x70,-    0xD6, 0x25, 0xFF, 0x78, 0x5D, 0x26, 0x26, 0x77,-    0xE2, 0x50, 0xC0, 0x4F, 0x37, 0x20, 0xC8, 0x88,-    0xD0, 0x3F, 0x80, 0x45, 0xE4, 0xED, 0xF3, 0xF5,-    0x28, 0x5B, 0xD3, 0x9D, 0x92, 0x8A, 0x10, 0xA7,-    0xD0, 0xA5, 0xDF, 0x00, 0xB8, 0x48, 0x4A, 0xC2,-    0x86, 0x81, 0x42, 0xA1, 0xE8, 0xBE, 0xA3, 0x51-  },-  {-    0x5C, 0x52, 0x92, 0x0A, 0x72, 0x63, 0xE3, 0x9D,-    0x57, 0x92, 0x0C, 0xA0, 0xCB, 0x75, 0x2A, 0xC6,-    0xD7, 0x9A, 0x04, 0xFE, 0xF8, 0xA7, 0xA2, 0x16,-    0xA1, 0xEC, 0xB7, 0x11, 0x5C, 0xE0, 0x6D, 0x89,-    0xFD, 0x7D, 0x73, 0x5B, 0xD6, 0xF4, 0x27, 0x25,-    0x55, 0xDB, 0xA2, 0x2C, 0x2D, 0x1C, 0x96, 0xE6,-    0x35, 0x23, 0x22, 0xC6, 0x2C, 0x56, 0x30, 0xFD,-    0xE0, 0xF4, 0x77, 0x7A, 0x76, 0xC3, 0xDE, 0x2C-  },-  {-    0x83, 0xB0, 0x98, 0xF2, 0x62, 0x25, 0x1B, 0xF6,-    0x60, 0x06, 0x4A, 0x9D, 0x35, 0x11, 0xCE, 0x76,-    0x87, 0xA0, 0x9E, 0x6D, 0xFB, 0xB8, 0x78, 0x29,-    0x9C, 0x30, 0xE9, 0x3D, 0xFB, 0x43, 0xA9, 0x31,-    0x4D, 0xB9, 0xA6, 0x00, 0x33, 0x7D, 0xB2, 0x6E,-    0xBE, 0xED, 0xAF, 0x22, 0x56, 0xA9, 0x6D, 0xAB,-    0xE9, 0xB2, 0x9E, 0x75, 0x73, 0xAD, 0x11, 0xC3,-    0x52, 0x3D, 0x87, 0x4D, 0xDE, 0x5B, 0xE7, 0xED-  },-  {-    0x94, 0x47, 0xD9, 0x8A, 0xA5, 0xC9, 0x33, 0x13,-    0x52, 0xF4, 0x3D, 0x3E, 0x56, 0xD0, 0xA9, 0xA9,-    0xF9, 0x58, 0x18, 0x65, 0x99, 0x8E, 0x28, 0x85,-    0xCC, 0x56, 0xDD, 0x0A, 0x0B, 0xD5, 0xA7, 0xB5,-    0x05, 0x95, 0xBD, 0x10, 0xF7, 0x52, 0x9B, 0xCD,-    0x31, 0xF3, 0x7D, 0xC1, 0x6A, 0x14, 0x65, 0xD5,-    0x94, 0x07, 0x96, 0x67, 0xDA, 0x2A, 0x3F, 0xCB,-    0x70, 0x40, 0x14, 0x98, 0x83, 0x7C, 0xED, 0xEB-  },-  {-    0x86, 0x77, 0x32, 0xF2, 0xFE, 0xEB, 0x23, 0x89,-    0x30, 0x97, 0x56, 0x1A, 0xC7, 0x10, 0xA4, 0xBF,-    0xF4, 0x53, 0xBE, 0x9C, 0xFB, 0xED, 0xBA, 0x8B,-    0xA3, 0x24, 0xF9, 0xD3, 0x12, 0xA8, 0x2D, 0x73,-    0x2E, 0x1B, 0x83, 0xB8, 0x29, 0xFD, 0xCD, 0x17,-    0x7B, 0x88, 0x2C, 0xA0, 0xC1, 0xBF, 0x54, 0x4B,-    0x22, 0x3B, 0xE5, 0x29, 0x92, 0x4A, 0x24, 0x6A,-    0x63, 0xCF, 0x05, 0x9B, 0xFD, 0xC5, 0x0A, 0x1B-  },-  {-    0xF1, 0x5A, 0xB2, 0x6D, 0x4C, 0xDF, 0xCF, 0x56,-    0xE1, 0x96, 0xBB, 0x6B, 0xA1, 0x70, 0xA8, 0xFC,-    0xCC, 0x41, 0x4D, 0xE9, 0x28, 0x5A, 0xFD, 0x98,-    0xA3, 0xD3, 0xCF, 0x2F, 0xB8, 0x8F, 0xCB, 0xC0,-    0xF1, 0x98, 0x32, 0xAC, 0x43, 0x3A, 0x5B, 0x2C,-    0xC2, 0x39, 0x2A, 0x4C, 0xE3, 0x43, 0x32, 0x98,-    0x7D, 0x8D, 0x2C, 0x2B, 0xEF, 0x6C, 0x34, 0x66,-    0x13, 0x8D, 0xB0, 0xC6, 0xE4, 0x2F, 0xA4, 0x7B-  },-  {-    0x28, 0x13, 0x51, 0x6D, 0x68, 0xED, 0x4A, 0x08,-    0xB3, 0x9D, 0x64, 0x8A, 0xA6, 0xAA, 0xCD, 0x81,-    0xE9, 0xD6, 0x55, 0xEC, 0xD5, 0xF0, 0xC1, 0x35,-    0x56, 0xC6, 0x0F, 0xDF, 0x0D, 0x33, 0x3E, 0xA3,-    0x84, 0x64, 0xB3, 0x6C, 0x02, 0xBA, 0xCC, 0xD7,-    0x46, 0xE9, 0x57, 0x5E, 0x96, 0xC6, 0x30, 0x14,-    0xF0, 0x74, 0xAE, 0x34, 0xA0, 0xA2, 0x5B, 0x32,-    0x0F, 0x0F, 0xBE, 0xDD, 0x6A, 0xCF, 0x76, 0x65-  },-  {-    0xD3, 0x25, 0x9A, 0xFC, 0xA8, 0xA4, 0x89, 0x62,-    0xFA, 0x89, 0x2E, 0x14, 0x5A, 0xCF, 0x54, 0x7F,-    0x26, 0x92, 0x3A, 0xE8, 0xD4, 0x92, 0x4C, 0x8A,-    0x53, 0x15, 0x81, 0x52, 0x6B, 0x04, 0xB4, 0x4C,-    0x7A, 0xF8, 0x3C, 0x64, 0x3E, 0xF5, 0xA0, 0xBC,-    0x28, 0x2D, 0x36, 0xF3, 0xFB, 0x04, 0xC8, 0x4E,-    0x28, 0xB3, 0x51, 0xF4, 0x0C, 0x74, 0xB6, 0x9D,-    0xC7, 0x84, 0x0B, 0xC7, 0x17, 0xB6, 0xF1, 0x5F-  },-  {-    0xF1, 0x4B, 0x06, 0x1A, 0xE3, 0x59, 0xFA, 0x31,-    0xB9, 0x89, 0xE3, 0x03, 0x32, 0xBF, 0xE8, 0xDE,-    0x8C, 0xC8, 0xCD, 0xB5, 0x68, 0xE1, 0x4B, 0xE2,-    0x14, 0xA2, 0x22, 0x3B, 0x84, 0xCA, 0xAB, 0x74,-    0x19, 0x54, 0x9E, 0xCF, 0xCC, 0x96, 0xCE, 0x2A,-    0xCE, 0xC1, 0x19, 0x48, 0x5D, 0x87, 0xD1, 0x57,-    0xD3, 0xA8, 0x73, 0x4F, 0xC4, 0x26, 0x59, 0x7D,-    0x64, 0xF3, 0x65, 0x70, 0xCE, 0xAF, 0x22, 0x4D-  },-  {-    0x55, 0xE7, 0x0B, 0x01, 0xD1, 0xFB, 0xF8, 0xB2,-    0x3B, 0x57, 0xFB, 0x62, 0xE2, 0x6C, 0x2C, 0xE5,-    0x4F, 0x13, 0xF8, 0xFA, 0x24, 0x64, 0xE6, 0xEB,-    0x98, 0xD1, 0x6A, 0x61, 0x17, 0x02, 0x6D, 0x8B,-    0x90, 0x81, 0x90, 0x12, 0x49, 0x6D, 0x40, 0x71,-    0xEB, 0xE2, 0xE5, 0x95, 0x57, 0xEC, 0xE3, 0x51,-    0x9A, 0x7A, 0xA4, 0x58, 0x02, 0xF9, 0x61, 0x53,-    0x74, 0x87, 0x73, 0x32, 0xB7, 0x34, 0x90, 0xB3-  },-  {-    0x25, 0x26, 0x1E, 0xB2, 0x96, 0x97, 0x1D, 0x6E,-    0x4A, 0x71, 0xB2, 0x92, 0x8E, 0x64, 0x83, 0x9C,-    0x67, 0xD4, 0x22, 0x87, 0x2B, 0xF9, 0xF3, 0xC3,-    0x19, 0x93, 0x61, 0x52, 0x22, 0xDE, 0x9F, 0x8F,-    0x0B, 0x2C, 0x4B, 0xE8, 0x54, 0x85, 0x59, 0xB4,-    0xB3, 0x54, 0xE7, 0x36, 0x41, 0x6E, 0x32, 0x18,-    0xD4, 0xE8, 0xA1, 0xE2, 0x19, 0xA4, 0xA6, 0xD4,-    0x3E, 0x1A, 0x9A, 0x52, 0x1D, 0x0E, 0x75, 0xFC-  },-  {-    0x08, 0x30, 0x7F, 0x34, 0x7C, 0x41, 0x29, 0x4E,-    0x34, 0xBB, 0x54, 0xCB, 0x42, 0xB1, 0x52, 0x2D,-    0x22, 0xF8, 0x24, 0xF7, 0xB6, 0xE5, 0xDB, 0x50,-    0xFD, 0xA0, 0x96, 0x79, 0x8E, 0x18, 0x1A, 0x8F,-    0x02, 0x6F, 0xA2, 0x7B, 0x4A, 0xE4, 0x5D, 0x52,-    0xA6, 0x2C, 0xAF, 0x9D, 0x51, 0x98, 0xE2, 0x4A,-    0x49, 0x13, 0xC6, 0x67, 0x17, 0x75, 0xB2, 0xD7,-    0x23, 0xC1, 0x23, 0x9B, 0xFB, 0xF0, 0x16, 0xD7-  },-  {-    0x1E, 0x5C, 0x62, 0xE7, 0xE9, 0xBF, 0xA1, 0xB1,-    0x18, 0x74, 0x7A, 0x2D, 0xE0, 0x8B, 0x3C, 0xA1,-    0x01, 0x12, 0xAF, 0x96, 0xA4, 0x6E, 0x4B, 0x22,-    0xC3, 0xFC, 0x06, 0xF9, 0xBF, 0xEE, 0x4E, 0xB5,-    0xC4, 0x9E, 0x05, 0x7A, 0x4A, 0x48, 0x86, 0x23,-    0x43, 0x24, 0x57, 0x25, 0x76, 0xBB, 0x9B, 0x5E,-    0xCF, 0xDE, 0x0D, 0x99, 0xB0, 0xDE, 0x4F, 0x98,-    0xEC, 0x16, 0xE4, 0xD1, 0xB8, 0x5F, 0xA9, 0x47-  },-  {-    0xC7, 0x4A, 0x77, 0x39, 0x5F, 0xB8, 0xBC, 0x12,-    0x64, 0x47, 0x45, 0x48, 0x38, 0xE5, 0x61, 0xE9,-    0x62, 0x85, 0x3D, 0xC7, 0xEB, 0x49, 0xA1, 0xE3,-    0xCB, 0x67, 0xC3, 0xD0, 0x85, 0x1F, 0x3E, 0x39,-    0x51, 0x7B, 0xE8, 0xC3, 0x50, 0xAC, 0x91, 0x09,-    0x03, 0xD4, 0x9C, 0xD2, 0xBF, 0xDF, 0x54, 0x5C,-    0x99, 0x31, 0x6D, 0x03, 0x46, 0x17, 0x0B, 0x73,-    0x9F, 0x0A, 0xDD, 0x5D, 0x53, 0x3C, 0x2C, 0xFC-  },-  {-    0x0D, 0xD5, 0x7B, 0x42, 0x3C, 0xC0, 0x1E, 0xB2,-    0x86, 0x13, 0x91, 0xEB, 0x88, 0x6A, 0x0D, 0x17,-    0x07, 0x9B, 0x93, 0x3F, 0xC7, 0x6E, 0xB3, 0xFC,-    0x08, 0xA1, 0x9F, 0x8A, 0x74, 0x95, 0x2C, 0xB6,-    0x8F, 0x6B, 0xCD, 0xC6, 0x44, 0xF7, 0x73, 0x70,-    0x96, 0x6E, 0x4D, 0x13, 0xE8, 0x05, 0x60, 0xBC,-    0xF0, 0x82, 0xEF, 0x04, 0x79, 0xD4, 0x8F, 0xBB,-    0xAB, 0x4D, 0xF0, 0x3B, 0x53, 0xA4, 0xE1, 0x78-  },-  {-    0x4D, 0x8D, 0xC3, 0x92, 0x3E, 0xDC, 0xCD, 0xFC,-    0xE7, 0x00, 0x72, 0x39, 0x8B, 0x8A, 0x3D, 0xA5,-    0xC3, 0x1F, 0xCB, 0x3E, 0xE3, 0xB6, 0x45, 0xC8,-    0x5F, 0x71, 0x7C, 0xBA, 0xEB, 0x4B, 0x67, 0x3A,-    0x19, 0x39, 0x44, 0x25, 0xA5, 0x85, 0xBF, 0xB4,-    0x64, 0xD9, 0x2F, 0x15, 0x97, 0xD0, 0xB7, 0x54,-    0xD1, 0x63, 0xF9, 0x7C, 0xED, 0x34, 0x3B, 0x25,-    0xDB, 0x5A, 0x70, 0xEF, 0x48, 0xEB, 0xB3, 0x4F-  },-  {-    0xF0, 0xA5, 0x05, 0x53, 0xE4, 0xDF, 0xB0, 0xC4,-    0xE3, 0xE3, 0xD3, 0xBA, 0x82, 0x03, 0x48, 0x57,-    0xE3, 0xB1, 0xE5, 0x09, 0x18, 0xF5, 0xB8, 0xA7,-    0xD6, 0x98, 0xE1, 0x0D, 0x24, 0x2B, 0x0F, 0xB5,-    0x44, 0xAF, 0x6C, 0x92, 0xD0, 0xC3, 0xAA, 0xF9,-    0x93, 0x22, 0x20, 0x41, 0x61, 0x17, 0xB4, 0xE7,-    0x8E, 0xCB, 0x8A, 0x8F, 0x43, 0x0E, 0x13, 0xB8,-    0x2A, 0x59, 0x15, 0x29, 0x0A, 0x58, 0x19, 0xC5-  },-  {-    0xB1, 0x55, 0x43, 0xF3, 0xF7, 0x36, 0x08, 0x66,-    0x27, 0xCC, 0x53, 0x65, 0xE7, 0xE8, 0x98, 0x8C,-    0x2E, 0xF1, 0x55, 0xC0, 0xFD, 0x4F, 0x42, 0x89,-    0x61, 0xB0, 0x0D, 0x15, 0x26, 0xF0, 0x4D, 0x6D,-    0x6A, 0x65, 0x8B, 0x4B, 0x8E, 0xD3, 0x2C, 0x5D,-    0x86, 0x21, 0xE7, 0xF4, 0xF8, 0xE8, 0xA9, 0x33,-    0xD9, 0xEC, 0xC9, 0xDD, 0x1B, 0x83, 0x33, 0xCB,-    0xE2, 0x8C, 0xFC, 0x37, 0xD9, 0x71, 0x9E, 0x1C-  },-  {-    0x7B, 0x4F, 0xA1, 0x58, 0xE4, 0x15, 0xFE, 0xF0,-    0x23, 0x24, 0x72, 0x64, 0xCB, 0xBE, 0x15, 0xD1,-    0x6D, 0x91, 0xA4, 0x44, 0x24, 0xA8, 0xDB, 0x70,-    0x7E, 0xB1, 0xE2, 0x03, 0x3C, 0x30, 0xE9, 0xE1,-    0xE7, 0xC8, 0xC0, 0x86, 0x45, 0x95, 0xD2, 0xCB,-    0x8C, 0x58, 0x0E, 0xB4, 0x7E, 0x9D, 0x16, 0xAB,-    0xBD, 0x7E, 0x44, 0xE8, 0x24, 0xF7, 0xCE, 0xDB,-    0x7D, 0xEF, 0x57, 0x13, 0x0E, 0x52, 0xCF, 0xE9-  },-  {-    0x60, 0x42, 0x4F, 0xF2, 0x32, 0x34, 0xC3, 0x4D,-    0xC9, 0x68, 0x7A, 0xD5, 0x02, 0x86, 0x93, 0x72,-    0xCC, 0x31, 0xA5, 0x93, 0x80, 0x18, 0x6B, 0xC2,-    0x36, 0x1C, 0x83, 0x5D, 0x97, 0x2F, 0x49, 0x66,-    0x6E, 0xB1, 0xAC, 0x69, 0x62, 0x9D, 0xE6, 0x46,-    0xF0, 0x3F, 0x9B, 0x4D, 0xB9, 0xE2, 0xAC, 0xE0,-    0x93, 0xFB, 0xFD, 0xF8, 0xF2, 0x0A, 0xB5, 0xF9,-    0x85, 0x41, 0x97, 0x8B, 0xE8, 0xEF, 0x54, 0x9F-  },-  {-    0x74, 0x06, 0x01, 0x8C, 0xE7, 0x04, 0xD8, 0x4F,-    0x5E, 0xB9, 0xC7, 0x9F, 0xEA, 0x97, 0xDA, 0x34,-    0x56, 0x99, 0x46, 0x8A, 0x35, 0x0E, 0xE0, 0xB2,-    0xD0, 0xF3, 0xA4, 0xBF, 0x20, 0x70, 0x30, 0x4E,-    0xA8, 0x62, 0xD7, 0x2A, 0x51, 0xC5, 0x7D, 0x30,-    0x64, 0x94, 0x72, 0x86, 0xF5, 0x31, 0xE0, 0xEA,-    0xF7, 0x56, 0x37, 0x02, 0x26, 0x2E, 0x6C, 0x72,-    0x4A, 0xBF, 0x5E, 0xD8, 0xC8, 0x39, 0x8D, 0x17-  },-  {-    0x14, 0xEF, 0x5C, 0x6D, 0x64, 0x7B, 0x3B, 0xD1,-    0xE6, 0xE3, 0x20, 0x06, 0xC2, 0x31, 0x19, 0x98,-    0x10, 0xDE, 0x5C, 0x4D, 0xC8, 0x8E, 0x70, 0x24,-    0x02, 0x73, 0xB0, 0xEA, 0x18, 0xE6, 0x51, 0xA3,-    0xEB, 0x4F, 0x5C, 0xA3, 0x11, 0x4B, 0x8A, 0x56,-    0x71, 0x69, 0x69, 0xC7, 0xCD, 0xA2, 0x7E, 0x0C,-    0x8D, 0xB8, 0x32, 0xAD, 0x5E, 0x89, 0xA2, 0xDC,-    0x6C, 0xB0, 0xAD, 0xBE, 0x7D, 0x93, 0xAB, 0xD1-  },-  {-    0x38, 0xCF, 0x6C, 0x24, 0xE3, 0xE0, 0x8B, 0xCF,-    0x1F, 0x6C, 0xF3, 0xD1, 0xB1, 0xF6, 0x5B, 0x90,-    0x52, 0x39, 0xA3, 0x11, 0x80, 0x33, 0x24, 0x9E,-    0x44, 0x81, 0x13, 0xEC, 0x63, 0x2E, 0xA6, 0xDC,-    0x34, 0x6F, 0xEE, 0xB2, 0x57, 0x1C, 0x38, 0xBD,-    0x9A, 0x73, 0x98, 0xB2, 0x22, 0x12, 0x80, 0x32,-    0x80, 0x02, 0xB2, 0x3E, 0x1A, 0x45, 0xAD, 0xAF,-    0xFE, 0x66, 0xD9, 0x3F, 0x65, 0x64, 0xEA, 0xA2-  },-  {-    0x6C, 0xD7, 0x20, 0x8A, 0x4B, 0xC7, 0xE7, 0xE5,-    0x62, 0x01, 0xBB, 0xBA, 0x02, 0xA0, 0xF4, 0x89,-    0xCD, 0x38, 0x4A, 0xBE, 0x40, 0xAF, 0xD4, 0x22,-    0x2F, 0x15, 0x8B, 0x3D, 0x98, 0x6E, 0xE7, 0x2A,-    0x54, 0xC5, 0x0F, 0xB6, 0x4F, 0xD4, 0xED, 0x25,-    0x30, 0xED, 0xA2, 0xC8, 0xAF, 0x29, 0x28, 0xA0,-    0xDA, 0x6D, 0x4F, 0x83, 0x0A, 0xE1, 0xC9, 0xDB,-    0x46, 0x9D, 0xFD, 0x97, 0x0F, 0x12, 0xA5, 0x6F-  },-  {-    0x65, 0x98, 0x58, 0xF0, 0xB5, 0xC9, 0xED, 0xAB,-    0x5B, 0x94, 0xFD, 0x73, 0x2F, 0x6E, 0x6B, 0x17,-    0xC5, 0x1C, 0xC0, 0x96, 0x10, 0x4F, 0x09, 0xBE,-    0xB3, 0xAF, 0xC3, 0xAA, 0x46, 0x7C, 0x2E, 0xCF,-    0x88, 0x5C, 0x4C, 0x65, 0x41, 0xEF, 0xFA, 0x90,-    0x23, 0xD3, 0xB5, 0x73, 0x8A, 0xE5, 0xA1, 0x4D,-    0x86, 0x7E, 0x15, 0xDB, 0x06, 0xFE, 0x1F, 0x9D,-    0x11, 0x27, 0xB7, 0x7E, 0x1A, 0xAB, 0xB5, 0x16-  },-  {-    0x26, 0xCC, 0xA0, 0x12, 0x6F, 0x5D, 0x1A, 0x81,-    0x3C, 0x62, 0xE5, 0xC7, 0x10, 0x01, 0xC0, 0x46,-    0xF9, 0xC9, 0x20, 0x95, 0x70, 0x45, 0x50, 0xBE,-    0x58, 0x73, 0xA4, 0x95, 0xA9, 0x99, 0xAD, 0x01,-    0x0A, 0x4F, 0x79, 0x49, 0x1F, 0x24, 0xF2, 0x86,-    0x50, 0x0A, 0xDC, 0xE1, 0xA1, 0x37, 0xBC, 0x20,-    0x84, 0xE4, 0x94, 0x9F, 0x5B, 0x72, 0x94, 0xCE,-    0xFE, 0x51, 0xEC, 0xAF, 0xF8, 0xE9, 0x5C, 0xBA-  },-  {-    0x41, 0x47, 0xC1, 0xF5, 0x51, 0x72, 0x78, 0x8C,-    0x55, 0x67, 0xC5, 0x61, 0xFE, 0xEF, 0x87, 0x6F,-    0x62, 0x1F, 0xFF, 0x1C, 0xE8, 0x77, 0x86, 0xB8,-    0x46, 0x76, 0x37, 0xE7, 0x0D, 0xFB, 0xCD, 0x0D,-    0xBD, 0xB6, 0x41, 0x5C, 0xB6, 0x00, 0x95, 0x4A,-    0xB9, 0xC0, 0x4C, 0x0E, 0x45, 0x7E, 0x62, 0x5B,-    0x40, 0x72, 0x22, 0xC0, 0xFE, 0x1A, 0xE2, 0x1B,-    0x21, 0x43, 0x68, 0x8A, 0xDA, 0x94, 0xDC, 0x58-  },-  {-    0x5B, 0x1B, 0xF1, 0x54, 0xC6, 0x2A, 0x8A, 0xF6,-    0xE9, 0x3D, 0x35, 0xF1, 0x8F, 0x7F, 0x90, 0xAB,-    0xB1, 0x6A, 0x6E, 0xF0, 0xE8, 0xD1, 0xAE, 0xCD,-    0x11, 0x8B, 0xF7, 0x01, 0x67, 0xBA, 0xB2, 0xAF,-    0x08, 0x93, 0x5C, 0x6F, 0xDC, 0x06, 0x63, 0xCE,-    0x74, 0x48, 0x2D, 0x17, 0xA8, 0xE5, 0x4B, 0x54,-    0x6D, 0x1C, 0x29, 0x66, 0x31, 0xC6, 0x5F, 0x3B,-    0x52, 0x2A, 0x51, 0x58, 0x39, 0xD4, 0x3D, 0x71-  },-  {-    0x9F, 0x60, 0x04, 0x19, 0xA4, 0xE8, 0xF4, 0xFB,-    0x83, 0x4C, 0x24, 0xB0, 0xF7, 0xFC, 0x13, 0xBF,-    0x4E, 0x27, 0x9D, 0x98, 0xE8, 0xA3, 0xC7, 0x65,-    0xEE, 0x93, 0x49, 0x17, 0x40, 0x3E, 0x3A, 0x66,-    0x09, 0x71, 0x82, 0xEA, 0x21, 0x45, 0x3C, 0xB6,-    0x3E, 0xBB, 0xE8, 0xB7, 0x3A, 0x9C, 0x21, 0x67,-    0x59, 0x64, 0x46, 0x43, 0x8C, 0x57, 0x62, 0x7F,-    0x33, 0x0B, 0xAD, 0xD4, 0xF5, 0x69, 0xF7, 0xD6-  },-  {-    0x45, 0x7E, 0xF6, 0x46, 0x6A, 0x89, 0x24, 0xFD,-    0x80, 0x11, 0xA3, 0x44, 0x71, 0xA5, 0xA1, 0xAC,-    0x8C, 0xCD, 0x9B, 0xD0, 0xD0, 0x7A, 0x97, 0x41,-    0x4A, 0xC9, 0x43, 0x02, 0x1C, 0xE4, 0xB9, 0xE4,-    0xB9, 0xC8, 0xDB, 0x0A, 0x28, 0xF0, 0x16, 0xED,-    0x43, 0xB1, 0x54, 0x24, 0x81, 0x99, 0x00, 0x22,-    0x14, 0x7B, 0x31, 0x3E, 0x19, 0x46, 0x71, 0x13,-    0x1E, 0x70, 0x8D, 0xD4, 0x3A, 0x3E, 0xD7, 0xDC-  },-  {-    0x99, 0x97, 0xB2, 0x19, 0x4D, 0x9A, 0xF6, 0xDF,-    0xCB, 0x91, 0x43, 0xF4, 0x1C, 0x0E, 0xD8, 0x3D,-    0x3A, 0x3F, 0x43, 0x88, 0x36, 0x11, 0x03, 0xD3,-    0x8C, 0x2A, 0x49, 0xB2, 0x80, 0xA5, 0x81, 0x21,-    0x27, 0x15, 0xFD, 0x90, 0x8D, 0x41, 0xC6, 0x51,-    0xF5, 0xC7, 0x15, 0xCA, 0x38, 0xC0, 0xCE, 0x28,-    0x30, 0xA3, 0x7E, 0x00, 0xE5, 0x08, 0xCE, 0xD1,-    0xBC, 0xDC, 0x32, 0x0E, 0x5E, 0x4D, 0x1E, 0x2E-  },-  {-    0x5C, 0x6B, 0xBF, 0x16, 0xBA, 0xA1, 0x80, 0xF9,-    0x86, 0xBD, 0x40, 0xA1, 0x28, 0x7E, 0xD4, 0xC5,-    0x49, 0x77, 0x0E, 0x72, 0x84, 0x85, 0x8F, 0xC4,-    0x7B, 0xC2, 0x1A, 0xB9, 0x5E, 0xBB, 0xF3, 0x37,-    0x4B, 0x4E, 0xE3, 0xFD, 0x9F, 0x2A, 0xF6, 0x0F,-    0x33, 0x95, 0x22, 0x1B, 0x2A, 0xCC, 0x76, 0xF2,-    0xD3, 0x4C, 0x13, 0x29, 0x54, 0x04, 0x9F, 0x8A,-    0x3A, 0x99, 0x6F, 0x1E, 0x32, 0xEC, 0x84, 0xE5-  },-  {-    0xD1, 0x0B, 0xF9, 0xA1, 0x5B, 0x1C, 0x9F, 0xC8,-    0xD4, 0x1F, 0x89, 0xBB, 0x14, 0x0B, 0xF0, 0xBE,-    0x08, 0xD2, 0xF3, 0x66, 0x61, 0x76, 0xD1, 0x3B,-    0xAA, 0xC4, 0xD3, 0x81, 0x35, 0x8A, 0xD0, 0x74,-    0xC9, 0xD4, 0x74, 0x8C, 0x30, 0x05, 0x20, 0xEB,-    0x02, 0x6D, 0xAE, 0xAE, 0xA7, 0xC5, 0xB1, 0x58,-    0x89, 0x2F, 0xDE, 0x4E, 0x8E, 0xC1, 0x7D, 0xC9,-    0x98, 0xDC, 0xD5, 0x07, 0xDF, 0x26, 0xEB, 0x63-  },-  {-    0x2F, 0xC6, 0xE6, 0x9F, 0xA2, 0x6A, 0x89, 0xA5,-    0xED, 0x26, 0x90, 0x92, 0xCB, 0x9B, 0x2A, 0x44,-    0x9A, 0x44, 0x09, 0xA7, 0xA4, 0x40, 0x11, 0xEE,-    0xCA, 0xD1, 0x3D, 0x7C, 0x4B, 0x04, 0x56, 0x60,-    0x2D, 0x40, 0x2F, 0xA5, 0x84, 0x4F, 0x1A, 0x7A,-    0x75, 0x81, 0x36, 0xCE, 0x3D, 0x5D, 0x8D, 0x0E,-    0x8B, 0x86, 0x92, 0x1F, 0xFF, 0xF4, 0xF6, 0x92,-    0xDD, 0x95, 0xBD, 0xC8, 0xE5, 0xFF, 0x00, 0x52-  },-  {-    0xFC, 0xBE, 0x8B, 0xE7, 0xDC, 0xB4, 0x9A, 0x32,-    0xDB, 0xDF, 0x23, 0x94, 0x59, 0xE2, 0x63, 0x08,-    0xB8, 0x4D, 0xFF, 0x1E, 0xA4, 0x80, 0xDF, 0x8D,-    0x10, 0x4E, 0xEF, 0xF3, 0x4B, 0x46, 0xFA, 0xE9,-    0x86, 0x27, 0xB4, 0x50, 0xC2, 0x26, 0x7D, 0x48,-    0xC0, 0x94, 0x6A, 0x69, 0x7C, 0x5B, 0x59, 0x53,-    0x14, 0x52, 0xAC, 0x04, 0x84, 0xF1, 0xC8, 0x4E,-    0x3A, 0x33, 0xD0, 0xC3, 0x39, 0xBB, 0x2E, 0x28-  },-  {-    0xA1, 0x90, 0x93, 0xA6, 0xE3, 0xBC, 0xF5, 0x95,-    0x2F, 0x85, 0x0F, 0x20, 0x30, 0xF6, 0x9B, 0x96,-    0x06, 0xF1, 0x47, 0xF9, 0x0B, 0x8B, 0xAE, 0xE3,-    0x36, 0x2D, 0xA7, 0x1D, 0x9F, 0x35, 0xB4, 0x4E,-    0xF9, 0xD8, 0xF0, 0xA7, 0x71, 0x2B, 0xA1, 0x87,-    0x7F, 0xDD, 0xCD, 0x2D, 0x8E, 0xA8, 0xF1, 0xE5,-    0xA7, 0x73, 0xD0, 0xB7, 0x45, 0xD4, 0x72, 0x56,-    0x05, 0x98, 0x3A, 0x2D, 0xE9, 0x01, 0xF8, 0x03-  },-  {-    0x3C, 0x20, 0x06, 0x42, 0x3F, 0x73, 0xE2, 0x68,-    0xFA, 0x59, 0xD2, 0x92, 0x03, 0x77, 0xEB, 0x29,-    0xA4, 0xF9, 0xA8, 0xB4, 0x62, 0xBE, 0x15, 0x98,-    0x3E, 0xE3, 0xB8, 0x5A, 0xE8, 0xA7, 0x8E, 0x99,-    0x26, 0x33, 0x58, 0x1A, 0x90, 0x99, 0x89, 0x3B,-    0x63, 0xDB, 0x30, 0x24, 0x1C, 0x34, 0xF6, 0x43,-    0x02, 0x7D, 0xC8, 0x78, 0x27, 0x9A, 0xF5, 0x85,-    0x0D, 0x7E, 0x2D, 0x4A, 0x26, 0x53, 0x07, 0x3A-  },-  {-    0xD0, 0xF2, 0xF2, 0xE3, 0x78, 0x76, 0x53, 0xF7,-    0x7C, 0xCE, 0x2F, 0xA2, 0x48, 0x35, 0x78, 0x5B,-    0xBD, 0x0C, 0x43, 0x3F, 0xC7, 0x79, 0x46, 0x5A,-    0x11, 0x51, 0x49, 0x90, 0x5A, 0x9D, 0xD1, 0xCB,-    0x82, 0x7A, 0x62, 0x85, 0x06, 0xD4, 0x57, 0xFC,-    0xF1, 0x24, 0xA0, 0xC2, 0xAE, 0xF9, 0xCE, 0x2D,-    0x2A, 0x0A, 0x0F, 0x63, 0x54, 0x55, 0x70, 0xD8,-    0x66, 0x7F, 0xF9, 0xE2, 0xEB, 0xA0, 0x73, 0x34-  },-  {-    0x78, 0xA9, 0xFC, 0x04, 0x8E, 0x25, 0xC6, 0xDC,-    0xB5, 0xDE, 0x45, 0x66, 0x7D, 0xE8, 0xFF, 0xDD,-    0x3A, 0x93, 0x71, 0x11, 0x41, 0xD5, 0x94, 0xE9,-    0xFA, 0x62, 0xA9, 0x59, 0x47, 0x5D, 0xA6, 0x07,-    0x5E, 0xA8, 0xF0, 0x91, 0x6E, 0x84, 0xE4, 0x5A,-    0xD9, 0x11, 0xB7, 0x54, 0x67, 0x07, 0x7E, 0xE5,-    0x2D, 0x2C, 0x9A, 0xEB, 0xF4, 0xD5, 0x8F, 0x20,-    0xCE, 0x4A, 0x3A, 0x00, 0x45, 0x8B, 0x05, 0xD4-  },-  {-    0x45, 0x81, 0x3F, 0x44, 0x17, 0x69, 0xAB, 0x6E,-    0xD3, 0x7D, 0x34, 0x9F, 0xF6, 0xE7, 0x22, 0x67,-    0xD7, 0x6A, 0xE6, 0xBB, 0x3E, 0x3C, 0x61, 0x2E,-    0xC0, 0x5C, 0x6E, 0x02, 0xA1, 0x2A, 0xF5, 0xA3,-    0x7C, 0x91, 0x8B, 0x52, 0xBF, 0x74, 0x26, 0x7C,-    0x3F, 0x6A, 0x3F, 0x18, 0x3A, 0x80, 0x64, 0xFF,-    0x84, 0xC0, 0x7B, 0x19, 0x3D, 0x08, 0x06, 0x67,-    0x89, 0xA0, 0x1A, 0xCC, 0xDB, 0x6F, 0x93, 0x40-  },-  {-    0x95, 0x6D, 0xA1, 0xC6, 0x8D, 0x83, 0xA7, 0xB8,-    0x81, 0xE0, 0x1B, 0x9A, 0x96, 0x6C, 0x3C, 0x0B,-    0xF2, 0x7F, 0x68, 0x60, 0x6A, 0x8B, 0x71, 0xD4,-    0x57, 0xBD, 0x01, 0x6D, 0x4C, 0x41, 0xDD, 0x8A,-    0x38, 0x0C, 0x70, 0x9A, 0x29, 0x6C, 0xB4, 0xC6,-    0x54, 0x47, 0x92, 0x92, 0x0F, 0xD7, 0x88, 0x83,-    0x57, 0x71, 0xA0, 0x7D, 0x4A, 0x16, 0xFB, 0x52,-    0xED, 0x48, 0x05, 0x03, 0x31, 0xDC, 0x4C, 0x8B-  },-  {-    0xDF, 0x18, 0x6C, 0x2D, 0xC0, 0x9C, 0xAA, 0x48,-    0xE1, 0x4E, 0x94, 0x2F, 0x75, 0xDE, 0x5A, 0xC1,-    0xB7, 0xA2, 0x1E, 0x4F, 0x9F, 0x07, 0x2A, 0x5B,-    0x37, 0x1E, 0x09, 0xE0, 0x73, 0x45, 0xB0, 0x74,-    0x0C, 0x76, 0x17, 0x7B, 0x01, 0x27, 0x88, 0x08,-    0xFE, 0xC0, 0x25, 0xED, 0xED, 0x98, 0x22, 0xC1,-    0x22, 0xAF, 0xD1, 0xC6, 0x3E, 0x6F, 0x0C, 0xE2,-    0xE3, 0x26, 0x31, 0x04, 0x10, 0x63, 0x14, 0x5C-  },-  {-    0x87, 0x47, 0x56, 0x40, 0x96, 0x6A, 0x9F, 0xDC,-    0xD6, 0xD3, 0xA3, 0xB5, 0xA2, 0xCC, 0xA5, 0xC0,-    0x8F, 0x0D, 0x88, 0x2B, 0x10, 0x24, 0x3C, 0x0E,-    0xC1, 0xBF, 0x3C, 0x6B, 0x1C, 0x37, 0xF2, 0xCD,-    0x32, 0x12, 0xF1, 0x9A, 0x05, 0x78, 0x64, 0x47,-    0x7D, 0x5E, 0xAF, 0x8F, 0xAE, 0xD7, 0x3F, 0x29,-    0x37, 0xC7, 0x68, 0xA0, 0xAF, 0x41, 0x5E, 0x84,-    0xBB, 0xCE, 0x6B, 0xD7, 0xDE, 0x23, 0xB6, 0x60-  },-  {-    0xC3, 0xB5, 0x73, 0xBB, 0xE1, 0x09, 0x49, 0xA0,-    0xFB, 0xD4, 0xFF, 0x88, 0x4C, 0x44, 0x6F, 0x22,-    0x29, 0xB7, 0x69, 0x02, 0xF9, 0xDF, 0xDB, 0xB8,-    0xA0, 0x35, 0x3D, 0xA5, 0xC8, 0x3C, 0xA1, 0x4E,-    0x81, 0x51, 0xBB, 0xAA, 0xC8, 0x2F, 0xD1, 0x57,-    0x6A, 0x00, 0x9A, 0xDC, 0x6F, 0x19, 0x35, 0xCF,-    0x26, 0xED, 0xD4, 0xF1, 0xFB, 0x8D, 0xA4, 0x83,-    0xE6, 0xC5, 0xCD, 0x9D, 0x89, 0x23, 0xAD, 0xC3-  },-  {-    0xB0, 0x9D, 0x8D, 0x0B, 0xBA, 0x8A, 0x72, 0x86,-    0xE4, 0x35, 0x68, 0xF7, 0x90, 0x75, 0x50, 0xE4,-    0x20, 0x36, 0xD6, 0x74, 0xE3, 0xC8, 0xFC, 0x34,-    0xD8, 0xCA, 0x46, 0xF7, 0x71, 0xD6, 0x46, 0x6B,-    0x70, 0xFB, 0x60, 0x58, 0x75, 0xF6, 0xA8, 0x63,-    0xC8, 0x77, 0xD1, 0x2F, 0x07, 0x06, 0x3F, 0xDC,-    0x2E, 0x90, 0xCC, 0xD4, 0x59, 0xB1, 0x91, 0x0D,-    0xCD, 0x52, 0xD8, 0xF1, 0x0B, 0x2B, 0x0A, 0x15-  },-  {-    0xAF, 0x3A, 0x22, 0xBF, 0x75, 0xB2, 0x1A, 0xBF,-    0xB0, 0xAC, 0xD5, 0x44, 0x22, 0xBA, 0x1B, 0x73,-    0x00, 0xA9, 0x52, 0xEF, 0xF0, 0x2E, 0xBE, 0xB6,-    0x5B, 0x5C, 0x23, 0x44, 0x71, 0xA9, 0x8D, 0xF3,-    0x2F, 0x4F, 0x96, 0x43, 0xCE, 0x19, 0x04, 0x10,-    0x8A, 0x16, 0x87, 0x67, 0x92, 0x42, 0x80, 0xBD,-    0x76, 0xC8, 0x3F, 0x8C, 0x82, 0xD9, 0xA7, 0x9D,-    0x92, 0x59, 0xB1, 0x95, 0x36, 0x2A, 0x2A, 0x04-  },-  {-    0xBF, 0x4F, 0xF2, 0x22, 0x1B, 0x7E, 0x69, 0x57,-    0xA7, 0x24, 0xCD, 0x96, 0x4A, 0xA3, 0xD5, 0xD0,-    0xD9, 0x94, 0x1F, 0x54, 0x04, 0x13, 0x75, 0x2F,-    0x46, 0x99, 0xD8, 0x10, 0x1B, 0x3E, 0x53, 0x75,-    0x08, 0xBF, 0x09, 0xF8, 0x50, 0x8B, 0x31, 0x77,-    0x36, 0xFF, 0xD2, 0x65, 0xF2, 0x84, 0x7A, 0xA7,-    0xD8, 0x4B, 0xD2, 0xD9, 0x75, 0x69, 0xC4, 0x9D,-    0x63, 0x2A, 0xED, 0x99, 0x45, 0xE5, 0xFA, 0x5E-  },-  {-    0x9C, 0x6B, 0x6B, 0x78, 0x19, 0x9B, 0x1B, 0xDA,-    0xCB, 0x43, 0x00, 0xE3, 0x14, 0x79, 0xFA, 0x62,-    0x2A, 0x6B, 0x5B, 0xC8, 0x0D, 0x46, 0x78, 0xA6,-    0x07, 0x8F, 0x88, 0xA8, 0x26, 0x8C, 0xD7, 0x20,-    0x6A, 0x27, 0x99, 0xE8, 0xD4, 0x62, 0x1A, 0x46,-    0x4E, 0xF6, 0xB4, 0x3D, 0xD8, 0xAD, 0xFF, 0xE9,-    0x7C, 0xAF, 0x22, 0x1B, 0x22, 0xB6, 0xB8, 0x77,-    0x8B, 0x14, 0x9A, 0x82, 0x2A, 0xEF, 0xBB, 0x09-  },-  {-    0x89, 0x06, 0x56, 0xF0, 0x9C, 0x99, 0xD2, 0x80,-    0xB5, 0xEC, 0xB3, 0x81, 0xF5, 0x64, 0x27, 0xB8,-    0x13, 0x75, 0x1B, 0xC6, 0x52, 0xC7, 0x82, 0x80,-    0x78, 0xB2, 0x3A, 0x4A, 0xF8, 0x3B, 0x4E, 0x3A,-    0x61, 0xFD, 0xBA, 0xC6, 0x1F, 0x89, 0xBE, 0xE8,-    0x4E, 0xA6, 0xBE, 0xE7, 0x60, 0xC0, 0x47, 0xF2,-    0x5C, 0x6B, 0x0A, 0x20, 0x1C, 0x69, 0xA3, 0x8F,-    0xD6, 0xFD, 0x97, 0x1A, 0xF1, 0x85, 0x88, 0xBB-  },-  {-    0x31, 0xA0, 0x46, 0xF7, 0x88, 0x2F, 0xFE, 0x6F,-    0x83, 0xCE, 0x47, 0x2E, 0x9A, 0x07, 0x01, 0x83,-    0x2E, 0xC7, 0xB3, 0xF7, 0x6F, 0xBC, 0xFD, 0x1D,-    0xF6, 0x0F, 0xE3, 0xEA, 0x48, 0xFD, 0xE1, 0x65,-    0x12, 0x54, 0x24, 0x7C, 0x3F, 0xD9, 0x5E, 0x10,-    0x0F, 0x91, 0x72, 0x73, 0x1E, 0x17, 0xFD, 0x52,-    0x97, 0xC1, 0x1F, 0x4B, 0xB3, 0x28, 0x36, 0x3C,-    0xA3, 0x61, 0x62, 0x4A, 0x81, 0xAF, 0x79, 0x7C-  },-  {-    0x27, 0xA6, 0x0B, 0x2D, 0x00, 0xE7, 0xA6, 0x71,-    0xD4, 0x7D, 0x0A, 0xEC, 0x2A, 0x68, 0x6A, 0x0A,-    0xC0, 0x4B, 0x52, 0xF4, 0x0A, 0xB6, 0x62, 0x90,-    0x28, 0xEB, 0x7D, 0x13, 0xF4, 0xBA, 0xA9, 0x9A,-    0xC0, 0xFE, 0x46, 0xEE, 0x6C, 0x81, 0x49, 0x44,-    0xF2, 0xF4, 0xB4, 0xD2, 0x0E, 0x93, 0x78, 0xE4,-    0x84, 0x7E, 0xA4, 0x4C, 0x13, 0x17, 0x80, 0x91,-    0xE2, 0x77, 0xB8, 0x7E, 0xA7, 0xA5, 0x57, 0x11-  },-  {-    0x8B, 0x5C, 0xCE, 0xF1, 0x94, 0x16, 0x2C, 0x1F,-    0x19, 0xD6, 0x8F, 0x91, 0xE0, 0xB0, 0x92, 0x8F,-    0x28, 0x9E, 0xC5, 0x28, 0x37, 0x20, 0x84, 0x0C,-    0x2F, 0x73, 0xD2, 0x53, 0x11, 0x12, 0x38, 0xDC,-    0xFE, 0x94, 0xAF, 0x2B, 0x59, 0xC2, 0xC1, 0xCA,-    0x25, 0x91, 0x90, 0x1A, 0x7B, 0xC0, 0x60, 0xE7,-    0x45, 0x9B, 0x6C, 0x47, 0xDF, 0x0F, 0x71, 0x70,-    0x1A, 0x35, 0xCC, 0x0A, 0xA8, 0x31, 0xB5, 0xB6-  },-  {-    0x57, 0xAB, 0x6C, 0x4B, 0x22, 0x29, 0xAE, 0xB3,-    0xB7, 0x04, 0x76, 0xD8, 0x03, 0xCD, 0x63, 0x81,-    0x2F, 0x10, 0x7C, 0xE6, 0xDA, 0x17, 0xFE, 0xD9,-    0xB1, 0x78, 0x75, 0xE8, 0xF8, 0x6C, 0x72, 0x4F,-    0x49, 0xE0, 0x24, 0xCB, 0xF3, 0xA1, 0xB8, 0xB1,-    0x19, 0xC5, 0x03, 0x57, 0x65, 0x2B, 0x81, 0x87,-    0x9D, 0x2A, 0xDE, 0x2D, 0x58, 0x8B, 0x9E, 0x4F,-    0x7C, 0xED, 0xBA, 0x0E, 0x46, 0x44, 0xC9, 0xEE-  },-  {-    0x01, 0x90, 0xA8, 0xDA, 0xC3, 0x20, 0xA7, 0x39,-    0xF3, 0x22, 0xE1, 0x57, 0x31, 0xAA, 0x14, 0x0D,-    0xDA, 0xF5, 0xBE, 0xD2, 0x94, 0xD5, 0xC8, 0x2E,-    0x54, 0xFE, 0xF2, 0x9F, 0x21, 0x4E, 0x18, 0xAA,-    0xFA, 0xA8, 0x4F, 0x8B, 0xE9, 0x9A, 0xF6, 0x29,-    0x50, 0x26, 0x6B, 0x8F, 0x90, 0x1F, 0x15, 0xDD,-    0x4C, 0x5D, 0x35, 0x51, 0x6F, 0xC3, 0x5B, 0x4C,-    0xAB, 0x2E, 0x96, 0xE4, 0x69, 0x5B, 0xBE, 0x1C-  },-  {-    0xD1, 0x4D, 0x7C, 0x4C, 0x41, 0x5E, 0xEB, 0x0E,-    0x10, 0xB1, 0x59, 0x22, 0x4B, 0xEA, 0x12, 0x7E,-    0xBD, 0x84, 0xF9, 0x59, 0x1C, 0x70, 0x2A, 0x33,-    0x0F, 0x5B, 0xB7, 0xBB, 0x7A, 0xA4, 0x4E, 0xA3,-    0x9D, 0xE6, 0xED, 0x01, 0xF1, 0x8D, 0xA7, 0xAD,-    0xF4, 0x0C, 0xFB, 0x97, 0xC5, 0xD1, 0x52, 0xC2,-    0x75, 0x28, 0x82, 0x4B, 0x21, 0xE2, 0x39, 0x52,-    0x6A, 0xF8, 0xF3, 0x6B, 0x21, 0x4E, 0x0C, 0xFB-  },-  {-    0xBE, 0x28, 0xC4, 0xBE, 0x70, 0x69, 0x70, 0x48,-    0x8F, 0xAC, 0x7D, 0x29, 0xC3, 0xBD, 0x5C, 0x4E,-    0x98, 0x60, 0x85, 0xC4, 0xC3, 0x33, 0x2F, 0x1F,-    0x3F, 0xD3, 0x09, 0x73, 0xDB, 0x61, 0x41, 0x64,-    0xBA, 0x2F, 0x31, 0xA7, 0x88, 0x75, 0xFF, 0xDC,-    0x15, 0x03, 0x25, 0xC8, 0x83, 0x27, 0xA9, 0x44,-    0x3E, 0xD0, 0x4F, 0xDF, 0xE5, 0xBE, 0x93, 0x87,-    0x6D, 0x16, 0x28, 0x56, 0x0C, 0x76, 0x4A, 0x80-  },-  {-    0x03, 0x1D, 0xA1, 0x06, 0x9E, 0x3A, 0x2E, 0x9C,-    0x33, 0x82, 0xE4, 0x36, 0xFF, 0xD7, 0x9D, 0xF7,-    0x4B, 0x1C, 0xA6, 0xA8, 0xAD, 0xB2, 0xDE, 0xAB,-    0xE6, 0x76, 0xAB, 0x45, 0x99, 0x4C, 0xBC, 0x05,-    0x4F, 0x03, 0x7D, 0x2F, 0x0E, 0xAC, 0xE8, 0x58,-    0xD3, 0x2C, 0x14, 0xE2, 0xD1, 0xC8, 0xB4, 0x60,-    0x77, 0x30, 0x8E, 0x3B, 0xDC, 0x2C, 0x1B, 0x53,-    0x17, 0x2E, 0xCF, 0x7A, 0x8C, 0x14, 0xE3, 0x49-  },-  {-    0x46, 0x65, 0xCE, 0xF8, 0xBA, 0x4D, 0xB4, 0xD0,-    0xAC, 0xB1, 0x18, 0xF2, 0x98, 0x7F, 0x0B, 0xB0,-    0x9F, 0x8F, 0x86, 0xAA, 0x44, 0x5A, 0xA3, 0xD5,-    0xFC, 0x9A, 0x8B, 0x34, 0x68, 0x64, 0x78, 0x74,-    0x89, 0xE8, 0xFC, 0xEC, 0xC1, 0x25, 0xD1, 0x7E,-    0x9B, 0x56, 0xE1, 0x29, 0x88, 0xEA, 0xC5, 0xEC,-    0xC7, 0x28, 0x68, 0x83, 0xDB, 0x06, 0x61, 0xB8,-    0xFF, 0x05, 0xDA, 0x2A, 0xFF, 0xF3, 0x0F, 0xE4-  },-  {-    0x63, 0xB7, 0x03, 0x2E, 0x5F, 0x93, 0x0C, 0xC9,-    0x93, 0x95, 0x17, 0xF9, 0xE9, 0x86, 0x81, 0x6C,-    0xFB, 0xEC, 0x2B, 0xE5, 0x9B, 0x95, 0x68, 0xB1,-    0x3F, 0x2E, 0xAD, 0x05, 0xBA, 0xE7, 0x77, 0x7C,-    0xAB, 0x62, 0x0C, 0x66, 0x59, 0x40, 0x4F, 0x74,-    0x09, 0xE4, 0x19, 0x9A, 0x3B, 0xE5, 0xF7, 0x86,-    0x5A, 0xA7, 0xCB, 0xDF, 0x8C, 0x42, 0x53, 0xF7,-    0xE8, 0x21, 0x9B, 0x1B, 0xD5, 0xF4, 0x6F, 0xEA-  },-  {-    0x9F, 0x09, 0xBF, 0x09, 0x3A, 0x2B, 0x0F, 0xF8,-    0xC2, 0x63, 0x4B, 0x49, 0xE3, 0x7F, 0x1B, 0x21,-    0x35, 0xB4, 0x47, 0xAA, 0x91, 0x44, 0xC9, 0x78,-    0x7D, 0xBF, 0xD9, 0x21, 0x29, 0x31, 0x6C, 0x99,-    0xE8, 0x8A, 0xAB, 0x8A, 0x21, 0xFD, 0xEF, 0x23,-    0x72, 0xD1, 0x18, 0x9A, 0xEC, 0x50, 0x0F, 0x95,-    0x77, 0x5F, 0x1F, 0x92, 0xBF, 0xB4, 0x55, 0x45,-    0xE4, 0x25, 0x9F, 0xB9, 0xB7, 0xB0, 0x2D, 0x14-  },-  {-    0xF9, 0xF8, 0x49, 0x3C, 0x68, 0x08, 0x88, 0x07,-    0xDF, 0x7F, 0x6A, 0x26, 0x93, 0xD6, 0x4E, 0xA5,-    0x9F, 0x03, 0xE9, 0xE0, 0x5A, 0x22, 0x3E, 0x68,-    0x52, 0x4C, 0xA3, 0x21, 0x95, 0xA4, 0x73, 0x4B,-    0x65, 0x4F, 0xCE, 0xA4, 0xD2, 0x73, 0x4C, 0x86,-    0x6C, 0xF9, 0x5C, 0x88, 0x9F, 0xB1, 0x0C, 0x49,-    0x15, 0x9B, 0xE2, 0xF5, 0x04, 0x3D, 0xC9, 0x8B,-    0xB5, 0x5E, 0x02, 0xEF, 0x7B, 0xDC, 0xB0, 0x82-  },-  {-    0x3C, 0x9A, 0x73, 0x59, 0xAB, 0x4F, 0xEB, 0xCE,-    0x07, 0xB2, 0x0A, 0xC4, 0x47, 0xB0, 0x6A, 0x24,-    0x0B, 0x7F, 0xE1, 0xDA, 0xE5, 0x43, 0x9C, 0x49,-    0xB6, 0x0B, 0x58, 0x19, 0xF7, 0x81, 0x2E, 0x4C,-    0x17, 0x24, 0x06, 0xC1, 0xAA, 0xC3, 0x16, 0x71,-    0x3C, 0xF0, 0xDD, 0xED, 0x10, 0x38, 0x07, 0x72,-    0x58, 0xE2, 0xEF, 0xF5, 0xB3, 0x39, 0x13, 0xD9,-    0xD9, 0x5C, 0xAE, 0xB4, 0xE6, 0xC6, 0xB9, 0x70-  },-  {-    0xAD, 0x6A, 0xAB, 0x80, 0x84, 0x51, 0x0E, 0x82,-    0x2C, 0xFC, 0xE8, 0x62, 0x5D, 0x62, 0xCF, 0x4D,-    0xE6, 0x55, 0xF4, 0x76, 0x38, 0x84, 0xC7, 0x1E,-    0x80, 0xBA, 0xB9, 0xAC, 0x9D, 0x53, 0x18, 0xDB,-    0xA4, 0xA6, 0x03, 0x3E, 0xD2, 0x90, 0x84, 0xE6,-    0x52, 0x16, 0xC0, 0x31, 0x60, 0x6C, 0xA1, 0x76,-    0x15, 0xDC, 0xFE, 0x3B, 0xA1, 0x1D, 0x26, 0x85,-    0x1A, 0xE0, 0x99, 0x9C, 0xA6, 0xE2, 0x32, 0xCF-  },-  {-    0x15, 0x6E, 0x9E, 0x62, 0x61, 0x37, 0x4C, 0x9D,-    0xC8, 0x84, 0xF3, 0x6E, 0x70, 0xF0, 0xFE, 0x1A,-    0xB9, 0x29, 0x79, 0x97, 0xB8, 0x36, 0xFA, 0x7D,-    0x17, 0x0A, 0x9C, 0x9E, 0xBF, 0x57, 0x5B, 0x88,-    0x1E, 0x7B, 0xCE, 0xA4, 0x4D, 0x6C, 0x02, 0x48,-    0xD3, 0x55, 0x97, 0x90, 0x71, 0x54, 0x82, 0x89,-    0x55, 0xBE, 0x19, 0x13, 0x58, 0x52, 0xF9, 0x22,-    0x88, 0x15, 0xEC, 0xA0, 0x24, 0xA8, 0xAD, 0xFB-  },-  {-    0x42, 0x15, 0x40, 0x76, 0x33, 0xF4, 0xCC, 0xA9,-    0xB6, 0x78, 0x8B, 0xE9, 0x3E, 0x6A, 0xA3, 0xD9,-    0x63, 0xC7, 0xD6, 0xCE, 0x4B, 0x14, 0x72, 0x47,-    0x09, 0x9F, 0x46, 0xA3, 0xAC, 0xB5, 0x00, 0xA3,-    0x00, 0x38, 0xCB, 0x3E, 0x78, 0x8C, 0x3D, 0x29,-    0xF1, 0x32, 0xAD, 0x84, 0x4E, 0x80, 0xE9, 0xE9,-    0x92, 0x51, 0xF6, 0xDB, 0x96, 0xAC, 0xD8, 0xA0,-    0x91, 0xCF, 0xC7, 0x70, 0xAF, 0x53, 0x84, 0x7B-  },-  {-    0x1C, 0x07, 0x7E, 0x27, 0x9D, 0xE6, 0x54, 0x85,-    0x23, 0x50, 0x2B, 0x6D, 0xF8, 0x00, 0xFF, 0xDA,-    0xB5, 0xE2, 0xC3, 0xE9, 0x44, 0x2E, 0xB8, 0x38,-    0xF5, 0x8C, 0x29, 0x5F, 0x3B, 0x14, 0x7C, 0xEF,-    0x9D, 0x70, 0x1C, 0x41, 0xC3, 0x21, 0x28, 0x3F,-    0x00, 0xC7, 0x1A, 0xFF, 0xA0, 0x61, 0x93, 0x10,-    0x39, 0x91, 0x26, 0x29, 0x5B, 0x78, 0xDD, 0x4D,-    0x1A, 0x74, 0x57, 0x2E, 0xF9, 0xED, 0x51, 0x35-  },-  {-    0xF0, 0x7A, 0x55, 0x5F, 0x49, 0xFE, 0x48, 0x1C,-    0xF4, 0xCD, 0x0A, 0x87, 0xB7, 0x1B, 0x82, 0xE4,-    0xA9, 0x50, 0x64, 0xD0, 0x66, 0x77, 0xFD, 0xD9,-    0x0A, 0x0E, 0xB5, 0x98, 0x87, 0x7B, 0xA1, 0xC8,-    0x3D, 0x46, 0x77, 0xB3, 0x93, 0xC3, 0xA3, 0xB6,-    0x66, 0x1C, 0x42, 0x1F, 0x5B, 0x12, 0xCB, 0x99,-    0xD2, 0x03, 0x76, 0xBA, 0x72, 0x75, 0xC2, 0xF3,-    0xA8, 0xF5, 0xA9, 0xB7, 0x82, 0x17, 0x20, 0xDA-  },-  {-    0xB5, 0x91, 0x1B, 0x38, 0x0D, 0x20, 0xC7, 0xB0,-    0x43, 0x23, 0xE4, 0x02, 0x6B, 0x38, 0xE2, 0x00,-    0xF5, 0x34, 0x25, 0x92, 0x33, 0xB5, 0x81, 0xE0,-    0x2C, 0x1E, 0x3E, 0x2D, 0x84, 0x38, 0xD6, 0xC6,-    0x6D, 0x5A, 0x4E, 0xB2, 0x01, 0xD5, 0xA8, 0xB7,-    0x50, 0x72, 0xC4, 0xEC, 0x29, 0x10, 0x63, 0x34,-    0xDA, 0x70, 0xBC, 0x79, 0x52, 0x1B, 0x0C, 0xED,-    0x2C, 0xFD, 0x53, 0x3F, 0x5F, 0xF8, 0x4F, 0x95-  },-  {-    0x01, 0xF0, 0x70, 0xA0, 0x9B, 0xAE, 0x91, 0x12,-    0x96, 0x36, 0x1F, 0x91, 0xAA, 0x0E, 0x8E, 0x0D,-    0x09, 0xA7, 0x72, 0x54, 0x78, 0x53, 0x6D, 0x9D,-    0x48, 0xC5, 0xFE, 0x1E, 0x5E, 0x7C, 0x3C, 0x5B,-    0x9B, 0x9D, 0x6E, 0xB0, 0x77, 0x96, 0xF6, 0xDA,-    0x57, 0xAE, 0x56, 0x2A, 0x7D, 0x70, 0xE8, 0x82,-    0xE3, 0x7A, 0xDF, 0xDE, 0x83, 0xF0, 0xC4, 0x33,-    0xC2, 0xCD, 0x36, 0x35, 0x36, 0xBB, 0x22, 0xC8-  },-  {-    0x6F, 0x79, 0x3E, 0xB4, 0x37, 0x4A, 0x48, 0xB0,-    0x77, 0x5A, 0xCA, 0xF9, 0xAD, 0xCF, 0x8E, 0x45,-    0xE5, 0x42, 0x70, 0xC9, 0x47, 0x5F, 0x00, 0x4A,-    0xD8, 0xD5, 0x97, 0x3E, 0x2A, 0xCA, 0x52, 0x74,-    0x7F, 0xF4, 0xED, 0x04, 0xAE, 0x96, 0x72, 0x75,-    0xB9, 0xF9, 0xEB, 0x0E, 0x1F, 0xF7, 0x5F, 0xB4,-    0xF7, 0x94, 0xFA, 0x8B, 0xE9, 0xAD, 0xD7, 0xA4,-    0x13, 0x04, 0x86, 0x8D, 0x10, 0x3F, 0xAB, 0x10-  },-  {-    0x96, 0x5F, 0x20, 0xF1, 0x39, 0x76, 0x5F, 0xCC,-    0x4C, 0xE4, 0xBA, 0x37, 0x94, 0x67, 0x58, 0x63,-    0xCA, 0xC2, 0x4D, 0xB4, 0x72, 0xCD, 0x2B, 0x79,-    0x9D, 0x03, 0x5B, 0xCE, 0x3D, 0xBE, 0xA5, 0x02,-    0xDA, 0x7B, 0x52, 0x48, 0x65, 0xF6, 0xB8, 0x11,-    0xD8, 0xC5, 0x82, 0x8D, 0x3A, 0x88, 0x96, 0x46,-    0xFE, 0x64, 0xA3, 0x80, 0xDA, 0x1A, 0xA7, 0xC7,-    0x04, 0x4E, 0x9F, 0x24, 0x5D, 0xCE, 0xD1, 0x28-  },-  {-    0xEC, 0x29, 0x5B, 0x57, 0x83, 0x60, 0x12, 0x44,-    0xC3, 0x0E, 0x46, 0x41, 0xE3, 0xB4, 0x5B, 0xE2,-    0x22, 0xC4, 0xDC, 0xE7, 0x7A, 0x58, 0x70, 0x0F,-    0x53, 0xBC, 0x8E, 0xC5, 0x2A, 0x94, 0x16, 0x90,-    0xB4, 0xD0, 0xB0, 0x87, 0xFB, 0x6F, 0xCB, 0x3F,-    0x39, 0x83, 0x2B, 0x9D, 0xE8, 0xF7, 0x5E, 0xC2,-    0x0B, 0xD4, 0x30, 0x79, 0x81, 0x17, 0x49, 0xCD,-    0xC9, 0x07, 0xED, 0xB9, 0x41, 0x57, 0xD1, 0x80-  },-  {-    0x61, 0xC7, 0x2F, 0x8C, 0xCC, 0x91, 0xDB, 0xB5,-    0x4C, 0xA6, 0x75, 0x0B, 0xC4, 0x89, 0x67, 0x2D,-    0xE0, 0x9F, 0xAE, 0xDB, 0x8F, 0xDD, 0x4F, 0x94,-    0xFF, 0x23, 0x20, 0x90, 0x9A, 0x30, 0x3F, 0x5D,-    0x5A, 0x98, 0x48, 0x1C, 0x0B, 0xC1, 0xA6, 0x25,-    0x41, 0x9F, 0xB4, 0xDE, 0xBF, 0xBF, 0x7F, 0x8A,-    0x53, 0xBB, 0x07, 0xEC, 0x3D, 0x98, 0x5E, 0x8E,-    0xA1, 0x1E, 0x72, 0xD5, 0x59, 0x94, 0x07, 0x80-  },-  {-    0xAF, 0xD8, 0x14, 0x5B, 0x25, 0x9E, 0xEF, 0xC8,-    0xD1, 0x26, 0x20, 0xC3, 0xC5, 0xB0, 0x3E, 0x1E,-    0xD8, 0xFD, 0x2C, 0xCE, 0xFE, 0x03, 0x65, 0x07,-    0x8C, 0x80, 0xFD, 0x42, 0xC1, 0x77, 0x0E, 0x28,-    0xB4, 0x49, 0x48, 0xF2, 0x7E, 0x65, 0xA1, 0x88,-    0x66, 0x90, 0x11, 0x0D, 0xB8, 0x14, 0x39, 0x7B,-    0x68, 0xE4, 0x3D, 0x80, 0xD1, 0xBA, 0x16, 0xDF,-    0xA3, 0x58, 0xE7, 0x39, 0xC8, 0x98, 0xCF, 0xA3-  },-  {-    0x55, 0x2F, 0xC7, 0x89, 0x3C, 0xF1, 0xCE, 0x93,-    0x3A, 0xDA, 0x35, 0xC0, 0xDA, 0x98, 0x84, 0x4E,-    0x41, 0x54, 0x5E, 0x24, 0x4C, 0x31, 0x57, 0xA1,-    0x42, 0x8D, 0x7B, 0x4C, 0x21, 0xF9, 0xCD, 0x7E,-    0x40, 0x71, 0xAE, 0xD7, 0x7B, 0x7C, 0xA9, 0xF1,-    0xC3, 0x8F, 0xBA, 0x32, 0x23, 0x74, 0x12, 0xEF,-    0x21, 0xA3, 0x42, 0x74, 0x2E, 0xC8, 0x32, 0x43,-    0x78, 0xF2, 0x1E, 0x50, 0x7F, 0xAF, 0xDD, 0x88-  },-  {-    0x46, 0x7A, 0x33, 0xFB, 0xAD, 0xF5, 0xEB, 0xC5,-    0x25, 0x96, 0xEF, 0x86, 0xAA, 0xAE, 0xFC, 0x6F,-    0xAB, 0xA8, 0xEE, 0x65, 0x1B, 0x1C, 0xE0, 0x4D,-    0xE3, 0x68, 0xA0, 0x3A, 0x5A, 0x90, 0x40, 0xEF,-    0x28, 0x35, 0xE0, 0x0A, 0xDB, 0x09, 0xAB, 0xB3,-    0xFB, 0xD2, 0xBC, 0xE8, 0x18, 0xA2, 0x41, 0x3D,-    0x0B, 0x02, 0x53, 0xB5, 0xBD, 0xA4, 0xFC, 0x5B,-    0x2F, 0x6F, 0x85, 0xF3, 0xFD, 0x5B, 0x55, 0xF2-  },-  {-    0x22, 0xEF, 0xF8, 0xE6, 0xDD, 0x52, 0x36, 0xF5,-    0xF5, 0x7D, 0x94, 0xED, 0xE8, 0x74, 0xD6, 0xC9,-    0x42, 0x8E, 0x8F, 0x5D, 0x56, 0x6F, 0x17, 0xCD,-    0x6D, 0x18, 0x48, 0xCD, 0x75, 0x2F, 0xE1, 0x3C,-    0x65, 0x5C, 0xB1, 0x0F, 0xBA, 0xAF, 0xF7, 0x68,-    0x72, 0xF2, 0xBF, 0x2D, 0xA9, 0x9E, 0x15, 0xDC,-    0x62, 0x40, 0x75, 0xE1, 0xEC, 0x2F, 0x58, 0xA3,-    0xF6, 0x40, 0x72, 0x12, 0x18, 0x38, 0x56, 0x9E-  },-  {-    0x9C, 0xEC, 0x6B, 0xBF, 0x62, 0xC4, 0xBC, 0xE4,-    0x13, 0x8A, 0xBA, 0xE1, 0xCB, 0xEC, 0x8D, 0xAD,-    0x31, 0x95, 0x04, 0x44, 0xE9, 0x03, 0x21, 0xB1,-    0x34, 0x71, 0x96, 0x83, 0x4C, 0x11, 0x4B, 0x86,-    0x4A, 0xF3, 0xF3, 0xCC, 0x35, 0x08, 0xF8, 0x37,-    0x51, 0xFF, 0xB4, 0xED, 0xA7, 0xC8, 0x4D, 0x14,-    0x07, 0x34, 0xBB, 0x42, 0x63, 0xC3, 0x62, 0x5C,-    0x00, 0xF0, 0x4F, 0x4C, 0x80, 0x68, 0x98, 0x1B-  },-  {-    0xA8, 0xB6, 0x0F, 0xA4, 0xFC, 0x24, 0x42, 0xF6,-    0xF1, 0x51, 0x4A, 0xD7, 0x40, 0x26, 0x26, 0x92,-    0x0C, 0xC7, 0xC2, 0xC9, 0xF7, 0x21, 0x24, 0xB8,-    0xCB, 0xA8, 0xEE, 0x2C, 0xB7, 0xC4, 0x58, 0x6F,-    0x65, 0x8A, 0x44, 0x10, 0xCF, 0xFC, 0xC0, 0xAB,-    0x88, 0x34, 0x39, 0x55, 0xE0, 0x94, 0xC6, 0xAF,-    0x0D, 0x20, 0xD0, 0xC7, 0x14, 0xFB, 0x0A, 0x98,-    0x8F, 0x54, 0x3F, 0x30, 0x0F, 0x58, 0xD3, 0x89-  },-  {-    0x82, 0x71, 0xCC, 0x45, 0xDF, 0xA5, 0xE4, 0x17,-    0x0E, 0x84, 0x7E, 0x86, 0x30, 0xB9, 0x52, 0xCF,-    0x9C, 0x2A, 0xA7, 0x77, 0xD0, 0x6F, 0x26, 0xA7,-    0x58, 0x5B, 0x83, 0x81, 0xF1, 0x88, 0xDA, 0xCC,-    0x73, 0x37, 0x39, 0x1C, 0xFC, 0xC9, 0x4B, 0x05,-    0x3D, 0xC4, 0xEC, 0x29, 0xCC, 0x17, 0xF0, 0x77,-    0x87, 0x04, 0x28, 0xF1, 0xAC, 0x23, 0xFD, 0xDD,-    0xA1, 0x65, 0xEF, 0x5A, 0x3F, 0x15, 0x5F, 0x39-  },-  {-    0xBF, 0x23, 0xC0, 0xC2, 0x5C, 0x80, 0x60, 0xE4,-    0xF6, 0x99, 0x5F, 0x16, 0x23, 0xA3, 0xBE, 0xBE,-    0xCA, 0xA9, 0x6E, 0x30, 0x86, 0x80, 0x00, 0x0A,-    0x8A, 0xA3, 0xCD, 0x56, 0xBB, 0x1A, 0x6D, 0xA0,-    0x99, 0xE1, 0x0D, 0x92, 0x31, 0xB3, 0x7F, 0x45,-    0x19, 0xB2, 0xEF, 0xD2, 0xC2, 0x4D, 0xE7, 0x2F,-    0x31, 0xA5, 0xF1, 0x95, 0x35, 0x24, 0x1B, 0x4A,-    0x59, 0xFA, 0x3C, 0x03, 0xCE, 0xB7, 0x90, 0xE7-  },-  {-    0x87, 0x7F, 0xD6, 0x52, 0xC0, 0x52, 0x81, 0x00,-    0x9C, 0x0A, 0x52, 0x50, 0xE7, 0xA3, 0xA6, 0x71,-    0xF8, 0xB1, 0x8C, 0x10, 0x88, 0x17, 0xFE, 0x4A,-    0x87, 0x4D, 0xE2, 0x2D, 0xA8, 0xE4, 0x5D, 0xB1,-    0x19, 0x58, 0xA6, 0x00, 0xC5, 0xF6, 0x2E, 0x67,-    0xD3, 0x6C, 0xBF, 0x84, 0x47, 0x4C, 0xF2, 0x44,-    0xA9, 0xC2, 0xB0, 0x3A, 0x9F, 0xB9, 0xDC, 0x71,-    0x1C, 0xD1, 0xA2, 0xCA, 0xB6, 0xF3, 0xFA, 0xE0-  },-  {-    0x29, 0xDF, 0x4D, 0x87, 0xEA, 0x44, 0x4B, 0xAF,-    0x5B, 0xCD, 0xF5, 0xF4, 0xE4, 0x15, 0x79, 0xE2,-    0x8A, 0x67, 0xDE, 0x84, 0x14, 0x9F, 0x06, 0xC0,-    0x3F, 0x11, 0x0E, 0xA8, 0x4F, 0x57, 0x2A, 0x9F,-    0x67, 0x6A, 0xDD, 0xD0, 0x4C, 0x48, 0x78, 0xF4,-    0x9C, 0x5C, 0x00, 0xAC, 0xCD, 0xA4, 0x41, 0xB1,-    0xA3, 0x87, 0xCA, 0xCE, 0xB2, 0xE9, 0x93, 0xBB,-    0x7A, 0x10, 0xCD, 0x8C, 0x2D, 0x67, 0x17, 0xE1-  },-  {-    0x71, 0x0D, 0xAC, 0xB1, 0x66, 0x84, 0x46, 0x39,-    0xCD, 0x7B, 0x63, 0x7C, 0x27, 0x42, 0x09, 0x42,-    0x4E, 0x24, 0x49, 0xDC, 0x35, 0xD7, 0x90, 0xBB,-    0xFA, 0x4F, 0x76, 0x17, 0x70, 0x54, 0xA3, 0x6B,-    0x3B, 0x76, 0xFA, 0xC0, 0xCA, 0x6E, 0x61, 0xDF,-    0x1E, 0x68, 0x70, 0x00, 0x67, 0x8A, 0xC0, 0x74,-    0x6D, 0xF7, 0x5D, 0x0A, 0x39, 0x54, 0x89, 0x76,-    0x81, 0xFD, 0x39, 0x3A, 0x15, 0x5A, 0x1B, 0xB4-  },-  {-    0xC1, 0xD5, 0xF9, 0x3B, 0x8D, 0xEA, 0x1F, 0x25,-    0x71, 0xBA, 0xBC, 0xCB, 0xC0, 0x17, 0x64, 0x54,-    0x1A, 0x0C, 0xDA, 0x87, 0xE4, 0x44, 0xD6, 0x73,-    0xC5, 0x09, 0x66, 0xCA, 0x55, 0x9C, 0x33, 0x35,-    0x4B, 0x3A, 0xCB, 0x26, 0xE5, 0xD5, 0x78, 0x1F,-    0xFB, 0x28, 0x84, 0x7A, 0x4B, 0x47, 0x54, 0xD7,-    0x70, 0x08, 0xC6, 0x2A, 0x83, 0x58, 0x35, 0xF5,-    0x00, 0xDE, 0xA7, 0xC3, 0xB5, 0x8B, 0xDA, 0xE2-  },-  {-    0xA4, 0x1E, 0x41, 0x27, 0x1C, 0xDA, 0xB8, 0xAF,-    0x4D, 0x72, 0xB1, 0x04, 0xBF, 0xB2, 0xAD, 0x04,-    0x1A, 0xC4, 0xDF, 0x14, 0x67, 0x7D, 0xA6, 0x71,-    0xD8, 0x56, 0x40, 0xC4, 0xB1, 0x87, 0xF5, 0x0C,-    0x2B, 0x66, 0x51, 0x3C, 0x46, 0x19, 0xFB, 0xD5,-    0xD5, 0xDC, 0x4F, 0xE6, 0x5D, 0xD3, 0x7B, 0x90,-    0x42, 0xE9, 0x84, 0x8D, 0xDA, 0x55, 0x6A, 0x50,-    0x4C, 0xAA, 0x2B, 0x1C, 0x6A, 0xFE, 0x47, 0x30-  },-  {-    0xE7, 0xBC, 0xBA, 0xCD, 0xC3, 0x79, 0xC4, 0x3D,-    0x81, 0xEB, 0xAD, 0xCB, 0x37, 0x78, 0x15, 0x52,-    0xFC, 0x1D, 0x75, 0x3E, 0x8C, 0xF3, 0x10, 0xD9,-    0x68, 0x39, 0x2D, 0x06, 0xC9, 0x1F, 0x1D, 0x64,-    0xCC, 0x9E, 0x90, 0xCE, 0x1D, 0x22, 0xC3, 0x2D,-    0x27, 0x7F, 0xC6, 0xCD, 0xA4, 0x33, 0xA4, 0xD4,-    0x42, 0xC7, 0x62, 0xE9, 0xEA, 0xCF, 0x2C, 0x25,-    0x9F, 0x32, 0xD6, 0x4C, 0xF9, 0xDA, 0x3A, 0x22-  },-  {-    0x51, 0x75, 0x5B, 0x4A, 0xC5, 0x45, 0x6B, 0x13,-    0x21, 0x8A, 0x19, 0xC5, 0xB9, 0x24, 0x2F, 0x57,-    0xC4, 0xA9, 0x81, 0xE4, 0xD4, 0xEC, 0xDC, 0xE0,-    0x9A, 0x31, 0x93, 0x36, 0x2B, 0x80, 0x8A, 0x57,-    0x93, 0x45, 0xD4, 0x88, 0x1C, 0x26, 0x07, 0xA5,-    0x65, 0x34, 0xDD, 0x7F, 0x21, 0x95, 0x6A, 0xFF,-    0x72, 0xC2, 0xF4, 0x17, 0x3A, 0x6E, 0x7B, 0x6C,-    0xC2, 0x21, 0x2B, 0xA0, 0xE3, 0xDA, 0xEE, 0x1F-  },-  {-    0xDC, 0xC2, 0xC4, 0xBE, 0xB9, 0xC1, 0xF2, 0x60,-    0x7B, 0x78, 0x6C, 0x20, 0xC6, 0x31, 0x97, 0x23,-    0x47, 0x03, 0x4C, 0x1C, 0xC0, 0x2F, 0xCC, 0x7D,-    0x02, 0xFF, 0x01, 0x09, 0x9C, 0xFE, 0x1C, 0x69,-    0x89, 0x84, 0x0A, 0xC2, 0x13, 0x92, 0x36, 0x29,-    0x11, 0x3A, 0xA8, 0xBA, 0xD7, 0x13, 0xCC, 0xF0,-    0xFE, 0x4C, 0xE1, 0x32, 0x64, 0xFB, 0x32, 0xB8,-    0xB0, 0xFE, 0x37, 0x2D, 0xA3, 0x82, 0x54, 0x4A-  },-  {-    0x3D, 0x55, 0x17, 0x6A, 0xCE, 0xA4, 0xA7, 0xE3,-    0xA6, 0x5F, 0xFA, 0x9F, 0xB1, 0x0A, 0x7A, 0x17,-    0x67, 0x19, 0x9C, 0xF0, 0x77, 0xCE, 0xE9, 0xF7,-    0x15, 0x32, 0xD6, 0x7C, 0xD7, 0xC7, 0x3C, 0x9F,-    0x93, 0xCF, 0xC3, 0x7C, 0xCD, 0xCC, 0x1F, 0xDE,-    0xF5, 0x0A, 0xAD, 0x46, 0xA5, 0x04, 0xA6, 0x50,-    0xD2, 0x98, 0xD5, 0x97, 0xA3, 0xA9, 0xFA, 0x95,-    0xC6, 0xC4, 0x0C, 0xB7, 0x1F, 0xA5, 0xE7, 0x25-  },-  {-    0xD0, 0x77, 0x13, 0xC0, 0x05, 0xDE, 0x96, 0xDD,-    0x21, 0xD2, 0xEB, 0x8B, 0xBE, 0xCA, 0x66, 0x74,-    0x6E, 0xA5, 0x1A, 0x31, 0xAE, 0x92, 0x2A, 0x3E,-    0x74, 0x86, 0x48, 0x89, 0x54, 0x0A, 0x48, 0xDB,-    0x27, 0xD7, 0xE4, 0xC9, 0x03, 0x11, 0x63, 0x8B,-    0x22, 0x4B, 0xF0, 0x20, 0x1B, 0x50, 0x18, 0x91,-    0x75, 0x48, 0x48, 0x11, 0x3C, 0x26, 0x61, 0x08,-    0xD0, 0xAD, 0xB1, 0x3D, 0xB7, 0x19, 0x09, 0xC7-  },-  {-    0x58, 0x98, 0x3C, 0x21, 0x43, 0x3D, 0x95, 0x0C,-    0xAA, 0x23, 0xE4, 0xBC, 0x18, 0x54, 0x3B, 0x8E,-    0x60, 0x1C, 0x20, 0x43, 0x18, 0x53, 0x21, 0x52,-    0xDA, 0xF5, 0xE1, 0x59, 0xA0, 0xCD, 0x14, 0x80,-    0x18, 0x3D, 0x29, 0x28, 0x5C, 0x05, 0xF1, 0x29,-    0xCB, 0x0C, 0xC3, 0x16, 0x46, 0x87, 0x92, 0x80,-    0x86, 0xFF, 0xE3, 0x80, 0x15, 0x8D, 0xF1, 0xD3,-    0x94, 0xC6, 0xAC, 0x0D, 0x42, 0x88, 0xBC, 0xA8-  },-  {-    0x81, 0x00, 0xA8, 0xDC, 0x52, 0x8D, 0x2B, 0x68,-    0x2A, 0xB4, 0x25, 0x08, 0x01, 0xBA, 0x33, 0xF0,-    0x2A, 0x3E, 0x94, 0xC5, 0x4D, 0xAC, 0x0A, 0xE1,-    0x48, 0x2A, 0xA2, 0x1F, 0x51, 0xEF, 0x3A, 0x82,-    0xF3, 0x80, 0x7E, 0x6F, 0xAC, 0xB0, 0xAE, 0xB0,-    0x59, 0x47, 0xBF, 0x7A, 0xA2, 0xAD, 0xCB, 0x03,-    0x43, 0x56, 0xF9, 0x0F, 0xA4, 0x56, 0x0E, 0xDE,-    0x02, 0x20, 0x1A, 0x37, 0xE4, 0x11, 0xEC, 0x1A-  },-  {-    0x07, 0x02, 0x5F, 0x1B, 0xB6, 0xC7, 0x84, 0xF3,-    0xFE, 0x49, 0xDE, 0x5C, 0x14, 0xB9, 0x36, 0xA5,-    0xAC, 0xAC, 0xAC, 0xAA, 0xB3, 0x3F, 0x6A, 0xC4,-    0xD0, 0xE0, 0x0A, 0xB6, 0xA1, 0x24, 0x83, 0xD6,-    0xBE, 0xC0, 0x0B, 0x4F, 0xE6, 0x7C, 0x7C, 0xA5,-    0xCC, 0x50, 0x8C, 0x2A, 0x53, 0xEF, 0xB5, 0xBF,-    0xA5, 0x39, 0x87, 0x69, 0xD8, 0x43, 0xFF, 0x0D,-    0x9E, 0x8B, 0x14, 0xD3, 0x6A, 0x01, 0xA7, 0x7F-  },-  {-    0xBA, 0x6A, 0xEF, 0xD9, 0x72, 0xB6, 0x18, 0x6E,-    0x02, 0x7A, 0x76, 0x27, 0x3A, 0x4A, 0x72, 0x33,-    0x21, 0xA3, 0xF5, 0x80, 0xCF, 0xA8, 0x94, 0xDA,-    0x5A, 0x9C, 0xE8, 0xE7, 0x21, 0xC8, 0x28, 0x55,-    0x2C, 0x64, 0xDA, 0xCE, 0xE3, 0xA7, 0xFD, 0x2D,-    0x74, 0x3B, 0x5C, 0x35, 0xAD, 0x0C, 0x8E, 0xFA,-    0x71, 0xF8, 0xCE, 0x99, 0xBF, 0x96, 0x33, 0x47,-    0x10, 0xE2, 0xC2, 0x34, 0x6E, 0x8F, 0x3C, 0x52-  },-  {-    0xE0, 0x72, 0x1E, 0x02, 0x51, 0x7A, 0xED, 0xFA,-    0x4E, 0x7E, 0x9B, 0xA5, 0x03, 0xE0, 0x25, 0xFD,-    0x46, 0xE7, 0x14, 0x56, 0x6D, 0xC8, 0x89, 0xA8,-    0x4C, 0xBF, 0xE5, 0x6A, 0x55, 0xDF, 0xBE, 0x2F,-    0xC4, 0x93, 0x8A, 0xC4, 0x12, 0x05, 0x88, 0x33,-    0x5D, 0xEA, 0xC8, 0xEF, 0x3F, 0xA2, 0x29, 0xAD,-    0xC9, 0x64, 0x7F, 0x54, 0xAD, 0x2E, 0x34, 0x72,-    0x23, 0x4F, 0x9B, 0x34, 0xEF, 0xC4, 0x65, 0x43-  },-  {-    0xB6, 0x29, 0x26, 0x69, 0xCC, 0xD3, 0x8D, 0x5F,-    0x01, 0xCA, 0xAE, 0x96, 0xBA, 0x27, 0x2C, 0x76,-    0xA8, 0x79, 0xA4, 0x57, 0x43, 0xAF, 0xA0, 0x72,-    0x5D, 0x83, 0xB9, 0xEB, 0xB2, 0x66, 0x65, 0xB7,-    0x31, 0xF1, 0x84, 0x8C, 0x52, 0xF1, 0x19, 0x72,-    0xB6, 0x64, 0x4F, 0x55, 0x4C, 0x06, 0x4F, 0xA9,-    0x07, 0x80, 0xDB, 0xBB, 0xF3, 0xA8, 0x9D, 0x4F,-    0xC3, 0x1F, 0x67, 0xDF, 0x3E, 0x58, 0x57, 0xEF-  },-  {-    0x23, 0x19, 0xE3, 0x78, 0x9C, 0x47, 0xE2, 0xDA,-    0xA5, 0xFE, 0x80, 0x7F, 0x61, 0xBE, 0xC2, 0xA1,-    0xA6, 0x53, 0x7F, 0xA0, 0x3F, 0x19, 0xFF, 0x32,-    0xE8, 0x7E, 0xEC, 0xBF, 0xD6, 0x4B, 0x7E, 0x0E,-    0x8C, 0xCF, 0xF4, 0x39, 0xAC, 0x33, 0x3B, 0x04,-    0x0F, 0x19, 0xB0, 0xC4, 0xDD, 0xD1, 0x1A, 0x61,-    0xE2, 0x4A, 0xC1, 0xFE, 0x0F, 0x10, 0xA0, 0x39,-    0x80, 0x6C, 0x5D, 0xCC, 0x0D, 0xA3, 0xD1, 0x15-  },-  {-    0xF5, 0x97, 0x11, 0xD4, 0x4A, 0x03, 0x1D, 0x5F,-    0x97, 0xA9, 0x41, 0x3C, 0x06, 0x5D, 0x1E, 0x61,-    0x4C, 0x41, 0x7E, 0xDE, 0x99, 0x85, 0x90, 0x32,-    0x5F, 0x49, 0xBA, 0xD2, 0xFD, 0x44, 0x4D, 0x3E,-    0x44, 0x18, 0xBE, 0x19, 0xAE, 0xC4, 0xE1, 0x14,-    0x49, 0xAC, 0x1A, 0x57, 0x20, 0x78, 0x98, 0xBC,-    0x57, 0xD7, 0x6A, 0x1B, 0xCF, 0x35, 0x66, 0x29,-    0x2C, 0x20, 0xC6, 0x83, 0xA5, 0xC4, 0x64, 0x8F-  },-  {-    0xDF, 0x0A, 0x9D, 0x0C, 0x21, 0x28, 0x43, 0xA6,-    0xA9, 0x34, 0xE3, 0x90, 0x2B, 0x2D, 0xD3, 0x0D,-    0x17, 0xFB, 0xA5, 0xF9, 0x69, 0xD2, 0x03, 0x0B,-    0x12, 0xA5, 0x46, 0xD8, 0xA6, 0xA4, 0x5E, 0x80,-    0xCF, 0x56, 0x35, 0xF0, 0x71, 0xF0, 0x45, 0x2E,-    0x9C, 0x91, 0x92, 0x75, 0xDA, 0x99, 0xBE, 0xD5,-    0x1E, 0xB1, 0x17, 0x3C, 0x1A, 0xF0, 0x51, 0x87,-    0x26, 0xB7, 0x5B, 0x0E, 0xC3, 0xBA, 0xE2, 0xB5-  },-  {-    0xA3, 0xEB, 0x6E, 0x6C, 0x7B, 0xF2, 0xFB, 0x8B,-    0x28, 0xBF, 0xE8, 0xB1, 0x5E, 0x15, 0xBB, 0x50,-    0x0F, 0x78, 0x1E, 0xCC, 0x86, 0xF7, 0x78, 0xC3,-    0xA4, 0xE6, 0x55, 0xFC, 0x58, 0x69, 0xBF, 0x28,-    0x46, 0xA2, 0x45, 0xD4, 0xE3, 0x3B, 0x7B, 0x14,-    0x43, 0x6A, 0x17, 0xE6, 0x3B, 0xE7, 0x9B, 0x36,-    0x65, 0x5C, 0x22, 0x6A, 0x50, 0xFF, 0xBC, 0x71,-    0x24, 0x20, 0x7B, 0x02, 0x02, 0x34, 0x2D, 0xB5-  },-  {-    0x56, 0xD4, 0xCB, 0xCD, 0x07, 0x05, 0x63, 0x42,-    0x6A, 0x01, 0x70, 0x69, 0x42, 0x5C, 0x2C, 0xD2,-    0xAE, 0x54, 0x06, 0x68, 0x28, 0x7A, 0x5F, 0xB9,-    0xDA, 0xC4, 0x32, 0xEB, 0x8A, 0xB1, 0xA3, 0x53,-    0xA3, 0x0F, 0x2F, 0xE1, 0xF4, 0x0D, 0x83, 0x33,-    0x3A, 0xFE, 0x69, 0x6A, 0x26, 0x77, 0x95, 0x40,-    0x8A, 0x92, 0xFE, 0x7D, 0xA0, 0x7A, 0x0C, 0x18,-    0x14, 0xCF, 0x77, 0xF3, 0x6E, 0x10, 0x5E, 0xE8-  },-  {-    0xE5, 0x9B, 0x99, 0x87, 0xD4, 0x28, 0xB3, 0xED,-    0xA3, 0x7D, 0x80, 0xAB, 0xDB, 0x16, 0xCD, 0x2B,-    0x0A, 0xEF, 0x67, 0x4C, 0x2B, 0x1D, 0xDA, 0x44,-    0x32, 0xEA, 0x91, 0xEE, 0x6C, 0x93, 0x5C, 0x68,-    0x4B, 0x48, 0xB4, 0x42, 0x8A, 0x8C, 0xC7, 0x40,-    0xE5, 0x79, 0xA3, 0x0D, 0xEF, 0xF3, 0x5A, 0x80,-    0x30, 0x13, 0x82, 0x0D, 0xD2, 0x3F, 0x14, 0xAE,-    0x1D, 0x84, 0x13, 0xB5, 0xC8, 0x67, 0x2A, 0xEC-  },-  {-    0xCD, 0x9F, 0xCC, 0x99, 0xF9, 0x9D, 0x4C, 0xC1,-    0x6D, 0x03, 0x19, 0x00, 0xB2, 0xA7, 0x36, 0xE1,-    0x50, 0x8D, 0xB4, 0xB5, 0x86, 0x81, 0x4E, 0x63,-    0x45, 0x85, 0x7F, 0x35, 0x4A, 0x70, 0xCC, 0xEC,-    0xB1, 0xDF, 0x3B, 0x50, 0xA1, 0x9A, 0xDA, 0xF4,-    0x3C, 0x27, 0x8E, 0xFA, 0x42, 0x3F, 0xF4, 0xBB,-    0x6C, 0x52, 0x3E, 0xC7, 0xFD, 0x78, 0x59, 0xB9,-    0x7B, 0x16, 0x8A, 0x7E, 0xBF, 0xF8, 0x46, 0x7C-  },-  {-    0x06, 0x02, 0x18, 0x5D, 0x8C, 0x3A, 0x78, 0x73,-    0x8B, 0x99, 0x16, 0x4B, 0x8B, 0xC6, 0xFF, 0xB2,-    0x1C, 0x7D, 0xEB, 0xEB, 0xBF, 0x80, 0x63, 0x72,-    0xE0, 0xDA, 0x44, 0xD1, 0x21, 0x54, 0x55, 0x97,-    0xB9, 0xC6, 0x62, 0xA2, 0x55, 0xDC, 0x31, 0x54,-    0x2C, 0xF9, 0x95, 0xEC, 0xBE, 0x6A, 0x50, 0xFB,-    0x5E, 0x6E, 0x0E, 0xE4, 0xEF, 0x24, 0x0F, 0xE5,-    0x57, 0xED, 0xED, 0x11, 0x88, 0x08, 0x7E, 0x86-  },-  {-    0xC0, 0x8A, 0xFA, 0x5B, 0x92, 0x7B, 0xF0, 0x80,-    0x97, 0xAF, 0xC5, 0xFF, 0xF9, 0xCA, 0x4E, 0x78,-    0x00, 0x12, 0x5C, 0x1F, 0x52, 0xF2, 0xAF, 0x35,-    0x53, 0xFA, 0x2B, 0x89, 0xE1, 0xE3, 0x01, 0x5C,-    0x4F, 0x87, 0xD5, 0xE0, 0xA4, 0x89, 0x56, 0xAD,-    0x31, 0x45, 0x0B, 0x08, 0x3D, 0xAD, 0x14, 0x7F,-    0xFB, 0x5E, 0xC0, 0x34, 0x34, 0xA2, 0x68, 0x30,-    0xCF, 0x37, 0xD1, 0x03, 0xAB, 0x50, 0xC5, 0xDA-  },-  {-    0x36, 0xF1, 0xE1, 0xC1, 0x1D, 0x6E, 0xF6, 0xBC,-    0x3B, 0x53, 0x6D, 0x50, 0x5D, 0x54, 0x4A, 0x87,-    0x15, 0x22, 0xC5, 0xC2, 0xA2, 0x53, 0x06, 0x7E,-    0xC9, 0x93, 0x3B, 0x6E, 0xC2, 0x54, 0x64, 0xDA,-    0xF9, 0x85, 0x52, 0x5F, 0x5B, 0x95, 0x60, 0xA1,-    0x6D, 0x89, 0x02, 0x59, 0xAC, 0x1B, 0xB5, 0xCC,-    0x67, 0xC0, 0xC4, 0x69, 0xCD, 0xE1, 0x33, 0xDE,-    0xF0, 0x00, 0xEA, 0x1D, 0x68, 0x6F, 0x4F, 0x5D-  },-  {-    0xBF, 0x2A, 0xB2, 0xE2, 0x47, 0x0F, 0x54, 0x38,-    0xC3, 0xB6, 0x89, 0xE6, 0x6E, 0x76, 0x86, 0xFF,-    0xFA, 0x0C, 0xB1, 0xE1, 0x79, 0x8A, 0xD3, 0xA8,-    0x6F, 0xF9, 0x90, 0x75, 0xBF, 0x61, 0x38, 0xE3,-    0x3D, 0x9C, 0x0C, 0xE5, 0x9A, 0xFB, 0x24, 0xAC,-    0x67, 0xA0, 0x2A, 0xF3, 0x44, 0x28, 0x19, 0x1A,-    0x9A, 0x0A, 0x60, 0x41, 0xC0, 0x74, 0x71, 0xB7,-    0xC3, 0xB1, 0xA7, 0x52, 0xD6, 0xFC, 0x0B, 0x8B-  },-  {-    0xD4, 0x00, 0x60, 0x1F, 0x97, 0x28, 0xCC, 0xC4,-    0xC9, 0x23, 0x42, 0xD9, 0x78, 0x7D, 0x8D, 0x28,-    0xAB, 0x32, 0x3A, 0xF3, 0x75, 0xCA, 0x56, 0x24,-    0xB4, 0xBB, 0x91, 0xD1, 0x72, 0x71, 0xFB, 0xAE,-    0x86, 0x2E, 0x41, 0x3B, 0xE7, 0x3F, 0x1F, 0x68,-    0xE6, 0x15, 0xB8, 0xC5, 0xC3, 0x91, 0xBE, 0x0D,-    0xBD, 0x91, 0x44, 0x74, 0x6E, 0xB3, 0x39, 0xAD,-    0x54, 0x15, 0x47, 0xBA, 0x9C, 0x46, 0x8A, 0x17-  },-  {-    0x79, 0xFE, 0x2F, 0xE1, 0x57, 0xEB, 0x85, 0xA0,-    0x38, 0xAB, 0xB8, 0xEB, 0xBC, 0x64, 0x77, 0x31,-    0xD2, 0xC8, 0x3F, 0x51, 0xB0, 0xAC, 0x6E, 0xE1,-    0x4A, 0xA2, 0x84, 0xCB, 0x6A, 0x35, 0x49, 0xA4,-    0xDC, 0xCE, 0xB3, 0x00, 0x74, 0x0A, 0x82, 0x5F,-    0x52, 0xF5, 0xFB, 0x30, 0xB0, 0x3B, 0x8C, 0x4D,-    0x8B, 0x0F, 0x4A, 0xA6, 0x7A, 0x63, 0xF4, 0xA9,-    0x4E, 0x33, 0x03, 0xC4, 0xED, 0xA4, 0xC0, 0x2B-  },-  {-    0x75, 0x35, 0x13, 0x13, 0xB5, 0x2A, 0x85, 0x29,-    0x29, 0x8D, 0x8C, 0x18, 0x6B, 0x17, 0x68, 0x66,-    0x6D, 0xCC, 0xA8, 0x59, 0x53, 0x17, 0xD7, 0xA4,-    0x81, 0x6E, 0xB8, 0x8C, 0x06, 0x20, 0x20, 0xC0,-    0xC8, 0xEF, 0xC5, 0x54, 0xBB, 0x34, 0x1B, 0x64,-    0x68, 0x8D, 0xB5, 0xCC, 0xAF, 0xC3, 0x5F, 0x3C,-    0x3C, 0xD0, 0x9D, 0x65, 0x64, 0xB3, 0x6D, 0x7B,-    0x04, 0xA2, 0x48, 0xE1, 0x46, 0x98, 0x0D, 0x4B-  },-  {-    0xE3, 0x12, 0x8B, 0x1D, 0x31, 0x1D, 0x02, 0x17,-    0x9D, 0x7F, 0x25, 0xF9, 0x7A, 0x5A, 0x8B, 0xEE,-    0x2C, 0xC8, 0xC8, 0x63, 0x03, 0x64, 0x4F, 0xCD,-    0x66, 0x4E, 0x15, 0x7D, 0x1F, 0xEF, 0x00, 0xF2,-    0x3E, 0x46, 0xF9, 0xA5, 0xE8, 0xE5, 0xC8, 0x90,-    0xCE, 0x56, 0x5B, 0xB6, 0xAB, 0xD4, 0x30, 0x2C,-    0xE0, 0x64, 0x69, 0xD5, 0x2A, 0x5B, 0xD5, 0x3E,-    0x1C, 0x5A, 0x54, 0xD0, 0x46, 0x49, 0xDC, 0x03-  },-  {-    0xC2, 0x38, 0x2A, 0x72, 0xD2, 0xD3, 0xAC, 0xE9,-    0xD5, 0x93, 0x3D, 0x00, 0xB6, 0x08, 0x27, 0xED,-    0x38, 0x0C, 0xDA, 0x08, 0xD0, 0xBA, 0x5F, 0x6D,-    0xD4, 0x1E, 0x29, 0xEE, 0x6D, 0xBE, 0x8E, 0xCB,-    0x92, 0x35, 0xF0, 0x6B, 0xE9, 0x5D, 0x83, 0xB6,-    0x81, 0x6A, 0x2F, 0xB7, 0xA5, 0xAD, 0x47, 0x03,-    0x5E, 0x8A, 0x4B, 0x69, 0xA4, 0x88, 0x4B, 0x99,-    0xE4, 0xBE, 0xCE, 0x58, 0xCA, 0xB2, 0x5D, 0x44-  },-  {-    0x6B, 0x1C, 0x69, 0x46, 0x0B, 0xBD, 0x50, 0xAC,-    0x2E, 0xD6, 0xF3, 0x2E, 0x6E, 0x88, 0x7C, 0xFE,-    0xD4, 0x07, 0xD4, 0x7D, 0xCF, 0x0A, 0xAA, 0x60,-    0x38, 0x7F, 0xE3, 0x20, 0xD7, 0x80, 0xBD, 0x03,-    0xEA, 0xB6, 0xD7, 0xBA, 0xEB, 0x2A, 0x07, 0xD1,-    0x0C, 0xD5, 0x52, 0xA3, 0x00, 0x34, 0x13, 0x54,-    0xEA, 0x9A, 0x5F, 0x03, 0x18, 0x3A, 0x62, 0x3F,-    0x92, 0xA2, 0xD4, 0xD9, 0xF0, 0x09, 0x26, 0xAF-  },-  {-    0x6C, 0xDA, 0x20, 0x6C, 0x80, 0xCD, 0xC9, 0xC4,-    0x4B, 0xA9, 0x90, 0xE0, 0x32, 0x8C, 0x31, 0x4F,-    0x81, 0x9B, 0x14, 0x2D, 0x00, 0x63, 0x04, 0x04,-    0xC4, 0x8C, 0x05, 0xDC, 0x76, 0xD1, 0xB0, 0x0C,-    0xE4, 0xD7, 0x2F, 0xC6, 0xA4, 0x8E, 0x14, 0x69,-    0xDD, 0xEF, 0x60, 0x94, 0x12, 0xC3, 0x64, 0x82,-    0x08, 0x54, 0x21, 0x4B, 0x48, 0x69, 0xAF, 0x09,-    0x0F, 0x00, 0xD3, 0xC1, 0xBA, 0x44, 0x3E, 0x1B-  },-  {-    0x7F, 0xFC, 0x8C, 0x26, 0xFB, 0xD6, 0xA0, 0xF7,-    0xA6, 0x09, 0xE6, 0xE1, 0x93, 0x9F, 0x6A, 0x9E,-    0xDF, 0x1B, 0x0B, 0x06, 0x66, 0x41, 0xFB, 0x76,-    0xC4, 0xF9, 0x60, 0x2E, 0xD7, 0x48, 0xD1, 0x16,-    0x02, 0x49, 0x6B, 0x35, 0x35, 0x5B, 0x1A, 0xA2,-    0x55, 0x85, 0x0A, 0x50, 0x9D, 0x2F, 0x8E, 0xE1,-    0x8C, 0x8F, 0x3E, 0x1D, 0x7D, 0xCB, 0xC3, 0x7A,-    0x13, 0x65, 0x98, 0xF5, 0x6A, 0x59, 0xED, 0x17-  },-  {-    0x70, 0xDE, 0x1F, 0x08, 0xDD, 0x4E, 0x09, 0xD5,-    0xFC, 0x15, 0x1F, 0x17, 0xFC, 0x99, 0x1A, 0x23,-    0xAB, 0xFC, 0x05, 0x10, 0x42, 0x90, 0xD5, 0x04,-    0x68, 0x88, 0x2E, 0xFA, 0xF5, 0x82, 0xB6, 0xEC,-    0x2F, 0x14, 0xF5, 0x77, 0xC0, 0xD6, 0x8C, 0x3A,-    0xD0, 0x66, 0x26, 0x91, 0x6E, 0x3C, 0x86, 0xE6,-    0xDA, 0xAB, 0x6C, 0x53, 0xE5, 0x16, 0x3E, 0x82,-    0xB6, 0xBD, 0x0C, 0xE4, 0x9F, 0xC0, 0xD8, 0xDF-  },-  {-    0x4F, 0x81, 0x93, 0x57, 0x56, 0xED, 0x35, 0xEE,-    0x20, 0x58, 0xEE, 0x0C, 0x6A, 0x61, 0x10, 0xD6,-    0xFA, 0xC5, 0xCB, 0x6A, 0x4F, 0x46, 0xAA, 0x94,-    0x11, 0x60, 0x3F, 0x99, 0x96, 0x58, 0x23, 0xB6,-    0xDA, 0x48, 0x38, 0x27, 0x6C, 0x5C, 0x06, 0xBC,-    0x78, 0x80, 0xE3, 0x76, 0xD9, 0x27, 0x58, 0x36,-    0x9E, 0xE7, 0x30, 0x5B, 0xCE, 0xC8, 0xD3, 0xCF,-    0xD2, 0x8C, 0xCA, 0xBB, 0x7B, 0x4F, 0x05, 0x79-  },-  {-    0xAB, 0xCB, 0x61, 0xCB, 0x36, 0x83, 0xD1, 0x8F,-    0x27, 0xAD, 0x52, 0x79, 0x08, 0xED, 0x2D, 0x32,-    0xA0, 0x42, 0x6C, 0xB7, 0xBB, 0x4B, 0xF1, 0x80,-    0x61, 0x90, 0x3A, 0x7D, 0xC4, 0x2E, 0x7E, 0x76,-    0xF9, 0x82, 0x38, 0x23, 0x04, 0xD1, 0x8A, 0xF8,-    0xC8, 0x0D, 0x91, 0xDD, 0x58, 0xDD, 0x47, 0xAF,-    0x76, 0xF8, 0xE2, 0xC3, 0x6E, 0x28, 0xAF, 0x24,-    0x76, 0xB4, 0xBC, 0xCF, 0x82, 0xE8, 0x9F, 0xDF-  },-  {-    0x02, 0xD2, 0x61, 0xAD, 0x56, 0xA5, 0x26, 0x33,-    0x1B, 0x64, 0x3D, 0xD2, 0x18, 0x6D, 0xE9, 0xA8,-    0x2E, 0x72, 0xA5, 0x82, 0x23, 0xCD, 0x1E, 0x72,-    0x36, 0x86, 0xC5, 0x3D, 0x86, 0x9B, 0x83, 0xB9,-    0x46, 0x32, 0xB7, 0xB6, 0x47, 0xAB, 0x2A, 0xFC,-    0x0D, 0x52, 0x2E, 0x29, 0xDA, 0x3A, 0x56, 0x15,-    0xB7, 0x41, 0xD8, 0x28, 0x52, 0xE0, 0xDF, 0x41,-    0xB6, 0x60, 0x07, 0xDB, 0xCB, 0xA9, 0x05, 0x43-  },-  {-    0xC5, 0x83, 0x27, 0x41, 0xFA, 0x30, 0xC5, 0x43,-    0x68, 0x23, 0x01, 0x53, 0x83, 0xD2, 0x97, 0xFF,-    0x4C, 0x4A, 0x5D, 0x72, 0x76, 0xC3, 0xF9, 0x02,-    0x12, 0x20, 0x66, 0xE0, 0x4B, 0xE5, 0x43, 0x1B,-    0x1A, 0x85, 0xFA, 0xF7, 0x3B, 0x91, 0x84, 0x34,-    0xF9, 0x30, 0x09, 0x63, 0xD1, 0xDE, 0xA9, 0xE8,-    0xAC, 0x39, 0x24, 0xEF, 0x49, 0x02, 0x26, 0xED,-    0xEE, 0xA5, 0xF7, 0x43, 0xE4, 0x10, 0x66, 0x9F-  },-  {-    0xCF, 0xAE, 0xAB, 0x26, 0x8C, 0xD0, 0x75, 0xA5,-    0xA6, 0xAE, 0xD5, 0x15, 0x02, 0x3A, 0x03, 0x2D,-    0x54, 0xF2, 0xF2, 0xFF, 0x73, 0x3C, 0xE0, 0xCB,-    0xC7, 0x8D, 0xB5, 0x1D, 0xB4, 0x50, 0x4D, 0x67,-    0x59, 0x23, 0xF8, 0x27, 0x46, 0xD6, 0x59, 0x46,-    0x06, 0xAD, 0x5D, 0x67, 0x73, 0x4B, 0x11, 0xA6,-    0x7C, 0xC6, 0xA4, 0x68, 0xC2, 0x03, 0x2E, 0x43,-    0xCA, 0x1A, 0x94, 0xC6, 0x27, 0x3A, 0x98, 0x5E-  },-  {-    0x86, 0x08, 0x50, 0xF9, 0x2E, 0xB2, 0x68, 0x27,-    0x2B, 0x67, 0xD1, 0x33, 0x60, 0x9B, 0xD6, 0x4E,-    0x34, 0xF6, 0x1B, 0xF0, 0x3F, 0x4C, 0x17, 0x38,-    0x64, 0x5C, 0x17, 0xFE, 0xC8, 0x18, 0x46, 0x5D,-    0x7E, 0xCD, 0x2B, 0xE2, 0x90, 0x76, 0x41, 0x13,-    0x00, 0x25, 0xFD, 0xA7, 0x94, 0x70, 0xAB, 0x73,-    0x16, 0x46, 0xE7, 0xF6, 0x94, 0x40, 0xE8, 0x36,-    0x7E, 0xA7, 0x6A, 0xC4, 0xCE, 0xE8, 0xA1, 0xDF-  },-  {-    0x84, 0xB1, 0x54, 0xED, 0x29, 0xBB, 0xED, 0xEF,-    0xA6, 0x48, 0x28, 0x68, 0x39, 0x04, 0x6F, 0x4B,-    0x5A, 0xA3, 0x44, 0x30, 0xE2, 0xD6, 0x7F, 0x74,-    0x96, 0xE4, 0xC3, 0x9F, 0x2C, 0x7E, 0xA7, 0x89,-    0x95, 0xF6, 0x9E, 0x12, 0x92, 0x20, 0x00, 0x16,-    0xF1, 0x6A, 0xC3, 0xB3, 0x77, 0x00, 0xE6, 0xC7,-    0xE7, 0x86, 0x1A, 0xFC, 0x39, 0x6B, 0x64, 0xA5,-    0x9A, 0x1D, 0xBF, 0x47, 0xA5, 0x5C, 0x4B, 0xBC-  },-  {-    0xAE, 0xEE, 0xC2, 0x60, 0xA5, 0xD8, 0xEF, 0xF5,-    0xCC, 0xAB, 0x8B, 0x95, 0xDA, 0x43, 0x5A, 0x63,-    0xED, 0x7A, 0x21, 0xEA, 0x7F, 0xC7, 0x55, 0x94,-    0x13, 0xFD, 0x61, 0x7E, 0x33, 0x60, 0x9F, 0x8C,-    0x29, 0x0E, 0x64, 0xBB, 0xAC, 0xC5, 0x28, 0xF6,-    0xC0, 0x80, 0x26, 0x22, 0x88, 0xB0, 0xF0, 0xA3,-    0x21, 0x9B, 0xE2, 0x23, 0xC9, 0x91, 0xBE, 0xE9,-    0x2E, 0x72, 0x34, 0x95, 0x93, 0xE6, 0x76, 0x38-  },-  {-    0x8A, 0xD7, 0x8A, 0x9F, 0x26, 0x60, 0x1D, 0x12,-    0x7E, 0x8D, 0x2F, 0x2F, 0x97, 0x6E, 0x63, 0xD1,-    0x9A, 0x05, 0x4A, 0x17, 0xDC, 0xF5, 0x9E, 0x0F,-    0x01, 0x3A, 0xB5, 0x4A, 0x68, 0x87, 0xBB, 0xDF,-    0xFD, 0xE7, 0xAA, 0xAE, 0x11, 0x7E, 0x0F, 0xBF,-    0x32, 0x71, 0x01, 0x65, 0x95, 0xB9, 0xD9, 0xC7,-    0x12, 0xC0, 0x1B, 0x2C, 0x53, 0xE9, 0x65, 0x5A,-    0x38, 0x2B, 0xC4, 0x52, 0x2E, 0x61, 0x66, 0x45-  },-  {-    0x89, 0x34, 0x15, 0x9D, 0xAD, 0xE1, 0xAC, 0x74,-    0x14, 0x7D, 0xFA, 0x28, 0x2C, 0x75, 0x95, 0x4F,-    0xCE, 0xF4, 0x43, 0xEF, 0x25, 0xF8, 0x0D, 0xFE,-    0x9F, 0xB6, 0xEA, 0x63, 0x3B, 0x85, 0x45, 0x11,-    0x1D, 0x08, 0xB3, 0x4E, 0xF4, 0x3F, 0xFF, 0x17,-    0x02, 0x6C, 0x79, 0x64, 0xF5, 0xDE, 0xAC, 0x6D,-    0x2B, 0x3C, 0x29, 0xDA, 0xCF, 0x27, 0x47, 0xF0,-    0x22, 0xDF, 0x59, 0x67, 0xDF, 0xDC, 0x1A, 0x0A-  },-  {-    0xCD, 0x36, 0xDD, 0x0B, 0x24, 0x06, 0x14, 0xCF,-    0x2F, 0xA2, 0xB9, 0xE9, 0x59, 0x67, 0x9D, 0xCD,-    0xD7, 0x2E, 0xC0, 0xCD, 0x58, 0xA4, 0x3D, 0xA3,-    0x79, 0x0A, 0x92, 0xF6, 0xCD, 0xEB, 0x9E, 0x1E,-    0x79, 0x5E, 0x47, 0x8A, 0x0A, 0x47, 0xD3, 0x71,-    0x10, 0x0D, 0x34, 0x0C, 0x5C, 0xED, 0xCD, 0xBB,-    0xC9, 0xE6, 0x8B, 0x3F, 0x46, 0x08, 0x18, 0xE5,-    0xBD, 0xFF, 0x7B, 0x4C, 0xDA, 0x4C, 0x27, 0x44-  },-  {-    0x00, 0xDF, 0x4E, 0x09, 0x9B, 0x80, 0x71, 0x37,-    0xA8, 0x59, 0x90, 0xF4, 0x9D, 0x3A, 0x94, 0x31,-    0x5E, 0x5A, 0x5F, 0x7F, 0x7A, 0x60, 0x76, 0xB3,-    0x03, 0xE9, 0x6B, 0x05, 0x6F, 0xB9, 0x38, 0x00,-    0x11, 0x1F, 0x47, 0x96, 0x28, 0xE2, 0xF8, 0xDB,-    0x59, 0xAE, 0xB6, 0xAC, 0x70, 0xC3, 0xB6, 0x1F,-    0x51, 0xF9, 0xB4, 0x6E, 0x80, 0xFF, 0xDE, 0xAE,-    0x25, 0xEB, 0xDD, 0xB4, 0xAF, 0x6C, 0xB4, 0xEE-  },-  {-    0x2B, 0x9C, 0x95, 0x5E, 0x6C, 0xAE, 0xD4, 0xB7,-    0xC9, 0xE2, 0x46, 0xB8, 0x6F, 0x9A, 0x17, 0x26,-    0xE8, 0x10, 0xC5, 0x9D, 0x12, 0x6C, 0xEE, 0x66,-    0xED, 0x71, 0xBF, 0x01, 0x5B, 0x83, 0x55, 0x8A,-    0x4B, 0x6D, 0x84, 0xD1, 0x8D, 0xC3, 0xFF, 0x46,-    0x20, 0xC2, 0xFF, 0xB7, 0x22, 0x35, 0x9F, 0xDE,-    0xF8, 0x5B, 0xA0, 0xD4, 0xE2, 0xD2, 0x2E, 0xCB,-    0xE0, 0xED, 0x78, 0x4F, 0x99, 0xAF, 0xE5, 0x87-  },-  {-    0x18, 0x1D, 0xF0, 0xA2, 0x61, 0xA2, 0xF7, 0xD2,-    0x9E, 0xA5, 0xA1, 0x57, 0x72, 0x71, 0x51, 0x05,-    0xD4, 0x50, 0xA4, 0xB6, 0xC2, 0x36, 0xF6, 0x99,-    0xF4, 0x62, 0xD6, 0x0C, 0xA7, 0x64, 0x87, 0xFE,-    0xED, 0xFC, 0x9F, 0x5E, 0xB9, 0x2D, 0xF8, 0x38,-    0xE8, 0xFB, 0x5D, 0xC3, 0x69, 0x4E, 0x84, 0xC5,-    0xE0, 0xF4, 0xA1, 0x0B, 0x76, 0x1F, 0x50, 0x67,-    0x62, 0xBE, 0x05, 0x2C, 0x74, 0x5A, 0x6E, 0xE8-  },-  {-    0x21, 0xFB, 0x20, 0x34, 0x58, 0xBF, 0x3A, 0x7E,-    0x9A, 0x80, 0x43, 0x9F, 0x9A, 0x90, 0x28, 0x99,-    0xCD, 0x5D, 0xE0, 0x13, 0x9D, 0xFD, 0x56, 0xF7,-    0x11, 0x0C, 0x9D, 0xEC, 0x84, 0x37, 0xB2, 0x6B,-    0xDA, 0x63, 0xDE, 0x2F, 0x56, 0x59, 0x26, 0xD8,-    0x5E, 0xDB, 0x1D, 0x6C, 0x68, 0x25, 0x66, 0x97,-    0x43, 0xDD, 0x99, 0x92, 0x65, 0x3D, 0x13, 0x97,-    0x95, 0x44, 0xD5, 0xDC, 0x82, 0x28, 0xBF, 0xAA-  },-  {-    0xEF, 0x02, 0x1F, 0x29, 0xC5, 0xFF, 0xB8, 0x30,-    0xE6, 0x4B, 0x9A, 0xA9, 0x05, 0x8D, 0xD6, 0x60,-    0xFD, 0x2F, 0xCB, 0x81, 0xC4, 0x97, 0xA7, 0xE6,-    0x98, 0xBC, 0xFB, 0xF5, 0x9D, 0xE5, 0xAD, 0x4A,-    0x86, 0xFF, 0x93, 0xC1, 0x0A, 0x4B, 0x9D, 0x1A,-    0xE5, 0x77, 0x47, 0x25, 0xF9, 0x07, 0x2D, 0xCD,-    0xE9, 0xE1, 0xF1, 0x99, 0xBA, 0xB9, 0x1F, 0x8B,-    0xFF, 0x92, 0x18, 0x64, 0xAA, 0x50, 0x2E, 0xEE-  },-  {-    0xB3, 0xCF, 0xDA, 0x40, 0x52, 0x6B, 0x7F, 0x1D,-    0x37, 0x56, 0x9B, 0xDF, 0xCD, 0xF9, 0x11, 0xE5,-    0xA6, 0xEF, 0xE6, 0xB2, 0xEC, 0x90, 0xA0, 0x45,-    0x4C, 0x47, 0xB2, 0xC0, 0x46, 0xBF, 0x13, 0x0F,-    0xC3, 0xB3, 0x52, 0xB3, 0x4D, 0xF4, 0x81, 0x3D,-    0x48, 0xD3, 0x3A, 0xB8, 0xE2, 0x69, 0xB6, 0x9B,-    0x07, 0x56, 0x76, 0xCB, 0x6D, 0x00, 0xA8, 0xDC,-    0xF9, 0xE1, 0xF9, 0x67, 0xEC, 0x19, 0x1B, 0x2C-  },-  {-    0xB4, 0xC6, 0xC3, 0xB2, 0x67, 0x07, 0x1E, 0xEF,-    0xB9, 0xC8, 0xC7, 0x2E, 0x0E, 0x2B, 0x94, 0x12,-    0x93, 0x64, 0x1F, 0x86, 0x73, 0xCB, 0x70, 0xC1,-    0xCC, 0x26, 0xAD, 0x1E, 0x73, 0xCF, 0x14, 0x17,-    0x55, 0x86, 0x0A, 0xD1, 0x9B, 0x34, 0xC2, 0xF3,-    0x4E, 0xD3, 0x5B, 0xB5, 0x2E, 0xC4, 0x50, 0x7C,-    0xC1, 0xFE, 0x59, 0x04, 0x77, 0x43, 0xA5, 0xF0,-    0xC6, 0xFE, 0xBD, 0xE6, 0x25, 0xE2, 0x60, 0x91-  },-  {-    0x57, 0xA3, 0x4F, 0x2B, 0xCC, 0xA6, 0x0D, 0x4B,-    0x85, 0x10, 0x3B, 0x83, 0x0C, 0x9D, 0x79, 0x52,-    0xA4, 0x16, 0xBE, 0x52, 0x63, 0xAE, 0x42, 0x9C,-    0x9E, 0x5E, 0x53, 0xFE, 0x85, 0x90, 0xA8, 0xF7,-    0x8E, 0xC6, 0x5A, 0x51, 0x10, 0x9E, 0xA8, 0x5D,-    0xCD, 0xF7, 0xB6, 0x22, 0x3F, 0x9F, 0x2B, 0x34,-    0x05, 0x39, 0xFA, 0xD8, 0x19, 0x23, 0xDB, 0xF8,-    0xED, 0xAB, 0xF9, 0x51, 0x29, 0xE4, 0xDF, 0xF6-  },-  {-    0x9C, 0xF4, 0x66, 0x62, 0xFC, 0xD6, 0x1A, 0x23,-    0x22, 0x77, 0xB6, 0x85, 0x66, 0x3B, 0x8B, 0x5D,-    0xA8, 0x32, 0xDF, 0xD9, 0xA3, 0xB8, 0xCC, 0xFE,-    0xEC, 0x99, 0x3E, 0xC6, 0xAC, 0x41, 0x5A, 0xD0,-    0x7E, 0x04, 0x8A, 0xDF, 0xE4, 0x14, 0xDF, 0x27,-    0x27, 0x70, 0xDB, 0xA8, 0x67, 0xDA, 0x5C, 0x12,-    0x24, 0xC6, 0xFD, 0x0A, 0xA0, 0xC2, 0x18, 0x7D,-    0x42, 0x6A, 0xC6, 0x47, 0xE9, 0x88, 0x73, 0x61-  },-  {-    0x5C, 0xE1, 0x04, 0x2A, 0xB4, 0xD5, 0x42, 0xC2,-    0xF9, 0xEE, 0x9D, 0x17, 0x26, 0x2A, 0xF8, 0x16,-    0x40, 0x98, 0x93, 0x5B, 0xEF, 0x17, 0x3D, 0x0E,-    0x18, 0x48, 0x9B, 0x04, 0x84, 0x17, 0x46, 0xCD,-    0x2F, 0x2D, 0xF8, 0x66, 0xBD, 0x7D, 0xA6, 0xE5,-    0xEF, 0x90, 0x24, 0xC6, 0x48, 0x02, 0x3E, 0xC7,-    0x23, 0xAB, 0x9C, 0x62, 0xFD, 0x80, 0x28, 0x57,-    0x39, 0xD8, 0x4F, 0x15, 0xD2, 0xAB, 0x51, 0x5A-  },-  {-    0x84, 0x88, 0x39, 0x6B, 0xD4, 0xA8, 0x72, 0x9B,-    0x7A, 0x47, 0x31, 0x78, 0xF2, 0x32, 0xDA, 0xDF,-    0x3F, 0x0F, 0x8E, 0x22, 0x67, 0x8B, 0xA5, 0xA4,-    0x3E, 0x04, 0x1E, 0x72, 0xDA, 0x1E, 0x2C, 0xF8,-    0x21, 0x94, 0xC3, 0x07, 0x20, 0x7A, 0x54, 0xCB,-    0x81, 0x56, 0x29, 0x33, 0x39, 0xEA, 0xEC, 0x69,-    0x3F, 0xF6, 0x6B, 0xFC, 0xD5, 0xEF, 0xC6, 0x5E,-    0x95, 0xE4, 0xEC, 0xAF, 0x54, 0x53, 0x0A, 0xBD-  },-  {-    0xF5, 0x98, 0xDA, 0x90, 0x1C, 0x38, 0x35, 0xBC,-    0xA5, 0x60, 0x77, 0x90, 0x37, 0xDF, 0xDE, 0x9F,-    0x0C, 0x51, 0xDC, 0x61, 0xC0, 0xB7, 0x60, 0xFC,-    0x15, 0x22, 0xD7, 0xB4, 0x70, 0xEE, 0x63, 0xF5,-    0xBD, 0xC6, 0x49, 0x84, 0x76, 0xE8, 0x60, 0x49,-    0xAD, 0x86, 0xE4, 0xE2, 0x1A, 0xF2, 0x85, 0x4A,-    0x98, 0x4C, 0xC9, 0x05, 0x42, 0x7D, 0x2F, 0x17,-    0xF6, 0x6B, 0x1F, 0x41, 0xC3, 0xDA, 0x6F, 0x61-  },-  {-    0x5F, 0x93, 0x26, 0x97, 0x98, 0xCF, 0x02, 0x13,-    0x21, 0x07, 0x33, 0x76, 0x60, 0xA8, 0xD7, 0xA1,-    0x77, 0x35, 0x4C, 0x02, 0x12, 0xEB, 0x93, 0xE5,-    0x55, 0xE7, 0xC3, 0x7A, 0x08, 0xAE, 0xF3, 0xD8,-    0xDC, 0xE0, 0x12, 0x17, 0x01, 0x1C, 0xD9, 0x65,-    0xC0, 0x4D, 0xD2, 0xC1, 0x05, 0xF2, 0xE2, 0xB6,-    0xCA, 0xE5, 0xE4, 0xE6, 0xBC, 0xAF, 0x09, 0xDF,-    0xBE, 0xE3, 0xE0, 0xA6, 0xA6, 0x35, 0x7C, 0x37-  },-  {-    0x0E, 0xCF, 0x58, 0x1D, 0x47, 0xBA, 0xC9, 0x23,-    0x09, 0x86, 0xFA, 0xAB, 0xD7, 0x0C, 0x2F, 0x5B,-    0x80, 0xE9, 0x10, 0x66, 0xF0, 0xEC, 0x55, 0xA8,-    0x42, 0x93, 0x78, 0x82, 0x28, 0x6D, 0x2C, 0xA0,-    0x07, 0xBB, 0x4E, 0x97, 0x3B, 0x0B, 0x09, 0x1D,-    0x52, 0x16, 0x7F, 0xF7, 0xC4, 0x00, 0x9C, 0x7A,-    0xB4, 0xAD, 0x38, 0xFF, 0xF1, 0xDC, 0xEA, 0xCD,-    0xB7, 0xBE, 0x81, 0xEF, 0x4A, 0x45, 0x29, 0x52-  },-  {-    0x5A, 0xEC, 0xA8, 0xAB, 0xE1, 0x52, 0x85, 0x82,-    0xB2, 0xA3, 0x07, 0xB4, 0x00, 0x95, 0x85, 0x49,-    0x8A, 0x3D, 0x46, 0x7C, 0xA6, 0x10, 0x1C, 0xB0,-    0xC5, 0x12, 0x6F, 0x99, 0x76, 0x05, 0x6E, 0x9F,-    0xFC, 0x12, 0x3C, 0xC2, 0x0C, 0x30, 0x2B, 0x2A,-    0x73, 0x7F, 0x49, 0x2C, 0x75, 0xD2, 0x1F, 0x01,-    0x51, 0x2C, 0x90, 0xCA, 0x05, 0x41, 0xDF, 0xA5,-    0x6E, 0x95, 0x0A, 0x32, 0x1D, 0xCB, 0x28, 0xD8-  },-  {-    0x73, 0x2F, 0xBF, 0x8F, 0x1C, 0xB2, 0xB8, 0x32,-    0x92, 0x63, 0xED, 0xE2, 0x78, 0x58, 0xFE, 0x46,-    0xF8, 0xD3, 0x35, 0x4D, 0x37, 0x6B, 0xCD, 0xA0,-    0x54, 0x8E, 0x7C, 0xE1, 0xFA, 0x9D, 0xD1, 0x1F,-    0x85, 0xEB, 0x66, 0x1F, 0xE9, 0x50, 0xB5, 0x43,-    0xAA, 0x63, 0x5C, 0xA4, 0xD3, 0xF0, 0x4E, 0xDE,-    0x5B, 0x32, 0xD6, 0xB6, 0x56, 0xE5, 0xCE, 0x1C,-    0x44, 0xD3, 0x5C, 0x4A, 0x6C, 0x56, 0xCF, 0xF8-  },-  {-    0xD5, 0xE9, 0x38, 0x73, 0x5D, 0x63, 0x78, 0x8C,-    0x80, 0x10, 0x0A, 0xEF, 0xD1, 0x86, 0x48, 0xD1,-    0x8C, 0xF2, 0x72, 0xF6, 0x9F, 0x20, 0xFF, 0x24,-    0xCF, 0xE2, 0x89, 0x5C, 0x08, 0x8A, 0xD0, 0x8B,-    0x01, 0x04, 0xDA, 0x16, 0x72, 0xA4, 0xEB, 0x26,-    0xFC, 0x52, 0x54, 0x5C, 0xC7, 0xD7, 0xA0, 0x1B,-    0x26, 0x6C, 0xF5, 0x46, 0xC4, 0x03, 0xC4, 0x5B,-    0xD1, 0x29, 0xEB, 0x41, 0xBD, 0xD9, 0x20, 0x0B-  },-  {-    0x65, 0xA2, 0x45, 0xB4, 0x93, 0x52, 0xEE, 0x29,-    0x7D, 0x91, 0xAF, 0x8C, 0x8B, 0xE0, 0x05, 0x28,-    0xAC, 0x6E, 0x04, 0x6D, 0xD8, 0x3A, 0xC7, 0xBD,-    0x46, 0x5A, 0x98, 0x81, 0x6D, 0xD6, 0x8F, 0x3E,-    0x00, 0xE1, 0xAE, 0x8F, 0x89, 0x53, 0x27, 0xA7,-    0xE9, 0xA8, 0xC9, 0x32, 0x65, 0x98, 0x37, 0x9A,-    0x29, 0xC9, 0xFC, 0x91, 0xEC, 0x0C, 0x6E, 0xEF,-    0x08, 0xF3, 0xE2, 0xB2, 0x16, 0xC1, 0x10, 0x08-  },-  {-    0xC9, 0x56, 0x54, 0xB6, 0x30, 0x19, 0x13, 0x0A,-    0xB4, 0x5D, 0xD0, 0xFB, 0x49, 0x41, 0xB9, 0x8A,-    0xEB, 0x3A, 0xF2, 0xA1, 0x23, 0x91, 0x3E, 0xCA,-    0x2C, 0xE9, 0x9B, 0x3E, 0x97, 0x41, 0x0A, 0x7B,-    0xF8, 0x66, 0x1C, 0xC7, 0xFB, 0xAA, 0x2B, 0xC1,-    0xCF, 0x2B, 0x13, 0x11, 0x3B, 0x1E, 0xD4, 0x0A,-    0x01, 0x18, 0xB8, 0x8E, 0x5F, 0xFF, 0xC3, 0x54,-    0x27, 0x59, 0xEA, 0x00, 0x7E, 0xD4, 0xC5, 0x8D-  },-  {-    0x1E, 0xB2, 0x62, 0xF3, 0x8F, 0xA4, 0x94, 0x43,-    0x1F, 0x01, 0x7D, 0xAD, 0x44, 0xC0, 0xDF, 0xB6,-    0x93, 0x24, 0xAC, 0x03, 0x2F, 0x04, 0xB6, 0x57,-    0xFC, 0x91, 0xA8, 0x86, 0x47, 0xBB, 0x74, 0x76,-    0x0F, 0x24, 0xE7, 0xC9, 0x56, 0x51, 0x4F, 0x0C,-    0xF0, 0x02, 0x99, 0x0B, 0x18, 0x2C, 0x16, 0x42,-    0xB9, 0xB2, 0x42, 0x6E, 0x96, 0xA6, 0x11, 0x87,-    0xE4, 0xE0, 0x12, 0xF0, 0x0E, 0x21, 0x7D, 0x84-  },-  {-    0x3B, 0x95, 0x5A, 0xEE, 0xBF, 0xA5, 0x15, 0x1A,-    0xC1, 0xAB, 0x8E, 0x3F, 0x5C, 0xC1, 0xE3, 0x76,-    0x70, 0x84, 0xC8, 0x42, 0xA5, 0x75, 0xD3, 0x62,-    0x69, 0x83, 0x6E, 0x97, 0x35, 0x3D, 0x41, 0x62,-    0x2B, 0x73, 0x1D, 0xDD, 0xCD, 0x5F, 0x26, 0x95,-    0x50, 0xA3, 0xA5, 0xB8, 0x7B, 0xE1, 0xE9, 0x03,-    0x26, 0x34, 0x0B, 0x6E, 0x0E, 0x62, 0x55, 0x58,-    0x15, 0xD9, 0x60, 0x05, 0x97, 0xAC, 0x6E, 0xF9-  },-  {-    0x68, 0x28, 0x9F, 0x66, 0x05, 0x47, 0x3B, 0xA0,-    0xE4, 0xF2, 0x41, 0xBA, 0xF7, 0x47, 0x7A, 0x98,-    0x85, 0x42, 0x6A, 0x85, 0x8F, 0x19, 0xEF, 0x2A,-    0x18, 0xB0, 0xD4, 0x0E, 0xF8, 0xE4, 0x12, 0x82,-    0xED, 0x55, 0x26, 0xB5, 0x19, 0x79, 0x9E, 0x27,-    0x0F, 0x13, 0x88, 0x13, 0x27, 0x91, 0x82, 0x78,-    0x75, 0x57, 0x11, 0x07, 0x1D, 0x85, 0x11, 0xFE,-    0x96, 0x3E, 0x3B, 0x56, 0x06, 0xAA, 0x37, 0x16-  },-  {-    0x80, 0xA3, 0x37, 0x87, 0x54, 0x26, 0x12, 0xC3,-    0x8F, 0x6B, 0xCD, 0x7C, 0xD8, 0x6C, 0xAB, 0x46,-    0x02, 0x27, 0x50, 0x9B, 0x1C, 0xBA, 0xD5, 0xEC,-    0x40, 0x8A, 0x91, 0x41, 0x3D, 0x51, 0x15, 0x5A,-    0x04, 0x76, 0xDA, 0xDB, 0xF3, 0xA2, 0x51, 0x8E,-    0x4A, 0x6E, 0x77, 0xCC, 0x34, 0x66, 0x22, 0xE3,-    0x47, 0xA4, 0x69, 0xBF, 0x8B, 0xAA, 0x5F, 0x04,-    0xEB, 0x2D, 0x98, 0x70, 0x53, 0x55, 0xD0, 0x63-  },-  {-    0x34, 0x62, 0x9B, 0xC6, 0xD8, 0x31, 0x39, 0x1C,-    0x4C, 0xDF, 0x8A, 0xF1, 0xB4, 0xB7, 0xB6, 0xB8,-    0xE8, 0xEE, 0x17, 0xCF, 0x98, 0xC7, 0x0E, 0x5D,-    0xD5, 0x86, 0xCD, 0x99, 0xF1, 0x4B, 0x11, 0xDF,-    0x94, 0x51, 0x66, 0x23, 0x6A, 0x95, 0x71, 0xE6,-    0xD5, 0x91, 0xBB, 0x83, 0xEE, 0x4D, 0x16, 0x4D,-    0x46, 0xF6, 0xB9, 0xD8, 0xEF, 0x86, 0xFF, 0x86,-    0x5A, 0x81, 0xBF, 0xB9, 0x1B, 0x00, 0x42, 0x4B-  },-  {-    0x8B, 0x7C, 0xC3, 0x39, 0x16, 0x38, 0x63, 0xBB,-    0x43, 0x83, 0xE5, 0x42, 0xB0, 0xEF, 0x0E, 0x7C,-    0xF3, 0x6B, 0x84, 0xAD, 0x93, 0x2C, 0xDF, 0x5A,-    0x80, 0x41, 0x9E, 0xC9, 0xAD, 0x69, 0x2E, 0x7A,-    0x7E, 0x78, 0x4D, 0x2C, 0x7C, 0xB3, 0x79, 0x6A,-    0x18, 0xB8, 0xF8, 0x00, 0x03, 0x5F, 0x3A, 0xA0,-    0x6C, 0x82, 0x41, 0x00, 0x61, 0x11, 0x20, 0xA7,-    0xBD, 0xEB, 0x35, 0x61, 0x8C, 0xCB, 0x81, 0xB7-  },-  {-    0x4F, 0x08, 0x4E, 0x49, 0x39, 0xDD, 0x5A, 0x7F,-    0x5A, 0x65, 0x8F, 0xAD, 0x58, 0xA1, 0x8A, 0x15,-    0xC2, 0x5C, 0x32, 0xEC, 0x1C, 0x7F, 0xD5, 0xC5,-    0xC6, 0xC3, 0xE8, 0x92, 0xB3, 0x97, 0x1A, 0xEA,-    0xAC, 0x30, 0x83, 0x04, 0xEF, 0x17, 0xB1, 0xC4,-    0x72, 0x39, 0xEA, 0x4B, 0xB3, 0x98, 0xB3, 0xFD,-    0x6D, 0x45, 0x28, 0xD8, 0xDE, 0x8E, 0x76, 0x8A,-    0xE0, 0xF1, 0xA5, 0xA5, 0xC6, 0xB5, 0xC2, 0x97-  },-  {-    0x48, 0xF4, 0x07, 0xA1, 0xAF, 0x5B, 0x80, 0x09,-    0xB2, 0x05, 0x17, 0x42, 0xE8, 0xCF, 0x5C, 0xD5,-    0x65, 0x66, 0x69, 0xE7, 0xD7, 0x22, 0xEE, 0x8E,-    0x7B, 0xD2, 0x02, 0x06, 0x08, 0x49, 0x44, 0x21,-    0x68, 0xD8, 0xFA, 0xCC, 0x11, 0x7C, 0x01, 0x2B,-    0xFB, 0x7B, 0xF4, 0x49, 0xD9, 0x9B, 0xEF, 0xFF,-    0x6A, 0x34, 0xAE, 0xA2, 0x03, 0xF1, 0xD8, 0xD3,-    0x52, 0x72, 0x2B, 0xE5, 0x01, 0x4E, 0xC8, 0x18-  },-  {-    0xA6, 0xAA, 0x82, 0xCD, 0x1E, 0x42, 0x6F, 0x9A,-    0x73, 0xBF, 0xA3, 0x9A, 0x29, 0x03, 0x78, 0x76,-    0x11, 0x46, 0x55, 0xB8, 0xC2, 0x2D, 0x6D, 0x3F,-    0xF8, 0xB6, 0x38, 0xAE, 0x7D, 0xEA, 0x6B, 0x17,-    0x84, 0x3E, 0x09, 0xE5, 0x2E, 0xB6, 0x6F, 0xA1,-    0xE4, 0x75, 0xE4, 0xA8, 0xA3, 0xDE, 0x42, 0x9B,-    0x7D, 0x0F, 0x4A, 0x77, 0x6F, 0xCB, 0x8B, 0xDC,-    0x9B, 0x9F, 0xED, 0xE7, 0xD5, 0x2E, 0x81, 0x5F-  },-  {-    0x58, 0x17, 0x02, 0x7D, 0x6B, 0xDD, 0x00, 0xC5,-    0xDD, 0x10, 0xAC, 0x59, 0x3C, 0xD5, 0x60, 0x37,-    0x22, 0x70, 0x77, 0x5A, 0x18, 0x52, 0x6D, 0x7E,-    0x6F, 0x13, 0x87, 0x2A, 0x2E, 0x20, 0xEA, 0xB6,-    0x64, 0x62, 0x5B, 0xE7, 0x16, 0x8A, 0xC4, 0xBD,-    0x7C, 0x9E, 0x0C, 0xE7, 0xFC, 0x40, 0x99, 0xE0,-    0xF4, 0x84, 0x42, 0xE2, 0xC7, 0x67, 0x19, 0x1C,-    0x6E, 0x12, 0x84, 0xE9, 0xB2, 0xCC, 0xEA, 0x8C-  },-  {-    0x08, 0xE4, 0x10, 0x28, 0x34, 0x0A, 0x45, 0xC7,-    0x4E, 0x40, 0x52, 0xB3, 0xA8, 0xD6, 0x38, 0x9E,-    0x22, 0xE0, 0x43, 0xA1, 0xAD, 0xAB, 0x5E, 0x28,-    0xD9, 0x76, 0x19, 0x45, 0x0D, 0x72, 0x34, 0x69,-    0xB6, 0x20, 0xCA, 0xA5, 0x19, 0xB8, 0x1C, 0x14,-    0x52, 0x38, 0x54, 0xF6, 0x19, 0xFD, 0x30, 0x27,-    0xE3, 0x84, 0x7B, 0xD0, 0x32, 0x76, 0xE6, 0x06,-    0x04, 0xA8, 0x0D, 0xDB, 0x4D, 0xE8, 0x76, 0xD6-  },-  {-    0x13, 0x0B, 0x84, 0x20, 0x53, 0x7E, 0xB0, 0x7D,-    0x72, 0xAB, 0xDA, 0x07, 0xC8, 0x5A, 0xCB, 0xD8,-    0xB9, 0xA4, 0x4F, 0x16, 0x32, 0x1D, 0xD0, 0x42,-    0x21, 0x45, 0xF8, 0x09, 0x67, 0x3D, 0x30, 0xF2,-    0xB5, 0x32, 0x13, 0x26, 0xE2, 0xBF, 0xF3, 0x17,-    0xEF, 0x3F, 0xEF, 0x98, 0x3C, 0x51, 0xC4, 0xF8,-    0xAB, 0x24, 0xA3, 0x25, 0xD2, 0x98, 0xE3, 0x4A,-    0xFC, 0xE5, 0x69, 0xA8, 0x25, 0x55, 0x77, 0x4C-  },-  {-    0xAC, 0x49, 0xB8, 0x44, 0xAF, 0xAA, 0x01, 0x2E,-    0x31, 0xC4, 0x74, 0xCA, 0x26, 0x36, 0x48, 0x84,-    0x4F, 0xD2, 0xF6, 0x30, 0x79, 0x92, 0xC2, 0xF7,-    0x52, 0xAC, 0xA0, 0x2C, 0x38, 0x28, 0x96, 0x51,-    0x75, 0x79, 0x4D, 0xEE, 0xE2, 0xD2, 0xEE, 0x95,-    0xC6, 0x1C, 0xD2, 0x84, 0xF6, 0xB5, 0xA2, 0xD7,-    0x5E, 0x2E, 0xF2, 0xB2, 0x9E, 0xE8, 0x14, 0x9E,-    0x77, 0xFB, 0x81, 0x44, 0x7B, 0x2F, 0xD0, 0x4B-  },-  {-    0xB9, 0xD7, 0xCA, 0x81, 0xCC, 0x60, 0xBB, 0x95,-    0x78, 0xE4, 0x40, 0x24, 0xE5, 0xA0, 0xA0, 0xBE,-    0x80, 0xF2, 0x73, 0x36, 0xA6, 0xA9, 0xF4, 0xE5,-    0x3D, 0xF3, 0x99, 0x9C, 0xB1, 0x91, 0x28, 0x0B,-    0x09, 0x0E, 0x2A, 0xC2, 0xD2, 0x9C, 0x5B, 0xAA,-    0xD9, 0xD7, 0x14, 0x15, 0xBD, 0xC1, 0x29, 0xE6,-    0x9A, 0xA2, 0x66, 0x7A, 0xF6, 0xA7, 0xFD, 0x5E,-    0x18, 0x9F, 0xCC, 0xDC, 0xEE, 0x81, 0x73, 0x40-  },-  {-    0xA7, 0x55, 0xE1, 0x13, 0x38, 0x65, 0x72, 0xC7,-    0x5C, 0xED, 0x61, 0xD7, 0x19, 0x70, 0x60, 0x70,-    0xB9, 0x14, 0x60, 0x48, 0xE4, 0x2A, 0x9F, 0x8C,-    0xD3, 0x56, 0x67, 0xA0, 0x88, 0xB4, 0x2F, 0x08,-    0x80, 0x8A, 0xBD, 0xF7, 0x7E, 0x61, 0x8A, 0xBD,-    0x95, 0x9A, 0xFC, 0x75, 0x73, 0x79, 0xCA, 0x2C,-    0x00, 0xBC, 0xC1, 0xA4, 0x83, 0x90, 0xFA, 0x2B,-    0xFF, 0x61, 0x8B, 0x1E, 0x00, 0x78, 0xA6, 0x13-  },-  {-    0xA7, 0x3C, 0x7D, 0xEB, 0xED, 0x32, 0x6F, 0x1C,-    0x0D, 0xB0, 0x79, 0x5E, 0xE7, 0xD6, 0xE3, 0x94,-    0x68, 0x94, 0xB8, 0x26, 0xB1, 0xF8, 0x10, 0x1C,-    0x56, 0xC8, 0x23, 0xBA, 0x17, 0x16, 0x83, 0x12,-    0xE7, 0xF5, 0x3F, 0xC7, 0xDB, 0xE5, 0x2C, 0x3E,-    0x11, 0xE6, 0x98, 0x52, 0xC4, 0x04, 0x85, 0xE2,-    0xEF, 0x18, 0x24, 0x77, 0x86, 0x2E, 0xA6, 0xA3,-    0x4E, 0xC1, 0x36, 0xE2, 0xDF, 0xEE, 0xA6, 0xF4-  },-  {-    0x6C, 0xB8, 0xF9, 0xD5, 0x2C, 0x56, 0xD8, 0x2C,-    0xAC, 0x28, 0xF3, 0x9E, 0xA1, 0x59, 0x3E, 0x8B,-    0xB2, 0x50, 0x62, 0x93, 0xAC, 0x0D, 0x68, 0x37,-    0x6A, 0x17, 0x09, 0xB6, 0x2A, 0x46, 0xDF, 0x14,-    0xA4, 0xAE, 0x64, 0xB2, 0xD8, 0xFA, 0xB7, 0x67,-    0x33, 0xA1, 0xCE, 0xD2, 0xD5, 0x48, 0xE3, 0xF3,-    0xC6, 0xFC, 0xB4, 0x9D, 0x40, 0xC3, 0xD5, 0x80,-    0x8E, 0x44, 0x9C, 0xD8, 0x3D, 0x1C, 0x2A, 0xA2-  },-  {-    0x68, 0x3F, 0xA2, 0xB2, 0x36, 0x9A, 0x10, 0x16,-    0x2C, 0x1C, 0x1C, 0x7B, 0x24, 0xBC, 0x97, 0x0E,-    0xE6, 0x7D, 0xA2, 0x20, 0x56, 0x4F, 0x32, 0x20,-    0x3F, 0x62, 0x56, 0x96, 0xC0, 0x35, 0x2A, 0x0B,-    0x9A, 0xD9, 0x66, 0x24, 0x36, 0x2D, 0x95, 0x2D,-    0x84, 0x46, 0x3C, 0x11, 0x06, 0xA2, 0xDB, 0xA7,-    0xA0, 0x92, 0x59, 0x98, 0x84, 0xB3, 0x5A, 0x0B,-    0x89, 0xC8, 0xF1, 0xB6, 0xA9, 0xB5, 0xA6, 0x1E-  },-  {-    0xAA, 0xD9, 0xAD, 0x44, 0x61, 0x01, 0x18, 0xB7,-    0x7D, 0x50, 0x8A, 0xEB, 0x1B, 0xBC, 0xD1, 0xC1,-    0xB7, 0xD0, 0x17, 0x13, 0x97, 0xFB, 0x51, 0x0A,-    0x40, 0x1B, 0xBC, 0x0E, 0xC3, 0x46, 0x23, 0x67,-    0x0D, 0x86, 0xA2, 0xDC, 0x3C, 0x8F, 0x3A, 0xB5,-    0xA2, 0x04, 0x4D, 0xF7, 0x30, 0x25, 0x67, 0x27,-    0x54, 0x5F, 0x08, 0x60, 0xCE, 0x21, 0xA1, 0xEA,-    0xC7, 0x17, 0xDF, 0xC4, 0x8F, 0x5D, 0x22, 0x8E-  },-  {-    0xC4, 0x25, 0x78, 0xDE, 0x23, 0xB4, 0xC9, 0x87,-    0xD5, 0xE1, 0xAC, 0x4D, 0x68, 0x9E, 0xD5, 0xDE,-    0x4B, 0x04, 0x17, 0xF9, 0x70, 0x4B, 0xC6, 0xBC,-    0xE9, 0x69, 0xFA, 0x13, 0x47, 0x15, 0x85, 0xD6,-    0x2C, 0x2C, 0xB1, 0x21, 0x2A, 0x94, 0x4F, 0x39,-    0x7F, 0xC9, 0xCA, 0x2C, 0x37, 0x47, 0xC3, 0xBE,-    0xB6, 0x94, 0xEC, 0x4C, 0x5B, 0xE6, 0x88, 0x28,-    0xDD, 0xA5, 0x3E, 0xF4, 0x3F, 0xAE, 0xC6, 0xC0-  },-  {-    0x47, 0x0F, 0x00, 0x84, 0x1E, 0xE8, 0x24, 0x4E,-    0x63, 0xED, 0x2C, 0x7E, 0xA3, 0x0E, 0x2E, 0x41,-    0x98, 0x97, 0xC1, 0x97, 0x46, 0x2E, 0xCC, 0xCE,-    0xCF, 0x71, 0x3B, 0x42, 0xA5, 0x06, 0x5F, 0xFF,-    0x59, 0x14, 0xBC, 0x9B, 0x79, 0xAF, 0xFE, 0x8F,-    0x6B, 0x65, 0x78, 0x75, 0xE7, 0x89, 0xAE, 0x21,-    0x3B, 0xD9, 0x14, 0xCD, 0x35, 0xBD, 0x17, 0x4D,-    0x46, 0xE9, 0xD1, 0x8B, 0xD8, 0x43, 0x77, 0x3D-  },-  {-    0x34, 0xFC, 0x42, 0x13, 0x73, 0x0F, 0x47, 0xA5,-    0xE9, 0xA3, 0x58, 0x0F, 0x64, 0x3E, 0x12, 0x94,-    0x5C, 0xFC, 0xB3, 0x1B, 0xF2, 0x06, 0xF6, 0xAD,-    0x45, 0x0C, 0xE5, 0x28, 0xDA, 0x3F, 0xA4, 0x32,-    0xE0, 0x05, 0xD6, 0xB0, 0xEC, 0xCE, 0x10, 0xDC,-    0xA7, 0xC5, 0x99, 0x5F, 0x6A, 0xAC, 0xC5, 0x15,-    0x0E, 0x1B, 0x00, 0x9E, 0x19, 0x75, 0x1E, 0x83,-    0x09, 0xF8, 0x85, 0x95, 0x31, 0x84, 0x43, 0x74-  },-  {-    0xFB, 0x3C, 0x1F, 0x0F, 0x56, 0xA5, 0x6F, 0x8E,-    0x31, 0x6F, 0xDF, 0x5D, 0x85, 0x3C, 0x8C, 0x87,-    0x2C, 0x39, 0x63, 0x5D, 0x08, 0x36, 0x34, 0xC3,-    0x90, 0x4F, 0xC3, 0xAC, 0x07, 0xD1, 0xB5, 0x78,-    0xE8, 0x5F, 0xF0, 0xE4, 0x80, 0xE9, 0x2D, 0x44,-    0xAD, 0xE3, 0x3B, 0x62, 0xE8, 0x93, 0xEE, 0x32,-    0x34, 0x3E, 0x79, 0xDD, 0xF6, 0xEF, 0x29, 0x2E,-    0x89, 0xB5, 0x82, 0xD3, 0x12, 0x50, 0x23, 0x14-  },-  {-    0xC7, 0xC9, 0x7F, 0xC6, 0x5D, 0xD2, 0xB9, 0xE3,-    0xD3, 0xD6, 0x07, 0xD3, 0x15, 0x98, 0xD3, 0xF8,-    0x42, 0x61, 0xE9, 0x91, 0x92, 0x51, 0xE9, 0xC8,-    0xE5, 0x7B, 0xB5, 0xF8, 0x29, 0x37, 0x7D, 0x5F,-    0x73, 0xEA, 0xBB, 0xED, 0x55, 0xC6, 0xC3, 0x81,-    0x18, 0x0F, 0x29, 0xAD, 0x02, 0xE5, 0xBE, 0x79,-    0x7F, 0xFE, 0xC7, 0xE5, 0x7B, 0xDE, 0xCB, 0xC5,-    0x0A, 0xD3, 0xD0, 0x62, 0xF0, 0x99, 0x3A, 0xB0-  },-  {-    0xA5, 0x7A, 0x49, 0xCD, 0xBE, 0x67, 0xAE, 0x7D,-    0x9F, 0x79, 0x7B, 0xB5, 0xCC, 0x7E, 0xFC, 0x2D,-    0xF0, 0x7F, 0x4E, 0x1B, 0x15, 0x95, 0x5F, 0x85,-    0xDA, 0xE7, 0x4B, 0x76, 0xE2, 0xEC, 0xB8, 0x5A,-    0xFB, 0x6C, 0xD9, 0xEE, 0xED, 0x88, 0x88, 0xD5,-    0xCA, 0x3E, 0xC5, 0xAB, 0x65, 0xD2, 0x7A, 0x7B,-    0x19, 0xE5, 0x78, 0x47, 0x57, 0x60, 0xA0, 0x45,-    0xAC, 0x3C, 0x92, 0xE1, 0x3A, 0x93, 0x8E, 0x77-  },-  {-    0xC7, 0x14, 0x3F, 0xCE, 0x96, 0x14, 0xA1, 0x7F,-    0xD6, 0x53, 0xAE, 0xB1, 0x40, 0x72, 0x6D, 0xC9,-    0xC3, 0xDB, 0xB1, 0xDE, 0x6C, 0xC5, 0x81, 0xB2,-    0x72, 0x68, 0x97, 0xEC, 0x24, 0xB7, 0xA5, 0x03,-    0x59, 0xAD, 0x49, 0x22, 0x43, 0xBE, 0x66, 0xD9,-    0xED, 0xD8, 0xC9, 0x33, 0xB5, 0xB8, 0x0E, 0x0B,-    0x91, 0xBB, 0x61, 0xEA, 0x98, 0x05, 0x60, 0x06,-    0x51, 0x69, 0x76, 0xFA, 0xE8, 0xD9, 0x9A, 0x35-  },-  {-    0x65, 0xBB, 0x58, 0xD0, 0x7F, 0x93, 0x7E, 0x2D,-    0x3C, 0x7E, 0x65, 0x38, 0x5F, 0x9C, 0x54, 0x73,-    0x0B, 0x70, 0x41, 0x05, 0xCC, 0xDB, 0x69, 0x1F,-    0x6E, 0x14, 0x6D, 0x4E, 0xE8, 0xF6, 0xC0, 0x86,-    0xF4, 0x95, 0x11, 0x03, 0x51, 0x10, 0xA9, 0xAD,-    0x60, 0x31, 0xFD, 0xCE, 0xB9, 0x43, 0xE0, 0xF9,-    0x61, 0x3B, 0xCB, 0x27, 0x6D, 0xD4, 0x0F, 0x06,-    0x24, 0xEF, 0x0F, 0x92, 0x4F, 0x80, 0x97, 0x83-  },-  {-    0xE5, 0x40, 0x27, 0x7F, 0x68, 0x3B, 0x11, 0x86,-    0xDD, 0x3B, 0x5B, 0x3F, 0x61, 0x43, 0x33, 0x96,-    0x58, 0x1A, 0x35, 0xFE, 0xB1, 0x20, 0x02, 0xBE,-    0x8C, 0x6A, 0x62, 0x31, 0xFC, 0x40, 0xFF, 0xA7,-    0x0F, 0x08, 0x08, 0x1B, 0xC5, 0x8B, 0x2D, 0x94,-    0xF7, 0x64, 0x95, 0x43, 0x61, 0x4A, 0x43, 0x5F,-    0xAA, 0x2D, 0x62, 0x11, 0x0E, 0x13, 0xDA, 0xBC,-    0x7B, 0x86, 0x62, 0x9B, 0x63, 0xAF, 0x9C, 0x24-  },-  {-    0x41, 0x85, 0x00, 0x87, 0x8C, 0x5F, 0xBC, 0xB5,-    0x84, 0xC4, 0x32, 0xF4, 0x28, 0x5E, 0x05, 0xE4,-    0x9F, 0x2E, 0x3E, 0x07, 0x53, 0x99, 0xA0, 0xDB,-    0xFC, 0xF8, 0x74, 0xEB, 0xF8, 0xC0, 0x3D, 0x02,-    0xBF, 0x16, 0xBC, 0x69, 0x89, 0xD1, 0x61, 0xC7,-    0x7C, 0xA0, 0x78, 0x6B, 0x05, 0x05, 0x3C, 0x6C,-    0x70, 0x94, 0x33, 0x71, 0x23, 0x19, 0x19, 0x21,-    0x28, 0x83, 0x5C, 0xF0, 0xB6, 0x60, 0x59, 0x5B-  },-  {-    0x88, 0x90, 0x90, 0xDB, 0xB1, 0x94, 0x4B, 0xDC,-    0x94, 0x33, 0xEE, 0x5E, 0xF1, 0x01, 0x0C, 0x7A,-    0x4A, 0x24, 0xA8, 0xE7, 0x1E, 0xCE, 0xA8, 0xE1,-    0x2A, 0x31, 0x31, 0x8C, 0xE4, 0x9D, 0xCA, 0xB0,-    0xAC, 0xA5, 0xC3, 0x80, 0x23, 0x34, 0xAA, 0xB2,-    0xCC, 0x84, 0xB1, 0x4C, 0x6B, 0x93, 0x21, 0xFE,-    0x58, 0x6B, 0xF3, 0xF8, 0x76, 0xF1, 0x9C, 0xD4,-    0x06, 0xEB, 0x11, 0x27, 0xFB, 0x94, 0x48, 0x01-  },-  {-    0x53, 0xB6, 0xA2, 0x89, 0x10, 0xAA, 0x92, 0xE2,-    0x7E, 0x53, 0x6F, 0xB5, 0x49, 0xCF, 0x9B, 0x99,-    0x18, 0x79, 0x10, 0x60, 0x89, 0x8E, 0x0B, 0x9F,-    0xE1, 0x83, 0x57, 0x7F, 0xF4, 0x3B, 0x5E, 0x9C,-    0x76, 0x89, 0xC7, 0x45, 0xB3, 0x2E, 0x41, 0x22,-    0x69, 0x83, 0x7C, 0x31, 0xB8, 0x9E, 0x6C, 0xC1,-    0x2B, 0xF7, 0x6E, 0x13, 0xCA, 0xD3, 0x66, 0xB7,-    0x4E, 0xCE, 0x48, 0xBB, 0x85, 0xFD, 0x09, 0xE9-  },-  {-    0x7C, 0x09, 0x20, 0x80, 0xC6, 0xA8, 0x0D, 0x67,-    0x24, 0x09, 0xD0, 0x81, 0xD3, 0xD1, 0x77, 0x10,-    0x6B, 0xCD, 0x63, 0x56, 0x77, 0x85, 0x14, 0x07,-    0x19, 0x49, 0x09, 0x50, 0xAE, 0x07, 0xAE, 0x8F,-    0xCA, 0xAB, 0xBA, 0xAA, 0xB3, 0x30, 0xCF, 0xBC,-    0xF7, 0x37, 0x44, 0x82, 0xC2, 0x20, 0xAF, 0x2E,-    0xAD, 0xEE, 0xB7, 0x3D, 0xCB, 0xB3, 0x5E, 0xD8,-    0x23, 0x34, 0x4E, 0x14, 0x4E, 0x7D, 0x48, 0x99-  },-  {-    0x9C, 0xCD, 0xE5, 0x66, 0xD2, 0x40, 0x05, 0x09,-    0x18, 0x11, 0x11, 0xF3, 0x2D, 0xDE, 0x4C, 0xD6,-    0x32, 0x09, 0xFE, 0x59, 0xA3, 0x0C, 0x11, 0x45,-    0x46, 0xAD, 0x27, 0x76, 0xD8, 0x89, 0xA4, 0x1B,-    0xAD, 0x8F, 0xA1, 0xBB, 0x46, 0x8C, 0xB2, 0xF9,-    0xD4, 0x2C, 0xA9, 0x92, 0x8A, 0x77, 0x70, 0xFE,-    0xF8, 0xE8, 0xBA, 0x4D, 0x0C, 0x81, 0x2D, 0x9A,-    0x1E, 0x75, 0xC3, 0xD8, 0xD2, 0xCC, 0xD7, 0x5A-  },-  {-    0x6E, 0x29, 0x3B, 0xF5, 0xD0, 0x3F, 0xE4, 0x39,-    0x77, 0xCF, 0xE3, 0xF5, 0x7C, 0xCD, 0xB3, 0xAE,-    0x28, 0x2A, 0x85, 0x45, 0x5D, 0xCA, 0x33, 0xF3,-    0x7F, 0x4B, 0x74, 0xF8, 0x39, 0x8C, 0xC6, 0x12,-    0x43, 0x3D, 0x75, 0x5C, 0xBE, 0xC4, 0x12, 0xF8,-    0xF8, 0x2A, 0x3B, 0xD3, 0xBC, 0x4A, 0x27, 0x8F,-    0x7E, 0xCD, 0x0D, 0xFA, 0x9B, 0xBD, 0xC4, 0x0B,-    0xE7, 0xA7, 0x87, 0xC8, 0xF1, 0x59, 0xB2, 0xDF-  },-  {-    0xC5, 0x65, 0x46, 0xFB, 0x21, 0x78, 0x45, 0x6F,-    0x33, 0x61, 0x64, 0xC1, 0x8B, 0x90, 0xDE, 0xFF,-    0xC8, 0x3A, 0xE2, 0xB5, 0xA3, 0xAC, 0xA7, 0x7B,-    0x68, 0x84, 0xD3, 0x6D, 0x2C, 0x1D, 0xB3, 0x95,-    0x01, 0xB3, 0xE6, 0x5E, 0x36, 0xC7, 0x58, 0xC6,-    0x6E, 0x31, 0x88, 0x45, 0x1F, 0xDB, 0x35, 0x15,-    0xEE, 0x16, 0x2C, 0x00, 0x1F, 0x06, 0xC3, 0xE8,-    0xCB, 0x57, 0x3A, 0xDF, 0x30, 0xF7, 0xA1, 0x01-  },-  {-    0x6F, 0x82, 0xF8, 0x9F, 0x29, 0x9E, 0xBC, 0xA2,-    0xFE, 0x01, 0x4B, 0x59, 0xBF, 0xFE, 0x1A, 0xA8,-    0x4E, 0x88, 0xB1, 0x91, 0x5F, 0xE2, 0x56, 0xAF,-    0xB6, 0x46, 0xFD, 0x84, 0x48, 0xAF, 0x2B, 0x88,-    0x91, 0xA7, 0xFA, 0xB3, 0x7A, 0x4E, 0xA6, 0xF9,-    0xA5, 0x0E, 0x6C, 0x31, 0x70, 0x39, 0xD8, 0xCF,-    0x87, 0x8F, 0x4C, 0x8E, 0x1A, 0x0D, 0xD4, 0x64,-    0xF0, 0xB4, 0xD6, 0xFF, 0x1C, 0x7E, 0xA8, 0x53-  },-  {-    0x2B, 0x85, 0x99, 0xFF, 0x9C, 0x3D, 0x61, 0x98,-    0x63, 0x7A, 0xD5, 0x1E, 0x57, 0xD1, 0x99, 0x8B,-    0x0D, 0x75, 0x31, 0x3F, 0xE2, 0xDD, 0x61, 0xA5,-    0x33, 0xC9, 0x64, 0xA6, 0xDD, 0x96, 0x07, 0xC6,-    0xF7, 0x23, 0xE9, 0x45, 0x2C, 0xE4, 0x6E, 0x01,-    0x4B, 0x1C, 0x1D, 0x6D, 0xE7, 0x7B, 0xA5, 0xB8,-    0x8C, 0x91, 0x4D, 0x1C, 0x59, 0x7B, 0xF1, 0xEA,-    0xE1, 0x34, 0x74, 0xB4, 0x29, 0x0E, 0x89, 0xB2-  },-  {-    0x08, 0xBF, 0x34, 0x6D, 0x38, 0xE1, 0xDF, 0x06,-    0xC8, 0x26, 0x0E, 0xDB, 0x1D, 0xA7, 0x55, 0x79,-    0x27, 0x59, 0x48, 0xD5, 0xC0, 0xA0, 0xAA, 0x9E,-    0xD2, 0x88, 0x6F, 0x88, 0x56, 0xDE, 0x54, 0x17,-    0xA1, 0x56, 0x99, 0x87, 0x58, 0xF5, 0xB1, 0x7E,-    0x52, 0xF1, 0x01, 0xCA, 0x95, 0x7A, 0x71, 0x13,-    0x74, 0x73, 0xDF, 0xD1, 0x8D, 0x7D, 0x20, 0x9C,-    0x4C, 0x10, 0xD9, 0x23, 0x3C, 0x93, 0x69, 0x1D-  },-  {-    0x6D, 0xF2, 0x15, 0x6D, 0x77, 0x31, 0x14, 0xD3,-    0x10, 0xB6, 0x3D, 0xB9, 0xEE, 0x53, 0x50, 0xD7,-    0x7E, 0x6B, 0xCF, 0x25, 0xB0, 0x5F, 0xCD, 0x91,-    0x0F, 0x9B, 0x31, 0xBC, 0x42, 0xBB, 0x13, 0xFE,-    0x82, 0x25, 0xEB, 0xCB, 0x2A, 0x23, 0xA6, 0x22,-    0x80, 0x77, 0x7B, 0x6B, 0xF7, 0x4E, 0x2C, 0xD0,-    0x91, 0x7C, 0x76, 0x40, 0xB4, 0x3D, 0xEF, 0xE4,-    0x68, 0xCD, 0x1E, 0x18, 0xC9, 0x43, 0xC6, 0x6A-  },-  {-    0x7C, 0x70, 0x38, 0xBC, 0x13, 0xA9, 0x11, 0x51,-    0x82, 0x8A, 0x5B, 0xA8, 0x2B, 0x4A, 0x96, 0x04,-    0x0F, 0x25, 0x8A, 0x4D, 0xFB, 0x1B, 0x13, 0x73,-    0xF0, 0xD3, 0x59, 0x16, 0x8A, 0xFB, 0x05, 0x17,-    0xA2, 0x0B, 0x28, 0xA1, 0x2D, 0x36, 0x44, 0x04,-    0x6B, 0xE6, 0x6B, 0x8D, 0x08, 0xD8, 0xAE, 0x7F,-    0x6A, 0x92, 0x3E, 0xA1, 0xC0, 0x01, 0x87, 0xC6,-    0xD1, 0x1D, 0xC5, 0x02, 0xBA, 0xC7, 0x13, 0x05-  },-  {-    0xBC, 0xD1, 0xB3, 0x0D, 0x80, 0x8F, 0xB7, 0x39,-    0xB9, 0x87, 0xCB, 0xF1, 0x54, 0xBE, 0xA0, 0x0D,-    0xA9, 0xD4, 0x03, 0x80, 0xB8, 0x61, 0xD4, 0xC1,-    0xD6, 0x37, 0x71, 0x22, 0xDA, 0xDD, 0x61, 0xC0,-    0xE5, 0x90, 0x18, 0xB7, 0x19, 0x41, 0xCF, 0xB6,-    0x2E, 0x00, 0xDC, 0xD7, 0x0A, 0xEB, 0x9A, 0xBF,-    0x04, 0x73, 0xE8, 0x0F, 0x0A, 0x7E, 0xCA, 0x6B,-    0x6D, 0xEA, 0x24, 0x6A, 0xB2, 0x29, 0xDD, 0x2B-  },-  {-    0x7E, 0xD4, 0x46, 0x8D, 0x96, 0x85, 0x30, 0xFE,-    0x7A, 0xB2, 0xC3, 0x35, 0x40, 0xB2, 0x6D, 0x8C,-    0x3B, 0xD3, 0xED, 0x44, 0xB3, 0x4F, 0xBE, 0x8C,-    0x2A, 0x9D, 0x7F, 0x80, 0x5B, 0x5A, 0xDA, 0x0E,-    0xA2, 0x52, 0xEE, 0xAD, 0xE4, 0xFC, 0xE9, 0x7F,-    0x89, 0x72, 0x8A, 0xD8, 0x5B, 0xC8, 0xBB, 0x24,-    0x30, 0xB1, 0xBE, 0xF2, 0xCD, 0xDD, 0x32, 0xC8,-    0x44, 0x6E, 0x59, 0xB8, 0xE8, 0xBA, 0x3C, 0x67-  },-  {-    0x6D, 0x30, 0xB7, 0xC6, 0xCE, 0x8A, 0x32, 0x36,-    0xC0, 0xCA, 0x2F, 0x8D, 0x72, 0x8B, 0x10, 0x88,-    0xCA, 0x06, 0x98, 0x3A, 0x80, 0x43, 0xE6, 0x21,-    0xD5, 0xDC, 0xF0, 0xC5, 0x37, 0xD1, 0x3B, 0x08,-    0x79, 0x1E, 0xDE, 0xB0, 0x1A, 0x3C, 0xF0, 0x94,-    0x3E, 0xC1, 0xC8, 0x90, 0xAB, 0x6E, 0x29, 0xB1,-    0x46, 0xA2, 0x36, 0xCD, 0x46, 0xBC, 0xB9, 0xD9,-    0x3B, 0xF5, 0x16, 0xFB, 0x67, 0xC6, 0x3F, 0xE5-  },-  {-    0x97, 0xFE, 0x03, 0xCE, 0xF3, 0x14, 0x38, 0x50,-    0x89, 0x11, 0xBD, 0xED, 0x97, 0x59, 0x80, 0xA6,-    0x60, 0x29, 0x30, 0x5D, 0xC5, 0xE3, 0xFA, 0x8A,-    0xD1, 0xB4, 0xFB, 0x22, 0xFC, 0xDF, 0x5A, 0x19,-    0xA7, 0x33, 0x32, 0x03, 0x27, 0xD8, 0xF7, 0x1C,-    0xCF, 0x49, 0x6C, 0xB3, 0xA4, 0x4A, 0x77, 0xAF,-    0x56, 0xE3, 0xDD, 0xE7, 0x3D, 0x3A, 0x5F, 0x17,-    0x68, 0x96, 0xCC, 0x57, 0xC9, 0xA5, 0xAD, 0x99-  },-  {-    0x78, 0x5A, 0x9D, 0x0F, 0xBD, 0x21, 0x13, 0x6D,-    0xBC, 0xE8, 0xFA, 0x7E, 0xAF, 0xD6, 0x3C, 0x9D,-    0xAD, 0x22, 0x00, 0x52, 0x97, 0x84, 0x16, 0xB3,-    0x1D, 0x97, 0x53, 0xEA, 0xA1, 0x49, 0x09, 0x78,-    0x47, 0xED, 0x9B, 0x30, 0xA6, 0x5C, 0x70, 0x50,-    0x7E, 0xFF, 0x01, 0x87, 0x91, 0x49, 0xED, 0x5C,-    0xF0, 0x47, 0x1D, 0x37, 0x79, 0x8E, 0xDC, 0x05,-    0xAB, 0xD5, 0x6A, 0xD4, 0xA2, 0xCC, 0xCB, 0x1D-  },-  {-    0xAD, 0x40, 0x8D, 0x2A, 0xBD, 0xDF, 0xD3, 0x7B,-    0x3B, 0xF3, 0x47, 0x94, 0xC1, 0xA3, 0x37, 0x1D,-    0x92, 0x8E, 0xD7, 0xFC, 0x8D, 0x96, 0x62, 0x25,-    0x33, 0x35, 0x84, 0xC5, 0x66, 0x58, 0x17, 0x83,-    0x2A, 0x37, 0xC0, 0x7F, 0x0D, 0xC7, 0xCB, 0x5A,-    0xA8, 0x74, 0xCD, 0x7D, 0x20, 0xFE, 0x8F, 0xAB,-    0x8E, 0xAB, 0xCB, 0x9B, 0x33, 0xD2, 0xE0, 0x84,-    0x1F, 0x6E, 0x20, 0x09, 0x60, 0x89, 0x9D, 0x95-  },-  {-    0x97, 0x66, 0x8F, 0x74, 0x5B, 0x60, 0x32, 0xFC,-    0x81, 0x5D, 0x95, 0x79, 0x32, 0x27, 0x69, 0xDC,-    0xCD, 0x95, 0x01, 0xA5, 0x08, 0x00, 0x29, 0xB8,-    0xAE, 0x82, 0x6B, 0xEF, 0xB6, 0x74, 0x23, 0x31,-    0xBD, 0x9F, 0x76, 0xEF, 0xEB, 0x3E, 0x2B, 0x8E,-    0x81, 0xA9, 0x78, 0x6B, 0x28, 0x2F, 0x50, 0x68,-    0xA3, 0xA2, 0x42, 0x46, 0x97, 0xA7, 0x7C, 0x41,-    0x87, 0x6B, 0x7E, 0x75, 0x3F, 0x4C, 0x77, 0x67-  },-  {-    0x26, 0xBB, 0x98, 0x5F, 0x47, 0xE7, 0xFE, 0xE0,-    0xCF, 0xD2, 0x52, 0xD4, 0xEF, 0x96, 0xBE, 0xD4,-    0x2B, 0x9C, 0x37, 0x0C, 0x1C, 0x6A, 0x3E, 0x8C,-    0x9E, 0xB0, 0x4E, 0xF7, 0xF7, 0x81, 0x8B, 0x83,-    0x3A, 0x0D, 0x1F, 0x04, 0x3E, 0xBA, 0xFB, 0x91,-    0x1D, 0xC7, 0x79, 0xE0, 0x27, 0x40, 0xA0, 0x2A,-    0x44, 0xD3, 0xA1, 0xEA, 0x45, 0xED, 0x4A, 0xD5,-    0x5E, 0x68, 0x6C, 0x92, 0x7C, 0xAF, 0xE9, 0x7E-  },-  {-    0x5B, 0xFE, 0x2B, 0x1D, 0xCF, 0x7F, 0xE9, 0xB9,-    0x50, 0x88, 0xAC, 0xED, 0xB5, 0x75, 0xC1, 0x90,-    0x16, 0xC7, 0x43, 0xB2, 0xE7, 0x63, 0xBF, 0x58,-    0x51, 0xAC, 0x40, 0x7C, 0x9E, 0xDA, 0x43, 0x71,-    0x5E, 0xDF, 0xA4, 0x8B, 0x48, 0x25, 0x49, 0x2C,-    0x51, 0x79, 0x59, 0x3F, 0xFF, 0x21, 0x35, 0x1B,-    0x76, 0xE8, 0xB7, 0xE0, 0x34, 0xE4, 0xC5, 0x3C,-    0x79, 0xF6, 0x1F, 0x29, 0xC4, 0x79, 0xBD, 0x08-  },-  {-    0xC7, 0x65, 0x09, 0xEF, 0x72, 0xF4, 0xA6, 0xF9,-    0xC9, 0xC4, 0x06, 0x18, 0xED, 0x52, 0xB2, 0x08,-    0x4F, 0x83, 0x50, 0x22, 0x32, 0xE0, 0xAC, 0x8B,-    0xDA, 0xF3, 0x26, 0x43, 0x68, 0xE4, 0xD0, 0x18,-    0x0F, 0x68, 0x54, 0xC4, 0xAB, 0xF4, 0xF6, 0x50,-    0x9C, 0x79, 0xCA, 0xAF, 0xC4, 0x4C, 0xF3, 0x19,-    0x4A, 0xFC, 0x57, 0xBD, 0x07, 0x7B, 0xD7, 0xB3,-    0xC9, 0xBD, 0xA3, 0xD4, 0xB8, 0x77, 0x58, 0x16-  },-  {-    0xD6, 0x6F, 0x2B, 0xEA, 0xB9, 0x90, 0xE3, 0x54,-    0xCC, 0xB9, 0x10, 0xE4, 0xE9, 0xC7, 0xAC, 0x61,-    0x8C, 0x7B, 0x63, 0xEF, 0x29, 0x2A, 0x96, 0xB5,-    0x52, 0x34, 0x1D, 0xE7, 0x8D, 0xC4, 0x6D, 0x3E,-    0xC8, 0xCF, 0xAB, 0xC6, 0x99, 0xB5, 0x0A, 0xF4,-    0x1F, 0xDA, 0x39, 0xCF, 0x1B, 0x01, 0x73, 0x66,-    0x09, 0x23, 0x51, 0x0A, 0xD6, 0x7F, 0xAE, 0xDE,-    0xF5, 0x20, 0x7C, 0xFF, 0xE8, 0x64, 0x1D, 0x20-  },-  {-    0x7D, 0x8F, 0x06, 0x72, 0x99, 0x2B, 0x79, 0xBE,-    0x3A, 0x36, 0x4D, 0x8E, 0x59, 0x04, 0xF4, 0xAB,-    0x71, 0x3B, 0xBC, 0x8A, 0xB0, 0x1B, 0x4F, 0x30,-    0x9A, 0xD8, 0xCC, 0xF2, 0x23, 0xCE, 0x10, 0x34,-    0xA8, 0x60, 0xDC, 0xB0, 0xB0, 0x05, 0x50, 0x61,-    0x2C, 0xC2, 0xFA, 0x17, 0xF2, 0x96, 0x9E, 0x18,-    0xF2, 0x2E, 0x14, 0x27, 0xD2, 0x54, 0xB4, 0xA8,-    0x2B, 0x3A, 0x03, 0xA3, 0xEB, 0x39, 0x4A, 0xDF-  },-  {-    0xA5, 0x6D, 0x67, 0x25, 0xBF, 0xB3, 0xDE, 0x47,-    0xC1, 0x41, 0x4A, 0xDF, 0x25, 0xFC, 0x8F, 0x0F,-    0xC9, 0x84, 0x6F, 0x69, 0x87, 0x72, 0x2B, 0xC0,-    0x63, 0x66, 0xD5, 0xCA, 0x4E, 0x89, 0x72, 0x29,-    0x25, 0xEB, 0xBC, 0x88, 0x14, 0x18, 0x84, 0x40,-    0x75, 0x39, 0x7A, 0x0C, 0xA8, 0x98, 0x42, 0xC7,-    0xB9, 0xE9, 0xE0, 0x7E, 0x1D, 0x9D, 0x18, 0x3E,-    0xBE, 0xB3, 0x9E, 0x12, 0x0B, 0x48, 0x3B, 0xF7-  },-  {-    0xAF, 0x5E, 0x03, 0xD7, 0xFE, 0x60, 0xC6, 0x7E,-    0x10, 0x31, 0x33, 0x44, 0x43, 0x4E, 0x79, 0x48,-    0x5A, 0x03, 0xA7, 0x58, 0xD6, 0xDC, 0xE9, 0x85,-    0x57, 0x47, 0x45, 0x76, 0x3C, 0x1C, 0x5C, 0x77,-    0xD4, 0xFB, 0x3E, 0x6F, 0xB1, 0x22, 0x30, 0x36,-    0x83, 0x70, 0x99, 0x3B, 0xF9, 0x0F, 0xEE, 0xD0,-    0xC5, 0xD1, 0x60, 0x75, 0x24, 0x56, 0x2D, 0x7C,-    0x09, 0xC0, 0xC2, 0x10, 0xED, 0x39, 0x3D, 0x7C-  },-  {-    0x7A, 0x20, 0x54, 0x0C, 0xC0, 0x7B, 0xF7, 0x2B,-    0x58, 0x24, 0x21, 0xFC, 0x34, 0x2E, 0x82, 0xF5,-    0x21, 0x34, 0xB6, 0x98, 0x41, 0xEC, 0x28, 0xED,-    0x18, 0x9E, 0x2E, 0xA6, 0xA2, 0x9D, 0xD2, 0xF8,-    0x2A, 0x64, 0x03, 0x52, 0xD2, 0x22, 0xB5, 0x2F,-    0x29, 0x11, 0xDC, 0x72, 0xA7, 0xDA, 0xB3, 0x1C,-    0xAA, 0xDD, 0x80, 0xC6, 0x11, 0x8F, 0x13, 0xC5,-    0x6B, 0x2A, 0x1E, 0x43, 0x73, 0xBE, 0x0E, 0xA3-  },-  {-    0x48, 0x6F, 0x02, 0xC6, 0x3E, 0x54, 0x67, 0xEA,-    0x1F, 0xDD, 0xE7, 0xE8, 0x2B, 0xFA, 0xCC, 0x2C,-    0x1B, 0xA5, 0xD6, 0x36, 0xD9, 0xF3, 0xD0, 0x8B,-    0x21, 0x0D, 0xA3, 0xF3, 0x72, 0xF7, 0x06, 0xEC,-    0x21, 0x8C, 0xC1, 0x7F, 0xF6, 0x0A, 0xEF, 0x70,-    0x3B, 0xBE, 0x0C, 0x15, 0xC3, 0x8A, 0xE5, 0x5D,-    0x28, 0x6A, 0x68, 0x4F, 0x86, 0x4C, 0x78, 0x21,-    0x1C, 0xCA, 0xB4, 0x17, 0x8C, 0x92, 0xAD, 0xBA-  },-  {-    0x1C, 0x7A, 0x5C, 0x1D, 0xED, 0xCD, 0x04, 0xA9,-    0x21, 0x78, 0x8F, 0x7E, 0xB2, 0x33, 0x61, 0xCA,-    0x19, 0x53, 0xB0, 0x4B, 0x9C, 0x7A, 0xEC, 0x35,-    0xD6, 0x5E, 0xA3, 0xE4, 0x99, 0x6D, 0xB2, 0x6F,-    0x28, 0x12, 0x78, 0xEA, 0x4A, 0xE6, 0x66, 0xAD,-    0x81, 0x02, 0x7D, 0x98, 0xAF, 0x57, 0x26, 0x2C,-    0xDB, 0xFA, 0x4C, 0x08, 0x5F, 0x42, 0x10, 0x56,-    0x8C, 0x7E, 0x15, 0xEE, 0xC7, 0x80, 0x51, 0x14-  },-  {-    0x9C, 0xE3, 0xFA, 0x9A, 0x86, 0x0B, 0xDB, 0xD5,-    0x37, 0x8F, 0xD6, 0xD7, 0xB8, 0xB6, 0x71, 0xC6,-    0xCB, 0x76, 0x92, 0x91, 0x0C, 0xE8, 0xF9, 0xB6,-    0xCB, 0x41, 0x22, 0xCB, 0xCB, 0xE6, 0xAC, 0x06,-    0xCA, 0x04, 0x22, 0xCE, 0xF1, 0x22, 0x59, 0x35,-    0x05, 0x3B, 0x7D, 0x19, 0x3A, 0x81, 0xB9, 0xE9,-    0x72, 0xEB, 0x85, 0xA1, 0xD3, 0x07, 0x4F, 0x14,-    0xCB, 0xB5, 0xEC, 0x9F, 0x05, 0x73, 0x89, 0x2D-  },-  {-    0xA9, 0x11, 0x87, 0xBE, 0x5C, 0x37, 0x1C, 0x42,-    0x65, 0xC1, 0x74, 0xFD, 0x46, 0x53, 0xB8, 0xAB,-    0x70, 0x85, 0x51, 0xF8, 0x3D, 0x1F, 0xEE, 0x1C,-    0xC1, 0x47, 0x95, 0x81, 0xBC, 0x00, 0x6D, 0x6F,-    0xB7, 0x8F, 0xCC, 0x9A, 0x5D, 0xEE, 0x1D, 0xB3,-    0x66, 0x6F, 0x50, 0x8F, 0x97, 0x80, 0xA3, 0x75,-    0x93, 0xEB, 0xCC, 0xCF, 0x5F, 0xBE, 0xD3, 0x96,-    0x67, 0xDC, 0x63, 0x61, 0xE9, 0x21, 0xF7, 0x79-  },-  {-    0x46, 0x25, 0x76, 0x7D, 0x7B, 0x1D, 0x3D, 0x3E,-    0xD2, 0xFB, 0xC6, 0x74, 0xAF, 0x14, 0xE0, 0x24,-    0x41, 0x52, 0xF2, 0xA4, 0x02, 0x1F, 0xCF, 0x33,-    0x11, 0x50, 0x5D, 0x89, 0xBD, 0x81, 0xE2, 0xF9,-    0xF9, 0xA5, 0x00, 0xC3, 0xB1, 0x99, 0x91, 0x4D,-    0xB4, 0x95, 0x00, 0xB3, 0xC9, 0x8D, 0x03, 0xEA,-    0x93, 0x28, 0x67, 0x51, 0xA6, 0x86, 0xA3, 0xB8,-    0x75, 0xDA, 0xAB, 0x0C, 0xCD, 0x63, 0xB4, 0x4F-  },-  {-    0x43, 0xDF, 0xDF, 0xE1, 0xB0, 0x14, 0xFE, 0xD3,-    0xA2, 0xAC, 0xAB, 0xB7, 0xF3, 0xE9, 0xA1, 0x82,-    0xF2, 0xAA, 0x18, 0x01, 0x9D, 0x27, 0xE3, 0xE6,-    0xCD, 0xCF, 0x31, 0xA1, 0x5B, 0x42, 0x8E, 0x91,-    0xE7, 0xB0, 0x8C, 0xF5, 0xE5, 0xC3, 0x76, 0xFC,-    0xE2, 0xD8, 0xA2, 0x8F, 0xF8, 0x5A, 0xB0, 0xA0,-    0xA1, 0x65, 0x6E, 0xDB, 0x4A, 0x0A, 0x91, 0x53,-    0x26, 0x20, 0x09, 0x6D, 0x9A, 0x5A, 0x65, 0x2D-  },-  {-    0x27, 0x9E, 0x32, 0x02, 0xBE, 0x39, 0x89, 0xBA,-    0x31, 0x12, 0x77, 0x25, 0x85, 0x17, 0x74, 0x87,-    0xE4, 0xFE, 0x3E, 0xE3, 0xEA, 0xB4, 0x9C, 0x2F,-    0x7F, 0xA7, 0xFE, 0x87, 0xCF, 0xE7, 0xB8, 0x0D,-    0x3E, 0x03, 0x55, 0xED, 0xFF, 0x6D, 0x03, 0x1E,-    0x6C, 0x96, 0xC7, 0x95, 0xDB, 0x1C, 0x6F, 0x04,-    0x18, 0x80, 0xEC, 0x38, 0x24, 0xDE, 0xFA, 0xCF,-    0x92, 0x63, 0x82, 0x0A, 0x8E, 0x73, 0x27, 0xDE-  },-  {-    0xEA, 0x2D, 0x06, 0x6A, 0xC2, 0x29, 0xD4, 0xD4,-    0xB6, 0x16, 0xA8, 0xBE, 0xDE, 0xC7, 0x34, 0x32,-    0x52, 0x24, 0xE4, 0xB4, 0xE5, 0x8F, 0x1A, 0xE6,-    0xDA, 0xD7, 0xE4, 0x0C, 0x2D, 0xA2, 0x91, 0x96,-    0xC3, 0xB1, 0xEA, 0x95, 0x71, 0xDA, 0xCC, 0x81,-    0xE8, 0x73, 0x28, 0xCA, 0xA0, 0x21, 0x1E, 0x09,-    0x02, 0x7B, 0x05, 0x24, 0xAA, 0x3F, 0x4A, 0x84,-    0x99, 0x17, 0xB3, 0x58, 0x67, 0x47, 0xEB, 0xBB-  },-  {-    0x49, 0xF0, 0x14, 0xF5, 0xC6, 0x18, 0x22, 0xC8,-    0x99, 0xAB, 0x5C, 0xAE, 0x51, 0xBE, 0x40, 0x44,-    0xA4, 0x49, 0x5E, 0x77, 0x7D, 0xEB, 0x7D, 0xA9,-    0xB6, 0xD8, 0x49, 0x0E, 0xFB, 0xB8, 0x75, 0x30,-    0xAD, 0xF2, 0x93, 0xDA, 0xF0, 0x79, 0xF9, 0x4C,-    0x33, 0xB7, 0x04, 0x4E, 0xF6, 0x2E, 0x2E, 0x5B,-    0xB3, 0xEB, 0x11, 0xE1, 0x73, 0x04, 0xF8, 0x45,-    0x3E, 0xE6, 0xCE, 0x24, 0xF0, 0x33, 0xDD, 0xB0-  },-  {-    0x92, 0x33, 0x49, 0x03, 0x44, 0xE5, 0xB0, 0xDC,-    0x59, 0x12, 0x67, 0x1B, 0x7A, 0xE5, 0x4C, 0xEE,-    0x77, 0x30, 0xDB, 0xE1, 0xF4, 0xC7, 0xD9, 0x2A,-    0x4D, 0x3E, 0x3A, 0xAB, 0x50, 0x57, 0x17, 0x08,-    0xDB, 0x51, 0xDC, 0xF9, 0xC2, 0x94, 0x45, 0x91,-    0xDB, 0x65, 0x1D, 0xB3, 0x2D, 0x22, 0x93, 0x5B,-    0x86, 0x94, 0x49, 0x69, 0xBE, 0x77, 0xD5, 0xB5,-    0xFE, 0xAE, 0x6C, 0x38, 0x40, 0xA8, 0xDB, 0x26-  },-  {-    0xB6, 0xE7, 0x5E, 0x6F, 0x4C, 0x7F, 0x45, 0x3B,-    0x74, 0x65, 0xD2, 0x5B, 0x5A, 0xC8, 0xC7, 0x19,-    0x69, 0x02, 0xEA, 0xA9, 0x53, 0x87, 0x52, 0x28,-    0xC8, 0x63, 0x4E, 0x16, 0xE2, 0xAE, 0x1F, 0x38,-    0xBC, 0x32, 0x75, 0x30, 0x43, 0x35, 0xF5, 0x98,-    0x9E, 0xCC, 0xC1, 0xE3, 0x41, 0x67, 0xD4, 0xE6,-    0x8D, 0x77, 0x19, 0x96, 0x8F, 0xBA, 0x8E, 0x2F,-    0xE6, 0x79, 0x47, 0xC3, 0x5C, 0x48, 0xE8, 0x06-  },-  {-    0xCC, 0x14, 0xCA, 0x66, 0x5A, 0xF1, 0x48, 0x3E,-    0xFB, 0xC3, 0xAF, 0x80, 0x08, 0x0E, 0x65, 0x0D,-    0x50, 0x46, 0xA3, 0x93, 0x2F, 0x4F, 0x51, 0xF3,-    0xFE, 0x90, 0xA0, 0x70, 0x5E, 0xC2, 0x51, 0x04,-    0xAD, 0xF0, 0x78, 0x39, 0x26, 0x5D, 0xC5, 0x1D,-    0x43, 0x40, 0x14, 0x11, 0x24, 0x6E, 0x47, 0x4F,-    0x0D, 0x5E, 0x56, 0x37, 0xAF, 0x94, 0x76, 0x72,-    0x83, 0xD5, 0x3E, 0x06, 0x17, 0xE9, 0x81, 0xF4-  },-  {-    0x23, 0x0A, 0x1C, 0x85, 0x7C, 0xB2, 0xE7, 0x85,-    0x2E, 0x41, 0xB6, 0x47, 0xE9, 0x0E, 0x45, 0x85,-    0xD2, 0xD8, 0x81, 0xE1, 0x73, 0x4D, 0xC3, 0x89,-    0x55, 0x35, 0x6E, 0x8D, 0xD7, 0xBF, 0xF3, 0x90,-    0x53, 0x09, 0x2C, 0x6B, 0x38, 0xE2, 0x36, 0xE1,-    0x89, 0x95, 0x25, 0x64, 0x70, 0x73, 0xDD, 0xDF,-    0x68, 0x95, 0xD6, 0x42, 0x06, 0x32, 0x5E, 0x76,-    0x47, 0xF2, 0x75, 0x56, 0x7B, 0x25, 0x59, 0x09-  },-  {-    0xCB, 0xB6, 0x53, 0x21, 0xAC, 0x43, 0x6E, 0x2F,-    0xFD, 0xAB, 0x29, 0x36, 0x35, 0x9C, 0xE4, 0x90,-    0x23, 0xF7, 0xDE, 0xE7, 0x61, 0x4E, 0xF2, 0x8D,-    0x17, 0x3C, 0x3D, 0x27, 0xC5, 0xD1, 0xBF, 0xFA,-    0x51, 0x55, 0x3D, 0x43, 0x3F, 0x8E, 0xE3, 0xC9,-    0xE4, 0x9C, 0x05, 0xA2, 0xB8, 0x83, 0xCC, 0xE9,-    0x54, 0xC9, 0xA8, 0x09, 0x3B, 0x80, 0x61, 0x2A,-    0x0C, 0xDD, 0x47, 0x32, 0xE0, 0x41, 0xF9, 0x95-  },-  {-    0x3E, 0x7E, 0x57, 0x00, 0x74, 0x33, 0x72, 0x75,-    0xEF, 0xB5, 0x13, 0x15, 0x58, 0x80, 0x34, 0xC3,-    0xCF, 0x0D, 0xDD, 0xCA, 0x20, 0xB4, 0x61, 0x2E,-    0x0B, 0xD5, 0xB8, 0x81, 0xE7, 0xE5, 0x47, 0x6D,-    0x31, 0x9C, 0xE4, 0xFE, 0x9F, 0x19, 0x18, 0x6E,-    0x4C, 0x08, 0x26, 0xF4, 0x4F, 0x13, 0x1E, 0xB0,-    0x48, 0xE6, 0x5B, 0xE2, 0x42, 0xB1, 0x17, 0x2C,-    0x63, 0xBA, 0xDB, 0x12, 0x3A, 0xB0, 0xCB, 0xE8-  },-  {-    0xD3, 0x2E, 0x9E, 0xC0, 0x2D, 0x38, 0xD4, 0xE1,-    0xB8, 0x24, 0x9D, 0xF8, 0xDC, 0xB0, 0x0C, 0x5B,-    0x9C, 0x68, 0xEB, 0x89, 0x22, 0x67, 0x2E, 0x35,-    0x05, 0x39, 0x3B, 0x6A, 0x21, 0x0B, 0xA5, 0x6F,-    0x94, 0x96, 0xE5, 0xEE, 0x04, 0x90, 0xEF, 0x38,-    0x7C, 0x3C, 0xDE, 0xC0, 0x61, 0xF0, 0x6B, 0xC0,-    0x38, 0x2D, 0x93, 0x04, 0xCA, 0xFB, 0xB8, 0xE0,-    0xCD, 0x33, 0xD5, 0x70, 0x29, 0xE6, 0x2D, 0xF2-  },-  {-    0x8C, 0x15, 0x12, 0x46, 0x60, 0x89, 0xF0, 0x5B,-    0x37, 0x75, 0xC2, 0x62, 0xB6, 0x2D, 0x22, 0xB8,-    0x38, 0x54, 0xA8, 0x32, 0x18, 0x13, 0x0B, 0x4E,-    0xC9, 0x1B, 0x3C, 0xCB, 0xD2, 0x93, 0xD2, 0xA5,-    0x43, 0x02, 0xCE, 0xCA, 0xAB, 0x9B, 0x10, 0x0C,-    0x68, 0xD1, 0xE6, 0xDD, 0xC8, 0xF0, 0x7C, 0xDD,-    0xBD, 0xFE, 0x6F, 0xDA, 0xAA, 0xF0, 0x99, 0xCC,-    0x09, 0xD6, 0xB7, 0x25, 0x87, 0x9C, 0x63, 0x69-  },-  {-    0x91, 0xA7, 0xF6, 0x1C, 0x97, 0xC2, 0x91, 0x1E,-    0x4C, 0x81, 0x2E, 0xF7, 0x1D, 0x78, 0x0A, 0xD8,-    0xFA, 0x78, 0x87, 0x94, 0x56, 0x1D, 0x08, 0x30,-    0x3F, 0xD1, 0xC1, 0xCB, 0x60, 0x8A, 0x46, 0xA1,-    0x25, 0x63, 0x08, 0x6E, 0xC5, 0xB3, 0x9D, 0x47,-    0x1A, 0xED, 0x94, 0xFB, 0x0F, 0x6C, 0x67, 0x8A,-    0x43, 0xB8, 0x79, 0x29, 0x32, 0xF9, 0x02, 0x8D,-    0x77, 0x2A, 0x22, 0x76, 0x8E, 0xA2, 0x3A, 0x9B-  },-  {-    0x4F, 0x6B, 0xB2, 0x22, 0xA3, 0x95, 0xE8, 0xB1,-    0x8F, 0x6B, 0xA1, 0x55, 0x47, 0x7A, 0xED, 0x3F,-    0x07, 0x29, 0xAC, 0x9E, 0x83, 0xE1, 0x6D, 0x31,-    0xA2, 0xA8, 0xBC, 0x65, 0x54, 0x22, 0xB8, 0x37,-    0xC8, 0x91, 0xC6, 0x19, 0x9E, 0x6F, 0x0D, 0x75,-    0x79, 0x9E, 0x3B, 0x69, 0x15, 0x25, 0xC5, 0x81,-    0x95, 0x35, 0x17, 0xF2, 0x52, 0xC4, 0xB9, 0xE3,-    0xA2, 0x7A, 0x28, 0xFB, 0xAF, 0x49, 0x64, 0x4C-  },-  {-    0x5D, 0x06, 0xC0, 0x7E, 0x7A, 0x64, 0x6C, 0x41,-    0x3A, 0x50, 0x1C, 0x3F, 0x4B, 0xB2, 0xFC, 0x38,-    0x12, 0x7D, 0xE7, 0x50, 0x9B, 0x70, 0x77, 0xC4,-    0xD9, 0xB5, 0x61, 0x32, 0x01, 0xC1, 0xAA, 0x02,-    0xFD, 0x5F, 0x79, 0xD2, 0x74, 0x59, 0x15, 0xDD,-    0x57, 0xFB, 0xCB, 0x4C, 0xE0, 0x86, 0x95, 0xF6,-    0xEF, 0xC0, 0xCB, 0x3D, 0x2D, 0x33, 0x0E, 0x19,-    0xB4, 0xB0, 0xE6, 0x00, 0x4E, 0xA6, 0x47, 0x1E-  },-  {-    0xB9, 0x67, 0x56, 0xE5, 0x79, 0x09, 0x96, 0x8F,-    0x14, 0xB7, 0x96, 0xA5, 0xD3, 0x0F, 0x4C, 0x9D,-    0x67, 0x14, 0x72, 0xCF, 0x82, 0xC8, 0xCF, 0xB2,-    0xCA, 0xCA, 0x7A, 0xC7, 0xA4, 0x4C, 0xA0, 0xA1,-    0x4C, 0x98, 0x42, 0xD0, 0x0C, 0x82, 0xE3, 0x37,-    0x50, 0x2C, 0x94, 0xD5, 0x96, 0x0A, 0xCA, 0x4C,-    0x49, 0x2E, 0xA7, 0xB0, 0xDF, 0x91, 0x9D, 0xDF,-    0x1A, 0xAD, 0xA2, 0xA2, 0x75, 0xBB, 0x10, 0xD4-  },-  {-    0xFF, 0x0A, 0x01, 0x5E, 0x98, 0xDB, 0x9C, 0x99,-    0xF0, 0x39, 0x77, 0x71, 0x0A, 0xAC, 0x3E, 0x65,-    0x8C, 0x0D, 0x89, 0x6F, 0x6D, 0x71, 0xD6, 0x18,-    0xBA, 0x79, 0xDC, 0x6C, 0xF7, 0x2A, 0xC7, 0x5B,-    0x7C, 0x03, 0x8E, 0xB6, 0x86, 0x2D, 0xED, 0xE4,-    0x54, 0x3E, 0x14, 0x54, 0x13, 0xA6, 0x36, 0x8D,-    0x69, 0xF5, 0x72, 0x2C, 0x82, 0x7B, 0xA3, 0xEF,-    0x25, 0xB6, 0xAE, 0x64, 0x40, 0xD3, 0x92, 0x76-  },-  {-    0x5B, 0x21, 0xC5, 0xFD, 0x88, 0x68, 0x36, 0x76,-    0x12, 0x47, 0x4F, 0xA2, 0xE7, 0x0E, 0x9C, 0xFA,-    0x22, 0x01, 0xFF, 0xEE, 0xE8, 0xFA, 0xFA, 0xB5,-    0x79, 0x7A, 0xD5, 0x8F, 0xEF, 0xA1, 0x7C, 0x9B,-    0x5B, 0x10, 0x7D, 0xA4, 0xA3, 0xDB, 0x63, 0x20,-    0xBA, 0xAF, 0x2C, 0x86, 0x17, 0xD5, 0xA5, 0x1D,-    0xF9, 0x14, 0xAE, 0x88, 0xDA, 0x38, 0x67, 0xC2,-    0xD4, 0x1F, 0x0C, 0xC1, 0x4F, 0xA6, 0x79, 0x28-  },-};-----static const uint8_t blake2b_keyed_kat[KAT_LENGTH][BLAKE2B_OUTBYTES] =-{-  {-    0x10, 0xEB, 0xB6, 0x77, 0x00, 0xB1, 0x86, 0x8E,-    0xFB, 0x44, 0x17, 0x98, 0x7A, 0xCF, 0x46, 0x90,-    0xAE, 0x9D, 0x97, 0x2F, 0xB7, 0xA5, 0x90, 0xC2,-    0xF0, 0x28, 0x71, 0x79, 0x9A, 0xAA, 0x47, 0x86,-    0xB5, 0xE9, 0x96, 0xE8, 0xF0, 0xF4, 0xEB, 0x98,-    0x1F, 0xC2, 0x14, 0xB0, 0x05, 0xF4, 0x2D, 0x2F,-    0xF4, 0x23, 0x34, 0x99, 0x39, 0x16, 0x53, 0xDF,-    0x7A, 0xEF, 0xCB, 0xC1, 0x3F, 0xC5, 0x15, 0x68-  },-  {-    0x96, 0x1F, 0x6D, 0xD1, 0xE4, 0xDD, 0x30, 0xF6,-    0x39, 0x01, 0x69, 0x0C, 0x51, 0x2E, 0x78, 0xE4,-    0xB4, 0x5E, 0x47, 0x42, 0xED, 0x19, 0x7C, 0x3C,-    0x5E, 0x45, 0xC5, 0x49, 0xFD, 0x25, 0xF2, 0xE4,-    0x18, 0x7B, 0x0B, 0xC9, 0xFE, 0x30, 0x49, 0x2B,-    0x16, 0xB0, 0xD0, 0xBC, 0x4E, 0xF9, 0xB0, 0xF3,-    0x4C, 0x70, 0x03, 0xFA, 0xC0, 0x9A, 0x5E, 0xF1,-    0x53, 0x2E, 0x69, 0x43, 0x02, 0x34, 0xCE, 0xBD-  },-  {-    0xDA, 0x2C, 0xFB, 0xE2, 0xD8, 0x40, 0x9A, 0x0F,-    0x38, 0x02, 0x61, 0x13, 0x88, 0x4F, 0x84, 0xB5,-    0x01, 0x56, 0x37, 0x1A, 0xE3, 0x04, 0xC4, 0x43,-    0x01, 0x73, 0xD0, 0x8A, 0x99, 0xD9, 0xFB, 0x1B,-    0x98, 0x31, 0x64, 0xA3, 0x77, 0x07, 0x06, 0xD5,-    0x37, 0xF4, 0x9E, 0x0C, 0x91, 0x6D, 0x9F, 0x32,-    0xB9, 0x5C, 0xC3, 0x7A, 0x95, 0xB9, 0x9D, 0x85,-    0x74, 0x36, 0xF0, 0x23, 0x2C, 0x88, 0xA9, 0x65-  },-  {-    0x33, 0xD0, 0x82, 0x5D, 0xDD, 0xF7, 0xAD, 0xA9,-    0x9B, 0x0E, 0x7E, 0x30, 0x71, 0x04, 0xAD, 0x07,-    0xCA, 0x9C, 0xFD, 0x96, 0x92, 0x21, 0x4F, 0x15,-    0x61, 0x35, 0x63, 0x15, 0xE7, 0x84, 0xF3, 0xE5,-    0xA1, 0x7E, 0x36, 0x4A, 0xE9, 0xDB, 0xB1, 0x4C,-    0xB2, 0x03, 0x6D, 0xF9, 0x32, 0xB7, 0x7F, 0x4B,-    0x29, 0x27, 0x61, 0x36, 0x5F, 0xB3, 0x28, 0xDE,-    0x7A, 0xFD, 0xC6, 0xD8, 0x99, 0x8F, 0x5F, 0xC1-  },-  {-    0xBE, 0xAA, 0x5A, 0x3D, 0x08, 0xF3, 0x80, 0x71,-    0x43, 0xCF, 0x62, 0x1D, 0x95, 0xCD, 0x69, 0x05,-    0x14, 0xD0, 0xB4, 0x9E, 0xFF, 0xF9, 0xC9, 0x1D,-    0x24, 0xB5, 0x92, 0x41, 0xEC, 0x0E, 0xEF, 0xA5,-    0xF6, 0x01, 0x96, 0xD4, 0x07, 0x04, 0x8B, 0xBA,-    0x8D, 0x21, 0x46, 0x82, 0x8E, 0xBC, 0xB0, 0x48,-    0x8D, 0x88, 0x42, 0xFD, 0x56, 0xBB, 0x4F, 0x6D,-    0xF8, 0xE1, 0x9C, 0x4B, 0x4D, 0xAA, 0xB8, 0xAC-  },-  {-    0x09, 0x80, 0x84, 0xB5, 0x1F, 0xD1, 0x3D, 0xEA,-    0xE5, 0xF4, 0x32, 0x0D, 0xE9, 0x4A, 0x68, 0x8E,-    0xE0, 0x7B, 0xAE, 0xA2, 0x80, 0x04, 0x86, 0x68,-    0x9A, 0x86, 0x36, 0x11, 0x7B, 0x46, 0xC1, 0xF4,-    0xC1, 0xF6, 0xAF, 0x7F, 0x74, 0xAE, 0x7C, 0x85,-    0x76, 0x00, 0x45, 0x6A, 0x58, 0xA3, 0xAF, 0x25,-    0x1D, 0xC4, 0x72, 0x3A, 0x64, 0xCC, 0x7C, 0x0A,-    0x5A, 0xB6, 0xD9, 0xCA, 0xC9, 0x1C, 0x20, 0xBB-  },-  {-    0x60, 0x44, 0x54, 0x0D, 0x56, 0x08, 0x53, 0xEB,-    0x1C, 0x57, 0xDF, 0x00, 0x77, 0xDD, 0x38, 0x10,-    0x94, 0x78, 0x1C, 0xDB, 0x90, 0x73, 0xE5, 0xB1,-    0xB3, 0xD3, 0xF6, 0xC7, 0x82, 0x9E, 0x12, 0x06,-    0x6B, 0xBA, 0xCA, 0x96, 0xD9, 0x89, 0xA6, 0x90,-    0xDE, 0x72, 0xCA, 0x31, 0x33, 0xA8, 0x36, 0x52,-    0xBA, 0x28, 0x4A, 0x6D, 0x62, 0x94, 0x2B, 0x27,-    0x1F, 0xFA, 0x26, 0x20, 0xC9, 0xE7, 0x5B, 0x1F-  },-  {-    0x7A, 0x8C, 0xFE, 0x9B, 0x90, 0xF7, 0x5F, 0x7E,-    0xCB, 0x3A, 0xCC, 0x05, 0x3A, 0xAE, 0xD6, 0x19,-    0x31, 0x12, 0xB6, 0xF6, 0xA4, 0xAE, 0xEB, 0x3F,-    0x65, 0xD3, 0xDE, 0x54, 0x19, 0x42, 0xDE, 0xB9,-    0xE2, 0x22, 0x81, 0x52, 0xA3, 0xC4, 0xBB, 0xBE,-    0x72, 0xFC, 0x3B, 0x12, 0x62, 0x95, 0x28, 0xCF,-    0xBB, 0x09, 0xFE, 0x63, 0x0F, 0x04, 0x74, 0x33,-    0x9F, 0x54, 0xAB, 0xF4, 0x53, 0xE2, 0xED, 0x52-  },-  {-    0x38, 0x0B, 0xEA, 0xF6, 0xEA, 0x7C, 0xC9, 0x36,-    0x5E, 0x27, 0x0E, 0xF0, 0xE6, 0xF3, 0xA6, 0x4F,-    0xB9, 0x02, 0xAC, 0xAE, 0x51, 0xDD, 0x55, 0x12,-    0xF8, 0x42, 0x59, 0xAD, 0x2C, 0x91, 0xF4, 0xBC,-    0x41, 0x08, 0xDB, 0x73, 0x19, 0x2A, 0x5B, 0xBF,-    0xB0, 0xCB, 0xCF, 0x71, 0xE4, 0x6C, 0x3E, 0x21,-    0xAE, 0xE1, 0xC5, 0xE8, 0x60, 0xDC, 0x96, 0xE8,-    0xEB, 0x0B, 0x7B, 0x84, 0x26, 0xE6, 0xAB, 0xE9-  },-  {-    0x60, 0xFE, 0x3C, 0x45, 0x35, 0xE1, 0xB5, 0x9D,-    0x9A, 0x61, 0xEA, 0x85, 0x00, 0xBF, 0xAC, 0x41,-    0xA6, 0x9D, 0xFF, 0xB1, 0xCE, 0xAD, 0xD9, 0xAC,-    0xA3, 0x23, 0xE9, 0xA6, 0x25, 0xB6, 0x4D, 0xA5,-    0x76, 0x3B, 0xAD, 0x72, 0x26, 0xDA, 0x02, 0xB9,-    0xC8, 0xC4, 0xF1, 0xA5, 0xDE, 0x14, 0x0A, 0xC5,-    0xA6, 0xC1, 0x12, 0x4E, 0x4F, 0x71, 0x8C, 0xE0,-    0xB2, 0x8E, 0xA4, 0x73, 0x93, 0xAA, 0x66, 0x37-  },-  {-    0x4F, 0xE1, 0x81, 0xF5, 0x4A, 0xD6, 0x3A, 0x29,-    0x83, 0xFE, 0xAA, 0xF7, 0x7D, 0x1E, 0x72, 0x35,-    0xC2, 0xBE, 0xB1, 0x7F, 0xA3, 0x28, 0xB6, 0xD9,-    0x50, 0x5B, 0xDA, 0x32, 0x7D, 0xF1, 0x9F, 0xC3,-    0x7F, 0x02, 0xC4, 0xB6, 0xF0, 0x36, 0x8C, 0xE2,-    0x31, 0x47, 0x31, 0x3A, 0x8E, 0x57, 0x38, 0xB5,-    0xFA, 0x2A, 0x95, 0xB2, 0x9D, 0xE1, 0xC7, 0xF8,-    0x26, 0x4E, 0xB7, 0x7B, 0x69, 0xF5, 0x85, 0xCD-  },-  {-    0xF2, 0x28, 0x77, 0x3C, 0xE3, 0xF3, 0xA4, 0x2B,-    0x5F, 0x14, 0x4D, 0x63, 0x23, 0x7A, 0x72, 0xD9,-    0x96, 0x93, 0xAD, 0xB8, 0x83, 0x7D, 0x0E, 0x11,-    0x2A, 0x8A, 0x0F, 0x8F, 0xFF, 0xF2, 0xC3, 0x62,-    0x85, 0x7A, 0xC4, 0x9C, 0x11, 0xEC, 0x74, 0x0D,-    0x15, 0x00, 0x74, 0x9D, 0xAC, 0x9B, 0x1F, 0x45,-    0x48, 0x10, 0x8B, 0xF3, 0x15, 0x57, 0x94, 0xDC,-    0xC9, 0xE4, 0x08, 0x28, 0x49, 0xE2, 0xB8, 0x5B-  },-  {-    0x96, 0x24, 0x52, 0xA8, 0x45, 0x5C, 0xC5, 0x6C,-    0x85, 0x11, 0x31, 0x7E, 0x3B, 0x1F, 0x3B, 0x2C,-    0x37, 0xDF, 0x75, 0xF5, 0x88, 0xE9, 0x43, 0x25,-    0xFD, 0xD7, 0x70, 0x70, 0x35, 0x9C, 0xF6, 0x3A,-    0x9A, 0xE6, 0xE9, 0x30, 0x93, 0x6F, 0xDF, 0x8E,-    0x1E, 0x08, 0xFF, 0xCA, 0x44, 0x0C, 0xFB, 0x72,-    0xC2, 0x8F, 0x06, 0xD8, 0x9A, 0x21, 0x51, 0xD1,-    0xC4, 0x6C, 0xD5, 0xB2, 0x68, 0xEF, 0x85, 0x63-  },-  {-    0x43, 0xD4, 0x4B, 0xFA, 0x18, 0x76, 0x8C, 0x59,-    0x89, 0x6B, 0xF7, 0xED, 0x17, 0x65, 0xCB, 0x2D,-    0x14, 0xAF, 0x8C, 0x26, 0x02, 0x66, 0x03, 0x90,-    0x99, 0xB2, 0x5A, 0x60, 0x3E, 0x4D, 0xDC, 0x50,-    0x39, 0xD6, 0xEF, 0x3A, 0x91, 0x84, 0x7D, 0x10,-    0x88, 0xD4, 0x01, 0xC0, 0xC7, 0xE8, 0x47, 0x78,-    0x1A, 0x8A, 0x59, 0x0D, 0x33, 0xA3, 0xC6, 0xCB,-    0x4D, 0xF0, 0xFA, 0xB1, 0xC2, 0xF2, 0x23, 0x55-  },-  {-    0xDC, 0xFF, 0xA9, 0xD5, 0x8C, 0x2A, 0x4C, 0xA2,-    0xCD, 0xBB, 0x0C, 0x7A, 0xA4, 0xC4, 0xC1, 0xD4,-    0x51, 0x65, 0x19, 0x00, 0x89, 0xF4, 0xE9, 0x83,-    0xBB, 0x1C, 0x2C, 0xAB, 0x4A, 0xAE, 0xFF, 0x1F,-    0xA2, 0xB5, 0xEE, 0x51, 0x6F, 0xEC, 0xD7, 0x80,-    0x54, 0x02, 0x40, 0xBF, 0x37, 0xE5, 0x6C, 0x8B,-    0xCC, 0xA7, 0xFA, 0xB9, 0x80, 0xE1, 0xE6, 0x1C,-    0x94, 0x00, 0xD8, 0xA9, 0xA5, 0xB1, 0x4A, 0xC6-  },-  {-    0x6F, 0xBF, 0x31, 0xB4, 0x5A, 0xB0, 0xC0, 0xB8,-    0xDA, 0xD1, 0xC0, 0xF5, 0xF4, 0x06, 0x13, 0x79,-    0x91, 0x2D, 0xDE, 0x5A, 0xA9, 0x22, 0x09, 0x9A,-    0x03, 0x0B, 0x72, 0x5C, 0x73, 0x34, 0x6C, 0x52,-    0x42, 0x91, 0xAD, 0xEF, 0x89, 0xD2, 0xF6, 0xFD,-    0x8D, 0xFC, 0xDA, 0x6D, 0x07, 0xDA, 0xD8, 0x11,-    0xA9, 0x31, 0x45, 0x36, 0xC2, 0x91, 0x5E, 0xD4,-    0x5D, 0xA3, 0x49, 0x47, 0xE8, 0x3D, 0xE3, 0x4E-  },-  {-    0xA0, 0xC6, 0x5B, 0xDD, 0xDE, 0x8A, 0xDE, 0xF5,-    0x72, 0x82, 0xB0, 0x4B, 0x11, 0xE7, 0xBC, 0x8A,-    0xAB, 0x10, 0x5B, 0x99, 0x23, 0x1B, 0x75, 0x0C,-    0x02, 0x1F, 0x4A, 0x73, 0x5C, 0xB1, 0xBC, 0xFA,-    0xB8, 0x75, 0x53, 0xBB, 0xA3, 0xAB, 0xB0, 0xC3,-    0xE6, 0x4A, 0x0B, 0x69, 0x55, 0x28, 0x51, 0x85,-    0xA0, 0xBD, 0x35, 0xFB, 0x8C, 0xFD, 0xE5, 0x57,-    0x32, 0x9B, 0xEB, 0xB1, 0xF6, 0x29, 0xEE, 0x93-  },-  {-    0xF9, 0x9D, 0x81, 0x55, 0x50, 0x55, 0x8E, 0x81,-    0xEC, 0xA2, 0xF9, 0x67, 0x18, 0xAE, 0xD1, 0x0D,-    0x86, 0xF3, 0xF1, 0xCF, 0xB6, 0x75, 0xCC, 0xE0,-    0x6B, 0x0E, 0xFF, 0x02, 0xF6, 0x17, 0xC5, 0xA4,-    0x2C, 0x5A, 0xA7, 0x60, 0x27, 0x0F, 0x26, 0x79,-    0xDA, 0x26, 0x77, 0xC5, 0xAE, 0xB9, 0x4F, 0x11,-    0x42, 0x27, 0x7F, 0x21, 0xC7, 0xF7, 0x9F, 0x3C,-    0x4F, 0x0C, 0xCE, 0x4E, 0xD8, 0xEE, 0x62, 0xB1-  },-  {-    0x95, 0x39, 0x1D, 0xA8, 0xFC, 0x7B, 0x91, 0x7A,-    0x20, 0x44, 0xB3, 0xD6, 0xF5, 0x37, 0x4E, 0x1C,-    0xA0, 0x72, 0xB4, 0x14, 0x54, 0xD5, 0x72, 0xC7,-    0x35, 0x6C, 0x05, 0xFD, 0x4B, 0xC1, 0xE0, 0xF4,-    0x0B, 0x8B, 0xB8, 0xB4, 0xA9, 0xF6, 0xBC, 0xE9,-    0xBE, 0x2C, 0x46, 0x23, 0xC3, 0x99, 0xB0, 0xDC,-    0xA0, 0xDA, 0xB0, 0x5C, 0xB7, 0x28, 0x1B, 0x71,-    0xA2, 0x1B, 0x0E, 0xBC, 0xD9, 0xE5, 0x56, 0x70-  },-  {-    0x04, 0xB9, 0xCD, 0x3D, 0x20, 0xD2, 0x21, 0xC0,-    0x9A, 0xC8, 0x69, 0x13, 0xD3, 0xDC, 0x63, 0x04,-    0x19, 0x89, 0xA9, 0xA1, 0xE6, 0x94, 0xF1, 0xE6,-    0x39, 0xA3, 0xBA, 0x7E, 0x45, 0x18, 0x40, 0xF7,-    0x50, 0xC2, 0xFC, 0x19, 0x1D, 0x56, 0xAD, 0x61,-    0xF2, 0xE7, 0x93, 0x6B, 0xC0, 0xAC, 0x8E, 0x09,-    0x4B, 0x60, 0xCA, 0xEE, 0xD8, 0x78, 0xC1, 0x87,-    0x99, 0x04, 0x54, 0x02, 0xD6, 0x1C, 0xEA, 0xF9-  },-  {-    0xEC, 0x0E, 0x0E, 0xF7, 0x07, 0xE4, 0xED, 0x6C,-    0x0C, 0x66, 0xF9, 0xE0, 0x89, 0xE4, 0x95, 0x4B,-    0x05, 0x80, 0x30, 0xD2, 0xDD, 0x86, 0x39, 0x8F,-    0xE8, 0x40, 0x59, 0x63, 0x1F, 0x9E, 0xE5, 0x91,-    0xD9, 0xD7, 0x73, 0x75, 0x35, 0x51, 0x49, 0x17,-    0x8C, 0x0C, 0xF8, 0xF8, 0xE7, 0xC4, 0x9E, 0xD2,-    0xA5, 0xE4, 0xF9, 0x54, 0x88, 0xA2, 0x24, 0x70,-    0x67, 0xC2, 0x08, 0x51, 0x0F, 0xAD, 0xC4, 0x4C-  },-  {-    0x9A, 0x37, 0xCC, 0xE2, 0x73, 0xB7, 0x9C, 0x09,-    0x91, 0x36, 0x77, 0x51, 0x0E, 0xAF, 0x76, 0x88,-    0xE8, 0x9B, 0x33, 0x14, 0xD3, 0x53, 0x2F, 0xD2,-    0x76, 0x4C, 0x39, 0xDE, 0x02, 0x2A, 0x29, 0x45,-    0xB5, 0x71, 0x0D, 0x13, 0x51, 0x7A, 0xF8, 0xDD,-    0xC0, 0x31, 0x66, 0x24, 0xE7, 0x3B, 0xEC, 0x1C,-    0xE6, 0x7D, 0xF1, 0x52, 0x28, 0x30, 0x20, 0x36,-    0xF3, 0x30, 0xAB, 0x0C, 0xB4, 0xD2, 0x18, 0xDD-  },-  {-    0x4C, 0xF9, 0xBB, 0x8F, 0xB3, 0xD4, 0xDE, 0x8B,-    0x38, 0xB2, 0xF2, 0x62, 0xD3, 0xC4, 0x0F, 0x46,-    0xDF, 0xE7, 0x47, 0xE8, 0xFC, 0x0A, 0x41, 0x4C,-    0x19, 0x3D, 0x9F, 0xCF, 0x75, 0x31, 0x06, 0xCE,-    0x47, 0xA1, 0x8F, 0x17, 0x2F, 0x12, 0xE8, 0xA2,-    0xF1, 0xC2, 0x67, 0x26, 0x54, 0x53, 0x58, 0xE5,-    0xEE, 0x28, 0xC9, 0xE2, 0x21, 0x3A, 0x87, 0x87,-    0xAA, 0xFB, 0xC5, 0x16, 0xD2, 0x34, 0x31, 0x52-  },-  {-    0x64, 0xE0, 0xC6, 0x3A, 0xF9, 0xC8, 0x08, 0xFD,-    0x89, 0x31, 0x37, 0x12, 0x98, 0x67, 0xFD, 0x91,-    0x93, 0x9D, 0x53, 0xF2, 0xAF, 0x04, 0xBE, 0x4F,-    0xA2, 0x68, 0x00, 0x61, 0x00, 0x06, 0x9B, 0x2D,-    0x69, 0xDA, 0xA5, 0xC5, 0xD8, 0xED, 0x7F, 0xDD,-    0xCB, 0x2A, 0x70, 0xEE, 0xEC, 0xDF, 0x2B, 0x10,-    0x5D, 0xD4, 0x6A, 0x1E, 0x3B, 0x73, 0x11, 0x72,-    0x8F, 0x63, 0x9A, 0xB4, 0x89, 0x32, 0x6B, 0xC9-  },-  {-    0x5E, 0x9C, 0x93, 0x15, 0x8D, 0x65, 0x9B, 0x2D,-    0xEF, 0x06, 0xB0, 0xC3, 0xC7, 0x56, 0x50, 0x45,-    0x54, 0x26, 0x62, 0xD6, 0xEE, 0xE8, 0xA9, 0x6A,-    0x89, 0xB7, 0x8A, 0xDE, 0x09, 0xFE, 0x8B, 0x3D,-    0xCC, 0x09, 0x6D, 0x4F, 0xE4, 0x88, 0x15, 0xD8,-    0x8D, 0x8F, 0x82, 0x62, 0x01, 0x56, 0x60, 0x2A,-    0xF5, 0x41, 0x95, 0x5E, 0x1F, 0x6C, 0xA3, 0x0D,-    0xCE, 0x14, 0xE2, 0x54, 0xC3, 0x26, 0xB8, 0x8F-  },-  {-    0x77, 0x75, 0xDF, 0xF8, 0x89, 0x45, 0x8D, 0xD1,-    0x1A, 0xEF, 0x41, 0x72, 0x76, 0x85, 0x3E, 0x21,-    0x33, 0x5E, 0xB8, 0x8E, 0x4D, 0xEC, 0x9C, 0xFB,-    0x4E, 0x9E, 0xDB, 0x49, 0x82, 0x00, 0x88, 0x55,-    0x1A, 0x2C, 0xA6, 0x03, 0x39, 0xF1, 0x20, 0x66,-    0x10, 0x11, 0x69, 0xF0, 0xDF, 0xE8, 0x4B, 0x09,-    0x8F, 0xDD, 0xB1, 0x48, 0xD9, 0xDA, 0x6B, 0x3D,-    0x61, 0x3D, 0xF2, 0x63, 0x88, 0x9A, 0xD6, 0x4B-  },-  {-    0xF0, 0xD2, 0x80, 0x5A, 0xFB, 0xB9, 0x1F, 0x74,-    0x39, 0x51, 0x35, 0x1A, 0x6D, 0x02, 0x4F, 0x93,-    0x53, 0xA2, 0x3C, 0x7C, 0xE1, 0xFC, 0x2B, 0x05,-    0x1B, 0x3A, 0x8B, 0x96, 0x8C, 0x23, 0x3F, 0x46,-    0xF5, 0x0F, 0x80, 0x6E, 0xCB, 0x15, 0x68, 0xFF,-    0xAA, 0x0B, 0x60, 0x66, 0x1E, 0x33, 0x4B, 0x21,-    0xDD, 0xE0, 0x4F, 0x8F, 0xA1, 0x55, 0xAC, 0x74,-    0x0E, 0xEB, 0x42, 0xE2, 0x0B, 0x60, 0xD7, 0x64-  },-  {-    0x86, 0xA2, 0xAF, 0x31, 0x6E, 0x7D, 0x77, 0x54,-    0x20, 0x1B, 0x94, 0x2E, 0x27, 0x53, 0x64, 0xAC,-    0x12, 0xEA, 0x89, 0x62, 0xAB, 0x5B, 0xD8, 0xD7,-    0xFB, 0x27, 0x6D, 0xC5, 0xFB, 0xFF, 0xC8, 0xF9,-    0xA2, 0x8C, 0xAE, 0x4E, 0x48, 0x67, 0xDF, 0x67,-    0x80, 0xD9, 0xB7, 0x25, 0x24, 0x16, 0x09, 0x27,-    0xC8, 0x55, 0xDA, 0x5B, 0x60, 0x78, 0xE0, 0xB5,-    0x54, 0xAA, 0x91, 0xE3, 0x1C, 0xB9, 0xCA, 0x1D-  },-  {-    0x10, 0xBD, 0xF0, 0xCA, 0xA0, 0x80, 0x27, 0x05,-    0xE7, 0x06, 0x36, 0x9B, 0xAF, 0x8A, 0x3F, 0x79,-    0xD7, 0x2C, 0x0A, 0x03, 0xA8, 0x06, 0x75, 0xA7,-    0xBB, 0xB0, 0x0B, 0xE3, 0xA4, 0x5E, 0x51, 0x64,-    0x24, 0xD1, 0xEE, 0x88, 0xEF, 0xB5, 0x6F, 0x6D,-    0x57, 0x77, 0x54, 0x5A, 0xE6, 0xE2, 0x77, 0x65,-    0xC3, 0xA8, 0xF5, 0xE4, 0x93, 0xFC, 0x30, 0x89,-    0x15, 0x63, 0x89, 0x33, 0xA1, 0xDF, 0xEE, 0x55-  },-  {-    0xB0, 0x17, 0x81, 0x09, 0x2B, 0x17, 0x48, 0x45,-    0x9E, 0x2E, 0x4E, 0xC1, 0x78, 0x69, 0x66, 0x27,-    0xBF, 0x4E, 0xBA, 0xFE, 0xBB, 0xA7, 0x74, 0xEC,-    0xF0, 0x18, 0xB7, 0x9A, 0x68, 0xAE, 0xB8, 0x49,-    0x17, 0xBF, 0x0B, 0x84, 0xBB, 0x79, 0xD1, 0x7B,-    0x74, 0x31, 0x51, 0x14, 0x4C, 0xD6, 0x6B, 0x7B,-    0x33, 0xA4, 0xB9, 0xE5, 0x2C, 0x76, 0xC4, 0xE1,-    0x12, 0x05, 0x0F, 0xF5, 0x38, 0x5B, 0x7F, 0x0B-  },-  {-    0xC6, 0xDB, 0xC6, 0x1D, 0xEC, 0x6E, 0xAE, 0xAC,-    0x81, 0xE3, 0xD5, 0xF7, 0x55, 0x20, 0x3C, 0x8E,-    0x22, 0x05, 0x51, 0x53, 0x4A, 0x0B, 0x2F, 0xD1,-    0x05, 0xA9, 0x18, 0x89, 0x94, 0x5A, 0x63, 0x85,-    0x50, 0x20, 0x4F, 0x44, 0x09, 0x3D, 0xD9, 0x98,-    0xC0, 0x76, 0x20, 0x5D, 0xFF, 0xAD, 0x70, 0x3A,-    0x0E, 0x5C, 0xD3, 0xC7, 0xF4, 0x38, 0xA7, 0xE6,-    0x34, 0xCD, 0x59, 0xFE, 0xDE, 0xDB, 0x53, 0x9E-  },-  {-    0xEB, 0xA5, 0x1A, 0xCF, 0xFB, 0x4C, 0xEA, 0x31,-    0xDB, 0x4B, 0x8D, 0x87, 0xE9, 0xBF, 0x7D, 0xD4,-    0x8F, 0xE9, 0x7B, 0x02, 0x53, 0xAE, 0x67, 0xAA,-    0x58, 0x0F, 0x9A, 0xC4, 0xA9, 0xD9, 0x41, 0xF2,-    0xBE, 0xA5, 0x18, 0xEE, 0x28, 0x68, 0x18, 0xCC,-    0x9F, 0x63, 0x3F, 0x2A, 0x3B, 0x9F, 0xB6, 0x8E,-    0x59, 0x4B, 0x48, 0xCD, 0xD6, 0xD5, 0x15, 0xBF,-    0x1D, 0x52, 0xBA, 0x6C, 0x85, 0xA2, 0x03, 0xA7-  },-  {-    0x86, 0x22, 0x1F, 0x3A, 0xDA, 0x52, 0x03, 0x7B,-    0x72, 0x22, 0x4F, 0x10, 0x5D, 0x79, 0x99, 0x23,-    0x1C, 0x5E, 0x55, 0x34, 0xD0, 0x3D, 0xA9, 0xD9,-    0xC0, 0xA1, 0x2A, 0xCB, 0x68, 0x46, 0x0C, 0xD3,-    0x75, 0xDA, 0xF8, 0xE2, 0x43, 0x86, 0x28, 0x6F,-    0x96, 0x68, 0xF7, 0x23, 0x26, 0xDB, 0xF9, 0x9B,-    0xA0, 0x94, 0x39, 0x24, 0x37, 0xD3, 0x98, 0xE9,-    0x5B, 0xB8, 0x16, 0x1D, 0x71, 0x7F, 0x89, 0x91-  },-  {-    0x55, 0x95, 0xE0, 0x5C, 0x13, 0xA7, 0xEC, 0x4D,-    0xC8, 0xF4, 0x1F, 0xB7, 0x0C, 0xB5, 0x0A, 0x71,-    0xBC, 0xE1, 0x7C, 0x02, 0x4F, 0xF6, 0xDE, 0x7A,-    0xF6, 0x18, 0xD0, 0xCC, 0x4E, 0x9C, 0x32, 0xD9,-    0x57, 0x0D, 0x6D, 0x3E, 0xA4, 0x5B, 0x86, 0x52,-    0x54, 0x91, 0x03, 0x0C, 0x0D, 0x8F, 0x2B, 0x18,-    0x36, 0xD5, 0x77, 0x8C, 0x1C, 0xE7, 0x35, 0xC1,-    0x77, 0x07, 0xDF, 0x36, 0x4D, 0x05, 0x43, 0x47-  },-  {-    0xCE, 0x0F, 0x4F, 0x6A, 0xCA, 0x89, 0x59, 0x0A,-    0x37, 0xFE, 0x03, 0x4D, 0xD7, 0x4D, 0xD5, 0xFA,-    0x65, 0xEB, 0x1C, 0xBD, 0x0A, 0x41, 0x50, 0x8A,-    0xAD, 0xDC, 0x09, 0x35, 0x1A, 0x3C, 0xEA, 0x6D,-    0x18, 0xCB, 0x21, 0x89, 0xC5, 0x4B, 0x70, 0x0C,-    0x00, 0x9F, 0x4C, 0xBF, 0x05, 0x21, 0xC7, 0xEA,-    0x01, 0xBE, 0x61, 0xC5, 0xAE, 0x09, 0xCB, 0x54,-    0xF2, 0x7B, 0xC1, 0xB4, 0x4D, 0x65, 0x8C, 0x82-  },-  {-    0x7E, 0xE8, 0x0B, 0x06, 0xA2, 0x15, 0xA3, 0xBC,-    0xA9, 0x70, 0xC7, 0x7C, 0xDA, 0x87, 0x61, 0x82,-    0x2B, 0xC1, 0x03, 0xD4, 0x4F, 0xA4, 0xB3, 0x3F,-    0x4D, 0x07, 0xDC, 0xB9, 0x97, 0xE3, 0x6D, 0x55,-    0x29, 0x8B, 0xCE, 0xAE, 0x12, 0x24, 0x1B, 0x3F,-    0xA0, 0x7F, 0xA6, 0x3B, 0xE5, 0x57, 0x60, 0x68,-    0xDA, 0x38, 0x7B, 0x8D, 0x58, 0x59, 0xAE, 0xAB,-    0x70, 0x13, 0x69, 0x84, 0x8B, 0x17, 0x6D, 0x42-  },-  {-    0x94, 0x0A, 0x84, 0xB6, 0xA8, 0x4D, 0x10, 0x9A,-    0xAB, 0x20, 0x8C, 0x02, 0x4C, 0x6C, 0xE9, 0x64,-    0x76, 0x76, 0xBA, 0x0A, 0xAA, 0x11, 0xF8, 0x6D,-    0xBB, 0x70, 0x18, 0xF9, 0xFD, 0x22, 0x20, 0xA6,-    0xD9, 0x01, 0xA9, 0x02, 0x7F, 0x9A, 0xBC, 0xF9,-    0x35, 0x37, 0x27, 0x27, 0xCB, 0xF0, 0x9E, 0xBD,-    0x61, 0xA2, 0xA2, 0xEE, 0xB8, 0x76, 0x53, 0xE8,-    0xEC, 0xAD, 0x1B, 0xAB, 0x85, 0xDC, 0x83, 0x27-  },-  {-    0x20, 0x20, 0xB7, 0x82, 0x64, 0xA8, 0x2D, 0x9F,-    0x41, 0x51, 0x14, 0x1A, 0xDB, 0xA8, 0xD4, 0x4B,-    0xF2, 0x0C, 0x5E, 0xC0, 0x62, 0xEE, 0xE9, 0xB5,-    0x95, 0xA1, 0x1F, 0x9E, 0x84, 0x90, 0x1B, 0xF1,-    0x48, 0xF2, 0x98, 0xE0, 0xC9, 0xF8, 0x77, 0x7D,-    0xCD, 0xBC, 0x7C, 0xC4, 0x67, 0x0A, 0xAC, 0x35,-    0x6C, 0xC2, 0xAD, 0x8C, 0xCB, 0x16, 0x29, 0xF1,-    0x6F, 0x6A, 0x76, 0xBC, 0xEF, 0xBE, 0xE7, 0x60-  },-  {-    0xD1, 0xB8, 0x97, 0xB0, 0xE0, 0x75, 0xBA, 0x68,-    0xAB, 0x57, 0x2A, 0xDF, 0x9D, 0x9C, 0x43, 0x66,-    0x63, 0xE4, 0x3E, 0xB3, 0xD8, 0xE6, 0x2D, 0x92,-    0xFC, 0x49, 0xC9, 0xBE, 0x21, 0x4E, 0x6F, 0x27,-    0x87, 0x3F, 0xE2, 0x15, 0xA6, 0x51, 0x70, 0xE6,-    0xBE, 0xA9, 0x02, 0x40, 0x8A, 0x25, 0xB4, 0x95,-    0x06, 0xF4, 0x7B, 0xAB, 0xD0, 0x7C, 0xEC, 0xF7,-    0x11, 0x3E, 0xC1, 0x0C, 0x5D, 0xD3, 0x12, 0x52-  },-  {-    0xB1, 0x4D, 0x0C, 0x62, 0xAB, 0xFA, 0x46, 0x9A,-    0x35, 0x71, 0x77, 0xE5, 0x94, 0xC1, 0x0C, 0x19,-    0x42, 0x43, 0xED, 0x20, 0x25, 0xAB, 0x8A, 0xA5,-    0xAD, 0x2F, 0xA4, 0x1A, 0xD3, 0x18, 0xE0, 0xFF,-    0x48, 0xCD, 0x5E, 0x60, 0xBE, 0xC0, 0x7B, 0x13,-    0x63, 0x4A, 0x71, 0x1D, 0x23, 0x26, 0xE4, 0x88,-    0xA9, 0x85, 0xF3, 0x1E, 0x31, 0x15, 0x33, 0x99,-    0xE7, 0x30, 0x88, 0xEF, 0xC8, 0x6A, 0x5C, 0x55-  },-  {-    0x41, 0x69, 0xC5, 0xCC, 0x80, 0x8D, 0x26, 0x97,-    0xDC, 0x2A, 0x82, 0x43, 0x0D, 0xC2, 0x3E, 0x3C,-    0xD3, 0x56, 0xDC, 0x70, 0xA9, 0x45, 0x66, 0x81,-    0x05, 0x02, 0xB8, 0xD6, 0x55, 0xB3, 0x9A, 0xBF,-    0x9E, 0x7F, 0x90, 0x2F, 0xE7, 0x17, 0xE0, 0x38,-    0x92, 0x19, 0x85, 0x9E, 0x19, 0x45, 0xDF, 0x1A,-    0xF6, 0xAD, 0xA4, 0x2E, 0x4C, 0xCD, 0xA5, 0x5A,-    0x19, 0x7B, 0x71, 0x00, 0xA3, 0x0C, 0x30, 0xA1-  },-  {-    0x25, 0x8A, 0x4E, 0xDB, 0x11, 0x3D, 0x66, 0xC8,-    0x39, 0xC8, 0xB1, 0xC9, 0x1F, 0x15, 0xF3, 0x5A,-    0xDE, 0x60, 0x9F, 0x11, 0xCD, 0x7F, 0x86, 0x81,-    0xA4, 0x04, 0x5B, 0x9F, 0xEF, 0x7B, 0x0B, 0x24,-    0xC8, 0x2C, 0xDA, 0x06, 0xA5, 0xF2, 0x06, 0x7B,-    0x36, 0x88, 0x25, 0xE3, 0x91, 0x4E, 0x53, 0xD6,-    0x94, 0x8E, 0xDE, 0x92, 0xEF, 0xD6, 0xE8, 0x38,-    0x7F, 0xA2, 0xE5, 0x37, 0x23, 0x9B, 0x5B, 0xEE-  },-  {-    0x79, 0xD2, 0xD8, 0x69, 0x6D, 0x30, 0xF3, 0x0F,-    0xB3, 0x46, 0x57, 0x76, 0x11, 0x71, 0xA1, 0x1E,-    0x6C, 0x3F, 0x1E, 0x64, 0xCB, 0xE7, 0xBE, 0xBE,-    0xE1, 0x59, 0xCB, 0x95, 0xBF, 0xAF, 0x81, 0x2B,-    0x4F, 0x41, 0x1E, 0x2F, 0x26, 0xD9, 0xC4, 0x21,-    0xDC, 0x2C, 0x28, 0x4A, 0x33, 0x42, 0xD8, 0x23,-    0xEC, 0x29, 0x38, 0x49, 0xE4, 0x2D, 0x1E, 0x46,-    0xB0, 0xA4, 0xAC, 0x1E, 0x3C, 0x86, 0xAB, 0xAA-  },-  {-    0x8B, 0x94, 0x36, 0x01, 0x0D, 0xC5, 0xDE, 0xE9,-    0x92, 0xAE, 0x38, 0xAE, 0xA9, 0x7F, 0x2C, 0xD6,-    0x3B, 0x94, 0x6D, 0x94, 0xFE, 0xDD, 0x2E, 0xC9,-    0x67, 0x1D, 0xCD, 0xE3, 0xBD, 0x4C, 0xE9, 0x56,-    0x4D, 0x55, 0x5C, 0x66, 0xC1, 0x5B, 0xB2, 0xB9,-    0x00, 0xDF, 0x72, 0xED, 0xB6, 0xB8, 0x91, 0xEB,-    0xCA, 0xDF, 0xEF, 0xF6, 0x3C, 0x9E, 0xA4, 0x03,-    0x6A, 0x99, 0x8B, 0xE7, 0x97, 0x39, 0x81, 0xE7-  },-  {-    0xC8, 0xF6, 0x8E, 0x69, 0x6E, 0xD2, 0x82, 0x42,-    0xBF, 0x99, 0x7F, 0x5B, 0x3B, 0x34, 0x95, 0x95,-    0x08, 0xE4, 0x2D, 0x61, 0x38, 0x10, 0xF1, 0xE2,-    0xA4, 0x35, 0xC9, 0x6E, 0xD2, 0xFF, 0x56, 0x0C,-    0x70, 0x22, 0xF3, 0x61, 0xA9, 0x23, 0x4B, 0x98,-    0x37, 0xFE, 0xEE, 0x90, 0xBF, 0x47, 0x92, 0x2E,-    0xE0, 0xFD, 0x5F, 0x8D, 0xDF, 0x82, 0x37, 0x18,-    0xD8, 0x6D, 0x1E, 0x16, 0xC6, 0x09, 0x00, 0x71-  },-  {-    0xB0, 0x2D, 0x3E, 0xEE, 0x48, 0x60, 0xD5, 0x86,-    0x8B, 0x2C, 0x39, 0xCE, 0x39, 0xBF, 0xE8, 0x10,-    0x11, 0x29, 0x05, 0x64, 0xDD, 0x67, 0x8C, 0x85,-    0xE8, 0x78, 0x3F, 0x29, 0x30, 0x2D, 0xFC, 0x13,-    0x99, 0xBA, 0x95, 0xB6, 0xB5, 0x3C, 0xD9, 0xEB,-    0xBF, 0x40, 0x0C, 0xCA, 0x1D, 0xB0, 0xAB, 0x67,-    0xE1, 0x9A, 0x32, 0x5F, 0x2D, 0x11, 0x58, 0x12,-    0xD2, 0x5D, 0x00, 0x97, 0x8A, 0xD1, 0xBC, 0xA4-  },-  {-    0x76, 0x93, 0xEA, 0x73, 0xAF, 0x3A, 0xC4, 0xDA,-    0xD2, 0x1C, 0xA0, 0xD8, 0xDA, 0x85, 0xB3, 0x11,-    0x8A, 0x7D, 0x1C, 0x60, 0x24, 0xCF, 0xAF, 0x55,-    0x76, 0x99, 0x86, 0x82, 0x17, 0xBC, 0x0C, 0x2F,-    0x44, 0xA1, 0x99, 0xBC, 0x6C, 0x0E, 0xDD, 0x51,-    0x97, 0x98, 0xBA, 0x05, 0xBD, 0x5B, 0x1B, 0x44,-    0x84, 0x34, 0x6A, 0x47, 0xC2, 0xCA, 0xDF, 0x6B,-    0xF3, 0x0B, 0x78, 0x5C, 0xC8, 0x8B, 0x2B, 0xAF-  },-  {-    0xA0, 0xE5, 0xC1, 0xC0, 0x03, 0x1C, 0x02, 0xE4,-    0x8B, 0x7F, 0x09, 0xA5, 0xE8, 0x96, 0xEE, 0x9A,-    0xEF, 0x2F, 0x17, 0xFC, 0x9E, 0x18, 0xE9, 0x97,-    0xD7, 0xF6, 0xCA, 0xC7, 0xAE, 0x31, 0x64, 0x22,-    0xC2, 0xB1, 0xE7, 0x79, 0x84, 0xE5, 0xF3, 0xA7,-    0x3C, 0xB4, 0x5D, 0xEE, 0xD5, 0xD3, 0xF8, 0x46,-    0x00, 0x10, 0x5E, 0x6E, 0xE3, 0x8F, 0x2D, 0x09,-    0x0C, 0x7D, 0x04, 0x42, 0xEA, 0x34, 0xC4, 0x6D-  },-  {-    0x41, 0xDA, 0xA6, 0xAD, 0xCF, 0xDB, 0x69, 0xF1,-    0x44, 0x0C, 0x37, 0xB5, 0x96, 0x44, 0x01, 0x65,-    0xC1, 0x5A, 0xDA, 0x59, 0x68, 0x13, 0xE2, 0xE2,-    0x2F, 0x06, 0x0F, 0xCD, 0x55, 0x1F, 0x24, 0xDE,-    0xE8, 0xE0, 0x4B, 0xA6, 0x89, 0x03, 0x87, 0x88,-    0x6C, 0xEE, 0xC4, 0xA7, 0xA0, 0xD7, 0xFC, 0x6B,-    0x44, 0x50, 0x63, 0x92, 0xEC, 0x38, 0x22, 0xC0,-    0xD8, 0xC1, 0xAC, 0xFC, 0x7D, 0x5A, 0xEB, 0xE8-  },-  {-    0x14, 0xD4, 0xD4, 0x0D, 0x59, 0x84, 0xD8, 0x4C,-    0x5C, 0xF7, 0x52, 0x3B, 0x77, 0x98, 0xB2, 0x54,-    0xE2, 0x75, 0xA3, 0xA8, 0xCC, 0x0A, 0x1B, 0xD0,-    0x6E, 0xBC, 0x0B, 0xEE, 0x72, 0x68, 0x56, 0xAC,-    0xC3, 0xCB, 0xF5, 0x16, 0xFF, 0x66, 0x7C, 0xDA,-    0x20, 0x58, 0xAD, 0x5C, 0x34, 0x12, 0x25, 0x44,-    0x60, 0xA8, 0x2C, 0x92, 0x18, 0x70, 0x41, 0x36,-    0x3C, 0xC7, 0x7A, 0x4D, 0xC2, 0x15, 0xE4, 0x87-  },-  {-    0xD0, 0xE7, 0xA1, 0xE2, 0xB9, 0xA4, 0x47, 0xFE,-    0xE8, 0x3E, 0x22, 0x77, 0xE9, 0xFF, 0x80, 0x10,-    0xC2, 0xF3, 0x75, 0xAE, 0x12, 0xFA, 0x7A, 0xAA,-    0x8C, 0xA5, 0xA6, 0x31, 0x78, 0x68, 0xA2, 0x6A,-    0x36, 0x7A, 0x0B, 0x69, 0xFB, 0xC1, 0xCF, 0x32,-    0xA5, 0x5D, 0x34, 0xEB, 0x37, 0x06, 0x63, 0x01,-    0x6F, 0x3D, 0x21, 0x10, 0x23, 0x0E, 0xBA, 0x75,-    0x40, 0x28, 0xA5, 0x6F, 0x54, 0xAC, 0xF5, 0x7C-  },-  {-    0xE7, 0x71, 0xAA, 0x8D, 0xB5, 0xA3, 0xE0, 0x43,-    0xE8, 0x17, 0x8F, 0x39, 0xA0, 0x85, 0x7B, 0xA0,-    0x4A, 0x3F, 0x18, 0xE4, 0xAA, 0x05, 0x74, 0x3C,-    0xF8, 0xD2, 0x22, 0xB0, 0xB0, 0x95, 0x82, 0x53,-    0x50, 0xBA, 0x42, 0x2F, 0x63, 0x38, 0x2A, 0x23,-    0xD9, 0x2E, 0x41, 0x49, 0x07, 0x4E, 0x81, 0x6A,-    0x36, 0xC1, 0xCD, 0x28, 0x28, 0x4D, 0x14, 0x62,-    0x67, 0x94, 0x0B, 0x31, 0xF8, 0x81, 0x8E, 0xA2-  },-  {-    0xFE, 0xB4, 0xFD, 0x6F, 0x9E, 0x87, 0xA5, 0x6B,-    0xEF, 0x39, 0x8B, 0x32, 0x84, 0xD2, 0xBD, 0xA5,-    0xB5, 0xB0, 0xE1, 0x66, 0x58, 0x3A, 0x66, 0xB6,-    0x1E, 0x53, 0x84, 0x57, 0xFF, 0x05, 0x84, 0x87,-    0x2C, 0x21, 0xA3, 0x29, 0x62, 0xB9, 0x92, 0x8F,-    0xFA, 0xB5, 0x8D, 0xE4, 0xAF, 0x2E, 0xDD, 0x4E,-    0x15, 0xD8, 0xB3, 0x55, 0x70, 0x52, 0x32, 0x07,-    0xFF, 0x4E, 0x2A, 0x5A, 0xA7, 0x75, 0x4C, 0xAA-  },-  {-    0x46, 0x2F, 0x17, 0xBF, 0x00, 0x5F, 0xB1, 0xC1,-    0xB9, 0xE6, 0x71, 0x77, 0x9F, 0x66, 0x52, 0x09,-    0xEC, 0x28, 0x73, 0xE3, 0xE4, 0x11, 0xF9, 0x8D,-    0xAB, 0xF2, 0x40, 0xA1, 0xD5, 0xEC, 0x3F, 0x95,-    0xCE, 0x67, 0x96, 0xB6, 0xFC, 0x23, 0xFE, 0x17,-    0x19, 0x03, 0xB5, 0x02, 0x02, 0x34, 0x67, 0xDE,-    0xC7, 0x27, 0x3F, 0xF7, 0x48, 0x79, 0xB9, 0x29,-    0x67, 0xA2, 0xA4, 0x3A, 0x5A, 0x18, 0x3D, 0x33-  },-  {-    0xD3, 0x33, 0x81, 0x93, 0xB6, 0x45, 0x53, 0xDB,-    0xD3, 0x8D, 0x14, 0x4B, 0xEA, 0x71, 0xC5, 0x91,-    0x5B, 0xB1, 0x10, 0xE2, 0xD8, 0x81, 0x80, 0xDB,-    0xC5, 0xDB, 0x36, 0x4F, 0xD6, 0x17, 0x1D, 0xF3,-    0x17, 0xFC, 0x72, 0x68, 0x83, 0x1B, 0x5A, 0xEF,-    0x75, 0xE4, 0x34, 0x2B, 0x2F, 0xAD, 0x87, 0x97,-    0xBA, 0x39, 0xED, 0xDC, 0xEF, 0x80, 0xE6, 0xEC,-    0x08, 0x15, 0x93, 0x50, 0xB1, 0xAD, 0x69, 0x6D-  },-  {-    0xE1, 0x59, 0x0D, 0x58, 0x5A, 0x3D, 0x39, 0xF7,-    0xCB, 0x59, 0x9A, 0xBD, 0x47, 0x90, 0x70, 0x96,-    0x64, 0x09, 0xA6, 0x84, 0x6D, 0x43, 0x77, 0xAC,-    0xF4, 0x47, 0x1D, 0x06, 0x5D, 0x5D, 0xB9, 0x41,-    0x29, 0xCC, 0x9B, 0xE9, 0x25, 0x73, 0xB0, 0x5E,-    0xD2, 0x26, 0xBE, 0x1E, 0x9B, 0x7C, 0xB0, 0xCA,-    0xBE, 0x87, 0x91, 0x85, 0x89, 0xF8, 0x0D, 0xAD,-    0xD4, 0xEF, 0x5E, 0xF2, 0x5A, 0x93, 0xD2, 0x8E-  },-  {-    0xF8, 0xF3, 0x72, 0x6A, 0xC5, 0xA2, 0x6C, 0xC8,-    0x01, 0x32, 0x49, 0x3A, 0x6F, 0xED, 0xCB, 0x0E,-    0x60, 0x76, 0x0C, 0x09, 0xCF, 0xC8, 0x4C, 0xAD,-    0x17, 0x81, 0x75, 0x98, 0x68, 0x19, 0x66, 0x5E,-    0x76, 0x84, 0x2D, 0x7B, 0x9F, 0xED, 0xF7, 0x6D,-    0xDD, 0xEB, 0xF5, 0xD3, 0xF5, 0x6F, 0xAA, 0xAD,-    0x44, 0x77, 0x58, 0x7A, 0xF2, 0x16, 0x06, 0xD3,-    0x96, 0xAE, 0x57, 0x0D, 0x8E, 0x71, 0x9A, 0xF2-  },-  {-    0x30, 0x18, 0x60, 0x55, 0xC0, 0x79, 0x49, 0x94,-    0x81, 0x83, 0xC8, 0x50, 0xE9, 0xA7, 0x56, 0xCC,-    0x09, 0x93, 0x7E, 0x24, 0x7D, 0x9D, 0x92, 0x8E,-    0x86, 0x9E, 0x20, 0xBA, 0xFC, 0x3C, 0xD9, 0x72,-    0x17, 0x19, 0xD3, 0x4E, 0x04, 0xA0, 0x89, 0x9B,-    0x92, 0xC7, 0x36, 0x08, 0x45, 0x50, 0x18, 0x68,-    0x86, 0xEF, 0xBA, 0x2E, 0x79, 0x0D, 0x8B, 0xE6,-    0xEB, 0xF0, 0x40, 0xB2, 0x09, 0xC4, 0x39, 0xA4-  },-  {-    0xF3, 0xC4, 0x27, 0x6C, 0xB8, 0x63, 0x63, 0x77,-    0x12, 0xC2, 0x41, 0xC4, 0x44, 0xC5, 0xCC, 0x1E,-    0x35, 0x54, 0xE0, 0xFD, 0xDB, 0x17, 0x4D, 0x03,-    0x58, 0x19, 0xDD, 0x83, 0xEB, 0x70, 0x0B, 0x4C,-    0xE8, 0x8D, 0xF3, 0xAB, 0x38, 0x41, 0xBA, 0x02,-    0x08, 0x5E, 0x1A, 0x99, 0xB4, 0xE1, 0x73, 0x10,-    0xC5, 0x34, 0x10, 0x75, 0xC0, 0x45, 0x8B, 0xA3,-    0x76, 0xC9, 0x5A, 0x68, 0x18, 0xFB, 0xB3, 0xE2-  },-  {-    0x0A, 0xA0, 0x07, 0xC4, 0xDD, 0x9D, 0x58, 0x32,-    0x39, 0x30, 0x40, 0xA1, 0x58, 0x3C, 0x93, 0x0B,-    0xCA, 0x7D, 0xC5, 0xE7, 0x7E, 0xA5, 0x3A, 0xDD,-    0x7E, 0x2B, 0x3F, 0x7C, 0x8E, 0x23, 0x13, 0x68,-    0x04, 0x35, 0x20, 0xD4, 0xA3, 0xEF, 0x53, 0xC9,-    0x69, 0xB6, 0xBB, 0xFD, 0x02, 0x59, 0x46, 0xF6,-    0x32, 0xBD, 0x7F, 0x76, 0x5D, 0x53, 0xC2, 0x10,-    0x03, 0xB8, 0xF9, 0x83, 0xF7, 0x5E, 0x2A, 0x6A-  },-  {-    0x08, 0xE9, 0x46, 0x47, 0x20, 0x53, 0x3B, 0x23,-    0xA0, 0x4E, 0xC2, 0x4F, 0x7A, 0xE8, 0xC1, 0x03,-    0x14, 0x5F, 0x76, 0x53, 0x87, 0xD7, 0x38, 0x77,-    0x7D, 0x3D, 0x34, 0x34, 0x77, 0xFD, 0x1C, 0x58,-    0xDB, 0x05, 0x21, 0x42, 0xCA, 0xB7, 0x54, 0xEA,-    0x67, 0x43, 0x78, 0xE1, 0x87, 0x66, 0xC5, 0x35,-    0x42, 0xF7, 0x19, 0x70, 0x17, 0x1C, 0xC4, 0xF8,-    0x16, 0x94, 0x24, 0x6B, 0x71, 0x7D, 0x75, 0x64-  },-  {-    0xD3, 0x7F, 0xF7, 0xAD, 0x29, 0x79, 0x93, 0xE7,-    0xEC, 0x21, 0xE0, 0xF1, 0xB4, 0xB5, 0xAE, 0x71,-    0x9C, 0xDC, 0x83, 0xC5, 0xDB, 0x68, 0x75, 0x27,-    0xF2, 0x75, 0x16, 0xCB, 0xFF, 0xA8, 0x22, 0x88,-    0x8A, 0x68, 0x10, 0xEE, 0x5C, 0x1C, 0xA7, 0xBF,-    0xE3, 0x32, 0x11, 0x19, 0xBE, 0x1A, 0xB7, 0xBF,-    0xA0, 0xA5, 0x02, 0x67, 0x1C, 0x83, 0x29, 0x49,-    0x4D, 0xF7, 0xAD, 0x6F, 0x52, 0x2D, 0x44, 0x0F-  },-  {-    0xDD, 0x90, 0x42, 0xF6, 0xE4, 0x64, 0xDC, 0xF8,-    0x6B, 0x12, 0x62, 0xF6, 0xAC, 0xCF, 0xAF, 0xBD,-    0x8C, 0xFD, 0x90, 0x2E, 0xD3, 0xED, 0x89, 0xAB,-    0xF7, 0x8F, 0xFA, 0x48, 0x2D, 0xBD, 0xEE, 0xB6,-    0x96, 0x98, 0x42, 0x39, 0x4C, 0x9A, 0x11, 0x68,-    0xAE, 0x3D, 0x48, 0x1A, 0x01, 0x78, 0x42, 0xF6,-    0x60, 0x00, 0x2D, 0x42, 0x44, 0x7C, 0x6B, 0x22,-    0xF7, 0xB7, 0x2F, 0x21, 0xAA, 0xE0, 0x21, 0xC9-  },-  {-    0xBD, 0x96, 0x5B, 0xF3, 0x1E, 0x87, 0xD7, 0x03,-    0x27, 0x53, 0x6F, 0x2A, 0x34, 0x1C, 0xEB, 0xC4,-    0x76, 0x8E, 0xCA, 0x27, 0x5F, 0xA0, 0x5E, 0xF9,-    0x8F, 0x7F, 0x1B, 0x71, 0xA0, 0x35, 0x12, 0x98,-    0xDE, 0x00, 0x6F, 0xBA, 0x73, 0xFE, 0x67, 0x33,-    0xED, 0x01, 0xD7, 0x58, 0x01, 0xB4, 0xA9, 0x28,-    0xE5, 0x42, 0x31, 0xB3, 0x8E, 0x38, 0xC5, 0x62,-    0xB2, 0xE3, 0x3E, 0xA1, 0x28, 0x49, 0x92, 0xFA-  },-  {-    0x65, 0x67, 0x6D, 0x80, 0x06, 0x17, 0x97, 0x2F,-    0xBD, 0x87, 0xE4, 0xB9, 0x51, 0x4E, 0x1C, 0x67,-    0x40, 0x2B, 0x7A, 0x33, 0x10, 0x96, 0xD3, 0xBF,-    0xAC, 0x22, 0xF1, 0xAB, 0xB9, 0x53, 0x74, 0xAB,-    0xC9, 0x42, 0xF1, 0x6E, 0x9A, 0xB0, 0xEA, 0xD3,-    0x3B, 0x87, 0xC9, 0x19, 0x68, 0xA6, 0xE5, 0x09,-    0xE1, 0x19, 0xFF, 0x07, 0x78, 0x7B, 0x3E, 0xF4,-    0x83, 0xE1, 0xDC, 0xDC, 0xCF, 0x6E, 0x30, 0x22-  },-  {-    0x93, 0x9F, 0xA1, 0x89, 0x69, 0x9C, 0x5D, 0x2C,-    0x81, 0xDD, 0xD1, 0xFF, 0xC1, 0xFA, 0x20, 0x7C,-    0x97, 0x0B, 0x6A, 0x36, 0x85, 0xBB, 0x29, 0xCE,-    0x1D, 0x3E, 0x99, 0xD4, 0x2F, 0x2F, 0x74, 0x42,-    0xDA, 0x53, 0xE9, 0x5A, 0x72, 0x90, 0x73, 0x14,-    0xF4, 0x58, 0x83, 0x99, 0xA3, 0xFF, 0x5B, 0x0A,-    0x92, 0xBE, 0xB3, 0xF6, 0xBE, 0x26, 0x94, 0xF9,-    0xF8, 0x6E, 0xCF, 0x29, 0x52, 0xD5, 0xB4, 0x1C-  },-  {-    0xC5, 0x16, 0x54, 0x17, 0x01, 0x86, 0x3F, 0x91,-    0x00, 0x5F, 0x31, 0x41, 0x08, 0xCE, 0xEC, 0xE3,-    0xC6, 0x43, 0xE0, 0x4F, 0xC8, 0xC4, 0x2F, 0xD2,-    0xFF, 0x55, 0x62, 0x20, 0xE6, 0x16, 0xAA, 0xA6,-    0xA4, 0x8A, 0xEB, 0x97, 0xA8, 0x4B, 0xAD, 0x74,-    0x78, 0x2E, 0x8D, 0xFF, 0x96, 0xA1, 0xA2, 0xFA,-    0x94, 0x93, 0x39, 0xD7, 0x22, 0xED, 0xCA, 0xA3,-    0x2B, 0x57, 0x06, 0x70, 0x41, 0xDF, 0x88, 0xCC-  },-  {-    0x98, 0x7F, 0xD6, 0xE0, 0xD6, 0x85, 0x7C, 0x55,-    0x3E, 0xAE, 0xBB, 0x3D, 0x34, 0x97, 0x0A, 0x2C,-    0x2F, 0x6E, 0x89, 0xA3, 0x54, 0x8F, 0x49, 0x25,-    0x21, 0x72, 0x2B, 0x80, 0xA1, 0xC2, 0x1A, 0x15,-    0x38, 0x92, 0x34, 0x6D, 0x2C, 0xBA, 0x64, 0x44,-    0x21, 0x2D, 0x56, 0xDA, 0x9A, 0x26, 0xE3, 0x24,-    0xDC, 0xCB, 0xC0, 0xDC, 0xDE, 0x85, 0xD4, 0xD2,-    0xEE, 0x43, 0x99, 0xEE, 0xC5, 0xA6, 0x4E, 0x8F-  },-  {-    0xAE, 0x56, 0xDE, 0xB1, 0xC2, 0x32, 0x8D, 0x9C,-    0x40, 0x17, 0x70, 0x6B, 0xCE, 0x6E, 0x99, 0xD4,-    0x13, 0x49, 0x05, 0x3B, 0xA9, 0xD3, 0x36, 0xD6,-    0x77, 0xC4, 0xC2, 0x7D, 0x9F, 0xD5, 0x0A, 0xE6,-    0xAE, 0xE1, 0x7E, 0x85, 0x31, 0x54, 0xE1, 0xF4,-    0xFE, 0x76, 0x72, 0x34, 0x6D, 0xA2, 0xEA, 0xA3,-    0x1E, 0xEA, 0x53, 0xFC, 0xF2, 0x4A, 0x22, 0x80,-    0x4F, 0x11, 0xD0, 0x3D, 0xA6, 0xAB, 0xFC, 0x2B-  },-  {-    0x49, 0xD6, 0xA6, 0x08, 0xC9, 0xBD, 0xE4, 0x49,-    0x18, 0x70, 0x49, 0x85, 0x72, 0xAC, 0x31, 0xAA,-    0xC3, 0xFA, 0x40, 0x93, 0x8B, 0x38, 0xA7, 0x81,-    0x8F, 0x72, 0x38, 0x3E, 0xB0, 0x40, 0xAD, 0x39,-    0x53, 0x2B, 0xC0, 0x65, 0x71, 0xE1, 0x3D, 0x76,-    0x7E, 0x69, 0x45, 0xAB, 0x77, 0xC0, 0xBD, 0xC3,-    0xB0, 0x28, 0x42, 0x53, 0x34, 0x3F, 0x9F, 0x6C,-    0x12, 0x44, 0xEB, 0xF2, 0xFF, 0x0D, 0xF8, 0x66-  },-  {-    0xDA, 0x58, 0x2A, 0xD8, 0xC5, 0x37, 0x0B, 0x44,-    0x69, 0xAF, 0x86, 0x2A, 0xA6, 0x46, 0x7A, 0x22,-    0x93, 0xB2, 0xB2, 0x8B, 0xD8, 0x0A, 0xE0, 0xE9,-    0x1F, 0x42, 0x5A, 0xD3, 0xD4, 0x72, 0x49, 0xFD,-    0xF9, 0x88, 0x25, 0xCC, 0x86, 0xF1, 0x40, 0x28,-    0xC3, 0x30, 0x8C, 0x98, 0x04, 0xC7, 0x8B, 0xFE,-    0xEE, 0xEE, 0x46, 0x14, 0x44, 0xCE, 0x24, 0x36,-    0x87, 0xE1, 0xA5, 0x05, 0x22, 0x45, 0x6A, 0x1D-  },-  {-    0xD5, 0x26, 0x6A, 0xA3, 0x33, 0x11, 0x94, 0xAE,-    0xF8, 0x52, 0xEE, 0xD8, 0x6D, 0x7B, 0x5B, 0x26,-    0x33, 0xA0, 0xAF, 0x1C, 0x73, 0x59, 0x06, 0xF2,-    0xE1, 0x32, 0x79, 0xF1, 0x49, 0x31, 0xA9, 0xFC,-    0x3B, 0x0E, 0xAC, 0x5C, 0xE9, 0x24, 0x52, 0x73,-    0xBD, 0x1A, 0xA9, 0x29, 0x05, 0xAB, 0xE1, 0x62,-    0x78, 0xEF, 0x7E, 0xFD, 0x47, 0x69, 0x47, 0x89,-    0xA7, 0x28, 0x3B, 0x77, 0xDA, 0x3C, 0x70, 0xF8-  },-  {-    0x29, 0x62, 0x73, 0x4C, 0x28, 0x25, 0x21, 0x86,-    0xA9, 0xA1, 0x11, 0x1C, 0x73, 0x2A, 0xD4, 0xDE,-    0x45, 0x06, 0xD4, 0xB4, 0x48, 0x09, 0x16, 0x30,-    0x3E, 0xB7, 0x99, 0x1D, 0x65, 0x9C, 0xCD, 0xA0,-    0x7A, 0x99, 0x11, 0x91, 0x4B, 0xC7, 0x5C, 0x41,-    0x8A, 0xB7, 0xA4, 0x54, 0x17, 0x57, 0xAD, 0x05,-    0x47, 0x96, 0xE2, 0x67, 0x97, 0xFE, 0xAF, 0x36,-    0xE9, 0xF6, 0xAD, 0x43, 0xF1, 0x4B, 0x35, 0xA4-  },-  {-    0xE8, 0xB7, 0x9E, 0xC5, 0xD0, 0x6E, 0x11, 0x1B,-    0xDF, 0xAF, 0xD7, 0x1E, 0x9F, 0x57, 0x60, 0xF0,-    0x0A, 0xC8, 0xAC, 0x5D, 0x8B, 0xF7, 0x68, 0xF9,-    0xFF, 0x6F, 0x08, 0xB8, 0xF0, 0x26, 0x09, 0x6B,-    0x1C, 0xC3, 0xA4, 0xC9, 0x73, 0x33, 0x30, 0x19,-    0xF1, 0xE3, 0x55, 0x3E, 0x77, 0xDA, 0x3F, 0x98,-    0xCB, 0x9F, 0x54, 0x2E, 0x0A, 0x90, 0xE5, 0xF8,-    0xA9, 0x40, 0xCC, 0x58, 0xE5, 0x98, 0x44, 0xB3-  },-  {-    0xDF, 0xB3, 0x20, 0xC4, 0x4F, 0x9D, 0x41, 0xD1,-    0xEF, 0xDC, 0xC0, 0x15, 0xF0, 0x8D, 0xD5, 0x53,-    0x9E, 0x52, 0x6E, 0x39, 0xC8, 0x7D, 0x50, 0x9A,-    0xE6, 0x81, 0x2A, 0x96, 0x9E, 0x54, 0x31, 0xBF,-    0x4F, 0xA7, 0xD9, 0x1F, 0xFD, 0x03, 0xB9, 0x81,-    0xE0, 0xD5, 0x44, 0xCF, 0x72, 0xD7, 0xB1, 0xC0,-    0x37, 0x4F, 0x88, 0x01, 0x48, 0x2E, 0x6D, 0xEA,-    0x2E, 0xF9, 0x03, 0x87, 0x7E, 0xBA, 0x67, 0x5E-  },-  {-    0xD8, 0x86, 0x75, 0x11, 0x8F, 0xDB, 0x55, 0xA5,-    0xFB, 0x36, 0x5A, 0xC2, 0xAF, 0x1D, 0x21, 0x7B,-    0xF5, 0x26, 0xCE, 0x1E, 0xE9, 0xC9, 0x4B, 0x2F,-    0x00, 0x90, 0xB2, 0xC5, 0x8A, 0x06, 0xCA, 0x58,-    0x18, 0x7D, 0x7F, 0xE5, 0x7C, 0x7B, 0xED, 0x9D,-    0x26, 0xFC, 0xA0, 0x67, 0xB4, 0x11, 0x0E, 0xEF,-    0xCD, 0x9A, 0x0A, 0x34, 0x5D, 0xE8, 0x72, 0xAB,-    0xE2, 0x0D, 0xE3, 0x68, 0x00, 0x1B, 0x07, 0x45-  },-  {-    0xB8, 0x93, 0xF2, 0xFC, 0x41, 0xF7, 0xB0, 0xDD,-    0x6E, 0x2F, 0x6A, 0xA2, 0xE0, 0x37, 0x0C, 0x0C,-    0xFF, 0x7D, 0xF0, 0x9E, 0x3A, 0xCF, 0xCC, 0x0E,-    0x92, 0x0B, 0x6E, 0x6F, 0xAD, 0x0E, 0xF7, 0x47,-    0xC4, 0x06, 0x68, 0x41, 0x7D, 0x34, 0x2B, 0x80,-    0xD2, 0x35, 0x1E, 0x8C, 0x17, 0x5F, 0x20, 0x89,-    0x7A, 0x06, 0x2E, 0x97, 0x65, 0xE6, 0xC6, 0x7B,-    0x53, 0x9B, 0x6B, 0xA8, 0xB9, 0x17, 0x05, 0x45-  },-  {-    0x6C, 0x67, 0xEC, 0x56, 0x97, 0xAC, 0xCD, 0x23,-    0x5C, 0x59, 0xB4, 0x86, 0xD7, 0xB7, 0x0B, 0xAE,-    0xED, 0xCB, 0xD4, 0xAA, 0x64, 0xEB, 0xD4, 0xEE,-    0xF3, 0xC7, 0xEA, 0xC1, 0x89, 0x56, 0x1A, 0x72,-    0x62, 0x50, 0xAE, 0xC4, 0xD4, 0x8C, 0xAD, 0xCA,-    0xFB, 0xBE, 0x2C, 0xE3, 0xC1, 0x6C, 0xE2, 0xD6,-    0x91, 0xA8, 0xCC, 0xE0, 0x6E, 0x88, 0x79, 0x55,-    0x6D, 0x44, 0x83, 0xED, 0x71, 0x65, 0xC0, 0x63-  },-  {-    0xF1, 0xAA, 0x2B, 0x04, 0x4F, 0x8F, 0x0C, 0x63,-    0x8A, 0x3F, 0x36, 0x2E, 0x67, 0x7B, 0x5D, 0x89,-    0x1D, 0x6F, 0xD2, 0xAB, 0x07, 0x65, 0xF6, 0xEE,-    0x1E, 0x49, 0x87, 0xDE, 0x05, 0x7E, 0xAD, 0x35,-    0x78, 0x83, 0xD9, 0xB4, 0x05, 0xB9, 0xD6, 0x09,-    0xEE, 0xA1, 0xB8, 0x69, 0xD9, 0x7F, 0xB1, 0x6D,-    0x9B, 0x51, 0x01, 0x7C, 0x55, 0x3F, 0x3B, 0x93,-    0xC0, 0xA1, 0xE0, 0xF1, 0x29, 0x6F, 0xED, 0xCD-  },-  {-    0xCB, 0xAA, 0x25, 0x95, 0x72, 0xD4, 0xAE, 0xBF,-    0xC1, 0x91, 0x7A, 0xCD, 0xDC, 0x58, 0x2B, 0x9F,-    0x8D, 0xFA, 0xA9, 0x28, 0xA1, 0x98, 0xCA, 0x7A,-    0xCD, 0x0F, 0x2A, 0xA7, 0x6A, 0x13, 0x4A, 0x90,-    0x25, 0x2E, 0x62, 0x98, 0xA6, 0x5B, 0x08, 0x18,-    0x6A, 0x35, 0x0D, 0x5B, 0x76, 0x26, 0x69, 0x9F,-    0x8C, 0xB7, 0x21, 0xA3, 0xEA, 0x59, 0x21, 0xB7,-    0x53, 0xAE, 0x3A, 0x2D, 0xCE, 0x24, 0xBA, 0x3A-  },-  {-    0xFA, 0x15, 0x49, 0xC9, 0x79, 0x6C, 0xD4, 0xD3,-    0x03, 0xDC, 0xF4, 0x52, 0xC1, 0xFB, 0xD5, 0x74,-    0x4F, 0xD9, 0xB9, 0xB4, 0x70, 0x03, 0xD9, 0x20,-    0xB9, 0x2D, 0xE3, 0x48, 0x39, 0xD0, 0x7E, 0xF2,-    0xA2, 0x9D, 0xED, 0x68, 0xF6, 0xFC, 0x9E, 0x6C,-    0x45, 0xE0, 0x71, 0xA2, 0xE4, 0x8B, 0xD5, 0x0C,-    0x50, 0x84, 0xE9, 0x6B, 0x65, 0x7D, 0xD0, 0x40,-    0x40, 0x45, 0xA1, 0xDD, 0xEF, 0xE2, 0x82, 0xED-  },-  {-    0x5C, 0xF2, 0xAC, 0x89, 0x7A, 0xB4, 0x44, 0xDC,-    0xB5, 0xC8, 0xD8, 0x7C, 0x49, 0x5D, 0xBD, 0xB3,-    0x4E, 0x18, 0x38, 0xB6, 0xB6, 0x29, 0x42, 0x7C,-    0xAA, 0x51, 0x70, 0x2A, 0xD0, 0xF9, 0x68, 0x85,-    0x25, 0xF1, 0x3B, 0xEC, 0x50, 0x3A, 0x3C, 0x3A,-    0x2C, 0x80, 0xA6, 0x5E, 0x0B, 0x57, 0x15, 0xE8,-    0xAF, 0xAB, 0x00, 0xFF, 0xA5, 0x6E, 0xC4, 0x55,-    0xA4, 0x9A, 0x1A, 0xD3, 0x0A, 0xA2, 0x4F, 0xCD-  },-  {-    0x9A, 0xAF, 0x80, 0x20, 0x7B, 0xAC, 0xE1, 0x7B,-    0xB7, 0xAB, 0x14, 0x57, 0x57, 0xD5, 0x69, 0x6B,-    0xDE, 0x32, 0x40, 0x6E, 0xF2, 0x2B, 0x44, 0x29,-    0x2E, 0xF6, 0x5D, 0x45, 0x19, 0xC3, 0xBB, 0x2A,-    0xD4, 0x1A, 0x59, 0xB6, 0x2C, 0xC3, 0xE9, 0x4B,-    0x6F, 0xA9, 0x6D, 0x32, 0xA7, 0xFA, 0xAD, 0xAE,-    0x28, 0xAF, 0x7D, 0x35, 0x09, 0x72, 0x19, 0xAA,-    0x3F, 0xD8, 0xCD, 0xA3, 0x1E, 0x40, 0xC2, 0x75-  },-  {-    0xAF, 0x88, 0xB1, 0x63, 0x40, 0x2C, 0x86, 0x74,-    0x5C, 0xB6, 0x50, 0xC2, 0x98, 0x8F, 0xB9, 0x52,-    0x11, 0xB9, 0x4B, 0x03, 0xEF, 0x29, 0x0E, 0xED,-    0x96, 0x62, 0x03, 0x42, 0x41, 0xFD, 0x51, 0xCF,-    0x39, 0x8F, 0x80, 0x73, 0xE3, 0x69, 0x35, 0x4C,-    0x43, 0xEA, 0xE1, 0x05, 0x2F, 0x9B, 0x63, 0xB0,-    0x81, 0x91, 0xCA, 0xA1, 0x38, 0xAA, 0x54, 0xFE,-    0xA8, 0x89, 0xCC, 0x70, 0x24, 0x23, 0x68, 0x97-  },-  {-    0x48, 0xFA, 0x7D, 0x64, 0xE1, 0xCE, 0xEE, 0x27,-    0xB9, 0x86, 0x4D, 0xB5, 0xAD, 0xA4, 0xB5, 0x3D,-    0x00, 0xC9, 0xBC, 0x76, 0x26, 0x55, 0x58, 0x13,-    0xD3, 0xCD, 0x67, 0x30, 0xAB, 0x3C, 0xC0, 0x6F,-    0xF3, 0x42, 0xD7, 0x27, 0x90, 0x5E, 0x33, 0x17,-    0x1B, 0xDE, 0x6E, 0x84, 0x76, 0xE7, 0x7F, 0xB1,-    0x72, 0x08, 0x61, 0xE9, 0x4B, 0x73, 0xA2, 0xC5,-    0x38, 0xD2, 0x54, 0x74, 0x62, 0x85, 0xF4, 0x30-  },-  {-    0x0E, 0x6F, 0xD9, 0x7A, 0x85, 0xE9, 0x04, 0xF8,-    0x7B, 0xFE, 0x85, 0xBB, 0xEB, 0x34, 0xF6, 0x9E,-    0x1F, 0x18, 0x10, 0x5C, 0xF4, 0xED, 0x4F, 0x87,-    0xAE, 0xC3, 0x6C, 0x6E, 0x8B, 0x5F, 0x68, 0xBD,-    0x2A, 0x6F, 0x3D, 0xC8, 0xA9, 0xEC, 0xB2, 0xB6,-    0x1D, 0xB4, 0xEE, 0xDB, 0x6B, 0x2E, 0xA1, 0x0B,-    0xF9, 0xCB, 0x02, 0x51, 0xFB, 0x0F, 0x8B, 0x34,-    0x4A, 0xBF, 0x7F, 0x36, 0x6B, 0x6D, 0xE5, 0xAB-  },-  {-    0x06, 0x62, 0x2D, 0xA5, 0x78, 0x71, 0x76, 0x28,-    0x7F, 0xDC, 0x8F, 0xED, 0x44, 0x0B, 0xAD, 0x18,-    0x7D, 0x83, 0x00, 0x99, 0xC9, 0x4E, 0x6D, 0x04,-    0xC8, 0xE9, 0xC9, 0x54, 0xCD, 0xA7, 0x0C, 0x8B,-    0xB9, 0xE1, 0xFC, 0x4A, 0x6D, 0x0B, 0xAA, 0x83,-    0x1B, 0x9B, 0x78, 0xEF, 0x66, 0x48, 0x68, 0x1A,-    0x48, 0x67, 0xA1, 0x1D, 0xA9, 0x3E, 0xE3, 0x6E,-    0x5E, 0x6A, 0x37, 0xD8, 0x7F, 0xC6, 0x3F, 0x6F-  },-  {-    0x1D, 0xA6, 0x77, 0x2B, 0x58, 0xFA, 0xBF, 0x9C,-    0x61, 0xF6, 0x8D, 0x41, 0x2C, 0x82, 0xF1, 0x82,-    0xC0, 0x23, 0x6D, 0x7D, 0x57, 0x5E, 0xF0, 0xB5,-    0x8D, 0xD2, 0x24, 0x58, 0xD6, 0x43, 0xCD, 0x1D,-    0xFC, 0x93, 0xB0, 0x38, 0x71, 0xC3, 0x16, 0xD8,-    0x43, 0x0D, 0x31, 0x29, 0x95, 0xD4, 0x19, 0x7F,-    0x08, 0x74, 0xC9, 0x91, 0x72, 0xBA, 0x00, 0x4A,-    0x01, 0xEE, 0x29, 0x5A, 0xBA, 0xC2, 0x4E, 0x46-  },-  {-    0x3C, 0xD2, 0xD9, 0x32, 0x0B, 0x7B, 0x1D, 0x5F,-    0xB9, 0xAA, 0xB9, 0x51, 0xA7, 0x60, 0x23, 0xFA,-    0x66, 0x7B, 0xE1, 0x4A, 0x91, 0x24, 0xE3, 0x94,-    0x51, 0x39, 0x18, 0xA3, 0xF4, 0x40, 0x96, 0xAE,-    0x49, 0x04, 0xBA, 0x0F, 0xFC, 0x15, 0x0B, 0x63,-    0xBC, 0x7A, 0xB1, 0xEE, 0xB9, 0xA6, 0xE2, 0x57,-    0xE5, 0xC8, 0xF0, 0x00, 0xA7, 0x03, 0x94, 0xA5,-    0xAF, 0xD8, 0x42, 0x71, 0x5D, 0xE1, 0x5F, 0x29-  },-  {-    0x04, 0xCD, 0xC1, 0x4F, 0x74, 0x34, 0xE0, 0xB4,-    0xBE, 0x70, 0xCB, 0x41, 0xDB, 0x4C, 0x77, 0x9A,-    0x88, 0xEA, 0xEF, 0x6A, 0xCC, 0xEB, 0xCB, 0x41,-    0xF2, 0xD4, 0x2F, 0xFF, 0xE7, 0xF3, 0x2A, 0x8E,-    0x28, 0x1B, 0x5C, 0x10, 0x3A, 0x27, 0x02, 0x1D,-    0x0D, 0x08, 0x36, 0x22, 0x50, 0x75, 0x3C, 0xDF,-    0x70, 0x29, 0x21, 0x95, 0xA5, 0x3A, 0x48, 0x72,-    0x8C, 0xEB, 0x58, 0x44, 0xC2, 0xD9, 0x8B, 0xAB-  },-  {-    0x90, 0x71, 0xB7, 0xA8, 0xA0, 0x75, 0xD0, 0x09,-    0x5B, 0x8F, 0xB3, 0xAE, 0x51, 0x13, 0x78, 0x57,-    0x35, 0xAB, 0x98, 0xE2, 0xB5, 0x2F, 0xAF, 0x91,-    0xD5, 0xB8, 0x9E, 0x44, 0xAA, 0xC5, 0xB5, 0xD4,-    0xEB, 0xBF, 0x91, 0x22, 0x3B, 0x0F, 0xF4, 0xC7,-    0x19, 0x05, 0xDA, 0x55, 0x34, 0x2E, 0x64, 0x65,-    0x5D, 0x6E, 0xF8, 0xC8, 0x9A, 0x47, 0x68, 0xC3,-    0xF9, 0x3A, 0x6D, 0xC0, 0x36, 0x6B, 0x5B, 0xC8-  },-  {-    0xEB, 0xB3, 0x02, 0x40, 0xDD, 0x96, 0xC7, 0xBC,-    0x8D, 0x0A, 0xBE, 0x49, 0xAA, 0x4E, 0xDC, 0xBB,-    0x4A, 0xFD, 0xC5, 0x1F, 0xF9, 0xAA, 0xF7, 0x20,-    0xD3, 0xF9, 0xE7, 0xFB, 0xB0, 0xF9, 0xC6, 0xD6,-    0x57, 0x13, 0x50, 0x50, 0x17, 0x69, 0xFC, 0x4E,-    0xBD, 0x0B, 0x21, 0x41, 0x24, 0x7F, 0xF4, 0x00,-    0xD4, 0xFD, 0x4B, 0xE4, 0x14, 0xED, 0xF3, 0x77,-    0x57, 0xBB, 0x90, 0xA3, 0x2A, 0xC5, 0xC6, 0x5A-  },-  {-    0x85, 0x32, 0xC5, 0x8B, 0xF3, 0xC8, 0x01, 0x5D,-    0x9D, 0x1C, 0xBE, 0x00, 0xEE, 0xF1, 0xF5, 0x08,-    0x2F, 0x8F, 0x36, 0x32, 0xFB, 0xE9, 0xF1, 0xED,-    0x4F, 0x9D, 0xFB, 0x1F, 0xA7, 0x9E, 0x82, 0x83,-    0x06, 0x6D, 0x77, 0xC4, 0x4C, 0x4A, 0xF9, 0x43,-    0xD7, 0x6B, 0x30, 0x03, 0x64, 0xAE, 0xCB, 0xD0,-    0x64, 0x8C, 0x8A, 0x89, 0x39, 0xBD, 0x20, 0x41,-    0x23, 0xF4, 0xB5, 0x62, 0x60, 0x42, 0x2D, 0xEC-  },-  {-    0xFE, 0x98, 0x46, 0xD6, 0x4F, 0x7C, 0x77, 0x08,-    0x69, 0x6F, 0x84, 0x0E, 0x2D, 0x76, 0xCB, 0x44,-    0x08, 0xB6, 0x59, 0x5C, 0x2F, 0x81, 0xEC, 0x6A,-    0x28, 0xA7, 0xF2, 0xF2, 0x0C, 0xB8, 0x8C, 0xFE,-    0x6A, 0xC0, 0xB9, 0xE9, 0xB8, 0x24, 0x4F, 0x08,-    0xBD, 0x70, 0x95, 0xC3, 0x50, 0xC1, 0xD0, 0x84,-    0x2F, 0x64, 0xFB, 0x01, 0xBB, 0x7F, 0x53, 0x2D,-    0xFC, 0xD4, 0x73, 0x71, 0xB0, 0xAE, 0xEB, 0x79-  },-  {-    0x28, 0xF1, 0x7E, 0xA6, 0xFB, 0x6C, 0x42, 0x09,-    0x2D, 0xC2, 0x64, 0x25, 0x7E, 0x29, 0x74, 0x63,-    0x21, 0xFB, 0x5B, 0xDA, 0xEA, 0x98, 0x73, 0xC2,-    0xA7, 0xFA, 0x9D, 0x8F, 0x53, 0x81, 0x8E, 0x89,-    0x9E, 0x16, 0x1B, 0xC7, 0x7D, 0xFE, 0x80, 0x90,-    0xAF, 0xD8, 0x2B, 0xF2, 0x26, 0x6C, 0x5C, 0x1B,-    0xC9, 0x30, 0xA8, 0xD1, 0x54, 0x76, 0x24, 0x43,-    0x9E, 0x66, 0x2E, 0xF6, 0x95, 0xF2, 0x6F, 0x24-  },-  {-    0xEC, 0x6B, 0x7D, 0x7F, 0x03, 0x0D, 0x48, 0x50,-    0xAC, 0xAE, 0x3C, 0xB6, 0x15, 0xC2, 0x1D, 0xD2,-    0x52, 0x06, 0xD6, 0x3E, 0x84, 0xD1, 0xDB, 0x8D,-    0x95, 0x73, 0x70, 0x73, 0x7B, 0xA0, 0xE9, 0x84,-    0x67, 0xEA, 0x0C, 0xE2, 0x74, 0xC6, 0x61, 0x99,-    0x90, 0x1E, 0xAE, 0xC1, 0x8A, 0x08, 0x52, 0x57,-    0x15, 0xF5, 0x3B, 0xFD, 0xB0, 0xAA, 0xCB, 0x61,-    0x3D, 0x34, 0x2E, 0xBD, 0xCE, 0xED, 0xDC, 0x3B-  },-  {-    0xB4, 0x03, 0xD3, 0x69, 0x1C, 0x03, 0xB0, 0xD3,-    0x41, 0x8D, 0xF3, 0x27, 0xD5, 0x86, 0x0D, 0x34,-    0xBB, 0xFC, 0xC4, 0x51, 0x9B, 0xFB, 0xCE, 0x36,-    0xBF, 0x33, 0xB2, 0x08, 0x38, 0x5F, 0xAD, 0xB9,-    0x18, 0x6B, 0xC7, 0x8A, 0x76, 0xC4, 0x89, 0xD8,-    0x9F, 0xD5, 0x7E, 0x7D, 0xC7, 0x54, 0x12, 0xD2,-    0x3B, 0xCD, 0x1D, 0xAE, 0x84, 0x70, 0xCE, 0x92,-    0x74, 0x75, 0x4B, 0xB8, 0x58, 0x5B, 0x13, 0xC5-  },-  {-    0x31, 0xFC, 0x79, 0x73, 0x8B, 0x87, 0x72, 0xB3,-    0xF5, 0x5C, 0xD8, 0x17, 0x88, 0x13, 0xB3, 0xB5,-    0x2D, 0x0D, 0xB5, 0xA4, 0x19, 0xD3, 0x0B, 0xA9,-    0x49, 0x5C, 0x4B, 0x9D, 0xA0, 0x21, 0x9F, 0xAC,-    0x6D, 0xF8, 0xE7, 0xC2, 0x3A, 0x81, 0x15, 0x51,-    0xA6, 0x2B, 0x82, 0x7F, 0x25, 0x6E, 0xCD, 0xB8,-    0x12, 0x4A, 0xC8, 0xA6, 0x79, 0x2C, 0xCF, 0xEC,-    0xC3, 0xB3, 0x01, 0x27, 0x22, 0xE9, 0x44, 0x63-  },-  {-    0xBB, 0x20, 0x39, 0xEC, 0x28, 0x70, 0x91, 0xBC,-    0xC9, 0x64, 0x2F, 0xC9, 0x00, 0x49, 0xE7, 0x37,-    0x32, 0xE0, 0x2E, 0x57, 0x7E, 0x28, 0x62, 0xB3,-    0x22, 0x16, 0xAE, 0x9B, 0xED, 0xCD, 0x73, 0x0C,-    0x4C, 0x28, 0x4E, 0xF3, 0x96, 0x8C, 0x36, 0x8B,-    0x7D, 0x37, 0x58, 0x4F, 0x97, 0xBD, 0x4B, 0x4D,-    0xC6, 0xEF, 0x61, 0x27, 0xAC, 0xFE, 0x2E, 0x6A,-    0xE2, 0x50, 0x91, 0x24, 0xE6, 0x6C, 0x8A, 0xF4-  },-  {-    0xF5, 0x3D, 0x68, 0xD1, 0x3F, 0x45, 0xED, 0xFC,-    0xB9, 0xBD, 0x41, 0x5E, 0x28, 0x31, 0xE9, 0x38,-    0x35, 0x0D, 0x53, 0x80, 0xD3, 0x43, 0x22, 0x78,-    0xFC, 0x1C, 0x0C, 0x38, 0x1F, 0xCB, 0x7C, 0x65,-    0xC8, 0x2D, 0xAF, 0xE0, 0x51, 0xD8, 0xC8, 0xB0,-    0xD4, 0x4E, 0x09, 0x74, 0xA0, 0xE5, 0x9E, 0xC7,-    0xBF, 0x7E, 0xD0, 0x45, 0x9F, 0x86, 0xE9, 0x6F,-    0x32, 0x9F, 0xC7, 0x97, 0x52, 0x51, 0x0F, 0xD3-  },-  {-    0x8D, 0x56, 0x8C, 0x79, 0x84, 0xF0, 0xEC, 0xDF,-    0x76, 0x40, 0xFB, 0xC4, 0x83, 0xB5, 0xD8, 0xC9,-    0xF8, 0x66, 0x34, 0xF6, 0xF4, 0x32, 0x91, 0x84,-    0x1B, 0x30, 0x9A, 0x35, 0x0A, 0xB9, 0xC1, 0x13,-    0x7D, 0x24, 0x06, 0x6B, 0x09, 0xDA, 0x99, 0x44,-    0xBA, 0xC5, 0x4D, 0x5B, 0xB6, 0x58, 0x0D, 0x83,-    0x60, 0x47, 0xAA, 0xC7, 0x4A, 0xB7, 0x24, 0xB8,-    0x87, 0xEB, 0xF9, 0x3D, 0x4B, 0x32, 0xEC, 0xA9-  },-  {-    0xC0, 0xB6, 0x5C, 0xE5, 0xA9, 0x6F, 0xF7, 0x74,-    0xC4, 0x56, 0xCA, 0xC3, 0xB5, 0xF2, 0xC4, 0xCD,-    0x35, 0x9B, 0x4F, 0xF5, 0x3E, 0xF9, 0x3A, 0x3D,-    0xA0, 0x77, 0x8B, 0xE4, 0x90, 0x0D, 0x1E, 0x8D,-    0xA1, 0x60, 0x1E, 0x76, 0x9E, 0x8F, 0x1B, 0x02,-    0xD2, 0xA2, 0xF8, 0xC5, 0xB9, 0xFA, 0x10, 0xB4,-    0x4F, 0x1C, 0x18, 0x69, 0x85, 0x46, 0x8F, 0xEE,-    0xB0, 0x08, 0x73, 0x02, 0x83, 0xA6, 0x65, 0x7D-  },-  {-    0x49, 0x00, 0xBB, 0xA6, 0xF5, 0xFB, 0x10, 0x3E,-    0xCE, 0x8E, 0xC9, 0x6A, 0xDA, 0x13, 0xA5, 0xC3,-    0xC8, 0x54, 0x88, 0xE0, 0x55, 0x51, 0xDA, 0x6B,-    0x6B, 0x33, 0xD9, 0x88, 0xE6, 0x11, 0xEC, 0x0F,-    0xE2, 0xE3, 0xC2, 0xAA, 0x48, 0xEA, 0x6A, 0xE8,-    0x98, 0x6A, 0x3A, 0x23, 0x1B, 0x22, 0x3C, 0x5D,-    0x27, 0xCE, 0xC2, 0xEA, 0xDD, 0xE9, 0x1C, 0xE0,-    0x79, 0x81, 0xEE, 0x65, 0x28, 0x62, 0xD1, 0xE4-  },-  {-    0xC7, 0xF5, 0xC3, 0x7C, 0x72, 0x85, 0xF9, 0x27,-    0xF7, 0x64, 0x43, 0x41, 0x4D, 0x43, 0x57, 0xFF,-    0x78, 0x96, 0x47, 0xD7, 0xA0, 0x05, 0xA5, 0xA7,-    0x87, 0xE0, 0x3C, 0x34, 0x6B, 0x57, 0xF4, 0x9F,-    0x21, 0xB6, 0x4F, 0xA9, 0xCF, 0x4B, 0x7E, 0x45,-    0x57, 0x3E, 0x23, 0x04, 0x90, 0x17, 0x56, 0x71,-    0x21, 0xA9, 0xC3, 0xD4, 0xB2, 0xB7, 0x3E, 0xC5,-    0xE9, 0x41, 0x35, 0x77, 0x52, 0x5D, 0xB4, 0x5A-  },-  {-    0xEC, 0x70, 0x96, 0x33, 0x07, 0x36, 0xFD, 0xB2,-    0xD6, 0x4B, 0x56, 0x53, 0xE7, 0x47, 0x5D, 0xA7,-    0x46, 0xC2, 0x3A, 0x46, 0x13, 0xA8, 0x26, 0x87,-    0xA2, 0x80, 0x62, 0xD3, 0x23, 0x63, 0x64, 0x28,-    0x4A, 0xC0, 0x17, 0x20, 0xFF, 0xB4, 0x06, 0xCF,-    0xE2, 0x65, 0xC0, 0xDF, 0x62, 0x6A, 0x18, 0x8C,-    0x9E, 0x59, 0x63, 0xAC, 0xE5, 0xD3, 0xD5, 0xBB,-    0x36, 0x3E, 0x32, 0xC3, 0x8C, 0x21, 0x90, 0xA6-  },-  {-    0x82, 0xE7, 0x44, 0xC7, 0x5F, 0x46, 0x49, 0xEC,-    0x52, 0xB8, 0x07, 0x71, 0xA7, 0x7D, 0x47, 0x5A,-    0x3B, 0xC0, 0x91, 0x98, 0x95, 0x56, 0x96, 0x0E,-    0x27, 0x6A, 0x5F, 0x9E, 0xAD, 0x92, 0xA0, 0x3F,-    0x71, 0x87, 0x42, 0xCD, 0xCF, 0xEA, 0xEE, 0x5C,-    0xB8, 0x5C, 0x44, 0xAF, 0x19, 0x8A, 0xDC, 0x43,-    0xA4, 0xA4, 0x28, 0xF5, 0xF0, 0xC2, 0xDD, 0xB0,-    0xBE, 0x36, 0x05, 0x9F, 0x06, 0xD7, 0xDF, 0x73-  },-  {-    0x28, 0x34, 0xB7, 0xA7, 0x17, 0x0F, 0x1F, 0x5B,-    0x68, 0x55, 0x9A, 0xB7, 0x8C, 0x10, 0x50, 0xEC,-    0x21, 0xC9, 0x19, 0x74, 0x0B, 0x78, 0x4A, 0x90,-    0x72, 0xF6, 0xE5, 0xD6, 0x9F, 0x82, 0x8D, 0x70,-    0xC9, 0x19, 0xC5, 0x03, 0x9F, 0xB1, 0x48, 0xE3,-    0x9E, 0x2C, 0x8A, 0x52, 0x11, 0x83, 0x78, 0xB0,-    0x64, 0xCA, 0x8D, 0x50, 0x01, 0xCD, 0x10, 0xA5,-    0x47, 0x83, 0x87, 0xB9, 0x66, 0x71, 0x5E, 0xD6-  },-  {-    0x16, 0xB4, 0xAD, 0xA8, 0x83, 0xF7, 0x2F, 0x85,-    0x3B, 0xB7, 0xEF, 0x25, 0x3E, 0xFC, 0xAB, 0x0C,-    0x3E, 0x21, 0x61, 0x68, 0x7A, 0xD6, 0x15, 0x43,-    0xA0, 0xD2, 0x82, 0x4F, 0x91, 0xC1, 0xF8, 0x13,-    0x47, 0xD8, 0x6B, 0xE7, 0x09, 0xB1, 0x69, 0x96,-    0xE1, 0x7F, 0x2D, 0xD4, 0x86, 0x92, 0x7B, 0x02,-    0x88, 0xAD, 0x38, 0xD1, 0x30, 0x63, 0xC4, 0xA9,-    0x67, 0x2C, 0x39, 0x39, 0x7D, 0x37, 0x89, 0xB6-  },-  {-    0x78, 0xD0, 0x48, 0xF3, 0xA6, 0x9D, 0x8B, 0x54,-    0xAE, 0x0E, 0xD6, 0x3A, 0x57, 0x3A, 0xE3, 0x50,-    0xD8, 0x9F, 0x7C, 0x6C, 0xF1, 0xF3, 0x68, 0x89,-    0x30, 0xDE, 0x89, 0x9A, 0xFA, 0x03, 0x76, 0x97,-    0x62, 0x9B, 0x31, 0x4E, 0x5C, 0xD3, 0x03, 0xAA,-    0x62, 0xFE, 0xEA, 0x72, 0xA2, 0x5B, 0xF4, 0x2B,-    0x30, 0x4B, 0x6C, 0x6B, 0xCB, 0x27, 0xFA, 0xE2,-    0x1C, 0x16, 0xD9, 0x25, 0xE1, 0xFB, 0xDA, 0xC3-  },-  {-    0x0F, 0x74, 0x6A, 0x48, 0x74, 0x92, 0x87, 0xAD,-    0xA7, 0x7A, 0x82, 0x96, 0x1F, 0x05, 0xA4, 0xDA,-    0x4A, 0xBD, 0xB7, 0xD7, 0x7B, 0x12, 0x20, 0xF8,-    0x36, 0xD0, 0x9E, 0xC8, 0x14, 0x35, 0x9C, 0x0E,-    0xC0, 0x23, 0x9B, 0x8C, 0x7B, 0x9F, 0xF9, 0xE0,-    0x2F, 0x56, 0x9D, 0x1B, 0x30, 0x1E, 0xF6, 0x7C,-    0x46, 0x12, 0xD1, 0xDE, 0x4F, 0x73, 0x0F, 0x81,-    0xC1, 0x2C, 0x40, 0xCC, 0x06, 0x3C, 0x5C, 0xAA-  },-  {-    0xF0, 0xFC, 0x85, 0x9D, 0x3B, 0xD1, 0x95, 0xFB,-    0xDC, 0x2D, 0x59, 0x1E, 0x4C, 0xDA, 0xC1, 0x51,-    0x79, 0xEC, 0x0F, 0x1D, 0xC8, 0x21, 0xC1, 0x1D,-    0xF1, 0xF0, 0xC1, 0xD2, 0x6E, 0x62, 0x60, 0xAA,-    0xA6, 0x5B, 0x79, 0xFA, 0xFA, 0xCA, 0xFD, 0x7D,-    0x3A, 0xD6, 0x1E, 0x60, 0x0F, 0x25, 0x09, 0x05,-    0xF5, 0x87, 0x8C, 0x87, 0x45, 0x28, 0x97, 0x64,-    0x7A, 0x35, 0xB9, 0x95, 0xBC, 0xAD, 0xC3, 0xA3-  },-  {-    0x26, 0x20, 0xF6, 0x87, 0xE8, 0x62, 0x5F, 0x6A,-    0x41, 0x24, 0x60, 0xB4, 0x2E, 0x2C, 0xEF, 0x67,-    0x63, 0x42, 0x08, 0xCE, 0x10, 0xA0, 0xCB, 0xD4,-    0xDF, 0xF7, 0x04, 0x4A, 0x41, 0xB7, 0x88, 0x00,-    0x77, 0xE9, 0xF8, 0xDC, 0x3B, 0x8D, 0x12, 0x16,-    0xD3, 0x37, 0x6A, 0x21, 0xE0, 0x15, 0xB5, 0x8F,-    0xB2, 0x79, 0xB5, 0x21, 0xD8, 0x3F, 0x93, 0x88,-    0xC7, 0x38, 0x2C, 0x85, 0x05, 0x59, 0x0B, 0x9B-  },-  {-    0x22, 0x7E, 0x3A, 0xED, 0x8D, 0x2C, 0xB1, 0x0B,-    0x91, 0x8F, 0xCB, 0x04, 0xF9, 0xDE, 0x3E, 0x6D,-    0x0A, 0x57, 0xE0, 0x84, 0x76, 0xD9, 0x37, 0x59,-    0xCD, 0x7B, 0x2E, 0xD5, 0x4A, 0x1C, 0xBF, 0x02,-    0x39, 0xC5, 0x28, 0xFB, 0x04, 0xBB, 0xF2, 0x88,-    0x25, 0x3E, 0x60, 0x1D, 0x3B, 0xC3, 0x8B, 0x21,-    0x79, 0x4A, 0xFE, 0xF9, 0x0B, 0x17, 0x09, 0x4A,-    0x18, 0x2C, 0xAC, 0x55, 0x77, 0x45, 0xE7, 0x5F-  },-  {-    0x1A, 0x92, 0x99, 0x01, 0xB0, 0x9C, 0x25, 0xF2,-    0x7D, 0x6B, 0x35, 0xBE, 0x7B, 0x2F, 0x1C, 0x47,-    0x45, 0x13, 0x1F, 0xDE, 0xBC, 0xA7, 0xF3, 0xE2,-    0x45, 0x19, 0x26, 0x72, 0x04, 0x34, 0xE0, 0xDB,-    0x6E, 0x74, 0xFD, 0x69, 0x3A, 0xD2, 0x9B, 0x77,-    0x7D, 0xC3, 0x35, 0x5C, 0x59, 0x2A, 0x36, 0x1C,-    0x48, 0x73, 0xB0, 0x11, 0x33, 0xA5, 0x7C, 0x2E,-    0x3B, 0x70, 0x75, 0xCB, 0xDB, 0x86, 0xF4, 0xFC-  },-  {-    0x5F, 0xD7, 0x96, 0x8B, 0xC2, 0xFE, 0x34, 0xF2,-    0x20, 0xB5, 0xE3, 0xDC, 0x5A, 0xF9, 0x57, 0x17,-    0x42, 0xD7, 0x3B, 0x7D, 0x60, 0x81, 0x9F, 0x28,-    0x88, 0xB6, 0x29, 0x07, 0x2B, 0x96, 0xA9, 0xD8,-    0xAB, 0x2D, 0x91, 0xB8, 0x2D, 0x0A, 0x9A, 0xAB,-    0xA6, 0x1B, 0xBD, 0x39, 0x95, 0x81, 0x32, 0xFC,-    0xC4, 0x25, 0x70, 0x23, 0xD1, 0xEC, 0xA5, 0x91,-    0xB3, 0x05, 0x4E, 0x2D, 0xC8, 0x1C, 0x82, 0x00-  },-  {-    0xDF, 0xCC, 0xE8, 0xCF, 0x32, 0x87, 0x0C, 0xC6,-    0xA5, 0x03, 0xEA, 0xDA, 0xFC, 0x87, 0xFD, 0x6F,-    0x78, 0x91, 0x8B, 0x9B, 0x4D, 0x07, 0x37, 0xDB,-    0x68, 0x10, 0xBE, 0x99, 0x6B, 0x54, 0x97, 0xE7,-    0xE5, 0xCC, 0x80, 0xE3, 0x12, 0xF6, 0x1E, 0x71,-    0xFF, 0x3E, 0x96, 0x24, 0x43, 0x60, 0x73, 0x15,-    0x64, 0x03, 0xF7, 0x35, 0xF5, 0x6B, 0x0B, 0x01,-    0x84, 0x5C, 0x18, 0xF6, 0xCA, 0xF7, 0x72, 0xE6-  },-  {-    0x02, 0xF7, 0xEF, 0x3A, 0x9C, 0xE0, 0xFF, 0xF9,-    0x60, 0xF6, 0x70, 0x32, 0xB2, 0x96, 0xEF, 0xCA,-    0x30, 0x61, 0xF4, 0x93, 0x4D, 0x69, 0x07, 0x49,-    0xF2, 0xD0, 0x1C, 0x35, 0xC8, 0x1C, 0x14, 0xF3,-    0x9A, 0x67, 0xFA, 0x35, 0x0B, 0xC8, 0xA0, 0x35,-    0x9B, 0xF1, 0x72, 0x4B, 0xFF, 0xC3, 0xBC, 0xA6,-    0xD7, 0xC7, 0xBB, 0xA4, 0x79, 0x1F, 0xD5, 0x22,-    0xA3, 0xAD, 0x35, 0x3C, 0x02, 0xEC, 0x5A, 0xA8-  },-  {-    0x64, 0xBE, 0x5C, 0x6A, 0xBA, 0x65, 0xD5, 0x94,-    0x84, 0x4A, 0xE7, 0x8B, 0xB0, 0x22, 0xE5, 0xBE,-    0xBE, 0x12, 0x7F, 0xD6, 0xB6, 0xFF, 0xA5, 0xA1,-    0x37, 0x03, 0x85, 0x5A, 0xB6, 0x3B, 0x62, 0x4D,-    0xCD, 0x1A, 0x36, 0x3F, 0x99, 0x20, 0x3F, 0x63,-    0x2E, 0xC3, 0x86, 0xF3, 0xEA, 0x76, 0x7F, 0xC9,-    0x92, 0xE8, 0xED, 0x96, 0x86, 0x58, 0x6A, 0xA2,-    0x75, 0x55, 0xA8, 0x59, 0x9D, 0x5B, 0x80, 0x8F-  },-  {-    0xF7, 0x85, 0x85, 0x50, 0x5C, 0x4E, 0xAA, 0x54,-    0xA8, 0xB5, 0xBE, 0x70, 0xA6, 0x1E, 0x73, 0x5E,-    0x0F, 0xF9, 0x7A, 0xF9, 0x44, 0xDD, 0xB3, 0x00,-    0x1E, 0x35, 0xD8, 0x6C, 0x4E, 0x21, 0x99, 0xD9,-    0x76, 0x10, 0x4B, 0x6A, 0xE3, 0x17, 0x50, 0xA3,-    0x6A, 0x72, 0x6E, 0xD2, 0x85, 0x06, 0x4F, 0x59,-    0x81, 0xB5, 0x03, 0x88, 0x9F, 0xEF, 0x82, 0x2F,-    0xCD, 0xC2, 0x89, 0x8D, 0xDD, 0xB7, 0x88, 0x9A-  },-  {-    0xE4, 0xB5, 0x56, 0x60, 0x33, 0x86, 0x95, 0x72,-    0xED, 0xFD, 0x87, 0x47, 0x9A, 0x5B, 0xB7, 0x3C,-    0x80, 0xE8, 0x75, 0x9B, 0x91, 0x23, 0x28, 0x79,-    0xD9, 0x6B, 0x1D, 0xDA, 0x36, 0xC0, 0x12, 0x07,-    0x6E, 0xE5, 0xA2, 0xED, 0x7A, 0xE2, 0xDE, 0x63,-    0xEF, 0x84, 0x06, 0xA0, 0x6A, 0xEA, 0x82, 0xC1,-    0x88, 0x03, 0x1B, 0x56, 0x0B, 0xEA, 0xFB, 0x58,-    0x3F, 0xB3, 0xDE, 0x9E, 0x57, 0x95, 0x2A, 0x7E-  },-  {-    0xE1, 0xB3, 0xE7, 0xED, 0x86, 0x7F, 0x6C, 0x94,-    0x84, 0xA2, 0xA9, 0x7F, 0x77, 0x15, 0xF2, 0x5E,-    0x25, 0x29, 0x4E, 0x99, 0x2E, 0x41, 0xF6, 0xA7,-    0xC1, 0x61, 0xFF, 0xC2, 0xAD, 0xC6, 0xDA, 0xAE,-    0xB7, 0x11, 0x31, 0x02, 0xD5, 0xE6, 0x09, 0x02,-    0x87, 0xFE, 0x6A, 0xD9, 0x4C, 0xE5, 0xD6, 0xB7,-    0x39, 0xC6, 0xCA, 0x24, 0x0B, 0x05, 0xC7, 0x6F,-    0xB7, 0x3F, 0x25, 0xDD, 0x02, 0x4B, 0xF9, 0x35-  },-  {-    0x85, 0xFD, 0x08, 0x5F, 0xDC, 0x12, 0xA0, 0x80,-    0x98, 0x3D, 0xF0, 0x7B, 0xD7, 0x01, 0x2B, 0x0D,-    0x40, 0x2A, 0x0F, 0x40, 0x43, 0xFC, 0xB2, 0x77,-    0x5A, 0xDF, 0x0B, 0xAD, 0x17, 0x4F, 0x9B, 0x08,-    0xD1, 0x67, 0x6E, 0x47, 0x69, 0x85, 0x78, 0x5C,-    0x0A, 0x5D, 0xCC, 0x41, 0xDB, 0xFF, 0x6D, 0x95,-    0xEF, 0x4D, 0x66, 0xA3, 0xFB, 0xDC, 0x4A, 0x74,-    0xB8, 0x2B, 0xA5, 0x2D, 0xA0, 0x51, 0x2B, 0x74-  },-  {-    0xAE, 0xD8, 0xFA, 0x76, 0x4B, 0x0F, 0xBF, 0xF8,-    0x21, 0xE0, 0x52, 0x33, 0xD2, 0xF7, 0xB0, 0x90,-    0x0E, 0xC4, 0x4D, 0x82, 0x6F, 0x95, 0xE9, 0x3C,-    0x34, 0x3C, 0x1B, 0xC3, 0xBA, 0x5A, 0x24, 0x37,-    0x4B, 0x1D, 0x61, 0x6E, 0x7E, 0x7A, 0xBA, 0x45,-    0x3A, 0x0A, 0xDA, 0x5E, 0x4F, 0xAB, 0x53, 0x82,-    0x40, 0x9E, 0x0D, 0x42, 0xCE, 0x9C, 0x2B, 0xC7,-    0xFB, 0x39, 0xA9, 0x9C, 0x34, 0x0C, 0x20, 0xF0-  },-  {-    0x7B, 0xA3, 0xB2, 0xE2, 0x97, 0x23, 0x35, 0x22,-    0xEE, 0xB3, 0x43, 0xBD, 0x3E, 0xBC, 0xFD, 0x83,-    0x5A, 0x04, 0x00, 0x77, 0x35, 0xE8, 0x7F, 0x0C,-    0xA3, 0x00, 0xCB, 0xEE, 0x6D, 0x41, 0x65, 0x65,-    0x16, 0x21, 0x71, 0x58, 0x1E, 0x40, 0x20, 0xFF,-    0x4C, 0xF1, 0x76, 0x45, 0x0F, 0x12, 0x91, 0xEA,-    0x22, 0x85, 0xCB, 0x9E, 0xBF, 0xFE, 0x4C, 0x56,-    0x66, 0x06, 0x27, 0x68, 0x51, 0x45, 0x05, 0x1C-  },-  {-    0xDE, 0x74, 0x8B, 0xCF, 0x89, 0xEC, 0x88, 0x08,-    0x47, 0x21, 0xE1, 0x6B, 0x85, 0xF3, 0x0A, 0xDB,-    0x1A, 0x61, 0x34, 0xD6, 0x64, 0xB5, 0x84, 0x35,-    0x69, 0xBA, 0xBC, 0x5B, 0xBD, 0x1A, 0x15, 0xCA,-    0x9B, 0x61, 0x80, 0x3C, 0x90, 0x1A, 0x4F, 0xEF,-    0x32, 0x96, 0x5A, 0x17, 0x49, 0xC9, 0xF3, 0xA4,-    0xE2, 0x43, 0xE1, 0x73, 0x93, 0x9D, 0xC5, 0xA8,-    0xDC, 0x49, 0x5C, 0x67, 0x1A, 0xB5, 0x21, 0x45-  },-  {-    0xAA, 0xF4, 0xD2, 0xBD, 0xF2, 0x00, 0xA9, 0x19,-    0x70, 0x6D, 0x98, 0x42, 0xDC, 0xE1, 0x6C, 0x98,-    0x14, 0x0D, 0x34, 0xBC, 0x43, 0x3D, 0xF3, 0x20,-    0xAB, 0xA9, 0xBD, 0x42, 0x9E, 0x54, 0x9A, 0xA7,-    0xA3, 0x39, 0x76, 0x52, 0xA4, 0xD7, 0x68, 0x27,-    0x77, 0x86, 0xCF, 0x99, 0x3C, 0xDE, 0x23, 0x38,-    0x67, 0x3E, 0xD2, 0xE6, 0xB6, 0x6C, 0x96, 0x1F,-    0xEF, 0xB8, 0x2C, 0xD2, 0x0C, 0x93, 0x33, 0x8F-  },-  {-    0xC4, 0x08, 0x21, 0x89, 0x68, 0xB7, 0x88, 0xBF,-    0x86, 0x4F, 0x09, 0x97, 0xE6, 0xBC, 0x4C, 0x3D,-    0xBA, 0x68, 0xB2, 0x76, 0xE2, 0x12, 0x5A, 0x48,-    0x43, 0x29, 0x60, 0x52, 0xFF, 0x93, 0xBF, 0x57,-    0x67, 0xB8, 0xCD, 0xCE, 0x71, 0x31, 0xF0, 0x87,-    0x64, 0x30, 0xC1, 0x16, 0x5F, 0xEC, 0x6C, 0x4F,-    0x47, 0xAD, 0xAA, 0x4F, 0xD8, 0xBC, 0xFA, 0xCE,-    0xF4, 0x63, 0xB5, 0xD3, 0xD0, 0xFA, 0x61, 0xA0-  },-  {-    0x76, 0xD2, 0xD8, 0x19, 0xC9, 0x2B, 0xCE, 0x55,-    0xFA, 0x8E, 0x09, 0x2A, 0xB1, 0xBF, 0x9B, 0x9E,-    0xAB, 0x23, 0x7A, 0x25, 0x26, 0x79, 0x86, 0xCA,-    0xCF, 0x2B, 0x8E, 0xE1, 0x4D, 0x21, 0x4D, 0x73,-    0x0D, 0xC9, 0xA5, 0xAA, 0x2D, 0x7B, 0x59, 0x6E,-    0x86, 0xA1, 0xFD, 0x8F, 0xA0, 0x80, 0x4C, 0x77,-    0x40, 0x2D, 0x2F, 0xCD, 0x45, 0x08, 0x36, 0x88,-    0xB2, 0x18, 0xB1, 0xCD, 0xFA, 0x0D, 0xCB, 0xCB-  },-  {-    0x72, 0x06, 0x5E, 0xE4, 0xDD, 0x91, 0xC2, 0xD8,-    0x50, 0x9F, 0xA1, 0xFC, 0x28, 0xA3, 0x7C, 0x7F,-    0xC9, 0xFA, 0x7D, 0x5B, 0x3F, 0x8A, 0xD3, 0xD0,-    0xD7, 0xA2, 0x56, 0x26, 0xB5, 0x7B, 0x1B, 0x44,-    0x78, 0x8D, 0x4C, 0xAF, 0x80, 0x62, 0x90, 0x42,-    0x5F, 0x98, 0x90, 0xA3, 0xA2, 0xA3, 0x5A, 0x90,-    0x5A, 0xB4, 0xB3, 0x7A, 0xCF, 0xD0, 0xDA, 0x6E,-    0x45, 0x17, 0xB2, 0x52, 0x5C, 0x96, 0x51, 0xE4-  },-  {-    0x64, 0x47, 0x5D, 0xFE, 0x76, 0x00, 0xD7, 0x17,-    0x1B, 0xEA, 0x0B, 0x39, 0x4E, 0x27, 0xC9, 0xB0,-    0x0D, 0x8E, 0x74, 0xDD, 0x1E, 0x41, 0x6A, 0x79,-    0x47, 0x36, 0x82, 0xAD, 0x3D, 0xFD, 0xBB, 0x70,-    0x66, 0x31, 0x55, 0x80, 0x55, 0xCF, 0xC8, 0xA4,-    0x0E, 0x07, 0xBD, 0x01, 0x5A, 0x45, 0x40, 0xDC,-    0xDE, 0xA1, 0x58, 0x83, 0xCB, 0xBF, 0x31, 0x41,-    0x2D, 0xF1, 0xDE, 0x1C, 0xD4, 0x15, 0x2B, 0x91-  },-  {-    0x12, 0xCD, 0x16, 0x74, 0xA4, 0x48, 0x8A, 0x5D,-    0x7C, 0x2B, 0x31, 0x60, 0xD2, 0xE2, 0xC4, 0xB5,-    0x83, 0x71, 0xBE, 0xDA, 0xD7, 0x93, 0x41, 0x8D,-    0x6F, 0x19, 0xC6, 0xEE, 0x38, 0x5D, 0x70, 0xB3,-    0xE0, 0x67, 0x39, 0x36, 0x9D, 0x4D, 0xF9, 0x10,-    0xED, 0xB0, 0xB0, 0xA5, 0x4C, 0xBF, 0xF4, 0x3D,-    0x54, 0x54, 0x4C, 0xD3, 0x7A, 0xB3, 0xA0, 0x6C,-    0xFA, 0x0A, 0x3D, 0xDA, 0xC8, 0xB6, 0x6C, 0x89-  },-  {-    0x60, 0x75, 0x69, 0x66, 0x47, 0x9D, 0xED, 0xC6,-    0xDD, 0x4B, 0xCF, 0xF8, 0xEA, 0x7D, 0x1D, 0x4C,-    0xE4, 0xD4, 0xAF, 0x2E, 0x7B, 0x09, 0x7E, 0x32,-    0xE3, 0x76, 0x35, 0x18, 0x44, 0x11, 0x47, 0xCC,-    0x12, 0xB3, 0xC0, 0xEE, 0x6D, 0x2E, 0xCA, 0xBF,-    0x11, 0x98, 0xCE, 0xC9, 0x2E, 0x86, 0xA3, 0x61,-    0x6F, 0xBA, 0x4F, 0x4E, 0x87, 0x2F, 0x58, 0x25,-    0x33, 0x0A, 0xDB, 0xB4, 0xC1, 0xDE, 0xE4, 0x44-  },-  {-    0xA7, 0x80, 0x3B, 0xCB, 0x71, 0xBC, 0x1D, 0x0F,-    0x43, 0x83, 0xDD, 0xE1, 0xE0, 0x61, 0x2E, 0x04,-    0xF8, 0x72, 0xB7, 0x15, 0xAD, 0x30, 0x81, 0x5C,-    0x22, 0x49, 0xCF, 0x34, 0xAB, 0xB8, 0xB0, 0x24,-    0x91, 0x5C, 0xB2, 0xFC, 0x9F, 0x4E, 0x7C, 0xC4,-    0xC8, 0xCF, 0xD4, 0x5B, 0xE2, 0xD5, 0xA9, 0x1E,-    0xAB, 0x09, 0x41, 0xC7, 0xD2, 0x70, 0xE2, 0xDA,-    0x4C, 0xA4, 0xA9, 0xF7, 0xAC, 0x68, 0x66, 0x3A-  },-  {-    0xB8, 0x4E, 0xF6, 0xA7, 0x22, 0x9A, 0x34, 0xA7,-    0x50, 0xD9, 0xA9, 0x8E, 0xE2, 0x52, 0x98, 0x71,-    0x81, 0x6B, 0x87, 0xFB, 0xE3, 0xBC, 0x45, 0xB4,-    0x5F, 0xA5, 0xAE, 0x82, 0xD5, 0x14, 0x15, 0x40,-    0x21, 0x11, 0x65, 0xC3, 0xC5, 0xD7, 0xA7, 0x47,-    0x6B, 0xA5, 0xA4, 0xAA, 0x06, 0xD6, 0x64, 0x76,-    0xF0, 0xD9, 0xDC, 0x49, 0xA3, 0xF1, 0xEE, 0x72,-    0xC3, 0xAC, 0xAB, 0xD4, 0x98, 0x96, 0x74, 0x14-  },-  {-    0xFA, 0xE4, 0xB6, 0xD8, 0xEF, 0xC3, 0xF8, 0xC8,-    0xE6, 0x4D, 0x00, 0x1D, 0xAB, 0xEC, 0x3A, 0x21,-    0xF5, 0x44, 0xE8, 0x27, 0x14, 0x74, 0x52, 0x51,-    0xB2, 0xB4, 0xB3, 0x93, 0xF2, 0xF4, 0x3E, 0x0D,-    0xA3, 0xD4, 0x03, 0xC6, 0x4D, 0xB9, 0x5A, 0x2C,-    0xB6, 0xE2, 0x3E, 0xBB, 0x7B, 0x9E, 0x94, 0xCD,-    0xD5, 0xDD, 0xAC, 0x54, 0xF0, 0x7C, 0x4A, 0x61,-    0xBD, 0x3C, 0xB1, 0x0A, 0xA6, 0xF9, 0x3B, 0x49-  },-  {-    0x34, 0xF7, 0x28, 0x66, 0x05, 0xA1, 0x22, 0x36,-    0x95, 0x40, 0x14, 0x1D, 0xED, 0x79, 0xB8, 0x95,-    0x72, 0x55, 0xDA, 0x2D, 0x41, 0x55, 0xAB, 0xBF,-    0x5A, 0x8D, 0xBB, 0x89, 0xC8, 0xEB, 0x7E, 0xDE,-    0x8E, 0xEE, 0xF1, 0xDA, 0xA4, 0x6D, 0xC2, 0x9D,-    0x75, 0x1D, 0x04, 0x5D, 0xC3, 0xB1, 0xD6, 0x58,-    0xBB, 0x64, 0xB8, 0x0F, 0xF8, 0x58, 0x9E, 0xDD,-    0xB3, 0x82, 0x4B, 0x13, 0xDA, 0x23, 0x5A, 0x6B-  },-  {-    0x3B, 0x3B, 0x48, 0x43, 0x4B, 0xE2, 0x7B, 0x9E,-    0xAB, 0xAB, 0xBA, 0x43, 0xBF, 0x6B, 0x35, 0xF1,-    0x4B, 0x30, 0xF6, 0xA8, 0x8D, 0xC2, 0xE7, 0x50,-    0xC3, 0x58, 0x47, 0x0D, 0x6B, 0x3A, 0xA3, 0xC1,-    0x8E, 0x47, 0xDB, 0x40, 0x17, 0xFA, 0x55, 0x10,-    0x6D, 0x82, 0x52, 0xF0, 0x16, 0x37, 0x1A, 0x00,-    0xF5, 0xF8, 0xB0, 0x70, 0xB7, 0x4B, 0xA5, 0xF2,-    0x3C, 0xFF, 0xC5, 0x51, 0x1C, 0x9F, 0x09, 0xF0-  },-  {-    0xBA, 0x28, 0x9E, 0xBD, 0x65, 0x62, 0xC4, 0x8C,-    0x3E, 0x10, 0xA8, 0xAD, 0x6C, 0xE0, 0x2E, 0x73,-    0x43, 0x3D, 0x1E, 0x93, 0xD7, 0xC9, 0x27, 0x9D,-    0x4D, 0x60, 0xA7, 0xE8, 0x79, 0xEE, 0x11, 0xF4,-    0x41, 0xA0, 0x00, 0xF4, 0x8E, 0xD9, 0xF7, 0xC4,-    0xED, 0x87, 0xA4, 0x51, 0x36, 0xD7, 0xDC, 0xCD,-    0xCA, 0x48, 0x21, 0x09, 0xC7, 0x8A, 0x51, 0x06,-    0x2B, 0x3B, 0xA4, 0x04, 0x4A, 0xDA, 0x24, 0x69-  },-  {-    0x02, 0x29, 0x39, 0xE2, 0x38, 0x6C, 0x5A, 0x37,-    0x04, 0x98, 0x56, 0xC8, 0x50, 0xA2, 0xBB, 0x10,-    0xA1, 0x3D, 0xFE, 0xA4, 0x21, 0x2B, 0x4C, 0x73,-    0x2A, 0x88, 0x40, 0xA9, 0xFF, 0xA5, 0xFA, 0xF5,-    0x48, 0x75, 0xC5, 0x44, 0x88, 0x16, 0xB2, 0x78,-    0x5A, 0x00, 0x7D, 0xA8, 0xA8, 0xD2, 0xBC, 0x7D,-    0x71, 0xA5, 0x4E, 0x4E, 0x65, 0x71, 0xF1, 0x0B,-    0x60, 0x0C, 0xBD, 0xB2, 0x5D, 0x13, 0xED, 0xE3-  },-  {-    0xE6, 0xFE, 0xC1, 0x9D, 0x89, 0xCE, 0x87, 0x17,-    0xB1, 0xA0, 0x87, 0x02, 0x46, 0x70, 0xFE, 0x02,-    0x6F, 0x6C, 0x7C, 0xBD, 0xA1, 0x1C, 0xAE, 0xF9,-    0x59, 0xBB, 0x2D, 0x35, 0x1B, 0xF8, 0x56, 0xF8,-    0x05, 0x5D, 0x1C, 0x0E, 0xBD, 0xAA, 0xA9, 0xD1,-    0xB1, 0x78, 0x86, 0xFC, 0x2C, 0x56, 0x2B, 0x5E,-    0x99, 0x64, 0x2F, 0xC0, 0x64, 0x71, 0x0C, 0x0D,-    0x34, 0x88, 0xA0, 0x2B, 0x5E, 0xD7, 0xF6, 0xFD-  },-  {-    0x94, 0xC9, 0x6F, 0x02, 0xA8, 0xF5, 0x76, 0xAC,-    0xA3, 0x2B, 0xA6, 0x1C, 0x2B, 0x20, 0x6F, 0x90,-    0x72, 0x85, 0xD9, 0x29, 0x9B, 0x83, 0xAC, 0x17,-    0x5C, 0x20, 0x9A, 0x8D, 0x43, 0xD5, 0x3B, 0xFE,-    0x68, 0x3D, 0xD1, 0xD8, 0x3E, 0x75, 0x49, 0xCB,-    0x90, 0x6C, 0x28, 0xF5, 0x9A, 0xB7, 0xC4, 0x6F,-    0x87, 0x51, 0x36, 0x6A, 0x28, 0xC3, 0x9D, 0xD5,-    0xFE, 0x26, 0x93, 0xC9, 0x01, 0x96, 0x66, 0xC8-  },-  {-    0x31, 0xA0, 0xCD, 0x21, 0x5E, 0xBD, 0x2C, 0xB6,-    0x1D, 0xE5, 0xB9, 0xED, 0xC9, 0x1E, 0x61, 0x95,-    0xE3, 0x1C, 0x59, 0xA5, 0x64, 0x8D, 0x5C, 0x9F,-    0x73, 0x7E, 0x12, 0x5B, 0x26, 0x05, 0x70, 0x8F,-    0x2E, 0x32, 0x5A, 0xB3, 0x38, 0x1C, 0x8D, 0xCE,-    0x1A, 0x3E, 0x95, 0x88, 0x86, 0xF1, 0xEC, 0xDC,-    0x60, 0x31, 0x8F, 0x88, 0x2C, 0xFE, 0x20, 0xA2,-    0x41, 0x91, 0x35, 0x2E, 0x61, 0x7B, 0x0F, 0x21-  },-  {-    0x91, 0xAB, 0x50, 0x4A, 0x52, 0x2D, 0xCE, 0x78,-    0x77, 0x9F, 0x4C, 0x6C, 0x6B, 0xA2, 0xE6, 0xB6,-    0xDB, 0x55, 0x65, 0xC7, 0x6D, 0x3E, 0x7E, 0x7C,-    0x92, 0x0C, 0xAF, 0x7F, 0x75, 0x7E, 0xF9, 0xDB,-    0x7C, 0x8F, 0xCF, 0x10, 0xE5, 0x7F, 0x03, 0x37,-    0x9E, 0xA9, 0xBF, 0x75, 0xEB, 0x59, 0x89, 0x5D,-    0x96, 0xE1, 0x49, 0x80, 0x0B, 0x6A, 0xAE, 0x01,-    0xDB, 0x77, 0x8B, 0xB9, 0x0A, 0xFB, 0xC9, 0x89-  },-  {-    0xD8, 0x5C, 0xAB, 0xC6, 0xBD, 0x5B, 0x1A, 0x01,-    0xA5, 0xAF, 0xD8, 0xC6, 0x73, 0x47, 0x40, 0xDA,-    0x9F, 0xD1, 0xC1, 0xAC, 0xC6, 0xDB, 0x29, 0xBF,-    0xC8, 0xA2, 0xE5, 0xB6, 0x68, 0xB0, 0x28, 0xB6,-    0xB3, 0x15, 0x4B, 0xFB, 0x87, 0x03, 0xFA, 0x31,-    0x80, 0x25, 0x1D, 0x58, 0x9A, 0xD3, 0x80, 0x40,-    0xCE, 0xB7, 0x07, 0xC4, 0xBA, 0xD1, 0xB5, 0x34,-    0x3C, 0xB4, 0x26, 0xB6, 0x1E, 0xAA, 0x49, 0xC1-  },-  {-    0xD6, 0x2E, 0xFB, 0xEC, 0x2C, 0xA9, 0xC1, 0xF8,-    0xBD, 0x66, 0xCE, 0x8B, 0x3F, 0x6A, 0x89, 0x8C,-    0xB3, 0xF7, 0x56, 0x6B, 0xA6, 0x56, 0x8C, 0x61,-    0x8A, 0xD1, 0xFE, 0xB2, 0xB6, 0x5B, 0x76, 0xC3,-    0xCE, 0x1D, 0xD2, 0x0F, 0x73, 0x95, 0x37, 0x2F,-    0xAF, 0x28, 0x42, 0x7F, 0x61, 0xC9, 0x27, 0x80,-    0x49, 0xCF, 0x01, 0x40, 0xDF, 0x43, 0x4F, 0x56,-    0x33, 0x04, 0x8C, 0x86, 0xB8, 0x1E, 0x03, 0x99-  },-  {-    0x7C, 0x8F, 0xDC, 0x61, 0x75, 0x43, 0x9E, 0x2C,-    0x3D, 0xB1, 0x5B, 0xAF, 0xA7, 0xFB, 0x06, 0x14,-    0x3A, 0x6A, 0x23, 0xBC, 0x90, 0xF4, 0x49, 0xE7,-    0x9D, 0xEE, 0xF7, 0x3C, 0x3D, 0x49, 0x2A, 0x67,-    0x17, 0x15, 0xC1, 0x93, 0xB6, 0xFE, 0xA9, 0xF0,-    0x36, 0x05, 0x0B, 0x94, 0x60, 0x69, 0x85, 0x6B,-    0x89, 0x7E, 0x08, 0xC0, 0x07, 0x68, 0xF5, 0xEE,-    0x5D, 0xDC, 0xF7, 0x0B, 0x7C, 0xD6, 0xD0, 0xE0-  },-  {-    0x58, 0x60, 0x2E, 0xE7, 0x46, 0x8E, 0x6B, 0xC9,-    0xDF, 0x21, 0xBD, 0x51, 0xB2, 0x3C, 0x00, 0x5F,-    0x72, 0xD6, 0xCB, 0x01, 0x3F, 0x0A, 0x1B, 0x48,-    0xCB, 0xEC, 0x5E, 0xCA, 0x29, 0x92, 0x99, 0xF9,-    0x7F, 0x09, 0xF5, 0x4A, 0x9A, 0x01, 0x48, 0x3E,-    0xAE, 0xB3, 0x15, 0xA6, 0x47, 0x8B, 0xAD, 0x37,-    0xBA, 0x47, 0xCA, 0x13, 0x47, 0xC7, 0xC8, 0xFC,-    0x9E, 0x66, 0x95, 0x59, 0x2C, 0x91, 0xD7, 0x23-  },-  {-    0x27, 0xF5, 0xB7, 0x9E, 0xD2, 0x56, 0xB0, 0x50,-    0x99, 0x3D, 0x79, 0x34, 0x96, 0xED, 0xF4, 0x80,-    0x7C, 0x1D, 0x85, 0xA7, 0xB0, 0xA6, 0x7C, 0x9C,-    0x4F, 0xA9, 0x98, 0x60, 0x75, 0x0B, 0x0A, 0xE6,-    0x69, 0x89, 0x67, 0x0A, 0x8F, 0xFD, 0x78, 0x56,-    0xD7, 0xCE, 0x41, 0x15, 0x99, 0xE5, 0x8C, 0x4D,-    0x77, 0xB2, 0x32, 0xA6, 0x2B, 0xEF, 0x64, 0xD1,-    0x52, 0x75, 0xBE, 0x46, 0xA6, 0x82, 0x35, 0xFF-  },-  {-    0x39, 0x57, 0xA9, 0x76, 0xB9, 0xF1, 0x88, 0x7B,-    0xF0, 0x04, 0xA8, 0xDC, 0xA9, 0x42, 0xC9, 0x2D,-    0x2B, 0x37, 0xEA, 0x52, 0x60, 0x0F, 0x25, 0xE0,-    0xC9, 0xBC, 0x57, 0x07, 0xD0, 0x27, 0x9C, 0x00,-    0xC6, 0xE8, 0x5A, 0x83, 0x9B, 0x0D, 0x2D, 0x8E,-    0xB5, 0x9C, 0x51, 0xD9, 0x47, 0x88, 0xEB, 0xE6,-    0x24, 0x74, 0xA7, 0x91, 0xCA, 0xDF, 0x52, 0xCC,-    0xCF, 0x20, 0xF5, 0x07, 0x0B, 0x65, 0x73, 0xFC-  },-  {-    0xEA, 0xA2, 0x37, 0x6D, 0x55, 0x38, 0x0B, 0xF7,-    0x72, 0xEC, 0xCA, 0x9C, 0xB0, 0xAA, 0x46, 0x68,-    0xC9, 0x5C, 0x70, 0x71, 0x62, 0xFA, 0x86, 0xD5,-    0x18, 0xC8, 0xCE, 0x0C, 0xA9, 0xBF, 0x73, 0x62,-    0xB9, 0xF2, 0xA0, 0xAD, 0xC3, 0xFF, 0x59, 0x92,-    0x2D, 0xF9, 0x21, 0xB9, 0x45, 0x67, 0xE8, 0x1E,-    0x45, 0x2F, 0x6C, 0x1A, 0x07, 0xFC, 0x81, 0x7C,-    0xEB, 0xE9, 0x96, 0x04, 0xB3, 0x50, 0x5D, 0x38-  },-  {-    0xC1, 0xE2, 0xC7, 0x8B, 0x6B, 0x27, 0x34, 0xE2,-    0x48, 0x0E, 0xC5, 0x50, 0x43, 0x4C, 0xB5, 0xD6,-    0x13, 0x11, 0x1A, 0xDC, 0xC2, 0x1D, 0x47, 0x55,-    0x45, 0xC3, 0xB1, 0xB7, 0xE6, 0xFF, 0x12, 0x44,-    0x44, 0x76, 0xE5, 0xC0, 0x55, 0x13, 0x2E, 0x22,-    0x29, 0xDC, 0x0F, 0x80, 0x70, 0x44, 0xBB, 0x91,-    0x9B, 0x1A, 0x56, 0x62, 0xDD, 0x38, 0xA9, 0xEE,-    0x65, 0xE2, 0x43, 0xA3, 0x91, 0x1A, 0xED, 0x1A-  },-  {-    0x8A, 0xB4, 0x87, 0x13, 0x38, 0x9D, 0xD0, 0xFC,-    0xF9, 0xF9, 0x65, 0xD3, 0xCE, 0x66, 0xB1, 0xE5,-    0x59, 0xA1, 0xF8, 0xC5, 0x87, 0x41, 0xD6, 0x76,-    0x83, 0xCD, 0x97, 0x13, 0x54, 0xF4, 0x52, 0xE6,-    0x2D, 0x02, 0x07, 0xA6, 0x5E, 0x43, 0x6C, 0x5D,-    0x5D, 0x8F, 0x8E, 0xE7, 0x1C, 0x6A, 0xBF, 0xE5,-    0x0E, 0x66, 0x90, 0x04, 0xC3, 0x02, 0xB3, 0x1A,-    0x7E, 0xA8, 0x31, 0x1D, 0x4A, 0x91, 0x60, 0x51-  },-  {-    0x24, 0xCE, 0x0A, 0xDD, 0xAA, 0x4C, 0x65, 0x03,-    0x8B, 0xD1, 0xB1, 0xC0, 0xF1, 0x45, 0x2A, 0x0B,-    0x12, 0x87, 0x77, 0xAA, 0xBC, 0x94, 0xA2, 0x9D,-    0xF2, 0xFD, 0x6C, 0x7E, 0x2F, 0x85, 0xF8, 0xAB,-    0x9A, 0xC7, 0xEF, 0xF5, 0x16, 0xB0, 0xE0, 0xA8,-    0x25, 0xC8, 0x4A, 0x24, 0xCF, 0xE4, 0x92, 0xEA,-    0xAD, 0x0A, 0x63, 0x08, 0xE4, 0x6D, 0xD4, 0x2F,-    0xE8, 0x33, 0x3A, 0xB9, 0x71, 0xBB, 0x30, 0xCA-  },-  {-    0x51, 0x54, 0xF9, 0x29, 0xEE, 0x03, 0x04, 0x5B,-    0x6B, 0x0C, 0x00, 0x04, 0xFA, 0x77, 0x8E, 0xDE,-    0xE1, 0xD1, 0x39, 0x89, 0x32, 0x67, 0xCC, 0x84,-    0x82, 0x5A, 0xD7, 0xB3, 0x6C, 0x63, 0xDE, 0x32,-    0x79, 0x8E, 0x4A, 0x16, 0x6D, 0x24, 0x68, 0x65,-    0x61, 0x35, 0x4F, 0x63, 0xB0, 0x07, 0x09, 0xA1,-    0x36, 0x4B, 0x3C, 0x24, 0x1D, 0xE3, 0xFE, 0xBF,-    0x07, 0x54, 0x04, 0x58, 0x97, 0x46, 0x7C, 0xD4-  },-  {-    0xE7, 0x4E, 0x90, 0x79, 0x20, 0xFD, 0x87, 0xBD,-    0x5A, 0xD6, 0x36, 0xDD, 0x11, 0x08, 0x5E, 0x50,-    0xEE, 0x70, 0x45, 0x9C, 0x44, 0x3E, 0x1C, 0xE5,-    0x80, 0x9A, 0xF2, 0xBC, 0x2E, 0xBA, 0x39, 0xF9,-    0xE6, 0xD7, 0x12, 0x8E, 0x0E, 0x37, 0x12, 0xC3,-    0x16, 0xDA, 0x06, 0xF4, 0x70, 0x5D, 0x78, 0xA4,-    0x83, 0x8E, 0x28, 0x12, 0x1D, 0x43, 0x44, 0xA2,-    0xC7, 0x9C, 0x5E, 0x0D, 0xB3, 0x07, 0xA6, 0x77-  },-  {-    0xBF, 0x91, 0xA2, 0x23, 0x34, 0xBA, 0xC2, 0x0F,-    0x3F, 0xD8, 0x06, 0x63, 0xB3, 0xCD, 0x06, 0xC4,-    0xE8, 0x80, 0x2F, 0x30, 0xE6, 0xB5, 0x9F, 0x90,-    0xD3, 0x03, 0x5C, 0xC9, 0x79, 0x8A, 0x21, 0x7E,-    0xD5, 0xA3, 0x1A, 0xBB, 0xDA, 0x7F, 0xA6, 0x84,-    0x28, 0x27, 0xBD, 0xF2, 0xA7, 0xA1, 0xC2, 0x1F,-    0x6F, 0xCF, 0xCC, 0xBB, 0x54, 0xC6, 0xC5, 0x29,-    0x26, 0xF3, 0x2D, 0xA8, 0x16, 0x26, 0x9B, 0xE1-  },-  {-    0xD9, 0xD5, 0xC7, 0x4B, 0xE5, 0x12, 0x1B, 0x0B,-    0xD7, 0x42, 0xF2, 0x6B, 0xFF, 0xB8, 0xC8, 0x9F,-    0x89, 0x17, 0x1F, 0x3F, 0x93, 0x49, 0x13, 0x49,-    0x2B, 0x09, 0x03, 0xC2, 0x71, 0xBB, 0xE2, 0xB3,-    0x39, 0x5E, 0xF2, 0x59, 0x66, 0x9B, 0xEF, 0x43,-    0xB5, 0x7F, 0x7F, 0xCC, 0x30, 0x27, 0xDB, 0x01,-    0x82, 0x3F, 0x6B, 0xAE, 0xE6, 0x6E, 0x4F, 0x9F,-    0xEA, 0xD4, 0xD6, 0x72, 0x6C, 0x74, 0x1F, 0xCE-  },-  {-    0x50, 0xC8, 0xB8, 0xCF, 0x34, 0xCD, 0x87, 0x9F,-    0x80, 0xE2, 0xFA, 0xAB, 0x32, 0x30, 0xB0, 0xC0,-    0xE1, 0xCC, 0x3E, 0x9D, 0xCA, 0xDE, 0xB1, 0xB9,-    0xD9, 0x7A, 0xB9, 0x23, 0x41, 0x5D, 0xD9, 0xA1,-    0xFE, 0x38, 0xAD, 0xDD, 0x5C, 0x11, 0x75, 0x6C,-    0x67, 0x99, 0x0B, 0x25, 0x6E, 0x95, 0xAD, 0x6D,-    0x8F, 0x9F, 0xED, 0xCE, 0x10, 0xBF, 0x1C, 0x90,-    0x67, 0x9C, 0xDE, 0x0E, 0xCF, 0x1B, 0xE3, 0x47-  },-  {-    0x0A, 0x38, 0x6E, 0x7C, 0xD5, 0xDD, 0x9B, 0x77,-    0xA0, 0x35, 0xE0, 0x9F, 0xE6, 0xFE, 0xE2, 0xC8,-    0xCE, 0x61, 0xB5, 0x38, 0x3C, 0x87, 0xEA, 0x43,-    0x20, 0x50, 0x59, 0xC5, 0xE4, 0xCD, 0x4F, 0x44,-    0x08, 0x31, 0x9B, 0xB0, 0xA8, 0x23, 0x60, 0xF6,-    0xA5, 0x8E, 0x6C, 0x9C, 0xE3, 0xF4, 0x87, 0xC4,-    0x46, 0x06, 0x3B, 0xF8, 0x13, 0xBC, 0x6B, 0xA5,-    0x35, 0xE1, 0x7F, 0xC1, 0x82, 0x6C, 0xFC, 0x91-  },-  {-    0x1F, 0x14, 0x59, 0xCB, 0x6B, 0x61, 0xCB, 0xAC,-    0x5F, 0x0E, 0xFE, 0x8F, 0xC4, 0x87, 0x53, 0x8F,-    0x42, 0x54, 0x89, 0x87, 0xFC, 0xD5, 0x62, 0x21,-    0xCF, 0xA7, 0xBE, 0xB2, 0x25, 0x04, 0x76, 0x9E,-    0x79, 0x2C, 0x45, 0xAD, 0xFB, 0x1D, 0x6B, 0x3D,-    0x60, 0xD7, 0xB7, 0x49, 0xC8, 0xA7, 0x5B, 0x0B,-    0xDF, 0x14, 0xE8, 0xEA, 0x72, 0x1B, 0x95, 0xDC,-    0xA5, 0x38, 0xCA, 0x6E, 0x25, 0x71, 0x12, 0x09-  },-  {-    0xE5, 0x8B, 0x38, 0x36, 0xB7, 0xD8, 0xFE, 0xDB,-    0xB5, 0x0C, 0xA5, 0x72, 0x5C, 0x65, 0x71, 0xE7,-    0x4C, 0x07, 0x85, 0xE9, 0x78, 0x21, 0xDA, 0xB8,-    0xB6, 0x29, 0x8C, 0x10, 0xE4, 0xC0, 0x79, 0xD4,-    0xA6, 0xCD, 0xF2, 0x2F, 0x0F, 0xED, 0xB5, 0x50,-    0x32, 0x92, 0x5C, 0x16, 0x74, 0x81, 0x15, 0xF0,-    0x1A, 0x10, 0x5E, 0x77, 0xE0, 0x0C, 0xEE, 0x3D,-    0x07, 0x92, 0x4D, 0xC0, 0xD8, 0xF9, 0x06, 0x59-  },-  {-    0xB9, 0x29, 0xCC, 0x65, 0x05, 0xF0, 0x20, 0x15,-    0x86, 0x72, 0xDE, 0xDA, 0x56, 0xD0, 0xDB, 0x08,-    0x1A, 0x2E, 0xE3, 0x4C, 0x00, 0xC1, 0x10, 0x00,-    0x29, 0xBD, 0xF8, 0xEA, 0x98, 0x03, 0x4F, 0xA4,-    0xBF, 0x3E, 0x86, 0x55, 0xEC, 0x69, 0x7F, 0xE3,-    0x6F, 0x40, 0x55, 0x3C, 0x5B, 0xB4, 0x68, 0x01,-    0x64, 0x4A, 0x62, 0x7D, 0x33, 0x42, 0xF4, 0xFC,-    0x92, 0xB6, 0x1F, 0x03, 0x29, 0x0F, 0xB3, 0x81-  },-  {-    0x72, 0xD3, 0x53, 0x99, 0x4B, 0x49, 0xD3, 0xE0,-    0x31, 0x53, 0x92, 0x9A, 0x1E, 0x4D, 0x4F, 0x18,-    0x8E, 0xE5, 0x8A, 0xB9, 0xE7, 0x2E, 0xE8, 0xE5,-    0x12, 0xF2, 0x9B, 0xC7, 0x73, 0x91, 0x38, 0x19,-    0xCE, 0x05, 0x7D, 0xDD, 0x70, 0x02, 0xC0, 0x43,-    0x3E, 0xE0, 0xA1, 0x61, 0x14, 0xE3, 0xD1, 0x56,-    0xDD, 0x2C, 0x4A, 0x7E, 0x80, 0xEE, 0x53, 0x37,-    0x8B, 0x86, 0x70, 0xF2, 0x3E, 0x33, 0xEF, 0x56-  },-  {-    0xC7, 0x0E, 0xF9, 0xBF, 0xD7, 0x75, 0xD4, 0x08,-    0x17, 0x67, 0x37, 0xA0, 0x73, 0x6D, 0x68, 0x51,-    0x7C, 0xE1, 0xAA, 0xAD, 0x7E, 0x81, 0xA9, 0x3C,-    0x8C, 0x1E, 0xD9, 0x67, 0xEA, 0x21, 0x4F, 0x56,-    0xC8, 0xA3, 0x77, 0xB1, 0x76, 0x3E, 0x67, 0x66,-    0x15, 0xB6, 0x0F, 0x39, 0x88, 0x24, 0x1E, 0xAE,-    0x6E, 0xAB, 0x96, 0x85, 0xA5, 0x12, 0x49, 0x29,-    0xD2, 0x81, 0x88, 0xF2, 0x9E, 0xAB, 0x06, 0xF7-  },-  {-    0xC2, 0x30, 0xF0, 0x80, 0x26, 0x79, 0xCB, 0x33,-    0x82, 0x2E, 0xF8, 0xB3, 0xB2, 0x1B, 0xF7, 0xA9,-    0xA2, 0x89, 0x42, 0x09, 0x29, 0x01, 0xD7, 0xDA,-    0xC3, 0x76, 0x03, 0x00, 0x83, 0x10, 0x26, 0xCF,-    0x35, 0x4C, 0x92, 0x32, 0xDF, 0x3E, 0x08, 0x4D,-    0x99, 0x03, 0x13, 0x0C, 0x60, 0x1F, 0x63, 0xC1,-    0xF4, 0xA4, 0xA4, 0xB8, 0x10, 0x6E, 0x46, 0x8C,-    0xD4, 0x43, 0xBB, 0xE5, 0xA7, 0x34, 0xF4, 0x5F-  },-  {-    0x6F, 0x43, 0x09, 0x4C, 0xAF, 0xB5, 0xEB, 0xF1,-    0xF7, 0xA4, 0x93, 0x7E, 0xC5, 0x0F, 0x56, 0xA4,-    0xC9, 0xDA, 0x30, 0x3C, 0xBB, 0x55, 0xAC, 0x1F,-    0x27, 0xF1, 0xF1, 0x97, 0x6C, 0xD9, 0x6B, 0xED,-    0xA9, 0x46, 0x4F, 0x0E, 0x7B, 0x9C, 0x54, 0x62,-    0x0B, 0x8A, 0x9F, 0xBA, 0x98, 0x31, 0x64, 0xB8,-    0xBE, 0x35, 0x78, 0x42, 0x5A, 0x02, 0x4F, 0x5F,-    0xE1, 0x99, 0xC3, 0x63, 0x56, 0xB8, 0x89, 0x72-  },-  {-    0x37, 0x45, 0x27, 0x3F, 0x4C, 0x38, 0x22, 0x5D,-    0xB2, 0x33, 0x73, 0x81, 0x87, 0x1A, 0x0C, 0x6A,-    0xAF, 0xD3, 0xAF, 0x9B, 0x01, 0x8C, 0x88, 0xAA,-    0x02, 0x02, 0x58, 0x50, 0xA5, 0xDC, 0x3A, 0x42,-    0xA1, 0xA3, 0xE0, 0x3E, 0x56, 0xCB, 0xF1, 0xB0,-    0x87, 0x6D, 0x63, 0xA4, 0x41, 0xF1, 0xD2, 0x85,-    0x6A, 0x39, 0xB8, 0x80, 0x1E, 0xB5, 0xAF, 0x32,-    0x52, 0x01, 0xC4, 0x15, 0xD6, 0x5E, 0x97, 0xFE-  },-  {-    0xC5, 0x0C, 0x44, 0xCC, 0xA3, 0xEC, 0x3E, 0xDA,-    0xAE, 0x77, 0x9A, 0x7E, 0x17, 0x94, 0x50, 0xEB,-    0xDD, 0xA2, 0xF9, 0x70, 0x67, 0xC6, 0x90, 0xAA,-    0x6C, 0x5A, 0x4A, 0xC7, 0xC3, 0x01, 0x39, 0xBB,-    0x27, 0xC0, 0xDF, 0x4D, 0xB3, 0x22, 0x0E, 0x63,-    0xCB, 0x11, 0x0D, 0x64, 0xF3, 0x7F, 0xFE, 0x07,-    0x8D, 0xB7, 0x26, 0x53, 0xE2, 0xDA, 0xAC, 0xF9,-    0x3A, 0xE3, 0xF0, 0xA2, 0xD1, 0xA7, 0xEB, 0x2E-  },-  {-    0x8A, 0xEF, 0x26, 0x3E, 0x38, 0x5C, 0xBC, 0x61,-    0xE1, 0x9B, 0x28, 0x91, 0x42, 0x43, 0x26, 0x2A,-    0xF5, 0xAF, 0xE8, 0x72, 0x6A, 0xF3, 0xCE, 0x39,-    0xA7, 0x9C, 0x27, 0x02, 0x8C, 0xF3, 0xEC, 0xD3,-    0xF8, 0xD2, 0xDF, 0xD9, 0xCF, 0xC9, 0xAD, 0x91,-    0xB5, 0x8F, 0x6F, 0x20, 0x77, 0x8F, 0xD5, 0xF0,-    0x28, 0x94, 0xA3, 0xD9, 0x1C, 0x7D, 0x57, 0xD1,-    0xE4, 0xB8, 0x66, 0xA7, 0xF3, 0x64, 0xB6, 0xBE-  },-  {-    0x28, 0x69, 0x61, 0x41, 0xDE, 0x6E, 0x2D, 0x9B,-    0xCB, 0x32, 0x35, 0x57, 0x8A, 0x66, 0x16, 0x6C,-    0x14, 0x48, 0xD3, 0xE9, 0x05, 0xA1, 0xB4, 0x82,-    0xD4, 0x23, 0xBE, 0x4B, 0xC5, 0x36, 0x9B, 0xC8,-    0xC7, 0x4D, 0xAE, 0x0A, 0xCC, 0x9C, 0xC1, 0x23,-    0xE1, 0xD8, 0xDD, 0xCE, 0x9F, 0x97, 0x91, 0x7E,-    0x8C, 0x01, 0x9C, 0x55, 0x2D, 0xA3, 0x2D, 0x39,-    0xD2, 0x21, 0x9B, 0x9A, 0xBF, 0x0F, 0xA8, 0xC8-  },-  {-    0x2F, 0xB9, 0xEB, 0x20, 0x85, 0x83, 0x01, 0x81,-    0x90, 0x3A, 0x9D, 0xAF, 0xE3, 0xDB, 0x42, 0x8E,-    0xE1, 0x5B, 0xE7, 0x66, 0x22, 0x24, 0xEF, 0xD6,-    0x43, 0x37, 0x1F, 0xB2, 0x56, 0x46, 0xAE, 0xE7,-    0x16, 0xE5, 0x31, 0xEC, 0xA6, 0x9B, 0x2B, 0xDC,-    0x82, 0x33, 0xF1, 0xA8, 0x08, 0x1F, 0xA4, 0x3D,-    0xA1, 0x50, 0x03, 0x02, 0x97, 0x5A, 0x77, 0xF4,-    0x2F, 0xA5, 0x92, 0x13, 0x67, 0x10, 0xE9, 0xDC-  },-  {-    0x66, 0xF9, 0xA7, 0x14, 0x3F, 0x7A, 0x33, 0x14,-    0xA6, 0x69, 0xBF, 0x2E, 0x24, 0xBB, 0xB3, 0x50,-    0x14, 0x26, 0x1D, 0x63, 0x9F, 0x49, 0x5B, 0x6C,-    0x9C, 0x1F, 0x10, 0x4F, 0xE8, 0xE3, 0x20, 0xAC,-    0xA6, 0x0D, 0x45, 0x50, 0xD6, 0x9D, 0x52, 0xED,-    0xBD, 0x5A, 0x3C, 0xDE, 0xB4, 0x01, 0x4A, 0xE6,-    0x5B, 0x1D, 0x87, 0xAA, 0x77, 0x0B, 0x69, 0xAE,-    0x5C, 0x15, 0xF4, 0x33, 0x0B, 0x0B, 0x0A, 0xD8-  },-  {-    0xF4, 0xC4, 0xDD, 0x1D, 0x59, 0x4C, 0x35, 0x65,-    0xE3, 0xE2, 0x5C, 0xA4, 0x3D, 0xAD, 0x82, 0xF6,-    0x2A, 0xBE, 0xA4, 0x83, 0x5E, 0xD4, 0xCD, 0x81,-    0x1B, 0xCD, 0x97, 0x5E, 0x46, 0x27, 0x98, 0x28,-    0xD4, 0x4D, 0x4C, 0x62, 0xC3, 0x67, 0x9F, 0x1B,-    0x7F, 0x7B, 0x9D, 0xD4, 0x57, 0x1D, 0x7B, 0x49,-    0x55, 0x73, 0x47, 0xB8, 0xC5, 0x46, 0x0C, 0xBD,-    0xC1, 0xBE, 0xF6, 0x90, 0xFB, 0x2A, 0x08, 0xC0-  },-  {-    0x8F, 0x1D, 0xC9, 0x64, 0x9C, 0x3A, 0x84, 0x55,-    0x1F, 0x8F, 0x6E, 0x91, 0xCA, 0xC6, 0x82, 0x42,-    0xA4, 0x3B, 0x1F, 0x8F, 0x32, 0x8E, 0xE9, 0x22,-    0x80, 0x25, 0x73, 0x87, 0xFA, 0x75, 0x59, 0xAA,-    0x6D, 0xB1, 0x2E, 0x4A, 0xEA, 0xDC, 0x2D, 0x26,-    0x09, 0x91, 0x78, 0x74, 0x9C, 0x68, 0x64, 0xB3,-    0x57, 0xF3, 0xF8, 0x3B, 0x2F, 0xB3, 0xEF, 0xA8,-    0xD2, 0xA8, 0xDB, 0x05, 0x6B, 0xED, 0x6B, 0xCC-  },-  {-    0x31, 0x39, 0xC1, 0xA7, 0xF9, 0x7A, 0xFD, 0x16,-    0x75, 0xD4, 0x60, 0xEB, 0xBC, 0x07, 0xF2, 0x72,-    0x8A, 0xA1, 0x50, 0xDF, 0x84, 0x96, 0x24, 0x51,-    0x1E, 0xE0, 0x4B, 0x74, 0x3B, 0xA0, 0xA8, 0x33,-    0x09, 0x2F, 0x18, 0xC1, 0x2D, 0xC9, 0x1B, 0x4D,-    0xD2, 0x43, 0xF3, 0x33, 0x40, 0x2F, 0x59, 0xFE,-    0x28, 0xAB, 0xDB, 0xBB, 0xAE, 0x30, 0x1E, 0x7B,-    0x65, 0x9C, 0x7A, 0x26, 0xD5, 0xC0, 0xF9, 0x79-  },-  {-    0x06, 0xF9, 0x4A, 0x29, 0x96, 0x15, 0x8A, 0x81,-    0x9F, 0xE3, 0x4C, 0x40, 0xDE, 0x3C, 0xF0, 0x37,-    0x9F, 0xD9, 0xFB, 0x85, 0xB3, 0xE3, 0x63, 0xBA,-    0x39, 0x26, 0xA0, 0xE7, 0xD9, 0x60, 0xE3, 0xF4,-    0xC2, 0xE0, 0xC7, 0x0C, 0x7C, 0xE0, 0xCC, 0xB2,-    0xA6, 0x4F, 0xC2, 0x98, 0x69, 0xF6, 0xE7, 0xAB,-    0x12, 0xBD, 0x4D, 0x3F, 0x14, 0xFC, 0xE9, 0x43,-    0x27, 0x90, 0x27, 0xE7, 0x85, 0xFB, 0x5C, 0x29-  },-  {-    0xC2, 0x9C, 0x39, 0x9E, 0xF3, 0xEE, 0xE8, 0x96,-    0x1E, 0x87, 0x56, 0x5C, 0x1C, 0xE2, 0x63, 0x92,-    0x5F, 0xC3, 0xD0, 0xCE, 0x26, 0x7D, 0x13, 0xE4,-    0x8D, 0xD9, 0xE7, 0x32, 0xEE, 0x67, 0xB0, 0xF6,-    0x9F, 0xAD, 0x56, 0x40, 0x1B, 0x0F, 0x10, 0xFC,-    0xAA, 0xC1, 0x19, 0x20, 0x10, 0x46, 0xCC, 0xA2,-    0x8C, 0x5B, 0x14, 0xAB, 0xDE, 0xA3, 0x21, 0x2A,-    0xE6, 0x55, 0x62, 0xF7, 0xF1, 0x38, 0xDB, 0x3D-  },-  {-    0x4C, 0xEC, 0x4C, 0x9D, 0xF5, 0x2E, 0xEF, 0x05,-    0xC3, 0xF6, 0xFA, 0xAA, 0x97, 0x91, 0xBC, 0x74,-    0x45, 0x93, 0x71, 0x83, 0x22, 0x4E, 0xCC, 0x37,-    0xA1, 0xE5, 0x8D, 0x01, 0x32, 0xD3, 0x56, 0x17,-    0x53, 0x1D, 0x7E, 0x79, 0x5F, 0x52, 0xAF, 0x7B,-    0x1E, 0xB9, 0xD1, 0x47, 0xDE, 0x12, 0x92, 0xD3,-    0x45, 0xFE, 0x34, 0x18, 0x23, 0xF8, 0xE6, 0xBC,-    0x1E, 0x5B, 0xAD, 0xCA, 0x5C, 0x65, 0x61, 0x08-  },-  {-    0x89, 0x8B, 0xFB, 0xAE, 0x93, 0xB3, 0xE1, 0x8D,-    0x00, 0x69, 0x7E, 0xAB, 0x7D, 0x97, 0x04, 0xFA,-    0x36, 0xEC, 0x33, 0x9D, 0x07, 0x61, 0x31, 0xCE,-    0xFD, 0xF3, 0x0E, 0xDB, 0xE8, 0xD9, 0xCC, 0x81,-    0xC3, 0xA8, 0x0B, 0x12, 0x96, 0x59, 0xB1, 0x63,-    0xA3, 0x23, 0xBA, 0xB9, 0x79, 0x3D, 0x4F, 0xEE,-    0xD9, 0x2D, 0x54, 0xDA, 0xE9, 0x66, 0xC7, 0x75,-    0x29, 0x76, 0x4A, 0x09, 0xBE, 0x88, 0xDB, 0x45-  },-  {-    0xEE, 0x9B, 0xD0, 0x46, 0x9D, 0x3A, 0xAF, 0x4F,-    0x14, 0x03, 0x5B, 0xE4, 0x8A, 0x2C, 0x3B, 0x84,-    0xD9, 0xB4, 0xB1, 0xFF, 0xF1, 0xD9, 0x45, 0xE1,-    0xF1, 0xC1, 0xD3, 0x89, 0x80, 0xA9, 0x51, 0xBE,-    0x19, 0x7B, 0x25, 0xFE, 0x22, 0xC7, 0x31, 0xF2,-    0x0A, 0xEA, 0xCC, 0x93, 0x0B, 0xA9, 0xC4, 0xA1,-    0xF4, 0x76, 0x22, 0x27, 0x61, 0x7A, 0xD3, 0x50,-    0xFD, 0xAB, 0xB4, 0xE8, 0x02, 0x73, 0xA0, 0xF4-  },-  {-    0x3D, 0x4D, 0x31, 0x13, 0x30, 0x05, 0x81, 0xCD,-    0x96, 0xAC, 0xBF, 0x09, 0x1C, 0x3D, 0x0F, 0x3C,-    0x31, 0x01, 0x38, 0xCD, 0x69, 0x79, 0xE6, 0x02,-    0x6C, 0xDE, 0x62, 0x3E, 0x2D, 0xD1, 0xB2, 0x4D,-    0x4A, 0x86, 0x38, 0xBE, 0xD1, 0x07, 0x33, 0x44,-    0x78, 0x3A, 0xD0, 0x64, 0x9C, 0xC6, 0x30, 0x5C,-    0xCE, 0xC0, 0x4B, 0xEB, 0x49, 0xF3, 0x1C, 0x63,-    0x30, 0x88, 0xA9, 0x9B, 0x65, 0x13, 0x02, 0x67-  },-  {-    0x95, 0xC0, 0x59, 0x1A, 0xD9, 0x1F, 0x92, 0x1A,-    0xC7, 0xBE, 0x6D, 0x9C, 0xE3, 0x7E, 0x06, 0x63,-    0xED, 0x80, 0x11, 0xC1, 0xCF, 0xD6, 0xD0, 0x16,-    0x2A, 0x55, 0x72, 0xE9, 0x43, 0x68, 0xBA, 0xC0,-    0x20, 0x24, 0x48, 0x5E, 0x6A, 0x39, 0x85, 0x4A,-    0xA4, 0x6F, 0xE3, 0x8E, 0x97, 0xD6, 0xC6, 0xB1,-    0x94, 0x7C, 0xD2, 0x72, 0xD8, 0x6B, 0x06, 0xBB,-    0x5B, 0x2F, 0x78, 0xB9, 0xB6, 0x8D, 0x55, 0x9D-  },-  {-    0x22, 0x7B, 0x79, 0xDE, 0xD3, 0x68, 0x15, 0x3B,-    0xF4, 0x6C, 0x0A, 0x3C, 0xA9, 0x78, 0xBF, 0xDB,-    0xEF, 0x31, 0xF3, 0x02, 0x4A, 0x56, 0x65, 0x84,-    0x24, 0x68, 0x49, 0x0B, 0x0F, 0xF7, 0x48, 0xAE,-    0x04, 0xE7, 0x83, 0x2E, 0xD4, 0xC9, 0xF4, 0x9D,-    0xE9, 0xB1, 0x70, 0x67, 0x09, 0xD6, 0x23, 0xE5,-    0xC8, 0xC1, 0x5E, 0x3C, 0xAE, 0xCA, 0xE8, 0xD5,-    0xE4, 0x33, 0x43, 0x0F, 0xF7, 0x2F, 0x20, 0xEB-  },-  {-    0x5D, 0x34, 0xF3, 0x95, 0x2F, 0x01, 0x05, 0xEE,-    0xF8, 0x8A, 0xE8, 0xB6, 0x4C, 0x6C, 0xE9, 0x5E,-    0xBF, 0xAD, 0xE0, 0xE0, 0x2C, 0x69, 0xB0, 0x87,-    0x62, 0xA8, 0x71, 0x2D, 0x2E, 0x49, 0x11, 0xAD,-    0x3F, 0x94, 0x1F, 0xC4, 0x03, 0x4D, 0xC9, 0xB2,-    0xE4, 0x79, 0xFD, 0xBC, 0xD2, 0x79, 0xB9, 0x02,-    0xFA, 0xF5, 0xD8, 0x38, 0xBB, 0x2E, 0x0C, 0x64,-    0x95, 0xD3, 0x72, 0xB5, 0xB7, 0x02, 0x98, 0x13-  },-  {-    0x7F, 0x93, 0x9B, 0xF8, 0x35, 0x3A, 0xBC, 0xE4,-    0x9E, 0x77, 0xF1, 0x4F, 0x37, 0x50, 0xAF, 0x20,-    0xB7, 0xB0, 0x39, 0x02, 0xE1, 0xA1, 0xE7, 0xFB,-    0x6A, 0xAF, 0x76, 0xD0, 0x25, 0x9C, 0xD4, 0x01,-    0xA8, 0x31, 0x90, 0xF1, 0x56, 0x40, 0xE7, 0x4F,-    0x3E, 0x6C, 0x5A, 0x90, 0xE8, 0x39, 0xC7, 0x82,-    0x1F, 0x64, 0x74, 0x75, 0x7F, 0x75, 0xC7, 0xBF,-    0x90, 0x02, 0x08, 0x4D, 0xDC, 0x7A, 0x62, 0xDC-  },-  {-    0x06, 0x2B, 0x61, 0xA2, 0xF9, 0xA3, 0x3A, 0x71,-    0xD7, 0xD0, 0xA0, 0x61, 0x19, 0x64, 0x4C, 0x70,-    0xB0, 0x71, 0x6A, 0x50, 0x4D, 0xE7, 0xE5, 0xE1,-    0xBE, 0x49, 0xBD, 0x7B, 0x86, 0xE7, 0xED, 0x68,-    0x17, 0x71, 0x4F, 0x9F, 0x0F, 0xC3, 0x13, 0xD0,-    0x61, 0x29, 0x59, 0x7E, 0x9A, 0x22, 0x35, 0xEC,-    0x85, 0x21, 0xDE, 0x36, 0xF7, 0x29, 0x0A, 0x90,-    0xCC, 0xFC, 0x1F, 0xFA, 0x6D, 0x0A, 0xEE, 0x29-  },-  {-    0xF2, 0x9E, 0x01, 0xEE, 0xAE, 0x64, 0x31, 0x1E,-    0xB7, 0xF1, 0xC6, 0x42, 0x2F, 0x94, 0x6B, 0xF7,-    0xBE, 0xA3, 0x63, 0x79, 0x52, 0x3E, 0x7B, 0x2B,-    0xBA, 0xBA, 0x7D, 0x1D, 0x34, 0xA2, 0x2D, 0x5E,-    0xA5, 0xF1, 0xC5, 0xA0, 0x9D, 0x5C, 0xE1, 0xFE,-    0x68, 0x2C, 0xCE, 0xD9, 0xA4, 0x79, 0x8D, 0x1A,-    0x05, 0xB4, 0x6C, 0xD7, 0x2D, 0xFF, 0x5C, 0x1B,-    0x35, 0x54, 0x40, 0xB2, 0xA2, 0xD4, 0x76, 0xBC-  },-  {-    0xEC, 0x38, 0xCD, 0x3B, 0xBA, 0xB3, 0xEF, 0x35,-    0xD7, 0xCB, 0x6D, 0x5C, 0x91, 0x42, 0x98, 0x35,-    0x1D, 0x8A, 0x9D, 0xC9, 0x7F, 0xCE, 0xE0, 0x51,-    0xA8, 0xA0, 0x2F, 0x58, 0xE3, 0xED, 0x61, 0x84,-    0xD0, 0xB7, 0x81, 0x0A, 0x56, 0x15, 0x41, 0x1A,-    0xB1, 0xB9, 0x52, 0x09, 0xC3, 0xC8, 0x10, 0x11,-    0x4F, 0xDE, 0xB2, 0x24, 0x52, 0x08, 0x4E, 0x77,-    0xF3, 0xF8, 0x47, 0xC6, 0xDB, 0xAA, 0xFE, 0x16-  },-  {-    0xC2, 0xAE, 0xF5, 0xE0, 0xCA, 0x43, 0xE8, 0x26,-    0x41, 0x56, 0x5B, 0x8C, 0xB9, 0x43, 0xAA, 0x8B,-    0xA5, 0x35, 0x50, 0xCA, 0xEF, 0x79, 0x3B, 0x65,-    0x32, 0xFA, 0xFA, 0xD9, 0x4B, 0x81, 0x60, 0x82,-    0xF0, 0x11, 0x3A, 0x3E, 0xA2, 0xF6, 0x36, 0x08,-    0xAB, 0x40, 0x43, 0x7E, 0xCC, 0x0F, 0x02, 0x29,-    0xCB, 0x8F, 0xA2, 0x24, 0xDC, 0xF1, 0xC4, 0x78,-    0xA6, 0x7D, 0x9B, 0x64, 0x16, 0x2B, 0x92, 0xD1-  },-  {-    0x15, 0xF5, 0x34, 0xEF, 0xFF, 0x71, 0x05, 0xCD,-    0x1C, 0x25, 0x4D, 0x07, 0x4E, 0x27, 0xD5, 0x89,-    0x8B, 0x89, 0x31, 0x3B, 0x7D, 0x36, 0x6D, 0xC2,-    0xD7, 0xD8, 0x71, 0x13, 0xFA, 0x7D, 0x53, 0xAA,-    0xE1, 0x3F, 0x6D, 0xBA, 0x48, 0x7A, 0xD8, 0x10,-    0x3D, 0x5E, 0x85, 0x4C, 0x91, 0xFD, 0xB6, 0xE1,-    0xE7, 0x4B, 0x2E, 0xF6, 0xD1, 0x43, 0x17, 0x69,-    0xC3, 0x07, 0x67, 0xDD, 0xE0, 0x67, 0xA3, 0x5C-  },-  {-    0x89, 0xAC, 0xBC, 0xA0, 0xB1, 0x69, 0x89, 0x7A,-    0x0A, 0x27, 0x14, 0xC2, 0xDF, 0x8C, 0x95, 0xB5,-    0xB7, 0x9C, 0xB6, 0x93, 0x90, 0x14, 0x2B, 0x7D,-    0x60, 0x18, 0xBB, 0x3E, 0x30, 0x76, 0xB0, 0x99,-    0xB7, 0x9A, 0x96, 0x41, 0x52, 0xA9, 0xD9, 0x12,-    0xB1, 0xB8, 0x64, 0x12, 0xB7, 0xE3, 0x72, 0xE9,-    0xCE, 0xCA, 0xD7, 0xF2, 0x5D, 0x4C, 0xBA, 0xB8,-    0xA3, 0x17, 0xBE, 0x36, 0x49, 0x2A, 0x67, 0xD7-  },-  {-    0xE3, 0xC0, 0x73, 0x91, 0x90, 0xED, 0x84, 0x9C,-    0x9C, 0x96, 0x2F, 0xD9, 0xDB, 0xB5, 0x5E, 0x20,-    0x7E, 0x62, 0x4F, 0xCA, 0xC1, 0xEB, 0x41, 0x76,-    0x91, 0x51, 0x54, 0x99, 0xEE, 0xA8, 0xD8, 0x26,-    0x7B, 0x7E, 0x8F, 0x12, 0x87, 0xA6, 0x36, 0x33,-    0xAF, 0x50, 0x11, 0xFD, 0xE8, 0xC4, 0xDD, 0xF5,-    0x5B, 0xFD, 0xF7, 0x22, 0xED, 0xF8, 0x88, 0x31,-    0x41, 0x4F, 0x2C, 0xFA, 0xED, 0x59, 0xCB, 0x9A-  },-  {-    0x8D, 0x6C, 0xF8, 0x7C, 0x08, 0x38, 0x0D, 0x2D,-    0x15, 0x06, 0xEE, 0xE4, 0x6F, 0xD4, 0x22, 0x2D,-    0x21, 0xD8, 0xC0, 0x4E, 0x58, 0x5F, 0xBF, 0xD0,-    0x82, 0x69, 0xC9, 0x8F, 0x70, 0x28, 0x33, 0xA1,-    0x56, 0x32, 0x6A, 0x07, 0x24, 0x65, 0x64, 0x00,-    0xEE, 0x09, 0x35, 0x1D, 0x57, 0xB4, 0x40, 0x17,-    0x5E, 0x2A, 0x5D, 0xE9, 0x3C, 0xC5, 0xF8, 0x0D,-    0xB6, 0xDA, 0xF8, 0x35, 0x76, 0xCF, 0x75, 0xFA-  },-  {-    0xDA, 0x24, 0xBE, 0xDE, 0x38, 0x36, 0x66, 0xD5,-    0x63, 0xEE, 0xED, 0x37, 0xF6, 0x31, 0x9B, 0xAF,-    0x20, 0xD5, 0xC7, 0x5D, 0x16, 0x35, 0xA6, 0xBA,-    0x5E, 0xF4, 0xCF, 0xA1, 0xAC, 0x95, 0x48, 0x7E,-    0x96, 0xF8, 0xC0, 0x8A, 0xF6, 0x00, 0xAA, 0xB8,-    0x7C, 0x98, 0x6E, 0xBA, 0xD4, 0x9F, 0xC7, 0x0A,-    0x58, 0xB4, 0x89, 0x0B, 0x9C, 0x87, 0x6E, 0x09,-    0x10, 0x16, 0xDA, 0xF4, 0x9E, 0x1D, 0x32, 0x2E-  },-  {-    0xF9, 0xD1, 0xD1, 0xB1, 0xE8, 0x7E, 0xA7, 0xAE,-    0x75, 0x3A, 0x02, 0x97, 0x50, 0xCC, 0x1C, 0xF3,-    0xD0, 0x15, 0x7D, 0x41, 0x80, 0x5E, 0x24, 0x5C,-    0x56, 0x17, 0xBB, 0x93, 0x4E, 0x73, 0x2F, 0x0A,-    0xE3, 0x18, 0x0B, 0x78, 0xE0, 0x5B, 0xFE, 0x76,-    0xC7, 0xC3, 0x05, 0x1E, 0x3E, 0x3A, 0xC7, 0x8B,-    0x9B, 0x50, 0xC0, 0x51, 0x42, 0x65, 0x7E, 0x1E,-    0x03, 0x21, 0x5D, 0x6E, 0xC7, 0xBF, 0xD0, 0xFC-  },-  {-    0x11, 0xB7, 0xBC, 0x16, 0x68, 0x03, 0x20, 0x48,-    0xAA, 0x43, 0x34, 0x3D, 0xE4, 0x76, 0x39, 0x5E,-    0x81, 0x4B, 0xBB, 0xC2, 0x23, 0x67, 0x8D, 0xB9,-    0x51, 0xA1, 0xB0, 0x3A, 0x02, 0x1E, 0xFA, 0xC9,-    0x48, 0xCF, 0xBE, 0x21, 0x5F, 0x97, 0xFE, 0x9A,-    0x72, 0xA2, 0xF6, 0xBC, 0x03, 0x9E, 0x39, 0x56,-    0xBF, 0xA4, 0x17, 0xC1, 0xA9, 0xF1, 0x0D, 0x6D,-    0x7B, 0xA5, 0xD3, 0xD3, 0x2F, 0xF3, 0x23, 0xE5-  },-  {-    0xB8, 0xD9, 0x00, 0x0E, 0x4F, 0xC2, 0xB0, 0x66,-    0xED, 0xB9, 0x1A, 0xFE, 0xE8, 0xE7, 0xEB, 0x0F,-    0x24, 0xE3, 0xA2, 0x01, 0xDB, 0x8B, 0x67, 0x93,-    0xC0, 0x60, 0x85, 0x81, 0xE6, 0x28, 0xED, 0x0B,-    0xCC, 0x4E, 0x5A, 0xA6, 0x78, 0x79, 0x92, 0xA4,-    0xBC, 0xC4, 0x4E, 0x28, 0x80, 0x93, 0xE6, 0x3E,-    0xE8, 0x3A, 0xBD, 0x0B, 0xC3, 0xEC, 0x6D, 0x09,-    0x34, 0xA6, 0x74, 0xA4, 0xDA, 0x13, 0x83, 0x8A-  },-  {-    0xCE, 0x32, 0x5E, 0x29, 0x4F, 0x9B, 0x67, 0x19,-    0xD6, 0xB6, 0x12, 0x78, 0x27, 0x6A, 0xE0, 0x6A,-    0x25, 0x64, 0xC0, 0x3B, 0xB0, 0xB7, 0x83, 0xFA,-    0xFE, 0x78, 0x5B, 0xDF, 0x89, 0xC7, 0xD5, 0xAC,-    0xD8, 0x3E, 0x78, 0x75, 0x6D, 0x30, 0x1B, 0x44,-    0x56, 0x99, 0x02, 0x4E, 0xAE, 0xB7, 0x7B, 0x54,-    0xD4, 0x77, 0x33, 0x6E, 0xC2, 0xA4, 0xF3, 0x32,-    0xF2, 0xB3, 0xF8, 0x87, 0x65, 0xDD, 0xB0, 0xC3-  },-  {-    0x29, 0xAC, 0xC3, 0x0E, 0x96, 0x03, 0xAE, 0x2F,-    0xCC, 0xF9, 0x0B, 0xF9, 0x7E, 0x6C, 0xC4, 0x63,-    0xEB, 0xE2, 0x8C, 0x1B, 0x2F, 0x9B, 0x4B, 0x76,-    0x5E, 0x70, 0x53, 0x7C, 0x25, 0xC7, 0x02, 0xA2,-    0x9D, 0xCB, 0xFB, 0xF1, 0x4C, 0x99, 0xC5, 0x43,-    0x45, 0xBA, 0x2B, 0x51, 0xF1, 0x7B, 0x77, 0xB5,-    0xF1, 0x5D, 0xB9, 0x2B, 0xBA, 0xD8, 0xFA, 0x95,-    0xC4, 0x71, 0xF5, 0xD0, 0x70, 0xA1, 0x37, 0xCC-  },-  {-    0x33, 0x79, 0xCB, 0xAA, 0xE5, 0x62, 0xA8, 0x7B,-    0x4C, 0x04, 0x25, 0x55, 0x0F, 0xFD, 0xD6, 0xBF,-    0xE1, 0x20, 0x3F, 0x0D, 0x66, 0x6C, 0xC7, 0xEA,-    0x09, 0x5B, 0xE4, 0x07, 0xA5, 0xDF, 0xE6, 0x1E,-    0xE9, 0x14, 0x41, 0xCD, 0x51, 0x54, 0xB3, 0xE5,-    0x3B, 0x4F, 0x5F, 0xB3, 0x1A, 0xD4, 0xC7, 0xA9,-    0xAD, 0x5C, 0x7A, 0xF4, 0xAE, 0x67, 0x9A, 0xA5,-    0x1A, 0x54, 0x00, 0x3A, 0x54, 0xCA, 0x6B, 0x2D-  },-  {-    0x30, 0x95, 0xA3, 0x49, 0xD2, 0x45, 0x70, 0x8C,-    0x7C, 0xF5, 0x50, 0x11, 0x87, 0x03, 0xD7, 0x30,-    0x2C, 0x27, 0xB6, 0x0A, 0xF5, 0xD4, 0xE6, 0x7F,-    0xC9, 0x78, 0xF8, 0xA4, 0xE6, 0x09, 0x53, 0xC7,-    0xA0, 0x4F, 0x92, 0xFC, 0xF4, 0x1A, 0xEE, 0x64,-    0x32, 0x1C, 0xCB, 0x70, 0x7A, 0x89, 0x58, 0x51,-    0x55, 0x2B, 0x1E, 0x37, 0xB0, 0x0B, 0xC5, 0xE6,-    0xB7, 0x2F, 0xA5, 0xBC, 0xEF, 0x9E, 0x3F, 0xFF-  },-  {-    0x07, 0x26, 0x2D, 0x73, 0x8B, 0x09, 0x32, 0x1F,-    0x4D, 0xBC, 0xCE, 0xC4, 0xBB, 0x26, 0xF4, 0x8C,-    0xB0, 0xF0, 0xED, 0x24, 0x6C, 0xE0, 0xB3, 0x1B,-    0x9A, 0x6E, 0x7B, 0xC6, 0x83, 0x04, 0x9F, 0x1F,-    0x3E, 0x55, 0x45, 0xF2, 0x8C, 0xE9, 0x32, 0xDD,-    0x98, 0x5C, 0x5A, 0xB0, 0xF4, 0x3B, 0xD6, 0xDE,-    0x07, 0x70, 0x56, 0x0A, 0xF3, 0x29, 0x06, 0x5E,-    0xD2, 0xE4, 0x9D, 0x34, 0x62, 0x4C, 0x2C, 0xBB-  },-  {-    0xB6, 0x40, 0x5E, 0xCA, 0x8E, 0xE3, 0x31, 0x6C,-    0x87, 0x06, 0x1C, 0xC6, 0xEC, 0x18, 0xDB, 0xA5,-    0x3E, 0x6C, 0x25, 0x0C, 0x63, 0xBA, 0x1F, 0x3B,-    0xAE, 0x9E, 0x55, 0xDD, 0x34, 0x98, 0x03, 0x6A,-    0xF0, 0x8C, 0xD2, 0x72, 0xAA, 0x24, 0xD7, 0x13,-    0xC6, 0x02, 0x0D, 0x77, 0xAB, 0x2F, 0x39, 0x19,-    0xAF, 0x1A, 0x32, 0xF3, 0x07, 0x42, 0x06, 0x18,-    0xAB, 0x97, 0xE7, 0x39, 0x53, 0x99, 0x4F, 0xB4-  },-  {-    0x7E, 0xE6, 0x82, 0xF6, 0x31, 0x48, 0xEE, 0x45,-    0xF6, 0xE5, 0x31, 0x5D, 0xA8, 0x1E, 0x5C, 0x6E,-    0x55, 0x7C, 0x2C, 0x34, 0x64, 0x1F, 0xC5, 0x09,-    0xC7, 0xA5, 0x70, 0x10, 0x88, 0xC3, 0x8A, 0x74,-    0x75, 0x61, 0x68, 0xE2, 0xCD, 0x8D, 0x35, 0x1E,-    0x88, 0xFD, 0x1A, 0x45, 0x1F, 0x36, 0x0A, 0x01,-    0xF5, 0xB2, 0x58, 0x0F, 0x9B, 0x5A, 0x2E, 0x8C,-    0xFC, 0x13, 0x8F, 0x3D, 0xD5, 0x9A, 0x3F, 0xFC-  },-  {-    0x1D, 0x26, 0x3C, 0x17, 0x9D, 0x6B, 0x26, 0x8F,-    0x6F, 0xA0, 0x16, 0xF3, 0xA4, 0xF2, 0x9E, 0x94,-    0x38, 0x91, 0x12, 0x5E, 0xD8, 0x59, 0x3C, 0x81,-    0x25, 0x60, 0x59, 0xF5, 0xA7, 0xB4, 0x4A, 0xF2,-    0xDC, 0xB2, 0x03, 0x0D, 0x17, 0x5C, 0x00, 0xE6,-    0x2E, 0xCA, 0xF7, 0xEE, 0x96, 0x68, 0x2A, 0xA0,-    0x7A, 0xB2, 0x0A, 0x61, 0x10, 0x24, 0xA2, 0x85,-    0x32, 0xB1, 0xC2, 0x5B, 0x86, 0x65, 0x79, 0x02-  },-  {-    0x10, 0x6D, 0x13, 0x2C, 0xBD, 0xB4, 0xCD, 0x25,-    0x97, 0x81, 0x28, 0x46, 0xE2, 0xBC, 0x1B, 0xF7,-    0x32, 0xFE, 0xC5, 0xF0, 0xA5, 0xF6, 0x5D, 0xBB,-    0x39, 0xEC, 0x4E, 0x6D, 0xC6, 0x4A, 0xB2, 0xCE,-    0x6D, 0x24, 0x63, 0x0D, 0x0F, 0x15, 0xA8, 0x05,-    0xC3, 0x54, 0x00, 0x25, 0xD8, 0x4A, 0xFA, 0x98,-    0xE3, 0x67, 0x03, 0xC3, 0xDB, 0xEE, 0x71, 0x3E,-    0x72, 0xDD, 0xE8, 0x46, 0x5B, 0xC1, 0xBE, 0x7E-  },-  {-    0x0E, 0x79, 0x96, 0x82, 0x26, 0x65, 0x06, 0x67,-    0xA8, 0xD8, 0x62, 0xEA, 0x8D, 0xA4, 0x89, 0x1A,-    0xF5, 0x6A, 0x4E, 0x3A, 0x8B, 0x6D, 0x17, 0x50,-    0xE3, 0x94, 0xF0, 0xDE, 0xA7, 0x6D, 0x64, 0x0D,-    0x85, 0x07, 0x7B, 0xCE, 0xC2, 0xCC, 0x86, 0x88,-    0x6E, 0x50, 0x67, 0x51, 0xB4, 0xF6, 0xA5, 0x83,-    0x8F, 0x7F, 0x0B, 0x5F, 0xEF, 0x76, 0x5D, 0x9D,-    0xC9, 0x0D, 0xCD, 0xCB, 0xAF, 0x07, 0x9F, 0x08-  },-  {-    0x52, 0x11, 0x56, 0xA8, 0x2A, 0xB0, 0xC4, 0xE5,-    0x66, 0xE5, 0x84, 0x4D, 0x5E, 0x31, 0xAD, 0x9A,-    0xAF, 0x14, 0x4B, 0xBD, 0x5A, 0x46, 0x4F, 0xDC,-    0xA3, 0x4D, 0xBD, 0x57, 0x17, 0xE8, 0xFF, 0x71,-    0x1D, 0x3F, 0xFE, 0xBB, 0xFA, 0x08, 0x5D, 0x67,-    0xFE, 0x99, 0x6A, 0x34, 0xF6, 0xD3, 0xE4, 0xE6,-    0x0B, 0x13, 0x96, 0xBF, 0x4B, 0x16, 0x10, 0xC2,-    0x63, 0xBD, 0xBB, 0x83, 0x4D, 0x56, 0x08, 0x16-  },-  {-    0x1A, 0xBA, 0x88, 0xBE, 0xFC, 0x55, 0xBC, 0x25,-    0xEF, 0xBC, 0xE0, 0x2D, 0xB8, 0xB9, 0x93, 0x3E,-    0x46, 0xF5, 0x76, 0x61, 0xBA, 0xEA, 0xBE, 0xB2,-    0x1C, 0xC2, 0x57, 0x4D, 0x2A, 0x51, 0x8A, 0x3C,-    0xBA, 0x5D, 0xC5, 0xA3, 0x8E, 0x49, 0x71, 0x34,-    0x40, 0xB2, 0x5F, 0x9C, 0x74, 0x4E, 0x75, 0xF6,-    0xB8, 0x5C, 0x9D, 0x8F, 0x46, 0x81, 0xF6, 0x76,-    0x16, 0x0F, 0x61, 0x05, 0x35, 0x7B, 0x84, 0x06-  },-  {-    0x5A, 0x99, 0x49, 0xFC, 0xB2, 0xC4, 0x73, 0xCD,-    0xA9, 0x68, 0xAC, 0x1B, 0x5D, 0x08, 0x56, 0x6D,-    0xC2, 0xD8, 0x16, 0xD9, 0x60, 0xF5, 0x7E, 0x63,-    0xB8, 0x98, 0xFA, 0x70, 0x1C, 0xF8, 0xEB, 0xD3,-    0xF5, 0x9B, 0x12, 0x4D, 0x95, 0xBF, 0xBB, 0xED,-    0xC5, 0xF1, 0xCF, 0x0E, 0x17, 0xD5, 0xEA, 0xED,-    0x0C, 0x02, 0xC5, 0x0B, 0x69, 0xD8, 0xA4, 0x02,-    0xCA, 0xBC, 0xCA, 0x44, 0x33, 0xB5, 0x1F, 0xD4-  },-  {-    0xB0, 0xCE, 0xAD, 0x09, 0x80, 0x7C, 0x67, 0x2A,-    0xF2, 0xEB, 0x2B, 0x0F, 0x06, 0xDD, 0xE4, 0x6C,-    0xF5, 0x37, 0x0E, 0x15, 0xA4, 0x09, 0x6B, 0x1A,-    0x7D, 0x7C, 0xBB, 0x36, 0xEC, 0x31, 0xC2, 0x05,-    0xFB, 0xEF, 0xCA, 0x00, 0xB7, 0xA4, 0x16, 0x2F,-    0xA8, 0x9F, 0xB4, 0xFB, 0x3E, 0xB7, 0x8D, 0x79,-    0x77, 0x0C, 0x23, 0xF4, 0x4E, 0x72, 0x06, 0x66,-    0x4C, 0xE3, 0xCD, 0x93, 0x1C, 0x29, 0x1E, 0x5D-  },-  {-    0xBB, 0x66, 0x64, 0x93, 0x1E, 0xC9, 0x70, 0x44,-    0xE4, 0x5B, 0x2A, 0xE4, 0x20, 0xAE, 0x1C, 0x55,-    0x1A, 0x88, 0x74, 0xBC, 0x93, 0x7D, 0x08, 0xE9,-    0x69, 0x39, 0x9C, 0x39, 0x64, 0xEB, 0xDB, 0xA8,-    0x34, 0x6C, 0xDD, 0x5D, 0x09, 0xCA, 0xAF, 0xE4,-    0xC2, 0x8B, 0xA7, 0xEC, 0x78, 0x81, 0x91, 0xCE,-    0xCA, 0x65, 0xDD, 0xD6, 0xF9, 0x5F, 0x18, 0x58,-    0x3E, 0x04, 0x0D, 0x0F, 0x30, 0xD0, 0x36, 0x4D-  },-  {-    0x65, 0xBC, 0x77, 0x0A, 0x5F, 0xAA, 0x37, 0x92,-    0x36, 0x98, 0x03, 0x68, 0x3E, 0x84, 0x4B, 0x0B,-    0xE7, 0xEE, 0x96, 0xF2, 0x9F, 0x6D, 0x6A, 0x35,-    0x56, 0x80, 0x06, 0xBD, 0x55, 0x90, 0xF9, 0xA4,-    0xEF, 0x63, 0x9B, 0x7A, 0x80, 0x61, 0xC7, 0xB0,-    0x42, 0x4B, 0x66, 0xB6, 0x0A, 0xC3, 0x4A, 0xF3,-    0x11, 0x99, 0x05, 0xF3, 0x3A, 0x9D, 0x8C, 0x3A,-    0xE1, 0x83, 0x82, 0xCA, 0x9B, 0x68, 0x99, 0x00-  },-  {-    0xEA, 0x9B, 0x4D, 0xCA, 0x33, 0x33, 0x36, 0xAA,-    0xF8, 0x39, 0xA4, 0x5C, 0x6E, 0xAA, 0x48, 0xB8,-    0xCB, 0x4C, 0x7D, 0xDA, 0xBF, 0xFE, 0xA4, 0xF6,-    0x43, 0xD6, 0x35, 0x7E, 0xA6, 0x62, 0x8A, 0x48,-    0x0A, 0x5B, 0x45, 0xF2, 0xB0, 0x52, 0xC1, 0xB0,-    0x7D, 0x1F, 0xED, 0xCA, 0x91, 0x8B, 0x6F, 0x11,-    0x39, 0xD8, 0x0F, 0x74, 0xC2, 0x45, 0x10, 0xDC,-    0xBA, 0xA4, 0xBE, 0x70, 0xEA, 0xCC, 0x1B, 0x06-  },-  {-    0xE6, 0x34, 0x2F, 0xB4, 0xA7, 0x80, 0xAD, 0x97,-    0x5D, 0x0E, 0x24, 0xBC, 0xE1, 0x49, 0x98, 0x9B,-    0x91, 0xD3, 0x60, 0x55, 0x7E, 0x87, 0x99, 0x4F,-    0x6B, 0x45, 0x7B, 0x89, 0x55, 0x75, 0xCC, 0x02,-    0xD0, 0xC1, 0x5B, 0xAD, 0x3C, 0xE7, 0x57, 0x7F,-    0x4C, 0x63, 0x92, 0x7F, 0xF1, 0x3F, 0x3E, 0x38,-    0x1F, 0xF7, 0xE7, 0x2B, 0xDB, 0xE7, 0x45, 0x32,-    0x48, 0x44, 0xA9, 0xD2, 0x7E, 0x3F, 0x1C, 0x01-  },-  {-    0x3E, 0x20, 0x9C, 0x9B, 0x33, 0xE8, 0xE4, 0x61,-    0x17, 0x8A, 0xB4, 0x6B, 0x1C, 0x64, 0xB4, 0x9A,-    0x07, 0xFB, 0x74, 0x5F, 0x1C, 0x8B, 0xC9, 0x5F,-    0xBF, 0xB9, 0x4C, 0x6B, 0x87, 0xC6, 0x95, 0x16,-    0x65, 0x1B, 0x26, 0x4E, 0xF9, 0x80, 0x93, 0x7F,-    0xAD, 0x41, 0x23, 0x8B, 0x91, 0xDD, 0xC0, 0x11,-    0xA5, 0xDD, 0x77, 0x7C, 0x7E, 0xFD, 0x44, 0x94,-    0xB4, 0xB6, 0xEC, 0xD3, 0xA9, 0xC2, 0x2A, 0xC0-  },-  {-    0xFD, 0x6A, 0x3D, 0x5B, 0x18, 0x75, 0xD8, 0x04,-    0x86, 0xD6, 0xE6, 0x96, 0x94, 0xA5, 0x6D, 0xBB,-    0x04, 0xA9, 0x9A, 0x4D, 0x05, 0x1F, 0x15, 0xDB,-    0x26, 0x89, 0x77, 0x6B, 0xA1, 0xC4, 0x88, 0x2E,-    0x6D, 0x46, 0x2A, 0x60, 0x3B, 0x70, 0x15, 0xDC,-    0x9F, 0x4B, 0x74, 0x50, 0xF0, 0x53, 0x94, 0x30,-    0x3B, 0x86, 0x52, 0xCF, 0xB4, 0x04, 0xA2, 0x66,-    0x96, 0x2C, 0x41, 0xBA, 0xE6, 0xE1, 0x8A, 0x94-  },-  {-    0x95, 0x1E, 0x27, 0x51, 0x7E, 0x6B, 0xAD, 0x9E,-    0x41, 0x95, 0xFC, 0x86, 0x71, 0xDE, 0xE3, 0xE7,-    0xE9, 0xBE, 0x69, 0xCE, 0xE1, 0x42, 0x2C, 0xB9,-    0xFE, 0xCF, 0xCE, 0x0D, 0xBA, 0x87, 0x5F, 0x7B,-    0x31, 0x0B, 0x93, 0xEE, 0x3A, 0x3D, 0x55, 0x8F,-    0x94, 0x1F, 0x63, 0x5F, 0x66, 0x8F, 0xF8, 0x32,-    0xD2, 0xC1, 0xD0, 0x33, 0xC5, 0xE2, 0xF0, 0x99,-    0x7E, 0x4C, 0x66, 0xF1, 0x47, 0x34, 0x4E, 0x02-  },-  {-    0x8E, 0xBA, 0x2F, 0x87, 0x4F, 0x1A, 0xE8, 0x40,-    0x41, 0x90, 0x3C, 0x7C, 0x42, 0x53, 0xC8, 0x22,-    0x92, 0x53, 0x0F, 0xC8, 0x50, 0x95, 0x50, 0xBF,-    0xDC, 0x34, 0xC9, 0x5C, 0x7E, 0x28, 0x89, 0xD5,-    0x65, 0x0B, 0x0A, 0xD8, 0xCB, 0x98, 0x8E, 0x5C,-    0x48, 0x94, 0xCB, 0x87, 0xFB, 0xFB, 0xB1, 0x96,-    0x12, 0xEA, 0x93, 0xCC, 0xC4, 0xC5, 0xCA, 0xD1,-    0x71, 0x58, 0xB9, 0x76, 0x34, 0x64, 0xB4, 0x92-  },-  {-    0x16, 0xF7, 0x12, 0xEA, 0xA1, 0xB7, 0xC6, 0x35,-    0x47, 0x19, 0xA8, 0xE7, 0xDB, 0xDF, 0xAF, 0x55,-    0xE4, 0x06, 0x3A, 0x4D, 0x27, 0x7D, 0x94, 0x75,-    0x50, 0x01, 0x9B, 0x38, 0xDF, 0xB5, 0x64, 0x83,-    0x09, 0x11, 0x05, 0x7D, 0x50, 0x50, 0x61, 0x36,-    0xE2, 0x39, 0x4C, 0x3B, 0x28, 0x94, 0x5C, 0xC9,-    0x64, 0x96, 0x7D, 0x54, 0xE3, 0x00, 0x0C, 0x21,-    0x81, 0x62, 0x6C, 0xFB, 0x9B, 0x73, 0xEF, 0xD2-  },-  {-    0xC3, 0x96, 0x39, 0xE7, 0xD5, 0xC7, 0xFB, 0x8C,-    0xDD, 0x0F, 0xD3, 0xE6, 0xA5, 0x20, 0x96, 0x03,-    0x94, 0x37, 0x12, 0x2F, 0x21, 0xC7, 0x8F, 0x16,-    0x79, 0xCE, 0xA9, 0xD7, 0x8A, 0x73, 0x4C, 0x56,-    0xEC, 0xBE, 0xB2, 0x86, 0x54, 0xB4, 0xF1, 0x8E,-    0x34, 0x2C, 0x33, 0x1F, 0x6F, 0x72, 0x29, 0xEC,-    0x4B, 0x4B, 0xC2, 0x81, 0xB2, 0xD8, 0x0A, 0x6E,-    0xB5, 0x00, 0x43, 0xF3, 0x17, 0x96, 0xC8, 0x8C-  },-  {-    0x72, 0xD0, 0x81, 0xAF, 0x99, 0xF8, 0xA1, 0x73,-    0xDC, 0xC9, 0xA0, 0xAC, 0x4E, 0xB3, 0x55, 0x74,-    0x05, 0x63, 0x9A, 0x29, 0x08, 0x4B, 0x54, 0xA4,-    0x01, 0x72, 0x91, 0x2A, 0x2F, 0x8A, 0x39, 0x51,-    0x29, 0xD5, 0x53, 0x6F, 0x09, 0x18, 0xE9, 0x02,-    0xF9, 0xE8, 0xFA, 0x60, 0x00, 0x99, 0x5F, 0x41,-    0x68, 0xDD, 0xC5, 0xF8, 0x93, 0x01, 0x1B, 0xE6,-    0xA0, 0xDB, 0xC9, 0xB8, 0xA1, 0xA3, 0xF5, 0xBB-  },-  {-    0xC1, 0x1A, 0xA8, 0x1E, 0x5E, 0xFD, 0x24, 0xD5,-    0xFC, 0x27, 0xEE, 0x58, 0x6C, 0xFD, 0x88, 0x47,-    0xFB, 0xB0, 0xE2, 0x76, 0x01, 0xCC, 0xEC, 0xE5,-    0xEC, 0xCA, 0x01, 0x98, 0xE3, 0xC7, 0x76, 0x53,-    0x93, 0xBB, 0x74, 0x45, 0x7C, 0x7E, 0x7A, 0x27,-    0xEB, 0x91, 0x70, 0x35, 0x0E, 0x1F, 0xB5, 0x38,-    0x57, 0x17, 0x75, 0x06, 0xBE, 0x3E, 0x76, 0x2C,-    0xC0, 0xF1, 0x4D, 0x8C, 0x3A, 0xFE, 0x90, 0x77-  },-  {-    0xC2, 0x8F, 0x21, 0x50, 0xB4, 0x52, 0xE6, 0xC0,-    0xC4, 0x24, 0xBC, 0xDE, 0x6F, 0x8D, 0x72, 0x00,-    0x7F, 0x93, 0x10, 0xFE, 0xD7, 0xF2, 0xF8, 0x7D,-    0xE0, 0xDB, 0xB6, 0x4F, 0x44, 0x79, 0xD6, 0xC1,-    0x44, 0x1B, 0xA6, 0x6F, 0x44, 0xB2, 0xAC, 0xCE,-    0xE6, 0x16, 0x09, 0x17, 0x7E, 0xD3, 0x40, 0x12,-    0x8B, 0x40, 0x7E, 0xCE, 0xC7, 0xC6, 0x4B, 0xBE,-    0x50, 0xD6, 0x3D, 0x22, 0xD8, 0x62, 0x77, 0x27-  },-  {-    0xF6, 0x3D, 0x88, 0x12, 0x28, 0x77, 0xEC, 0x30,-    0xB8, 0xC8, 0xB0, 0x0D, 0x22, 0xE8, 0x90, 0x00,-    0xA9, 0x66, 0x42, 0x61, 0x12, 0xBD, 0x44, 0x16,-    0x6E, 0x2F, 0x52, 0x5B, 0x76, 0x9C, 0xCB, 0xE9,-    0xB2, 0x86, 0xD4, 0x37, 0xA0, 0x12, 0x91, 0x30,-    0xDD, 0xE1, 0xA8, 0x6C, 0x43, 0xE0, 0x4B, 0xED,-    0xB5, 0x94, 0xE6, 0x71, 0xD9, 0x82, 0x83, 0xAF,-    0xE6, 0x4C, 0xE3, 0x31, 0xDE, 0x98, 0x28, 0xFD-  },-  {-    0x34, 0x8B, 0x05, 0x32, 0x88, 0x0B, 0x88, 0xA6,-    0x61, 0x4A, 0x8D, 0x74, 0x08, 0xC3, 0xF9, 0x13,-    0x35, 0x7F, 0xBB, 0x60, 0xE9, 0x95, 0xC6, 0x02,-    0x05, 0xBE, 0x91, 0x39, 0xE7, 0x49, 0x98, 0xAE,-    0xDE, 0x7F, 0x45, 0x81, 0xE4, 0x2F, 0x6B, 0x52,-    0x69, 0x8F, 0x7F, 0xA1, 0x21, 0x97, 0x08, 0xC1,-    0x44, 0x98, 0x06, 0x7F, 0xD1, 0xE0, 0x95, 0x02,-    0xDE, 0x83, 0xA7, 0x7D, 0xD2, 0x81, 0x15, 0x0C-  },-  {-    0x51, 0x33, 0xDC, 0x8B, 0xEF, 0x72, 0x53, 0x59,-    0xDF, 0xF5, 0x97, 0x92, 0xD8, 0x5E, 0xAF, 0x75,-    0xB7, 0xE1, 0xDC, 0xD1, 0x97, 0x8B, 0x01, 0xC3,-    0x5B, 0x1B, 0x85, 0xFC, 0xEB, 0xC6, 0x33, 0x88,-    0xAD, 0x99, 0xA1, 0x7B, 0x63, 0x46, 0xA2, 0x17,-    0xDC, 0x1A, 0x96, 0x22, 0xEB, 0xD1, 0x22, 0xEC,-    0xF6, 0x91, 0x3C, 0x4D, 0x31, 0xA6, 0xB5, 0x2A,-    0x69, 0x5B, 0x86, 0xAF, 0x00, 0xD7, 0x41, 0xA0-  },-  {-    0x27, 0x53, 0xC4, 0xC0, 0xE9, 0x8E, 0xCA, 0xD8,-    0x06, 0xE8, 0x87, 0x80, 0xEC, 0x27, 0xFC, 0xCD,-    0x0F, 0x5C, 0x1A, 0xB5, 0x47, 0xF9, 0xE4, 0xBF,-    0x16, 0x59, 0xD1, 0x92, 0xC2, 0x3A, 0xA2, 0xCC,-    0x97, 0x1B, 0x58, 0xB6, 0x80, 0x25, 0x80, 0xBA,-    0xEF, 0x8A, 0xDC, 0x3B, 0x77, 0x6E, 0xF7, 0x08,-    0x6B, 0x25, 0x45, 0xC2, 0x98, 0x7F, 0x34, 0x8E,-    0xE3, 0x71, 0x9C, 0xDE, 0xF2, 0x58, 0xC4, 0x03-  },-  {-    0xB1, 0x66, 0x35, 0x73, 0xCE, 0x4B, 0x9D, 0x8C,-    0xAE, 0xFC, 0x86, 0x50, 0x12, 0xF3, 0xE3, 0x97,-    0x14, 0xB9, 0x89, 0x8A, 0x5D, 0xA6, 0xCE, 0x17,-    0xC2, 0x5A, 0x6A, 0x47, 0x93, 0x1A, 0x9D, 0xDB,-    0x9B, 0xBE, 0x98, 0xAD, 0xAA, 0x55, 0x3B, 0xEE,-    0xD4, 0x36, 0xE8, 0x95, 0x78, 0x45, 0x54, 0x16,-    0xC2, 0xA5, 0x2A, 0x52, 0x5C, 0xF2, 0x86, 0x2B,-    0x8D, 0x1D, 0x49, 0xA2, 0x53, 0x1B, 0x73, 0x91-  },-  {-    0x64, 0xF5, 0x8B, 0xD6, 0xBF, 0xC8, 0x56, 0xF5,-    0xE8, 0x73, 0xB2, 0xA2, 0x95, 0x6E, 0xA0, 0xED,-    0xA0, 0xD6, 0xDB, 0x0D, 0xA3, 0x9C, 0x8C, 0x7F,-    0xC6, 0x7C, 0x9F, 0x9F, 0xEE, 0xFC, 0xFF, 0x30,-    0x72, 0xCD, 0xF9, 0xE6, 0xEA, 0x37, 0xF6, 0x9A,-    0x44, 0xF0, 0xC6, 0x1A, 0xA0, 0xDA, 0x36, 0x93,-    0xC2, 0xDB, 0x5B, 0x54, 0x96, 0x0C, 0x02, 0x81,-    0xA0, 0x88, 0x15, 0x1D, 0xB4, 0x2B, 0x11, 0xE8-  },-  {-    0x07, 0x64, 0xC7, 0xBE, 0x28, 0x12, 0x5D, 0x90,-    0x65, 0xC4, 0xB9, 0x8A, 0x69, 0xD6, 0x0A, 0xED,-    0xE7, 0x03, 0x54, 0x7C, 0x66, 0xA1, 0x2E, 0x17,-    0xE1, 0xC6, 0x18, 0x99, 0x41, 0x32, 0xF5, 0xEF,-    0x82, 0x48, 0x2C, 0x1E, 0x3F, 0xE3, 0x14, 0x6C,-    0xC6, 0x53, 0x76, 0xCC, 0x10, 0x9F, 0x01, 0x38,-    0xED, 0x9A, 0x80, 0xE4, 0x9F, 0x1F, 0x3C, 0x7D,-    0x61, 0x0D, 0x2F, 0x24, 0x32, 0xF2, 0x06, 0x05-  },-  {-    0xF7, 0x48, 0x78, 0x43, 0x98, 0xA2, 0xFF, 0x03,-    0xEB, 0xEB, 0x07, 0xE1, 0x55, 0xE6, 0x61, 0x16,-    0xA8, 0x39, 0x74, 0x1A, 0x33, 0x6E, 0x32, 0xDA,-    0x71, 0xEC, 0x69, 0x60, 0x01, 0xF0, 0xAD, 0x1B,-    0x25, 0xCD, 0x48, 0xC6, 0x9C, 0xFC, 0xA7, 0x26,-    0x5E, 0xCA, 0x1D, 0xD7, 0x19, 0x04, 0xA0, 0xCE,-    0x74, 0x8A, 0xC4, 0x12, 0x4F, 0x35, 0x71, 0x07,-    0x6D, 0xFA, 0x71, 0x16, 0xA9, 0xCF, 0x00, 0xE9-  },-  {-    0x3F, 0x0D, 0xBC, 0x01, 0x86, 0xBC, 0xEB, 0x6B,-    0x78, 0x5B, 0xA7, 0x8D, 0x2A, 0x2A, 0x01, 0x3C,-    0x91, 0x0B, 0xE1, 0x57, 0xBD, 0xAF, 0xFA, 0xE8,-    0x1B, 0xB6, 0x66, 0x3B, 0x1A, 0x73, 0x72, 0x2F,-    0x7F, 0x12, 0x28, 0x79, 0x5F, 0x3E, 0xCA, 0xDA,-    0x87, 0xCF, 0x6E, 0xF0, 0x07, 0x84, 0x74, 0xAF,-    0x73, 0xF3, 0x1E, 0xCA, 0x0C, 0xC2, 0x00, 0xED,-    0x97, 0x5B, 0x68, 0x93, 0xF7, 0x61, 0xCB, 0x6D-  },-  {-    0xD4, 0x76, 0x2C, 0xD4, 0x59, 0x98, 0x76, 0xCA,-    0x75, 0xB2, 0xB8, 0xFE, 0x24, 0x99, 0x44, 0xDB,-    0xD2, 0x7A, 0xCE, 0x74, 0x1F, 0xDA, 0xB9, 0x36,-    0x16, 0xCB, 0xC6, 0xE4, 0x25, 0x46, 0x0F, 0xEB,-    0x51, 0xD4, 0xE7, 0xAD, 0xCC, 0x38, 0x18, 0x0E,-    0x7F, 0xC4, 0x7C, 0x89, 0x02, 0x4A, 0x7F, 0x56,-    0x19, 0x1A, 0xDB, 0x87, 0x8D, 0xFD, 0xE4, 0xEA,-    0xD6, 0x22, 0x23, 0xF5, 0xA2, 0x61, 0x0E, 0xFE-  },-  {-    0xCD, 0x36, 0xB3, 0xD5, 0xB4, 0xC9, 0x1B, 0x90,-    0xFC, 0xBB, 0xA7, 0x95, 0x13, 0xCF, 0xEE, 0x19,-    0x07, 0xD8, 0x64, 0x5A, 0x16, 0x2A, 0xFD, 0x0C,-    0xD4, 0xCF, 0x41, 0x92, 0xD4, 0xA5, 0xF4, 0xC8,-    0x92, 0x18, 0x3A, 0x8E, 0xAC, 0xDB, 0x2B, 0x6B,-    0x6A, 0x9D, 0x9A, 0xA8, 0xC1, 0x1A, 0xC1, 0xB2,-    0x61, 0xB3, 0x80, 0xDB, 0xEE, 0x24, 0xCA, 0x46,-    0x8F, 0x1B, 0xFD, 0x04, 0x3C, 0x58, 0xEE, 0xFE-  },-  {-    0x98, 0x59, 0x34, 0x52, 0x28, 0x16, 0x61, 0xA5,-    0x3C, 0x48, 0xA9, 0xD8, 0xCD, 0x79, 0x08, 0x26,-    0xC1, 0xA1, 0xCE, 0x56, 0x77, 0x38, 0x05, 0x3D,-    0x0B, 0xEE, 0x4A, 0x91, 0xA3, 0xD5, 0xBD, 0x92,-    0xEE, 0xFD, 0xBA, 0xBE, 0xBE, 0x32, 0x04, 0xF2,-    0x03, 0x1C, 0xA5, 0xF7, 0x81, 0xBD, 0xA9, 0x9E,-    0xF5, 0xD8, 0xAE, 0x56, 0xE5, 0xB0, 0x4A, 0x9E,-    0x1E, 0xCD, 0x21, 0xB0, 0xEB, 0x05, 0xD3, 0xE1-  },-  {-    0x77, 0x1F, 0x57, 0xDD, 0x27, 0x75, 0xCC, 0xDA,-    0xB5, 0x59, 0x21, 0xD3, 0xE8, 0xE3, 0x0C, 0xCF,-    0x48, 0x4D, 0x61, 0xFE, 0x1C, 0x1B, 0x9C, 0x2A,-    0xE8, 0x19, 0xD0, 0xFB, 0x2A, 0x12, 0xFA, 0xB9,-    0xBE, 0x70, 0xC4, 0xA7, 0xA1, 0x38, 0xDA, 0x84,-    0xE8, 0x28, 0x04, 0x35, 0xDA, 0xAD, 0xE5, 0xBB,-    0xE6, 0x6A, 0xF0, 0x83, 0x6A, 0x15, 0x4F, 0x81,-    0x7F, 0xB1, 0x7F, 0x33, 0x97, 0xE7, 0x25, 0xA3-  },-  {-    0xC6, 0x08, 0x97, 0xC6, 0xF8, 0x28, 0xE2, 0x1F,-    0x16, 0xFB, 0xB5, 0xF1, 0x5B, 0x32, 0x3F, 0x87,-    0xB6, 0xC8, 0x95, 0x5E, 0xAB, 0xF1, 0xD3, 0x80,-    0x61, 0xF7, 0x07, 0xF6, 0x08, 0xAB, 0xDD, 0x99,-    0x3F, 0xAC, 0x30, 0x70, 0x63, 0x3E, 0x28, 0x6C,-    0xF8, 0x33, 0x9C, 0xE2, 0x95, 0xDD, 0x35, 0x2D,-    0xF4, 0xB4, 0xB4, 0x0B, 0x2F, 0x29, 0xDA, 0x1D,-    0xD5, 0x0B, 0x3A, 0x05, 0xD0, 0x79, 0xE6, 0xBB-  },-  {-    0x82, 0x10, 0xCD, 0x2C, 0x2D, 0x3B, 0x13, 0x5C,-    0x2C, 0xF0, 0x7F, 0xA0, 0xD1, 0x43, 0x3C, 0xD7,-    0x71, 0xF3, 0x25, 0xD0, 0x75, 0xC6, 0x46, 0x9D,-    0x9C, 0x7F, 0x1B, 0xA0, 0x94, 0x3C, 0xD4, 0xAB,-    0x09, 0x80, 0x8C, 0xAB, 0xF4, 0xAC, 0xB9, 0xCE,-    0x5B, 0xB8, 0x8B, 0x49, 0x89, 0x29, 0xB4, 0xB8,-    0x47, 0xF6, 0x81, 0xAD, 0x2C, 0x49, 0x0D, 0x04,-    0x2D, 0xB2, 0xAE, 0xC9, 0x42, 0x14, 0xB0, 0x6B-  },-  {-    0x1D, 0x4E, 0xDF, 0xFF, 0xD8, 0xFD, 0x80, 0xF7,-    0xE4, 0x10, 0x78, 0x40, 0xFA, 0x3A, 0xA3, 0x1E,-    0x32, 0x59, 0x84, 0x91, 0xE4, 0xAF, 0x70, 0x13,-    0xC1, 0x97, 0xA6, 0x5B, 0x7F, 0x36, 0xDD, 0x3A,-    0xC4, 0xB4, 0x78, 0x45, 0x61, 0x11, 0xCD, 0x43,-    0x09, 0xD9, 0x24, 0x35, 0x10, 0x78, 0x2F, 0xA3,-    0x1B, 0x7C, 0x4C, 0x95, 0xFA, 0x95, 0x15, 0x20,-    0xD0, 0x20, 0xEB, 0x7E, 0x5C, 0x36, 0xE4, 0xEF-  },-  {-    0xAF, 0x8E, 0x6E, 0x91, 0xFA, 0xB4, 0x6C, 0xE4,-    0x87, 0x3E, 0x1A, 0x50, 0xA8, 0xEF, 0x44, 0x8C,-    0xC2, 0x91, 0x21, 0xF7, 0xF7, 0x4D, 0xEE, 0xF3,-    0x4A, 0x71, 0xEF, 0x89, 0xCC, 0x00, 0xD9, 0x27,-    0x4B, 0xC6, 0xC2, 0x45, 0x4B, 0xBB, 0x32, 0x30,-    0xD8, 0xB2, 0xEC, 0x94, 0xC6, 0x2B, 0x1D, 0xEC,-    0x85, 0xF3, 0x59, 0x3B, 0xFA, 0x30, 0xEA, 0x6F,-    0x7A, 0x44, 0xD7, 0xC0, 0x94, 0x65, 0xA2, 0x53-  },-  {-    0x29, 0xFD, 0x38, 0x4E, 0xD4, 0x90, 0x6F, 0x2D,-    0x13, 0xAA, 0x9F, 0xE7, 0xAF, 0x90, 0x59, 0x90,-    0x93, 0x8B, 0xED, 0x80, 0x7F, 0x18, 0x32, 0x45,-    0x4A, 0x37, 0x2A, 0xB4, 0x12, 0xEE, 0xA1, 0xF5,-    0x62, 0x5A, 0x1F, 0xCC, 0x9A, 0xC8, 0x34, 0x3B,-    0x7C, 0x67, 0xC5, 0xAB, 0xA6, 0xE0, 0xB1, 0xCC,-    0x46, 0x44, 0x65, 0x49, 0x13, 0x69, 0x2C, 0x6B,-    0x39, 0xEB, 0x91, 0x87, 0xCE, 0xAC, 0xD3, 0xEC-  },-  {-    0xA2, 0x68, 0xC7, 0x88, 0x5D, 0x98, 0x74, 0xA5,-    0x1C, 0x44, 0xDF, 0xFE, 0xD8, 0xEA, 0x53, 0xE9,-    0x4F, 0x78, 0x45, 0x6E, 0x0B, 0x2E, 0xD9, 0x9F,-    0xF5, 0xA3, 0x92, 0x47, 0x60, 0x81, 0x38, 0x26,-    0xD9, 0x60, 0xA1, 0x5E, 0xDB, 0xED, 0xBB, 0x5D,-    0xE5, 0x22, 0x6B, 0xA4, 0xB0, 0x74, 0xE7, 0x1B,-    0x05, 0xC5, 0x5B, 0x97, 0x56, 0xBB, 0x79, 0xE5,-    0x5C, 0x02, 0x75, 0x4C, 0x2C, 0x7B, 0x6C, 0x8A-  },-  {-    0x0C, 0xF8, 0x54, 0x54, 0x88, 0xD5, 0x6A, 0x86,-    0x81, 0x7C, 0xD7, 0xEC, 0xB1, 0x0F, 0x71, 0x16,-    0xB7, 0xEA, 0x53, 0x0A, 0x45, 0xB6, 0xEA, 0x49,-    0x7B, 0x6C, 0x72, 0xC9, 0x97, 0xE0, 0x9E, 0x3D,-    0x0D, 0xA8, 0x69, 0x8F, 0x46, 0xBB, 0x00, 0x6F,-    0xC9, 0x77, 0xC2, 0xCD, 0x3D, 0x11, 0x77, 0x46,-    0x3A, 0xC9, 0x05, 0x7F, 0xDD, 0x16, 0x62, 0xC8,-    0x5D, 0x0C, 0x12, 0x64, 0x43, 0xC1, 0x04, 0x73-  },-  {-    0xB3, 0x96, 0x14, 0x26, 0x8F, 0xDD, 0x87, 0x81,-    0x51, 0x5E, 0x2C, 0xFE, 0xBF, 0x89, 0xB4, 0xD5,-    0x40, 0x2B, 0xAB, 0x10, 0xC2, 0x26, 0xE6, 0x34,-    0x4E, 0x6B, 0x9A, 0xE0, 0x00, 0xFB, 0x0D, 0x6C,-    0x79, 0xCB, 0x2F, 0x3E, 0xC8, 0x0E, 0x80, 0xEA,-    0xEB, 0x19, 0x80, 0xD2, 0xF8, 0x69, 0x89, 0x16,-    0xBD, 0x2E, 0x9F, 0x74, 0x72, 0x36, 0x65, 0x51,-    0x16, 0x64, 0x9C, 0xD3, 0xCA, 0x23, 0xA8, 0x37-  },-  {-    0x74, 0xBE, 0xF0, 0x92, 0xFC, 0x6F, 0x1E, 0x5D,-    0xBA, 0x36, 0x63, 0xA3, 0xFB, 0x00, 0x3B, 0x2A,-    0x5B, 0xA2, 0x57, 0x49, 0x65, 0x36, 0xD9, 0x9F,-    0x62, 0xB9, 0xD7, 0x3F, 0x8F, 0x9E, 0xB3, 0xCE,-    0x9F, 0xF3, 0xEE, 0xC7, 0x09, 0xEB, 0x88, 0x36,-    0x55, 0xEC, 0x9E, 0xB8, 0x96, 0xB9, 0x12, 0x8F,-    0x2A, 0xFC, 0x89, 0xCF, 0x7D, 0x1A, 0xB5, 0x8A,-    0x72, 0xF4, 0xA3, 0xBF, 0x03, 0x4D, 0x2B, 0x4A-  },-  {-    0x3A, 0x98, 0x8D, 0x38, 0xD7, 0x56, 0x11, 0xF3,-    0xEF, 0x38, 0xB8, 0x77, 0x49, 0x80, 0xB3, 0x3E,-    0x57, 0x3B, 0x6C, 0x57, 0xBE, 0xE0, 0x46, 0x9B,-    0xA5, 0xEE, 0xD9, 0xB4, 0x4F, 0x29, 0x94, 0x5E,-    0x73, 0x47, 0x96, 0x7F, 0xBA, 0x2C, 0x16, 0x2E,-    0x1C, 0x3B, 0xE7, 0xF3, 0x10, 0xF2, 0xF7, 0x5E,-    0xE2, 0x38, 0x1E, 0x7B, 0xFD, 0x6B, 0x3F, 0x0B,-    0xAE, 0xA8, 0xD9, 0x5D, 0xFB, 0x1D, 0xAF, 0xB1-  },-  {-    0x58, 0xAE, 0xDF, 0xCE, 0x6F, 0x67, 0xDD, 0xC8,-    0x5A, 0x28, 0xC9, 0x92, 0xF1, 0xC0, 0xBD, 0x09,-    0x69, 0xF0, 0x41, 0xE6, 0x6F, 0x1E, 0xE8, 0x80,-    0x20, 0xA1, 0x25, 0xCB, 0xFC, 0xFE, 0xBC, 0xD6,-    0x17, 0x09, 0xC9, 0xC4, 0xEB, 0xA1, 0x92, 0xC1,-    0x5E, 0x69, 0xF0, 0x20, 0xD4, 0x62, 0x48, 0x60,-    0x19, 0xFA, 0x8D, 0xEA, 0x0C, 0xD7, 0xA4, 0x29,-    0x21, 0xA1, 0x9D, 0x2F, 0xE5, 0x46, 0xD4, 0x3D-  },-  {-    0x93, 0x47, 0xBD, 0x29, 0x14, 0x73, 0xE6, 0xB4,-    0xE3, 0x68, 0x43, 0x7B, 0x8E, 0x56, 0x1E, 0x06,-    0x5F, 0x64, 0x9A, 0x6D, 0x8A, 0xDA, 0x47, 0x9A,-    0xD0, 0x9B, 0x19, 0x99, 0xA8, 0xF2, 0x6B, 0x91,-    0xCF, 0x61, 0x20, 0xFD, 0x3B, 0xFE, 0x01, 0x4E,-    0x83, 0xF2, 0x3A, 0xCF, 0xA4, 0xC0, 0xAD, 0x7B,-    0x37, 0x12, 0xB2, 0xC3, 0xC0, 0x73, 0x32, 0x70,-    0x66, 0x31, 0x12, 0xCC, 0xD9, 0x28, 0x5C, 0xD9-  },-  {-    0xB3, 0x21, 0x63, 0xE7, 0xC5, 0xDB, 0xB5, 0xF5,-    0x1F, 0xDC, 0x11, 0xD2, 0xEA, 0xC8, 0x75, 0xEF,-    0xBB, 0xCB, 0x7E, 0x76, 0x99, 0x09, 0x0A, 0x7E,-    0x7F, 0xF8, 0xA8, 0xD5, 0x07, 0x95, 0xAF, 0x5D,-    0x74, 0xD9, 0xFF, 0x98, 0x54, 0x3E, 0xF8, 0xCD,-    0xF8, 0x9A, 0xC1, 0x3D, 0x04, 0x85, 0x27, 0x87,-    0x56, 0xE0, 0xEF, 0x00, 0xC8, 0x17, 0x74, 0x56,-    0x61, 0xE1, 0xD5, 0x9F, 0xE3, 0x8E, 0x75, 0x37-  },-  {-    0x10, 0x85, 0xD7, 0x83, 0x07, 0xB1, 0xC4, 0xB0,-    0x08, 0xC5, 0x7A, 0x2E, 0x7E, 0x5B, 0x23, 0x46,-    0x58, 0xA0, 0xA8, 0x2E, 0x4F, 0xF1, 0xE4, 0xAA,-    0xAC, 0x72, 0xB3, 0x12, 0xFD, 0xA0, 0xFE, 0x27,-    0xD2, 0x33, 0xBC, 0x5B, 0x10, 0xE9, 0xCC, 0x17,-    0xFD, 0xC7, 0x69, 0x7B, 0x54, 0x0C, 0x7D, 0x95,-    0xEB, 0x21, 0x5A, 0x19, 0xA1, 0xA0, 0xE2, 0x0E,-    0x1A, 0xBF, 0xA1, 0x26, 0xEF, 0xD5, 0x68, 0xC7-  },-  {-    0x4E, 0x5C, 0x73, 0x4C, 0x7D, 0xDE, 0x01, 0x1D,-    0x83, 0xEA, 0xC2, 0xB7, 0x34, 0x7B, 0x37, 0x35,-    0x94, 0xF9, 0x2D, 0x70, 0x91, 0xB9, 0xCA, 0x34,-    0xCB, 0x9C, 0x6F, 0x39, 0xBD, 0xF5, 0xA8, 0xD2,-    0xF1, 0x34, 0x37, 0x9E, 0x16, 0xD8, 0x22, 0xF6,-    0x52, 0x21, 0x70, 0xCC, 0xF2, 0xDD, 0xD5, 0x5C,-    0x84, 0xB9, 0xE6, 0xC6, 0x4F, 0xC9, 0x27, 0xAC,-    0x4C, 0xF8, 0xDF, 0xB2, 0xA1, 0x77, 0x01, 0xF2-  },-  {-    0x69, 0x5D, 0x83, 0xBD, 0x99, 0x0A, 0x11, 0x17,-    0xB3, 0xD0, 0xCE, 0x06, 0xCC, 0x88, 0x80, 0x27,-    0xD1, 0x2A, 0x05, 0x4C, 0x26, 0x77, 0xFD, 0x82,-    0xF0, 0xD4, 0xFB, 0xFC, 0x93, 0x57, 0x55, 0x23,-    0xE7, 0x99, 0x1A, 0x5E, 0x35, 0xA3, 0x75, 0x2E,-    0x9B, 0x70, 0xCE, 0x62, 0x99, 0x2E, 0x26, 0x8A,-    0x87, 0x77, 0x44, 0xCD, 0xD4, 0x35, 0xF5, 0xF1,-    0x30, 0x86, 0x9C, 0x9A, 0x20, 0x74, 0xB3, 0x38-  },-  {-    0xA6, 0x21, 0x37, 0x43, 0x56, 0x8E, 0x3B, 0x31,-    0x58, 0xB9, 0x18, 0x43, 0x01, 0xF3, 0x69, 0x08,-    0x47, 0x55, 0x4C, 0x68, 0x45, 0x7C, 0xB4, 0x0F,-    0xC9, 0xA4, 0xB8, 0xCF, 0xD8, 0xD4, 0xA1, 0x18,-    0xC3, 0x01, 0xA0, 0x77, 0x37, 0xAE, 0xDA, 0x0F,-    0x92, 0x9C, 0x68, 0x91, 0x3C, 0x5F, 0x51, 0xC8,-    0x03, 0x94, 0xF5, 0x3B, 0xFF, 0x1C, 0x3E, 0x83,-    0xB2, 0xE4, 0x0C, 0xA9, 0x7E, 0xBA, 0x9E, 0x15-  },-  {-    0xD4, 0x44, 0xBF, 0xA2, 0x36, 0x2A, 0x96, 0xDF,-    0x21, 0x3D, 0x07, 0x0E, 0x33, 0xFA, 0x84, 0x1F,-    0x51, 0x33, 0x4E, 0x4E, 0x76, 0x86, 0x6B, 0x81,-    0x39, 0xE8, 0xAF, 0x3B, 0xB3, 0x39, 0x8B, 0xE2,-    0xDF, 0xAD, 0xDC, 0xBC, 0x56, 0xB9, 0x14, 0x6D,-    0xE9, 0xF6, 0x81, 0x18, 0xDC, 0x58, 0x29, 0xE7,-    0x4B, 0x0C, 0x28, 0xD7, 0x71, 0x19, 0x07, 0xB1,-    0x21, 0xF9, 0x16, 0x1C, 0xB9, 0x2B, 0x69, 0xA9-  },-  {-    0x14, 0x27, 0x09, 0xD6, 0x2E, 0x28, 0xFC, 0xCC,-    0xD0, 0xAF, 0x97, 0xFA, 0xD0, 0xF8, 0x46, 0x5B,-    0x97, 0x1E, 0x82, 0x20, 0x1D, 0xC5, 0x10, 0x70,-    0xFA, 0xA0, 0x37, 0x2A, 0xA4, 0x3E, 0x92, 0x48,-    0x4B, 0xE1, 0xC1, 0xE7, 0x3B, 0xA1, 0x09, 0x06,-    0xD5, 0xD1, 0x85, 0x3D, 0xB6, 0xA4, 0x10, 0x6E,-    0x0A, 0x7B, 0xF9, 0x80, 0x0D, 0x37, 0x3D, 0x6D,-    0xEE, 0x2D, 0x46, 0xD6, 0x2E, 0xF2, 0xA4, 0x61-  },-};-----static const uint8_t blake2sp_kat[KAT_LENGTH][BLAKE2S_OUTBYTES] =-{-  {-    0xDD, 0x0E, 0x89, 0x17, 0x76, 0x93, 0x3F, 0x43,-    0xC7, 0xD0, 0x32, 0xB0, 0x8A, 0x91, 0x7E, 0x25,-    0x74, 0x1F, 0x8A, 0xA9, 0xA1, 0x2C, 0x12, 0xE1,-    0xCA, 0xC8, 0x80, 0x15, 0x00, 0xF2, 0xCA, 0x4F-  },-  {-    0xA6, 0xB9, 0xEE, 0xCC, 0x25, 0x22, 0x7A, 0xD7,-    0x88, 0xC9, 0x9D, 0x3F, 0x23, 0x6D, 0xEB, 0xC8,-    0xDA, 0x40, 0x88, 0x49, 0xE9, 0xA5, 0x17, 0x89,-    0x78, 0x72, 0x7A, 0x81, 0x45, 0x7F, 0x72, 0x39-  },-  {-    0xDA, 0xCA, 0xDE, 0xCE, 0x7A, 0x8E, 0x6B, 0xF3,-    0xAB, 0xFE, 0x32, 0x4C, 0xA6, 0x95, 0x43, 0x69,-    0x84, 0xB8, 0x19, 0x5D, 0x29, 0xF6, 0xBB, 0xD8,-    0x96, 0xE4, 0x1E, 0x18, 0xE2, 0x1C, 0x91, 0x45-  },-  {-    0xED, 0x14, 0x41, 0x3B, 0x40, 0xDA, 0x68, 0x9F,-    0x1F, 0x7F, 0xED, 0x2B, 0x08, 0xDF, 0xF4, 0x5B,-    0x80, 0x92, 0xDB, 0x5E, 0xC2, 0xC3, 0x61, 0x0E,-    0x02, 0x72, 0x4D, 0x20, 0x2F, 0x42, 0x3C, 0x46-  },-  {-    0x9B, 0x8A, 0x52, 0x7B, 0x52, 0x72, 0x25, 0x0A,-    0x1E, 0xC3, 0x97, 0x38, 0x8F, 0x04, 0x09, 0x14,-    0x95, 0x48, 0x06, 0xE7, 0x94, 0xDB, 0x04, 0xB7,-    0x0A, 0x46, 0x11, 0xBC, 0x59, 0x58, 0x6A, 0x83-  },-  {-    0x2B, 0xB6, 0x33, 0x37, 0x29, 0x00, 0x0B, 0xE3,-    0xD5, 0xA2, 0x1B, 0x98, 0xF8, 0xE7, 0xEA, 0xD0,-    0x77, 0xF1, 0x51, 0xA5, 0x39, 0x39, 0x19, 0xEB,-    0x67, 0xC8, 0x76, 0xEE, 0x00, 0xBB, 0xBB, 0x04-  },-  {-    0x63, 0xC0, 0x14, 0x08, 0x15, 0x4A, 0xD1, 0x9D,-    0x7F, 0xB7, 0x39, 0xF3, 0x11, 0x78, 0x17, 0x80,-    0x46, 0x2C, 0xF2, 0xEE, 0xCC, 0xE6, 0x0F, 0x06,-    0x4E, 0x85, 0x34, 0x87, 0xC2, 0x72, 0xE3, 0xEB-  },-  {-    0x3D, 0x05, 0x1A, 0x11, 0x76, 0x01, 0x9C, 0xA3,-    0x7B, 0xF3, 0x3D, 0x60, 0x42, 0x7F, 0x8D, 0x9D,-    0x1C, 0x3A, 0xBD, 0x59, 0x82, 0x97, 0xCF, 0xB4,-    0x23, 0x5F, 0x74, 0x7D, 0x7C, 0x7C, 0x7F, 0xEC-  },-  {-    0x39, 0x1E, 0xA9, 0x12, 0xDF, 0x4D, 0x4D, 0x79,-    0xA4, 0x64, 0x6D, 0x9D, 0xA2, 0x54, 0x9A, 0x44,-    0x6D, 0x22, 0x40, 0xF6, 0x24, 0x15, 0xD0, 0x70,-    0xA2, 0xE0, 0x93, 0x99, 0x2B, 0x47, 0x1F, 0xBA-  },-  {-    0x32, 0x46, 0x40, 0x44, 0x0E, 0xA5, 0xC3, 0x08,-    0x2D, 0xDC, 0x30, 0x9E, 0x78, 0x09, 0xD7, 0x41,-    0xD6, 0xCC, 0x1B, 0x2D, 0x49, 0x0F, 0xF8, 0xC0,-    0x52, 0x12, 0x8A, 0x6E, 0xEB, 0x40, 0x9D, 0x62-  },-  {-    0xAB, 0x85, 0x5E, 0x6F, 0xA3, 0x9A, 0x5E, 0x8F,-    0xC9, 0x0E, 0xAC, 0xB9, 0x99, 0xC7, 0xF7, 0x8A,-    0xE7, 0x1E, 0x59, 0xC3, 0xD9, 0x7D, 0x60, 0xAF,-    0xE5, 0x17, 0xD5, 0x87, 0x92, 0x3B, 0x77, 0x11-  },-  {-    0x2A, 0x39, 0xDA, 0x45, 0x86, 0xEF, 0xC4, 0x77,-    0x85, 0xA7, 0xA8, 0xDA, 0x85, 0x68, 0x3A, 0x51,-    0x72, 0x4C, 0xDE, 0xF5, 0x41, 0x3B, 0x35, 0x6D,-    0xC4, 0xFB, 0x50, 0x05, 0x13, 0xF8, 0xFA, 0x2E-  },-  {-    0x8A, 0x00, 0x57, 0xC1, 0xF7, 0x8A, 0xD6, 0x21,-    0x45, 0x55, 0xC0, 0x67, 0x07, 0x33, 0xE2, 0x9A,-    0x4C, 0x7E, 0x95, 0x62, 0x27, 0x66, 0x0E, 0xFE,-    0xB1, 0xD7, 0xFC, 0x79, 0xF5, 0x8E, 0xC6, 0xF2-  },-  {-    0x07, 0x64, 0xB0, 0x01, 0x7F, 0x5B, 0xD9, 0x51,-    0xF0, 0x1D, 0x9F, 0xDF, 0x95, 0xC0, 0xCB, 0x41,-    0x38, 0x98, 0x5D, 0x84, 0x79, 0x9C, 0xD4, 0x29,-    0x84, 0xE2, 0x5B, 0x51, 0x28, 0x00, 0xE7, 0x3C-  },-  {-    0xCC, 0x02, 0x49, 0x56, 0x93, 0xC8, 0xE1, 0x84,-    0xAD, 0x2E, 0xD0, 0x9D, 0x53, 0x3D, 0xC3, 0x3B,-    0x76, 0xA7, 0x78, 0x3D, 0x62, 0x07, 0xFC, 0xAC,-    0xCB, 0x64, 0xF3, 0xED, 0x2C, 0x6D, 0x66, 0xE0-  },-  {-    0xC0, 0xDF, 0x49, 0xC2, 0x06, 0xA3, 0x42, 0x88,-    0x14, 0x32, 0x16, 0x84, 0x7D, 0xF3, 0x34, 0xD4,-    0x56, 0x9D, 0xAD, 0x73, 0xC2, 0xB1, 0xFF, 0x62,-    0x84, 0x88, 0x4F, 0xD3, 0x89, 0x41, 0xFB, 0x95-  },-  {-    0xB9, 0x19, 0x45, 0x19, 0xE4, 0x97, 0x8A, 0x9D,-    0xC8, 0x93, 0xB2, 0x8B, 0xD8, 0x08, 0xCD, 0xFA,-    0xBB, 0x1B, 0xD5, 0x10, 0xD8, 0x62, 0xB3, 0x17,-    0x1F, 0xF6, 0xE0, 0x17, 0xA4, 0x1B, 0x80, 0x4C-  },-  {-    0xBB, 0xA9, 0x27, 0xAC, 0xF1, 0x1B, 0xEB, 0xD3,-    0x62, 0xA3, 0xA3, 0xEB, 0x78, 0xC4, 0xBB, 0x65,-    0xE6, 0x02, 0xA8, 0x70, 0x9F, 0xCE, 0xF3, 0x8D,-    0xC6, 0xC8, 0xB7, 0xBD, 0xA6, 0x64, 0xC3, 0x2C-  },-  {-    0xEC, 0xB4, 0x90, 0x0A, 0x63, 0x92, 0x4E, 0x72,-    0x0D, 0x40, 0xF2, 0xD2, 0xB1, 0x4D, 0x1B, 0xB3,-    0x9C, 0x37, 0x01, 0xAD, 0x73, 0x46, 0xBD, 0x0B,-    0x67, 0x23, 0x42, 0x70, 0xBF, 0xBE, 0x7E, 0x70-  },-  {-    0xF8, 0x31, 0x5A, 0x21, 0xB2, 0x5E, 0x6B, 0xA8,-    0xBF, 0x59, 0xB1, 0x7B, 0x05, 0x91, 0x3B, 0x8C,-    0xA4, 0x65, 0x9F, 0x1C, 0xD8, 0x38, 0xFC, 0xC7,-    0x73, 0xC9, 0xEB, 0x12, 0xE7, 0x00, 0x4E, 0x09-  },-  {-    0x4B, 0x77, 0xAF, 0x67, 0xA9, 0x23, 0x2B, 0xF1,-    0x18, 0x4E, 0x57, 0x81, 0x82, 0x94, 0x03, 0x1E,-    0x55, 0xF1, 0xF8, 0x53, 0xC9, 0x4D, 0xBA, 0xB5,-    0x57, 0x75, 0x47, 0x33, 0x0D, 0x65, 0xAA, 0x61-  },-  {-    0x76, 0x85, 0x68, 0x39, 0x0F, 0xD2, 0xB8, 0x70,-    0x94, 0x11, 0x4E, 0xD4, 0xCF, 0x72, 0x3E, 0xA3,-    0x20, 0xFE, 0x97, 0x7B, 0x53, 0x18, 0x03, 0x05,-    0xC3, 0x84, 0x33, 0x54, 0x79, 0xF0, 0xB5, 0x9B-  },-  {-    0xA4, 0x31, 0xCB, 0x27, 0x0F, 0x3E, 0x2C, 0x9B,-    0x7A, 0x95, 0x93, 0xB1, 0x55, 0xCC, 0xEC, 0xFF,-    0x5B, 0x5C, 0x4A, 0x2D, 0xCD, 0x5D, 0x6B, 0xB1,-    0xC4, 0x85, 0xAA, 0x28, 0x69, 0x97, 0xF9, 0x15-  },-  {-    0xD6, 0x91, 0xFA, 0x6A, 0x79, 0x0B, 0x1A, 0x51,-    0x79, 0x80, 0x08, 0x7F, 0x50, 0xB0, 0x3D, 0xED,-    0x8C, 0x6E, 0xD4, 0x86, 0xD0, 0x84, 0x22, 0x1C,-    0x82, 0x7D, 0x9B, 0xD9, 0x22, 0xBE, 0xB8, 0xC0-  },-  {-    0x8F, 0x97, 0x8A, 0x49, 0x32, 0xF4, 0x45, 0x98,-    0x13, 0xE8, 0xFE, 0x15, 0x68, 0x6E, 0x4E, 0xFA,-    0x25, 0xC2, 0xC5, 0xFF, 0x5A, 0x3A, 0x4F, 0x8C,-    0x9B, 0x14, 0x96, 0x5D, 0x2F, 0x0B, 0xE4, 0x61-  },-  {-    0x1E, 0xFB, 0xD0, 0xC1, 0x31, 0x44, 0x91, 0x42,-    0xF2, 0x29, 0x5F, 0x2D, 0x42, 0x41, 0x1D, 0xFE,-    0x0F, 0x48, 0xD4, 0xAC, 0xAE, 0x76, 0x2D, 0x8D,-    0xF6, 0x7A, 0x57, 0x0B, 0xF7, 0xB1, 0xDC, 0xD5-  },-  {-    0xD5, 0x3B, 0xA9, 0x33, 0x46, 0x14, 0x3A, 0xB8,-    0xE0, 0xD3, 0xD1, 0xBF, 0x27, 0x27, 0x06, 0xD1,-    0x69, 0xE6, 0x6C, 0x69, 0xC7, 0xB8, 0xF4, 0xA5,-    0xE8, 0x2F, 0xEF, 0x44, 0x07, 0x02, 0xBC, 0xF2-  },-  {-    0xF7, 0x1A, 0x3E, 0xC0, 0x1A, 0xA3, 0x82, 0xEA,-    0x76, 0x99, 0x2B, 0x43, 0x0A, 0x7F, 0x42, 0xC7,-    0xAD, 0x2A, 0x86, 0xAE, 0xA9, 0xC1, 0x9E, 0x76,-    0xCD, 0x17, 0x32, 0xEC, 0x68, 0x30, 0xDE, 0x6F-  },-  {-    0x80, 0xA6, 0xAB, 0x7B, 0x71, 0x04, 0x64, 0xF9,-    0x3E, 0x6C, 0xBA, 0x96, 0x86, 0x4A, 0xA6, 0x40,-    0x9B, 0xCA, 0xFC, 0x1B, 0xF4, 0xB3, 0x2A, 0x30,-    0x93, 0x72, 0xE8, 0x57, 0xE8, 0x04, 0x06, 0x8C-  },-  {-    0xDB, 0xDE, 0x81, 0xE5, 0x1A, 0x52, 0x17, 0x4B,-    0x10, 0x14, 0x90, 0x1B, 0x53, 0xBE, 0xF8, 0x8D,-    0xE9, 0x3B, 0x29, 0xE2, 0x74, 0x34, 0x7E, 0x8E,-    0x9A, 0x7B, 0x03, 0x74, 0x56, 0x62, 0x9F, 0x35-  },-  {-    0x75, 0xF2, 0x74, 0x46, 0x6B, 0x1A, 0x2D, 0x0F,-    0xD8, 0x45, 0xBB, 0xB5, 0x7C, 0x38, 0xC9, 0x89,-    0x51, 0x6E, 0x15, 0x68, 0x32, 0x0A, 0xB5, 0x17,-    0xB1, 0x63, 0xEA, 0xF7, 0x09, 0x23, 0x4C, 0xC7-  },-  {-    0xAF, 0xE1, 0xA0, 0x59, 0x1C, 0x49, 0x1D, 0x41,-    0x6E, 0xB6, 0x4F, 0x62, 0x86, 0xF3, 0xBA, 0x29,-    0xD4, 0xC9, 0x99, 0x82, 0x14, 0xA3, 0x83, 0x1C,-    0x39, 0x01, 0x4A, 0xC0, 0x30, 0x55, 0x79, 0x45-  },-  {-    0x67, 0xFF, 0x6A, 0xCD, 0xBE, 0x8A, 0x99, 0xA1,-    0x66, 0xA5, 0xD9, 0xCF, 0x32, 0x13, 0x65, 0x06,-    0xB5, 0x48, 0xD6, 0xC9, 0x47, 0xC2, 0x4C, 0x69,-    0x9C, 0xEA, 0x3A, 0xFD, 0x92, 0xAD, 0xFA, 0xCA-  },-  {-    0xBF, 0xB4, 0xD0, 0xC7, 0x11, 0x20, 0x75, 0x26,-    0x2C, 0x2D, 0xD2, 0x48, 0xF3, 0x34, 0xB2, 0xEF,-    0x15, 0x40, 0x08, 0x7E, 0xCC, 0x73, 0x82, 0xBC,-    0x2A, 0x27, 0x25, 0x75, 0xC5, 0x00, 0x9F, 0x70-  },-  {-    0x17, 0xC9, 0x4B, 0x9C, 0x53, 0x72, 0x43, 0xF2,-    0x33, 0x5B, 0x86, 0x39, 0x49, 0xB2, 0xB9, 0x1C,-    0x98, 0xA6, 0x95, 0x6D, 0x7C, 0x10, 0xAA, 0x98,-    0x99, 0x59, 0xA8, 0x0F, 0x91, 0x0C, 0x25, 0x22-  },-  {-    0xF6, 0x33, 0x8F, 0x43, 0x4D, 0x31, 0x94, 0x10,-    0x19, 0x6D, 0x95, 0x19, 0xAB, 0xCA, 0xEF, 0xF7,-    0xD5, 0x54, 0x39, 0xFD, 0x2A, 0xA5, 0xBA, 0xBF,-    0x7A, 0x7E, 0x79, 0x13, 0xB2, 0x94, 0xED, 0x4D-  },-  {-    0x08, 0xEF, 0x7D, 0x65, 0xF9, 0xBB, 0xF3, 0xDA,-    0x1F, 0x78, 0x84, 0xAE, 0x9B, 0x75, 0x90, 0x1F,-    0xD8, 0x52, 0x95, 0x66, 0x2A, 0x6E, 0xA7, 0x1D,-    0xE0, 0x8B, 0xEE, 0x38, 0x34, 0x57, 0x62, 0x78-  },-  {-    0x16, 0x47, 0xEC, 0xC2, 0xBA, 0x13, 0xF8, 0xB9,-    0x3B, 0x2F, 0xBC, 0xDC, 0x4E, 0x8F, 0x1D, 0xFA,-    0x47, 0xFE, 0x3B, 0xE1, 0x2A, 0xAA, 0x0E, 0x45,-    0x9B, 0x0E, 0x5A, 0x87, 0xF3, 0xA6, 0x9B, 0xB0-  },-  {-    0xFF, 0x92, 0x7A, 0x71, 0x78, 0x81, 0xF6, 0xFD,-    0x8E, 0xD8, 0xBF, 0x5D, 0x5E, 0x35, 0xBD, 0x80,-    0x16, 0x15, 0x73, 0xE5, 0x82, 0x94, 0x04, 0xC3,-    0x2D, 0x2A, 0x27, 0x6A, 0x01, 0xF4, 0xB9, 0x06-  },-  {-    0xC8, 0xCA, 0xF1, 0x36, 0xFF, 0x20, 0x9C, 0x82,-    0xE0, 0x24, 0x0C, 0x1E, 0x62, 0xA3, 0xBC, 0x7E,-    0x9C, 0xAC, 0x87, 0x3B, 0x01, 0x1C, 0xF7, 0xC5,-    0xE6, 0x7E, 0xC1, 0x87, 0xA5, 0xFB, 0xCD, 0x96-  },-  {-    0xD9, 0xAC, 0xC7, 0x3E, 0x3F, 0x42, 0x1E, 0x18,-    0x83, 0xB5, 0xED, 0x53, 0xD8, 0x2A, 0x9A, 0xEC,-    0x8F, 0x5D, 0xC9, 0x80, 0xC4, 0x2B, 0xCA, 0xEB,-    0x0E, 0x7D, 0x89, 0x76, 0xA3, 0x38, 0xEF, 0x51-  },-  {-    0x9F, 0x17, 0x3F, 0xCF, 0x08, 0xA5, 0x36, 0x21,-    0x93, 0xF3, 0x52, 0xC8, 0x25, 0x6A, 0xE5, 0x34,-    0xAE, 0x9C, 0xE7, 0xBF, 0xA4, 0xBC, 0x09, 0xFA,-    0xC9, 0x00, 0x98, 0xF9, 0x8A, 0x71, 0x62, 0x94-  },-  {-    0x0A, 0x72, 0x45, 0x79, 0xDC, 0x80, 0xBC, 0x0C,-    0x90, 0x04, 0xE5, 0x1B, 0xE7, 0xEF, 0xF3, 0xAF,-    0xA5, 0x30, 0x75, 0xAB, 0x4A, 0x32, 0x55, 0x77,-    0x33, 0x58, 0x6E, 0x82, 0x0F, 0xD3, 0x64, 0x23-  },-  {-    0x38, 0xF7, 0xC3, 0x40, 0xF4, 0xB1, 0x59, 0xB1,-    0xE5, 0x94, 0xF6, 0xEB, 0x83, 0x28, 0x49, 0x17,-    0xB7, 0xAA, 0x19, 0xC7, 0x4F, 0x57, 0x11, 0x7A,-    0x4E, 0x08, 0xCF, 0x7C, 0x4E, 0x32, 0xA2, 0x3C-  },-  {-    0x1C, 0x67, 0x4B, 0xE2, 0x57, 0xE9, 0xB3, 0x31,-    0x34, 0xD4, 0x16, 0x8F, 0x15, 0x2F, 0x8B, 0x63,-    0xDF, 0xD7, 0x80, 0xC9, 0x7D, 0xC4, 0xDC, 0x37,-    0xAC, 0x26, 0xCC, 0x0A, 0xEF, 0xB7, 0x9C, 0x1A-  },-  {-    0x2F, 0x0C, 0x59, 0x76, 0x16, 0xD5, 0x75, 0x17,-    0x14, 0xA5, 0xFB, 0x4E, 0xBF, 0x3C, 0x48, 0x1A,-    0x96, 0xC3, 0xAD, 0x14, 0x5E, 0xBD, 0xE0, 0x65,-    0x09, 0xF3, 0xA2, 0xE5, 0xF2, 0xC1, 0x3F, 0xC8-  },-  {-    0xFD, 0xDC, 0x69, 0xE0, 0xC9, 0x83, 0xCD, 0x82,-    0x83, 0xED, 0x81, 0x88, 0xBE, 0xC4, 0xE5, 0xF4,-    0x1D, 0xEA, 0x3D, 0x01, 0xB9, 0xE7, 0x4C, 0x4B,-    0xAF, 0x73, 0x41, 0xD8, 0xB4, 0xBF, 0x55, 0x3D-  },-  {-    0x24, 0xD0, 0x83, 0xCB, 0xA0, 0x38, 0xC8, 0x7E,-    0x9A, 0xCB, 0x86, 0x81, 0x82, 0x02, 0x08, 0xB7,-    0x5C, 0xB3, 0x29, 0x3A, 0x96, 0xC9, 0xEF, 0xA7,-    0x5D, 0x2C, 0x63, 0xF1, 0x6B, 0x85, 0xFE, 0x1E-  },-  {-    0x7F, 0x6A, 0x64, 0x9C, 0xCA, 0x89, 0xB2, 0x53,-    0xFF, 0xBD, 0x20, 0xC0, 0x16, 0x98, 0x01, 0x00,-    0xA8, 0x7C, 0x16, 0x81, 0x09, 0x62, 0x8F, 0xCC,-    0x66, 0x52, 0x5D, 0x8B, 0xAA, 0xFE, 0x50, 0x5F-  },-  {-    0x6D, 0xA3, 0x73, 0xB4, 0xC1, 0x87, 0x92, 0xB3,-    0x20, 0x9A, 0xDD, 0x15, 0xA5, 0x07, 0x4A, 0x1D,-    0x70, 0xC1, 0x0B, 0xB3, 0x94, 0x80, 0xCA, 0x3F,-    0xE5, 0xC4, 0x39, 0xD9, 0x5F, 0xC2, 0x86, 0xCA-  },-  {-    0x27, 0x0A, 0xFF, 0xA6, 0x42, 0x6F, 0x1A, 0x51,-    0x5C, 0x9B, 0x76, 0xDF, 0xC2, 0x7D, 0x18, 0x1F,-    0xC2, 0xFD, 0x57, 0xD0, 0x82, 0xA3, 0xBA, 0x2C,-    0x1E, 0xEF, 0x07, 0x15, 0x33, 0xA6, 0xDF, 0xB7-  },-  {-    0xC2, 0x2E, 0x15, 0xCF, 0xC5, 0xA3, 0xD1, 0x4B,-    0x64, 0xD1, 0x31, 0xF3, 0x5F, 0xB3, 0x5D, 0xD5,-    0xE6, 0xC5, 0x7D, 0xC4, 0xAF, 0xC5, 0x52, 0x27,-    0x75, 0x01, 0xEC, 0xA7, 0x64, 0xDA, 0x74, 0xBF-  },-  {-    0xAD, 0x68, 0x3E, 0x96, 0xB8, 0xAC, 0x65, 0x8C,-    0x4F, 0x3F, 0x10, 0xAD, 0x22, 0xD9, 0x9B, 0x07,-    0xCB, 0x5E, 0xF9, 0xE3, 0x1C, 0xBE, 0x11, 0xE7,-    0xF7, 0xDC, 0x29, 0xF2, 0xAE, 0xE5, 0x02, 0x4C-  },-  {-    0x78, 0xD3, 0xCE, 0xDA, 0x1C, 0xE0, 0x52, 0x93,-    0xF4, 0x30, 0xF6, 0x16, 0x7B, 0x33, 0xC9, 0x9F,-    0x0B, 0x1D, 0x6D, 0xAD, 0xE5, 0x21, 0x43, 0xC2,-    0x92, 0x55, 0x77, 0xC0, 0xBA, 0x82, 0x53, 0xEB-  },-  {-    0xE0, 0x06, 0x45, 0x63, 0x44, 0xF9, 0x0F, 0x50,-    0x1C, 0x25, 0x81, 0x3F, 0x9B, 0xE2, 0xA3, 0xF4,-    0x0B, 0x98, 0x74, 0xFA, 0x05, 0x63, 0x98, 0x1C,-    0xD4, 0x56, 0xEE, 0x8D, 0x44, 0x80, 0x7C, 0x93-  },-  {-    0x39, 0x08, 0xE8, 0xD5, 0x47, 0xC0, 0xAF, 0xB1,-    0x13, 0x49, 0x49, 0x46, 0x63, 0x04, 0xA1, 0x45,-    0x02, 0x7E, 0x6B, 0xB7, 0xA7, 0x4D, 0xD1, 0xC1,-    0x62, 0xCD, 0xF0, 0xBC, 0xF7, 0x72, 0x37, 0xE8-  },-  {-    0x1B, 0x6C, 0x87, 0xA3, 0x48, 0x38, 0xC7, 0xCD,-    0x5F, 0xD0, 0x89, 0x14, 0x22, 0x4E, 0x90, 0xC2,-    0x2A, 0xBF, 0x5A, 0x97, 0xB1, 0x06, 0x46, 0xD9,-    0x8C, 0x49, 0x16, 0xD3, 0xA8, 0x93, 0x9E, 0x62-  },-  {-    0xB0, 0xD3, 0x8F, 0x82, 0xF2, 0x48, 0x91, 0x69,-    0x52, 0xB3, 0x16, 0xB6, 0xD3, 0x6D, 0x9E, 0x02,-    0x2D, 0xF6, 0xEE, 0xCC, 0x26, 0xC7, 0x62, 0xA6,-    0x55, 0xCF, 0x5F, 0x0A, 0xE6, 0x49, 0xE2, 0xBD-  },-  {-    0x8D, 0x66, 0xFC, 0x9C, 0xED, 0xA5, 0xED, 0xDF,-    0xB1, 0xE0, 0x4D, 0x09, 0x6C, 0xA7, 0x0E, 0xF5,-    0x06, 0x50, 0xFB, 0x87, 0xCC, 0x6A, 0x9F, 0xFB,-    0xB3, 0xD2, 0x0B, 0xCE, 0x7B, 0x5A, 0x60, 0x74-  },-  {-    0x06, 0x43, 0x54, 0xE8, 0xE1, 0x1C, 0xF7, 0x13,-    0xB2, 0xC7, 0x2B, 0xA6, 0x7A, 0xC7, 0xD7, 0x6E,-    0x41, 0xBA, 0x61, 0xDB, 0x9C, 0x2D, 0xEA, 0x52,-    0x2E, 0x0B, 0xDA, 0x17, 0xCB, 0xA5, 0xE3, 0x92-  },-  {-    0xC8, 0xEF, 0x5F, 0x49, 0x8B, 0xD1, 0xBC, 0x70,-    0x7F, 0xBC, 0x7B, 0x5C, 0xBC, 0x2D, 0xFF, 0x04,-    0x93, 0x14, 0x4A, 0xC5, 0x27, 0x86, 0xDB, 0x3C,-    0x79, 0x3E, 0xF4, 0xAE, 0x8A, 0x83, 0x88, 0x47-  },-  {-    0x8A, 0x23, 0x97, 0xDF, 0x31, 0xE7, 0xF0, 0xCC,-    0x29, 0x0D, 0xA9, 0xA8, 0xBB, 0xE4, 0xF5, 0xF7,-    0xA3, 0xA1, 0x37, 0x50, 0x73, 0x0D, 0xB6, 0x2D,-    0xC2, 0x54, 0x0F, 0xDB, 0xD6, 0x18, 0x85, 0x89-  },-  {-    0xF1, 0x2D, 0x0B, 0x13, 0xC6, 0xAD, 0xFB, 0x3B,-    0xE5, 0x0A, 0x51, 0xEB, 0x6B, 0xAF, 0x65, 0xAB,-    0xFB, 0x17, 0x00, 0xBA, 0xA8, 0x7E, 0x52, 0x7D,-    0xBE, 0x3E, 0x67, 0x5A, 0x7A, 0x99, 0x46, 0x61-  },-  {-    0x10, 0x24, 0xC9, 0x40, 0xBE, 0x73, 0x41, 0x44,-    0x9B, 0x50, 0x10, 0x52, 0x2B, 0x50, 0x9F, 0x65,-    0xBB, 0xDC, 0x12, 0x87, 0xB4, 0x55, 0xC2, 0xBB,-    0x7F, 0x72, 0xB2, 0xC9, 0x2F, 0xD0, 0xD1, 0x89-  },-  {-    0x52, 0x60, 0x3B, 0x6C, 0xBF, 0xAD, 0x49, 0x66,-    0xCB, 0x04, 0x4C, 0xB2, 0x67, 0x56, 0x83, 0x85,-    0xCF, 0x35, 0xF2, 0x1E, 0x6C, 0x45, 0xCF, 0x30,-    0xAE, 0xD1, 0x98, 0x32, 0xCB, 0x51, 0xE9, 0xF5-  },-  {-    0xFF, 0xF2, 0x4D, 0x3C, 0xC7, 0x29, 0xD3, 0x95,-    0xDA, 0xF9, 0x78, 0xB0, 0x15, 0x73, 0x06, 0xCB,-    0x49, 0x57, 0x97, 0xE6, 0xC8, 0xDC, 0xA1, 0x73,-    0x1D, 0x2F, 0x6F, 0x81, 0xB8, 0x49, 0xBA, 0xAE-  },-  {-    0x41, 0xEE, 0xE9, 0x0D, 0x47, 0xEC, 0x27, 0x72,-    0xCD, 0x35, 0x2D, 0xFD, 0x67, 0xE0, 0x60, 0x5F,-    0xBD, 0xFC, 0x5F, 0xD6, 0xD8, 0x26, 0x45, 0x1E,-    0x3D, 0x06, 0x4D, 0x38, 0x28, 0xBD, 0x3B, 0xAE-  },-  {-    0x30, 0x0B, 0x6B, 0x36, 0xE5, 0x9F, 0x85, 0x1D,-    0xDD, 0xC2, 0x9B, 0xFA, 0x93, 0x08, 0x25, 0x20,-    0xCD, 0x77, 0xC5, 0x1E, 0x00, 0x7E, 0x00, 0xD2,-    0xD7, 0x8B, 0x26, 0xF4, 0xAF, 0x96, 0x15, 0x32-  },-  {-    0x9E, 0xF3, 0x03, 0x14, 0x83, 0x4E, 0x40, 0x1C,-    0x87, 0x1A, 0x20, 0x04, 0xE3, 0x8D, 0x5C, 0xE3,-    0x2E, 0xD2, 0x8E, 0x11, 0x37, 0xF1, 0x97, 0x0F,-    0x4F, 0x43, 0x78, 0xC7, 0x37, 0x06, 0x76, 0x3D-  },-  {-    0x3F, 0xBD, 0xCD, 0xE7, 0xB6, 0x43, 0x04, 0x02,-    0x5E, 0xC0, 0x58, 0x26, 0x09, 0x03, 0x1E, 0xC2,-    0x66, 0xD5, 0x0F, 0x56, 0x83, 0x5A, 0xE0, 0xCB,-    0x72, 0xD8, 0xCD, 0xB4, 0xCF, 0xAF, 0x44, 0x19-  },-  {-    0xE9, 0x0E, 0xAD, 0x3B, 0x98, 0x2B, 0x43, 0x5B,-    0x66, 0x36, 0x6A, 0x49, 0x6C, 0x3F, 0x8A, 0xE6,-    0x5B, 0x17, 0x61, 0x37, 0x00, 0xF5, 0x47, 0x67,-    0x3F, 0x62, 0x15, 0x35, 0x41, 0x91, 0x28, 0x64-  },-  {-    0xAB, 0xE3, 0x54, 0x7B, 0x33, 0x6D, 0x6E, 0x24,-    0x0D, 0x7F, 0xE6, 0x82, 0xD7, 0x4B, 0x9C, 0xC7,-    0xE8, 0xD7, 0xF9, 0xB5, 0x66, 0x48, 0x58, 0xB9,-    0x4D, 0xF5, 0x9E, 0x9F, 0xC3, 0x30, 0xD9, 0xE5-  },-  {-    0xB2, 0x99, 0x64, 0x20, 0x95, 0xB8, 0x28, 0x6C,-    0x52, 0x1C, 0xDB, 0x21, 0xED, 0x0F, 0xE0, 0x57,-    0x27, 0x80, 0x21, 0xBB, 0x40, 0x38, 0xEB, 0x5A,-    0x3D, 0x79, 0x54, 0x2F, 0x5D, 0x75, 0x1F, 0x54-  },-  {-    0xE4, 0xD7, 0x58, 0x35, 0x9F, 0x08, 0x67, 0x93,-    0xA8, 0x37, 0x54, 0xAC, 0xA6, 0x96, 0x8C, 0x3E,-    0x9F, 0xD9, 0x4B, 0x40, 0x49, 0x7F, 0x2E, 0xC2,-    0x24, 0xA2, 0x91, 0x60, 0x63, 0xA2, 0x14, 0xA3-  },-  {-    0x59, 0xA3, 0x04, 0xFC, 0x03, 0xAB, 0x75, 0xD5,-    0x57, 0xDB, 0x04, 0xEB, 0xD0, 0x2D, 0xD4, 0xC6,-    0xB8, 0x10, 0xA1, 0x38, 0xBB, 0xFE, 0xEA, 0x5D,-    0xFC, 0xEE, 0xAA, 0x2B, 0x75, 0xB0, 0x64, 0x91-  },-  {-    0x39, 0x95, 0x10, 0x22, 0x15, 0xF5, 0xFE, 0x92,-    0x10, 0xEB, 0x30, 0xD9, 0x52, 0xD8, 0xC9, 0x19,-    0x58, 0x9E, 0x71, 0x45, 0xFC, 0xD4, 0x95, 0xEA,-    0x78, 0xD0, 0x2B, 0x9C, 0x14, 0x8F, 0xAF, 0x09-  },-  {-    0x47, 0x2E, 0xE7, 0x11, 0x56, 0x35, 0x06, 0xA5,-    0xF0, 0x08, 0x3F, 0xE8, 0x2B, 0x08, 0xB9, 0x92,-    0x3C, 0xF6, 0xC8, 0x40, 0x4D, 0x0C, 0xBA, 0xCB,-    0xF8, 0x48, 0x64, 0xF6, 0x48, 0x54, 0x2A, 0xC0-  },-  {-    0x68, 0xFD, 0xB8, 0x2A, 0xDA, 0xE7, 0x9B, 0xEF,-    0x59, 0x0A, 0xBA, 0x62, 0xD7, 0xAC, 0x55, 0x32,-    0x12, 0x06, 0x1C, 0x36, 0xE3, 0x6F, 0x12, 0xC0,-    0xEF, 0xA2, 0x9A, 0x17, 0x62, 0xDE, 0x3B, 0x6A-  },-  {-    0x75, 0x85, 0xC0, 0x77, 0x33, 0x83, 0xF1, 0x74,-    0xFD, 0x66, 0x65, 0x49, 0xA8, 0x35, 0x2B, 0x30,-    0x5B, 0xF6, 0x85, 0x5B, 0xC9, 0x8B, 0xEA, 0x28,-    0xC3, 0x91, 0xB3, 0xC0, 0x34, 0xDA, 0x5A, 0x5A-  },-  {-    0xAC, 0xC5, 0x75, 0xFE, 0x2C, 0xD7, 0xBA, 0x2A,-    0x31, 0xFC, 0x7D, 0x67, 0x0A, 0x92, 0x34, 0xAF,-    0x68, 0x50, 0x33, 0x86, 0xE9, 0x59, 0x07, 0x3D,-    0x16, 0xA8, 0x1B, 0x33, 0xB9, 0x22, 0xB5, 0x0E-  },-  {-    0x9E, 0xC7, 0xD2, 0x99, 0x59, 0x43, 0xD3, 0x9D,-    0x6B, 0x97, 0x14, 0x93, 0xB8, 0x97, 0xA0, 0xEE,-    0x2D, 0x33, 0x92, 0xA7, 0x2D, 0xB8, 0x75, 0xC2,-    0x40, 0x5D, 0x35, 0x71, 0x78, 0xFB, 0x69, 0x11-  },-  {-    0x2D, 0x7E, 0xF1, 0x94, 0x01, 0x42, 0x5A, 0xBA,-    0x45, 0x0E, 0x82, 0xD3, 0x6D, 0x0F, 0xE7, 0xB2,-    0x08, 0x5E, 0xA0, 0xAF, 0x60, 0x45, 0xA5, 0x99,-    0x4C, 0xF4, 0x31, 0xEA, 0x59, 0x93, 0x9C, 0xC9-  },-  {-    0xF3, 0x2F, 0xD8, 0x55, 0xF0, 0x11, 0xC7, 0x18,-    0x02, 0x7F, 0x2E, 0xBE, 0x37, 0x7D, 0x69, 0x39,-    0xF1, 0x23, 0x70, 0xCA, 0xFF, 0x15, 0x1C, 0x1E,-    0x5A, 0xCE, 0x43, 0x8D, 0x70, 0x3C, 0x6D, 0x9F-  },-  {-    0xB2, 0xBD, 0x83, 0xD2, 0x31, 0x0D, 0x3D, 0x7B,-    0x1D, 0x2D, 0x5A, 0xAF, 0x43, 0x59, 0xFA, 0xE2,-    0x86, 0x12, 0x96, 0x27, 0x19, 0xFD, 0xDE, 0x4D,-    0xDA, 0xF6, 0x9E, 0x78, 0x20, 0xF3, 0x3F, 0x61-  },-  {-    0x1A, 0x7A, 0x9D, 0x0F, 0x44, 0xDD, 0xFA, 0x7F,-    0xC2, 0xF4, 0x77, 0x0C, 0xAD, 0x74, 0x22, 0xFA,-    0x6C, 0x4E, 0x37, 0xE6, 0xCB, 0x03, 0x6D, 0x89,-    0x9E, 0x10, 0x27, 0x50, 0xE5, 0x94, 0xFF, 0xCD-  },-  {-    0xDC, 0x69, 0xF6, 0x14, 0x1C, 0x8E, 0x10, 0x3F,-    0xF6, 0x1F, 0x62, 0x98, 0xA2, 0xC4, 0x4F, 0x52,-    0xD1, 0x47, 0x36, 0x6D, 0xDB, 0xD9, 0xC7, 0x9C,-    0xC3, 0x08, 0xFE, 0x84, 0x33, 0x6A, 0x95, 0x64-  },-  {-    0xE3, 0x4E, 0xD4, 0x17, 0xB0, 0x79, 0x1D, 0x9A,-    0x77, 0xEE, 0x1E, 0x50, 0xCC, 0x2C, 0x20, 0x7E,-    0x54, 0x0C, 0x77, 0x14, 0x04, 0x21, 0xC4, 0x6C,-    0xE0, 0x86, 0x28, 0x78, 0xAA, 0xEB, 0x27, 0x09-  },-  {-    0x21, 0x74, 0x42, 0x5C, 0x8C, 0xCA, 0xE3, 0x98,-    0xC4, 0xFF, 0x06, 0xF8, 0x48, 0x99, 0x1C, 0x5E,-    0x9B, 0xC0, 0xF3, 0x46, 0x11, 0x11, 0x70, 0x6F,-    0xB9, 0x5D, 0x0B, 0xE1, 0xC6, 0x8E, 0x47, 0x60-  },-  {-    0x18, 0x94, 0x58, 0x2A, 0x8A, 0x25, 0xFE, 0x8F,-    0x84, 0x7A, 0x4A, 0x03, 0x25, 0x74, 0xB7, 0x7B,-    0x8B, 0x36, 0xBF, 0x19, 0x99, 0x75, 0x26, 0xBB,-    0x4B, 0xC8, 0x5F, 0x38, 0x24, 0x53, 0x7F, 0xEB-  },-  {-    0x17, 0xED, 0x18, 0x8A, 0xE3, 0xC9, 0x53, 0xD6,-    0x55, 0x44, 0x59, 0x83, 0xB8, 0x32, 0x5B, 0xAF,-    0xFF, 0x32, 0xE2, 0x22, 0xB2, 0xDF, 0xEB, 0x16,-    0xE8, 0x61, 0x7A, 0xBF, 0x86, 0xEE, 0x7C, 0xC5-  },-  {-    0xF1, 0x48, 0x9A, 0xD1, 0xC3, 0x54, 0xCD, 0xE9,-    0x78, 0x92, 0x37, 0xEA, 0x6D, 0xBF, 0x67, 0xFC,-    0x1E, 0x44, 0xD1, 0xAC, 0xC8, 0xDC, 0x66, 0xAD,-    0x83, 0x87, 0x27, 0xF4, 0x7D, 0x9A, 0x91, 0xFE-  },-  {-    0x36, 0x7F, 0x22, 0x16, 0x5B, 0x8B, 0x66, 0xE9,-    0x7F, 0x66, 0x70, 0xF3, 0x4E, 0xBA, 0x27, 0x49,-    0xD2, 0x64, 0x3B, 0x21, 0xBE, 0xAD, 0xAD, 0xFE,-    0xFE, 0xA2, 0x57, 0x4B, 0x7C, 0x9B, 0x21, 0x96-  },-  {-    0x3D, 0x8D, 0xFE, 0xA1, 0x7E, 0xEA, 0x5D, 0x64,-    0x5A, 0xC1, 0xD4, 0x1A, 0x5B, 0x59, 0x22, 0x6C,-    0x48, 0x6C, 0x36, 0xBD, 0x77, 0xED, 0x44, 0xBB,-    0x34, 0x91, 0x70, 0xD0, 0x80, 0xE3, 0x0E, 0x68-  },-  {-    0x41, 0x15, 0xF8, 0x9E, 0x0B, 0x3B, 0x5C, 0x8F,-    0x61, 0x22, 0xC0, 0x25, 0x00, 0x17, 0x1D, 0xCF,-    0xFB, 0xCE, 0xA4, 0x66, 0x2A, 0x8C, 0x5F, 0x8C,-    0x1C, 0x01, 0xA9, 0xCA, 0x7B, 0x10, 0x27, 0xBB-  },-  {-    0xED, 0x6E, 0x91, 0x0B, 0x96, 0x02, 0x55, 0xD7,-    0xD7, 0x92, 0xEB, 0xE6, 0x7F, 0x26, 0x0A, 0x14,-    0x3C, 0xFA, 0xC1, 0x05, 0x1D, 0xFC, 0x05, 0x90,-    0x25, 0xEE, 0x0C, 0x1B, 0xFC, 0xBC, 0x56, 0x81-  },-  {-    0x55, 0x8F, 0xA8, 0xAF, 0xA1, 0x2B, 0xBE, 0xE5,-    0x4A, 0xF7, 0x8F, 0x6B, 0x74, 0x45, 0xF9, 0x96,-    0x65, 0xD4, 0xE3, 0x56, 0xBC, 0x07, 0xD3, 0xEF,-    0xFD, 0x8F, 0xD6, 0x5A, 0xB9, 0xC7, 0x47, 0x16-  },-  {-    0x5B, 0x60, 0x12, 0x76, 0x20, 0x53, 0xB8, 0x73,-    0x4A, 0xF0, 0xE5, 0x55, 0xE6, 0xA2, 0xBB, 0x4F,-    0xD4, 0x84, 0x0A, 0xF3, 0xB0, 0x4F, 0xCF, 0x63,-    0x50, 0xA2, 0xB8, 0xA5, 0x1B, 0x67, 0x96, 0xAD-  },-  {-    0xAB, 0x7A, 0xCC, 0xA5, 0xD7, 0x77, 0x10, 0xBA,-    0xD3, 0x7B, 0xA0, 0xFF, 0x4C, 0xEA, 0xE2, 0x7E,-    0x84, 0x71, 0x79, 0xF7, 0xFD, 0x7A, 0xEC, 0x88,-    0x69, 0xC6, 0x49, 0xB3, 0x3F, 0x8D, 0x25, 0x77-  },-  {-    0xFF, 0x77, 0x30, 0xB4, 0x74, 0xEC, 0x21, 0x45,-    0xA9, 0x2D, 0xD1, 0xCF, 0xFE, 0x45, 0xC3, 0x42,-    0xC6, 0xFD, 0x6B, 0xAC, 0x58, 0x0F, 0xF9, 0x5A,-    0x75, 0xED, 0xA3, 0xBF, 0x90, 0xEB, 0x4F, 0x01-  },-  {-    0xD1, 0x0F, 0x06, 0x1D, 0x5B, 0x9C, 0xB4, 0x4E,-    0xE0, 0x78, 0xA9, 0x6B, 0x33, 0x18, 0x57, 0x9E,-    0x5E, 0xF5, 0x0A, 0xEF, 0x3E, 0xD9, 0x6E, 0x4F,-    0x62, 0x14, 0x9B, 0x2E, 0x9F, 0x7C, 0x66, 0x0C-  },-  {-    0x67, 0xD2, 0x2B, 0x8E, 0xDF, 0x20, 0x01, 0xD8,-    0x64, 0x22, 0x13, 0x6A, 0xC6, 0x51, 0x6C, 0xF3,-    0x9F, 0x7F, 0xC6, 0xA7, 0x02, 0x98, 0x92, 0xFD,-    0x75, 0xC9, 0x87, 0x90, 0x96, 0x4A, 0x72, 0x0B-  },-  {-    0x7A, 0x5E, 0xC5, 0xBA, 0x76, 0x25, 0x9B, 0x07,-    0xB4, 0xDA, 0x03, 0xF3, 0x81, 0xFE, 0x7B, 0xEA,-    0x48, 0x65, 0xC8, 0x6C, 0x42, 0x4A, 0xBA, 0xA0,-    0xDD, 0x1E, 0xCF, 0x74, 0xF8, 0x7D, 0x2A, 0xC0-  },-  {-    0xE0, 0xFF, 0x60, 0xD6, 0x90, 0x29, 0xE6, 0xBD,-    0x1C, 0x15, 0x95, 0x3E, 0x91, 0x50, 0x9C, 0x0C,-    0x59, 0xED, 0x5D, 0xA5, 0x00, 0x01, 0x99, 0xF2,-    0x16, 0xD2, 0x9F, 0x96, 0x07, 0x9C, 0x2F, 0xEF-  },-  {-    0xFC, 0x13, 0xEA, 0xD8, 0x41, 0x01, 0x8F, 0x59,-    0x90, 0x3B, 0x40, 0xF2, 0x02, 0x0C, 0x66, 0x38,-    0xA6, 0x6A, 0x54, 0xC3, 0xA3, 0x38, 0x41, 0x4D,-    0x97, 0xA5, 0xC3, 0x94, 0xF3, 0x26, 0x6F, 0x33-  },-  {-    0x0C, 0x2F, 0x62, 0xB8, 0x98, 0xFB, 0x2F, 0x63,-    0x61, 0x7E, 0x78, 0x73, 0x45, 0x26, 0x3C, 0xB9,-    0xCF, 0x60, 0x65, 0x4B, 0x55, 0x3B, 0x20, 0x3E,-    0xE4, 0x9D, 0xCB, 0xB8, 0xF2, 0xA6, 0xAF, 0xAC-  },-  {-    0xD7, 0xD6, 0xCB, 0x55, 0x2A, 0xEB, 0x36, 0xEB,-    0x96, 0xB1, 0xD5, 0xE0, 0x52, 0xF8, 0xD9, 0x21,-    0xC3, 0x24, 0x5A, 0x97, 0x0D, 0x0B, 0xC8, 0x41,-    0x0C, 0xD6, 0x5E, 0xA1, 0x04, 0xC8, 0xE7, 0x79-  },-  {-    0xB7, 0x14, 0x1F, 0x30, 0x5E, 0xFD, 0xFE, 0xE5,-    0x56, 0xBD, 0x13, 0xE0, 0x40, 0x0D, 0x1E, 0x8C,-    0xFD, 0x65, 0x48, 0xBF, 0x81, 0xEE, 0x5D, 0x15,-    0x32, 0x7E, 0x49, 0x95, 0xCA, 0x8A, 0xD6, 0xFD-  },-  {-    0xB6, 0xB6, 0x38, 0xD2, 0x2B, 0x7A, 0x12, 0x82,-    0x53, 0x74, 0xF7, 0x03, 0x48, 0xD7, 0x44, 0x8D,-    0x4E, 0x7D, 0x90, 0x8C, 0xF6, 0xE7, 0xBB, 0xEF,-    0x8C, 0x93, 0xEF, 0x67, 0x9B, 0x2A, 0x54, 0x78-  },-  {-    0x0D, 0xF4, 0x58, 0x56, 0x41, 0xFA, 0x09, 0xF6,-    0xCB, 0xA4, 0xCC, 0x16, 0x5A, 0x10, 0xAD, 0xDE,-    0x34, 0xF8, 0x0D, 0x42, 0x5A, 0x70, 0xDB, 0x67,-    0xE2, 0xFD, 0x23, 0x7B, 0x62, 0x7F, 0x43, 0x8A-  },-  {-    0x10, 0x6B, 0x2B, 0x35, 0x4D, 0x95, 0xAC, 0xEC,-    0xD0, 0xD9, 0x58, 0x8F, 0xBC, 0x23, 0x1F, 0x8B,-    0xEA, 0x2E, 0x94, 0xEA, 0x66, 0x2D, 0xDD, 0x3F,-    0x13, 0x9E, 0x1B, 0x67, 0x87, 0x46, 0x1E, 0xED-  },-  {-    0xAE, 0x5C, 0x69, 0xEE, 0xFE, 0x90, 0x89, 0xB2,-    0x9C, 0x6C, 0x1A, 0x23, 0x70, 0xD2, 0x05, 0x52,-    0xBA, 0x40, 0xC3, 0xD5, 0xE3, 0x71, 0x3C, 0x12,-    0xDE, 0xFC, 0xAE, 0x99, 0x7F, 0x43, 0x3E, 0xCD-  },-  {-    0x1A, 0xAE, 0xF5, 0x5D, 0x4F, 0xA8, 0x92, 0xB6,-    0x35, 0xFB, 0x2A, 0x7A, 0x25, 0xF9, 0xA8, 0xE0,-    0x3B, 0x9F, 0xFB, 0x08, 0x2A, 0xE9, 0xC0, 0x7C,-    0x20, 0x42, 0xA0, 0x49, 0xC6, 0x51, 0x5E, 0x45-  },-  {-    0x29, 0x7D, 0xAA, 0xC4, 0xD5, 0x4D, 0xC4, 0x1C,-    0x83, 0xE3, 0x23, 0x94, 0x59, 0x9F, 0x17, 0x1C,-    0xDA, 0xA9, 0xDD, 0xB7, 0x17, 0x26, 0xDA, 0x4E,-    0xCE, 0x3C, 0xCF, 0x95, 0xC1, 0x1F, 0x56, 0xDF-  },-  {-    0x2C, 0x45, 0xAC, 0xF4, 0x91, 0xEC, 0x2F, 0x4B,-    0x7E, 0x30, 0x9E, 0x7E, 0xDD, 0x81, 0x5B, 0xE5,-    0xA5, 0x4C, 0x44, 0x58, 0xD1, 0xA5, 0x7C, 0x4F,-    0x9B, 0x76, 0x3B, 0x0C, 0x67, 0x18, 0xD4, 0x3E-  },-  {-    0x2F, 0x92, 0xF9, 0x01, 0x70, 0xD3, 0xAE, 0x95,-    0xAB, 0xFA, 0xC3, 0xA6, 0x98, 0x9A, 0x2A, 0x60,-    0xCB, 0x28, 0xB8, 0x58, 0x78, 0x2B, 0xE7, 0xEA,-    0x17, 0x9B, 0x48, 0xA7, 0x27, 0x6D, 0xD8, 0x60-  },-  {-    0xB4, 0x01, 0xE8, 0x4B, 0x15, 0xAC, 0xC4, 0x70,-    0x93, 0x6D, 0x6E, 0x37, 0xF7, 0x88, 0x83, 0x33,-    0x09, 0x27, 0x31, 0x13, 0x3B, 0x25, 0x1B, 0xEA,-    0x22, 0x16, 0x58, 0xCA, 0x19, 0xA7, 0x56, 0x69-  },-  {-    0xF8, 0xB3, 0x40, 0xD2, 0xB9, 0xB3, 0x3D, 0x43,-    0xA0, 0xA6, 0x6F, 0x34, 0x97, 0x82, 0x0A, 0xFA,-    0xAE, 0xE4, 0x34, 0xC4, 0xE3, 0xC0, 0xC1, 0x7E,-    0x89, 0x8B, 0x83, 0x01, 0xC5, 0x7A, 0x26, 0xBD-  },-  {-    0x56, 0x6D, 0xA2, 0x83, 0x99, 0x03, 0x89, 0x13,-    0x8A, 0xA6, 0xF2, 0xAA, 0xA3, 0xB9, 0xE4, 0x0C,-    0xBF, 0x90, 0x84, 0x0E, 0xC7, 0x62, 0xBD, 0x96,-    0xB7, 0xE3, 0x3A, 0x31, 0x13, 0xB1, 0x01, 0x08-  },-  {-    0x34, 0x06, 0x72, 0xB7, 0x04, 0x67, 0x60, 0x42,-    0xC9, 0xBF, 0x3F, 0x33, 0x7B, 0xA7, 0x9F, 0x11,-    0x33, 0x6A, 0xEB, 0xB5, 0xEC, 0x5D, 0x31, 0xDF,-    0x54, 0xEB, 0x6A, 0xD3, 0xB0, 0x43, 0x04, 0x42-  },-  {-    0x50, 0x50, 0xB7, 0x3B, 0x93, 0x16, 0xEE, 0xA2,-    0xF1, 0x49, 0xBF, 0xFD, 0x22, 0xAE, 0xE3, 0x84,-    0xDC, 0x54, 0x03, 0xB1, 0x8E, 0x16, 0xFA, 0x88,-    0x82, 0x5E, 0x18, 0x16, 0x09, 0x49, 0x6F, 0xD2-  },-  {-    0x13, 0x65, 0xCC, 0x6F, 0xB9, 0x26, 0x0E, 0x86,-    0x88, 0x9B, 0x3A, 0xFB, 0xD1, 0xC8, 0xBC, 0x12,-    0x92, 0x31, 0x97, 0x71, 0x5D, 0xB2, 0x66, 0xCC,-    0x7A, 0x01, 0xCA, 0x57, 0x15, 0x9F, 0x75, 0x96-  },-  {-    0x29, 0x46, 0x6F, 0x51, 0xC0, 0x11, 0xFD, 0x10,-    0x18, 0x14, 0x94, 0xA9, 0x37, 0x9B, 0x61, 0x59,-    0xB8, 0x08, 0xAE, 0x0F, 0xCB, 0x01, 0x61, 0xF8,-    0xF0, 0x79, 0x09, 0xFF, 0x04, 0x1B, 0x19, 0x65-  },-  {-    0x65, 0x91, 0xA3, 0xC3, 0xC7, 0x67, 0xB3, 0x8D,-    0x80, 0x5E, 0xD3, 0xF7, 0xEB, 0x67, 0x63, 0xE8,-    0xB3, 0xD2, 0xD6, 0x42, 0xE7, 0x30, 0x77, 0x45,-    0xCD, 0x34, 0x18, 0xEF, 0xF6, 0x9A, 0x19, 0xED-  },-  {-    0x1D, 0x84, 0xB0, 0x4B, 0x13, 0x38, 0xB0, 0xD2,-    0xE3, 0xC9, 0x8F, 0x7A, 0xEA, 0x3E, 0x98, 0xEF,-    0xFC, 0x53, 0x0A, 0x50, 0x44, 0xB9, 0x3B, 0x96,-    0xC6, 0x7E, 0xE3, 0x79, 0xD6, 0x2E, 0x81, 0x5F-  },-  {-    0x6F, 0xA2, 0x95, 0x27, 0x25, 0x32, 0xE9, 0x83,-    0xE1, 0x66, 0xB1, 0x2E, 0x49, 0x99, 0xC0, 0x52,-    0xF8, 0x9D, 0x9F, 0x30, 0xAE, 0x14, 0x81, 0xF3,-    0xD6, 0x0E, 0xAE, 0x85, 0xF8, 0xEE, 0x17, 0x8A-  },-  {-    0x4E, 0xD8, 0xCA, 0xA9, 0x8E, 0xC3, 0x9F, 0x6A,-    0x62, 0x9F, 0x9A, 0x65, 0x4A, 0x44, 0x7E, 0x7E,-    0x3E, 0x4F, 0xAE, 0xEC, 0xF3, 0x4D, 0xCF, 0x65,-    0x8D, 0x2D, 0x4B, 0x98, 0xB7, 0xA2, 0xEC, 0x1A-  },-  {-    0xCF, 0xAB, 0x82, 0x99, 0xA0, 0xDA, 0x0C, 0x2A,-    0x7E, 0x8F, 0xF5, 0x4D, 0x0A, 0x67, 0x6D, 0x14,-    0x1A, 0xB2, 0x6B, 0xC0, 0x01, 0x2E, 0x5F, 0x66,-    0x8E, 0x85, 0xD8, 0x14, 0xBC, 0x98, 0x88, 0xB0-  },-  {-    0xA6, 0x26, 0x54, 0x3C, 0x27, 0x1F, 0xCC, 0xC3,-    0xE4, 0x45, 0x0B, 0x48, 0xD6, 0x6B, 0xC9, 0xCB,-    0xDE, 0xB2, 0x5E, 0x5D, 0x07, 0x7A, 0x62, 0x13,-    0xCD, 0x90, 0xCB, 0xBD, 0x0F, 0xD2, 0x20, 0x76-  },-  {-    0x05, 0xCF, 0x3A, 0x90, 0x04, 0x91, 0x16, 0xDC,-    0x60, 0xEF, 0xC3, 0x15, 0x36, 0xAA, 0xA3, 0xD1,-    0x67, 0x76, 0x29, 0x94, 0x89, 0x28, 0x76, 0xDC,-    0xB7, 0xEF, 0x3F, 0xBE, 0xCD, 0x74, 0x49, 0xC0-  },-  {-    0xCC, 0xD6, 0x1C, 0x92, 0x6C, 0xC1, 0xE5, 0xE9,-    0x12, 0x8C, 0x02, 0x1C, 0x0C, 0x6E, 0x92, 0xAE,-    0xFC, 0x4F, 0xFB, 0xDE, 0x39, 0x4D, 0xD6, 0xF3,-    0xB7, 0xD8, 0x7A, 0x8C, 0xED, 0x89, 0x60, 0x14-  },-  {-    0x3F, 0xFA, 0x4F, 0x6D, 0xAF, 0xA5, 0x7F, 0x1C,-    0x50, 0xF1, 0xAF, 0xA4, 0xF8, 0x12, 0x92, 0xAE,-    0x71, 0xA0, 0x6F, 0xE4, 0xF8, 0xFF, 0x46, 0xC5,-    0x1D, 0x32, 0xFF, 0x26, 0x13, 0x48, 0x9F, 0x2B-  },-  {-    0x19, 0xD3, 0x92, 0x1C, 0xFC, 0x0F, 0x1A, 0x2B,-    0xB8, 0x13, 0xB3, 0xDF, 0xA9, 0x6D, 0xF9, 0x0E,-    0x2C, 0x6B, 0x87, 0xD7, 0x8E, 0x92, 0x38, 0xF8,-    0x5B, 0xBC, 0x77, 0xAE, 0x9A, 0x73, 0xF9, 0x8F-  },-  {-    0xF5, 0xC9, 0x16, 0xFF, 0x2B, 0xAD, 0xDE, 0x3E,-    0x29, 0xA5, 0xF9, 0x40, 0x23, 0x3E, 0xA3, 0x40,-    0x07, 0xD8, 0xF1, 0x82, 0xA4, 0x8A, 0x80, 0x8B,-    0x46, 0xBB, 0x80, 0x58, 0x00, 0x3F, 0x19, 0x03-  },-  {-    0x6B, 0xA0, 0x7A, 0x1A, 0xF7, 0x58, 0xE6, 0x82,-    0xD3, 0xE0, 0x9A, 0xDD, 0x2D, 0x3D, 0xCD, 0xF3,-    0x5D, 0x95, 0x53, 0xF6, 0x79, 0x98, 0x54, 0xA2,-    0x7E, 0x53, 0x60, 0x63, 0xC5, 0x7F, 0x81, 0xA5-  },-  {-    0xB7, 0x83, 0x78, 0xFB, 0x44, 0x6C, 0x54, 0x4B,-    0x04, 0xD4, 0xA1, 0x52, 0xAC, 0x49, 0x57, 0x31,-    0x61, 0xB3, 0xDD, 0xEB, 0xF6, 0x93, 0x86, 0x77,-    0x0A, 0x55, 0xA7, 0xD4, 0x7B, 0x88, 0x0E, 0x5D-  },-  {-    0xB5, 0x19, 0x53, 0x8F, 0xE1, 0x62, 0x6F, 0x0C,-    0x59, 0x59, 0x45, 0xAD, 0xA5, 0x8A, 0x34, 0x4F,-    0xAA, 0xC0, 0x06, 0x17, 0x61, 0xCC, 0x9D, 0x4A,-    0x84, 0x14, 0x19, 0xBD, 0x32, 0xEE, 0xC0, 0xD9-  },-  {-    0x96, 0xE4, 0x88, 0xB0, 0x27, 0x89, 0x64, 0x13,-    0xF4, 0x03, 0x4B, 0x03, 0x54, 0xF4, 0x84, 0x84,-    0xF6, 0xCF, 0xC1, 0x0F, 0x8E, 0xC5, 0x7B, 0x02,-    0x6F, 0xD2, 0x1A, 0x3B, 0x88, 0x36, 0x1A, 0x74-  },-  {-    0x77, 0x0C, 0x8A, 0x5F, 0x47, 0xBF, 0xD7, 0x69,-    0xCE, 0xD3, 0x5A, 0x71, 0xAF, 0xC3, 0xCA, 0x1F,-    0xF4, 0xC1, 0xF1, 0xE7, 0xCC, 0x3D, 0x23, 0x56,-    0xDE, 0x94, 0x50, 0x04, 0x36, 0x8D, 0x81, 0x45-  },-  {-    0x6D, 0xF9, 0xD8, 0xD0, 0xD3, 0xA8, 0xD9, 0x8C,-    0x83, 0x50, 0xD7, 0x16, 0x2B, 0xD1, 0x55, 0x79,-    0xD5, 0x70, 0x7A, 0xDD, 0x76, 0x11, 0xA0, 0x0E,-    0xEB, 0x6C, 0xA5, 0x74, 0x3E, 0xD7, 0x8C, 0xB7-  },-  {-    0x4F, 0x0F, 0xE8, 0xFC, 0x17, 0x90, 0x15, 0x91,-    0xCF, 0x34, 0x87, 0x30, 0xE1, 0x87, 0xDE, 0x52,-    0x3D, 0x6D, 0x75, 0x68, 0xC1, 0xFB, 0xD8, 0x24,-    0x85, 0x91, 0x39, 0x85, 0xEB, 0x67, 0x97, 0x1C-  },-  {-    0x0E, 0xF3, 0xBB, 0x35, 0xCF, 0x37, 0x2B, 0xD9,-    0x4E, 0x3F, 0x80, 0xEE, 0xCE, 0xBD, 0x50, 0xEF,-    0x0D, 0x03, 0x08, 0xE0, 0x1E, 0x0E, 0xD6, 0xDE,-    0x0F, 0x5A, 0x8A, 0x8C, 0x81, 0x8A, 0x00, 0x74-  },-  {-    0xC0, 0x38, 0xD3, 0xE8, 0x09, 0xA5, 0xE3, 0xA5,-    0x8D, 0xB2, 0xF9, 0x1C, 0x15, 0xAE, 0x12, 0x43,-    0x95, 0x78, 0xF7, 0x54, 0x85, 0xCD, 0x84, 0xF5,-    0x56, 0xC6, 0x97, 0x1E, 0x8E, 0x25, 0x06, 0x20-  },-  {-    0xCE, 0x39, 0x9A, 0x0F, 0x08, 0x27, 0x7D, 0x8D,-    0x48, 0x16, 0x09, 0x50, 0x60, 0xEB, 0xBF, 0x33,-    0xDA, 0x01, 0x6F, 0xB4, 0x3A, 0x6C, 0x35, 0x6D,-    0x5A, 0x3F, 0xE4, 0xBB, 0x57, 0x4C, 0x5E, 0x7B-  },-  {-    0x86, 0x9F, 0x7E, 0x31, 0x6B, 0x19, 0x4F, 0x95,-    0x31, 0xBC, 0xAF, 0x33, 0xF7, 0x91, 0x3F, 0x1B,-    0x9C, 0xFC, 0x6B, 0xB5, 0xDC, 0xF8, 0x6B, 0x69,-    0x2B, 0xF8, 0xCA, 0xB2, 0x9B, 0x8A, 0xA9, 0x6F-  },-  {-    0x32, 0x7D, 0xFA, 0x46, 0x44, 0x59, 0xD9, 0xE4,-    0x8F, 0x5E, 0x55, 0xC7, 0xF5, 0xBA, 0xA6, 0x8F,-    0xC4, 0xA2, 0x5A, 0xD6, 0x22, 0xBC, 0x7B, 0xF0,-    0x1A, 0xCA, 0x82, 0xFD, 0x5E, 0x72, 0x31, 0x4C-  },-  {-    0xE0, 0x0D, 0xAD, 0x31, 0x51, 0xB9, 0x08, 0x5E,-    0xAE, 0x78, 0x69, 0x84, 0xFE, 0x20, 0x73, 0x52,-    0x32, 0xB7, 0xFF, 0x7F, 0x1B, 0x1D, 0xB7, 0x96,-    0x1F, 0xD0, 0xD0, 0xE0, 0xF6, 0x05, 0xDB, 0x9A-  },-  {-    0x07, 0x6F, 0x64, 0x45, 0x20, 0xD0, 0xB4, 0x73,-    0x2D, 0x6C, 0x53, 0x1C, 0x93, 0x49, 0x08, 0x90,-    0x26, 0x93, 0x6D, 0x99, 0x82, 0x04, 0x61, 0xDA,-    0x87, 0x74, 0x9A, 0x52, 0x0F, 0xBE, 0x90, 0xCE-  },-  {-    0xB4, 0x41, 0x4C, 0xA1, 0x37, 0x3B, 0xE4, 0x6F,-    0x15, 0xCE, 0xA6, 0xB1, 0x25, 0x5A, 0x7D, 0x18,-    0x86, 0xC6, 0xFD, 0xB0, 0x8E, 0xD5, 0xAF, 0x96,-    0x57, 0xD5, 0xAA, 0xC3, 0x17, 0xDE, 0x3A, 0x29-  },-  {-    0x8D, 0x1A, 0xB0, 0x26, 0x3D, 0xAB, 0x7B, 0x86,-    0xEC, 0xEE, 0x21, 0x91, 0x62, 0xD9, 0x99, 0xA0,-    0x12, 0x45, 0x57, 0x22, 0x69, 0xDE, 0x31, 0x10,-    0x0E, 0x5D, 0x88, 0xFC, 0x1B, 0x1E, 0xAA, 0x69-  },-  {-    0xB4, 0x8D, 0x1C, 0x1F, 0x83, 0x92, 0x4A, 0x02,-    0xA2, 0x3E, 0x5E, 0x0F, 0x97, 0x1E, 0x16, 0xE8,-    0x7F, 0xC4, 0x88, 0x48, 0x53, 0x83, 0x34, 0x85,-    0x19, 0x1A, 0x2B, 0x60, 0x72, 0x2F, 0xE2, 0x69-  },-  {-    0xF2, 0xED, 0xD5, 0xF7, 0x50, 0xA2, 0x0A, 0x54,-    0x1D, 0x3F, 0x6B, 0xD5, 0xDF, 0x80, 0x83, 0x8F,-    0x11, 0x82, 0x5B, 0x25, 0xA9, 0x8F, 0x3D, 0xA5,-    0xE1, 0x52, 0x3B, 0xFF, 0x81, 0x3B, 0xB5, 0x60-  },-  {-    0x07, 0x16, 0x60, 0x04, 0xEF, 0x88, 0xE1, 0x61,-    0x4E, 0xBD, 0xC8, 0x87, 0xDF, 0xC7, 0xDA, 0x42,-    0xEB, 0xCD, 0xA0, 0x2D, 0x92, 0xC1, 0x2F, 0x18,-    0xD1, 0x18, 0x6C, 0xE3, 0xC9, 0x87, 0x10, 0xE4-  },-  {-    0x69, 0xF8, 0x3A, 0xA1, 0x01, 0xD6, 0x9B, 0x8F,-    0x12, 0x20, 0xDC, 0x1C, 0x53, 0x8D, 0x89, 0x34,-    0x45, 0x84, 0x20, 0xBE, 0x33, 0x5F, 0xEB, 0x46,-    0xFF, 0xC4, 0x7A, 0x2C, 0x8E, 0x2E, 0x6A, 0x8A-  },-  {-    0xE1, 0x46, 0x9F, 0x16, 0xC6, 0xFC, 0xA1, 0x51,-    0x19, 0xA2, 0x72, 0xE5, 0x85, 0xC7, 0xF5, 0x04,-    0x21, 0xBC, 0x8A, 0x41, 0x4C, 0x86, 0x4F, 0xC7,-    0x6B, 0x01, 0x04, 0x8D, 0x4C, 0x6F, 0xC5, 0xD2-  },-  {-    0x67, 0x63, 0x34, 0x3A, 0x1C, 0x80, 0xF1, 0x92,-    0x83, 0xA8, 0x0A, 0xF8, 0x54, 0xE7, 0xE9, 0x06,-    0x5C, 0x2A, 0x83, 0x49, 0xEF, 0x11, 0xF1, 0x1B,-    0xFB, 0x76, 0xBA, 0x9F, 0x97, 0x04, 0x85, 0x39-  },-  {-    0x1A, 0xE3, 0xA0, 0xB8, 0xB2, 0xC7, 0x88, 0x5B,-    0xA3, 0x18, 0xAD, 0x6F, 0xD4, 0x49, 0xFC, 0x4D,-    0x7F, 0x84, 0x04, 0xB5, 0x9C, 0xF3, 0x27, 0x5F,-    0xCD, 0xEA, 0x13, 0x56, 0x34, 0x25, 0x77, 0x2D-  },-  {-    0x3A, 0x71, 0x18, 0x4C, 0xBE, 0x8E, 0xB5, 0x8E,-    0x68, 0x12, 0xBA, 0x7A, 0x7A, 0x1D, 0xCA, 0x0C,-    0xA2, 0x8E, 0xEC, 0x63, 0x78, 0x2F, 0x2E, 0x6E,-    0x3C, 0x0B, 0x87, 0x07, 0x3F, 0x53, 0x3F, 0xFD-  },-  {-    0x18, 0x4C, 0xCF, 0x2A, 0x52, 0xF3, 0x88, 0xC9,-    0xF8, 0x97, 0xA8, 0x57, 0xFE, 0x7C, 0xCE, 0xC2,-    0x95, 0x99, 0x11, 0xA8, 0xD1, 0xE0, 0x9E, 0xE8,-    0x80, 0x4D, 0x8D, 0x5D, 0x50, 0x8D, 0xD9, 0x18-  },-  {-    0xA6, 0x6D, 0x40, 0x9A, 0xF7, 0xAF, 0xD7, 0x5B,-    0xE8, 0x31, 0xDD, 0x49, 0x8C, 0x19, 0x6E, 0xF1,-    0x2C, 0x73, 0xC3, 0x11, 0x29, 0xEC, 0x02, 0xD5,-    0xF1, 0x2A, 0xB0, 0x2A, 0x2C, 0x63, 0xA2, 0x5E-  },-  {-    0x58, 0xB3, 0x74, 0x97, 0xFC, 0xF0, 0xBE, 0x0E,-    0x0C, 0xF1, 0x73, 0x40, 0x45, 0xC2, 0x95, 0xB2,-    0x86, 0xC7, 0x6A, 0x7C, 0x04, 0x8E, 0x87, 0xC5,-    0x40, 0x28, 0xED, 0x36, 0x91, 0x5B, 0x5D, 0xF3-  },-  {-    0x2C, 0x73, 0x33, 0x54, 0x0A, 0x83, 0x2D, 0x64,-    0x45, 0x6E, 0x43, 0x05, 0x8C, 0x50, 0xD9, 0x3C,-    0x93, 0x2A, 0xD9, 0xB1, 0x8B, 0x3F, 0xC3, 0xA0,-    0x59, 0x92, 0x07, 0xCD, 0xA3, 0xB3, 0xC7, 0xA6-  },-  {-    0x3D, 0xC0, 0x62, 0xFF, 0xB5, 0x7D, 0x83, 0x5F,-    0xE3, 0xAA, 0x40, 0x94, 0x66, 0x82, 0x2F, 0x91,-    0x86, 0x91, 0x84, 0x23, 0x94, 0x75, 0x05, 0x16,-    0x5F, 0xDC, 0xDF, 0xB7, 0x30, 0x6F, 0x72, 0x59-  },-  {-    0x89, 0x20, 0x48, 0x44, 0xAC, 0xB9, 0x2F, 0x35,-    0x3B, 0xFC, 0x89, 0xA3, 0xCE, 0x8A, 0x98, 0x17,-    0x21, 0x9C, 0x10, 0x13, 0x85, 0xC5, 0x93, 0xCF,-    0x60, 0xE0, 0xBE, 0xFA, 0x96, 0x38, 0xE1, 0x4E-  },-  {-    0x78, 0x2B, 0xA9, 0x02, 0xE9, 0x12, 0x32, 0x94,-    0x1C, 0x78, 0xC4, 0x9C, 0xD9, 0x77, 0x1A, 0x5D,-    0x99, 0x92, 0xF9, 0xB0, 0x7D, 0x9C, 0x0A, 0x2D,-    0xF8, 0x2D, 0x38, 0x5D, 0x15, 0xC4, 0x2B, 0xB3-  },-  {-    0x0D, 0xC3, 0xFF, 0x7D, 0xF0, 0xDF, 0xC0, 0x23,-    0x76, 0x3D, 0x76, 0x34, 0xE1, 0x8D, 0xA2, 0x73,-    0x93, 0xFC, 0x9F, 0xDB, 0x1C, 0x15, 0x46, 0x46,-    0x86, 0x10, 0x75, 0xF0, 0xA8, 0x7D, 0x0E, 0x90-  },-  {-    0xB9, 0x5C, 0x65, 0xFB, 0x6F, 0x25, 0x4E, 0xDB,-    0xDE, 0x8C, 0x03, 0x7D, 0x5C, 0x8B, 0x20, 0x39,-    0x34, 0x0F, 0x4A, 0xC2, 0xB0, 0x23, 0xA6, 0xAA,-    0x28, 0xA8, 0xFC, 0xD2, 0xD2, 0x68, 0x9C, 0xF4-  },-  {-    0x87, 0xE8, 0xF5, 0x15, 0x72, 0xA5, 0xD6, 0xA2,-    0x39, 0xF8, 0x5B, 0xC5, 0x3E, 0x11, 0x74, 0xE1,-    0x5B, 0xE1, 0x2F, 0xCD, 0xF1, 0x51, 0xA0, 0xB9,-    0xA2, 0xB4, 0x36, 0x40, 0xCA, 0xF7, 0x4C, 0x1D-  },-  {-    0x2A, 0x6F, 0x3E, 0x46, 0x2C, 0x40, 0x5C, 0x35,-    0x4F, 0xE8, 0x0F, 0xCC, 0xCE, 0xD1, 0xC9, 0xBE,-    0x44, 0x32, 0x5D, 0x29, 0xE0, 0x7D, 0xA3, 0x09,-    0x60, 0xB6, 0x25, 0xA7, 0x6E, 0xA4, 0x2F, 0x83-  },-  {-    0x20, 0xB4, 0x6C, 0x8F, 0xBF, 0xCA, 0x97, 0x45,-    0x32, 0x62, 0x46, 0x0F, 0x84, 0x98, 0xA7, 0xE2,-    0xAF, 0x15, 0xAC, 0x79, 0xB5, 0x9D, 0xDF, 0xB0,-    0x27, 0xBB, 0x52, 0xF2, 0xD6, 0x8E, 0x8F, 0x51-  },-  {-    0x31, 0xB0, 0x76, 0x3C, 0xB9, 0xBA, 0x92, 0x40,-    0x3D, 0xCA, 0x1A, 0xBD, 0xD7, 0x34, 0x2D, 0x7D,-    0xE9, 0x4C, 0x58, 0x1E, 0x76, 0xF7, 0xC9, 0xA6,-    0x1E, 0x51, 0x59, 0x28, 0xE1, 0x0B, 0x4E, 0x77-  },-  {-    0xE1, 0x91, 0xE1, 0x17, 0x06, 0x3C, 0xFA, 0xC9,-    0x64, 0x2C, 0xD9, 0x3C, 0xB4, 0x2B, 0x39, 0xED,-    0xDD, 0x9E, 0x4A, 0xB6, 0x5F, 0x1D, 0x03, 0x97,-    0xE3, 0xE1, 0x7D, 0xD0, 0x4C, 0xAB, 0x11, 0x80-  },-  {-    0x22, 0x5A, 0x20, 0x21, 0x07, 0xA7, 0x47, 0x03,-    0xE0, 0x41, 0xC6, 0xCC, 0xA4, 0xEA, 0xCF, 0x4F,-    0x21, 0xEE, 0xA6, 0xF2, 0x2A, 0x14, 0x6D, 0x8D,-    0xA2, 0xAB, 0x8C, 0xF6, 0x19, 0x72, 0x29, 0xA5-  },-  {-    0xEF, 0xC4, 0x83, 0x6B, 0xE4, 0xAC, 0x3E, 0x97,-    0x91, 0xD2, 0xEC, 0x62, 0x22, 0x6E, 0x7D, 0xF6,-    0x41, 0x18, 0xF4, 0x56, 0x5C, 0x19, 0xE6, 0xC9,-    0xE8, 0x40, 0x63, 0xF5, 0x66, 0x1C, 0x7B, 0x2F-  },-  {-    0x3A, 0x76, 0xB0, 0x15, 0x2C, 0x0E, 0x1D, 0x1F,-    0xD7, 0xAC, 0x9D, 0x91, 0xA2, 0x8A, 0x18, 0xE1,-    0xA4, 0xC0, 0x60, 0x80, 0xF2, 0xB7, 0xEC, 0xEF,-    0xB6, 0xEF, 0xFE, 0x28, 0xB8, 0xCF, 0xC7, 0x65-  },-  {-    0x0D, 0x46, 0xAD, 0x03, 0x90, 0x70, 0x11, 0x58,-    0x28, 0xF9, 0x4E, 0xB6, 0xB7, 0x29, 0x63, 0xE6,-    0x0A, 0x7D, 0x2D, 0xB7, 0xCA, 0x89, 0x91, 0xD2,-    0x25, 0xC3, 0x87, 0x7B, 0x14, 0x9B, 0x0A, 0x8A-  },-  {-    0xE4, 0x4C, 0xFC, 0x42, 0x11, 0x8F, 0x09, 0x6B,-    0xFC, 0x51, 0x52, 0x1C, 0xB1, 0x8D, 0x5D, 0x65,-    0x25, 0x58, 0x6B, 0x98, 0x9F, 0x4E, 0xE2, 0xB8,-    0x28, 0xC5, 0x19, 0x9F, 0xEA, 0xB9, 0x4B, 0x82-  },-  {-    0x6D, 0x4B, 0xD2, 0xE0, 0x73, 0xEC, 0x49, 0x66,-    0x84, 0x7F, 0x5C, 0xBE, 0x88, 0xDD, 0xFA, 0xBA,-    0x2B, 0xE4, 0xCA, 0xF2, 0xF3, 0x33, 0x55, 0x2B,-    0x85, 0x53, 0xDA, 0x53, 0x34, 0x87, 0xC2, 0x5B-  },-  {-    0xBB, 0xC4, 0x6D, 0xB4, 0x37, 0xD1, 0x07, 0xC9,-    0x67, 0xCA, 0x6D, 0x91, 0x45, 0x5B, 0xBD, 0xFE,-    0x05, 0x21, 0x18, 0xAB, 0xD1, 0xD0, 0x69, 0xF0,-    0x43, 0x59, 0x48, 0x7E, 0x13, 0xAE, 0xA0, 0xE1-  },-  {-    0xB9, 0x74, 0xC1, 0x4D, 0xB7, 0xD3, 0x17, 0x4D,-    0xD0, 0x60, 0x84, 0xBB, 0x30, 0x31, 0x08, 0xB2,-    0xF0, 0xDA, 0xF5, 0x0E, 0xCC, 0xC3, 0x29, 0x35,-    0x43, 0x79, 0x5C, 0x96, 0x36, 0xC6, 0x24, 0x82-  },-  {-    0x0E, 0xEE, 0x23, 0x5B, 0x06, 0x93, 0x6A, 0xED,-    0x71, 0x73, 0xC8, 0xC1, 0x9A, 0xA7, 0xC2, 0x17,-    0xB9, 0xEE, 0xDA, 0xEB, 0x1A, 0x88, 0xF3, 0x05,-    0x52, 0xE9, 0x22, 0x51, 0x45, 0x14, 0x9E, 0x82-  },-  {-    0x36, 0xD0, 0x89, 0xE0, 0x25, 0xB5, 0x68, 0x69,-    0x37, 0x74, 0x28, 0x25, 0xE6, 0xEE, 0x3D, 0x83,-    0xE7, 0xD7, 0xA5, 0x0C, 0x82, 0x3C, 0x82, 0x88,-    0x34, 0x60, 0xF3, 0x85, 0x14, 0x7D, 0xC1, 0x7B-  },-  {-    0x77, 0xEE, 0x4F, 0xFC, 0x9F, 0x5D, 0xD6, 0x05,-    0x47, 0x0D, 0xC0, 0xE7, 0x4D, 0x6B, 0x17, 0xC5,-    0x13, 0x0D, 0x8B, 0x73, 0x91, 0x3F, 0x36, 0xD5,-    0xF8, 0x78, 0x7E, 0x61, 0x9A, 0x94, 0x7C, 0xA0-  },-  {-    0x0F, 0xE6, 0xC2, 0xAB, 0x75, 0x42, 0x33, 0x36,-    0x0D, 0x68, 0xB9, 0xAC, 0x80, 0xCD, 0x61, 0x18,-    0x4B, 0xFA, 0xA7, 0xD3, 0x56, 0x29, 0x41, 0x80,-    0x02, 0x5F, 0xE4, 0x06, 0x39, 0xC7, 0x6C, 0x36-  },-  {-    0x99, 0x60, 0x88, 0xC7, 0x94, 0x56, 0xEC, 0xDD,-    0xA1, 0xFB, 0xC0, 0x2E, 0xE1, 0xBA, 0x42, 0xD9,-    0x1D, 0x85, 0x8C, 0x31, 0x0A, 0x5A, 0x8B, 0x46,-    0x74, 0xFE, 0x6A, 0x7C, 0x14, 0x44, 0x14, 0xA1-  },-  {-    0x9E, 0x33, 0x8A, 0xED, 0x0B, 0xC7, 0x1C, 0x0C,-    0x97, 0xF1, 0x98, 0x55, 0xBF, 0x49, 0x17, 0x4F,-    0x70, 0xA9, 0xD7, 0x70, 0x14, 0x87, 0x36, 0x63,-    0x21, 0x34, 0x27, 0x50, 0x2B, 0xD8, 0x5D, 0x9F-  },-  {-    0x4A, 0x84, 0x3D, 0x26, 0xAD, 0xEC, 0x52, 0x0E,-    0x4B, 0x5D, 0xBF, 0x01, 0x45, 0xCC, 0x4F, 0x50,-    0x24, 0xFA, 0xFC, 0xDC, 0x20, 0x25, 0x82, 0x4A,-    0x8C, 0x64, 0x65, 0x06, 0x17, 0x68, 0x7E, 0xE7-  },-  {-    0xC9, 0x16, 0x78, 0xC4, 0xA6, 0x4E, 0x2F, 0xA4,-    0xB7, 0x4D, 0xE6, 0x1A, 0xD0, 0xC0, 0x6F, 0xF0,-    0x6B, 0x5D, 0x67, 0x2F, 0xA7, 0xC6, 0x87, 0x7A,-    0x40, 0x14, 0xCE, 0x9E, 0x91, 0xBE, 0x38, 0xD7-  },-  {-    0xFF, 0x77, 0x77, 0x40, 0x5D, 0x32, 0x7A, 0xDB,-    0x58, 0x30, 0x1C, 0x71, 0x1E, 0xCD, 0xC2, 0xBC,-    0xE1, 0xBF, 0xA8, 0x29, 0xFF, 0xC9, 0xB1, 0x17,-    0xF2, 0x1A, 0x2B, 0x19, 0x8D, 0x0D, 0x68, 0x84-  },-  {-    0x0A, 0x8D, 0xDA, 0xF1, 0x72, 0x8C, 0x5C, 0xD9,-    0x3A, 0x25, 0x5D, 0x56, 0x23, 0xC3, 0xDA, 0xDA,-    0x2D, 0x3D, 0x05, 0x71, 0xBF, 0x14, 0x38, 0xAD,-    0xC8, 0xC9, 0x64, 0xA9, 0xAA, 0xD1, 0x18, 0xCB-  },-  {-    0xC1, 0x33, 0xAB, 0xBD, 0x0D, 0x2D, 0x80, 0x8A,-    0x67, 0xB6, 0x74, 0x5B, 0x4B, 0x36, 0x50, 0xB4,-    0xA6, 0x4D, 0xC2, 0x76, 0xCF, 0x98, 0xE3, 0x03,-    0x57, 0xB6, 0xAB, 0xD5, 0xC1, 0xD2, 0x2A, 0x9B-  },-  {-    0xC5, 0x9E, 0xE5, 0xC1, 0x96, 0xBA, 0x3C, 0xFE,-    0xF9, 0x40, 0x87, 0x79, 0x82, 0x07, 0xBD, 0xCE,-    0xF1, 0x39, 0xCE, 0x2C, 0xF7, 0x8D, 0xCE, 0xD6,-    0x19, 0x8F, 0x0F, 0xA3, 0xA4, 0x09, 0x13, 0x1C-  },-  {-    0xC7, 0xFD, 0xAD, 0xE5, 0x9C, 0x46, 0x99, 0x38,-    0x5E, 0xBA, 0x59, 0xE7, 0x56, 0xC2, 0xB1, 0x71,-    0xB0, 0x23, 0xDE, 0xAE, 0x08, 0x2E, 0x5A, 0x6E,-    0x3B, 0xFB, 0xDC, 0x10, 0x73, 0xA3, 0x20, 0x03-  },-  {-    0x97, 0x53, 0x27, 0xC5, 0xF4, 0xDE, 0xC6, 0x41,-    0x4B, 0x6E, 0x00, 0xCB, 0x04, 0x23, 0x37, 0xB8,-    0xD2, 0xA6, 0x56, 0x46, 0x37, 0xA7, 0x44, 0x2A,-    0xEC, 0x7B, 0xE8, 0xF8, 0xC8, 0x9A, 0x2F, 0x1C-  },-  {-    0xA2, 0xF7, 0x24, 0x6D, 0xF4, 0xA2, 0x4E, 0xFB,-    0xAC, 0xD3, 0xFD, 0x60, 0x68, 0x3A, 0xBC, 0x86,-    0x8B, 0xEF, 0x25, 0x32, 0x70, 0x52, 0xCF, 0x2F,-    0x1D, 0x93, 0xEC, 0xE4, 0xFF, 0xCD, 0x73, 0xC6-  },-  {-    0x49, 0x7F, 0xB2, 0xAC, 0xAC, 0xF1, 0x23, 0xF3,-    0x59, 0x5E, 0x40, 0xFC, 0x51, 0xA7, 0xBD, 0x24,-    0x45, 0x8B, 0xBC, 0xBA, 0x4A, 0x29, 0x40, 0xA5,-    0xCB, 0x03, 0xD6, 0x08, 0xFB, 0xDF, 0x28, 0x25-  },-  {-    0x0E, 0x97, 0xD2, 0x27, 0x93, 0xCE, 0x6F, 0x28,-    0x3D, 0x5C, 0x74, 0x0D, 0x30, 0x8A, 0x27, 0xAD,-    0x7C, 0x3B, 0x0D, 0x9A, 0xFC, 0xD3, 0xD9, 0xE9,-    0xB9, 0xCA, 0xC5, 0x6B, 0x10, 0x29, 0x0C, 0x8F-  },-  {-    0x66, 0x30, 0xB3, 0x56, 0x18, 0xE7, 0x00, 0xD9,-    0x10, 0x68, 0x38, 0x93, 0x79, 0x5E, 0xF7, 0x0B,-    0xF0, 0x7E, 0xB1, 0x56, 0xF5, 0x5F, 0xFE, 0x3B,-    0x69, 0xAD, 0x88, 0xA4, 0xB8, 0xB0, 0xBF, 0xA1-  },-  {-    0x02, 0xF7, 0x42, 0xC6, 0xE9, 0x52, 0x78, 0x12,-    0x1A, 0x05, 0xE4, 0x42, 0x05, 0x44, 0x4F, 0xC5,-    0xEA, 0x6A, 0xF5, 0xE7, 0x41, 0xC5, 0x35, 0xBC,-    0x2C, 0xBC, 0x3B, 0x23, 0x5A, 0x2E, 0xA2, 0xB0-  },-  {-    0x46, 0x22, 0xF3, 0x6E, 0xB8, 0x98, 0x38, 0x3F,-    0x60, 0xD5, 0xBE, 0xD8, 0x09, 0xAC, 0x5C, 0x47,-    0x45, 0xC5, 0xD6, 0xAB, 0x84, 0xBC, 0xAD, 0xF7,-    0x9C, 0xF2, 0xA9, 0x6D, 0x4E, 0xC8, 0x88, 0x18-  },-  {-    0xCC, 0xD1, 0x1F, 0xAA, 0xA0, 0x58, 0x1E, 0xC3,-    0x2C, 0x3A, 0x40, 0x3F, 0x92, 0xEF, 0x43, 0xD5,-    0xDC, 0xF1, 0x95, 0xC1, 0xA1, 0x01, 0xDB, 0xFD,-    0x49, 0x5D, 0xBB, 0x4D, 0xCE, 0x80, 0x69, 0xE0-  },-  {-    0x06, 0x02, 0x4D, 0x6B, 0x07, 0xE0, 0x00, 0xBC,-    0xE6, 0x13, 0x47, 0x0A, 0x28, 0x80, 0x51, 0x9B,-    0x8B, 0xE4, 0xA3, 0x6B, 0xF3, 0x3C, 0x99, 0xC9,-    0x17, 0x89, 0x3E, 0xC7, 0x5D, 0xD9, 0x0F, 0xE3-  },-  {-    0xD9, 0x3A, 0xF9, 0x47, 0xB1, 0x46, 0x3A, 0x81,-    0x7D, 0xB4, 0x41, 0xA4, 0x74, 0x58, 0x8D, 0x6F,-    0x99, 0x6D, 0x24, 0x39, 0x83, 0xE8, 0x3C, 0x7E,-    0xEE, 0x90, 0xE1, 0xEF, 0xA4, 0x40, 0xD9, 0xBA-  },-  {-    0x94, 0x89, 0x89, 0x45, 0xA7, 0xDB, 0x25, 0x9E,-    0x1B, 0x2E, 0x7C, 0xBE, 0xA4, 0x8A, 0xA0, 0xC6,-    0xD6, 0x57, 0x0D, 0x18, 0x17, 0x9F, 0x06, 0x18,-    0x47, 0x1C, 0x88, 0xF3, 0xEC, 0x3B, 0x0F, 0xC3-  },-  {-    0x4C, 0x2D, 0x93, 0x52, 0x56, 0x39, 0x2A, 0xA2,-    0xBE, 0x6E, 0x10, 0x78, 0xC0, 0x59, 0x38, 0x15,-    0xAB, 0xEF, 0x46, 0x9D, 0xE9, 0x69, 0xB5, 0x7B,-    0x88, 0x1B, 0x93, 0xAF, 0x55, 0x84, 0x65, 0xFA-  },-  {-    0xAA, 0xC7, 0xBE, 0x16, 0xE5, 0x2F, 0x79, 0x0E,-    0x4F, 0xF7, 0x0B, 0x24, 0x01, 0x5C, 0xB1, 0x1B,-    0x40, 0x61, 0x6E, 0x94, 0xDB, 0x13, 0x88, 0x2B,-    0x41, 0xD3, 0xDD, 0x8C, 0x8C, 0x19, 0x52, 0xB7-  },-  {-    0x04, 0x34, 0xB4, 0x7C, 0x0E, 0xE7, 0xE6, 0xF5,-    0x39, 0x06, 0x79, 0x9A, 0x43, 0x20, 0x9D, 0x3F,-    0xC3, 0x7D, 0x3F, 0xD1, 0xF7, 0x45, 0x55, 0xDE,-    0x67, 0xAB, 0xAC, 0xB9, 0x51, 0xB0, 0x06, 0xF4-  },-  {-    0x04, 0x42, 0xFB, 0xDD, 0x5B, 0x58, 0x49, 0x6E,-    0xC7, 0x81, 0x59, 0xCC, 0xAA, 0x88, 0x7C, 0x88,-    0xA8, 0x61, 0xFC, 0xCA, 0x70, 0xE7, 0xAB, 0xC9,-    0x76, 0xF2, 0x4C, 0x11, 0x58, 0x8B, 0xE6, 0xEE-  },-  {-    0xA7, 0x3E, 0x68, 0xBB, 0x18, 0xB0, 0x07, 0x64,-    0x8E, 0x76, 0xB5, 0x52, 0x8D, 0x1E, 0x50, 0xE7,-    0xFA, 0x65, 0x4D, 0xA3, 0x97, 0x0E, 0xC3, 0x49,-    0xBF, 0x59, 0x1A, 0x30, 0xD9, 0x32, 0xC8, 0xF6-  },-  {-    0x84, 0x9C, 0xF8, 0x73, 0x16, 0x2B, 0xA7, 0x2C,-    0x4B, 0x80, 0x08, 0xE6, 0x8F, 0x93, 0x2F, 0xB3,-    0xA0, 0x15, 0xA7, 0x4F, 0xCF, 0x95, 0x71, 0x98,-    0xD5, 0x6A, 0x0D, 0xC4, 0x62, 0x5A, 0x74, 0xF5-  },-  {-    0xA6, 0xDE, 0xC6, 0xFC, 0x89, 0x49, 0x34, 0x9C,-    0x4E, 0x9A, 0x9C, 0x62, 0x36, 0x87, 0xFB, 0xA4,-    0xC9, 0xB2, 0x75, 0xBD, 0xB2, 0x30, 0x50, 0x9B,-    0x72, 0xE3, 0xD6, 0x71, 0x19, 0x14, 0xE2, 0xD8-  },-  {-    0x58, 0xAF, 0xC2, 0xB2, 0x4A, 0x19, 0xFD, 0xBF,-    0x76, 0xA0, 0x9B, 0x70, 0xB1, 0xE3, 0xB7, 0x7F,-    0xCB, 0xD4, 0x06, 0x50, 0x01, 0xD9, 0x63, 0x66,-    0x40, 0xEB, 0x5A, 0x26, 0x28, 0xF4, 0x42, 0xCC-  },-  {-    0x47, 0x3A, 0x43, 0xAA, 0x1D, 0x6A, 0x02, 0x87,-    0x67, 0x43, 0x2A, 0x83, 0x0A, 0xD1, 0x22, 0x1E,-    0x02, 0x9C, 0x58, 0x9A, 0xF9, 0xFD, 0x4D, 0x68,-    0xD5, 0x6C, 0x4F, 0xB8, 0x20, 0x25, 0x93, 0x52-  },-  {-    0xA0, 0xAE, 0xB4, 0xA5, 0xAD, 0x89, 0x9A, 0xF2,-    0xE2, 0x91, 0xB2, 0xE7, 0x9D, 0xBB, 0x6B, 0x0B,-    0xF5, 0x6B, 0x58, 0x44, 0x67, 0x6B, 0x95, 0x5D,-    0x94, 0x5B, 0x6C, 0x4A, 0xE1, 0xC0, 0x1E, 0xED-  },-  {-    0xCF, 0xC3, 0x02, 0x9A, 0x9E, 0xEB, 0x15, 0x22,-    0x22, 0xD9, 0x66, 0x53, 0x49, 0x2E, 0x46, 0xCA,-    0x64, 0xCA, 0x4F, 0x0D, 0x64, 0x68, 0x30, 0x28,-    0xD3, 0xAE, 0xE5, 0xA4, 0x9C, 0xB4, 0x71, 0x63-  },-  {-    0x74, 0x67, 0xCF, 0x77, 0x61, 0xCD, 0x9F, 0x55,-    0x61, 0x8D, 0x30, 0xC9, 0xD8, 0xC5, 0xB4, 0x1E,-    0x47, 0x01, 0x51, 0x0C, 0x7D, 0x16, 0xAB, 0x4E,-    0x5D, 0x89, 0xA5, 0xD7, 0x71, 0x46, 0xB0, 0x92-  },-  {-    0xC0, 0x16, 0xD8, 0x42, 0x4E, 0x53, 0x1E, 0xFC,-    0x57, 0x37, 0xC0, 0x3F, 0xC9, 0x0A, 0x5E, 0xFC,-    0x9F, 0x90, 0x22, 0xE4, 0xD5, 0xBA, 0x3B, 0x06,-    0x95, 0xF7, 0xAE, 0x53, 0x82, 0x60, 0xC2, 0xEE-  },-  {-    0x5D, 0x38, 0x11, 0x89, 0xE6, 0x00, 0x0F, 0xC1,-    0x17, 0xC7, 0x1F, 0x59, 0xF7, 0x86, 0xFB, 0x4B,-    0x79, 0xFD, 0xD4, 0xEC, 0x5D, 0x4C, 0xD3, 0x0A,-    0xAC, 0x21, 0x57, 0xF7, 0x5D, 0xEA, 0xD7, 0x78-  },-  {-    0x7C, 0x9C, 0xDD, 0x15, 0xC4, 0xC9, 0xAB, 0xCA,-    0xCB, 0xFE, 0x6F, 0x66, 0x4A, 0x7F, 0x5F, 0x8B,-    0x2E, 0x25, 0x91, 0x83, 0x29, 0x1A, 0xE5, 0xCC,-    0x91, 0x30, 0xA0, 0xB2, 0x41, 0xE5, 0x73, 0x7F-  },-  {-    0xB8, 0x81, 0x31, 0x72, 0xF5, 0x21, 0x8A, 0xC3,-    0xEB, 0x68, 0x7B, 0xC4, 0xAF, 0xAF, 0xF8, 0x3F,-    0xBC, 0xA4, 0xE9, 0xC1, 0xA4, 0x62, 0x96, 0x33,-    0x01, 0xDD, 0x44, 0x59, 0x85, 0x01, 0x50, 0xA2-  },-  {-    0xE3, 0xD1, 0x30, 0xE3, 0x6A, 0x02, 0x8E, 0xA8,-    0x0C, 0x57, 0xA2, 0xAA, 0x48, 0x19, 0xFD, 0x34,-    0xE4, 0xDB, 0xBE, 0xB1, 0x4A, 0x49, 0x58, 0x94,-    0xB1, 0x5A, 0x87, 0x87, 0xDB, 0x1A, 0x9F, 0x9C-  },-  {-    0xFF, 0xF1, 0xB4, 0x40, 0x0F, 0x48, 0x9E, 0x07,-    0xD2, 0x23, 0x51, 0xC1, 0xF0, 0x95, 0x65, 0xE2,-    0x65, 0xB6, 0x8A, 0xD2, 0x9F, 0x63, 0x29, 0x87,-    0x9E, 0x6B, 0x5F, 0x7F, 0x6B, 0x41, 0x93, 0x50-  },-  {-    0x55, 0x9E, 0xD5, 0xBB, 0x3E, 0x5F, 0x39, 0x85,-    0xFB, 0x57, 0x82, 0x28, 0xBF, 0x8C, 0x0F, 0x0B,-    0x17, 0x3F, 0x8D, 0x11, 0x53, 0xFA, 0xEB, 0x9F,-    0xEC, 0x75, 0x6F, 0xFD, 0x18, 0xA8, 0x72, 0x38-  },-  {-    0x88, 0x13, 0x12, 0x53, 0x01, 0x4D, 0x23, 0xC5,-    0xE3, 0x8E, 0x78, 0xBD, 0xA1, 0x94, 0x55, 0xD8,-    0xA0, 0x23, 0xBD, 0x7A, 0x7E, 0x72, 0x74, 0x57,-    0xA1, 0x52, 0xA8, 0x1D, 0x0B, 0x17, 0x18, 0xA7-  },-  {-    0xF4, 0xD3, 0xFA, 0xE7, 0xCD, 0xE6, 0xBB, 0x66,-    0x71, 0x5A, 0x19, 0x8F, 0xA4, 0x8D, 0x21, 0x0C,-    0x10, 0xF8, 0xDF, 0x32, 0x04, 0xAE, 0x5E, 0x33,-    0xA6, 0x02, 0x46, 0x7F, 0x1B, 0x62, 0x26, 0x85-  },-  {-    0xE6, 0x2B, 0x62, 0x2A, 0xC8, 0xA2, 0x13, 0x66,-    0xBF, 0x2D, 0xED, 0x30, 0xF4, 0x08, 0x2A, 0x53,-    0xE7, 0x7A, 0x9A, 0xA6, 0x96, 0xB1, 0xF3, 0xEE,-    0x8C, 0xFE, 0x99, 0xC5, 0x93, 0x12, 0xD9, 0xC7-  },-  {-    0x3D, 0x39, 0xFF, 0xA8, 0x55, 0x12, 0xC3, 0xC8,-    0x89, 0x0D, 0x4B, 0xDF, 0x31, 0x88, 0x9C, 0xA6,-    0x6E, 0x5C, 0xEC, 0xB6, 0x3C, 0xFE, 0xED, 0x57,-    0xB9, 0x26, 0x37, 0x08, 0xE7, 0x4C, 0x55, 0x0B-  },-  {-    0xB1, 0x70, 0x3B, 0x8A, 0x00, 0xE2, 0x61, 0x24,-    0x97, 0xD1, 0x1C, 0x64, 0x9D, 0x15, 0x0A, 0x6C,-    0x96, 0x3B, 0xF4, 0xFD, 0x38, 0xFE, 0xB1, 0xC3,-    0x81, 0xFE, 0x0D, 0x9B, 0x04, 0xC0, 0x2B, 0x22-  },-  {-    0x12, 0xFB, 0xAD, 0x9D, 0x37, 0x82, 0x81, 0x2D,-    0x71, 0x17, 0x9A, 0x50, 0xFB, 0xD9, 0xB4, 0x56,-    0x6C, 0x7B, 0x06, 0xF5, 0xD7, 0x7C, 0x6F, 0x32,-    0x97, 0x17, 0xFB, 0x4A, 0xE2, 0xC5, 0xB4, 0xEC-  },-  {-    0x76, 0x8B, 0x65, 0x9A, 0x82, 0x4B, 0x43, 0xF9,-    0xCA, 0x56, 0x60, 0xB9, 0xDD, 0xF0, 0x5F, 0x8B,-    0xA2, 0xBC, 0x49, 0x93, 0x86, 0x6B, 0x7C, 0x9B,-    0xE6, 0x87, 0x91, 0xF5, 0xB2, 0x46, 0x44, 0xB3-  },-  {-    0xC0, 0x20, 0x4E, 0x23, 0xCA, 0x86, 0xBE, 0x20,-    0x5E, 0xED, 0x0C, 0xC3, 0xDD, 0x72, 0x25, 0xCE,-    0x5F, 0xFE, 0x1E, 0xE1, 0x2D, 0xAC, 0xB9, 0x3C,-    0x5D, 0x06, 0x29, 0xB7, 0x69, 0x9C, 0xD7, 0x33-  },-  {-    0xF4, 0x32, 0x96, 0x96, 0x1F, 0x8E, 0xAE, 0xCC,-    0xD8, 0x54, 0x41, 0x3D, 0xC5, 0xAD, 0xDA, 0x62,-    0x39, 0x3A, 0x34, 0x46, 0x27, 0xE8, 0x6C, 0x06,-    0x6E, 0x79, 0x07, 0x55, 0x00, 0x40, 0x74, 0x4F-  },-  {-    0x82, 0xF4, 0x46, 0x9E, 0x80, 0x78, 0x90, 0x21,-    0xC6, 0x1D, 0xB7, 0xE3, 0x2F, 0x36, 0xAC, 0xBE,-    0x59, 0x1A, 0x64, 0xF2, 0x60, 0x59, 0x26, 0x57,-    0x70, 0xAE, 0x65, 0x8D, 0x62, 0xBD, 0xE7, 0xEF-  },-  {-    0x2A, 0x85, 0x67, 0x1A, 0x55, 0xC8, 0x9F, 0xA1,-    0x56, 0xE2, 0x96, 0xF7, 0x5D, 0xF1, 0xC7, 0xDB,-    0xAB, 0x17, 0x8E, 0xBB, 0xA6, 0x52, 0x04, 0xA7,-    0xE8, 0x17, 0x8C, 0x91, 0x6A, 0xD0, 0x87, 0xF8-  },-  {-    0x33, 0xE2, 0x45, 0x00, 0x28, 0x08, 0xF6, 0x93,-    0x4B, 0x9B, 0xE3, 0xA6, 0xFA, 0x8E, 0x86, 0x70,-    0xC9, 0x0B, 0xAA, 0x62, 0x57, 0x17, 0xB9, 0x20,-    0x1E, 0xB9, 0xB9, 0xDD, 0x91, 0x2F, 0x5C, 0xE2-  },-  {-    0x58, 0xEE, 0x5E, 0x79, 0x91, 0x84, 0xAD, 0x9D,-    0xA9, 0xA1, 0x7C, 0x5B, 0x46, 0xA4, 0x81, 0x0E,-    0x28, 0xBD, 0xD0, 0x8C, 0x35, 0x81, 0x63, 0x4C,-    0x83, 0x50, 0x30, 0x53, 0x9B, 0x79, 0x54, 0x4D-  },-  {-    0x26, 0xD8, 0xFA, 0x08, 0xDB, 0x30, 0x8E, 0xDF,-    0x2F, 0x96, 0xF8, 0x2A, 0xF6, 0xB6, 0x0C, 0x17,-    0xD8, 0xF1, 0xFF, 0x85, 0x8C, 0x52, 0xF2, 0xD0,-    0xF3, 0x83, 0x10, 0x78, 0x12, 0x75, 0x26, 0xA3-  },-  {-    0x25, 0xA5, 0x8D, 0xF4, 0x03, 0x92, 0x47, 0xA2,-    0x2F, 0x68, 0xFF, 0x2B, 0x71, 0x76, 0x6B, 0x7B,-    0x56, 0x00, 0xDD, 0xF4, 0x01, 0xD9, 0x9F, 0xF2,-    0xC1, 0x95, 0x5A, 0xE7, 0xBB, 0x43, 0xE5, 0x6A-  },-  {-    0xBE, 0x43, 0xE8, 0x68, 0x61, 0x60, 0xE9, 0x07,-    0xBA, 0x54, 0x7D, 0x5A, 0x87, 0x9D, 0x10, 0xF7,-    0x88, 0xAF, 0xC8, 0x42, 0xB8, 0xEB, 0xB9, 0xF3,-    0xF7, 0x88, 0x53, 0x25, 0x15, 0x91, 0x2A, 0xE4-  },-  {-    0xAA, 0x4A, 0xCB, 0x95, 0xD8, 0x79, 0x19, 0x2A,-    0x69, 0x08, 0xE8, 0x8A, 0xE3, 0xD6, 0x58, 0x9F,-    0x4E, 0x3E, 0xB3, 0xD4, 0xE0, 0x3A, 0x80, 0x6C,-    0xCD, 0xB9, 0xB5, 0xD6, 0xA9, 0x58, 0x6F, 0xDF-  },-  {-    0x84, 0x66, 0xD5, 0xE4, 0x4C, 0xE9, 0x5B, 0x4F,-    0xA1, 0x79, 0x99, 0x24, 0x44, 0xB8, 0xC2, 0x48,-    0x5B, 0x88, 0x64, 0x48, 0xA6, 0xDC, 0xCF, 0xCF,-    0x0B, 0xC3, 0x0B, 0xC5, 0xF0, 0xF5, 0x6B, 0x01-  },-  {-    0x00, 0x56, 0xD7, 0xE0, 0xAC, 0x33, 0x35, 0x57,-    0x83, 0x65, 0x9B, 0x38, 0xEC, 0x8B, 0xEC, 0xCB,-    0xF7, 0x83, 0x93, 0x99, 0x67, 0xFE, 0x37, 0xAE,-    0xAC, 0xF3, 0x69, 0xDD, 0xB6, 0x70, 0xAD, 0xA0-  },-  {-    0x90, 0x4F, 0x42, 0xF3, 0x45, 0x53, 0x0A, 0xC8,-    0xA3, 0x52, 0xD0, 0x9B, 0x68, 0x72, 0xC5, 0xBC,-    0xA3, 0x66, 0x1A, 0xBC, 0xA6, 0xCA, 0x64, 0xC8,-    0x09, 0x9F, 0x2F, 0xB6, 0x86, 0x7C, 0x30, 0xFE-  },-  {-    0xA8, 0xC3, 0xBF, 0x46, 0xF0, 0xB8, 0x8B, 0xBD,-    0x16, 0xFD, 0xA4, 0xA8, 0xB5, 0xCA, 0x81, 0xF5,-    0x24, 0x35, 0x20, 0xC3, 0x85, 0xD3, 0x8C, 0x0B,-    0x4D, 0x23, 0x52, 0xAB, 0x34, 0xEA, 0x35, 0xE6-  },-  {-    0x8D, 0x33, 0x17, 0xFC, 0x60, 0x6E, 0x56, 0x6D,-    0x30, 0x2E, 0xDA, 0xB5, 0x5E, 0x80, 0x16, 0x11,-    0xD8, 0xC1, 0x3F, 0x4A, 0x9A, 0x19, 0xD1, 0x85,-    0x97, 0x8D, 0xEF, 0x72, 0x83, 0x9C, 0xDA, 0xA3-  },-  {-    0x97, 0x38, 0x80, 0x11, 0xF5, 0x7A, 0x49, 0x86,-    0x90, 0xEC, 0x79, 0x88, 0xEF, 0xF9, 0x03, 0xFF,-    0x9B, 0x23, 0x58, 0xF5, 0xB6, 0x1B, 0xAA, 0x20,-    0xF7, 0x32, 0x90, 0xD6, 0x29, 0x6C, 0x1C, 0x0B-  },-  {-    0xCF, 0xB8, 0x0C, 0xAB, 0x89, 0x90, 0x95, 0x08,-    0x09, 0x12, 0x3F, 0xBF, 0x85, 0xE9, 0x76, 0x45,-    0x47, 0x08, 0xE0, 0xAF, 0xED, 0x69, 0x8E, 0x33,-    0x52, 0xA3, 0x16, 0x35, 0x90, 0x9D, 0xB3, 0xE5-  },-  {-    0x0D, 0xAA, 0xCA, 0x55, 0x13, 0x2A, 0x23, 0x5B,-    0x83, 0x1A, 0x5E, 0xFF, 0x4E, 0xA4, 0x67, 0xCD,-    0x10, 0xAF, 0x44, 0x20, 0x08, 0x47, 0x73, 0x5A,-    0x1F, 0xFD, 0x51, 0xFA, 0x37, 0xEA, 0xA2, 0xA2-  },-  {-    0x69, 0xB2, 0x14, 0x97, 0xEB, 0xB8, 0x24, 0xBA,-    0x66, 0x53, 0x68, 0x18, 0x88, 0x25, 0xE6, 0xF6,-    0xF1, 0x4C, 0xF2, 0xC3, 0xF7, 0xB5, 0x53, 0x0B,-    0xB3, 0x4F, 0xA6, 0x58, 0xEE, 0xD9, 0xA7, 0x39-  },-  {-    0xB9, 0xA1, 0x9F, 0x50, 0x9B, 0xE0, 0x3F, 0xBC,-    0x40, 0xE2, 0x43, 0xA5, 0x8A, 0x3D, 0xED, 0x11,-    0xF0, 0xD5, 0x1F, 0x80, 0xE3, 0xE2, 0x9A, 0x50,-    0x56, 0x44, 0xCC, 0x05, 0x74, 0x38, 0x14, 0xEC-  },-  {-    0xC4, 0xBC, 0xB2, 0x00, 0x25, 0x55, 0xD5, 0x44,-    0xFD, 0x0B, 0x02, 0x77, 0x06, 0x23, 0x89, 0x1E,-    0x70, 0xEE, 0xEC, 0x77, 0x44, 0x86, 0x5D, 0xD6,-    0x45, 0x5A, 0xD6, 0x65, 0xCC, 0x82, 0xE8, 0x61-  },-  {-    0x91, 0x2D, 0x24, 0xDC, 0x3D, 0x69, 0x23, 0xA4,-    0x83, 0xC2, 0x63, 0xEB, 0xA8, 0x1B, 0x7A, 0x87,-    0x97, 0xF2, 0x3C, 0xBF, 0x2F, 0x78, 0xB5, 0x1E,-    0x22, 0x26, 0x63, 0x9F, 0x84, 0xA5, 0x90, 0x47-  },-  {-    0x56, 0x82, 0x7A, 0x18, 0x88, 0x3A, 0xFD, 0xF9,-    0xCE, 0xEC, 0x56, 0x2B, 0x20, 0x66, 0xD8, 0xAC,-    0xB2, 0xC1, 0x95, 0x05, 0xEC, 0xE6, 0xF7, 0xA8,-    0x3E, 0x9F, 0x33, 0x46, 0xCB, 0xB8, 0x28, 0xC9-  },-  {-    0x25, 0x1D, 0x8D, 0x09, 0xFC, 0x48, 0xDD, 0x1D,-    0x6A, 0xF8, 0xFF, 0xDF, 0x39, 0x50, 0x91, 0xA4,-    0x6E, 0x05, 0xB8, 0xB7, 0xC5, 0xEC, 0x0C, 0x79,-    0xB6, 0x8A, 0x89, 0x04, 0xC8, 0x27, 0xBD, 0xEA-  },-  {-    0xC2, 0xD1, 0x4D, 0x69, 0xFD, 0x0B, 0xBD, 0x1C,-    0x0F, 0xE8, 0xC8, 0x45, 0xD5, 0xFD, 0x6A, 0x8F,-    0x74, 0x01, 0x51, 0xB1, 0xD8, 0xEB, 0x4D, 0x26,-    0x36, 0x4B, 0xB0, 0x2D, 0xAE, 0x0C, 0x13, 0xBC-  },-  {-    0x2E, 0x5F, 0xE2, 0x1F, 0x8F, 0x1B, 0x63, 0x97,-    0xA3, 0x8A, 0x60, 0x3D, 0x60, 0xB6, 0xF5, 0x3C,-    0x3B, 0x5D, 0xB2, 0x0A, 0xA5, 0x6C, 0x6D, 0x44,-    0xBE, 0xBD, 0x48, 0x28, 0xCE, 0x28, 0xF9, 0x0F-  },-  {-    0x25, 0x05, 0x9F, 0x10, 0x60, 0x5E, 0x67, 0xAD,-    0xFE, 0x68, 0x13, 0x50, 0x66, 0x6E, 0x15, 0xAE,-    0x97, 0x6A, 0x5A, 0x57, 0x1C, 0x13, 0xCF, 0x5B,-    0xC8, 0x05, 0x3F, 0x43, 0x0E, 0x12, 0x0A, 0x52-  },-};-----static const uint8_t blake2sp_keyed_kat[KAT_LENGTH][BLAKE2S_OUTBYTES] =-{-  {-    0x71, 0x5C, 0xB1, 0x38, 0x95, 0xAE, 0xB6, 0x78,-    0xF6, 0x12, 0x41, 0x60, 0xBF, 0xF2, 0x14, 0x65,-    0xB3, 0x0F, 0x4F, 0x68, 0x74, 0x19, 0x3F, 0xC8,-    0x51, 0xB4, 0x62, 0x10, 0x43, 0xF0, 0x9C, 0xC6-  },-  {-    0x40, 0x57, 0x8F, 0xFA, 0x52, 0xBF, 0x51, 0xAE,-    0x18, 0x66, 0xF4, 0x28, 0x4D, 0x3A, 0x15, 0x7F,-    0xC1, 0xBC, 0xD3, 0x6A, 0xC1, 0x3C, 0xBD, 0xCB,-    0x03, 0x77, 0xE4, 0xD0, 0xCD, 0x0B, 0x66, 0x03-  },-  {-    0x67, 0xE3, 0x09, 0x75, 0x45, 0xBA, 0xD7, 0xE8,-    0x52, 0xD7, 0x4D, 0x4E, 0xB5, 0x48, 0xEC, 0xA7,-    0xC2, 0x19, 0xC2, 0x02, 0xA7, 0xD0, 0x88, 0xDB,-    0x0E, 0xFE, 0xAC, 0x0E, 0xAC, 0x30, 0x42, 0x49-  },-  {-    0x8D, 0xBC, 0xC0, 0x58, 0x9A, 0x3D, 0x17, 0x29,-    0x6A, 0x7A, 0x58, 0xE2, 0xF1, 0xEF, 0xF0, 0xE2,-    0xAA, 0x42, 0x10, 0xB5, 0x8D, 0x1F, 0x88, 0xB8,-    0x6D, 0x7B, 0xA5, 0xF2, 0x9D, 0xD3, 0xB5, 0x83-  },-  {-    0xA9, 0xA9, 0x65, 0x2C, 0x8C, 0x67, 0x75, 0x94,-    0xC8, 0x72, 0x12, 0xD8, 0x9D, 0x5A, 0x75, 0xFB,-    0x31, 0xEF, 0x4F, 0x47, 0xC6, 0x58, 0x2C, 0xDE,-    0x5F, 0x1E, 0xF6, 0x6B, 0xD4, 0x94, 0x53, 0x3A-  },-  {-    0x05, 0xA7, 0x18, 0x0E, 0x59, 0x50, 0x54, 0x73,-    0x99, 0x48, 0xC5, 0xE3, 0x38, 0xC9, 0x5F, 0xE0,-    0xB7, 0xFC, 0x61, 0xAC, 0x58, 0xA7, 0x35, 0x74,-    0x74, 0x56, 0x33, 0xBB, 0xC1, 0xF7, 0x70, 0x31-  },-  {-    0x81, 0x4D, 0xE8, 0x31, 0x53, 0xB8, 0xD7, 0x5D,-    0xFA, 0xDE, 0x29, 0xFD, 0x39, 0xAC, 0x72, 0xDD,-    0x09, 0xCA, 0x0F, 0x9B, 0xC8, 0xB7, 0xAB, 0x6A,-    0x06, 0xBA, 0xEE, 0x7D, 0xD0, 0xF9, 0xF0, 0x83-  },-  {-    0xDF, 0xD4, 0x19, 0x44, 0x91, 0x29, 0xFF, 0x60,-    0x4F, 0x0A, 0x14, 0x8B, 0x4C, 0x7D, 0x68, 0xF1,-    0x17, 0x4F, 0x7D, 0x0F, 0x8C, 0x8D, 0x2C, 0xE7,-    0x7F, 0x44, 0x8F, 0xD3, 0x41, 0x9C, 0x6F, 0xB0-  },-  {-    0xB9, 0xED, 0x22, 0xE7, 0xDD, 0x8D, 0xD1, 0x4E,-    0xE8, 0xC9, 0x5B, 0x20, 0xE7, 0x63, 0x2E, 0x85,-    0x53, 0xA2, 0x68, 0xD9, 0xFF, 0x86, 0x33, 0xED,-    0x3C, 0x21, 0xD1, 0xB8, 0xC9, 0xA7, 0x0B, 0xE1-  },-  {-    0x95, 0xF0, 0x31, 0x67, 0x1A, 0x4E, 0x3C, 0x54,-    0x44, 0x1C, 0xEE, 0x9D, 0xBE, 0xF4, 0xB7, 0xAC,-    0xA4, 0x46, 0x18, 0xA3, 0xA3, 0x33, 0xAD, 0x74,-    0x06, 0xD1, 0x97, 0xAC, 0x5B, 0xA0, 0x79, 0x1A-  },-  {-    0xE2, 0x92, 0x5B, 0x9D, 0x5C, 0xA0, 0xFF, 0x62,-    0x88, 0xC5, 0xEA, 0x1A, 0xF2, 0xD2, 0x2B, 0x0A,-    0x6B, 0x79, 0xE2, 0xDA, 0xE0, 0x8B, 0xFD, 0x36,-    0xC3, 0xBE, 0x10, 0xBB, 0x8D, 0x71, 0xD8, 0x39-  },-  {-    0x16, 0x24, 0x9C, 0x74, 0x4E, 0x49, 0x51, 0x45,-    0x1D, 0x4C, 0x89, 0x4F, 0xB5, 0x9A, 0x3E, 0xCB,-    0x3F, 0xBF, 0xB7, 0xA4, 0x5F, 0x96, 0xF8, 0x5D,-    0x15, 0x80, 0xAC, 0x0B, 0x84, 0x2D, 0x96, 0xDA-  },-  {-    0x43, 0x2B, 0xC9, 0x1C, 0x52, 0xAC, 0xEB, 0x9D,-    0xAE, 0xD8, 0x83, 0x28, 0x81, 0x64, 0x86, 0x50,-    0xC1, 0xB8, 0x1D, 0x11, 0x7A, 0xBD, 0x68, 0xE0,-    0x84, 0x51, 0x50, 0x8A, 0x63, 0xBE, 0x00, 0x81-  },-  {-    0xCD, 0xE8, 0x20, 0x2B, 0xCF, 0xA3, 0xF3, 0xE9,-    0x5D, 0x79, 0xBA, 0xCC, 0x16, 0x5D, 0x52, 0x70,-    0x0E, 0xF7, 0x1D, 0x87, 0x4A, 0x3C, 0x63, 0x7E,-    0x63, 0x4F, 0x64, 0x44, 0x73, 0x72, 0x0D, 0x6B-  },-  {-    0x16, 0x21, 0x62, 0x1F, 0x5C, 0x3E, 0xE4, 0x46,-    0x89, 0x9D, 0x3C, 0x8A, 0xAE, 0x49, 0x17, 0xB1,-    0xE6, 0xDB, 0x4A, 0x0E, 0xD0, 0x42, 0x31, 0x5F,-    0xB2, 0xC1, 0x74, 0x82, 0x5E, 0x0A, 0x18, 0x19-  },-  {-    0x33, 0x6E, 0x8E, 0xBC, 0x71, 0xE2, 0x09, 0x5C,-    0x27, 0xF8, 0x64, 0xA3, 0x12, 0x1E, 0xFD, 0x0F,-    0xAA, 0x7A, 0x41, 0x28, 0x57, 0x25, 0xA5, 0x92,-    0xF6, 0x1B, 0xED, 0xED, 0x9D, 0xDE, 0x86, 0xED-  },-  {-    0x07, 0x9B, 0xE0, 0x41, 0x0E, 0x78, 0x9B, 0x36,-    0xEE, 0x7F, 0x55, 0xC1, 0x9F, 0xAA, 0xC6, 0x91,-    0x65, 0x6E, 0xB0, 0x52, 0x1F, 0x42, 0x94, 0x9B,-    0x84, 0xEE, 0x29, 0xFE, 0x2A, 0x0E, 0x7F, 0x36-  },-  {-    0x17, 0x27, 0x0C, 0x4F, 0x34, 0x88, 0x08, 0x2D,-    0x9F, 0xF9, 0x93, 0x7E, 0xAB, 0x3C, 0xA9, 0x9C,-    0x97, 0xC5, 0xB4, 0x59, 0x61, 0x47, 0x37, 0x2D,-    0xD4, 0xE9, 0x8A, 0xCF, 0x13, 0xDB, 0x28, 0x10-  },-  {-    0x18, 0x3C, 0x38, 0x75, 0x4D, 0x03, 0x41, 0xCE,-    0x07, 0xC1, 0x7A, 0x6C, 0xB6, 0xC2, 0xFD, 0x8B,-    0xBC, 0xC1, 0x40, 0x4F, 0xDD, 0x01, 0x41, 0x99,-    0xC7, 0x8B, 0xE1, 0xA9, 0x75, 0x59, 0xA9, 0x28-  },-  {-    0x6E, 0x52, 0xD7, 0x28, 0xA4, 0x05, 0xA6, 0xE1,-    0xF8, 0x75, 0x87, 0xBB, 0xC2, 0xAC, 0x91, 0xC5,-    0xC0, 0x9B, 0x2D, 0x82, 0x8A, 0xC8, 0x1E, 0x5C,-    0x4A, 0x81, 0xD0, 0x3D, 0xD4, 0xAA, 0x8D, 0x5C-  },-  {-    0xF4, 0xE0, 0x8E, 0x05, 0x9B, 0x74, 0x14, 0x4B,-    0xF9, 0x48, 0x14, 0x6D, 0x14, 0xA2, 0xC8, 0x1E,-    0x46, 0xDC, 0x15, 0xFF, 0x26, 0xEB, 0x52, 0x34,-    0x4C, 0xDD, 0x47, 0x4A, 0xBE, 0xA1, 0x4B, 0xC0-  },-  {-    0x0F, 0x2E, 0x0A, 0x10, 0x0E, 0xD8, 0xA1, 0x17,-    0x85, 0x96, 0x2A, 0xD4, 0x59, 0x6A, 0xF9, 0x55,-    0xE3, 0x0B, 0x9A, 0xEF, 0x93, 0x0A, 0x24, 0x8D,-    0xA9, 0x32, 0x2B, 0x70, 0x2D, 0x4B, 0x68, 0x72-  },-  {-    0x51, 0x90, 0xFC, 0xC7, 0x32, 0xF4, 0x04, 0xAA,-    0xD4, 0x36, 0x4A, 0xC7, 0x96, 0x0C, 0xFD, 0x5B,-    0x4E, 0x34, 0x86, 0x29, 0xC3, 0x72, 0xEE, 0xB3,-    0x25, 0xB5, 0xC6, 0xC7, 0xCB, 0xCE, 0x59, 0xAB-  },-  {-    0xC0, 0xC4, 0xCB, 0x86, 0xEA, 0x25, 0xEA, 0x95,-    0x7E, 0xEC, 0x5B, 0x22, 0xD2, 0x55, 0x0A, 0x16,-    0x49, 0xE6, 0xDF, 0xFA, 0x31, 0x6B, 0xB8, 0xF4,-    0xC9, 0x1B, 0x8F, 0xF7, 0xA2, 0x4B, 0x25, 0x31-  },-  {-    0x2C, 0x9E, 0xDA, 0x13, 0x5A, 0x30, 0xAE, 0xCA,-    0xF3, 0xAC, 0xB3, 0xD2, 0x3A, 0x30, 0x35, 0xFB,-    0xAB, 0xBA, 0x98, 0x33, 0x31, 0x65, 0xD8, 0x7F,-    0xCB, 0xF8, 0xFE, 0x10, 0x33, 0x6E, 0xCF, 0x20-  },-  {-    0x3C, 0xD6, 0x69, 0xE8, 0xD5, 0x62, 0x62, 0xA2,-    0x37, 0x13, 0x67, 0x22, 0x4D, 0xAE, 0x6D, 0x75,-    0x9E, 0xE1, 0x52, 0xC3, 0x15, 0x33, 0xB2, 0x63,-    0xFA, 0x2E, 0x64, 0x92, 0x08, 0x77, 0xB2, 0xA7-  },-  {-    0x18, 0xA9, 0xA0, 0xC2, 0xD0, 0xEA, 0x6C, 0x3B,-    0xB3, 0x32, 0x83, 0x0F, 0x89, 0x18, 0xB0, 0x68,-    0x4F, 0x5D, 0x39, 0x94, 0xDF, 0x48, 0x67, 0x46,-    0x2D, 0xD0, 0x6E, 0xF0, 0x86, 0x24, 0x24, 0xCC-  },-  {-    0x73, 0x90, 0xEA, 0x41, 0x04, 0xA9, 0xF4, 0xEE,-    0xA9, 0x0F, 0x81, 0xE2, 0x6A, 0x12, 0x9D, 0xCF,-    0x9F, 0x4A, 0xF3, 0x83, 0x52, 0xD9, 0xCB, 0x6A,-    0x81, 0x2C, 0xC8, 0x05, 0x69, 0x09, 0x05, 0x0E-  },-  {-    0xE4, 0x9E, 0x01, 0x14, 0xC6, 0x29, 0xB4, 0x94,-    0xB1, 0x1E, 0xA9, 0x8E, 0xCD, 0x40, 0x32, 0x73,-    0x1F, 0x15, 0x3B, 0x46, 0x50, 0xAC, 0xAC, 0xD7,-    0xE0, 0xF6, 0xE7, 0xDE, 0x3D, 0xF0, 0x19, 0x77-  },-  {-    0x27, 0xC5, 0x70, 0x2B, 0xE1, 0x04, 0xB3, 0xA9,-    0x4F, 0xC4, 0x34, 0x23, 0xAE, 0xEE, 0x83, 0xAC,-    0x3C, 0xA7, 0x3B, 0x7F, 0x87, 0x83, 0x9A, 0x6B,-    0x2E, 0x29, 0x60, 0x79, 0x03, 0xB7, 0xF2, 0x87-  },-  {-    0x81, 0xD2, 0xE1, 0x2E, 0xB2, 0xF4, 0x27, 0x60,-    0xC6, 0xE3, 0xBA, 0xA7, 0x8F, 0x84, 0x07, 0x3A,-    0xE6, 0xF5, 0x61, 0x60, 0x70, 0xFE, 0x25, 0xBE,-    0xDE, 0x7C, 0x7C, 0x82, 0x48, 0xAB, 0x1F, 0xBA-  },-  {-    0xFA, 0xB2, 0x35, 0xD5, 0x93, 0x48, 0xAB, 0x8C,-    0xE4, 0x9B, 0xEC, 0x77, 0xC0, 0xF1, 0x93, 0x28,-    0xFD, 0x04, 0x5D, 0xFD, 0x60, 0x8A, 0x53, 0x03,-    0x36, 0xDF, 0x4F, 0x94, 0xE1, 0x72, 0xA5, 0xC8-  },-  {-    0x8A, 0xAA, 0x8D, 0x80, 0x5C, 0x58, 0x88, 0x1F,-    0xF3, 0x79, 0xFB, 0xD4, 0x2C, 0x6B, 0xF6, 0xF1,-    0x4C, 0x6C, 0x73, 0xDF, 0x80, 0x71, 0xB3, 0xB2,-    0x28, 0x98, 0x11, 0x09, 0xCC, 0xC0, 0x15, 0xF9-  },-  {-    0x91, 0xFD, 0xD2, 0x62, 0x20, 0x39, 0x16, 0x39,-    0x47, 0x40, 0x95, 0x2B, 0xCE, 0x72, 0xB6, 0x4B,-    0xAB, 0xB6, 0xF7, 0x21, 0x34, 0x4D, 0xEE, 0x82,-    0x50, 0xBF, 0x0E, 0x46, 0xF1, 0xBA, 0x18, 0x8F-  },-  {-    0xF7, 0xE5, 0x7B, 0x8F, 0x85, 0xF4, 0x7D, 0x59,-    0x03, 0xAD, 0x4C, 0xCB, 0x8A, 0xF6, 0x2A, 0x3E,-    0x85, 0x8A, 0xAB, 0x2B, 0x8C, 0xC2, 0x26, 0x49,-    0x4F, 0x7B, 0x00, 0xBE, 0xDB, 0xF5, 0xB0, 0xD0-  },-  {-    0xF7, 0x6F, 0x21, 0xAD, 0xDA, 0xE9, 0x6A, 0x96,-    0x46, 0xFC, 0x06, 0xF9, 0xBF, 0x52, 0xAE, 0x08,-    0x48, 0xF1, 0x8C, 0x35, 0x26, 0xB1, 0x29, 0xE1,-    0x5B, 0x2C, 0x35, 0x5E, 0x2E, 0x79, 0xE5, 0xDA-  },-  {-    0x8A, 0xEB, 0x1C, 0x79, 0x5F, 0x34, 0x90, 0x01,-    0x5E, 0xF4, 0xCD, 0x61, 0xA2, 0x80, 0x7B, 0x23,-    0x0E, 0xFD, 0xC8, 0x46, 0x01, 0x73, 0xDA, 0xD0,-    0x26, 0xA4, 0xA0, 0xFC, 0xC2, 0xFB, 0xF2, 0x2A-  },-  {-    0xC5, 0x64, 0xFF, 0xC6, 0x23, 0x07, 0x77, 0x65,-    0xBB, 0x97, 0x87, 0x58, 0x56, 0x54, 0xCE, 0x74,-    0x5D, 0xBD, 0x10, 0x8C, 0xEF, 0x24, 0x8A, 0xB0,-    0x0A, 0xD1, 0xA2, 0x64, 0x7D, 0x99, 0x03, 0x87-  },-  {-    0xFE, 0x89, 0x42, 0xA3, 0xE5, 0xF5, 0xE8, 0xCD,-    0x70, 0x51, 0x04, 0xF8, 0x82, 0x10, 0x72, 0x6E,-    0x53, 0xDD, 0x7E, 0xB3, 0xF9, 0xA2, 0x02, 0xBF,-    0x93, 0x14, 0xB3, 0xB9, 0x06, 0x5E, 0xB7, 0x12-  },-  {-    0xDC, 0x29, 0x53, 0x59, 0xD4, 0x36, 0xEE, 0xA7,-    0x80, 0x84, 0xE7, 0xB0, 0x77, 0xFE, 0x09, 0xB1,-    0x9C, 0x5B, 0xF3, 0xD2, 0xA7, 0x96, 0xDA, 0xB0,-    0x19, 0xE4, 0x20, 0x05, 0x99, 0xFD, 0x82, 0x02-  },-  {-    0x70, 0xB3, 0xF7, 0x2F, 0x74, 0x90, 0x32, 0xE2,-    0x5E, 0x38, 0x3B, 0x96, 0x43, 0x78, 0xEA, 0x1C,-    0x54, 0x3E, 0x9C, 0x15, 0xDE, 0x3A, 0x27, 0xD8,-    0x6D, 0x2A, 0x9D, 0x22, 0x31, 0xEF, 0xF4, 0x8A-  },-  {-    0x79, 0x82, 0xB5, 0x4C, 0x08, 0xDB, 0x2B, 0xFB,-    0x6F, 0x45, 0xF3, 0x5B, 0xC3, 0x23, 0xBC, 0x09,-    0x37, 0x79, 0xB6, 0xBB, 0x0E, 0x3E, 0xEA, 0x3E,-    0x8C, 0x98, 0xB1, 0xDE, 0x99, 0xD3, 0xC5, 0x5E-  },-  {-    0x75, 0xE4, 0x16, 0x22, 0x57, 0x01, 0x4B, 0xED,-    0xCC, 0x05, 0xC2, 0x94, 0x4D, 0xCE, 0x0D, 0xF0,-    0xC3, 0x5E, 0xBA, 0x13, 0x19, 0x54, 0x06, 0x4F,-    0x6E, 0x4E, 0x09, 0x5F, 0xD0, 0x84, 0x45, 0xEE-  },-  {-    0x4A, 0x12, 0x9E, 0xA6, 0xCD, 0xBA, 0xBC, 0x2D,-    0x39, 0x24, 0x79, 0x37, 0x2F, 0x97, 0x5B, 0x9C,-    0xF5, 0xA1, 0xB7, 0xDE, 0xB6, 0x9A, 0x32, 0x66,-    0xF0, 0x3E, 0xBC, 0x6D, 0x11, 0x13, 0x93, 0xC4-  },-  {-    0x8F, 0xED, 0x70, 0xF2, 0x79, 0x55, 0xDC, 0x8A,-    0xD9, 0xF1, 0xB7, 0xB3, 0xF6, 0xF5, 0xDF, 0xBD,-    0x96, 0x2A, 0x33, 0x59, 0x2B, 0x42, 0xDE, 0x85,-    0x6D, 0x42, 0x1E, 0x29, 0x12, 0xBA, 0xB8, 0x6B-  },-  {-    0xE2, 0xF2, 0x06, 0x60, 0x37, 0x6F, 0x2B, 0x18,-    0x39, 0x66, 0x7C, 0xBF, 0xE5, 0xE1, 0x6E, 0xF0,-    0x75, 0xAC, 0x39, 0x43, 0x64, 0x4F, 0x35, 0x32,-    0x28, 0x2F, 0x8B, 0xB0, 0x72, 0x3B, 0x99, 0x86-  },-  {-    0xAB, 0xF8, 0x4C, 0x91, 0x3A, 0x83, 0xDF, 0x98,-    0xC7, 0x00, 0x29, 0x81, 0x9C, 0x06, 0x5F, 0x6D,-    0x6D, 0xE4, 0xF6, 0xD4, 0x3A, 0xBF, 0x60, 0x0D,-    0xAD, 0xE0, 0x35, 0xB2, 0x3B, 0xED, 0x7B, 0xAA-  },-  {-    0x45, 0x9C, 0x15, 0xD4, 0x85, 0x6C, 0x7E, 0xCF,-    0x82, 0x62, 0x03, 0x51, 0xC3, 0xC1, 0xC7, 0x6C,-    0x40, 0x3F, 0x3E, 0x97, 0x07, 0x74, 0x13, 0x87,-    0xE2, 0x99, 0x07, 0x3F, 0xB1, 0x70, 0x4B, 0x2B-  },-  {-    0x9A, 0xB9, 0x12, 0xED, 0xA0, 0x76, 0x8A, 0xBD,-    0xF8, 0x26, 0xB6, 0xE0, 0x5D, 0x0D, 0x73, 0x58,-    0x39, 0xE6, 0xA5, 0xF0, 0x2E, 0x04, 0xC4, 0xCC,-    0x75, 0x65, 0x0B, 0x2C, 0x8C, 0xAB, 0x67, 0x49-  },-  {-    0x47, 0x40, 0xEB, 0xEC, 0xAC, 0x90, 0x03, 0x1B,-    0xB7, 0xE6, 0x8E, 0x51, 0xC5, 0x53, 0x91, 0xAF,-    0xB1, 0x89, 0xB3, 0x17, 0xF2, 0xDE, 0x55, 0x87,-    0x66, 0xF7, 0x8F, 0x5C, 0xB7, 0x1F, 0x81, 0xB6-  },-  {-    0x3C, 0xC4, 0x7F, 0x0E, 0xF6, 0x48, 0x21, 0x58,-    0x7C, 0x93, 0x7C, 0xDD, 0xBA, 0x85, 0xC9, 0x93,-    0xD3, 0xCE, 0x2D, 0xD0, 0xCE, 0xD4, 0x0D, 0x3B,-    0xE3, 0x3C, 0xB7, 0xDC, 0x7E, 0xDA, 0xBC, 0xF1-  },-  {-    0x9F, 0x47, 0x6A, 0x22, 0xDB, 0x54, 0xD6, 0xBB,-    0x9B, 0xEF, 0xDB, 0x26, 0x0C, 0x66, 0x57, 0x8A,-    0xE1, 0xD8, 0xA5, 0xF8, 0x7D, 0x3D, 0x8C, 0x01,-    0x7F, 0xDB, 0x74, 0x75, 0x08, 0x0F, 0xA8, 0xE1-  },-  {-    0x8B, 0x68, 0xC6, 0xFB, 0x07, 0x06, 0xA7, 0x95,-    0xF3, 0xA8, 0x39, 0xD6, 0xFE, 0x25, 0xFD, 0x4A,-    0xA7, 0xF9, 0x2E, 0x66, 0x4F, 0x76, 0x2D, 0x61,-    0x53, 0x81, 0xBC, 0x85, 0x9A, 0xFA, 0x29, 0x2C-  },-  {-    0xF6, 0x40, 0xD2, 0x25, 0xA6, 0xBC, 0xD2, 0xFC,-    0x8A, 0xCC, 0xAF, 0xBE, 0xD5, 0xA8, 0x4B, 0x5B,-    0xBB, 0x5D, 0x8A, 0xE5, 0xDB, 0x06, 0xA1, 0x0B,-    0x6D, 0x9D, 0x93, 0x16, 0x0B, 0x39, 0x2E, 0xE0-  },-  {-    0x70, 0x48, 0x60, 0xA7, 0xF5, 0xBA, 0x68, 0xDB,-    0x27, 0x03, 0x1C, 0x15, 0xF2, 0x25, 0x50, 0x0D,-    0x69, 0x2A, 0xB2, 0x47, 0x53, 0x42, 0x81, 0xC4,-    0xF6, 0x84, 0xF6, 0xC6, 0xC8, 0xCD, 0x88, 0xC7-  },-  {-    0xC1, 0xA7, 0x5B, 0xDD, 0xA1, 0x2B, 0x8B, 0x2A,-    0xB1, 0xB9, 0x24, 0x84, 0x38, 0x58, 0x18, 0x3A,-    0x09, 0xD2, 0x02, 0x42, 0x1F, 0xDB, 0xCD, 0xF0,-    0xE6, 0x3E, 0xAE, 0x46, 0xF3, 0x7D, 0x91, 0xED-  },-  {-    0x9A, 0x8C, 0xAB, 0x7A, 0x5F, 0x2E, 0x57, 0x62,-    0x21, 0xA6, 0xA8, 0x5E, 0x5F, 0xDD, 0xEE, 0x75,-    0x67, 0x8E, 0x06, 0x53, 0x24, 0xA6, 0x1D, 0xB0,-    0x3A, 0x39, 0x26, 0x1D, 0xDF, 0x75, 0xE3, 0xF4-  },-  {-    0x05, 0xC2, 0xB2, 0x6B, 0x03, 0xCE, 0x6C, 0xA5,-    0x87, 0x1B, 0xE0, 0xDE, 0x84, 0xEE, 0x27, 0x86,-    0xA7, 0x9B, 0xCD, 0x9F, 0x30, 0x03, 0x3E, 0x81,-    0x9B, 0x4A, 0x87, 0xCC, 0xA2, 0x7A, 0xFC, 0x6A-  },-  {-    0xB0, 0xB0, 0x99, 0x3C, 0x6D, 0x0C, 0x6E, 0xD5,-    0xC3, 0x59, 0x04, 0x80, 0xF8, 0x65, 0xF4, 0x67,-    0xF4, 0x33, 0x1A, 0x58, 0xDD, 0x8E, 0x47, 0xBD,-    0x98, 0xEB, 0xBC, 0xDB, 0x8E, 0xB4, 0xF9, 0x4D-  },-  {-    0xE5, 0x7C, 0x10, 0x3C, 0xF7, 0xB6, 0xBB, 0xEB,-    0x8A, 0x0D, 0xC8, 0xF0, 0x48, 0x62, 0x5C, 0x3F,-    0x4C, 0xE4, 0xF1, 0xA5, 0xAD, 0x4D, 0x07, 0x9C,-    0x11, 0x87, 0xBF, 0xE9, 0xEE, 0x3B, 0x8A, 0x5F-  },-  {-    0xF1, 0x00, 0x23, 0xE1, 0x5F, 0x3B, 0x72, 0xB7,-    0x38, 0xAD, 0x61, 0xAE, 0x65, 0xAB, 0x9A, 0x07,-    0xE7, 0x77, 0x4E, 0x2D, 0x7A, 0xB0, 0x2D, 0xBA,-    0x4E, 0x0C, 0xAF, 0x56, 0x02, 0xC8, 0x01, 0x78-  },-  {-    0x9A, 0x8F, 0xB3, 0xB5, 0x38, 0xC1, 0xD6, 0xC4,-    0x50, 0x51, 0xFA, 0x9E, 0xD9, 0xB0, 0x7D, 0x3E,-    0x89, 0xB4, 0x43, 0x03, 0x30, 0x01, 0x4A, 0x1E,-    0xFA, 0x28, 0x23, 0xC0, 0x82, 0x3C, 0xF2, 0x37-  },-  {-    0x30, 0x75, 0xC5, 0xBC, 0x7C, 0x3A, 0xD7, 0xE3,-    0x92, 0x01, 0x01, 0xBC, 0x68, 0x99, 0xC5, 0x8E,-    0xA7, 0x01, 0x67, 0xA7, 0x77, 0x2C, 0xA2, 0x8E,-    0x38, 0xE2, 0xC1, 0xB0, 0xD3, 0x25, 0xE5, 0xA0-  },-  {-    0xE8, 0x55, 0x94, 0x70, 0x0E, 0x39, 0x22, 0xA1,-    0xE8, 0xE4, 0x1E, 0xB8, 0xB0, 0x64, 0xE7, 0xAC,-    0x6D, 0x94, 0x9D, 0x13, 0xB5, 0xA3, 0x45, 0x23,-    0xE5, 0xA6, 0xBE, 0xAC, 0x03, 0xC8, 0xAB, 0x29-  },-  {-    0x1D, 0x37, 0x01, 0xA5, 0x66, 0x1B, 0xD3, 0x1A,-    0xB2, 0x05, 0x62, 0xBD, 0x07, 0xB7, 0x4D, 0xD1,-    0x9A, 0xC8, 0xF3, 0x52, 0x4B, 0x73, 0xCE, 0x7B,-    0xC9, 0x96, 0xB7, 0x88, 0xAF, 0xD2, 0xF3, 0x17-  },-  {-    0x87, 0x4E, 0x19, 0x38, 0x03, 0x3D, 0x7D, 0x38,-    0x35, 0x97, 0xA2, 0xA6, 0x5F, 0x58, 0xB5, 0x54,-    0xE4, 0x11, 0x06, 0xF6, 0xD1, 0xD5, 0x0E, 0x9B,-    0xA0, 0xEB, 0x68, 0x5F, 0x6B, 0x6D, 0xA0, 0x71-  },-  {-    0x93, 0xF2, 0xF3, 0xD6, 0x9B, 0x2D, 0x36, 0x52,-    0x95, 0x56, 0xEC, 0xCA, 0xF9, 0xF9, 0x9A, 0xDB,-    0xE8, 0x95, 0xE1, 0x57, 0x22, 0x31, 0xE6, 0x49,-    0xB5, 0x05, 0x84, 0xB5, 0xD7, 0xD0, 0x8A, 0xF8-  },-  {-    0x06, 0xE0, 0x6D, 0x61, 0x0F, 0x2E, 0xEB, 0xBA,-    0x36, 0x76, 0x82, 0x3E, 0x77, 0x44, 0xD7, 0x51,-    0xAF, 0xF7, 0x30, 0x76, 0xED, 0x65, 0xF3, 0xCF,-    0xF5, 0xE7, 0x2F, 0xD2, 0x27, 0x99, 0x9C, 0x77-  },-  {-    0x8D, 0xF7, 0x57, 0xB3, 0xA1, 0xE0, 0xF4, 0x80,-    0xFA, 0x76, 0xC7, 0xF3, 0x58, 0xED, 0x03, 0x98,-    0xBE, 0x3F, 0x2A, 0x8F, 0x7B, 0x90, 0xEA, 0x8C,-    0x80, 0x75, 0x99, 0xDE, 0xDA, 0x1D, 0x05, 0x34-  },-  {-    0xEE, 0xC9, 0xC5, 0xC6, 0x3C, 0xC5, 0x16, 0x9D,-    0x96, 0x7B, 0xB1, 0x62, 0x4E, 0x9E, 0xE5, 0xCE,-    0xD9, 0x28, 0x97, 0x73, 0x6E, 0xFB, 0xD1, 0x57,-    0x54, 0x8D, 0x82, 0xE8, 0x7C, 0xC7, 0x2F, 0x25-  },-  {-    0xCC, 0x2B, 0x58, 0x32, 0xAD, 0x27, 0x2C, 0xC5,-    0x5C, 0x10, 0xD4, 0xF8, 0xC7, 0xF8, 0xBB, 0x38,-    0xE6, 0xE4, 0xEB, 0x92, 0x2F, 0x93, 0x86, 0x83,-    0x0F, 0x90, 0xB1, 0xE3, 0xDA, 0x39, 0x37, 0xD5-  },-  {-    0x36, 0x89, 0x85, 0xD5, 0x38, 0x7C, 0x0B, 0xFC,-    0x92, 0x8A, 0xC2, 0x54, 0xFA, 0x6D, 0x16, 0x67,-    0x3E, 0x70, 0x94, 0x75, 0x66, 0x96, 0x1B, 0x5F,-    0xB3, 0x32, 0x5A, 0x58, 0x8A, 0xB3, 0x17, 0x3A-  },-  {-    0xF1, 0xE4, 0x42, 0xAF, 0xB8, 0x72, 0x15, 0x1F,-    0x81, 0x34, 0x95, 0x6C, 0x54, 0x8A, 0xE3, 0x24,-    0x0D, 0x07, 0xE6, 0xE3, 0x38, 0xD4, 0xA7, 0xA6,-    0xAF, 0x8D, 0xA4, 0x11, 0x9A, 0xB0, 0xE2, 0xB0-  },-  {-    0xB0, 0x12, 0xC7, 0x54, 0x6A, 0x39, 0xC4, 0x0C,-    0xAD, 0xEC, 0xE4, 0xE0, 0x4E, 0x7F, 0x33, 0xC5,-    0x93, 0xAD, 0x18, 0x2E, 0xBC, 0x5A, 0x46, 0xD2,-    0xDB, 0xF4, 0xAD, 0x1A, 0x92, 0xF5, 0x9E, 0x7B-  },-  {-    0x6C, 0x60, 0x97, 0xCD, 0x20, 0x33, 0x09, 0x6B,-    0x4D, 0xF3, 0x17, 0xDE, 0x8A, 0x90, 0x8B, 0x7D,-    0x0C, 0x72, 0x94, 0x39, 0x0C, 0x5A, 0x39, 0x9C,-    0x30, 0x1B, 0xF2, 0xA2, 0x65, 0x2E, 0x82, 0x62-  },-  {-    0xBA, 0x83, 0xFE, 0xB5, 0x10, 0xB4, 0x9A, 0xDE,-    0x4F, 0xAE, 0xFB, 0xE9, 0x42, 0x78, 0x1E, 0xAF,-    0xD4, 0x1A, 0xD5, 0xD4, 0x36, 0x88, 0x85, 0x31,-    0xB6, 0x88, 0x59, 0xF2, 0x2C, 0x2D, 0x16, 0x4A-  },-  {-    0x5A, 0x06, 0x9E, 0x43, 0x92, 0x19, 0x5A, 0xC9,-    0xD2, 0x84, 0xA4, 0x7F, 0x3B, 0xD8, 0x54, 0xAF,-    0x8F, 0xD0, 0xD7, 0xFD, 0xC3, 0x48, 0x3D, 0x2C,-    0x5F, 0x34, 0x24, 0xCC, 0xFD, 0xA1, 0x5C, 0x8E-  },-  {-    0x7E, 0x88, 0xD6, 0x4B, 0xBB, 0xE2, 0x02, 0x4F,-    0x44, 0x54, 0xBA, 0x13, 0x98, 0xB3, 0xD8, 0x65,-    0x2D, 0xCE, 0xC8, 0x20, 0xB1, 0x4C, 0x3B, 0x0A,-    0xBF, 0xBF, 0x0F, 0x4F, 0x33, 0x06, 0xBB, 0x5E-  },-  {-    0xF8, 0x74, 0x2F, 0xF4, 0x6D, 0xFD, 0xF3, 0xEC,-    0x82, 0x64, 0xF9, 0x94, 0x5B, 0x20, 0x41, 0x94,-    0x62, 0xF0, 0x69, 0xE8, 0x33, 0xC5, 0x94, 0xEC,-    0x80, 0xFF, 0xAC, 0x5E, 0x7E, 0x51, 0x34, 0xF9-  },-  {-    0xD3, 0xE0, 0xB7, 0x38, 0xD2, 0xE9, 0x2F, 0x3C,-    0x47, 0xC7, 0x94, 0x66, 0x66, 0x09, 0xC0, 0xF5,-    0x50, 0x4F, 0x67, 0xEC, 0x4E, 0x76, 0x0E, 0xEE,-    0xCC, 0xF8, 0x64, 0x4E, 0x68, 0x33, 0x34, 0x11-  },-  {-    0x0C, 0x90, 0xCE, 0x10, 0xED, 0xF0, 0xCE, 0x1D,-    0x47, 0xEE, 0xB5, 0x0B, 0x5B, 0x7A, 0xFF, 0x8E,-    0xE8, 0xA4, 0x3B, 0x64, 0xA8, 0x89, 0xC1, 0xC6,-    0xC6, 0xB8, 0xE3, 0x1A, 0x3C, 0xFC, 0x45, 0xEE-  },-  {-    0x83, 0x91, 0x7A, 0xC1, 0xCD, 0xAD, 0xE8, 0xF0,-    0xE3, 0xBF, 0x42, 0x6F, 0xEA, 0xC1, 0x38, 0x8B,-    0x3F, 0xCB, 0xE3, 0xE1, 0xBF, 0x98, 0x79, 0x8C,-    0x81, 0x58, 0xBF, 0x75, 0x8E, 0x8D, 0x5D, 0x4E-  },-  {-    0xDC, 0x8E, 0xB0, 0xC0, 0x13, 0xFA, 0x9D, 0x06,-    0x4E, 0xE3, 0x76, 0x23, 0x36, 0x9F, 0xB3, 0x94,-    0xAF, 0x97, 0x4B, 0x1A, 0xAC, 0x82, 0x40, 0x5B,-    0x88, 0x97, 0x6C, 0xD8, 0xFC, 0xA1, 0x25, 0x30-  },-  {-    0x9A, 0xF4, 0xFC, 0x92, 0xEA, 0x8D, 0x6B, 0x5F,-    0xE7, 0x99, 0x0E, 0x3A, 0x02, 0x70, 0x1E, 0xC2,-    0x2B, 0x2D, 0xFD, 0x71, 0x00, 0xB9, 0x0D, 0x05,-    0x51, 0x86, 0x94, 0x17, 0x95, 0x5E, 0x44, 0xC8-  },-  {-    0xC7, 0x22, 0xCE, 0xC1, 0x31, 0xBA, 0xA1, 0x63,-    0xF4, 0x7E, 0x4B, 0x33, 0x9E, 0x1F, 0xB9, 0xB4,-    0xAC, 0xA2, 0x48, 0xC4, 0x75, 0x93, 0x45, 0xEA,-    0xDB, 0xD6, 0xC6, 0xA7, 0xDD, 0xB5, 0x04, 0x77-  },-  {-    0x18, 0x37, 0xB1, 0x20, 0xD4, 0xE4, 0x04, 0x6C,-    0x6D, 0xE8, 0xCC, 0xAF, 0x09, 0xF1, 0xCA, 0xF3,-    0x02, 0xAD, 0x56, 0x23, 0x4E, 0x6B, 0x42, 0x2C,-    0xE9, 0x0A, 0x61, 0xBF, 0x06, 0xAE, 0xE4, 0x3D-  },-  {-    0x87, 0xAC, 0x9D, 0x0F, 0x8A, 0x0B, 0x11, 0xBF,-    0xED, 0xD6, 0x99, 0x1A, 0x6D, 0xAF, 0x34, 0xC8,-    0xAA, 0x5D, 0x7E, 0x8A, 0xE1, 0xB9, 0xDF, 0x4A,-    0xF7, 0x38, 0x00, 0x5F, 0xE7, 0x8C, 0xE9, 0x3C-  },-  {-    0xE2, 0x1F, 0xB6, 0x68, 0xEB, 0xB8, 0xBF, 0x2D,-    0x82, 0x08, 0x6D, 0xED, 0xCB, 0x3A, 0x53, 0x71,-    0xC2, 0xC4, 0x6F, 0xA1, 0xAC, 0x11, 0xD2, 0xE2,-    0xC5, 0x66, 0xD1, 0x4A, 0xD3, 0xC3, 0x65, 0x3F-  },-  {-    0x5A, 0x9A, 0x69, 0x81, 0x5E, 0x4D, 0x3E, 0xB7,-    0x72, 0xED, 0x90, 0x8F, 0xE6, 0x58, 0xCE, 0x50,-    0x87, 0x31, 0x0E, 0xC1, 0xD5, 0x0C, 0xB9, 0x4F,-    0x56, 0x28, 0x33, 0x9A, 0x61, 0xDC, 0xD9, 0xEE-  },-  {-    0xAA, 0xC2, 0x85, 0xF1, 0x20, 0x8F, 0x70, 0xA6,-    0x47, 0x97, 0xD0, 0xA9, 0x40, 0x0D, 0xA6, 0x46,-    0x53, 0x30, 0x18, 0x38, 0xFE, 0xF6, 0x69, 0x0B,-    0x87, 0xCD, 0xA9, 0x15, 0x9E, 0xE0, 0x7E, 0xF4-  },-  {-    0x05, 0x64, 0x3C, 0x1C, 0x6F, 0x26, 0x59, 0x25,-    0xA6, 0x50, 0x93, 0xF9, 0xDE, 0x8A, 0x19, 0x1C,-    0x4F, 0x6F, 0xD1, 0x41, 0x8F, 0xBF, 0x66, 0xBE,-    0x80, 0x59, 0xA9, 0x1B, 0xA8, 0xDC, 0xDA, 0x61-  },-  {-    0x1C, 0x6C, 0xDE, 0x5B, 0x78, 0x10, 0x3C, 0x9E,-    0x6F, 0x04, 0x6D, 0xFE, 0x30, 0xF5, 0x12, 0x1C,-    0xF9, 0xD4, 0x03, 0x9E, 0xFE, 0x22, 0x25, 0x40,-    0xA4, 0x1B, 0xBC, 0x06, 0xE4, 0x69, 0xFE, 0xB6-  },-  {-    0xB4, 0x9B, 0xB4, 0x6D, 0x1B, 0x19, 0x3B, 0x04,-    0x5E, 0x74, 0x12, 0x05, 0x9F, 0xE7, 0x2D, 0x55,-    0x25, 0x52, 0xA8, 0xFB, 0x6C, 0x36, 0x41, 0x07,-    0x23, 0xDC, 0x7D, 0x05, 0xFC, 0xCE, 0xDE, 0xD3-  },-  {-    0xB6, 0x12, 0xD3, 0xD2, 0x1F, 0xC4, 0xDE, 0x3C,-    0x79, 0x1A, 0xF7, 0x35, 0xE5, 0x9F, 0xB7, 0x17,-    0xD8, 0x39, 0x72, 0x3B, 0x42, 0x50, 0x8E, 0x9E,-    0xBF, 0x78, 0x06, 0xD9, 0x3E, 0x9C, 0x83, 0x7F-  },-  {-    0x7C, 0x33, 0x90, 0xA3, 0xE5, 0xCB, 0x27, 0xD1,-    0x86, 0x8B, 0xA4, 0x55, 0xCF, 0xEB, 0x32, 0x22,-    0xFD, 0xE2, 0x7B, 0xCD, 0xA4, 0xBF, 0x24, 0x8E,-    0x3D, 0x29, 0xCF, 0x1F, 0x34, 0x32, 0x9F, 0x25-  },-  {-    0xBD, 0x42, 0xEE, 0xA7, 0xB3, 0x54, 0x86, 0xCD,-    0xD0, 0x90, 0x7C, 0xB4, 0x71, 0x2E, 0xDE, 0x2F,-    0x4D, 0xEE, 0xCC, 0xBC, 0xA1, 0x91, 0x60, 0x38,-    0x65, 0xA1, 0xCC, 0x80, 0x9F, 0x12, 0xB4, 0x46-  },-  {-    0xD1, 0xDD, 0x62, 0x01, 0x74, 0x0C, 0xFA, 0xAD,-    0x53, 0xCE, 0xCC, 0xB7, 0x56, 0xB1, 0x10, 0xF3,-    0xD5, 0x0F, 0x81, 0x7B, 0x43, 0xD7, 0x55, 0x95,-    0x57, 0xE5, 0x7A, 0xAD, 0x14, 0x3A, 0x85, 0xD9-  },-  {-    0x58, 0x29, 0x64, 0x3C, 0x1B, 0x10, 0xE1, 0xC8,-    0xCC, 0xF2, 0x0C, 0x9B, 0x4A, 0xF8, 0x21, 0xEA,-    0x05, 0x2D, 0x7F, 0x0F, 0x7C, 0x22, 0xF7, 0x38,-    0x0B, 0xBB, 0xCF, 0xAF, 0xB9, 0x77, 0xE2, 0x1F-  },-  {-    0xFC, 0x4C, 0xF2, 0xA7, 0xFB, 0xE0, 0xB1, 0xE8,-    0xAE, 0xFB, 0xE4, 0xB4, 0xB7, 0x9E, 0xD8, 0x4E,-    0xC9, 0x7B, 0x03, 0x4F, 0x51, 0xB4, 0xE9, 0x7F,-    0x76, 0x0B, 0x20, 0x63, 0x97, 0x65, 0xB9, 0x33-  },-  {-    0x4D, 0x7C, 0x3B, 0x34, 0x38, 0xA0, 0xBD, 0xA2,-    0x8E, 0x7A, 0x96, 0xE4, 0x20, 0x27, 0xD8, 0x13,-    0xE8, 0x8A, 0xE6, 0x28, 0x85, 0x49, 0x98, 0x33,-    0xD3, 0xC5, 0xF6, 0x35, 0x9E, 0xF7, 0xED, 0xBC-  },-  {-    0x34, 0xCB, 0xD3, 0x20, 0x68, 0xEF, 0x7E, 0x82,-    0x09, 0x9E, 0x58, 0x0B, 0xF9, 0xE2, 0x64, 0x23,-    0xE9, 0x81, 0xE3, 0x1B, 0x1B, 0xBC, 0xE6, 0x1A,-    0xEA, 0xB1, 0x4C, 0x32, 0xA2, 0x73, 0xE4, 0xCB-  },-  {-    0xA0, 0x5D, 0xDA, 0x7D, 0x0D, 0xA9, 0xE0, 0x94,-    0xAE, 0x22, 0x53, 0x3F, 0x79, 0xE7, 0xDC, 0xCD,-    0x26, 0xB1, 0x75, 0x7C, 0xEF, 0xB9, 0x5B, 0xCF,-    0x62, 0xC4, 0xFF, 0x9C, 0x26, 0x92, 0xE1, 0xC0-  },-  {-    0x22, 0x4C, 0xCF, 0xFA, 0x7C, 0xCA, 0x4C, 0xE3,-    0x4A, 0xFD, 0x47, 0xF6, 0x2A, 0xDE, 0x53, 0xC5,-    0xE8, 0x48, 0x9B, 0x04, 0xAC, 0x9C, 0x41, 0xF7,-    0xFA, 0xD0, 0xC8, 0xED, 0xEB, 0x89, 0xE9, 0x41-  },-  {-    0x6B, 0xC6, 0x07, 0x64, 0x83, 0xAA, 0x11, 0xC0,-    0x7F, 0xBA, 0x55, 0xC0, 0xF9, 0xA1, 0xB5, 0xDA,-    0x87, 0xEC, 0xBF, 0xFE, 0xA7, 0x55, 0x98, 0xCC,-    0x31, 0x8A, 0x51, 0x4C, 0xEC, 0x7B, 0x3B, 0x6A-  },-  {-    0x9A, 0x03, 0x60, 0xE2, 0x3A, 0x22, 0xF4, 0xF7,-    0x6C, 0x0E, 0x95, 0x28, 0xDA, 0xFD, 0x12, 0x9B,-    0xB4, 0x67, 0x5F, 0xB8, 0x8D, 0x44, 0xEA, 0xF8,-    0x57, 0x77, 0x30, 0x0C, 0xEC, 0x9B, 0xCC, 0x79-  },-  {-    0x79, 0x01, 0x99, 0xB4, 0xCA, 0x90, 0xDE, 0xDC,-    0xCF, 0xE3, 0x24, 0x74, 0xE8, 0x5B, 0x17, 0x4F,-    0x06, 0x9E, 0x35, 0x42, 0xBE, 0x31, 0x04, 0xC1,-    0x12, 0x5C, 0x2F, 0xDB, 0xD6, 0x9D, 0x32, 0xC7-  },-  {-    0x55, 0x83, 0x99, 0x25, 0x83, 0x4C, 0xA3, 0xE8,-    0x25, 0xE9, 0x92, 0x41, 0x87, 0x4D, 0x16, 0xD6,-    0xC2, 0x62, 0x36, 0x29, 0xC4, 0xC2, 0xAD, 0xDD,-    0xF0, 0xDB, 0xA0, 0x1E, 0x6C, 0xE8, 0xA0, 0xDC-  },-  {-    0x61, 0x5F, 0xF8, 0x46, 0xD9, 0x93, 0x00, 0x7D,-    0x38, 0xDE, 0x1A, 0xEC, 0xB3, 0x17, 0x82, 0x89,-    0xDE, 0xD0, 0x9E, 0x6B, 0xB5, 0xCB, 0xD6, 0x0F,-    0x69, 0xC6, 0xAA, 0x36, 0x38, 0x30, 0x20, 0xF7-  },-  {-    0xF0, 0xE4, 0x0B, 0x4E, 0xD4, 0x0D, 0x34, 0x85,-    0x1E, 0x72, 0xB4, 0xEE, 0x4D, 0x00, 0xEA, 0x6A,-    0x40, 0xEA, 0x1C, 0x1B, 0xF9, 0xE5, 0xC2, 0x69,-    0x71, 0x0C, 0x9D, 0x51, 0xCB, 0xB8, 0xA3, 0xC9-  },-  {-    0x0B, 0x07, 0xB2, 0x33, 0x3B, 0x08, 0xD0, 0x8C,-    0x11, 0xCA, 0x34, 0xAB, 0x44, 0x9B, 0x71, 0xD2,-    0x9A, 0x0F, 0x43, 0xE1, 0xF7, 0x78, 0xE0, 0x73,-    0xE7, 0x90, 0x06, 0xCC, 0xB7, 0x30, 0xED, 0x62-  },-  {-    0xD1, 0xF4, 0xC2, 0x9D, 0x9F, 0x23, 0xEA, 0x35,-    0xEC, 0x40, 0x35, 0xB3, 0x77, 0xD5, 0x06, 0x53,-    0x8E, 0x72, 0x8B, 0xC7, 0x39, 0xC1, 0x45, 0x96,-    0x80, 0xCF, 0x1C, 0xC6, 0x94, 0x24, 0x92, 0x4D-  },-  {-    0x12, 0x79, 0xCF, 0x6F, 0x66, 0x9F, 0x92, 0xF6,-    0xBF, 0xC2, 0x5D, 0x60, 0x5B, 0x94, 0x40, 0xC7,-    0xDC, 0xCB, 0xD2, 0x5D, 0xF2, 0x8D, 0xC7, 0x35,-    0x3A, 0xBC, 0x1C, 0x05, 0x30, 0x40, 0x5D, 0xC4-  },-  {-    0x1F, 0xA0, 0xAF, 0x00, 0x77, 0x5D, 0xC2, 0xCE,-    0x76, 0x50, 0x6D, 0x32, 0x80, 0xF4, 0x72, 0xD2,-    0xF6, 0xFF, 0x97, 0xA2, 0x15, 0x1F, 0xAA, 0x82,-    0x79, 0x42, 0xFE, 0xA4, 0x4A, 0xD0, 0xBA, 0x1F-  },-  {-    0x3E, 0x1A, 0xD5, 0x4A, 0x5F, 0x83, 0x5B, 0x98,-    0x3B, 0xD2, 0xAA, 0xB0, 0xED, 0x2A, 0x4C, 0x0B,-    0xDD, 0x72, 0x16, 0x20, 0x9C, 0x36, 0xA7, 0x9E,-    0x9E, 0x2A, 0xAB, 0xB9, 0x9F, 0xAF, 0x35, 0x12-  },-  {-    0xC6, 0xED, 0x39, 0xE2, 0xD8, 0xB6, 0x36, 0xEC,-    0xCB, 0xA2, 0x45, 0xEF, 0x4E, 0x88, 0x64, 0xF4,-    0xCD, 0x94, 0x6B, 0xE2, 0x16, 0xB9, 0xBE, 0x48,-    0x30, 0x3E, 0x08, 0xB9, 0x2D, 0xD0, 0x94, 0x34-  },-  {-    0xE2, 0x47, 0x36, 0xC1, 0x3E, 0xCB, 0x9F, 0x36,-    0xA0, 0xD8, 0x29, 0xD4, 0x79, 0x8D, 0x76, 0x99,-    0xC1, 0x4C, 0xC6, 0x5B, 0x6D, 0xC4, 0x4E, 0xD6,-    0xF1, 0x0C, 0xD4, 0x85, 0x3D, 0x6E, 0x07, 0x57-  },-  {-    0x38, 0x9B, 0xE8, 0x80, 0x52, 0xA3, 0x81, 0x27,-    0x2C, 0x6D, 0xF7, 0x41, 0xA8, 0x8A, 0xD3, 0x49,-    0xB7, 0x12, 0x71, 0x84, 0x35, 0x48, 0x0A, 0x81,-    0x90, 0xB7, 0x04, 0x77, 0x1D, 0x2D, 0xE6, 0x37-  },-  {-    0x88, 0x9F, 0x2D, 0x57, 0x8A, 0x5D, 0xAE, 0xFD,-    0x34, 0x1C, 0x21, 0x09, 0x84, 0xE1, 0x26, 0xD1,-    0xD9, 0x6D, 0xA2, 0xDE, 0xE3, 0xC8, 0x1F, 0x7A,-    0x60, 0x80, 0xBF, 0x84, 0x56, 0x9B, 0x31, 0x14-  },-  {-    0xE9, 0x36, 0x09, 0x5B, 0x9B, 0x98, 0x2F, 0xFC,-    0x85, 0x6D, 0x2F, 0x52, 0x76, 0xA4, 0xE5, 0x29,-    0xEC, 0x73, 0x95, 0xDA, 0x31, 0x6D, 0x62, 0x87,-    0x02, 0xFB, 0x28, 0x1A, 0xDA, 0x6F, 0x38, 0x99-  },-  {-    0xEF, 0x89, 0xCE, 0x1D, 0x6F, 0x8B, 0x48, 0xEA,-    0x5C, 0xD6, 0xAE, 0xAB, 0x6A, 0x83, 0xD0, 0xCC,-    0x98, 0xC9, 0xA3, 0xA2, 0x07, 0xA1, 0x08, 0x57,-    0x32, 0xF0, 0x47, 0xD9, 0x40, 0x38, 0xC2, 0x88-  },-  {-    0xF9, 0x25, 0x01, 0x6D, 0x79, 0xF2, 0xAC, 0xA8,-    0xC4, 0x9E, 0xDF, 0xCD, 0x66, 0x21, 0xD5, 0xBE,-    0x3C, 0x8C, 0xEC, 0x61, 0xBD, 0x58, 0x71, 0xD8,-    0xC1, 0xD3, 0xA5, 0x65, 0xF3, 0x5E, 0x0C, 0x9F-  },-  {-    0x63, 0xE8, 0x63, 0x4B, 0x75, 0x7A, 0x38, 0xF9,-    0x2B, 0x92, 0xFD, 0x23, 0x89, 0x3B, 0xA2, 0x99,-    0x85, 0x3A, 0x86, 0x13, 0x67, 0x9F, 0xDF, 0x7E,-    0x05, 0x11, 0x09, 0x5C, 0x0F, 0x04, 0x7B, 0xCA-  },-  {-    0xCF, 0x2C, 0xCA, 0x07, 0x72, 0xB7, 0x05, 0xEB,-    0x57, 0xD2, 0x89, 0x43, 0xF8, 0x3D, 0x35, 0x3F,-    0xE2, 0x91, 0xE5, 0xB3, 0x77, 0x78, 0x0B, 0x37,-    0x4C, 0x8B, 0xA4, 0x66, 0x58, 0x30, 0xBE, 0x87-  },-  {-    0x46, 0xDF, 0x5B, 0x87, 0xC8, 0x0E, 0x7E, 0x40,-    0x74, 0xAE, 0xE6, 0x85, 0x59, 0x42, 0x47, 0x42,-    0x84, 0x5B, 0x9B, 0x35, 0x0F, 0x51, 0xBA, 0x55,-    0xB0, 0x74, 0xBB, 0xAE, 0x4C, 0x62, 0x6A, 0xAB-  },-  {-    0x65, 0x8A, 0xA4, 0xF9, 0xD2, 0xBC, 0xBD, 0x4F,-    0x7F, 0x8E, 0xB6, 0x3E, 0x68, 0xF5, 0x36, 0x7E,-    0xDB, 0xC5, 0x00, 0xA0, 0xB1, 0xFB, 0xB4, 0x1E,-    0x9D, 0xF1, 0x41, 0xBC, 0xBA, 0x8F, 0xCD, 0x53-  },-  {-    0xEE, 0x80, 0x55, 0x50, 0x08, 0xA7, 0x16, 0x55,-    0xE0, 0x81, 0x09, 0x2B, 0xBA, 0x6F, 0x67, 0x0E,-    0xD9, 0x8A, 0xF9, 0xA0, 0x9F, 0xB5, 0xAF, 0xB9,-    0x4C, 0xBC, 0x5C, 0x75, 0x48, 0x14, 0xDB, 0x4F-  },-  {-    0x2C, 0x5F, 0x9D, 0x04, 0x82, 0x20, 0xB0, 0x41,-    0xB6, 0xD4, 0x52, 0x4B, 0x44, 0x90, 0xCF, 0x8C,-    0x66, 0xFC, 0xB8, 0xE1, 0x4B, 0x0D, 0x64, 0x88,-    0x7A, 0xA1, 0xE4, 0x76, 0x1A, 0x60, 0x2B, 0x39-  },-  {-    0x44, 0xCB, 0x63, 0x11, 0xD0, 0x75, 0x0B, 0x7E,-    0x33, 0xF7, 0x33, 0x3A, 0xA7, 0x8A, 0xAC, 0xA9,-    0xC3, 0x4A, 0xD5, 0xF7, 0x9C, 0x1B, 0x15, 0x91,-    0xEC, 0x33, 0x95, 0x1E, 0x69, 0xC4, 0xC4, 0x61-  },-  {-    0x0C, 0x6C, 0xE3, 0x2A, 0x3E, 0xA0, 0x56, 0x12,-    0xC5, 0xF8, 0x09, 0x0F, 0x6A, 0x7E, 0x87, 0xF5,-    0xAB, 0x30, 0xE4, 0x1B, 0x70, 0x7D, 0xCB, 0xE5,-    0x41, 0x55, 0x62, 0x0A, 0xD7, 0x70, 0xA3, 0x40-  },-  {-    0xC6, 0x59, 0x38, 0xDD, 0x3A, 0x05, 0x3C, 0x72,-    0x9C, 0xF5, 0xB7, 0xC8, 0x9F, 0x39, 0x0B, 0xFE,-    0xBB, 0x51, 0x12, 0x76, 0x6B, 0xB0, 0x0A, 0xA5,-    0xFA, 0x31, 0x64, 0xDF, 0xDF, 0x3B, 0x56, 0x47-  },-  {-    0x7D, 0xE7, 0xF0, 0xD5, 0x9A, 0x90, 0x39, 0xAF,-    0xF3, 0xAA, 0xF3, 0x2C, 0x3E, 0xE5, 0x2E, 0x79,-    0x17, 0x53, 0x57, 0x29, 0x06, 0x21, 0x68, 0xD2,-    0x49, 0x0B, 0x6B, 0x6C, 0xE2, 0x44, 0xB3, 0x80-  },-  {-    0x89, 0x58, 0x98, 0xF5, 0x3A, 0x8F, 0x39, 0xE4,-    0x24, 0x10, 0xDA, 0x77, 0xB6, 0xC4, 0x81, 0x5B,-    0x0B, 0xB2, 0x39, 0x5E, 0x39, 0x22, 0xF5, 0xBE,-    0xD0, 0xE1, 0xFB, 0xF2, 0xA4, 0xC6, 0xDF, 0xEB-  },-  {-    0xC9, 0x05, 0xA8, 0x49, 0x84, 0x34, 0x8A, 0x64,-    0xDB, 0x1F, 0x54, 0x20, 0x83, 0x74, 0x8A, 0xD9,-    0x0A, 0x4B, 0xAD, 0x98, 0x33, 0xCB, 0x6D, 0xA3,-    0x87, 0x29, 0x34, 0x31, 0xF1, 0x9E, 0x7C, 0x9C-  },-  {-    0xED, 0x37, 0xD1, 0xA4, 0xD0, 0x6C, 0x90, 0xD1,-    0x95, 0x78, 0x48, 0x66, 0x7E, 0x95, 0x48, 0xFE,-    0xBB, 0x5D, 0x42, 0x3E, 0xAB, 0x4F, 0x56, 0x78,-    0x5C, 0xC4, 0xB5, 0x41, 0x6B, 0x78, 0x00, 0x08-  },-  {-    0x0B, 0xC6, 0x5D, 0x99, 0x97, 0xFB, 0x73, 0x4A,-    0x56, 0x1F, 0xB1, 0xE9, 0xF8, 0xC0, 0x95, 0x8A,-    0x02, 0xC7, 0xA4, 0xDB, 0xD0, 0x96, 0xEB, 0xEF,-    0x1A, 0x17, 0x51, 0xAE, 0xD9, 0x59, 0xEE, 0xD7-  },-  {-    0x7C, 0x5F, 0x43, 0x2E, 0xB8, 0xB7, 0x35, 0x2A,-    0x94, 0x94, 0xDE, 0xA4, 0xD5, 0x3C, 0x21, 0x38,-    0x70, 0x31, 0xCE, 0x70, 0xE8, 0x5D, 0x94, 0x08,-    0xFC, 0x6F, 0x8C, 0xD9, 0x8A, 0x6A, 0xAA, 0x1E-  },-  {-    0xB8, 0xBF, 0x8E, 0x2C, 0x34, 0xE0, 0x33, 0x98,-    0x36, 0x39, 0x90, 0x9E, 0xAA, 0x37, 0x64, 0x0D,-    0x87, 0x7B, 0x04, 0x8F, 0xE2, 0x99, 0xB4, 0x70,-    0xAF, 0x2D, 0x0B, 0xA8, 0x2A, 0x5F, 0x14, 0xC0-  },-  {-    0x88, 0xA9, 0xDD, 0x13, 0xD5, 0xDA, 0xDB, 0xDE,-    0xE6, 0xBF, 0xF7, 0xEE, 0x1E, 0xF8, 0xC7, 0x1C,-    0xC1, 0x93, 0xAA, 0x4B, 0xF3, 0xE8, 0x4F, 0x8F,-    0xE8, 0x0C, 0xB0, 0x75, 0x68, 0x3C, 0x07, 0x79-  },-  {-    0x9A, 0xED, 0xB8, 0x87, 0x6D, 0xD2, 0x1C, 0x8C,-    0x84, 0xD2, 0xE7, 0x02, 0xA1, 0x36, 0x25, 0x98,-    0x04, 0x62, 0xF6, 0x8B, 0xF0, 0xA1, 0xB7, 0x25,-    0x4A, 0xD8, 0x06, 0xC3, 0x84, 0x03, 0xC9, 0xDE-  },-  {-    0xD0, 0x97, 0x57, 0x3D, 0xF2, 0xD6, 0xB2, 0x48,-    0x9A, 0x47, 0x94, 0x84, 0x86, 0x98, 0x00, 0xA1,-    0xF8, 0x33, 0xEA, 0x16, 0x9E, 0xFF, 0x32, 0xAE,-    0x3C, 0xE6, 0x3A, 0x20, 0x79, 0x54, 0x8D, 0x78-  },-  {-    0xD1, 0x8F, 0x27, 0xA3, 0xE5, 0x55, 0xD7, 0xF9,-    0x1A, 0x00, 0x7C, 0x67, 0xAC, 0xEE, 0xDE, 0x39,-    0x1F, 0x75, 0xA6, 0x1F, 0xA4, 0x2A, 0x0B, 0x45,-    0x66, 0xEB, 0x58, 0x2C, 0xA0, 0x5E, 0xBC, 0xE7-  },-  {-    0xDF, 0x1D, 0xAA, 0x90, 0xB1, 0x70, 0x23, 0x13,-    0xE6, 0xA5, 0x90, 0x1C, 0x7A, 0xFC, 0x5E, 0xD9,-    0x65, 0x77, 0x17, 0xA7, 0x15, 0xFA, 0x53, 0xA4,-    0x18, 0x9E, 0xC1, 0xE5, 0xDF, 0x29, 0x3A, 0x68-  },-  {-    0x04, 0xE3, 0xA4, 0x96, 0xB6, 0x69, 0x96, 0xC6,-    0x6E, 0x32, 0x91, 0x9E, 0xD1, 0xF9, 0x4C, 0x36,-    0xEE, 0xBB, 0xF2, 0x40, 0x63, 0x3A, 0x2F, 0x73,-    0x98, 0x45, 0xF0, 0x29, 0x5D, 0x34, 0xAF, 0xBA-  },-  {-    0x8C, 0x45, 0xD8, 0x8C, 0x4E, 0x9C, 0x9D, 0x0C,-    0x8C, 0x67, 0x7F, 0xE4, 0x8F, 0xA5, 0x44, 0x9B,-    0xA3, 0x01, 0x78, 0xD4, 0x0A, 0xF0, 0xF0, 0x21,-    0x79, 0x21, 0xC6, 0x2E, 0x4B, 0x60, 0xCD, 0xD3-  },-  {-    0xE1, 0x49, 0xA6, 0xB1, 0x3B, 0xDE, 0xDE, 0xA2,-    0xEE, 0xEE, 0x00, 0x9C, 0xE9, 0x44, 0x5E, 0x8D,-    0xCF, 0x76, 0xB7, 0x6E, 0x55, 0xA5, 0x01, 0xD8,-    0xF5, 0xB4, 0x3F, 0xF8, 0x96, 0x79, 0x6A, 0xD1-  },-  {-    0xA8, 0x37, 0xC4, 0xC7, 0xC6, 0xF5, 0xCF, 0xB9,-    0x9E, 0x10, 0x85, 0xFD, 0x43, 0x28, 0x7A, 0x41,-    0x05, 0xCB, 0x28, 0xB7, 0x6F, 0xC3, 0x8B, 0x60,-    0x55, 0xC5, 0xDC, 0xFF, 0x78, 0xB8, 0x25, 0x65-  },-  {-    0x42, 0x41, 0x1F, 0x28, 0x78, 0x0B, 0x4F, 0x16,-    0x38, 0x54, 0x0B, 0x87, 0x05, 0x21, 0xEC, 0x45,-    0xBC, 0xEB, 0x1E, 0x0C, 0x71, 0x31, 0xF7, 0xE1,-    0xC4, 0x67, 0x2E, 0x43, 0x6C, 0x88, 0xC8, 0xE9-  },-  {-    0x34, 0xB4, 0xE8, 0x76, 0x76, 0x94, 0x71, 0xDF,-    0x55, 0x2E, 0x55, 0x22, 0xCE, 0xA7, 0x84, 0xFA,-    0x53, 0xAC, 0x61, 0xBE, 0xDE, 0x8C, 0xFE, 0x29,-    0x14, 0x09, 0xE6, 0x8B, 0x69, 0xE8, 0x77, 0x6F-  },-  {-    0x8F, 0x31, 0xD6, 0x37, 0xA9, 0x1D, 0xBD, 0x0E,-    0xCB, 0x0B, 0xA0, 0xE6, 0x94, 0xBE, 0xC1, 0x44,-    0x76, 0x58, 0xCE, 0x6C, 0x27, 0xEA, 0x9B, 0x95,-    0xFF, 0x36, 0x70, 0x1C, 0xAF, 0x36, 0xF0, 0x01-  },-  {-    0xB5, 0xC8, 0x95, 0xEB, 0x07, 0x1E, 0x3D, 0x38,-    0x52, 0x8D, 0x47, 0x5D, 0x3B, 0xB0, 0xBA, 0x88,-    0xB7, 0x17, 0x95, 0xE4, 0x0A, 0x98, 0x2E, 0x2A,-    0xC2, 0xD8, 0x44, 0x22, 0xA0, 0xF2, 0x68, 0x5D-  },-  {-    0xE9, 0x06, 0x25, 0x7C, 0x41, 0x9D, 0x94, 0x1E,-    0xD2, 0xB8, 0xA9, 0xC1, 0x27, 0x81, 0xDB, 0x97,-    0x59, 0xA3, 0xFC, 0xF3, 0xDC, 0x7C, 0xDB, 0x03,-    0x15, 0x99, 0xE1, 0x08, 0x6B, 0x67, 0x2F, 0x10-  },-  {-    0x98, 0xAD, 0x24, 0x39, 0x7C, 0x6E, 0xAE, 0x4C,-    0xF7, 0x3E, 0xA8, 0xBB, 0xEF, 0x5A, 0x0B, 0x74,-    0xD2, 0x1A, 0xD1, 0x5F, 0x33, 0x92, 0x0F, 0x44,-    0x07, 0x0A, 0x98, 0xBD, 0xF5, 0x3D, 0x0B, 0x3A-  },-  {-    0xDD, 0x51, 0x0C, 0xA5, 0x5B, 0x11, 0x70, 0xF9,-    0xCE, 0xFD, 0xBB, 0x16, 0xFC, 0x14, 0x52, 0x62,-    0xAA, 0x36, 0x3A, 0x87, 0x0A, 0x01, 0xE1, 0xBC,-    0x4F, 0xBE, 0x40, 0x23, 0x4B, 0x4B, 0x6F, 0x2F-  },-  {-    0xF2, 0xD8, 0xD9, 0x31, 0xB9, 0x2E, 0x1C, 0xB6,-    0x98, 0xE5, 0x6E, 0xD0, 0x28, 0x19, 0xEA, 0x11,-    0xD2, 0x66, 0x19, 0xB8, 0x3A, 0x62, 0x09, 0xAD,-    0x67, 0x22, 0x53, 0x68, 0xFE, 0x11, 0x95, 0x71-  },-  {-    0xE4, 0x63, 0x70, 0x55, 0xDB, 0x91, 0xF9, 0x43,-    0x7C, 0xF4, 0x60, 0xEF, 0x40, 0xB5, 0x14, 0x5F,-    0x69, 0x98, 0x26, 0x6A, 0x5E, 0x74, 0xE9, 0x6A,-    0x00, 0x78, 0x2C, 0x62, 0xCF, 0x30, 0xCF, 0x1C-  },-  {-    0x35, 0x63, 0x53, 0x0A, 0x89, 0xD3, 0x2B, 0x75,-    0xF7, 0x8D, 0x83, 0xE9, 0x87, 0x2A, 0xD4, 0xC5,-    0x75, 0xF5, 0x20, 0x39, 0x9D, 0x65, 0x03, 0x5D,-    0xED, 0x99, 0xE5, 0xEE, 0xC5, 0x80, 0x71, 0x50-  },-  {-    0x8E, 0x79, 0xF9, 0x2C, 0x86, 0x5B, 0xEB, 0x3E,-    0x1C, 0xDB, 0xF0, 0x8F, 0x75, 0x4A, 0x26, 0x06,-    0xE8, 0x53, 0x49, 0x05, 0x3D, 0x66, 0xD6, 0x16,-    0x02, 0x4A, 0x81, 0x3F, 0xCA, 0x54, 0x1A, 0x4D-  },-  {-    0x86, 0x42, 0x26, 0xF2, 0x83, 0x9C, 0x76, 0xB1,-    0xD5, 0xF7, 0xC1, 0x3D, 0x98, 0xC2, 0xA5, 0x15,-    0x8C, 0x2A, 0xBB, 0x71, 0xD9, 0xD8, 0xF0, 0xFA,-    0x1F, 0x7C, 0x3F, 0x74, 0x68, 0x00, 0x16, 0x03-  },-  {-    0xD3, 0xE3, 0xF5, 0xB8, 0xCE, 0xEB, 0xB1, 0x11,-    0x84, 0x80, 0x35, 0x35, 0x90, 0x0B, 0x6E, 0xED,-    0xDA, 0x60, 0x6E, 0xEB, 0x36, 0x97, 0x51, 0xA7,-    0xCD, 0xA3, 0x6C, 0xA3, 0x02, 0x29, 0xFB, 0x02-  },-  {-    0x8C, 0x7D, 0x6B, 0x98, 0x72, 0x69, 0x16, 0x90,-    0x31, 0xF7, 0x1F, 0xD7, 0xE4, 0xC4, 0x45, 0x01,-    0x2D, 0x3E, 0x6A, 0x3C, 0x88, 0x09, 0xF6, 0x47,-    0x9B, 0xD6, 0x67, 0xCF, 0x31, 0x1E, 0x27, 0x6E-  },-  {-    0xB9, 0x04, 0xB5, 0x71, 0x1B, 0xF1, 0x9E, 0x85,-    0x32, 0xF7, 0xAD, 0x64, 0x27, 0x41, 0x0A, 0x62,-    0xA1, 0xF7, 0x7F, 0x77, 0xB9, 0xB6, 0xD7, 0x1D,-    0x2F, 0xC4, 0x3B, 0xC9, 0x0F, 0x73, 0x23, 0x5A-  },-  {-    0x45, 0x36, 0x63, 0x43, 0x15, 0xC8, 0x67, 0x28,-    0xF5, 0xAB, 0x74, 0x49, 0xEB, 0x2D, 0x04, 0x02,-    0x0E, 0x9E, 0xAE, 0x8D, 0xD6, 0x79, 0x55, 0x00,-    0xE9, 0xEC, 0x9A, 0x00, 0x66, 0x38, 0x6E, 0x69-  },-  {-    0xFD, 0x5E, 0x49, 0xFE, 0xD4, 0x9D, 0xC4, 0x4B,-    0xDE, 0x89, 0xF4, 0x60, 0xA9, 0x50, 0x19, 0x1E,-    0xBB, 0x06, 0x7C, 0x69, 0x8A, 0x3F, 0x21, 0xEA,-    0x14, 0x30, 0x8C, 0x74, 0x13, 0xB9, 0x16, 0x81-  },-  {-    0x31, 0xF0, 0x1D, 0x03, 0x0B, 0x9B, 0x22, 0xD0,-    0x0A, 0x0F, 0x71, 0xED, 0x2C, 0xEB, 0x5D, 0x2D,-    0xC8, 0x1A, 0xF2, 0xC2, 0x4B, 0xF5, 0x67, 0x0F,-    0xDE, 0x19, 0xA6, 0x85, 0xE8, 0xD1, 0x39, 0x2E-  },-  {-    0x5F, 0x84, 0xD9, 0xDE, 0x28, 0x4B, 0x1E, 0x4F,-    0x67, 0x8E, 0x31, 0xAB, 0x6A, 0x76, 0xF5, 0x66,-    0x1B, 0x5A, 0xEA, 0xA7, 0x68, 0x53, 0x93, 0x84,-    0xAA, 0x38, 0xF9, 0xE4, 0x9C, 0xCE, 0x6E, 0x6E-  },-  {-    0xB2, 0x07, 0x9E, 0x59, 0x97, 0xA4, 0xEA, 0xD3,-    0xA7, 0x1F, 0xEF, 0xC0, 0x2F, 0x90, 0xA7, 0x48,-    0x3A, 0x10, 0xFD, 0x2E, 0x6F, 0x31, 0xBD, 0xA9,-    0xD2, 0x08, 0x44, 0x85, 0xCC, 0x01, 0x6B, 0xBD-  },-  {-    0xE0, 0xF8, 0x4D, 0x7F, 0x52, 0x5B, 0x6F, 0xED,-    0x79, 0x1F, 0x77, 0x28, 0x9A, 0xE5, 0x8F, 0x7D,-    0x50, 0xA2, 0x94, 0x32, 0xD4, 0x2C, 0x25, 0xC1,-    0xE8, 0x39, 0x29, 0xB8, 0x38, 0x89, 0x1D, 0x79-  },-  {-    0x70, 0x46, 0x96, 0x90, 0x95, 0x6D, 0x79, 0x18,-    0xAC, 0xE7, 0xBA, 0x5F, 0x41, 0x30, 0x2D, 0xA1,-    0x38, 0xC9, 0xB5, 0x6E, 0xCD, 0x41, 0x55, 0x44,-    0xFA, 0xCE, 0x8D, 0x99, 0x8C, 0x21, 0xAB, 0xEB-  },-  {-    0x45, 0xC9, 0x1A, 0x62, 0x24, 0x9B, 0x39, 0xCD,-    0xA9, 0x4E, 0x50, 0x82, 0x95, 0xBE, 0xC7, 0x66,-    0x71, 0x19, 0x44, 0x77, 0x65, 0xEF, 0x80, 0xEF,-    0xA8, 0x2D, 0x1E, 0x92, 0xD5, 0x70, 0x67, 0xD8-  },-  {-    0x1D, 0x9E, 0x00, 0x73, 0xEE, 0xD0, 0x73, 0x15,-    0x54, 0xC3, 0xBE, 0xAA, 0x47, 0x46, 0x0D, 0x51,-    0x1A, 0xD2, 0x61, 0xDD, 0x4D, 0x4A, 0x3B, 0xED,-    0x9D, 0x8D, 0x20, 0x2F, 0x22, 0xF2, 0x15, 0x89-  },-  {-    0x40, 0x82, 0x62, 0x73, 0x6D, 0x8A, 0xEC, 0x0B,-    0x84, 0x7D, 0xBA, 0x25, 0x02, 0x58, 0x60, 0x8A,-    0x43, 0x45, 0xA6, 0x3A, 0x1E, 0xB1, 0x95, 0xE5,-    0xC7, 0xAE, 0x2E, 0xE8, 0x74, 0xC3, 0x4D, 0xA8-  },-  {-    0x23, 0xD2, 0xB7, 0x04, 0x39, 0x46, 0x99, 0x49,-    0x98, 0x23, 0x90, 0x53, 0x8D, 0x7E, 0x5A, 0xDE,-    0x9F, 0x18, 0xC8, 0xE3, 0xBB, 0xF6, 0x60, 0x5A,-    0xFC, 0xF4, 0x9B, 0x00, 0xC0, 0x61, 0xE8, 0x37-  },-  {-    0x23, 0x2F, 0xB1, 0x87, 0xD2, 0x71, 0xBE, 0xA9,-    0x12, 0xEF, 0xD4, 0x07, 0xFF, 0xE0, 0x80, 0x56,-    0xD6, 0xA4, 0x2E, 0x53, 0x21, 0xEC, 0x79, 0x2D,-    0xF3, 0xD5, 0x84, 0xA9, 0x4F, 0x63, 0x0A, 0xB2-  },-  {-    0x13, 0x8E, 0x19, 0x44, 0xE4, 0xB5, 0x4D, 0xE8,-    0x68, 0x1D, 0x7E, 0x48, 0xC4, 0xF0, 0x81, 0x48,-    0xE4, 0x0A, 0x56, 0x7E, 0x5C, 0xAD, 0x94, 0x6A,-    0x6A, 0xF4, 0xE8, 0xD5, 0xD2, 0x6F, 0x75, 0xC7-  },-  {-    0x80, 0xC1, 0x51, 0x32, 0x5F, 0xBF, 0xC6, 0x78,-    0xB7, 0xBE, 0x4E, 0x40, 0xB3, 0x0F, 0x29, 0xFE,-    0x31, 0xCD, 0xBE, 0x1C, 0x84, 0x12, 0x6E, 0x00,-    0x6D, 0xF3, 0xC1, 0x85, 0x24, 0xBD, 0x2D, 0x6C-  },-  {-    0xA6, 0x42, 0x26, 0x73, 0x01, 0x66, 0x9D, 0xF2,-    0x61, 0xB8, 0x39, 0xF8, 0x73, 0x65, 0x76, 0x29,-    0x05, 0xFF, 0x32, 0x0A, 0x0A, 0x2F, 0xC4, 0xBD,-    0xC4, 0x8E, 0x5A, 0x8E, 0x15, 0xD1, 0x32, 0x33-  },-  {-    0x0F, 0x8B, 0x10, 0x99, 0x38, 0x60, 0x93, 0x7A,-    0x74, 0xCC, 0x2D, 0xE4, 0x0A, 0x27, 0x31, 0xDD,-    0x99, 0x54, 0xB6, 0x54, 0xBB, 0x94, 0xC3, 0x4E,-    0x87, 0x66, 0x52, 0xE9, 0x8D, 0x4B, 0xBD, 0x16-  },-  {-    0xE6, 0x34, 0xA5, 0x85, 0x12, 0x49, 0x32, 0x73,-    0x26, 0x0F, 0x10, 0xD4, 0x49, 0x53, 0xCD, 0x99,-    0x8E, 0x34, 0xCB, 0x82, 0x81, 0xC4, 0x1B, 0xF4,-    0x2E, 0x0A, 0xE2, 0xF2, 0x5C, 0xBD, 0x1F, 0x75-  },-  {-    0xBD, 0xE6, 0xAF, 0x9B, 0xAF, 0x3C, 0x07, 0xE9,-    0x54, 0x23, 0xCA, 0xB5, 0x04, 0xDE, 0xE7, 0x0E,-    0xDC, 0xC3, 0x31, 0x8B, 0x22, 0xDD, 0x1E, 0xB6,-    0xFD, 0x85, 0xBE, 0x44, 0x7A, 0xC9, 0xF2, 0x09-  },-  {-    0x91, 0x4B, 0x37, 0xAB, 0x5B, 0x8C, 0xFD, 0xE6,-    0xA4, 0x80, 0x46, 0x6A, 0x0D, 0x82, 0x43, 0x2C,-    0x7D, 0x76, 0x32, 0x8E, 0x9A, 0x88, 0xEF, 0x5B,-    0x4F, 0x52, 0x42, 0x9F, 0x7A, 0x3F, 0xFC, 0x7D-  },-  {-    0x55, 0xBE, 0x66, 0xE9, 0xA5, 0xAA, 0x67, 0x1A,-    0x23, 0x88, 0x2E, 0xF3, 0xE7, 0xD9, 0xD3, 0x6E,-    0xA9, 0x54, 0x87, 0xDC, 0x71, 0xB7, 0x25, 0xA5,-    0xAD, 0x4B, 0x79, 0x8A, 0x87, 0x91, 0x43, 0xD0-  },-  {-    0x3F, 0xD0, 0x45, 0x89, 0x4B, 0x83, 0x6E, 0x44,-    0xE9, 0xCA, 0x75, 0xFB, 0xE3, 0xEA, 0xDC, 0x48,-    0x6C, 0xBB, 0xD0, 0xD8, 0xCE, 0xE1, 0xB3, 0xCF,-    0x14, 0xF7, 0x6E, 0x7F, 0x1E, 0x77, 0xAE, 0xF3-  },-  {-    0xCE, 0x60, 0x34, 0x3D, 0xC4, 0x87, 0x4B, 0x66,-    0x04, 0xE1, 0xFB, 0x23, 0x1E, 0x37, 0xEC, 0x1E,-    0xEC, 0x3F, 0x06, 0x56, 0x6E, 0x42, 0x8A, 0xE7,-    0x64, 0xEF, 0xFF, 0xA2, 0x30, 0xAD, 0xD4, 0x85-  },-  {-    0xE3, 0x8C, 0x9D, 0xF0, 0x24, 0xDE, 0x21, 0x53,-    0xD2, 0x26, 0x73, 0x8A, 0x0E, 0x5B, 0xA9, 0xB8,-    0xC6, 0x78, 0x4D, 0xAC, 0xA6, 0x5C, 0x22, 0xA7,-    0x62, 0x8E, 0xB5, 0x8E, 0xA0, 0xD4, 0x95, 0xA7-  },-  {-    0x8D, 0xFE, 0xC0, 0xD4, 0xF3, 0x65, 0x8A, 0x20,-    0xA0, 0xBA, 0xD6, 0x6F, 0x21, 0x60, 0x83, 0x2B,-    0x16, 0x4E, 0x70, 0x0A, 0x21, 0xEC, 0x5A, 0x01,-    0x65, 0xC3, 0x67, 0x72, 0xB2, 0x08, 0x61, 0x11-  },-  {-    0x44, 0x01, 0xB5, 0x0E, 0x09, 0x86, 0x5F, 0x42,-    0x38, 0x24, 0x3B, 0x82, 0x25, 0xCA, 0x40, 0xA0,-    0x8D, 0xBB, 0x46, 0x85, 0xF5, 0xF8, 0x62, 0xFB,-    0xDD, 0x72, 0x98, 0x04, 0x31, 0xA8, 0x5D, 0x3F-  },-  {-    0x86, 0x68, 0x94, 0x27, 0x88, 0xC4, 0xCE, 0x8A,-    0x33, 0x19, 0x0F, 0xFC, 0xFA, 0xD1, 0xC6, 0x78,-    0xC4, 0xFA, 0x41, 0xE9, 0x94, 0x17, 0x09, 0x4E,-    0x24, 0x0F, 0x4A, 0x43, 0xF3, 0x87, 0xA3, 0xB6-  },-  {-    0xA7, 0x28, 0x8D, 0x5E, 0x09, 0x80, 0x9B, 0x69,-    0x69, 0x84, 0xEC, 0xD5, 0x32, 0x6C, 0xDD, 0x84,-    0xFB, 0xE3, 0x5F, 0xCF, 0x67, 0x23, 0x5D, 0x81,-    0x1C, 0x82, 0x00, 0x25, 0x36, 0xA3, 0xC5, 0xE1-  },-  {-    0x8E, 0x92, 0x5C, 0x3C, 0x14, 0x6B, 0xAC, 0xF3,-    0x35, 0x1E, 0xC5, 0x32, 0x41, 0xAC, 0xE5, 0xF7,-    0x3E, 0x8F, 0xC9, 0xBD, 0x8C, 0x61, 0xCA, 0xD9,-    0x7F, 0xD7, 0x72, 0xB0, 0x7E, 0x1B, 0x83, 0x73-  },-  {-    0xC7, 0xEB, 0x9E, 0x6D, 0xED, 0x2F, 0x99, 0x3D,-    0x48, 0xB0, 0x17, 0x0D, 0xA2, 0x7C, 0x5B, 0x75,-    0x3B, 0x12, 0x17, 0x6B, 0xE1, 0x26, 0xC7, 0xBA,-    0x2D, 0x6A, 0xF8, 0x5F, 0x85, 0x93, 0xB7, 0x52-  },-  {-    0xCA, 0x27, 0xF1, 0x6F, 0x94, 0xE4, 0xEC, 0x0E,-    0x62, 0x8E, 0x7F, 0x8A, 0xEF, 0xC6, 0x65, 0x7B,-    0xED, 0xC9, 0x37, 0x42, 0x96, 0x59, 0x40, 0xAE,-    0x78, 0x6A, 0x73, 0xB5, 0xFD, 0x59, 0x3B, 0x97-  },-  {-    0x8C, 0x21, 0xE6, 0x56, 0x8B, 0xC6, 0xDC, 0x00,-    0xE3, 0xD6, 0xEB, 0xC0, 0x9E, 0xA9, 0xC2, 0xCE,-    0x00, 0x6C, 0xD3, 0x11, 0xD3, 0xB3, 0xE9, 0xCC,-    0x9D, 0x8D, 0xDB, 0xFB, 0x3C, 0x5A, 0x77, 0x76-  },-  {-    0x52, 0x56, 0x66, 0x96, 0x8B, 0x3B, 0x7D, 0x00,-    0x7B, 0xB9, 0x26, 0xB6, 0xEF, 0xDC, 0x7E, 0x21,-    0x2A, 0x31, 0x15, 0x4C, 0x9A, 0xE1, 0x8D, 0x43,-    0xEE, 0x0E, 0xB7, 0xE6, 0xB1, 0xA9, 0x38, 0xD3-  },-  {-    0xE0, 0x9A, 0x4F, 0xA5, 0xC2, 0x8B, 0xDC, 0xD7,-    0xC8, 0x39, 0x84, 0x0E, 0x0A, 0x38, 0x3E, 0x4F,-    0x7A, 0x10, 0x2D, 0x0B, 0x1B, 0xC8, 0x49, 0xC9,-    0x49, 0x62, 0x7C, 0x41, 0x00, 0xC1, 0x7D, 0xD3-  },-  {-    0xC1, 0x9F, 0x3E, 0x29, 0x5D, 0xB2, 0xFC, 0x0E,-    0x74, 0x81, 0xC4, 0xF1, 0x6A, 0xF0, 0x11, 0x55,-    0xDD, 0xB0, 0xD7, 0xD1, 0x38, 0x3D, 0x4A, 0x1F,-    0xF1, 0x69, 0x9D, 0xB7, 0x11, 0x77, 0x34, 0x0C-  },-  {-    0x76, 0x9E, 0x67, 0x8C, 0x0A, 0x09, 0x09, 0xA2,-    0x02, 0x1C, 0x4D, 0xC2, 0x6B, 0x1A, 0x3C, 0x9B,-    0xC5, 0x57, 0xAD, 0xB2, 0x1A, 0x50, 0x83, 0x4C,-    0xDC, 0x5C, 0x92, 0x93, 0xF7, 0x53, 0x65, 0xF8-  },-  {-    0xB6, 0x48, 0x74, 0xAD, 0xAB, 0x6B, 0xCB, 0x85,-    0xB9, 0x4B, 0xD9, 0xA6, 0xC5, 0x65, 0xD0, 0xD2,-    0xBC, 0x35, 0x44, 0x5D, 0x75, 0x28, 0xBC, 0x85,-    0xB4, 0x1F, 0xDC, 0x79, 0xDC, 0x76, 0xE3, 0x4F-  },-  {-    0xFA, 0xF2, 0x50, 0xDE, 0x15, 0x82, 0x0F, 0x7F,-    0xC6, 0x10, 0xDD, 0x53, 0xEE, 0xAE, 0x44, 0x60,-    0x1C, 0x3E, 0xFF, 0xA3, 0xAC, 0xCD, 0x08, 0x8E,-    0xB6, 0x69, 0x05, 0xBB, 0x26, 0x53, 0xBE, 0x8C-  },-  {-    0x1E, 0x20, 0x38, 0x73, 0x9B, 0x2C, 0x01, 0x8B,-    0x0E, 0x9E, 0x0E, 0x1E, 0x52, 0x2F, 0xD9, 0x65,-    0x12, 0x87, 0xEE, 0x6E, 0x36, 0x65, 0x91, 0x9B,-    0x24, 0xC2, 0x12, 0x4F, 0x0C, 0x1A, 0x3F, 0x3A-  },-  {-    0x5F, 0xEC, 0x3A, 0xA0, 0x08, 0x61, 0xDE, 0x1A,-    0xC5, 0xDA, 0xB3, 0xC1, 0x37, 0x06, 0x5D, 0x1E,-    0x01, 0xBB, 0x03, 0xF6, 0x9D, 0xCC, 0x7D, 0x1C,-    0xF7, 0xCA, 0x4F, 0x43, 0x56, 0xAE, 0xC9, 0xA3-  },-  {-    0x44, 0x51, 0xFE, 0x6B, 0xBE, 0xF3, 0x93, 0x43,-    0x91, 0x92, 0x44, 0xC5, 0x1D, 0xAE, 0x1E, 0xA9,-    0xA9, 0x54, 0xCF, 0x2C, 0x09, 0x66, 0xAB, 0x04,-    0x5B, 0x15, 0x52, 0x1E, 0xCF, 0x35, 0x00, 0x81-  },-  {-    0x8C, 0x62, 0x2F, 0xA2, 0x16, 0x0E, 0x8E, 0x99,-    0x18, 0x13, 0xF1, 0x80, 0xBF, 0xEC, 0x0B, 0x43,-    0x1C, 0x6D, 0xBF, 0xA2, 0x95, 0x6D, 0x91, 0x75,-    0x81, 0x6A, 0x23, 0xC3, 0x82, 0xC4, 0xF2, 0x00-  },-  {-    0x81, 0x7D, 0x5C, 0x8F, 0x92, 0xE7, 0xB5, 0xCA,-    0x57, 0xF5, 0xE1, 0x63, 0x90, 0x16, 0xAD, 0x57,-    0x60, 0xE4, 0x46, 0xD6, 0xE9, 0xCA, 0xA7, 0x49,-    0x84, 0x14, 0xAC, 0xE8, 0x22, 0x80, 0xB5, 0xCD-  },-  {-    0xA6, 0xA1, 0xAD, 0x58, 0xCE, 0xE5, 0x4E, 0x69,-    0xCB, 0xBC, 0xAA, 0x87, 0xDF, 0x07, 0xA6, 0x70,-    0x7E, 0xB2, 0x24, 0x73, 0x9C, 0x21, 0x76, 0x13,-    0x46, 0x0A, 0xB4, 0x54, 0xB4, 0x59, 0xCA, 0x9C-  },-  {-    0x63, 0xB8, 0x47, 0x27, 0x52, 0x26, 0x60, 0x5B,-    0xE6, 0x76, 0x81, 0x25, 0x8F, 0x7D, 0x00, 0xBB,-    0xB3, 0x07, 0xC6, 0x6F, 0x19, 0x59, 0xBF, 0x2E,-    0x46, 0x7A, 0x41, 0xAE, 0xE7, 0x14, 0xE5, 0x5C-  },-  {-    0xFE, 0x52, 0xEB, 0xE5, 0xCF, 0xCF, 0xE6, 0xA2,-    0x29, 0x7B, 0x53, 0x9F, 0xA3, 0xDA, 0xDB, 0xD6,-    0xEB, 0xD2, 0x01, 0xAA, 0x2C, 0xA1, 0x35, 0x63,-    0xE3, 0xD7, 0xF1, 0x4D, 0x15, 0xAB, 0xFF, 0x63-  },-  {-    0xB7, 0xBE, 0xF9, 0xFA, 0x5A, 0x3D, 0x10, 0x42,-    0x62, 0x46, 0xB5, 0xF6, 0x58, 0xC0, 0x8F, 0xDF,-    0x80, 0x66, 0xEA, 0xA3, 0xE5, 0x5A, 0x2F, 0x7D,-    0xA1, 0x59, 0x1E, 0x05, 0xC8, 0x7D, 0xF8, 0xC7-  },-  {-    0xDE, 0xD1, 0xD6, 0xCA, 0xA9, 0xF8, 0xF3, 0xBD,-    0xA9, 0x2C, 0xEA, 0x7F, 0x65, 0x49, 0xB1, 0xFB,-    0x86, 0xA2, 0x21, 0x14, 0x78, 0xC4, 0xEC, 0x28,-    0x9B, 0x83, 0x7E, 0xFC, 0x2B, 0x5C, 0x27, 0xD7-  },-  {-    0x9F, 0x30, 0x00, 0x8A, 0x2E, 0xB0, 0x50, 0xF1,-    0x8E, 0x56, 0xA7, 0x6B, 0xE9, 0x20, 0x91, 0xB2,-    0xFD, 0xC1, 0x64, 0xD5, 0x6E, 0x32, 0xC8, 0x7D,-    0xD6, 0x4C, 0x9E, 0x3A, 0x61, 0x10, 0x41, 0xB1-  },-  {-    0x01, 0x0B, 0x6A, 0x3B, 0x11, 0x86, 0x00, 0x88,-    0xF0, 0xAB, 0xC8, 0x0A, 0x89, 0x72, 0xCB, 0xBC,-    0x32, 0x9D, 0x52, 0x75, 0x34, 0x29, 0x50, 0xEB,-    0x9A, 0x04, 0x5A, 0xFD, 0xC8, 0xBB, 0xED, 0x24-  },-  {-    0x0C, 0xD2, 0x10, 0xAA, 0xC1, 0x1F, 0x1C, 0x1C,-    0xED, 0x49, 0x7F, 0x67, 0x3E, 0x53, 0xDB, 0x68,-    0xC3, 0xEC, 0x36, 0x07, 0xF0, 0xC5, 0x78, 0x7D,-    0xDC, 0x60, 0xA3, 0x55, 0xDF, 0xE5, 0x6C, 0x25-  },-  {-    0x0E, 0x56, 0xFD, 0x01, 0xDA, 0x3B, 0x4F, 0x8B,-    0xE2, 0xC9, 0x90, 0x55, 0x2A, 0xAC, 0x8D, 0x1E,-    0x8D, 0xA2, 0x09, 0xBC, 0xF4, 0xAA, 0xD4, 0xFF,-    0xB5, 0x42, 0x7F, 0xD6, 0x31, 0x72, 0x46, 0x3E-  },-  {-    0xD6, 0xD5, 0xCD, 0xB1, 0x14, 0x40, 0xE3, 0x4A,-    0xCA, 0x3A, 0x2F, 0xCF, 0x30, 0xF5, 0x9E, 0x08,-    0xB1, 0x1A, 0x2A, 0x3D, 0xE5, 0x39, 0xE3, 0xE6,-    0x51, 0x3E, 0xD7, 0x8A, 0x4F, 0xEE, 0x51, 0x3B-  },-  {-    0xAA, 0x35, 0xAC, 0x90, 0x68, 0x06, 0x70, 0xC7,-    0x32, 0xED, 0x1E, 0xF3, 0x7E, 0x8C, 0xBA, 0xAE,-    0x49, 0xA4, 0xD8, 0x8E, 0xCF, 0x4D, 0xF2, 0xB6,-    0x89, 0xA0, 0xF1, 0x01, 0xB7, 0x56, 0xAE, 0x47-  },-  {-    0x27, 0x8E, 0x56, 0x12, 0x88, 0x72, 0x26, 0x30,-    0xE2, 0x6A, 0x5F, 0xC9, 0x54, 0xBF, 0x2D, 0xCD,-    0x6A, 0x65, 0x81, 0x67, 0x39, 0xAB, 0xEE, 0x7B,-    0xE1, 0x43, 0x07, 0xA9, 0x61, 0x74, 0xE5, 0xB0-  },-  {-    0xAB, 0x4B, 0x2C, 0xA1, 0xA2, 0xB3, 0x49, 0x98,-    0x15, 0x24, 0xB6, 0x15, 0x54, 0x62, 0xF0, 0xFF,-    0x10, 0x60, 0xBF, 0x9B, 0xFA, 0x07, 0xFB, 0x9E,-    0xC6, 0x9C, 0xA4, 0x71, 0x64, 0x5B, 0x6A, 0x18-  },-  {-    0x18, 0xA9, 0xBB, 0xEC, 0x3C, 0x8E, 0x1F, 0x8E,-    0xE9, 0x57, 0x12, 0x97, 0xA9, 0x34, 0x36, 0xDE,-    0x42, 0x7C, 0xD2, 0x70, 0xEC, 0x69, 0xDF, 0xE8,-    0x88, 0xDB, 0x7D, 0xBF, 0x10, 0xB6, 0x49, 0x93-  },-  {-    0xBA, 0xFC, 0x7E, 0x43, 0xD2, 0x65, 0xA1, 0x73,-    0x02, 0x1A, 0x9D, 0x9E, 0x58, 0x3D, 0x60, 0xED,-    0x42, 0xA8, 0x03, 0xFA, 0xCD, 0x6B, 0x83, 0x60,-    0xDE, 0x1F, 0x91, 0x68, 0x35, 0x38, 0x9B, 0xF0-  },-  {-    0xA5, 0xB6, 0x7B, 0xE9, 0x50, 0xFB, 0xC2, 0xF0,-    0xDD, 0x32, 0x3A, 0x79, 0xA1, 0x9E, 0x3E, 0xD1,-    0xF4, 0xAE, 0x4B, 0xA7, 0x89, 0x4F, 0x93, 0x0E,-    0xA5, 0xEF, 0x73, 0x4D, 0xE7, 0xDB, 0x83, 0xAE-  },-  {-    0xBF, 0x1E, 0x65, 0xF3, 0xCD, 0x84, 0x98, 0x88,-    0x4D, 0x9D, 0x5C, 0x19, 0xEB, 0xF7, 0xB9, 0x16,-    0x06, 0x76, 0x37, 0x60, 0x4E, 0x26, 0xDB, 0xE2,-    0xB7, 0x28, 0x8E, 0xCB, 0x11, 0x42, 0x60, 0x68-  },-  {-    0xC3, 0x34, 0x2C, 0xF9, 0xCB, 0xBF, 0x29, 0xD4,-    0x06, 0xD7, 0x89, 0x5D, 0xD4, 0xD9, 0x54, 0x8D,-    0x4A, 0xC7, 0x8B, 0x4D, 0x00, 0xE9, 0xB6, 0x3E,-    0x20, 0x3E, 0x5E, 0x19, 0xE9, 0x97, 0x46, 0x20-  },-  {-    0x1C, 0x0B, 0xE6, 0x02, 0x77, 0x43, 0x4B, 0x0E,-    0x00, 0x4B, 0x7B, 0x38, 0x8A, 0x37, 0x55, 0x9F,-    0x84, 0xB3, 0x0C, 0x6C, 0xF8, 0x60, 0x0F, 0x52,-    0x8B, 0xFC, 0xD3, 0x3C, 0xAF, 0x52, 0xCB, 0x1E-  },-  {-    0x73, 0x95, 0x45, 0x30, 0xD0, 0x3F, 0x10, 0xBE,-    0xF5, 0x2A, 0xD5, 0xBC, 0x7F, 0xB4, 0xC0, 0x76,-    0xF8, 0x3F, 0x63, 0x31, 0xC8, 0xBD, 0x1E, 0xEE,-    0xC3, 0x88, 0x7F, 0x4A, 0xA2, 0x06, 0x92, 0x40-  },-  {-    0x69, 0xC1, 0x1E, 0xE0, 0x49, 0x44, 0xDE, 0xA9,-    0x85, 0xAC, 0x9F, 0x13, 0x96, 0x0E, 0x73, 0x98,-    0x0E, 0x1B, 0xB0, 0xE3, 0x09, 0xF4, 0x38, 0x4A,-    0x16, 0x76, 0xF8, 0xEF, 0xAB, 0x38, 0x42, 0x88-  },-  {-    0x36, 0xFB, 0x8F, 0xDE, 0x0E, 0xC2, 0x8C, 0xE8,-    0x53, 0xFB, 0x71, 0x75, 0xC1, 0xB7, 0x9D, 0xA3,-    0xB5, 0xE8, 0xC3, 0x91, 0x86, 0xE7, 0x8A, 0xAE,-    0xCE, 0x54, 0x64, 0xDB, 0xD9, 0xFE, 0x2A, 0xA2-  },-  {-    0x6B, 0xB2, 0xA0, 0x9D, 0xFC, 0xAF, 0x96, 0x96,-    0x2D, 0xE0, 0x0C, 0x8A, 0x08, 0x2D, 0x6D, 0xF9,-    0x32, 0x2B, 0x49, 0x66, 0xAE, 0x8D, 0x2E, 0xCF,-    0x73, 0x24, 0x11, 0xA7, 0x6A, 0x1A, 0x0E, 0xE6-  },-  {-    0x74, 0x12, 0xE7, 0xDD, 0x1B, 0xF1, 0xAA, 0x93,-    0x97, 0x41, 0x1B, 0xBA, 0x4D, 0x3E, 0x02, 0x76,-    0xD2, 0xE7, 0xA1, 0xA2, 0x9A, 0x24, 0x77, 0x15,-    0x7A, 0xD6, 0x03, 0x60, 0xD3, 0x3D, 0x4E, 0x76-  },-  {-    0xDD, 0xDE, 0xAF, 0xCF, 0xC7, 0x23, 0x21, 0xC8,-    0x49, 0xFB, 0x25, 0x94, 0x7A, 0xB4, 0x2C, 0x1A,-    0xF2, 0xA5, 0xE4, 0x3F, 0xEF, 0x68, 0x1B, 0xE4,-    0x2C, 0x7E, 0xAF, 0x36, 0x60, 0x08, 0x0A, 0xD3-  },-  {-    0x9D, 0xEF, 0xEB, 0xAD, 0xBD, 0xCB, 0x0A, 0x0E,-    0x7F, 0xF9, 0x92, 0xF9, 0x47, 0xCE, 0xD3, 0xD0,-    0xA4, 0xC8, 0x99, 0xE6, 0x4F, 0xE7, 0x73, 0x60,-    0xE8, 0x1E, 0x1F, 0x0E, 0x97, 0xF8, 0xC1, 0xA2-  },-  {-    0x84, 0x4C, 0x59, 0xFB, 0xE6, 0x47, 0x6F, 0xD1,-    0x89, 0x23, 0x99, 0x54, 0xF1, 0x7E, 0x36, 0xE1,-    0xF6, 0x9E, 0x24, 0xAA, 0xED, 0x5D, 0x5C, 0x8B,-    0x84, 0x05, 0xEF, 0x2A, 0x83, 0x0C, 0xC2, 0xA0-  },-  {-    0xFF, 0x3F, 0xAF, 0xB6, 0x77, 0x86, 0xE0, 0x1A,-    0x0C, 0x38, 0xEA, 0xDF, 0x99, 0xC4, 0xCA, 0xE8,-    0x02, 0x9D, 0xA8, 0xCF, 0x29, 0x87, 0x5F, 0xC4,-    0x19, 0xBF, 0x68, 0x00, 0x09, 0xB3, 0xBD, 0xB3-  },-  {-    0xCA, 0x67, 0x60, 0xF3, 0x45, 0x67, 0x8F, 0x30,-    0xA2, 0x8D, 0x62, 0x82, 0x94, 0x27, 0x2A, 0x19,-    0xE3, 0x07, 0x2E, 0xBC, 0x61, 0xB1, 0x9F, 0xF1,-    0x3B, 0x31, 0x89, 0x73, 0xE9, 0x7C, 0x27, 0x38-  },-  {-    0xC0, 0x8E, 0x1A, 0x90, 0x47, 0xC5, 0x05, 0x26,-    0x4A, 0x16, 0x44, 0x7C, 0x9E, 0xD9, 0x81, 0xA7,-    0x19, 0xD3, 0x81, 0xF2, 0x8E, 0x60, 0x5F, 0xD7,-    0xCA, 0xA9, 0xE8, 0xBD, 0xBB, 0x42, 0x99, 0x6A-  },-  {-    0xF1, 0x73, 0xBA, 0x9D, 0x45, 0x84, 0xCD, 0x12,-    0x60, 0x50, 0xC6, 0x9F, 0xC2, 0x19, 0xA9, 0x19,-    0x0A, 0x0B, 0xF0, 0xAE, 0xCE, 0xCB, 0xE6, 0x11,-    0xBE, 0xED, 0x19, 0x3D, 0xA6, 0xCA, 0x4D, 0xE7-  },-  {-    0xB1, 0x84, 0x87, 0x65, 0x20, 0xDE, 0xD8, 0xBD,-    0x7D, 0xE2, 0x5E, 0xAE, 0xFB, 0xD3, 0xE0, 0x36,-    0x88, 0xC3, 0xBE, 0x39, 0xC1, 0x9F, 0xB7, 0x3E,-    0x1F, 0x0E, 0xCC, 0xAC, 0x7C, 0xC0, 0xF0, 0x14-  },-  {-    0x90, 0x25, 0xDB, 0x07, 0x58, 0xBD, 0xFB, 0x48,-    0xF0, 0x66, 0x7E, 0xBD, 0x7E, 0x12, 0x02, 0x46,-    0x59, 0x8F, 0xED, 0x01, 0xC2, 0x58, 0x76, 0x4F,-    0xA0, 0xFA, 0xE3, 0x34, 0xA2, 0xA0, 0x0A, 0x97-  },-  {-    0xE8, 0x3D, 0x80, 0x86, 0xFA, 0xBC, 0x46, 0x0D,-    0x5E, 0xFC, 0x45, 0x9F, 0x95, 0xA2, 0x68, 0xF5,-    0xDC, 0x4A, 0xC2, 0x84, 0x09, 0x3C, 0x24, 0x7C,-    0xA6, 0xEC, 0x84, 0x1A, 0xD6, 0x18, 0x3F, 0xE1-  },-  {-    0xCC, 0x9D, 0xF4, 0x1D, 0x35, 0xAA, 0x75, 0x92,-    0x8C, 0x18, 0x5F, 0x73, 0x93, 0x66, 0x61, 0x10,-    0xB8, 0x0F, 0x09, 0x86, 0xA2, 0x21, 0xC3, 0x70,-    0xF4, 0x5C, 0x2E, 0xB9, 0x01, 0x6C, 0x9A, 0x3B-  },-  {-    0x92, 0xF9, 0xA5, 0x94, 0x95, 0x45, 0x90, 0xFA,-    0x81, 0x98, 0x17, 0xE5, 0xD1, 0xC2, 0x8A, 0xAB,-    0x2B, 0x1C, 0xC5, 0x04, 0xD8, 0x6D, 0xBA, 0x44,-    0x36, 0x76, 0xBD, 0xF8, 0x66, 0x79, 0x68, 0x11-  },-  {-    0x72, 0x95, 0x62, 0xA1, 0xE0, 0x7B, 0x0E, 0x26,-    0x05, 0x49, 0x48, 0x09, 0xBD, 0x48, 0x0F, 0x15,-    0x37, 0xCE, 0xA1, 0x0D, 0xCA, 0xD4, 0x3E, 0xF9,-    0xF6, 0x8C, 0x66, 0xE8, 0x25, 0xDC, 0x46, 0xB1-  },-  {-    0x26, 0xF1, 0x60, 0xAB, 0x96, 0xF5, 0x58, 0x20,-    0x45, 0x14, 0x6E, 0xAF, 0xF2, 0xE2, 0xA8, 0xD4,-    0xDA, 0xB2, 0x98, 0xB4, 0xC5, 0x7E, 0x11, 0x7C,-    0xDF, 0xC5, 0xD0, 0x25, 0xC9, 0x2A, 0x22, 0x68-  },-  {-    0x87, 0xEB, 0xE7, 0x21, 0x38, 0x38, 0x73, 0xD2,-    0x47, 0xF8, 0x61, 0x82, 0xE3, 0xF5, 0x99, 0xA7,-    0x63, 0x4F, 0xCA, 0xEC, 0x5E, 0x07, 0xB1, 0xE8,-    0x3E, 0xBB, 0x79, 0x62, 0x5B, 0xA3, 0x54, 0xE6-  },-  {-    0xE0, 0x8D, 0x38, 0x9F, 0x75, 0x69, 0x4A, 0xDC,-    0x99, 0x6C, 0x22, 0xF5, 0x5D, 0x4F, 0x85, 0x9F,-    0xFD, 0x0C, 0x13, 0x19, 0xFF, 0x9C, 0xED, 0xF7,-    0x8C, 0x31, 0xBE, 0x84, 0xB6, 0xF2, 0x1A, 0xBC-  },-  {-    0x13, 0x63, 0xE2, 0x29, 0x13, 0xC6, 0xE1, 0x8E,-    0x7A, 0xA6, 0x5B, 0x83, 0xE7, 0x51, 0xC8, 0xA2,-    0xC6, 0x1B, 0x0F, 0x30, 0x71, 0x55, 0x86, 0x5A,-    0x57, 0xDB, 0xA5, 0x69, 0xA9, 0x9C, 0x7B, 0x0E-  },-  {-    0x88, 0x78, 0x08, 0x8E, 0xB2, 0xD1, 0xF6, 0xD0,-    0xBB, 0x48, 0x1B, 0x4B, 0xB1, 0x87, 0xDA, 0x04,-    0xBC, 0xD8, 0xC2, 0xC6, 0x39, 0xF0, 0x05, 0xB0,-    0x80, 0x54, 0xCC, 0x41, 0x75, 0x39, 0x05, 0xFB-  },-  {-    0x04, 0x18, 0xD6, 0x0D, 0x05, 0xB4, 0xE1, 0x24,-    0x64, 0x6E, 0xE5, 0x0E, 0x77, 0x49, 0xA1, 0xD2,-    0x09, 0x45, 0x7B, 0xC5, 0x43, 0xE3, 0xCC, 0x11,-    0x30, 0x27, 0x4A, 0xEA, 0x0F, 0x7B, 0xF3, 0xC1-  },-  {-    0x7A, 0x39, 0x7E, 0x50, 0x3F, 0x29, 0x3B, 0xC4,-    0x2D, 0x5F, 0x7E, 0xF5, 0xEC, 0x37, 0x87, 0x24,-    0x60, 0xA4, 0xF5, 0xB5, 0xCC, 0xDE, 0x77, 0xFB,-    0x4D, 0x47, 0xAC, 0x06, 0x81, 0xE5, 0xA0, 0x49-  },-  {-    0x5C, 0x0D, 0x29, 0x83, 0xE7, 0x2A, 0x6D, 0xD4,-    0xE6, 0x52, 0xD7, 0x23, 0xC1, 0xDF, 0xC1, 0x2B,-    0x41, 0x4C, 0x87, 0x3D, 0x4A, 0xB4, 0xA0, 0xA1,-    0x50, 0x40, 0x8E, 0xB3, 0x43, 0x47, 0xE9, 0x95-  },-  {-    0x56, 0x23, 0x36, 0x54, 0x53, 0xC0, 0x49, 0x89,-    0xC7, 0xCF, 0x33, 0x63, 0x5E, 0x0F, 0xC4, 0xCD,-    0xDD, 0x68, 0x6F, 0xC9, 0x5A, 0x33, 0xDF, 0xED,-    0xCF, 0x33, 0x35, 0x79, 0x4C, 0x7D, 0xC3, 0x44-  },-  {-    0x11, 0xF6, 0xDA, 0xD1, 0x88, 0x02, 0x8F, 0xDF,-    0x13, 0x78, 0xA2, 0x56, 0xE4, 0x57, 0x0E, 0x90,-    0x63, 0x10, 0x7B, 0x8F, 0x79, 0xDC, 0x66, 0x3F,-    0xA5, 0x55, 0x6F, 0x56, 0xFD, 0x44, 0xA0, 0xF0-  },-  {-    0x0E, 0xD8, 0x16, 0x17, 0x97, 0xEC, 0xEE, 0x88,-    0x1E, 0x7D, 0x0E, 0x3F, 0x4C, 0x5F, 0xB8, 0x39,-    0xC8, 0x4E, 0xB7, 0xA9, 0x24, 0x26, 0x57, 0xCC,-    0x48, 0x30, 0x68, 0x07, 0xB3, 0x2B, 0xEF, 0xDE-  },-  {-    0x73, 0x66, 0x67, 0xC9, 0x36, 0x4C, 0xE1, 0x2D,-    0xB8, 0xF6, 0xB1, 0x43, 0xC6, 0xC1, 0x78, 0xCD,-    0xEF, 0x1E, 0x14, 0x45, 0xBC, 0x5A, 0x2F, 0x26,-    0x34, 0xF0, 0x8E, 0x99, 0x32, 0x27, 0x3C, 0xAA-  },-  {-    0xE1, 0x5F, 0x36, 0x8B, 0x44, 0x06, 0xC1, 0xF6,-    0x55, 0x57, 0xC8, 0x35, 0x5C, 0xBE, 0x69, 0x4B,-    0x63, 0x3E, 0x26, 0xF1, 0x55, 0xF5, 0x2B, 0x7D,-    0xA9, 0x4C, 0xFB, 0x23, 0xFD, 0x4A, 0x5D, 0x96-  },-  {-    0x43, 0x7A, 0xB2, 0xD7, 0x4F, 0x50, 0xCA, 0x86,-    0xCC, 0x3D, 0xE9, 0xBE, 0x70, 0xE4, 0x55, 0x48,-    0x25, 0xE3, 0x3D, 0x82, 0x4B, 0x3A, 0x49, 0x23,-    0x62, 0xE2, 0xE9, 0xD6, 0x11, 0xBC, 0x57, 0x9D-  },-  {-    0x2B, 0x91, 0x58, 0xC7, 0x22, 0x89, 0x8E, 0x52,-    0x6D, 0x2C, 0xDD, 0x3F, 0xC0, 0x88, 0xE9, 0xFF,-    0xA7, 0x9A, 0x9B, 0x73, 0xB7, 0xD2, 0xD2, 0x4B,-    0xC4, 0x78, 0xE2, 0x1C, 0xDB, 0x3B, 0x67, 0x63-  },-  {-    0x0C, 0x8A, 0x36, 0x59, 0x7D, 0x74, 0x61, 0xC6,-    0x3A, 0x94, 0x73, 0x28, 0x21, 0xC9, 0x41, 0x85,-    0x6C, 0x66, 0x83, 0x76, 0x60, 0x6C, 0x86, 0xA5,-    0x2D, 0xE0, 0xEE, 0x41, 0x04, 0xC6, 0x15, 0xDB-  },-};-----static const uint8_t blake2bp_kat[KAT_LENGTH][BLAKE2B_OUTBYTES] =-{-  {-    0xB5, 0xEF, 0x81, 0x1A, 0x80, 0x38, 0xF7, 0x0B,-    0x62, 0x8F, 0xA8, 0xB2, 0x94, 0xDA, 0xAE, 0x74,-    0x92, 0xB1, 0xEB, 0xE3, 0x43, 0xA8, 0x0E, 0xAA,-    0xBB, 0xF1, 0xF6, 0xAE, 0x66, 0x4D, 0xD6, 0x7B,-    0x9D, 0x90, 0xB0, 0x12, 0x07, 0x91, 0xEA, 0xB8,-    0x1D, 0xC9, 0x69, 0x85, 0xF2, 0x88, 0x49, 0xF6,-    0xA3, 0x05, 0x18, 0x6A, 0x85, 0x50, 0x1B, 0x40,-    0x51, 0x14, 0xBF, 0xA6, 0x78, 0xDF, 0x93, 0x80-  },-  {-    0xA1, 0x39, 0x28, 0x0E, 0x72, 0x75, 0x7B, 0x72,-    0x3E, 0x64, 0x73, 0xD5, 0xBE, 0x59, 0xF3, 0x6E,-    0x9D, 0x50, 0xFC, 0x5C, 0xD7, 0xD4, 0x58, 0x5C,-    0xBC, 0x09, 0x80, 0x48, 0x95, 0xA3, 0x6C, 0x52,-    0x12, 0x42, 0xFB, 0x27, 0x89, 0xF8, 0x5C, 0xB9,-    0xE3, 0x54, 0x91, 0xF3, 0x1D, 0x4A, 0x69, 0x52,-    0xF9, 0xD8, 0xE0, 0x97, 0xAE, 0xF9, 0x4F, 0xA1,-    0xCA, 0x0B, 0x12, 0x52, 0x57, 0x21, 0xF0, 0x3D-  },-  {-    0xEF, 0x8C, 0xDA, 0x96, 0x35, 0xD5, 0x06, 0x3A,-    0xF8, 0x11, 0x15, 0xDA, 0x3C, 0x52, 0x32, 0x5A,-    0x86, 0xE8, 0x40, 0x74, 0xF9, 0xF7, 0x24, 0xB7,-    0xCB, 0xD0, 0xB0, 0x85, 0x6F, 0xF0, 0x01, 0x77,-    0xCD, 0xD2, 0x83, 0xC2, 0x98, 0x32, 0x6C, 0xD0,-    0x91, 0x77, 0x54, 0xC5, 0x24, 0x1F, 0x14, 0x80,-    0xFB, 0x50, 0x9C, 0xF2, 0xD2, 0xC4, 0x49, 0x81,-    0x80, 0x77, 0xAE, 0x35, 0xFC, 0x33, 0x07, 0x37-  },-  {-    0x8C, 0xF9, 0x33, 0xA2, 0xD3, 0x61, 0xA3, 0xE6,-    0xA1, 0x36, 0xDB, 0xE4, 0xA0, 0x1E, 0x79, 0x03,-    0x79, 0x7A, 0xD6, 0xCE, 0x76, 0x6E, 0x2B, 0x91,-    0xB9, 0xB4, 0xA4, 0x03, 0x51, 0x27, 0xD6, 0x5F,-    0x4B, 0xE8, 0x65, 0x50, 0x11, 0x94, 0x18, 0xE2,-    0x2D, 0xA0, 0x0F, 0xD0, 0x6B, 0xF2, 0xB2, 0x75,-    0x96, 0xB3, 0x7F, 0x06, 0xBE, 0x0A, 0x15, 0x4A,-    0xAF, 0x7E, 0xCA, 0x54, 0xC4, 0x52, 0x0B, 0x97-  },-  {-    0x24, 0xDC, 0x1E, 0x6D, 0xC4, 0xE5, 0x1A, 0x3A,-    0x3C, 0x8D, 0xA6, 0x7A, 0xAC, 0xB4, 0xC5, 0x41,-    0xE4, 0x18, 0x18, 0xD1, 0x80, 0xE5, 0xBB, 0x69,-    0x75, 0x3D, 0xBB, 0xFF, 0x2F, 0x44, 0xD0, 0xE7,-    0xDA, 0x83, 0x03, 0x86, 0xBF, 0xC8, 0x3B, 0x27,-    0xA5, 0x9D, 0xBB, 0x62, 0xB9, 0x64, 0xFC, 0x8E,-    0xA6, 0xCB, 0xDF, 0x30, 0x49, 0xBF, 0xF8, 0x1F,-    0x24, 0xF3, 0x48, 0xDB, 0x4E, 0xFD, 0x0D, 0x07-  },-  {-    0xBC, 0x23, 0xF5, 0xAB, 0xDF, 0xFD, 0x6A, 0x32,-    0xA5, 0xD4, 0x08, 0x11, 0x26, 0x2E, 0xD4, 0x47,-    0x9E, 0xF7, 0x0B, 0x42, 0x33, 0xCA, 0x20, 0x5B,-    0xC5, 0xB9, 0xBF, 0x85, 0x96, 0x73, 0x19, 0x82,-    0xD0, 0x41, 0x69, 0xA9, 0x04, 0xDD, 0x43, 0xB0,-    0xE0, 0xF9, 0x48, 0x99, 0xF7, 0x33, 0x02, 0x2D,-    0x24, 0xD8, 0x4F, 0xAD, 0x0A, 0x99, 0x16, 0x00,-    0xF1, 0x97, 0x9B, 0x27, 0x2A, 0xD6, 0x20, 0x73-  },-  {-    0xEF, 0x10, 0x7F, 0xCD, 0x0D, 0x92, 0xD8, 0x4E,-    0xF5, 0xEF, 0x94, 0x63, 0xE6, 0xE9, 0x62, 0x41,-    0x25, 0x45, 0x29, 0xD2, 0xB9, 0x7F, 0xDB, 0xE5,-    0x64, 0x19, 0x07, 0x0A, 0xDB, 0xC7, 0xD5, 0x70,-    0x6F, 0xEB, 0x8F, 0x44, 0x95, 0x79, 0x81, 0x9E,-    0xD4, 0xBE, 0x61, 0x97, 0x85, 0xFF, 0xFA, 0xAF,-    0x0D, 0x97, 0x89, 0xCF, 0xE7, 0x26, 0x24, 0x9A,-    0xB0, 0x8C, 0x94, 0x68, 0xCB, 0x5F, 0xDE, 0x22-  },-  {-    0x23, 0x1F, 0xBF, 0xB7, 0xA1, 0xDD, 0xC5, 0xB7,-    0x49, 0x33, 0xA2, 0x85, 0xA4, 0x22, 0x4C, 0x04,-    0x9C, 0xBA, 0x14, 0x85, 0xCE, 0x35, 0x64, 0x0D,-    0x9C, 0x51, 0x6E, 0xD7, 0x8E, 0xAA, 0x22, 0x6D,-    0x36, 0xF6, 0x5B, 0x25, 0x89, 0xB8, 0x26, 0xC4,-    0x59, 0xFA, 0x6A, 0x91, 0xC4, 0x26, 0xFD, 0x2A,-    0x8A, 0xB4, 0x61, 0xC9, 0x76, 0x7E, 0x7B, 0xDD,-    0x99, 0x6B, 0xEF, 0x5A, 0x78, 0xF4, 0x81, 0xB7-  },-  {-    0x3A, 0x83, 0x1F, 0x2D, 0xA9, 0x69, 0xB9, 0xB7,-    0x36, 0x0E, 0x74, 0xEE, 0x53, 0xB5, 0x18, 0x98,-    0x0A, 0x5E, 0xBC, 0xDF, 0xD4, 0xEE, 0x23, 0xED,-    0x80, 0x5C, 0x26, 0x39, 0x4D, 0x18, 0x24, 0x20,-    0x8D, 0x7E, 0x8F, 0x63, 0x27, 0xD4, 0xEC, 0x87,-    0x97, 0x9C, 0xE4, 0xAF, 0x8A, 0xB0, 0x97, 0xD6,-    0x9E, 0x26, 0x1C, 0xA3, 0x2D, 0xB0, 0xEE, 0xFD,-    0xBC, 0x18, 0xD1, 0x63, 0x77, 0xA6, 0xBD, 0x20-  },-  {-    0x83, 0x49, 0xA2, 0x0F, 0xDD, 0xBA, 0xE1, 0xD8,-    0x47, 0x2B, 0x67, 0xF0, 0x34, 0x7A, 0xA0, 0xFD,-    0x40, 0x4D, 0x65, 0xC6, 0xFA, 0x14, 0x72, 0xB3,-    0x10, 0x39, 0x0D, 0x75, 0x65, 0xBA, 0x6B, 0xC1,-    0x02, 0x60, 0xD3, 0xDC, 0xE6, 0xA1, 0x4F, 0x4D,-    0xD9, 0xB8, 0xB3, 0xE0, 0xA0, 0xC4, 0x7F, 0x6D,-    0xB7, 0xE7, 0x10, 0x0A, 0x7A, 0x9B, 0x64, 0xA8,-    0x44, 0xF0, 0x10, 0x64, 0xD0, 0x79, 0x05, 0xC5-  },-  {-    0x23, 0x9A, 0xE3, 0xD6, 0x85, 0x9C, 0x7C, 0x97,-    0x2A, 0x5D, 0xC8, 0xB9, 0xC5, 0x5A, 0xEB, 0x93,-    0x85, 0x90, 0xCF, 0xB8, 0x55, 0x2A, 0xA3, 0x05,-    0xA6, 0xF6, 0xF3, 0x1F, 0xFA, 0x95, 0xA8, 0x40,-    0xF4, 0xEC, 0x36, 0xF6, 0xFB, 0x8F, 0x83, 0xB6,-    0x9C, 0x1D, 0xA9, 0x81, 0xFC, 0x9B, 0xA1, 0x63,-    0x60, 0xDB, 0x0F, 0x4F, 0x7C, 0x68, 0xEB, 0x54,-    0x3E, 0xD5, 0x8B, 0x28, 0x75, 0x6A, 0x1E, 0x0D-  },-  {-    0x7C, 0x56, 0x73, 0x28, 0x63, 0x08, 0x40, 0x8F,-    0xBC, 0x62, 0x24, 0x0E, 0x07, 0x47, 0x28, 0xB2,-    0x7A, 0x57, 0x5C, 0xAD, 0x2A, 0x15, 0x6E, 0x00,-    0xB5, 0xC0, 0x8B, 0x21, 0x8D, 0x88, 0x87, 0x79,-    0x1E, 0x47, 0xBF, 0x10, 0xB0, 0xBC, 0x61, 0xA5,-    0x82, 0x54, 0x5A, 0x24, 0x69, 0x63, 0x9C, 0xE6,-    0x28, 0xC4, 0x0F, 0x20, 0xEA, 0x8B, 0x84, 0x9C,-    0xD0, 0x05, 0x44, 0x5F, 0x29, 0xA0, 0x8C, 0xCE-  },-  {-    0xDD, 0x07, 0x7E, 0x76, 0x9E, 0x0D, 0xEF, 0x78,-    0xDD, 0x7A, 0xAD, 0xD5, 0x7D, 0x58, 0x42, 0x1B,-    0xDA, 0x3A, 0x1A, 0x4E, 0x69, 0x72, 0x05, 0x9F,-    0x8E, 0x64, 0x9C, 0xD6, 0xBC, 0xA4, 0x4A, 0x13,-    0xAB, 0x71, 0xEB, 0x53, 0x5D, 0x24, 0x49, 0x22,-    0x94, 0x84, 0x65, 0xD7, 0x3B, 0xD6, 0x4E, 0xFB,-    0x09, 0x10, 0x46, 0x94, 0x90, 0x66, 0x65, 0x36,-    0x03, 0x57, 0x5A, 0x2E, 0x89, 0x1E, 0xBD, 0x54-  },-  {-    0xB3, 0x6C, 0xEF, 0x28, 0x53, 0x2B, 0x40, 0xD8,-    0x17, 0x86, 0x28, 0xF0, 0xFA, 0xB5, 0xE5, 0xB4,-    0xA1, 0xDE, 0xC0, 0xC0, 0xE9, 0x11, 0xD7, 0x27,-    0xBF, 0x09, 0x49, 0x0F, 0x5E, 0x8D, 0x9F, 0xAC,-    0x57, 0x21, 0x3F, 0xD2, 0xA2, 0xD1, 0x2E, 0xD3,-    0xD7, 0x7A, 0x41, 0xF5, 0xE2, 0xFE, 0xCC, 0x40,-    0xE4, 0xEE, 0xCA, 0x16, 0x12, 0xF5, 0x1C, 0x45,-    0x23, 0x31, 0xAE, 0x93, 0x96, 0x62, 0x35, 0xBC-  },-  {-    0xDE, 0x73, 0x7D, 0xBC, 0x61, 0x2E, 0xBD, 0x31,-    0xBC, 0x49, 0xA2, 0xD7, 0xC6, 0x44, 0xD4, 0xB1,-    0x37, 0x81, 0x74, 0x19, 0x42, 0x1C, 0x32, 0xF4,-    0xE7, 0x51, 0x14, 0xD8, 0x99, 0xE3, 0x13, 0x1D,-    0x45, 0xCA, 0x54, 0x51, 0x24, 0x8F, 0x24, 0x16,-    0x9F, 0xBF, 0x17, 0xEE, 0x60, 0xA9, 0xB7, 0x07,-    0x98, 0xA4, 0xB9, 0x37, 0xCE, 0xA6, 0x27, 0x95,-    0x28, 0x96, 0x39, 0xD1, 0x8F, 0xCD, 0x89, 0xE4-  },-  {-    0xB4, 0xC1, 0xBB, 0xCB, 0xBC, 0xCD, 0xFC, 0xE4,-    0xD2, 0xBE, 0x9D, 0xCD, 0xB9, 0x83, 0xC1, 0xB0,-    0x20, 0xC5, 0xF7, 0x20, 0xDA, 0x5B, 0xEC, 0xF4,-    0xCB, 0x2A, 0x9A, 0x3D, 0x1B, 0x8D, 0x23, 0xCE,-    0xA7, 0xA9, 0xF5, 0xFD, 0x70, 0xD3, 0x74, 0x0E,-    0xCD, 0x67, 0xCE, 0x7D, 0x1E, 0x9C, 0x5E, 0x31,-    0xA3, 0x30, 0x2D, 0xF6, 0x6A, 0x9B, 0x5D, 0x54,-    0x30, 0x44, 0x90, 0xFB, 0xE1, 0xC4, 0xA8, 0xB9-  },-  {-    0xB1, 0xD6, 0x5E, 0x70, 0xC6, 0x9B, 0xA7, 0xE3,-    0xA7, 0x28, 0xE8, 0xB6, 0x44, 0x94, 0x93, 0xF2,-    0x37, 0x51, 0x0B, 0x23, 0xB6, 0xE7, 0x7D, 0x95,-    0x84, 0xD0, 0x5F, 0xF4, 0xD3, 0xF0, 0x87, 0x80,-    0x92, 0x9D, 0x74, 0xFA, 0x5B, 0xED, 0x9B, 0x75,-    0xD4, 0xD6, 0xD1, 0xCA, 0x91, 0xAB, 0x8D, 0x26,-    0x37, 0xDC, 0x2E, 0x79, 0xBA, 0x0F, 0xE0, 0x59,-    0x4A, 0xCD, 0x68, 0xFB, 0x3C, 0xC6, 0x60, 0xB9-  },-  {-    0xDA, 0x79, 0xF7, 0x29, 0xEA, 0xB9, 0x8C, 0x04,-    0xF3, 0x7F, 0xCC, 0x85, 0x4B, 0x69, 0xA8, 0x4E,-    0x46, 0x7D, 0xEA, 0x1E, 0x77, 0x82, 0xE7, 0xAF,-    0x02, 0xCB, 0x44, 0xA4, 0x9D, 0x21, 0x0D, 0x25,-    0x23, 0x68, 0x3D, 0x42, 0x0A, 0xC1, 0xDE, 0xC8,-    0xAD, 0x1F, 0xB4, 0x0E, 0x65, 0xAB, 0x3F, 0xE2,-    0x51, 0xA8, 0x51, 0xE2, 0x83, 0xD8, 0x58, 0x38,-    0x08, 0x42, 0x61, 0x30, 0x1E, 0xCD, 0x08, 0x9B-  },-  {-    0x71, 0x40, 0x40, 0x40, 0x39, 0x21, 0xAE, 0x55,-    0x48, 0xA2, 0x03, 0x39, 0xD6, 0x9E, 0x09, 0x3F,-    0x60, 0x9A, 0xA9, 0x9C, 0x22, 0xDB, 0x72, 0x59,-    0x1D, 0x1E, 0xF4, 0xFC, 0xB0, 0xAF, 0x01, 0x61,-    0x73, 0xE5, 0x77, 0xD8, 0xC1, 0xA3, 0x06, 0x3B,-    0x44, 0x3A, 0x0E, 0x48, 0xF3, 0x13, 0xCF, 0x2E,-    0x0F, 0x9B, 0x0C, 0x2E, 0xF9, 0x6A, 0x96, 0xC4,-    0x24, 0x32, 0x2C, 0xCC, 0x0C, 0xD5, 0x30, 0x4C-  },-  {-    0x8B, 0x2E, 0x8C, 0x3F, 0x0E, 0x3C, 0x31, 0x9B,-    0xA6, 0x7E, 0x86, 0x01, 0x4B, 0xDA, 0x68, 0x3E,-    0x53, 0x57, 0xA0, 0x40, 0x37, 0xB4, 0x56, 0x32,-    0x86, 0xAC, 0x89, 0xCD, 0xDB, 0x7E, 0xE0, 0x4C,-    0xF6, 0x67, 0x5F, 0x9A, 0xB6, 0x1F, 0xC8, 0x33,-    0x2D, 0x21, 0x8D, 0x2B, 0xCA, 0x97, 0x15, 0xE7,-    0xDB, 0xE5, 0x83, 0x72, 0xD1, 0xEE, 0xBF, 0x6B,-    0xC2, 0x94, 0x84, 0x71, 0xCF, 0xCE, 0xBB, 0x77-  },-  {-    0x32, 0xEE, 0x95, 0x49, 0xD4, 0xE3, 0x2F, 0x4B,-    0xE9, 0xC5, 0x00, 0xBD, 0x85, 0x43, 0xAF, 0xD0,-    0xB6, 0x97, 0x82, 0xD0, 0xB3, 0xFF, 0x7E, 0xD4,-    0x7A, 0x88, 0x1A, 0x0E, 0x49, 0x1F, 0x37, 0x65,-    0x0A, 0x21, 0xB2, 0x6C, 0x3F, 0x5D, 0x0A, 0x64,-    0xE0, 0x90, 0x58, 0xB3, 0x00, 0x4A, 0x23, 0x68,-    0xB9, 0x50, 0xE4, 0x72, 0x30, 0xC2, 0x29, 0x66,-    0xD3, 0xF7, 0x9D, 0xA7, 0xBA, 0xA0, 0xB8, 0x7F-  },-  {-    0xCA, 0xE7, 0xF2, 0x92, 0x71, 0x37, 0x82, 0xC4,-    0x71, 0xFE, 0x31, 0x78, 0xA9, 0x42, 0x0C, 0xD4,-    0xC1, 0x1F, 0xCD, 0x3F, 0x6D, 0xBE, 0x5D, 0x15,-    0xC8, 0x4A, 0xB7, 0x35, 0x3C, 0x73, 0x9E, 0xF0,-    0x64, 0x16, 0x39, 0xA2, 0xF9, 0x2A, 0xED, 0x31,-    0xC5, 0x6A, 0x20, 0x21, 0xCC, 0x5E, 0x58, 0xCB,-    0xEA, 0xD3, 0x74, 0xE2, 0xDC, 0x8A, 0x0D, 0xBC,-    0xE5, 0x45, 0x0F, 0xE7, 0xA0, 0x18, 0xCF, 0xA4-  },-  {-    0xF1, 0x7F, 0xEF, 0xAE, 0xAE, 0x7D, 0x40, 0xCD,-    0x88, 0x5D, 0xAC, 0x0B, 0xC3, 0x50, 0xC0, 0x27,-    0x36, 0x68, 0xEA, 0x02, 0x22, 0xDF, 0x5C, 0x75,-    0x69, 0x4F, 0x5C, 0xB3, 0xA3, 0x21, 0x51, 0x9F,-    0x6E, 0x0E, 0xC4, 0x3B, 0xA0, 0xC8, 0x59, 0x3D,-    0xC7, 0x34, 0x13, 0x41, 0xE5, 0x19, 0x48, 0x8F,-    0x20, 0xAB, 0xD5, 0xB8, 0x12, 0x4D, 0xFA, 0xCE,-    0xA5, 0xCD, 0xE0, 0x96, 0x5B, 0x69, 0x70, 0xF9-  },-  {-    0xE2, 0xCF, 0x86, 0xDD, 0xC8, 0x42, 0x4E, 0xE5,-    0x47, 0xEB, 0x72, 0x45, 0xB7, 0x32, 0x5E, 0x02,-    0xF2, 0xE3, 0xAC, 0x01, 0x3C, 0x8D, 0x38, 0x6B,-    0x3D, 0x2E, 0x09, 0x20, 0x8A, 0x9B, 0xCC, 0x0B,-    0x44, 0xC4, 0xC4, 0x38, 0xEA, 0xAF, 0x52, 0xD2,-    0x07, 0x7E, 0x91, 0x77, 0xEB, 0x8E, 0xE1, 0xD5,-    0x90, 0x75, 0xB5, 0x25, 0x92, 0x20, 0x20, 0x62,-    0x22, 0x93, 0x54, 0xBF, 0x23, 0xC9, 0x62, 0x39-  },-  {-    0x38, 0xF2, 0x6A, 0x11, 0x02, 0xCB, 0x16, 0x2D,-    0x35, 0x1F, 0x84, 0x3B, 0x3C, 0x49, 0xF6, 0xFF,-    0x85, 0x44, 0x16, 0x33, 0xB6, 0x70, 0x4A, 0x28,-    0x6A, 0xF8, 0x1C, 0xCB, 0xAE, 0x5A, 0x67, 0xD3,-    0x01, 0x5C, 0xC0, 0xEF, 0xAF, 0xB7, 0x05, 0x7D,-    0xC2, 0xB2, 0x8D, 0x67, 0x66, 0xE8, 0x2A, 0x06,-    0x8A, 0x4C, 0x0B, 0x52, 0x4B, 0x66, 0xD0, 0xA6,-    0x32, 0x77, 0x5D, 0x93, 0x06, 0x15, 0x75, 0xF9-  },-  {-    0xA2, 0xC4, 0x30, 0x2D, 0xAC, 0xA7, 0xA7, 0xC6,-    0x32, 0xF6, 0x76, 0x30, 0x4E, 0x62, 0x75, 0xC1,-    0xC1, 0xF0, 0xDB, 0xFE, 0x38, 0xDC, 0x57, 0x1C,-    0xB2, 0x3E, 0x1F, 0x7B, 0xA5, 0xDC, 0x18, 0x18,-    0x0F, 0xC4, 0x8A, 0x01, 0x5F, 0x92, 0x7C, 0x89,-    0x96, 0x7C, 0x1E, 0x10, 0x4E, 0x66, 0xF5, 0xEA,-    0x5B, 0x2D, 0xD3, 0x1D, 0x78, 0x1C, 0x38, 0x49,-    0xBF, 0xC6, 0x49, 0x22, 0x0C, 0x38, 0x5C, 0x82-  },-  {-    0xC1, 0x9C, 0x6B, 0x3F, 0xB5, 0x35, 0x2B, 0xB3,-    0x94, 0xC2, 0x68, 0x46, 0x52, 0x3C, 0x25, 0xE8,-    0x26, 0x5D, 0x50, 0x5F, 0x50, 0x1F, 0x96, 0x03,-    0xA4, 0xF8, 0xBD, 0x55, 0x38, 0x6C, 0xF4, 0xCC,-    0x9F, 0x4D, 0x71, 0xF3, 0x8F, 0xF4, 0x45, 0xF4,-    0xEF, 0xC8, 0x30, 0x98, 0xD4, 0x79, 0x69, 0x33,-    0x4E, 0x79, 0xA2, 0xBC, 0xB4, 0x02, 0x6B, 0xC6,-    0x3B, 0x79, 0x59, 0xDE, 0xDB, 0x62, 0xB7, 0xBD-  },-  {-    0x1F, 0x4A, 0xB9, 0x84, 0x0A, 0x1C, 0xFA, 0x8F,-    0xE6, 0xC5, 0x62, 0x2D, 0x9B, 0x53, 0x8B, 0xEC,-    0xB8, 0x80, 0x7A, 0x87, 0x78, 0xB6, 0x9D, 0x93,-    0x05, 0xF9, 0x08, 0x57, 0x65, 0x73, 0xB2, 0x0C,-    0xA3, 0x70, 0x4E, 0x89, 0x12, 0x97, 0x26, 0xD5,-    0x02, 0xE1, 0x98, 0x58, 0x8D, 0x07, 0x26, 0x68,-    0xBF, 0x03, 0x63, 0x0B, 0x5B, 0x5A, 0x92, 0x32,-    0xFF, 0x39, 0x25, 0x27, 0x24, 0x9D, 0xF9, 0x9B-  },-  {-    0xFE, 0x03, 0x17, 0x7B, 0x58, 0xB4, 0x88, 0x83,-    0xA8, 0x6D, 0x42, 0x68, 0x33, 0x4B, 0x95, 0x91,-    0xD9, 0xFB, 0xD8, 0xBF, 0x7C, 0xC2, 0xAA, 0xCC,-    0x50, 0x25, 0xEF, 0x47, 0x6B, 0x45, 0x33, 0xBA,-    0x7B, 0xD7, 0x81, 0xDF, 0x01, 0x11, 0x47, 0xB3,-    0xCF, 0x51, 0x1D, 0x8B, 0x3D, 0xCD, 0x8C, 0x78,-    0x0D, 0x30, 0xD7, 0xDA, 0x71, 0x8C, 0x22, 0x44,-    0x23, 0x19, 0x81, 0x7B, 0xE3, 0x18, 0x6B, 0xC5-  },-  {-    0xF4, 0xC3, 0xB0, 0x59, 0x10, 0x5B, 0x6A, 0xA5,-    0xFE, 0x78, 0x84, 0x3A, 0x07, 0xD9, 0x4F, 0x71,-    0x20, 0x62, 0xCB, 0x5A, 0x4D, 0xD6, 0x05, 0x9F,-    0x97, 0x90, 0x4D, 0x0C, 0x57, 0x97, 0x3B, 0xA8,-    0xDF, 0x71, 0xD1, 0x5A, 0x51, 0x1A, 0x06, 0x68,-    0x64, 0xFE, 0x45, 0x5E, 0xDC, 0x9E, 0x5F, 0x16,-    0x52, 0x4C, 0xEC, 0x7E, 0xE2, 0x48, 0xEE, 0x3E,-    0xC9, 0x29, 0x06, 0x3B, 0xD1, 0x07, 0x98, 0xDA-  },-  {-    0x57, 0xA1, 0x6F, 0x96, 0x4B, 0x18, 0x1B, 0x12,-    0x03, 0xA5, 0x80, 0x3B, 0x73, 0x81, 0x7D, 0x77,-    0x44, 0x83, 0x82, 0x6C, 0xEA, 0x11, 0x3B, 0x9C,-    0xCF, 0xCF, 0x0E, 0xB8, 0x7C, 0xB2, 0x30, 0x64,-    0x28, 0x49, 0x62, 0xD8, 0x47, 0xBB, 0x1F, 0xAE,-    0x8C, 0xBF, 0x5C, 0xC6, 0x3B, 0x3C, 0xEA, 0xA1,-    0x24, 0x1E, 0xA4, 0x2C, 0x63, 0xF8, 0x98, 0x01,-    0x1F, 0xC4, 0xDB, 0xCA, 0xE6, 0xF5, 0xE8, 0xC5-  },-  {-    0x79, 0x52, 0xFC, 0x83, 0xAC, 0xF1, 0x3A, 0x95,-    0xCA, 0x9C, 0x27, 0xA2, 0x15, 0x6D, 0x9C, 0x1B,-    0x63, 0x00, 0xB0, 0xEF, 0x79, 0x0F, 0x57, 0x2B,-    0xC3, 0x94, 0xC6, 0x77, 0xF7, 0xC1, 0x46, 0x29,-    0xEB, 0xD8, 0xE7, 0xD5, 0xD7, 0xC7, 0xF1, 0xA5,-    0xEB, 0xBD, 0xC3, 0x90, 0xCC, 0x08, 0xCD, 0x58,-    0xC2, 0x00, 0x89, 0x00, 0xCB, 0x55, 0xEB, 0x05,-    0xE4, 0x44, 0xA6, 0x8C, 0x3B, 0x39, 0x3E, 0x60-  },-  {-    0x2C, 0x22, 0x40, 0xD6, 0xB5, 0x41, 0xF4, 0x29,-    0x4F, 0xF9, 0x76, 0x79, 0x1D, 0x35, 0xE6, 0xA2,-    0xD4, 0x92, 0xF5, 0x7A, 0x91, 0x5F, 0xBA, 0xC5,-    0x83, 0x26, 0x60, 0xC1, 0x0E, 0x9C, 0x96, 0x46,-    0x5C, 0x7B, 0xD5, 0xFC, 0xA7, 0x51, 0xBF, 0x68,-    0xE2, 0x67, 0x3A, 0x63, 0x8E, 0x3A, 0xF7, 0x35,-    0xB0, 0x20, 0x91, 0xD7, 0x5D, 0x1A, 0x7F, 0x89,-    0xE3, 0xF7, 0x61, 0xC5, 0xDF, 0x82, 0x1A, 0x6B-  },-  {-    0x59, 0xDC, 0x84, 0x6D, 0x34, 0x05, 0xCC, 0xD8,-    0x06, 0xF8, 0xFA, 0x20, 0xC8, 0x96, 0x9E, 0xF6,-    0x8A, 0x43, 0x85, 0xEF, 0x6C, 0x27, 0x4E, 0xEE,-    0x6D, 0xC0, 0x69, 0x2C, 0x3E, 0xCF, 0xB1, 0xA8,-    0x34, 0xCE, 0x64, 0x43, 0x76, 0xC5, 0x2B, 0x80,-    0x42, 0x1B, 0xAE, 0x94, 0xD6, 0xC7, 0xFD, 0xCC,-    0xA5, 0xA8, 0xF1, 0x85, 0x9C, 0x45, 0xA1, 0x0C,-    0x4E, 0xB2, 0x74, 0x82, 0x6F, 0x1F, 0x08, 0x9F-  },-  {-    0xB7, 0x52, 0x96, 0x27, 0x07, 0xA1, 0x7B, 0x66,-    0x4F, 0xAE, 0xB3, 0x13, 0xE2, 0xB9, 0x52, 0xDC,-    0x03, 0xE7, 0x4A, 0x7E, 0x94, 0x47, 0x09, 0x8A,-    0xA6, 0xD4, 0xEA, 0x5B, 0xD2, 0x87, 0xD0, 0x7A,-    0x12, 0x25, 0xEC, 0xED, 0xA9, 0x81, 0x15, 0x70,-    0x58, 0x0A, 0x51, 0x2B, 0x2B, 0x20, 0xB3, 0xFC,-    0xFC, 0xA7, 0x0B, 0x44, 0xF6, 0x45, 0x4E, 0xF3,-    0xC3, 0x52, 0x4C, 0xCA, 0x6B, 0x69, 0x47, 0x5B-  },-  {-    0xDA, 0x0D, 0x8E, 0x54, 0x61, 0xF8, 0x10, 0x24,-    0xEF, 0xFE, 0xED, 0x5D, 0x70, 0x76, 0xA0, 0x4F,-    0xED, 0xED, 0xAC, 0x57, 0xE7, 0xC9, 0x8A, 0x59,-    0x45, 0xBF, 0xDE, 0x66, 0x75, 0x58, 0x18, 0x85,-    0x1B, 0xE1, 0x13, 0x6B, 0x71, 0xF4, 0x33, 0xA5,-    0x6B, 0xDA, 0x18, 0x41, 0xAE, 0x71, 0x39, 0x2C,-    0x4B, 0x82, 0x90, 0x82, 0x63, 0x59, 0xF5, 0x87,-    0x22, 0x3C, 0x3E, 0xF7, 0x37, 0xFF, 0x73, 0x2A-  },-  {-    0xED, 0xB8, 0x6A, 0x23, 0x7C, 0x6F, 0x13, 0x7D,-    0xFB, 0xB3, 0x47, 0x01, 0x1E, 0xDB, 0x4C, 0x6E,-    0x86, 0x1F, 0x4D, 0x58, 0x14, 0x60, 0x85, 0x46,-    0x34, 0x41, 0x04, 0x2F, 0xA3, 0x63, 0x16, 0xF1,-    0xFA, 0xF8, 0x87, 0x11, 0xBB, 0x0F, 0x18, 0x11,-    0xDF, 0xBB, 0xBF, 0xA7, 0xB5, 0x1F, 0x9C, 0xE2,-    0xD4, 0x96, 0x05, 0x24, 0x3E, 0xD0, 0x16, 0xCB,-    0xAD, 0x68, 0x85, 0xEA, 0xE2, 0x03, 0x67, 0x4F-  },-  {-    0xE6, 0xD8, 0xE0, 0xFB, 0xAA, 0x29, 0xDB, 0xEB,-    0x60, 0xF3, 0xC7, 0xF9, 0x85, 0xBA, 0xD7, 0x54,-    0xD7, 0x21, 0xAA, 0xC6, 0x3D, 0xA6, 0xF4, 0x49,-    0x0C, 0x9D, 0x7E, 0xA2, 0x31, 0xD2, 0x62, 0x2F,-    0xDF, 0xDE, 0xF1, 0x48, 0xD0, 0xCA, 0x44, 0x2B,-    0x8D, 0x59, 0xCF, 0x3E, 0x4F, 0x98, 0x35, 0xCB,-    0xC2, 0x40, 0xAF, 0x40, 0xFB, 0xA6, 0x3A, 0x2E,-    0xA5, 0xA2, 0x35, 0xD4, 0x6E, 0xEA, 0x6E, 0xAC-  },-  {-    0xD4, 0xE4, 0x63, 0xC4, 0x88, 0x29, 0x87, 0xEB,-    0x44, 0xA5, 0xED, 0x0C, 0x82, 0x1D, 0x68, 0xB0,-    0xFE, 0xF9, 0x9D, 0x6F, 0x53, 0xA5, 0x7B, 0xF3,-    0x19, 0xBD, 0xAC, 0x25, 0xAC, 0x38, 0xEB, 0x0B,-    0x23, 0xE1, 0x13, 0x8C, 0x00, 0x12, 0xF5, 0xF3,-    0x83, 0x46, 0xA1, 0xDE, 0x9D, 0x4A, 0x99, 0x2A,-    0x64, 0xB9, 0x42, 0x83, 0x4A, 0x85, 0x6E, 0xFB,-    0xAA, 0x06, 0x20, 0xBD, 0xA2, 0x9F, 0x6A, 0x86-  },-  {-    0x42, 0xD8, 0x10, 0xD0, 0x1C, 0x2D, 0xA2, 0x47,-    0x35, 0xF0, 0x4A, 0x5E, 0x90, 0x13, 0x38, 0xFD,-    0xFC, 0x2D, 0xE1, 0x71, 0x5F, 0xF6, 0x64, 0x3A,-    0x37, 0x2F, 0x88, 0x0E, 0x6C, 0x5C, 0x6C, 0x13,-    0xD2, 0xB3, 0xAD, 0x70, 0x77, 0x46, 0x9D, 0x64,-    0x33, 0x54, 0x05, 0x4D, 0x32, 0xDD, 0x80, 0x49,-    0xEA, 0x63, 0x73, 0x2B, 0x57, 0x45, 0xBD, 0xB2,-    0x3B, 0xE2, 0xB5, 0x8E, 0x48, 0xC1, 0x01, 0x3A-  },-  {-    0xCF, 0xBF, 0x54, 0x30, 0x07, 0x6F, 0x82, 0x5A,-    0x3B, 0xBB, 0x88, 0xC1, 0xBC, 0x0A, 0xEF, 0x61,-    0x25, 0x9E, 0x8F, 0x4D, 0x5F, 0xA3, 0x3C, 0x39,-    0x82, 0x50, 0x62, 0xF1, 0x5D, 0x19, 0xFD, 0x4A,-    0x01, 0x82, 0xCD, 0x97, 0x36, 0xD2, 0xAE, 0xC9,-    0x74, 0x9C, 0xCF, 0x83, 0x18, 0x6C, 0x35, 0x74,-    0xAB, 0x94, 0x42, 0x65, 0x40, 0x66, 0x0A, 0x9D,-    0xB8, 0xC3, 0xAA, 0xBB, 0xCB, 0xDD, 0x9D, 0x0F-  },-  {-    0x6C, 0x24, 0x34, 0xA1, 0xAF, 0xA1, 0x57, 0xAC,-    0xCC, 0x34, 0xA5, 0xC4, 0x87, 0x2D, 0xFF, 0x69,-    0xFE, 0x7F, 0x31, 0x96, 0xCB, 0x1A, 0x75, 0x0C,-    0x54, 0x1D, 0x8B, 0x73, 0x92, 0x28, 0x88, 0xBA,-    0xBE, 0x89, 0xB1, 0xC3, 0x82, 0x02, 0x21, 0x86,-    0x20, 0xD8, 0x8D, 0x77, 0xDA, 0xD9, 0xDF, 0xBA,-    0xB3, 0xFB, 0xF7, 0x40, 0xB2, 0xD1, 0xD8, 0xF3,-    0x7E, 0xAD, 0x25, 0x8E, 0x2E, 0xF1, 0x06, 0x52-  },-  {-    0x48, 0xB7, 0x26, 0x8A, 0xA4, 0x34, 0x2F, 0xAB,-    0x02, 0x1D, 0x14, 0x72, 0xE9, 0x25, 0x7F, 0x76,-    0x58, 0x5C, 0xC5, 0x68, 0x10, 0xC8, 0xF2, 0xA6,-    0xE1, 0xD4, 0xA8, 0x94, 0x6B, 0x77, 0x71, 0x42,-    0xD4, 0x4A, 0xE5, 0x13, 0xA8, 0x80, 0x9F, 0x2D,-    0x6D, 0xC7, 0x26, 0x30, 0x5F, 0x79, 0x44, 0x60,-    0x4D, 0x95, 0x2D, 0x4A, 0x9F, 0x08, 0x5C, 0x5C,-    0x10, 0x50, 0xBA, 0xFD, 0xD2, 0x1D, 0x1E, 0x60-  },-  {-    0xCE, 0xCF, 0xCE, 0x4B, 0x12, 0xC6, 0xCF, 0x53,-    0xD1, 0xB1, 0xB2, 0xD4, 0x18, 0xA4, 0x93, 0xE3,-    0xF4, 0x29, 0x17, 0x03, 0x21, 0xE8, 0x1A, 0xA2,-    0x52, 0x63, 0xAA, 0xA7, 0x15, 0xD5, 0xCA, 0x38,-    0x9F, 0x65, 0xC3, 0xAC, 0xF9, 0x9B, 0x18, 0x0E,-    0x44, 0x6B, 0x50, 0xE6, 0x01, 0xFC, 0xBF, 0x44,-    0x61, 0xD0, 0x42, 0x6A, 0x85, 0x92, 0xA0, 0x77,-    0x42, 0x20, 0x18, 0x57, 0x12, 0x5F, 0x71, 0xEE-  },-  {-    0x38, 0x5A, 0x75, 0x22, 0x42, 0xEB, 0x9E, 0xD5,-    0x6B, 0x07, 0x4B, 0x70, 0x2C, 0x91, 0xE7, 0x5A,-    0xEC, 0x0B, 0xE9, 0x06, 0x4B, 0xD9, 0xCF, 0x88,-    0x03, 0x04, 0xC2, 0x13, 0x27, 0x0C, 0xB2, 0xEA,-    0xE8, 0xE2, 0x1D, 0x9A, 0xE8, 0xC6, 0x08, 0x15,-    0x19, 0xF7, 0x5D, 0xFA, 0xBB, 0x00, 0x3B, 0x24,-    0x32, 0xB0, 0x47, 0x55, 0xB8, 0xC3, 0x2C, 0x97,-    0xAC, 0x29, 0x14, 0xE8, 0xBF, 0x45, 0xB2, 0x34-  },-  {-    0xD8, 0x9A, 0x12, 0x4A, 0x9B, 0x95, 0x8B, 0xA2,-    0x3D, 0x09, 0x20, 0x7A, 0xCF, 0xA6, 0x2A, 0x33,-    0xB8, 0x70, 0x89, 0xB2, 0x86, 0xE8, 0x43, 0x8B,-    0xDC, 0x01, 0xE2, 0x33, 0xAB, 0x2A, 0x86, 0x30,-    0xA1, 0xEE, 0xB6, 0xB2, 0xB9, 0xBA, 0x6B, 0x7D,-    0x21, 0x00, 0x10, 0x77, 0x33, 0xDE, 0xAF, 0x4C,-    0x20, 0x47, 0x8C, 0x26, 0xF2, 0x49, 0xC6, 0x89,-    0xC5, 0x26, 0x84, 0x73, 0xE2, 0xE9, 0xFA, 0x60-  },-  {-    0x43, 0xDE, 0x10, 0x92, 0xFF, 0x9F, 0xF5, 0x28,-    0x20, 0x6C, 0x6F, 0xCF, 0x81, 0x32, 0x2E, 0xAD,-    0x3D, 0x22, 0xEA, 0xA4, 0xC8, 0x54, 0x52, 0x15,-    0x77, 0xDF, 0x33, 0x62, 0x47, 0x49, 0x5C, 0xE1,-    0x72, 0xFC, 0x87, 0x39, 0x95, 0x30, 0x0B, 0x21,-    0xB9, 0x46, 0x10, 0xC9, 0xD2, 0xF6, 0x33, 0xB5,-    0x33, 0xBD, 0xE4, 0x56, 0x8C, 0xA0, 0x9C, 0x38,-    0x0E, 0x84, 0x68, 0xFE, 0x6A, 0xD8, 0xD8, 0x1D-  },-  {-    0x86, 0x8B, 0x60, 0x11, 0x99, 0xEF, 0x00, 0x0B,-    0x70, 0x5C, 0xD6, 0x4D, 0x39, 0x30, 0x26, 0x2A,-    0x5A, 0xB9, 0x10, 0xE3, 0x4E, 0x2D, 0x78, 0xE8,-    0x58, 0x7B, 0x4E, 0x01, 0x0D, 0x37, 0x6D, 0xD4,-    0xA0, 0x0D, 0xE4, 0x48, 0x67, 0xD0, 0xE9, 0x33,-    0xEE, 0x39, 0xA1, 0xFA, 0x91, 0x47, 0xD4, 0x99,-    0xD1, 0x84, 0xF3, 0xA9, 0xCF, 0x35, 0x4F, 0x2D,-    0x3C, 0x51, 0x14, 0x6F, 0xF7, 0x15, 0x2D, 0x68-  },-  {-    0x15, 0x17, 0xF8, 0xF0, 0x44, 0x2F, 0x0D, 0x50,-    0xBB, 0xC0, 0xAA, 0xB6, 0x84, 0x6F, 0xDC, 0xE3,-    0xB7, 0x0F, 0xAE, 0xA4, 0xBB, 0x51, 0x13, 0xAC,-    0xB2, 0x3A, 0xBE, 0x10, 0x1D, 0x99, 0xA4, 0x0A,-    0x1B, 0x76, 0xC1, 0xE8, 0xDC, 0x2E, 0xA1, 0x93,-    0x62, 0x94, 0x82, 0x3A, 0xD8, 0x35, 0x4C, 0x11,-    0xE2, 0xE9, 0x6C, 0x67, 0x12, 0xBE, 0x4C, 0xF7,-    0x7C, 0x58, 0x3F, 0xD0, 0x6B, 0x5E, 0x5C, 0x55-  },-  {-    0xAF, 0x4C, 0x6C, 0x67, 0xC5, 0xCA, 0x38, 0x38,-    0x73, 0x48, 0xCA, 0x3E, 0xC2, 0xBE, 0xD7, 0xFB,-    0xA8, 0xC2, 0xB3, 0xD2, 0x2D, 0xE1, 0x48, 0xD0,-    0x8A, 0x61, 0x8C, 0x29, 0x70, 0x23, 0xFB, 0x7B,-    0x6D, 0x2C, 0x15, 0x3D, 0x5E, 0xFC, 0xD1, 0x68,-    0x89, 0x99, 0x91, 0x0B, 0x20, 0xE1, 0xEA, 0xC7,-    0xC1, 0x00, 0xA2, 0xC5, 0xA6, 0xC1, 0xAC, 0xF5,-    0xE9, 0x8F, 0x14, 0x3B, 0x41, 0xDC, 0x8A, 0x12-  },-  {-    0xA2, 0xAD, 0x94, 0x24, 0x3B, 0x8E, 0xEA, 0x68,-    0xF5, 0xFA, 0xDD, 0x69, 0x08, 0xAD, 0xB0, 0xDA,-    0xCD, 0xAA, 0x6A, 0x6D, 0x24, 0xC2, 0x50, 0xD3,-    0x39, 0x40, 0x3D, 0xBA, 0x82, 0x31, 0xBD, 0x51,-    0xE8, 0x87, 0xCB, 0x5B, 0x1B, 0x7B, 0xDE, 0x27,-    0x74, 0xC6, 0xB0, 0x8A, 0xCC, 0xE0, 0xF7, 0x49,-    0x56, 0x48, 0xDA, 0x3B, 0xEB, 0xC7, 0xB1, 0xC2,-    0x82, 0x15, 0x08, 0xC4, 0xD3, 0x82, 0xF7, 0x30-  },-  {-    0x28, 0xF8, 0x8C, 0xDB, 0xE9, 0x03, 0xAD, 0x63,-    0xA0, 0x23, 0x31, 0xDE, 0x1A, 0x32, 0xAF, 0x6D,-    0xBB, 0xA8, 0x2D, 0x7F, 0xC0, 0x79, 0x87, 0x02,-    0x72, 0x49, 0x33, 0xDA, 0x77, 0x38, 0x07, 0xBC,-    0x80, 0x42, 0x78, 0x13, 0x47, 0x81, 0xF1, 0x26,-    0x23, 0x32, 0x20, 0xE3, 0x07, 0x92, 0x81, 0x31,-    0xB2, 0x47, 0x10, 0xB4, 0x67, 0x4E, 0xD7, 0x05,-    0x11, 0x2F, 0x95, 0xD1, 0xAA, 0x37, 0xA2, 0xDC-  },-  {-    0x5B, 0xB2, 0x92, 0x65, 0xE2, 0x46, 0xB8, 0x84,-    0xFF, 0x40, 0x91, 0x4F, 0xFA, 0x93, 0xD9, 0xA1,-    0x2E, 0xDC, 0x19, 0xEE, 0xE9, 0xCC, 0x8A, 0x83,-    0x63, 0x1D, 0x68, 0xBD, 0x46, 0xAA, 0xD3, 0x35,-    0x4B, 0xA6, 0x67, 0x4B, 0x91, 0x3F, 0x4F, 0x82,-    0x3E, 0x79, 0x1F, 0x0C, 0xB1, 0x9E, 0xA6, 0xA6,-    0x7C, 0x6E, 0x32, 0xE9, 0xBE, 0x0D, 0x0F, 0xF5,-    0x76, 0x0F, 0x16, 0xDD, 0x75, 0xA8, 0x7B, 0x5D-  },-  {-    0xBF, 0x3C, 0x06, 0xDC, 0x6D, 0x94, 0xE3, 0x85,-    0x9A, 0x4D, 0xAA, 0x50, 0xEC, 0xA1, 0xAF, 0x53,-    0x57, 0xE3, 0x45, 0x79, 0xE5, 0x99, 0xF8, 0x20,-    0x49, 0xE1, 0xCC, 0xA7, 0xA7, 0xD4, 0xF3, 0x3F,-    0xEA, 0x44, 0x3B, 0x44, 0x69, 0x1B, 0xD4, 0x36,-    0x88, 0xF5, 0x55, 0x05, 0x31, 0xCF, 0x22, 0xB7,-    0x12, 0x77, 0x89, 0x0B, 0xFF, 0xAE, 0x1E, 0xCE,-    0x78, 0x3F, 0x56, 0x63, 0xA1, 0xC4, 0xD7, 0x1A-  },-  {-    0xC9, 0x0D, 0xF5, 0x32, 0xF2, 0xF1, 0x49, 0x3A,-    0x11, 0x55, 0xBE, 0x8C, 0x2A, 0x44, 0x00, 0x92,-    0x20, 0x49, 0x97, 0x4E, 0x7D, 0x4F, 0x4B, 0x54,-    0xF8, 0x20, 0xC2, 0x26, 0x9D, 0x3B, 0x16, 0x1B,-    0x6E, 0x88, 0xEB, 0x77, 0x6B, 0x85, 0x9B, 0x89,-    0xB8, 0x56, 0x7F, 0xBC, 0x55, 0x0C, 0x4F, 0x54,-    0xAA, 0xD2, 0x7A, 0x16, 0x10, 0x65, 0x6D, 0x62,-    0x5C, 0x32, 0x7F, 0x66, 0x5D, 0xCA, 0x70, 0x7C-  },-  {-    0x3D, 0x39, 0xEE, 0xCC, 0x9E, 0x90, 0x42, 0x36,-    0xDC, 0x85, 0x7B, 0xA4, 0x9D, 0x55, 0xD3, 0xBA,-    0xD7, 0x65, 0x72, 0xA9, 0x1A, 0x75, 0x95, 0x03,-    0x37, 0x6B, 0x77, 0x08, 0xD6, 0x2D, 0x5A, 0x78,-    0x5C, 0x23, 0x06, 0x80, 0x59, 0xCF, 0x68, 0x89,-    0x7F, 0x23, 0xEE, 0xC5, 0x07, 0x21, 0x9B, 0x0A,-    0x02, 0xED, 0xA2, 0xD8, 0xBC, 0x94, 0xFA, 0x69,-    0x89, 0xA5, 0x14, 0x82, 0x22, 0x03, 0xC8, 0xD1-  },-  {-    0xE0, 0x8C, 0x54, 0xD9, 0x98, 0xF9, 0x2B, 0x7A,-    0x54, 0xA2, 0x4C, 0xA6, 0xAE, 0xB1, 0x53, 0xA6,-    0x4F, 0x9C, 0x9F, 0x1F, 0xC3, 0x36, 0x58, 0xB3,-    0xED, 0xAC, 0x2C, 0x4B, 0xB5, 0x26, 0x31, 0x58,-    0xDA, 0xDF, 0x00, 0xD3, 0x51, 0x9A, 0x11, 0x9A,-    0x56, 0x14, 0xC7, 0xF3, 0x79, 0x40, 0xE5, 0x5D,-    0x13, 0xCC, 0xE4, 0x66, 0xCB, 0x71, 0xA4, 0x07,-    0xC3, 0x9F, 0xC5, 0x1E, 0x1E, 0xFE, 0x18, 0xDA-  },-  {-    0x74, 0x76, 0x76, 0x07, 0x04, 0x1D, 0xD4, 0xB7,-    0xC5, 0x6B, 0x18, 0x9E, 0xE8, 0xF2, 0x77, 0x31,-    0xA5, 0x16, 0x72, 0x23, 0xEB, 0x7A, 0xF9, 0xB9,-    0x39, 0xE1, 0x18, 0xF8, 0x7D, 0x80, 0xB4, 0x9E,-    0xA8, 0xD0, 0xD0, 0x1F, 0x74, 0xF3, 0x98, 0xB1,-    0x72, 0xA8, 0xAD, 0x0D, 0xBF, 0x99, 0x41, 0x4F,-    0x08, 0xD2, 0xB7, 0xD8, 0xD7, 0x52, 0x16, 0xA1,-    0x82, 0x25, 0x27, 0x3D, 0x8D, 0x7F, 0xD0, 0x5D-  },-  {-    0xFE, 0xE8, 0x9A, 0x92, 0xCC, 0xF9, 0xF1, 0xEB,-    0x08, 0x4A, 0xAB, 0xA9, 0x54, 0x97, 0xEF, 0x0F,-    0x30, 0x13, 0x4C, 0x19, 0x1C, 0xF9, 0x0A, 0x49,-    0xD2, 0x2C, 0x7D, 0x2F, 0x66, 0x14, 0x99, 0x3C,-    0xBE, 0x1A, 0x4B, 0x65, 0x13, 0xED, 0xC1, 0x53,-    0x86, 0x8A, 0x3D, 0x56, 0x2B, 0x5B, 0x02, 0x26,-    0xBA, 0x8E, 0x1B, 0x0D, 0xCB, 0x69, 0xED, 0x45,-    0xAF, 0x47, 0xCE, 0x4F, 0x86, 0xBA, 0x47, 0x4A-  },-  {-    0xCD, 0xAE, 0x94, 0xB6, 0xD1, 0xD8, 0x35, 0xF6,-    0xC7, 0x4C, 0x76, 0xEC, 0x3A, 0x2D, 0xB6, 0x5B,-    0xBD, 0xFA, 0xE1, 0x9D, 0x7B, 0x05, 0x0D, 0xC9,-    0x5D, 0x65, 0x87, 0x33, 0xB8, 0xB2, 0x2C, 0x6F,-    0x9E, 0x0B, 0x63, 0xCC, 0x90, 0x5A, 0x29, 0xEA,-    0x88, 0x78, 0xCA, 0x39, 0x45, 0x56, 0xB3, 0x67,-    0x3C, 0x62, 0x79, 0x15, 0x46, 0xA9, 0xA1, 0xF0,-    0xD1, 0x56, 0x5F, 0xAD, 0xC5, 0x35, 0x36, 0xC1-  },-  {-    0xC7, 0x22, 0x8B, 0x6F, 0x00, 0x00, 0x17, 0xD2,-    0xBE, 0x4B, 0xF2, 0xAE, 0x48, 0xAD, 0xDB, 0x78,-    0x5E, 0x27, 0x35, 0xBF, 0x3C, 0x61, 0x4D, 0x3C,-    0x34, 0x23, 0x1F, 0x1D, 0x0C, 0x88, 0x7D, 0x3A,-    0x8E, 0x88, 0x88, 0x0B, 0x67, 0xAD, 0x3B, 0x2F,-    0x65, 0x23, 0xDD, 0x67, 0x19, 0x34, 0x2C, 0xD4,-    0xF0, 0x59, 0x35, 0xD2, 0xE5, 0x26, 0x7F, 0x36,-    0x80, 0xE7, 0x73, 0xBD, 0x5E, 0xAD, 0xFE, 0x1D-  },-  {-    0x12, 0x27, 0x44, 0xFE, 0x3F, 0xFF, 0x9A, 0x05,-    0x5F, 0x0F, 0x3B, 0xDE, 0x01, 0xEB, 0x2F, 0x44,-    0x6B, 0x0C, 0xDA, 0xF3, 0xAE, 0xD7, 0x2C, 0xAA,-    0x29, 0x40, 0x74, 0x19, 0x20, 0x12, 0x0A, 0x96,-    0x4F, 0xCF, 0xF8, 0x70, 0x99, 0xB0, 0x8E, 0xF3,-    0x34, 0x96, 0xE3, 0x99, 0x03, 0x2A, 0x82, 0xDA,-    0xAD, 0x4F, 0xED, 0x30, 0x31, 0x17, 0x2F, 0x77,-    0x47, 0x92, 0x58, 0xFA, 0x39, 0xDB, 0x92, 0xFD-  },-  {-    0x1F, 0xB4, 0xE3, 0x67, 0xEA, 0xB6, 0x42, 0xB7,-    0x2E, 0x43, 0xAD, 0x4A, 0xBD, 0xFC, 0xAD, 0x74,-    0x62, 0x0C, 0x3F, 0x6C, 0x63, 0xA8, 0x91, 0x31,-    0x28, 0xD2, 0x22, 0x6E, 0xB1, 0x92, 0xF9, 0x99,-    0x2E, 0xB9, 0xC8, 0xF7, 0x6A, 0xE2, 0x06, 0xD3,-    0xF5, 0xDE, 0xC7, 0x26, 0xA5, 0xA6, 0x86, 0xB4,-    0xAE, 0x37, 0xB5, 0x57, 0xAB, 0x57, 0xF9, 0x56,-    0x48, 0x53, 0x34, 0xF7, 0x3D, 0xCE, 0x02, 0xE0-  },-  {-    0x04, 0x25, 0xCA, 0xAA, 0x92, 0x3B, 0x47, 0xB3,-    0x50, 0x45, 0xEB, 0x50, 0x82, 0x9C, 0x04, 0x8B,-    0xC8, 0x90, 0x44, 0x4A, 0xFE, 0xEF, 0xC0, 0xAF,-    0xC9, 0xD1, 0x87, 0x7B, 0x82, 0x1E, 0x04, 0x3C,-    0x9C, 0x7B, 0x9D, 0x6D, 0xC3, 0x3F, 0xBB, 0xDF,-    0xA5, 0x37, 0xC1, 0xEC, 0xE3, 0x11, 0x96, 0x5B,-    0x2F, 0xEE, 0x89, 0x82, 0xBC, 0x46, 0xA2, 0xA7,-    0x50, 0xBF, 0xC7, 0x1D, 0x79, 0xDB, 0xEA, 0x04-  },-  {-    0x6B, 0x9D, 0x86, 0xF1, 0x5C, 0x09, 0x0A, 0x00,-    0xFC, 0x3D, 0x90, 0x7F, 0x90, 0x6C, 0x5E, 0xB7,-    0x92, 0x65, 0xE5, 0x8B, 0x88, 0xEB, 0x64, 0x29,-    0x4B, 0x4C, 0xC4, 0xE2, 0xB8, 0x9B, 0x1A, 0x7C,-    0x5E, 0xE3, 0x12, 0x7E, 0xD2, 0x1B, 0x45, 0x68,-    0x62, 0xDE, 0x6B, 0x2A, 0xBD, 0xA5, 0x9E, 0xAA,-    0xCF, 0x2D, 0xCB, 0xE9, 0x22, 0xCA, 0x75, 0x5E,-    0x40, 0x73, 0x5B, 0xE8, 0x1D, 0x9C, 0x88, 0xA5-  },-  {-    0x14, 0x6A, 0x18, 0x7A, 0x99, 0xE8, 0xA2, 0xD2,-    0x33, 0xE0, 0xEB, 0x37, 0x3D, 0x43, 0x7B, 0x02,-    0xBF, 0xA8, 0xD6, 0x51, 0x5B, 0x3C, 0xA1, 0xDE,-    0x48, 0xA6, 0xB6, 0xAC, 0xF7, 0x43, 0x7E, 0xB7,-    0xE7, 0xAC, 0x3F, 0x2D, 0x19, 0xEF, 0x3B, 0xB9,-    0xB8, 0x33, 0xCC, 0x57, 0x61, 0xDB, 0xA2, 0x2D,-    0x1A, 0xD0, 0x60, 0xBE, 0x76, 0xCD, 0xCB, 0x81,-    0x2D, 0x64, 0xD5, 0x78, 0xE9, 0x89, 0xA5, 0xA4-  },-  {-    0x25, 0x75, 0x4C, 0xA6, 0x66, 0x9C, 0x48, 0x70,-    0x84, 0x03, 0x88, 0xEA, 0x64, 0xE9, 0x5B, 0xD2,-    0xE0, 0x81, 0x0D, 0x36, 0x3C, 0x4C, 0xF6, 0xA1,-    0x6E, 0xA1, 0xBD, 0x06, 0x68, 0x6A, 0x93, 0xC8,-    0xA1, 0x25, 0xF2, 0x30, 0x22, 0x9D, 0x94, 0x84,-    0x85, 0xE1, 0xA8, 0x2D, 0xE4, 0x82, 0x00, 0x35,-    0x8F, 0x3E, 0x02, 0xB5, 0x05, 0xDA, 0xBC, 0x4F,-    0x13, 0x9C, 0x03, 0x79, 0xDC, 0x2B, 0x30, 0x80-  },-  {-    0x0E, 0x26, 0xCB, 0xC7, 0x8D, 0xC7, 0x54, 0xEC,-    0xA0, 0x6C, 0xF8, 0xCB, 0x31, 0xFC, 0xBA, 0xBB,-    0x18, 0x88, 0x92, 0xC1, 0x04, 0x50, 0x89, 0x05,-    0x49, 0xB2, 0xD4, 0x03, 0xA2, 0xA3, 0xC4, 0x57,-    0x70, 0x01, 0xF7, 0x4A, 0x76, 0xBD, 0x38, 0x99,-    0x0D, 0x75, 0x5B, 0xAE, 0x05, 0x26, 0x64, 0x83,-    0x29, 0xF6, 0x35, 0x45, 0xED, 0x16, 0x99, 0x5C,-    0xB1, 0xE6, 0x34, 0x3F, 0x18, 0x9F, 0x8E, 0x6F-  },-  {-    0x58, 0xE7, 0x98, 0x0B, 0x8B, 0x1A, 0x0B, 0x88,-    0xDA, 0x9D, 0xA8, 0x64, 0x0F, 0x2B, 0x96, 0xE3,-    0xE0, 0x48, 0x36, 0x61, 0x30, 0xC2, 0x66, 0x21,-    0x7D, 0xDC, 0x79, 0x53, 0x50, 0x8F, 0x4A, 0x40,-    0xD1, 0x67, 0x4D, 0xAB, 0xD3, 0x92, 0x89, 0xE3,-    0xF1, 0x0C, 0x61, 0x19, 0x68, 0xCC, 0xD1, 0xE9,-    0xCC, 0xC1, 0x8C, 0xAD, 0xC7, 0x77, 0x4A, 0x99,-    0x7D, 0xD1, 0xFA, 0x94, 0xE8, 0x35, 0x47, 0x07-  },-  {-    0x69, 0x6F, 0xB8, 0x47, 0x63, 0xE0, 0x23, 0x58,-    0x4B, 0x35, 0x90, 0x7A, 0x8B, 0x8A, 0xAA, 0x9E,-    0x0E, 0x78, 0x6F, 0x2C, 0xA5, 0x91, 0x45, 0x41,-    0x91, 0x58, 0x48, 0xFB, 0x6D, 0xDA, 0xB8, 0xD3,-    0xD2, 0xEA, 0xB6, 0x00, 0xC1, 0x38, 0xCE, 0x67,-    0x17, 0xB0, 0xC7, 0x02, 0x59, 0xD3, 0x19, 0x3E,-    0xA1, 0x56, 0x95, 0xC8, 0x50, 0x53, 0x7F, 0x2C,-    0x70, 0x6C, 0xA4, 0xAF, 0x15, 0x8E, 0x95, 0x7E-  },-  {-    0x23, 0xDE, 0x6E, 0x73, 0x07, 0x9C, 0x8C, 0x20,-    0x47, 0xA7, 0x84, 0x6A, 0x83, 0xCC, 0xAC, 0xAB,-    0xD3, 0x71, 0x16, 0x3B, 0x7B, 0x6D, 0x54, 0xEB,-    0x03, 0x2B, 0xC4, 0x9B, 0x66, 0x97, 0x42, 0xBE,-    0x71, 0x7B, 0x99, 0xDA, 0x12, 0xC6, 0x46, 0xAD,-    0x52, 0x57, 0x06, 0xF2, 0x22, 0xE1, 0xDF, 0x4A,-    0x91, 0xDD, 0x0C, 0xC6, 0x4D, 0xF1, 0x82, 0xDA,-    0x00, 0x73, 0x1D, 0x43, 0x9C, 0x46, 0xF8, 0xD2-  },-  {-    0xBB, 0x74, 0xF3, 0x6A, 0x9D, 0xB6, 0x96, 0xC9,-    0x33, 0x35, 0xE6, 0xC4, 0x6A, 0xAB, 0x58, 0xDB,-    0x10, 0xCB, 0x07, 0xEA, 0x4F, 0x1B, 0x71, 0x93,-    0x63, 0x05, 0x22, 0x83, 0x90, 0x95, 0x94, 0x78,-    0xF8, 0x73, 0x4E, 0x21, 0x54, 0x90, 0xE9, 0xAE,-    0x2A, 0x3E, 0xC8, 0xF7, 0xF7, 0x67, 0x33, 0xAE,-    0x3F, 0x8B, 0x9A, 0x3F, 0xD7, 0xC4, 0x06, 0xC6,-    0xCA, 0xC7, 0x09, 0x97, 0x5C, 0x40, 0xF8, 0x56-  },-  {-    0xEC, 0x63, 0x04, 0xD3, 0x8E, 0x23, 0x2C, 0x09,-    0x6A, 0xB5, 0x86, 0xCA, 0xDF, 0x27, 0x02, 0x6D,-    0xC5, 0xE5, 0x32, 0x17, 0xD0, 0xE8, 0xB0, 0xC6,-    0x0A, 0xDA, 0xAE, 0x22, 0xF4, 0xE8, 0xC2, 0x2D,-    0x30, 0xBC, 0x51, 0x77, 0xF1, 0xC8, 0x3A, 0xCD,-    0x92, 0x5E, 0x02, 0xA2, 0xDA, 0x89, 0x59, 0x5F,-    0xC1, 0x06, 0x09, 0x0E, 0x2E, 0x53, 0xED, 0xB3,-    0x1C, 0xDB, 0x76, 0xFF, 0x37, 0xEB, 0x61, 0x80-  },-  {-    0x92, 0xF9, 0xFC, 0x6B, 0xC5, 0x9A, 0x54, 0x3F,-    0x0D, 0xC9, 0xA1, 0x79, 0x8F, 0xB1, 0xE5, 0xD5,-    0x23, 0x47, 0x4E, 0x48, 0xFF, 0x3E, 0x29, 0x49,-    0x7F, 0x72, 0x80, 0xD1, 0xC4, 0x08, 0xC8, 0x66,-    0x33, 0x48, 0xFE, 0x2A, 0xF7, 0x8F, 0x6C, 0x4E,-    0x5E, 0xF5, 0xC0, 0xA0, 0x17, 0xF3, 0xD3, 0xF2,-    0x15, 0xEC, 0xDD, 0x7A, 0x40, 0x0A, 0xC5, 0x77,-    0x3B, 0x9E, 0x25, 0x60, 0x68, 0x84, 0x5A, 0x92-  },-  {-    0x4A, 0x25, 0xB5, 0x62, 0xF2, 0xFA, 0x01, 0xDD,-    0xEE, 0x7E, 0xA2, 0xE9, 0xFB, 0xF5, 0x2F, 0x8C,-    0x75, 0x6D, 0x28, 0xDB, 0x4A, 0x8B, 0xF7, 0x0E,-    0x74, 0x0E, 0x90, 0x27, 0x42, 0x6E, 0x51, 0x63,-    0x9D, 0xF8, 0x78, 0x8D, 0x13, 0x38, 0x56, 0x85,-    0x8D, 0x01, 0xFD, 0xDB, 0xDD, 0x5B, 0x98, 0x79,-    0x44, 0xC3, 0x00, 0xDC, 0x7F, 0x82, 0x41, 0xFB,-    0xCE, 0xFA, 0x4F, 0x12, 0x94, 0x8A, 0xFE, 0xAE-  },-  {-    0x34, 0x21, 0x2D, 0xD9, 0xF0, 0x65, 0x1F, 0x81,-    0x80, 0x9A, 0x14, 0xED, 0xBC, 0xF7, 0xF3, 0xAC,-    0xDE, 0xDE, 0x78, 0x72, 0xC7, 0xA4, 0x84, 0x7B,-    0xEA, 0x9F, 0x7A, 0xB7, 0x59, 0x73, 0x82, 0x47,-    0x7A, 0x4C, 0xB8, 0x47, 0x9A, 0x27, 0x63, 0x21,-    0x23, 0x5E, 0x90, 0x21, 0x57, 0x94, 0x46, 0xA4,-    0x38, 0x8A, 0x99, 0xE5, 0x60, 0xA3, 0x90, 0x7A,-    0xEE, 0xF2, 0xB4, 0x38, 0xFE, 0x6B, 0x90, 0xC4-  },-  {-    0xD6, 0x2C, 0xF7, 0xAB, 0xBC, 0x7D, 0x7B, 0xCD,-    0x5B, 0xEB, 0x1E, 0xE4, 0x8C, 0x43, 0xB8, 0x04,-    0xFD, 0x0D, 0xB4, 0x55, 0xE7, 0xF4, 0xFE, 0xBB,-    0xCF, 0xF1, 0x4B, 0x05, 0xBE, 0x90, 0x47, 0xE2,-    0x7E, 0x51, 0x8D, 0x6D, 0x3A, 0x6A, 0xDA, 0x4D,-    0x58, 0x63, 0xB7, 0xEC, 0x7F, 0x84, 0x92, 0x45,-    0x89, 0x40, 0xAC, 0x6B, 0xDD, 0xB5, 0x06, 0x59,-    0x2C, 0xCB, 0xC8, 0x96, 0xAF, 0xBB, 0x77, 0xA3-  },-  {-    0x33, 0xA3, 0xA2, 0x63, 0x6F, 0x91, 0x98, 0xD3,-    0x7A, 0x5F, 0xF1, 0xBF, 0xF9, 0xEB, 0x10, 0x02,-    0x4B, 0x28, 0x46, 0x80, 0x39, 0xF4, 0x91, 0x40,-    0x2D, 0x39, 0xB7, 0x08, 0xC5, 0x5D, 0x27, 0xE5,-    0xE8, 0xDF, 0x5E, 0x3E, 0x19, 0x49, 0x95, 0x82,-    0x35, 0xCA, 0xD9, 0x80, 0x74, 0x20, 0x96, 0xF2,-    0x77, 0x9A, 0x1D, 0x71, 0xDA, 0xD5, 0x8F, 0xAF,-    0xA3, 0xCD, 0x02, 0xCB, 0x5E, 0xAA, 0x98, 0xC5-  },-  {-    0xB7, 0xA3, 0x89, 0x90, 0xE6, 0xF4, 0x56, 0x4A,-    0xA3, 0xD9, 0x3A, 0x79, 0x37, 0x10, 0x0C, 0x29,-    0xF9, 0x40, 0xAF, 0xF7, 0xCB, 0x20, 0x86, 0x5A,-    0x1C, 0x21, 0x89, 0x81, 0xA5, 0x42, 0x04, 0x86,-    0x08, 0x17, 0x81, 0xF8, 0xD5, 0x0C, 0x86, 0x62,-    0x5C, 0xC5, 0xD7, 0x6D, 0x0F, 0x5C, 0xCC, 0x4E,-    0xB6, 0x5D, 0x43, 0x66, 0x09, 0x62, 0x4F, 0x21,-    0xD0, 0x53, 0x39, 0xAB, 0x0C, 0xF7, 0x9F, 0x4C-  },-  {-    0x9D, 0x66, 0x5A, 0x3F, 0xDD, 0x10, 0x45, 0x9E,-    0x77, 0xF0, 0x3A, 0xC8, 0xC0, 0xE2, 0x39, 0x01,-    0x94, 0x89, 0x69, 0x3C, 0xC9, 0x31, 0x5A, 0xA3,-    0xFF, 0x11, 0x29, 0x11, 0xD2, 0xAC, 0xF0, 0xB7,-    0xD2, 0x76, 0xAC, 0x76, 0x9B, 0xED, 0xFD, 0x85,-    0x2D, 0x28, 0x89, 0xDD, 0x12, 0xDB, 0x91, 0x39,-    0x8B, 0x01, 0xC4, 0xF4, 0xA5, 0xDA, 0x27, 0x80,-    0xB1, 0xDE, 0xFE, 0x0D, 0x95, 0xB6, 0x32, 0x70-  },-  {-    0x70, 0xFB, 0x9E, 0xFD, 0x5B, 0xCA, 0x7F, 0x19,-    0xB6, 0xE3, 0x1D, 0x64, 0x0D, 0xCF, 0x88, 0xD7,-    0x7E, 0x76, 0x8A, 0xE2, 0x27, 0xEC, 0xB3, 0xFD,-    0x6B, 0x47, 0x13, 0x78, 0x94, 0xF5, 0x49, 0xBF,-    0x1C, 0xF0, 0x6E, 0x5D, 0xB4, 0x54, 0x60, 0x44,-    0xDD, 0x9F, 0x46, 0x5C, 0x9C, 0x85, 0xF7, 0x28,-    0x4F, 0xE5, 0x4D, 0x2B, 0x71, 0x52, 0x69, 0x9B,-    0xE4, 0xBD, 0x55, 0x5A, 0x90, 0x9A, 0x88, 0xA9-  },-  {-    0x7A, 0xFD, 0xB0, 0x19, 0x30, 0x87, 0xE0, 0xC9,-    0xF8, 0xB4, 0xDD, 0x8B, 0x48, 0xD9, 0xF2, 0x0A,-    0xCE, 0x27, 0x13, 0xAF, 0xC7, 0x1B, 0xCC, 0x93,-    0x82, 0xB5, 0x42, 0x90, 0xAE, 0xBF, 0xFE, 0xB2,-    0xD1, 0x38, 0xF4, 0xDC, 0xF0, 0x28, 0xF9, 0xC4,-    0x3C, 0xC1, 0x80, 0x89, 0x84, 0x77, 0xA3, 0x9E,-    0x3F, 0x53, 0xA8, 0xD1, 0xBF, 0x67, 0xCE, 0xB6,-    0x08, 0x26, 0x1F, 0xAE, 0x6D, 0xDB, 0x1A, 0xBC-  },-  {-    0x05, 0x99, 0x0D, 0x7D, 0x7D, 0xF1, 0xD4, 0x84,-    0xF5, 0xB1, 0xCA, 0xE9, 0xEE, 0x5D, 0xFC, 0xB4,-    0x3F, 0x2C, 0xBE, 0x18, 0x6C, 0x1A, 0x5B, 0x18,-    0x1A, 0x37, 0x31, 0xD4, 0xB1, 0x54, 0x8E, 0xBF,-    0xF5, 0xBF, 0x61, 0xCB, 0x0F, 0x6D, 0x9F, 0xC2,-    0x30, 0xF2, 0x5E, 0x86, 0x78, 0xB7, 0x99, 0xE0,-    0xE8, 0x30, 0x26, 0xA0, 0x86, 0x6B, 0xF0, 0xAC,-    0xAB, 0x08, 0x9E, 0x10, 0x2E, 0x67, 0xAB, 0x6B-  },-  {-    0x1A, 0xF7, 0xA5, 0xCE, 0x58, 0x7C, 0x8D, 0x87,-    0xC7, 0xB7, 0x9F, 0xA3, 0xE7, 0x23, 0xD7, 0x4C,-    0xE0, 0x26, 0xB5, 0x28, 0x67, 0x52, 0xFD, 0x0C,-    0x37, 0x42, 0xC6, 0xF0, 0x41, 0x8E, 0xD7, 0x85,-    0x99, 0x0D, 0x21, 0xF2, 0x8D, 0xA8, 0x39, 0xCE,-    0x82, 0x12, 0xED, 0x55, 0x0C, 0x37, 0x3E, 0x6D,-    0x3A, 0x75, 0xD5, 0x5C, 0x31, 0x77, 0x04, 0x41,-    0xEE, 0xAF, 0xF2, 0xD5, 0x0F, 0x6E, 0x61, 0xB6-  },-  {-    0xDD, 0xEE, 0x0C, 0x76, 0xC9, 0xBD, 0xD3, 0x2D,-    0x70, 0x49, 0x35, 0x4C, 0xFC, 0x85, 0xDC, 0x68,-    0x67, 0xE2, 0x49, 0x2E, 0x47, 0xFE, 0xB0, 0x8E,-    0x39, 0x83, 0xD0, 0xB6, 0x78, 0x84, 0x5D, 0x7E,-    0xC6, 0xC9, 0x79, 0x3C, 0x33, 0x26, 0xBF, 0xDC,-    0x1E, 0x11, 0x32, 0x76, 0xD1, 0x77, 0xFE, 0x38,-    0x82, 0x52, 0x04, 0xDD, 0x00, 0x07, 0x39, 0x89,-    0xC0, 0x81, 0xCC, 0x3B, 0x71, 0xC6, 0x8D, 0x5F-  },-  {-    0xDE, 0x07, 0x06, 0x48, 0xB3, 0x7C, 0x47, 0xDC,-    0x9F, 0x2F, 0x6D, 0x2A, 0xB2, 0x07, 0x73, 0xCD,-    0x82, 0xFA, 0x57, 0x25, 0xA6, 0x90, 0x0E, 0xB7,-    0x1C, 0xDD, 0xB0, 0xC9, 0xF3, 0x9B, 0x31, 0xDF,-    0x6D, 0x07, 0x73, 0x24, 0x6E, 0x8E, 0xF9, 0x03,-    0x49, 0x67, 0x75, 0x2D, 0xB7, 0xED, 0x22, 0x73,-    0x3F, 0x43, 0x79, 0x94, 0x8D, 0xC3, 0x96, 0xDC,-    0x35, 0xAD, 0xBB, 0xE9, 0xF6, 0x53, 0x77, 0x40-  },-  {-    0xA6, 0x45, 0x6F, 0xBC, 0xFF, 0x9E, 0x3D, 0x5B,-    0x11, 0x6A, 0x0E, 0x33, 0x1A, 0x1F, 0x97, 0x4F,-    0x07, 0x0E, 0x95, 0x56, 0x09, 0x78, 0x1F, 0xA5,-    0x99, 0xD6, 0x08, 0xA3, 0x1D, 0xA7, 0x6A, 0xD8,-    0xAB, 0xFE, 0x34, 0x66, 0x17, 0xC2, 0x57, 0x86,-    0x51, 0x3B, 0x2C, 0x44, 0xBF, 0xE2, 0xCB, 0x45,-    0x7C, 0x43, 0xFA, 0x6F, 0x45, 0x36, 0x1C, 0xA9,-    0xC6, 0x34, 0x13, 0x11, 0xB7, 0xDD, 0xFB, 0xD5-  },-  {-    0x5C, 0x95, 0xD3, 0x82, 0x02, 0x18, 0x91, 0x04,-    0x8B, 0x5E, 0xC8, 0x1C, 0xC8, 0x8E, 0x66, 0xB1,-    0xB4, 0xD8, 0x0A, 0x00, 0xB5, 0xEE, 0x66, 0xB3,-    0xC0, 0x30, 0x77, 0x49, 0xE6, 0xF2, 0x4D, 0x17,-    0x0D, 0x23, 0xFA, 0xCC, 0x8E, 0xB2, 0x53, 0xB3,-    0x56, 0x2B, 0xF8, 0xA4, 0x5C, 0x37, 0x99, 0x0C,-    0xD2, 0xD3, 0xE4, 0x43, 0xB1, 0x8C, 0x68, 0xBB,-    0xCC, 0x6C, 0x83, 0x1D, 0xFD, 0xE2, 0xF8, 0xE5-  },-  {-    0xE3, 0x74, 0x00, 0xDB, 0xD9, 0x21, 0x0F, 0x31,-    0x37, 0xAC, 0xAF, 0x49, 0x24, 0x2F, 0xA1, 0x23,-    0xA0, 0x52, 0x95, 0x8A, 0x4C, 0x0D, 0x98, 0x90,-    0x62, 0x47, 0xD5, 0x35, 0xA3, 0x51, 0xFD, 0x52,-    0x29, 0x6E, 0x70, 0x10, 0x32, 0x5B, 0xDA, 0x84,-    0x1F, 0xA2, 0xAA, 0xB4, 0x47, 0x63, 0x76, 0x3C,-    0x55, 0x04, 0xD7, 0xB3, 0x0C, 0x6D, 0x79, 0xFC,-    0x1D, 0xC8, 0xCF, 0x10, 0x24, 0x46, 0x6D, 0xB0-  },-  {-    0x52, 0x73, 0xA3, 0xA1, 0x3C, 0xF0, 0xEC, 0x72,-    0x00, 0x44, 0x2C, 0xBD, 0x7B, 0x37, 0x44, 0x66,-    0xA7, 0x19, 0x0D, 0xDC, 0xA1, 0x31, 0xD9, 0x63,-    0xF8, 0xF8, 0x39, 0x65, 0xAE, 0xD3, 0xDD, 0x86,-    0xE9, 0xD4, 0x5A, 0xB4, 0x89, 0xB9, 0xC5, 0x62,-    0x47, 0xC9, 0xF2, 0xAA, 0x69, 0xFD, 0x7E, 0x31,-    0x87, 0xB8, 0xFA, 0x0D, 0xAC, 0x77, 0xC4, 0x7C,-    0xB2, 0x95, 0xBA, 0x62, 0x96, 0x78, 0x43, 0x94-  },-  {-    0x2A, 0xDB, 0x93, 0x49, 0xA9, 0xEC, 0x37, 0xFF,-    0x49, 0x62, 0xF4, 0x21, 0x7E, 0x80, 0xEB, 0xDC,-    0xD3, 0x60, 0x96, 0x7B, 0x51, 0x3D, 0x12, 0x02,-    0xD9, 0x98, 0x28, 0x31, 0x15, 0x5D, 0x2F, 0x43,-    0xEB, 0x9A, 0xDD, 0x63, 0xB5, 0xEC, 0x10, 0xD3,-    0xD0, 0x43, 0x0D, 0xC9, 0xCF, 0x76, 0x48, 0x11,-    0x7F, 0xC6, 0x0B, 0xAB, 0xBF, 0x8E, 0xBF, 0x19,-    0xFA, 0xCE, 0xE5, 0x50, 0x45, 0x5B, 0x60, 0xC9-  },-  {-    0xAC, 0xAA, 0xDA, 0x3E, 0x47, 0x37, 0xC6, 0x63,-    0xEB, 0xF0, 0x3C, 0x02, 0x49, 0xCC, 0xA6, 0xF3,-    0x17, 0x9A, 0x03, 0x84, 0xEA, 0x2A, 0xB1, 0x35,-    0xD4, 0xD7, 0xA2, 0xBB, 0x8A, 0x2F, 0x40, 0x53,-    0x9C, 0xDC, 0xE8, 0xA3, 0x76, 0x0F, 0xD1, 0x3D,-    0xEE, 0xEC, 0xD1, 0x60, 0x61, 0x7F, 0x72, 0xDE,-    0x63, 0x75, 0x4E, 0x21, 0x57, 0xCA, 0xDC, 0xF0,-    0x67, 0x32, 0x9C, 0x2A, 0x51, 0x98, 0xF8, 0xE0-  },-  {-    0xEF, 0x15, 0xE6, 0xDB, 0x96, 0xE6, 0xD0, 0xC1,-    0x8C, 0x70, 0xAD, 0xC3, 0xCD, 0xB3, 0x2B, 0x28,-    0x67, 0x74, 0x02, 0xE8, 0xEA, 0x44, 0x11, 0xEA,-    0x2F, 0x34, 0x68, 0xED, 0x93, 0x82, 0xE1, 0x9B,-    0xFE, 0xCA, 0xF5, 0xAC, 0xB8, 0x28, 0xA5, 0x2B,-    0xE1, 0x6B, 0x98, 0x1E, 0x48, 0x7E, 0x5B, 0xB4,-    0xA1, 0x43, 0x08, 0x65, 0x35, 0x8E, 0x97, 0x9F,-    0xB1, 0x07, 0x1F, 0xB9, 0x51, 0x14, 0xFF, 0xDD-  },-  {-    0x05, 0x7E, 0xAB, 0x8F, 0xA6, 0x1C, 0x23, 0x09,-    0x67, 0xD9, 0x5D, 0xFB, 0x75, 0x45, 0x57, 0x0E,-    0x34, 0x1A, 0xE3, 0xC6, 0x73, 0x7C, 0x7D, 0xB2,-    0xA2, 0x27, 0xD9, 0x0F, 0xF3, 0x15, 0xD0, 0x98,-    0xD4, 0x76, 0xF7, 0x15, 0x77, 0x9E, 0x67, 0x72,-    0xB4, 0xED, 0x37, 0x54, 0x82, 0x66, 0xE6, 0x59,-    0x8C, 0x6F, 0x09, 0x69, 0x13, 0xC2, 0xFD, 0xD8,-    0xD6, 0xE4, 0x4F, 0xE2, 0xB5, 0x4D, 0x97, 0x80-  },-  {-    0xED, 0xE6, 0x8D, 0x1B, 0x13, 0xE7, 0xEF, 0x78,-    0xD9, 0xC4, 0xEE, 0x10, 0xEC, 0xEB, 0x1D, 0x2A,-    0xEE, 0xC3, 0xB8, 0x15, 0x7F, 0xDB, 0x91, 0x41,-    0x8C, 0x22, 0x19, 0xF6, 0x41, 0x49, 0x74, 0x70,-    0x17, 0xAC, 0xA7, 0xD4, 0x65, 0xB8, 0xB4, 0x7F,-    0xFA, 0x53, 0x64, 0x4B, 0x8B, 0xC6, 0xDA, 0x12,-    0xDD, 0x45, 0xD1, 0x05, 0x5E, 0x47, 0xB4, 0xD8,-    0x39, 0x0E, 0xB2, 0xBD, 0x60, 0x2B, 0xA0, 0x30-  },-  {-    0x27, 0xF8, 0x56, 0xE6, 0x3E, 0xB9, 0x4D, 0x08,-    0xFB, 0xBE, 0x50, 0x22, 0xB0, 0xED, 0xDB, 0xC7,-    0xD8, 0xDB, 0x86, 0x5E, 0xF4, 0xFE, 0xC2, 0x05,-    0x86, 0xDF, 0x3D, 0xD9, 0x02, 0xA0, 0x5B, 0x26,-    0x35, 0x9E, 0x26, 0x7C, 0x78, 0x8D, 0x7C, 0x88,-    0x03, 0x2E, 0x76, 0x6B, 0x11, 0x87, 0x40, 0x20,-    0x0F, 0x49, 0xCB, 0x4D, 0x6E, 0xDB, 0x15, 0x61,-    0xB2, 0xDE, 0x7D, 0xC6, 0x5E, 0xE6, 0x42, 0x3B-  },-  {-    0xE9, 0xE9, 0x8D, 0x6D, 0xE0, 0xEF, 0x53, 0xFD,-    0x24, 0x27, 0x66, 0x1E, 0x1A, 0xCF, 0x10, 0x3D,-    0x4C, 0xAA, 0x4D, 0xC6, 0x10, 0x03, 0x62, 0x09,-    0xEC, 0x99, 0x74, 0x19, 0xC1, 0x20, 0x63, 0x1C,-    0x2C, 0x09, 0x4A, 0x8E, 0xE7, 0x82, 0x2D, 0x43,-    0xF8, 0x77, 0x80, 0x11, 0xC6, 0x03, 0x11, 0x1F,-    0x26, 0x28, 0xF8, 0x97, 0xC9, 0xB4, 0x31, 0x31,-    0x54, 0x77, 0x75, 0x6B, 0x03, 0x2E, 0x1F, 0x8D-  },-  {-    0x52, 0xEB, 0x1E, 0x6C, 0x8A, 0x54, 0x49, 0x2C,-    0xA7, 0x60, 0xB5, 0x6C, 0xA8, 0x7D, 0xA3, 0xE1,-    0xA9, 0xA6, 0xD8, 0xA4, 0x21, 0x92, 0x19, 0x35,-    0x1D, 0x18, 0x71, 0x5A, 0x9A, 0x2C, 0x26, 0x70,-    0x8B, 0xB7, 0x12, 0xCD, 0xAC, 0x04, 0x34, 0x48,-    0x2E, 0x55, 0x1C, 0xB0, 0x9E, 0x3F, 0x16, 0x33,-    0x8D, 0xE2, 0x9B, 0xE2, 0xC6, 0x67, 0x40, 0xC3,-    0x44, 0xDF, 0x54, 0x88, 0xC5, 0xC2, 0xBB, 0x26-  },-  {-    0x47, 0x3F, 0xA6, 0xC5, 0x1A, 0x48, 0x10, 0x5F,-    0x72, 0x1C, 0x5C, 0xB8, 0xDB, 0xA6, 0x1C, 0x64,-    0xA1, 0xE3, 0xDD, 0xCC, 0xC3, 0x25, 0x0E, 0x68,-    0x22, 0x62, 0xF2, 0x12, 0xC0, 0x1A, 0xB4, 0x87,-    0x4A, 0xFF, 0x68, 0x8F, 0xEA, 0x96, 0x37, 0x73,-    0x9E, 0x2A, 0x25, 0xD2, 0xEE, 0x88, 0xDB, 0xDC,-    0xC4, 0xF0, 0x4D, 0x01, 0x47, 0x9B, 0x30, 0x17,-    0x17, 0x53, 0x3A, 0x64, 0x32, 0xB8, 0x50, 0xCD-  },-  {-    0x6B, 0x76, 0x60, 0xD4, 0x10, 0xEA, 0xE5, 0xF3,-    0x5A, 0xD0, 0xAE, 0x85, 0xE6, 0x3D, 0xA4, 0x53,-    0xEB, 0xB0, 0x57, 0xE4, 0x3F, 0x42, 0xE8, 0x42,-    0xCB, 0xF6, 0x25, 0x0D, 0xA6, 0x78, 0x66, 0xB4,-    0x24, 0x0D, 0x57, 0xC8, 0x3B, 0x77, 0x1B, 0x0F,-    0x70, 0x66, 0x3E, 0x17, 0xFB, 0xD9, 0x08, 0x7F,-    0x76, 0xB4, 0xCE, 0x6B, 0xCD, 0x0B, 0x50, 0x2E,-    0x33, 0x74, 0xB1, 0x50, 0x9B, 0xBA, 0x55, 0xA8-  },-  {-    0xA4, 0xD0, 0x8A, 0xCA, 0x7A, 0x9E, 0xA6, 0x43,-    0x99, 0x99, 0xEA, 0x21, 0xE4, 0xCF, 0xE9, 0x86,-    0x9B, 0xB9, 0x0E, 0x3A, 0x01, 0x48, 0x71, 0xAD,-    0x88, 0xED, 0x3A, 0x97, 0xAA, 0x89, 0x15, 0x95,-    0x1C, 0x3F, 0xD0, 0xB3, 0x93, 0x3A, 0x50, 0x85,-    0x88, 0x93, 0x8A, 0xF7, 0x54, 0x49, 0x44, 0xEF,-    0x43, 0xC4, 0x40, 0xAA, 0x8F, 0xF1, 0xE5, 0xA8,-    0x18, 0xA4, 0x66, 0x43, 0x5D, 0xE7, 0x0F, 0xA8-  },-  {-    0x85, 0xE0, 0xE9, 0xB5, 0x0D, 0x2D, 0xB0, 0x22,-    0xC2, 0x39, 0xD7, 0x23, 0x2A, 0xE4, 0x7C, 0x02,-    0x59, 0x22, 0xE4, 0xF0, 0x7E, 0x2A, 0xFC, 0x65,-    0x6C, 0xDC, 0x55, 0x53, 0xA2, 0x7D, 0x95, 0xBF,-    0xA5, 0x8A, 0x57, 0x4D, 0x4E, 0xC3, 0xA9, 0x73,-    0x28, 0x1A, 0x8F, 0x4E, 0x46, 0xA7, 0x1A, 0xB0,-    0x34, 0x1C, 0x25, 0x77, 0x28, 0x74, 0x63, 0xE2,-    0x51, 0x04, 0x4D, 0xB2, 0x39, 0x8D, 0x55, 0xE2-  },-  {-    0x81, 0xA0, 0xD0, 0x24, 0x42, 0x90, 0x51, 0x91,-    0x16, 0x33, 0x70, 0xAE, 0x29, 0xC7, 0xF8, 0x9C,-    0x0F, 0x48, 0xBC, 0x1A, 0x1E, 0xB2, 0x94, 0x70,-    0x47, 0xDA, 0x1C, 0x62, 0x2B, 0x86, 0x77, 0xE9,-    0xEA, 0x9B, 0xEC, 0xED, 0x55, 0xD3, 0x3A, 0xDB,-    0x15, 0x53, 0xBD, 0x58, 0x4A, 0xD2, 0xF8, 0x6A,-    0x62, 0x07, 0xE8, 0x4E, 0x40, 0xE4, 0x60, 0x7E,-    0x11, 0x65, 0x0E, 0xE2, 0x87, 0x9F, 0x4E, 0x0B-  },-  {-    0x87, 0x79, 0x0D, 0xF6, 0xCF, 0x73, 0x94, 0x45,-    0x1B, 0xCC, 0x73, 0x0E, 0x53, 0xFC, 0x57, 0xBE,-    0x56, 0x45, 0x22, 0x77, 0x1E, 0x14, 0x43, 0x2A,-    0x80, 0xAB, 0x0B, 0x06, 0xB7, 0xB1, 0xD2, 0x09,-    0xAD, 0x69, 0x89, 0x95, 0x12, 0x53, 0x85, 0xDB,-    0x8B, 0x3C, 0x09, 0x59, 0xB8, 0xA5, 0x33, 0x9E,-    0xDA, 0x0A, 0xE6, 0x78, 0x59, 0xD8, 0x47, 0xF4,-    0x4C, 0x81, 0x59, 0x72, 0x72, 0xCB, 0xF1, 0x95-  },-  {-    0xCC, 0x06, 0x4E, 0xA8, 0x53, 0xDC, 0x01, 0x52,-    0xCC, 0x03, 0xFE, 0xB5, 0xFB, 0x5D, 0xE7, 0x8B,-    0x9B, 0x88, 0xE9, 0x61, 0x55, 0xD5, 0x35, 0x8B,-    0xCE, 0x84, 0xA5, 0x4C, 0x0E, 0x0C, 0x42, 0xFB,-    0xDA, 0x09, 0x2F, 0x22, 0xD0, 0x56, 0xDF, 0x99,-    0x93, 0x26, 0x2E, 0x2B, 0xA4, 0x4A, 0x5B, 0x2D,-    0x53, 0xC3, 0x75, 0x9D, 0x09, 0x45, 0xFE, 0xBA,-    0xA6, 0xFD, 0x51, 0xB8, 0xFF, 0x38, 0xD8, 0x39-  },-  {-    0x7E, 0x51, 0x7F, 0xC3, 0x83, 0xEE, 0x8C, 0x9F,-    0x0A, 0x01, 0x68, 0x1D, 0x39, 0xE7, 0x3B, 0xEB,-    0xA5, 0x96, 0x95, 0x95, 0xCE, 0x77, 0x92, 0x7F,-    0x91, 0x69, 0x1F, 0x33, 0xBB, 0x3E, 0x13, 0x07,-    0xEE, 0x03, 0x61, 0x6C, 0x27, 0xE6, 0x79, 0x51,-    0x86, 0xF6, 0x94, 0x0F, 0xED, 0xD9, 0xD5, 0xC7,-    0xF2, 0x1B, 0x6D, 0x2A, 0xAF, 0x70, 0x29, 0x9C,-    0xDD, 0x83, 0x51, 0x25, 0x05, 0x0A, 0x8B, 0x3C-  },-  {-    0x84, 0x5F, 0xCF, 0xA6, 0x7F, 0x6E, 0x06, 0x55,-    0x10, 0xD2, 0x62, 0xF1, 0xDD, 0x69, 0x39, 0xEA,-    0x4C, 0x0A, 0x4A, 0x59, 0xC8, 0xEE, 0x39, 0x77,-    0xDB, 0x70, 0x05, 0xE1, 0xAE, 0xE4, 0x20, 0xBD,-    0x3F, 0x38, 0x26, 0xEC, 0xFE, 0x59, 0x01, 0x5B,-    0x4D, 0xFA, 0x0B, 0xD5, 0xBB, 0xF8, 0xD8, 0xA4,-    0x34, 0x48, 0x5D, 0xC1, 0x1C, 0xB9, 0xCC, 0x85,-    0x97, 0xCB, 0x8C, 0x95, 0x66, 0x11, 0x5F, 0x31-  },-  {-    0x17, 0xCF, 0x2C, 0x23, 0x21, 0x5B, 0xCD, 0xFC,-    0x24, 0x3D, 0x8A, 0x94, 0x5F, 0x3C, 0x5C, 0x25,-    0x1D, 0x27, 0x18, 0xA3, 0xF7, 0x5F, 0xED, 0x6F,-    0x33, 0x20, 0xBC, 0xC6, 0xFD, 0x92, 0x73, 0x86,-    0xD5, 0x6F, 0x87, 0x19, 0xCC, 0xA0, 0x2E, 0xC5,-    0xE9, 0x9C, 0xDA, 0xC4, 0xEA, 0x10, 0x95, 0xB4,-    0x65, 0xBA, 0x9A, 0x29, 0x8B, 0x1D, 0x23, 0x8E,-    0x38, 0xB3, 0xFA, 0x15, 0xE8, 0xB1, 0x4E, 0xE4-  },-  {-    0xD7, 0x89, 0xCE, 0xC7, 0xD7, 0x52, 0x0F, 0x10,-    0xE8, 0xB8, 0xB6, 0xC8, 0x40, 0x95, 0x89, 0xDF,-    0x57, 0xB8, 0x56, 0xB8, 0x24, 0x55, 0x68, 0xF6,-    0x4E, 0x2D, 0x21, 0x83, 0xE3, 0x59, 0xA7, 0x84,-    0xC8, 0xD2, 0x6C, 0xF9, 0xB7, 0x20, 0xF5, 0xDF,-    0x56, 0x7B, 0x01, 0xF3, 0xF4, 0x8D, 0xE6, 0x4D,-    0x4F, 0x0D, 0xB1, 0x56, 0xBE, 0x52, 0x5D, 0x7C,-    0x7A, 0x66, 0x5A, 0xAD, 0xC5, 0x91, 0xF0, 0xB6-  },-  {-    0xB5, 0xE2, 0x46, 0xA9, 0x02, 0x77, 0x10, 0xC0,-    0xB0, 0x55, 0xC7, 0x1F, 0x11, 0x67, 0xE0, 0xEE,-    0x36, 0xEB, 0xC4, 0x32, 0xCF, 0x5D, 0x14, 0x27,-    0x75, 0xA7, 0xAE, 0xCC, 0xCE, 0xA7, 0x83, 0x25,-    0xED, 0x8C, 0x12, 0xF5, 0x0F, 0xBE, 0x64, 0x8A,-    0xDD, 0xF0, 0x59, 0xB8, 0xC0, 0x2A, 0x61, 0x49,-    0x2F, 0x83, 0x57, 0xBE, 0xE1, 0x42, 0xE7, 0xF7,-    0xDE, 0x04, 0x33, 0x78, 0xDB, 0xCF, 0x2D, 0x33-  },-  {-    0xB5, 0x23, 0xFD, 0x77, 0xAB, 0x9E, 0xEE, 0x42,-    0x48, 0x72, 0xBC, 0x2E, 0x83, 0xFC, 0x0A, 0x77,-    0xFF, 0x8A, 0x90, 0xC9, 0xA0, 0xCE, 0x9E, 0x8C,-    0x87, 0x68, 0x0A, 0x0F, 0x62, 0x86, 0x33, 0x1F,-    0x15, 0xC9, 0x3A, 0x2A, 0xFE, 0xCF, 0x75, 0x66,-    0x65, 0x3F, 0x24, 0xD9, 0x30, 0xC3, 0x23, 0x19,-    0x2D, 0x30, 0x43, 0xB9, 0x05, 0x72, 0x1C, 0xBD,-    0xB6, 0x31, 0x11, 0xCA, 0x42, 0xF2, 0x8F, 0x4E-  },-  {-    0x43, 0x59, 0xA4, 0x58, 0x76, 0xBF, 0x6A, 0xCC,-    0x0A, 0xEC, 0xE7, 0xB9, 0xB4, 0xB4, 0xA8, 0x38,-    0xB9, 0xDB, 0xA5, 0x77, 0x6A, 0x3B, 0x14, 0xDA,-    0x2F, 0xBA, 0x91, 0x02, 0xE7, 0x8B, 0xF6, 0x48,-    0xFF, 0xB4, 0xD8, 0x67, 0xBA, 0xE8, 0x5F, 0xD9,-    0xB7, 0x13, 0x12, 0xDC, 0x46, 0x02, 0xD0, 0xD4,-    0x9C, 0x90, 0x7B, 0xB9, 0x28, 0x9B, 0x22, 0x95,-    0x96, 0x1E, 0x54, 0x13, 0x81, 0x23, 0xF5, 0x4A-  },-  {-    0xD3, 0xF2, 0xC8, 0xE7, 0x4F, 0x34, 0x3A, 0x4E,-    0x71, 0x90, 0xD4, 0x75, 0xCF, 0x9A, 0xF7, 0x54,-    0xEE, 0xD5, 0x57, 0x72, 0x62, 0xB3, 0x5B, 0xD9,-    0xA9, 0xC4, 0x2B, 0x58, 0xCE, 0x88, 0x26, 0x2E,-    0x31, 0x14, 0x91, 0x7F, 0xB9, 0xE6, 0x83, 0xC6,-    0x2D, 0x9F, 0x89, 0x47, 0xB5, 0x8A, 0x29, 0x4D,-    0xA5, 0x06, 0xFB, 0x86, 0xB3, 0xED, 0xF2, 0x5C,-    0xB9, 0xE2, 0xD2, 0xDF, 0x61, 0x1C, 0xD4, 0x48-  },-  {-    0x41, 0xB8, 0x90, 0xF8, 0xE8, 0x45, 0x0D, 0xAD,-    0xB6, 0x95, 0x9A, 0xCC, 0xBA, 0x19, 0x49, 0x17,-    0xE0, 0x2F, 0x30, 0x67, 0x82, 0x1D, 0x4E, 0x99,-    0x5A, 0x37, 0xAC, 0x18, 0xBA, 0x3E, 0x47, 0xC7,-    0x50, 0x6E, 0x7A, 0x3D, 0xD1, 0xE1, 0x12, 0xE6,-    0xEC, 0x41, 0xBE, 0xF5, 0x30, 0x85, 0x11, 0x20,-    0x89, 0x4A, 0x7B, 0x34, 0xB3, 0xDB, 0xCD, 0xAE,-    0x40, 0x73, 0x27, 0xF0, 0xC5, 0x73, 0x6E, 0xDF-  },-  {-    0x19, 0xD7, 0x14, 0x4F, 0x0C, 0x85, 0x1E, 0xB8,-    0xB0, 0x53, 0xA3, 0xA4, 0x35, 0x86, 0x52, 0x6D,-    0xC5, 0xC7, 0x73, 0xE4, 0x97, 0x97, 0x51, 0x64,-    0xD1, 0x11, 0x51, 0x36, 0x43, 0x68, 0xDF, 0x24,-    0xBC, 0x44, 0xD5, 0x36, 0x07, 0x23, 0x04, 0xD7,-    0x06, 0x31, 0xA8, 0x40, 0xB6, 0x36, 0xB9, 0x66,-    0xFD, 0x02, 0x8F, 0x61, 0x06, 0x2B, 0xFC, 0x52,-    0x85, 0x67, 0x01, 0x53, 0xA6, 0x36, 0x3A, 0x0A-  },-  {-    0xC2, 0x18, 0x4C, 0x1A, 0x81, 0xE9, 0x83, 0xBE,-    0x2C, 0x96, 0xE4, 0xCF, 0xD6, 0x5A, 0xFB, 0xDA,-    0x1A, 0xC6, 0xEF, 0x35, 0x26, 0x6E, 0xE4, 0xB3,-    0xAB, 0x1F, 0xB0, 0x3A, 0xBA, 0xDD, 0xFD, 0xD4,-    0x03, 0xFF, 0xFC, 0xAF, 0xB4, 0xAD, 0xE0, 0xE9,-    0x2D, 0xA3, 0x82, 0xDA, 0x8C, 0x40, 0x22, 0x2E,-    0x10, 0xE9, 0xFD, 0xE8, 0x56, 0xC5, 0x1B, 0xDA,-    0xCD, 0xE7, 0x41, 0xA6, 0x49, 0xF7, 0x33, 0x5D-  },-  {-    0x48, 0x8C, 0x0D, 0x65, 0x2E, 0x42, 0xFD, 0x78,-    0xAB, 0x3A, 0x2D, 0xC2, 0x8C, 0xF3, 0xEB, 0x35,-    0xFC, 0xDD, 0xC8, 0xDE, 0xF7, 0xEA, 0xD4, 0x81,-    0x7B, 0xFF, 0xB6, 0x4C, 0x1A, 0xE0, 0xF2, 0x08,-    0xF7, 0x8C, 0xF4, 0x09, 0x76, 0xF7, 0xE2, 0xA2,-    0xCB, 0x2D, 0xD3, 0x0F, 0x1C, 0x99, 0x13, 0x02,-    0x08, 0xCE, 0xB6, 0x92, 0xC6, 0x68, 0x80, 0xD9,-    0x52, 0x8C, 0xD6, 0xD3, 0x8A, 0xD2, 0x9D, 0xB2-  },-  {-    0x51, 0x5B, 0x65, 0xBF, 0x65, 0x68, 0x83, 0x99,-    0x57, 0x5F, 0x0E, 0x06, 0x77, 0xBB, 0x6A, 0x91,-    0x9B, 0x66, 0x33, 0x55, 0x46, 0xD6, 0xCA, 0xE3,-    0x36, 0xF5, 0xC6, 0xFE, 0xAE, 0x5E, 0x2B, 0xF7,-    0x45, 0xE3, 0xA7, 0xB1, 0x3C, 0x32, 0x05, 0xDD,-    0x8B, 0x5B, 0x92, 0xCF, 0x05, 0x3B, 0xE9, 0x69,-    0xDF, 0x71, 0x20, 0xFC, 0xEF, 0x77, 0xE3, 0x89,-    0x5F, 0x56, 0x0F, 0xD2, 0x32, 0xFB, 0x89, 0x50-  },-  {-    0x3F, 0xDB, 0xC7, 0xD6, 0x9F, 0x4B, 0x53, 0xC2,-    0x25, 0x66, 0x3D, 0xA3, 0x0D, 0x80, 0xF7, 0x2E,-    0x54, 0x28, 0x10, 0x44, 0xA2, 0x2B, 0x98, 0x82,-    0xC6, 0x63, 0x8F, 0x55, 0x26, 0x83, 0x4B, 0xD3,-    0x16, 0x01, 0xCA, 0x5E, 0xB2, 0xCC, 0xA4, 0xF5,-    0xFF, 0xCF, 0x67, 0x5D, 0xCB, 0xCF, 0xCA, 0x60,-    0xC8, 0xA3, 0x61, 0x2D, 0x1A, 0xA9, 0xDA, 0xB6,-    0x93, 0xB2, 0x35, 0x60, 0x69, 0x60, 0x3A, 0x0E-  },-  {-    0x4F, 0xF6, 0xC3, 0x1A, 0x8F, 0xC0, 0x01, 0xAC,-    0x3B, 0x7A, 0xE0, 0x20, 0xC5, 0xF7, 0xC4, 0x5E,-    0xFB, 0x62, 0x71, 0xA2, 0xD7, 0xCC, 0xAB, 0x87,-    0x13, 0xE5, 0x48, 0xB7, 0x29, 0xF0, 0xFF, 0xF9,-    0xC8, 0x2F, 0xD4, 0xDB, 0x5C, 0xF6, 0x56, 0x43,-    0xD4, 0x07, 0x6A, 0x3F, 0xB1, 0x7B, 0x3E, 0x89,-    0x3C, 0x30, 0x2D, 0xC7, 0x5B, 0x61, 0x22, 0xFF,-    0x86, 0x81, 0xD0, 0x37, 0x12, 0x0E, 0x27, 0x6A-  },-  {-    0x43, 0xDF, 0xF2, 0x60, 0xDF, 0xEF, 0x1C, 0xB2,-    0xD6, 0x16, 0x00, 0xE2, 0x40, 0xAA, 0xD6, 0xB7,-    0x20, 0xE5, 0xF4, 0xF8, 0x30, 0x86, 0xE2, 0x6A,-    0x49, 0xA0, 0xCE, 0x3E, 0x0C, 0xA4, 0x4B, 0x9A,-    0x60, 0xFC, 0xF4, 0x6A, 0x8C, 0x3F, 0x1B, 0xB1,-    0xA6, 0xF5, 0x76, 0x2B, 0x66, 0x51, 0x3F, 0xE3,-    0xF7, 0xC5, 0xB0, 0xBC, 0x15, 0x0C, 0x08, 0x49,-    0x1A, 0xCB, 0xC4, 0x36, 0x1C, 0xAB, 0xCF, 0xDF-  },-  {-    0xB4, 0xDE, 0xA9, 0x4C, 0x9D, 0x36, 0x75, 0xBE,-    0x05, 0x12, 0xEF, 0xDE, 0xA8, 0x16, 0x38, 0x70,-    0xFE, 0x34, 0x25, 0xDC, 0xD7, 0x61, 0xF3, 0x63,-    0xC4, 0x3A, 0x0C, 0xA5, 0x71, 0x6B, 0x76, 0x54,-    0x06, 0x63, 0xFB, 0x2B, 0xE4, 0x9E, 0x2D, 0xB1,-    0x06, 0x48, 0x5C, 0x9C, 0xDD, 0x3C, 0x16, 0x48,-    0x98, 0xA9, 0x54, 0xB5, 0x87, 0x48, 0xC4, 0x2F,-    0xEA, 0x16, 0xA4, 0x0F, 0xC4, 0x53, 0xD2, 0x10-  },-  {-    0xE5, 0x27, 0x7B, 0x6F, 0x93, 0xEA, 0x1D, 0xE3,-    0xE2, 0xD9, 0xFC, 0xD8, 0xC6, 0x79, 0x79, 0x3C,-    0x6C, 0xCB, 0x8A, 0x3B, 0xE2, 0x6E, 0x8E, 0x31,-    0x14, 0xF3, 0x5D, 0xA4, 0xF2, 0xAC, 0x01, 0x4F,-    0x55, 0xC2, 0xF1, 0x5E, 0x09, 0xE9, 0x4A, 0xA0,-    0x71, 0x29, 0x81, 0x67, 0xA2, 0xFB, 0x9B, 0xE3,-    0x11, 0x70, 0x1F, 0xFB, 0xA9, 0xD3, 0xEE, 0xFF,-    0x8F, 0xFC, 0x79, 0x93, 0xA3, 0xCE, 0xCE, 0x18-  },-  {-    0xF0, 0x95, 0xA7, 0xC6, 0xE2, 0xB9, 0x16, 0x64,-    0x73, 0x4F, 0x3E, 0x23, 0xF1, 0x8E, 0xB2, 0xBA,-    0x9B, 0x00, 0xE7, 0x1F, 0xBF, 0xCB, 0x99, 0x31,-    0xC0, 0xA6, 0x14, 0x79, 0x2A, 0x9D, 0x86, 0x75,-    0x62, 0x2A, 0x87, 0x4C, 0x1B, 0xF5, 0x24, 0x1A,-    0x2A, 0x87, 0x41, 0xED, 0x1C, 0x89, 0x3B, 0xDF,-    0xA8, 0xE2, 0x8C, 0x2E, 0x20, 0xBB, 0x1C, 0x58,-    0xEB, 0x4D, 0xE7, 0xD8, 0x01, 0x11, 0x6C, 0x78-  },-  {-    0xDF, 0xA1, 0xFD, 0x80, 0x3A, 0x1D, 0x4A, 0x3E,-    0x66, 0x1D, 0xF0, 0x1F, 0x49, 0x43, 0xEA, 0x66,-    0x26, 0x0A, 0x18, 0xFE, 0xCE, 0x13, 0x4D, 0x62,-    0xF9, 0x7D, 0xAC, 0xDB, 0x8B, 0x3B, 0xF9, 0xC8,-    0x00, 0xAF, 0xE5, 0x79, 0xCF, 0xD1, 0x3F, 0xC0,-    0x14, 0x8B, 0xDE, 0xFB, 0xFF, 0x4E, 0x76, 0x83,-    0x56, 0x1C, 0x06, 0xA6, 0xF7, 0x22, 0x5E, 0x47,-    0x81, 0x99, 0x3B, 0x4F, 0x4F, 0x2B, 0xCB, 0xFA-  },-  {-    0x2B, 0x86, 0xCE, 0xB2, 0x70, 0xF6, 0x90, 0x8D,-    0x8B, 0x16, 0x00, 0x75, 0xEA, 0x7F, 0x57, 0x16,-    0x3A, 0xF5, 0xD5, 0xC6, 0xF8, 0xAA, 0xC5, 0x20,-    0x40, 0xCC, 0x68, 0x7C, 0x17, 0xAB, 0xF3, 0xC7,-    0x78, 0xC1, 0x39, 0x06, 0xE0, 0xE6, 0xF2, 0x9A,-    0x6A, 0xB1, 0x23, 0xDE, 0xEB, 0xCE, 0x39, 0x1F,-    0x90, 0x7D, 0x75, 0xD3, 0xA2, 0xCE, 0xFA, 0x0E,-    0xFC, 0xB8, 0x80, 0xA0, 0xE7, 0x0D, 0x71, 0x96-  },-  {-    0x32, 0x46, 0x6B, 0xCB, 0xDE, 0xD5, 0x38, 0xE5,-    0x68, 0x79, 0x54, 0x30, 0x35, 0x25, 0x36, 0xFE,-    0xB9, 0x19, 0xBF, 0x4D, 0x97, 0xCC, 0x44, 0xAB,-    0x1D, 0x80, 0x50, 0x40, 0xF4, 0xBC, 0x4C, 0x2E,-    0x79, 0x52, 0x72, 0x10, 0x18, 0x95, 0x8B, 0x4E,-    0xE7, 0x83, 0x03, 0x59, 0x0E, 0xF6, 0xAC, 0x45,-    0x0D, 0xF9, 0x2E, 0xC7, 0x7F, 0x47, 0x70, 0x54,-    0xBF, 0xF8, 0x67, 0xB8, 0x89, 0x71, 0xD4, 0x21-  },-  {-    0xEA, 0x64, 0xB0, 0x03, 0xA1, 0x35, 0x76, 0x61,-    0x21, 0xCF, 0xBC, 0xCB, 0xDC, 0x08, 0xDC, 0xA2,-    0x40, 0x29, 0x26, 0xBE, 0x78, 0xCE, 0xA3, 0xD0,-    0xA7, 0x25, 0x3D, 0x9E, 0xC9, 0xE6, 0x3B, 0x8A,-    0xCD, 0xD9, 0x94, 0x55, 0x99, 0x17, 0xE0, 0xE0,-    0x3B, 0x5E, 0x15, 0x5F, 0x94, 0x4D, 0x71, 0x98,-    0xD9, 0x92, 0x45, 0xA7, 0x94, 0xCE, 0x19, 0xC9,-    0xB4, 0xDF, 0x4D, 0xA4, 0xA3, 0x39, 0x93, 0x34-  },-  {-    0x05, 0xAD, 0x0F, 0x27, 0x1F, 0xAF, 0x7E, 0x36,-    0x13, 0x20, 0x51, 0x84, 0x52, 0x81, 0x3F, 0xF9,-    0xFB, 0x99, 0x76, 0xAC, 0x37, 0x80, 0x50, 0xB6,-    0xEE, 0xFB, 0x05, 0xF7, 0x86, 0x7B, 0x57, 0x7B,-    0x8F, 0x14, 0x47, 0x57, 0x94, 0xCF, 0xF6, 0x1B,-    0x2B, 0xC0, 0x62, 0xD3, 0x46, 0xA7, 0xC6, 0x5C,-    0x6E, 0x00, 0x67, 0xC6, 0x0A, 0x37, 0x4A, 0xF7,-    0x94, 0x0F, 0x10, 0xAA, 0x44, 0x9D, 0x5F, 0xB9-  },-  {-    0xB5, 0x45, 0x88, 0x02, 0x94, 0xAF, 0xA1, 0x53,-    0xF8, 0xB9, 0xF4, 0x9C, 0x73, 0xD9, 0x52, 0xB5,-    0xD1, 0x22, 0x8F, 0x1A, 0x1A, 0xB5, 0xEB, 0xCB,-    0x05, 0xFF, 0x79, 0xE5, 0x60, 0xC0, 0x30, 0xF7,-    0x50, 0x0F, 0xE2, 0x56, 0xA4, 0x0B, 0x6A, 0x0E,-    0x6C, 0xB3, 0xD4, 0x2A, 0xCD, 0x4B, 0x98, 0x59,-    0x5C, 0x5B, 0x51, 0xEA, 0xEC, 0x5A, 0xD6, 0x9C,-    0xD4, 0x0F, 0x1F, 0xC1, 0x6D, 0x2D, 0x5F, 0x50-  },-  {-    0xBB, 0xFB, 0x94, 0x77, 0xEC, 0x6A, 0x9F, 0x0C,-    0x25, 0x40, 0x5A, 0xCD, 0x8A, 0x30, 0xD5, 0xDD,-    0x7C, 0x73, 0x57, 0x1F, 0x1D, 0x1A, 0x6E, 0x8C,-    0xE7, 0x2F, 0x8B, 0x9C, 0x94, 0x1C, 0xF7, 0x79,-    0xB7, 0x64, 0x03, 0xAC, 0x7F, 0x04, 0x50, 0x05,-    0x25, 0x84, 0x39, 0x0A, 0x14, 0xEA, 0xA3, 0x7C,-    0x20, 0xB5, 0xBD, 0xB0, 0x38, 0x10, 0x54, 0xA9,-    0xA4, 0x95, 0x34, 0xF8, 0x14, 0x66, 0xBA, 0x9D-  },-  {-    0xC8, 0x28, 0x7E, 0x93, 0x3D, 0x95, 0x04, 0xBF,-    0xFD, 0x7B, 0xE2, 0xAC, 0x02, 0x2B, 0x32, 0xF3,-    0xF4, 0x6D, 0x87, 0xA7, 0xA0, 0xE7, 0x9B, 0xB2,-    0xA1, 0xCB, 0xAA, 0xCC, 0x2E, 0x84, 0xCD, 0x70,-    0x84, 0x5D, 0x0D, 0x42, 0x78, 0x48, 0xA6, 0xD7,-    0x88, 0xD3, 0x96, 0x22, 0xE1, 0x0F, 0x43, 0x42,-    0x23, 0x7E, 0xEF, 0xA6, 0xD3, 0xC0, 0x12, 0xDA,-    0xE9, 0x6C, 0xC8, 0xA6, 0x50, 0xCC, 0x2E, 0x30-  },-  {-    0xC4, 0x59, 0x6F, 0xCB, 0x0A, 0x28, 0xD2, 0x4A,-    0xAD, 0x70, 0xCF, 0x18, 0x53, 0xEC, 0x29, 0xDA,-    0xC0, 0xFB, 0x20, 0x2D, 0x8E, 0xC1, 0x40, 0xDA,-    0x30, 0x00, 0x88, 0xBB, 0x85, 0xB9, 0x2C, 0x30,-    0x29, 0x19, 0x46, 0xAD, 0x30, 0x7C, 0x09, 0x6E,-    0x3B, 0x28, 0x66, 0x33, 0x5C, 0x93, 0x17, 0xAF,-    0xE2, 0x8C, 0xAD, 0xAB, 0x5D, 0x62, 0xC3, 0x54,-    0x32, 0x9C, 0x98, 0xD9, 0x93, 0xC5, 0xBE, 0x1C-  },-  {-    0xE8, 0x8C, 0x38, 0xE6, 0x7E, 0x8D, 0x19, 0x83,-    0x58, 0x08, 0x85, 0x46, 0x70, 0x77, 0x9E, 0xCA,-    0x60, 0xBA, 0xD8, 0x54, 0xC5, 0x77, 0x87, 0x90,-    0xA0, 0x72, 0x54, 0xA3, 0x0A, 0x14, 0xAE, 0x82,-    0xB6, 0x1B, 0xB1, 0x69, 0x11, 0xFE, 0x57, 0x77,-    0x1D, 0x19, 0xE9, 0xB7, 0xF5, 0x02, 0x3C, 0x0D,-    0x4E, 0x8A, 0x8D, 0x37, 0x2E, 0x3D, 0x85, 0xE4,-    0x3B, 0x03, 0xE5, 0xE0, 0x0E, 0x6E, 0xBA, 0x4B-  },-  {-    0x2D, 0x66, 0x3E, 0x03, 0xE6, 0xF3, 0x55, 0x2C,-    0xCD, 0xFB, 0xA4, 0x96, 0xA1, 0x4C, 0xC6, 0x22,-    0x4C, 0xEB, 0x1E, 0xB6, 0x1A, 0xA2, 0x65, 0xE6,-    0xA7, 0xD4, 0xA2, 0x6E, 0x54, 0x10, 0x61, 0x04,-    0xA9, 0x6E, 0x33, 0x09, 0x59, 0xF9, 0x71, 0x3B,-    0x34, 0x87, 0xC1, 0xB9, 0x49, 0x7C, 0xCF, 0x82,-    0x61, 0x1D, 0xBF, 0xA3, 0x4F, 0xF1, 0x1D, 0x31,-    0x33, 0xB5, 0xB5, 0xD1, 0xF1, 0xE4, 0xF8, 0xD0-  },-  {-    0x70, 0x7D, 0x6A, 0x58, 0x42, 0x1B, 0x8F, 0x7E,-    0x44, 0xFF, 0x1F, 0x83, 0x62, 0xBC, 0x70, 0x0F,-    0x71, 0xEF, 0x7C, 0x39, 0x35, 0xE0, 0x76, 0x4B,-    0xD1, 0x4D, 0x39, 0x0C, 0x1C, 0x72, 0x79, 0x2A,-    0xF9, 0xC2, 0xC0, 0x2F, 0xB7, 0x2A, 0x2B, 0x9D,-    0x9A, 0x07, 0x29, 0xCB, 0x3E, 0x99, 0x62, 0x6C,-    0xF0, 0x34, 0xDF, 0x54, 0xB5, 0x06, 0xB5, 0xB1,-    0x64, 0x64, 0xF4, 0x75, 0x86, 0x4F, 0x25, 0x90-  },-  {-    0x9D, 0x88, 0xF8, 0xBA, 0xA4, 0xEB, 0x0F, 0x9A,-    0xB2, 0x29, 0x2E, 0x49, 0x82, 0xAC, 0x80, 0x44,-    0x53, 0x58, 0x22, 0x7D, 0x7F, 0x9C, 0xE7, 0xA4,-    0xA6, 0x29, 0xF1, 0x80, 0xF7, 0x14, 0x1E, 0x08,-    0xFE, 0x63, 0x55, 0xC6, 0x45, 0x21, 0xA6, 0x9B,-    0xA2, 0xBF, 0xBD, 0x1C, 0x4A, 0x3E, 0xA0, 0x48,-    0xD0, 0xBC, 0x8A, 0xB3, 0x70, 0x1F, 0x30, 0xEA,-    0x83, 0xFB, 0xE0, 0x24, 0x74, 0xD8, 0x92, 0xBF-  },-  {-    0x65, 0xEA, 0x4D, 0xB0, 0x4A, 0x75, 0x81, 0xC1,-    0x81, 0x94, 0xA8, 0x92, 0x1A, 0xFD, 0xFA, 0x4F,-    0x8D, 0x9A, 0xF6, 0x29, 0xDE, 0xD2, 0x77, 0x2C,-    0x65, 0x8E, 0x08, 0x48, 0x5F, 0x67, 0xAD, 0x2C,-    0xE2, 0x1A, 0x98, 0xCD, 0x29, 0x3F, 0xF2, 0x8D,-    0x4D, 0xFC, 0xDF, 0x65, 0x8C, 0xDC, 0x7A, 0xE6,-    0x70, 0x27, 0x84, 0x8E, 0x71, 0xCC, 0xC1, 0x15,-    0xA3, 0xFF, 0xBA, 0xC4, 0xFA, 0x61, 0xBB, 0x73-  },-  {-    0x0B, 0x4A, 0x68, 0x92, 0x9E, 0x7F, 0x15, 0xCA,-    0x91, 0xBB, 0x44, 0x39, 0xF2, 0x40, 0x37, 0x02,-    0x03, 0x4C, 0xD4, 0x74, 0x8E, 0x46, 0x92, 0x7A,-    0xBA, 0x95, 0xCB, 0xEF, 0x80, 0x04, 0x8B, 0x25,-    0xA6, 0x75, 0x97, 0x0F, 0xAC, 0x33, 0xC8, 0x74,-    0xAB, 0xD3, 0xD8, 0x3A, 0xA0, 0xF3, 0x7B, 0xE2,-    0x30, 0x83, 0x10, 0xE8, 0xDD, 0x79, 0x4F, 0x81,-    0x92, 0x93, 0x0E, 0xD5, 0x6E, 0x70, 0xA8, 0xE4-  },-  {-    0xC1, 0xC5, 0xD8, 0xAC, 0xFE, 0x3F, 0xDE, 0x67,-    0x4E, 0xDD, 0x36, 0x20, 0x15, 0x7A, 0x8B, 0x6B,-    0x4C, 0x8E, 0x67, 0xC6, 0xA7, 0xA9, 0x72, 0x67,-    0x41, 0xD9, 0xC3, 0x05, 0xE2, 0xA5, 0x2A, 0x87,-    0x97, 0xFD, 0xA0, 0xB2, 0xF1, 0x3A, 0xC7, 0x87,-    0x34, 0xDB, 0x2F, 0x4F, 0xC8, 0x3E, 0xF3, 0x24,-    0x14, 0xD9, 0x31, 0xEB, 0xAE, 0xAE, 0xCD, 0x82,-    0x6D, 0x7C, 0x2B, 0xE2, 0x03, 0xBD, 0xC2, 0xD1-  },-  {-    0x2D, 0xAD, 0xC8, 0xC9, 0xF7, 0x42, 0x5A, 0x01,-    0x14, 0x49, 0x12, 0x87, 0xBD, 0xC6, 0x8E, 0xAE,-    0x4F, 0xB6, 0x19, 0x4D, 0x1A, 0x10, 0x9D, 0xB9,-    0xB6, 0xE8, 0xA2, 0xAC, 0x94, 0xD4, 0xE4, 0x40,-    0x90, 0x99, 0x85, 0xC4, 0x29, 0x1F, 0xE8, 0x9F,-    0xD8, 0x28, 0x1F, 0x8F, 0xCE, 0xF6, 0xF6, 0xBC,-    0x32, 0x55, 0x0E, 0x53, 0xCB, 0x7A, 0x49, 0x42,-    0x89, 0x81, 0xE8, 0xD5, 0x3C, 0xF5, 0xA2, 0x12-  },-  {-    0xE5, 0x55, 0xF2, 0xA5, 0x8A, 0xCA, 0xC5, 0x50,-    0x3F, 0x9E, 0x2D, 0x97, 0xB2, 0x46, 0x87, 0x2B,-    0x4C, 0xA7, 0x8B, 0xD5, 0x6D, 0x47, 0xB7, 0x65,-    0xF0, 0x52, 0xAA, 0xB3, 0xDC, 0x77, 0xDB, 0xE9,-    0x93, 0x93, 0x6F, 0x22, 0x52, 0xF0, 0xAB, 0x2E,-    0x01, 0xFB, 0x08, 0x74, 0x72, 0xCC, 0xB5, 0xA1,-    0x21, 0xDD, 0xFF, 0xDE, 0x53, 0x1D, 0x3D, 0xC4,-    0x02, 0x2A, 0x7D, 0x19, 0x56, 0xCE, 0x0E, 0x20-  },-  {-    0x9B, 0x4E, 0xAE, 0x12, 0x95, 0x00, 0x0A, 0xEA,-    0x79, 0x83, 0xEC, 0x3B, 0xCB, 0x48, 0x57, 0xCC,-    0x71, 0x25, 0xFD, 0x73, 0x06, 0x78, 0x7C, 0x63,-    0x13, 0x24, 0x73, 0xCF, 0xE8, 0xF4, 0xEB, 0x45,-    0x31, 0x8A, 0x60, 0xDA, 0xAD, 0x64, 0x6D, 0x63,-    0xA2, 0x7C, 0x4B, 0x9D, 0x1F, 0x50, 0x73, 0x70,-    0x0A, 0x30, 0x57, 0xDE, 0x22, 0xA7, 0xFD, 0xF0,-    0x9A, 0x87, 0xAA, 0xC6, 0x6E, 0xBE, 0x47, 0x58-  },-  {-    0x96, 0x64, 0xAC, 0xC2, 0xDC, 0x72, 0x98, 0xB9,-    0x86, 0x8D, 0xB4, 0x95, 0xEE, 0xBC, 0x6B, 0x59,-    0x65, 0x7D, 0x13, 0x9A, 0x6A, 0xF0, 0x60, 0xA7,-    0x2F, 0xB6, 0x91, 0x24, 0xBD, 0xD3, 0xA6, 0x59,-    0x18, 0x88, 0xF0, 0x35, 0x4F, 0x70, 0x2B, 0x1B,-    0x88, 0x86, 0x84, 0x41, 0x10, 0x58, 0xA3, 0x75,-    0x9F, 0x7F, 0xD3, 0x7F, 0x06, 0xEA, 0xFB, 0x3B,-    0x58, 0xEC, 0xF2, 0x6F, 0x45, 0x53, 0xBE, 0x27-  },-  {-    0xFC, 0x16, 0xE0, 0x92, 0x5A, 0x35, 0xAA, 0xD4,-    0x7A, 0xD6, 0x95, 0x54, 0xB2, 0x57, 0x96, 0xFC,-    0xF9, 0x26, 0x0C, 0xB5, 0x0E, 0x6C, 0xC3, 0x74,-    0x75, 0x35, 0x55, 0x9E, 0x99, 0xC8, 0x58, 0x81,-    0xC7, 0x58, 0x89, 0xAC, 0x79, 0x3A, 0xB7, 0x8B,-    0x88, 0xB0, 0x5F, 0xB1, 0x60, 0x89, 0x56, 0x55,-    0xE4, 0xD6, 0x63, 0xA2, 0xA0, 0x9B, 0xA9, 0xFA,-    0x61, 0x4A, 0x10, 0xC2, 0x29, 0x47, 0x21, 0x0D-  },-  {-    0x22, 0x5E, 0x73, 0x41, 0xF8, 0x57, 0x52, 0x4F,-    0x78, 0x90, 0x37, 0x6C, 0x50, 0xE6, 0x35, 0x4B,-    0x16, 0xC1, 0xCD, 0xFB, 0xF5, 0x8F, 0xE5, 0xF3,-    0xA4, 0x03, 0x94, 0x93, 0xB5, 0xDD, 0x40, 0x8D,-    0x79, 0xD4, 0x8C, 0x56, 0xE1, 0xF8, 0x9B, 0x68,-    0x7F, 0xBE, 0x33, 0x62, 0xA7, 0x7F, 0xA7, 0x5A,-    0x54, 0x37, 0x4B, 0x7A, 0x48, 0x5E, 0x91, 0xB1,-    0x89, 0xAF, 0x2E, 0x2F, 0x74, 0x9E, 0x2A, 0xDB-  },-  {-    0xA0, 0x7A, 0x4C, 0x02, 0x3A, 0xC7, 0x04, 0xCE,-    0x7C, 0x09, 0xDD, 0x6C, 0x92, 0xC6, 0xF1, 0x84,-    0xF5, 0x3E, 0x8D, 0xD9, 0x6F, 0xE3, 0xBE, 0x9E,-    0x93, 0xC3, 0x9C, 0x53, 0x44, 0x85, 0xB6, 0x4B,-    0x39, 0xD5, 0xBE, 0x7F, 0x7B, 0x71, 0x70, 0x60,-    0x4D, 0xE7, 0x7C, 0xE5, 0xA4, 0x37, 0xA9, 0x8E,-    0x71, 0x2C, 0xC4, 0x4F, 0x19, 0xE2, 0x1D, 0x41,-    0xF0, 0xE6, 0xE3, 0xEC, 0x1E, 0x00, 0xAC, 0x55-  },-  {-    0x62, 0x85, 0x84, 0x63, 0x58, 0x2D, 0x22, 0xE6,-    0x8E, 0x52, 0x27, 0xBF, 0xBA, 0xB5, 0x40, 0x04,-    0x8F, 0x65, 0xED, 0xD6, 0xA6, 0x75, 0x5F, 0x6F,-    0xAB, 0x53, 0xC0, 0x25, 0xB6, 0x63, 0xCA, 0x37,-    0x7A, 0x0E, 0xD5, 0xEF, 0xD6, 0xAF, 0x16, 0x6C,-    0xA5, 0x5A, 0x9C, 0x73, 0x3F, 0xCA, 0x80, 0x5A,-    0xC4, 0xE4, 0x09, 0xCA, 0x56, 0x17, 0x7A, 0xA7,-    0x49, 0x40, 0xDB, 0x9F, 0x40, 0xC3, 0xB9, 0xFF-  },-  {-    0xA1, 0xAC, 0x53, 0x9D, 0x1A, 0xBB, 0xC2, 0xB0,-    0x96, 0xFF, 0xAB, 0x81, 0x3B, 0x64, 0x45, 0x7F,-    0xE6, 0xEB, 0x3B, 0x50, 0xFC, 0xD8, 0x89, 0x53,-    0xD0, 0xCD, 0x9F, 0x65, 0x02, 0xF6, 0x89, 0x62,-    0x0A, 0xD4, 0x42, 0xB5, 0x51, 0x70, 0x90, 0xB5,-    0x0C, 0xFF, 0xB9, 0x58, 0x86, 0x6D, 0x7C, 0x16,-    0x1D, 0x8A, 0x7D, 0x75, 0x60, 0xC8, 0x93, 0xE1,-    0xDE, 0xF6, 0xAE, 0xC4, 0x37, 0xAD, 0x6D, 0x06-  },-  {-    0xB5, 0x86, 0xB7, 0x5D, 0xA7, 0x0F, 0x6C, 0xC0,-    0x62, 0x7E, 0xF3, 0xCF, 0x12, 0x37, 0xC9, 0x4B,-    0x12, 0xD0, 0xF7, 0x4D, 0xCB, 0xA2, 0x6A, 0x9E,-    0x7C, 0x7B, 0xC6, 0xC2, 0x1A, 0x33, 0x53, 0x37,-    0xBF, 0x9F, 0x5B, 0x83, 0x0C, 0x63, 0x24, 0xAF,-    0xA6, 0xEF, 0x64, 0x9E, 0x95, 0xAF, 0x87, 0x90,-    0x87, 0x52, 0x34, 0xC6, 0xE6, 0x61, 0xD3, 0xF5,-    0xE9, 0x8C, 0xA0, 0x12, 0xAE, 0x81, 0x48, 0x8A-  },-  {-    0x56, 0x68, 0xA2, 0x98, 0x21, 0x37, 0xCB, 0xC6,-    0x22, 0xEF, 0x8D, 0x06, 0xCF, 0x4E, 0x86, 0x16,-    0x8C, 0xDD, 0x4A, 0x89, 0x9C, 0xD4, 0x46, 0x2A,-    0xF6, 0xC3, 0xD4, 0x15, 0x42, 0x61, 0x56, 0xA5,-    0xD8, 0xDD, 0x67, 0xC9, 0x60, 0x4F, 0x31, 0xB5,-    0x7D, 0x6C, 0x9D, 0x59, 0x72, 0x50, 0x45, 0x7E,-    0x4A, 0xB5, 0x2A, 0x58, 0x11, 0x55, 0x42, 0xAC,-    0xF2, 0x7F, 0x92, 0x59, 0x30, 0xF6, 0xA1, 0x12-  },-  {-    0xF2, 0xB1, 0xBD, 0x16, 0xD8, 0x8E, 0x37, 0xF3,-    0xA5, 0x18, 0xD1, 0x93, 0xED, 0x06, 0x1A, 0x1D,-    0xF7, 0xB4, 0x43, 0xA1, 0x8C, 0xE9, 0xF8, 0x44,-    0x45, 0xEF, 0x86, 0xEF, 0xFB, 0xDF, 0xF1, 0x60,-    0x55, 0x02, 0x3C, 0xD4, 0xE7, 0x8D, 0x03, 0x4D,-    0xE4, 0x03, 0x2A, 0x77, 0xDD, 0xC1, 0xD3, 0x43,-    0x52, 0xFE, 0x61, 0x7F, 0x82, 0x56, 0x24, 0x45,-    0x9B, 0xC3, 0x26, 0x9F, 0x70, 0x4F, 0x34, 0x5B-  },-  {-    0xF0, 0x85, 0xF3, 0xD8, 0xBD, 0x13, 0x8E, 0x05,-    0x69, 0x24, 0x3F, 0x74, 0x52, 0x3E, 0x87, 0xFF,-    0x37, 0x6F, 0x04, 0xEA, 0xBD, 0x5A, 0x2F, 0x6E,-    0x53, 0xDF, 0x38, 0x99, 0x00, 0x0E, 0x2E, 0x94,-    0xAF, 0x0D, 0x2B, 0xC7, 0x1C, 0x3F, 0x71, 0x10,-    0x25, 0xC5, 0x38, 0xA6, 0xC8, 0xB1, 0x0B, 0x09,-    0x04, 0xDF, 0xC3, 0x46, 0xAD, 0xAD, 0x7E, 0xF3,-    0x6B, 0x1A, 0xE8, 0x8A, 0x6C, 0xFE, 0xAB, 0xBD-  },-  {-    0x82, 0x91, 0xA4, 0xAF, 0xD2, 0xE4, 0xB7, 0x16,-    0x61, 0x77, 0x3A, 0x46, 0xB3, 0xD4, 0x45, 0x5A,-    0x8D, 0x33, 0xA7, 0x26, 0xD9, 0xD3, 0x87, 0x30,-    0x83, 0xAB, 0x33, 0x70, 0x20, 0xC2, 0x7B, 0x4D,-    0xD6, 0x43, 0xE2, 0x8C, 0x2F, 0xE4, 0x7A, 0xB2,-    0xFB, 0xF5, 0xD1, 0x40, 0x81, 0xA3, 0xFC, 0x1C,-    0x83, 0x9B, 0x12, 0xEA, 0x31, 0xD1, 0x3C, 0xF4,-    0x9E, 0xEE, 0x97, 0xEF, 0x2E, 0xD7, 0xFA, 0x3E-  },-  {-    0xB1, 0x26, 0xAE, 0x46, 0xA7, 0xA4, 0x59, 0x5E,-    0x31, 0x60, 0x7E, 0xF8, 0x07, 0xA5, 0x60, 0x1F,-    0x4E, 0xCD, 0x9E, 0x7D, 0x66, 0xC8, 0x2D, 0xAE,-    0xB9, 0x71, 0x5F, 0x8D, 0xA1, 0xC1, 0x7D, 0x7D,-    0x71, 0xC3, 0xE6, 0x82, 0x50, 0xC9, 0xDC, 0x01,-    0xAC, 0x40, 0xA3, 0x6D, 0x2E, 0x63, 0x8B, 0xEF,-    0x3D, 0x7B, 0xC7, 0x0E, 0xA2, 0xD0, 0xE3, 0x31,-    0xE3, 0xD3, 0x3E, 0x17, 0x04, 0xEB, 0xA9, 0x2D-  },-  {-    0x63, 0xB1, 0x4D, 0x8E, 0xD2, 0x47, 0x9C, 0xAA,-    0x17, 0xC3, 0xE4, 0xCF, 0x20, 0x3B, 0x23, 0x3A,-    0x7E, 0x37, 0x3E, 0xDB, 0x0C, 0x2F, 0x19, 0x71,-    0x29, 0xA9, 0xA3, 0x6C, 0x5B, 0x3E, 0x1F, 0x38,-    0x38, 0xF2, 0xE8, 0x2A, 0xC2, 0xC2, 0xAD, 0x9D,-    0x52, 0xB3, 0x35, 0x79, 0x0B, 0xFF, 0x57, 0x73,-    0x04, 0xA3, 0x78, 0xE3, 0x8E, 0xB6, 0xBB, 0x41,-    0x62, 0x03, 0x0C, 0xE2, 0xA8, 0xBA, 0x29, 0x3C-  },-  {-    0x34, 0x42, 0x2A, 0x32, 0x29, 0x66, 0x99, 0x28,-    0xC4, 0x90, 0xF5, 0x7B, 0x8E, 0x76, 0x88, 0x52,-    0xE5, 0xB7, 0xC0, 0x0D, 0xCA, 0xD6, 0x0B, 0x01,-    0x2A, 0x5D, 0xB3, 0x9A, 0x2D, 0x59, 0x7C, 0x3D,-    0x0A, 0x63, 0xBE, 0x6A, 0x26, 0x3E, 0xA5, 0x36,-    0x08, 0xB7, 0x06, 0x92, 0xD7, 0x8E, 0x1B, 0x42,-    0x7E, 0xAC, 0xEC, 0x01, 0xF4, 0xBE, 0xE0, 0xBD,-    0xBB, 0x8F, 0x08, 0x81, 0x48, 0x8E, 0xFC, 0x28-  },-  {-    0xE2, 0x6B, 0x7E, 0xD6, 0xB9, 0x07, 0xB5, 0x4C,-    0xA2, 0x65, 0x67, 0xF1, 0x1E, 0xE5, 0xBB, 0x6D,-    0x73, 0x9A, 0x00, 0x08, 0xA5, 0x34, 0x37, 0xAD,-    0x75, 0x90, 0xA3, 0x13, 0x4C, 0xEB, 0x95, 0x19,-    0x6E, 0x49, 0xB3, 0x44, 0x3F, 0x32, 0x49, 0x22,-    0x51, 0x75, 0x23, 0xC0, 0xCD, 0x5A, 0x00, 0xD7,-    0x7E, 0x4C, 0x4D, 0xE7, 0xA0, 0xDE, 0x96, 0x8A,-    0x84, 0xFB, 0x1B, 0x3B, 0xE7, 0xB3, 0xB9, 0x63-  },-  {-    0x26, 0x01, 0x97, 0xCA, 0xFB, 0xF4, 0x56, 0xB4,-    0x11, 0xFA, 0x26, 0xD3, 0x83, 0xD6, 0x4D, 0x61,-    0xE8, 0x1E, 0x5E, 0x52, 0xF8, 0x4C, 0xD9, 0xD5,-    0x73, 0x86, 0xC7, 0x76, 0x23, 0x0C, 0x65, 0xA2,-    0x68, 0x1C, 0xD2, 0xFD, 0xFD, 0x28, 0x67, 0x9F,-    0x67, 0xFE, 0x1B, 0xD7, 0x46, 0x9C, 0xF7, 0x26,-    0x95, 0x85, 0xFC, 0xCB, 0xAE, 0xCC, 0x22, 0xF5,-    0x03, 0xD6, 0xE3, 0xFC, 0x39, 0x30, 0x14, 0x36-  },-  {-    0xCB, 0xD5, 0xAB, 0xE3, 0x7B, 0xCC, 0x4F, 0x9A,-    0x12, 0x70, 0xAD, 0xD0, 0xA5, 0x27, 0x0F, 0x42,-    0x83, 0x9C, 0x7D, 0x24, 0x93, 0x20, 0xD1, 0xF1,-    0xD8, 0x85, 0x53, 0xD0, 0x5F, 0xAF, 0x9A, 0x26,-    0x79, 0xF4, 0x9B, 0x49, 0xC9, 0xE2, 0x0C, 0x1C,-    0x85, 0xC6, 0x29, 0xAA, 0x0F, 0x09, 0x0C, 0xAE,-    0x8F, 0x6E, 0x32, 0xC6, 0xCA, 0xD7, 0x17, 0x21,-    0xFD, 0x06, 0x23, 0xE4, 0xED, 0x25, 0xB2, 0x56-  },-  {-    0x78, 0x0E, 0x31, 0x4F, 0xD6, 0x97, 0xD2, 0xA9,-    0x7D, 0x22, 0x1A, 0x22, 0xC3, 0x90, 0x11, 0xE2,-    0x50, 0x69, 0x16, 0x3C, 0xD0, 0x8F, 0x00, 0x70,-    0xD0, 0x67, 0xE8, 0xCD, 0xB0, 0xBC, 0x86, 0x73,-    0xFD, 0xB0, 0xEC, 0x4F, 0x46, 0xE3, 0x1D, 0x74,-    0x8C, 0xD3, 0xBB, 0x3D, 0x61, 0xB9, 0x01, 0x0A,-    0x66, 0x12, 0xF3, 0x41, 0xD4, 0x71, 0xD9, 0xC5,-    0xA2, 0xDE, 0x6B, 0x6D, 0xD5, 0x38, 0xA6, 0xB5-  },-  {-    0x40, 0x8F, 0x16, 0xCE, 0x86, 0xF8, 0x01, 0xD0,-    0x8B, 0xD0, 0x51, 0x36, 0x4B, 0x3E, 0xCD, 0x9A,-    0x39, 0x45, 0x71, 0x58, 0x88, 0xDF, 0x46, 0x63,-    0x21, 0x9A, 0x19, 0x0B, 0x35, 0x04, 0xE4, 0x61,-    0x8E, 0x7B, 0xF5, 0x51, 0x71, 0x17, 0x8B, 0x04,-    0x00, 0xFB, 0xEB, 0xFA, 0xA0, 0x1F, 0x6E, 0xEA,-    0xB5, 0x4F, 0xF5, 0xE3, 0x1E, 0x6D, 0x7A, 0x55,-    0xB8, 0x4A, 0xDB, 0x9E, 0x03, 0xDF, 0x48, 0x36-  },-  {-    0x0B, 0xF9, 0x88, 0x69, 0xEC, 0x05, 0x80, 0x19,-    0x9C, 0xA3, 0x70, 0x8E, 0xC9, 0xC4, 0x2C, 0x37,-    0x6C, 0x5C, 0x36, 0xE0, 0xFB, 0x74, 0x92, 0x42,-    0x57, 0x23, 0x98, 0xA0, 0xDA, 0x57, 0xF9, 0x8D,-    0x1C, 0x4C, 0xD2, 0x96, 0x3B, 0x37, 0xC3, 0xC6,-    0x5A, 0x10, 0xF1, 0x06, 0xB5, 0x6D, 0xCB, 0x96,-    0xDC, 0xDD, 0x32, 0x57, 0x96, 0x29, 0x7A, 0xDB,-    0xF6, 0xEE, 0x62, 0x70, 0xED, 0xD4, 0x59, 0x2A-  },-  {-    0x05, 0x2C, 0x32, 0x98, 0x43, 0x87, 0xB1, 0x93,-    0x0D, 0x3A, 0x96, 0xBE, 0x72, 0x36, 0x85, 0x35,-    0x44, 0x4F, 0x13, 0x07, 0x57, 0xBF, 0x87, 0xE0,-    0x76, 0x2D, 0x8B, 0x1C, 0x4F, 0x65, 0x70, 0xF4,-    0xDC, 0x67, 0x4C, 0x4E, 0x6F, 0x5E, 0x21, 0xAB,-    0xD0, 0xB3, 0x5E, 0x1C, 0xA1, 0x9D, 0xB8, 0x40,-    0x68, 0x8D, 0x1B, 0x6E, 0x9E, 0xC9, 0x1F, 0x37,-    0x30, 0xE8, 0xB2, 0x88, 0x0E, 0xC2, 0xC3, 0xDF-  },-  {-    0x4B, 0xB7, 0x14, 0x09, 0xC1, 0x5A, 0x0D, 0x39,-    0x32, 0xC5, 0x99, 0xEF, 0x0F, 0xF3, 0xEF, 0xF5,-    0xC7, 0x60, 0x2D, 0x70, 0x00, 0xCD, 0xA9, 0x74,-    0x08, 0x2C, 0x4A, 0x46, 0x82, 0x24, 0x9A, 0x19,-    0xD4, 0x3A, 0x5C, 0x14, 0xE0, 0xAE, 0xEF, 0x89,-    0x78, 0x21, 0x05, 0x63, 0x80, 0xAF, 0xF2, 0x75,-    0x20, 0x1D, 0x74, 0x59, 0x14, 0x84, 0x96, 0xEA,-    0xE9, 0x42, 0x0E, 0x71, 0x82, 0x88, 0xB4, 0x14-  },-  {-    0x47, 0x95, 0xB2, 0x51, 0xCC, 0x7B, 0x35, 0xE6,-    0x96, 0x92, 0xDB, 0x7F, 0xB4, 0x0E, 0xFD, 0x34,-    0xF2, 0x94, 0xF5, 0x1A, 0xEC, 0x15, 0xD6, 0xC8,-    0x67, 0x3E, 0x59, 0xF2, 0x04, 0xBE, 0xCF, 0x4C,-    0xF9, 0xDF, 0x84, 0x95, 0x23, 0xF1, 0xDB, 0x73,-    0xBE, 0x2A, 0x66, 0xC8, 0x39, 0xD8, 0x01, 0x97,-    0x4D, 0x43, 0x3B, 0x47, 0x80, 0x67, 0x01, 0xA1,-    0x63, 0xA7, 0x94, 0xB2, 0x6A, 0x84, 0x6B, 0x06-  },-  {-    0xDD, 0x50, 0xF9, 0x65, 0xB6, 0x0B, 0xAF, 0x16,-    0x8F, 0x5E, 0xA0, 0x5A, 0xC2, 0x0B, 0x8A, 0x78,-    0xF4, 0x47, 0x5C, 0x18, 0x61, 0x0B, 0x9D, 0x9F,-    0xC2, 0xB7, 0xC3, 0xAD, 0x5C, 0x6F, 0x97, 0xA4,-    0xCF, 0x5E, 0xA4, 0x8E, 0xE4, 0x0A, 0x3C, 0xA2,-    0x29, 0x3C, 0xC4, 0x21, 0x40, 0x82, 0xCF, 0x0F,-    0x8E, 0xC8, 0x95, 0x55, 0x32, 0x69, 0xE1, 0x4D,-    0xA9, 0xBD, 0x1A, 0x19, 0x65, 0x62, 0xCA, 0x59-  },-  {-    0xE0, 0xB5, 0x4B, 0x61, 0x7F, 0x44, 0x92, 0x2C,-    0x7F, 0x61, 0xC6, 0xA5, 0x4C, 0x98, 0xC6, 0x1E,-    0x93, 0x2D, 0xED, 0x1F, 0xA9, 0x34, 0x02, 0x66,-    0xEE, 0xA2, 0x5F, 0x01, 0xE8, 0x18, 0x0D, 0x1D,-    0xDC, 0x6A, 0xD8, 0xDD, 0x6A, 0x0B, 0x8F, 0xAB,-    0x8C, 0x73, 0xAE, 0xBB, 0x97, 0x73, 0x17, 0x1B,-    0xBA, 0x04, 0xA7, 0x81, 0xB1, 0x13, 0x14, 0xD5,-    0xA3, 0x0A, 0x9D, 0x1C, 0x28, 0x12, 0xCA, 0x7C-  },-  {-    0x2D, 0xC4, 0xAD, 0x06, 0x89, 0xA4, 0x46, 0x0B,-    0x5B, 0x39, 0x9E, 0x91, 0x1B, 0xDB, 0x41, 0x58,-    0x6A, 0xC8, 0xAD, 0x36, 0x7B, 0x7A, 0xA3, 0x9E,-    0x3E, 0xAE, 0xC8, 0x89, 0x9A, 0x2D, 0x3C, 0xE3,-    0x8E, 0x34, 0xAB, 0x46, 0x08, 0x23, 0x4D, 0x75,-    0xEB, 0x67, 0x37, 0xFE, 0x21, 0x58, 0x24, 0xC2,-    0xA9, 0x78, 0x83, 0x59, 0x6F, 0x6F, 0x18, 0xDD,-    0xEB, 0xBF, 0x16, 0x27, 0xDE, 0xD9, 0x1D, 0x84-  },-  {-    0xF5, 0x6A, 0x11, 0xCB, 0xBF, 0x8A, 0x99, 0x7E,-    0x14, 0x77, 0xEC, 0x76, 0xE5, 0x3C, 0x89, 0x4B,-    0x14, 0x8D, 0x69, 0x25, 0xA4, 0x33, 0x6F, 0x0C,-    0xB7, 0xAA, 0xB9, 0xD8, 0x02, 0xAC, 0x9B, 0x45,-    0x36, 0xF4, 0x80, 0x10, 0x1F, 0x3F, 0x9A, 0x77,-    0xEE, 0xCD, 0xCB, 0xAE, 0x7A, 0xA6, 0xEA, 0x44,-    0x7A, 0x85, 0xDA, 0x90, 0xB5, 0x01, 0xF7, 0xDB,-    0x2E, 0xF8, 0xDD, 0xF5, 0xDE, 0x17, 0x33, 0x63-  },-  {-    0x6E, 0x17, 0x1D, 0x19, 0x6D, 0x0F, 0xC8, 0x2F,-    0xB4, 0x73, 0xE2, 0x9D, 0xA8, 0xF4, 0x0F, 0x37,-    0xEE, 0x97, 0x41, 0xAC, 0x3E, 0xAF, 0x17, 0x5D,-    0xD4, 0x9F, 0xDB, 0x56, 0x53, 0x0D, 0xB5, 0x98,-    0x98, 0xBA, 0xF3, 0xCE, 0xE7, 0x2E, 0xEF, 0x5E,-    0x77, 0x27, 0x6C, 0xAD, 0xAB, 0xCD, 0x75, 0x2C,-    0xA3, 0xA1, 0xB8, 0x64, 0xC1, 0x0A, 0xD2, 0x8D,-    0x27, 0xEA, 0xAD, 0x86, 0xE3, 0xF2, 0x1D, 0x33-  },-  {-    0x95, 0x20, 0x12, 0x33, 0x0D, 0x92, 0xBB, 0x9C,-    0x18, 0x92, 0xF2, 0x5B, 0x7B, 0x5A, 0xA0, 0xFE,-    0xD3, 0xC0, 0x39, 0x8A, 0x17, 0x08, 0x50, 0x9A,-    0x66, 0x14, 0x74, 0xA3, 0xF5, 0xE5, 0x11, 0xD0,-    0x9F, 0x21, 0xC3, 0x00, 0x08, 0x00, 0x2F, 0x10,-    0x42, 0xD8, 0x3D, 0x2F, 0x7B, 0x11, 0x33, 0x6B,-    0x8C, 0x2F, 0xE1, 0xD9, 0x79, 0xC1, 0xE3, 0x86,-    0xE0, 0x20, 0x97, 0x48, 0x9B, 0x2D, 0xFC, 0xF5-  },-  {-    0x2D, 0xCE, 0x47, 0xC3, 0x3A, 0x7E, 0x7F, 0x21,-    0x5D, 0x34, 0xA5, 0x47, 0x1B, 0xCD, 0x11, 0x10,-    0x60, 0x6C, 0x77, 0x13, 0x8F, 0x19, 0xD4, 0x17,-    0x41, 0xED, 0x5D, 0x1B, 0x89, 0xE8, 0xF7, 0xC7,-    0x74, 0xEE, 0xC4, 0xBB, 0xC1, 0x02, 0x76, 0x6E,-    0xA1, 0x53, 0x2F, 0x2E, 0x43, 0x13, 0x4A, 0xD3,-    0x66, 0xBD, 0xCC, 0x27, 0xD1, 0xA0, 0xCC, 0x95,-    0x9E, 0x16, 0x48, 0x65, 0x9E, 0x44, 0xCB, 0xBE-  },-  {-    0x7F, 0x06, 0x59, 0x59, 0x7E, 0x7A, 0xD1, 0x22,-    0xD1, 0xC9, 0xED, 0x91, 0x93, 0x0B, 0x07, 0xDE,-    0x40, 0xE2, 0x55, 0x20, 0x1A, 0x33, 0xEB, 0x2B,-    0x31, 0x81, 0x37, 0x6E, 0x36, 0x8D, 0xF7, 0x76,-    0x4C, 0x0C, 0x14, 0xBF, 0x79, 0x9F, 0x16, 0x1B,-    0x9B, 0x00, 0x79, 0x57, 0x8B, 0x47, 0x09, 0x71,-    0x3E, 0x24, 0xE4, 0x2F, 0xE7, 0xDD, 0x71, 0xB5,-    0x09, 0x43, 0xF4, 0x40, 0xE2, 0x3C, 0xD1, 0xBE-  },-  {-    0x1E, 0x66, 0xF7, 0xB3, 0x58, 0x80, 0x5D, 0xDD,-    0xFF, 0xC5, 0x82, 0x68, 0x3E, 0x0B, 0xAD, 0x81,-    0x8C, 0x87, 0x34, 0x03, 0xD4, 0xBA, 0x15, 0x06,-    0xB9, 0x2F, 0xB3, 0x20, 0xCA, 0x8C, 0xF9, 0xCE,-    0xE8, 0x15, 0x47, 0x15, 0xD6, 0xDB, 0x6F, 0x04,-    0x09, 0x3D, 0x4B, 0x3F, 0xD8, 0xA6, 0xFC, 0x8E,-    0x7E, 0xDD, 0xEA, 0xF2, 0x79, 0x5B, 0x3D, 0x22,-    0xDE, 0x7C, 0x75, 0xEC, 0xFF, 0x6F, 0x92, 0xAF-  },-  {-    0x1F, 0x60, 0xC1, 0x8D, 0xB1, 0x68, 0xD9, 0x0D,-    0x2B, 0x46, 0x60, 0xE7, 0x58, 0xA3, 0xCD, 0x28,-    0x02, 0x3D, 0x4C, 0x0B, 0x84, 0x8B, 0x5E, 0x33,-    0xEA, 0x5C, 0xC1, 0x56, 0x29, 0xFD, 0x35, 0x2E,-    0xAC, 0xB1, 0x4F, 0x05, 0xFD, 0xEC, 0x07, 0xAC,-    0x23, 0xDA, 0x92, 0x04, 0x74, 0x5F, 0xA9, 0x73,-    0xC3, 0x29, 0x55, 0x13, 0x5F, 0x8E, 0xC7, 0x41,-    0x0A, 0x1C, 0xB5, 0x3B, 0xC7, 0x58, 0x06, 0x84-  },-  {-    0xB9, 0xDF, 0x57, 0xB3, 0x45, 0xEE, 0x6F, 0x87,-    0x0E, 0xE0, 0xE6, 0x3C, 0x55, 0x8B, 0x81, 0xC1,-    0xBC, 0x38, 0x42, 0x97, 0x6F, 0xD3, 0xCF, 0xB1,-    0xB5, 0x3B, 0x76, 0x6B, 0xF4, 0x36, 0xD1, 0xD1,-    0x75, 0xF4, 0xD4, 0xC5, 0xF1, 0xBD, 0x8D, 0x7A,-    0xF6, 0x5B, 0x5D, 0x18, 0xA7, 0x2F, 0x95, 0x71,-    0xF2, 0x34, 0x70, 0x19, 0x32, 0xAF, 0xB7, 0xC3,-    0xC9, 0x4A, 0x8C, 0x8F, 0xA0, 0x23, 0xDB, 0x4F-  },-  {-    0xD8, 0xC8, 0x24, 0x95, 0xA2, 0xB5, 0xF6, 0x64,-    0x51, 0xF8, 0xC5, 0xB2, 0xE8, 0xA1, 0x73, 0x33,-    0xC2, 0xBE, 0x32, 0x20, 0xCE, 0x06, 0xA8, 0x14,-    0xC2, 0xCE, 0xA9, 0x5C, 0xC8, 0x65, 0x92, 0xAA,-    0x02, 0x15, 0xBF, 0x29, 0x46, 0x14, 0xA3, 0x28,-    0xCF, 0x07, 0x22, 0x2B, 0x73, 0xF9, 0x3F, 0x24,-    0x2A, 0x94, 0x8B, 0xCA, 0xE9, 0x56, 0x5F, 0xC9,-    0x70, 0x57, 0xB5, 0x2E, 0x02, 0x80, 0xEB, 0x82-  },-  {-    0x81, 0x34, 0xCE, 0x66, 0xD9, 0x5C, 0x40, 0x88,-    0xA5, 0x66, 0xD4, 0xE4, 0x35, 0x99, 0x06, 0x9A,-    0xD0, 0x45, 0x53, 0xB0, 0xFE, 0xA3, 0xD7, 0x48,-    0x19, 0xA6, 0xFD, 0x76, 0x6F, 0x43, 0x67, 0x42,-    0xF6, 0xB6, 0xEC, 0xC8, 0x27, 0x93, 0x98, 0x60,-    0x9F, 0x60, 0xB4, 0xE4, 0xBB, 0x44, 0xFD, 0x72,-    0xCD, 0xFB, 0xFF, 0x18, 0xD8, 0x03, 0x8A, 0xA7,-    0x12, 0x30, 0x83, 0x8B, 0x12, 0x6B, 0xC3, 0x00-  },-  {-    0x3D, 0xA8, 0x9F, 0x5C, 0x52, 0xB0, 0x52, 0xE0,-    0x42, 0xE5, 0x11, 0x7B, 0x96, 0x80, 0x6E, 0xDB,-    0x1C, 0x55, 0x22, 0x7E, 0x85, 0x14, 0xB3, 0x9E,-    0x8B, 0x22, 0xBE, 0xA4, 0xC9, 0x53, 0x30, 0x80,-    0xA4, 0xD7, 0xA9, 0x24, 0x92, 0xB7, 0x51, 0x76,-    0x9B, 0x0E, 0x11, 0x9E, 0xF4, 0xDB, 0x2B, 0xB8,-    0x8D, 0x5C, 0x1E, 0x75, 0xB4, 0x03, 0x10, 0x74,-    0xD7, 0xF2, 0x1A, 0x78, 0x01, 0x4A, 0x1F, 0x96-  },-  {-    0x9B, 0xDC, 0xB4, 0x69, 0xC2, 0x66, 0x5D, 0xD8,-    0x46, 0x83, 0xE5, 0x81, 0x01, 0xFD, 0xAE, 0x5C,-    0x88, 0x29, 0x2A, 0x4E, 0x05, 0xC4, 0x00, 0xCA,-    0x08, 0x26, 0xDA, 0x79, 0x38, 0x2B, 0x8A, 0x28,-    0x26, 0xFF, 0x24, 0xFC, 0xD5, 0x56, 0xC9, 0xD5,-    0xB5, 0xAA, 0x89, 0x2F, 0x02, 0xB1, 0x67, 0x04,-    0x77, 0x27, 0x9B, 0xD7, 0x5F, 0x1B, 0x2B, 0x7B,-    0x67, 0x5E, 0xFA, 0xC3, 0x80, 0x60, 0x70, 0x36-  },-  {-    0x6C, 0x77, 0x85, 0x7B, 0x38, 0x53, 0x3E, 0x41,-    0x4A, 0xF7, 0x38, 0x7C, 0x98, 0x56, 0x8D, 0x71,-    0xC8, 0xF0, 0xE3, 0x5E, 0x22, 0xB0, 0x2E, 0x2A,-    0x1C, 0x0D, 0xC6, 0xD5, 0x7E, 0x37, 0xD8, 0x68,-    0x72, 0x5A, 0xD8, 0x23, 0x58, 0x6A, 0x0B, 0xEE,-    0xF3, 0x98, 0x89, 0xCC, 0x31, 0xF1, 0xF7, 0xFA,-    0xD0, 0x96, 0x0A, 0x12, 0x5E, 0x29, 0xDF, 0xEA,-    0x74, 0x55, 0x12, 0xD1, 0x79, 0xE5, 0xF5, 0x89-  },-  {-    0x88, 0xC9, 0x83, 0x3A, 0x6D, 0x44, 0xFC, 0x25,-    0xBB, 0x64, 0xF3, 0xE9, 0x8E, 0x83, 0x8F, 0xB4,-    0xFF, 0x56, 0x48, 0x96, 0xDC, 0xD3, 0x58, 0x3A,-    0x8B, 0x57, 0xC9, 0x46, 0x6E, 0x74, 0x0C, 0x62,-    0x8B, 0x2D, 0x26, 0xEA, 0x14, 0x7C, 0xB3, 0x11,-    0x10, 0xFB, 0xAD, 0xCF, 0x9D, 0x01, 0x08, 0xAC,-    0xCE, 0xBE, 0x04, 0x31, 0x7D, 0x19, 0xFC, 0x03,-    0x66, 0xDE, 0x0C, 0x28, 0xA1, 0xA4, 0x5E, 0x2A-  },-  {-    0x0A, 0xAB, 0xB3, 0xA1, 0x78, 0x46, 0x4A, 0x01,-    0x47, 0x64, 0x5F, 0x05, 0x71, 0x2A, 0x0A, 0x15,-    0x55, 0xC5, 0xB9, 0xA3, 0xE9, 0x99, 0xAB, 0x25,-    0x5A, 0xCA, 0x35, 0xC5, 0x03, 0x81, 0xF4, 0x90,-    0x55, 0x1A, 0x40, 0x89, 0x31, 0xAA, 0x6B, 0xE9,-    0xA4, 0xEF, 0x49, 0x7A, 0x16, 0x5B, 0x36, 0x66,-    0x3B, 0x1E, 0x1F, 0x05, 0x13, 0x48, 0x02, 0xB1,-    0x78, 0xB7, 0xC7, 0x04, 0x68, 0xCB, 0x98, 0xE8-  },-  {-    0x58, 0x50, 0xD8, 0x93, 0x70, 0x6B, 0x3B, 0xC2,-    0xDB, 0xBA, 0x9C, 0xFA, 0xB0, 0x28, 0xBE, 0xD8,-    0x19, 0xA2, 0x83, 0x11, 0xD2, 0xD6, 0xF0, 0xCD,-    0x8E, 0x27, 0x2E, 0xE6, 0x77, 0xBC, 0x87, 0x8A,-    0x0C, 0xED, 0x6C, 0x0D, 0xEA, 0x9E, 0x5C, 0xC9,-    0x4B, 0x2B, 0x4F, 0x59, 0x1A, 0x40, 0xEC, 0x9F,-    0xB1, 0x82, 0x22, 0xD6, 0xDE, 0xAC, 0xE1, 0xF9,-    0xC0, 0x83, 0xDC, 0x05, 0xDE, 0x11, 0x7A, 0x53-  },-  {-    0xBE, 0xE6, 0x96, 0xA4, 0x76, 0x4F, 0x94, 0x25,-    0xD9, 0x1B, 0x14, 0x17, 0x38, 0x62, 0x5A, 0x04,-    0x47, 0xA8, 0x22, 0xBB, 0xA7, 0xA8, 0x47, 0x78,-    0xCC, 0x3A, 0x77, 0xA3, 0x86, 0xCB, 0x18, 0x24,-    0x87, 0xDB, 0x51, 0x3B, 0xB8, 0xF3, 0x6F, 0xC2,-    0xF7, 0xE6, 0xD2, 0x89, 0x6E, 0x44, 0x56, 0xA5,-    0x23, 0x46, 0xC4, 0x94, 0x8E, 0x3E, 0xC6, 0x34,-    0xCB, 0xF1, 0x8F, 0x39, 0xC4, 0x46, 0xCB, 0xAB-  },-  {-    0x3D, 0x9F, 0x75, 0xD3, 0xE5, 0x0D, 0x9B, 0xA3,-    0xBC, 0xAC, 0x4A, 0x4E, 0x11, 0x6B, 0x9B, 0x30,-    0x8D, 0xC6, 0x45, 0x99, 0xA3, 0x86, 0x4A, 0x9D,-    0xAF, 0xD7, 0x5C, 0xB7, 0x1F, 0x2D, 0xE3, 0x10,-    0x9F, 0x79, 0x56, 0xA7, 0xD2, 0xDD, 0x37, 0x4F,-    0x84, 0x06, 0xD7, 0x7F, 0x79, 0x63, 0x11, 0xE3,-    0xD3, 0x00, 0x89, 0xE5, 0x4D, 0xD6, 0xCE, 0x8A,-    0xBB, 0x02, 0xA8, 0x5A, 0x85, 0xAE, 0x92, 0xE4-  },-  {-    0xEF, 0x39, 0x51, 0x47, 0x5A, 0x16, 0xDF, 0x64,-    0x98, 0x32, 0x24, 0x04, 0x65, 0x30, 0xDC, 0x7C,-    0xB0, 0x53, 0xD2, 0x93, 0x94, 0x75, 0x39, 0x11,-    0xC4, 0x94, 0x99, 0x50, 0xF2, 0x3E, 0x8A, 0x92,-    0xC7, 0x09, 0xF4, 0x63, 0x69, 0xB2, 0x3A, 0x0D,-    0x70, 0x3A, 0x6F, 0x36, 0x49, 0x0F, 0x75, 0xBE,-    0x1E, 0x3E, 0x81, 0x29, 0xA8, 0x29, 0xF3, 0xDC,-    0xD7, 0x2D, 0x0E, 0x55, 0x49, 0x7B, 0x81, 0x33-  },-  {-    0xD4, 0x19, 0x7D, 0x2A, 0x68, 0x5B, 0xCA, 0x6B,-    0xFB, 0xDD, 0x0E, 0x3D, 0x84, 0xC7, 0x48, 0x01,-    0x35, 0x48, 0xBC, 0x84, 0x9F, 0xE6, 0x49, 0xDA,-    0xE7, 0xC4, 0xA2, 0x77, 0xFC, 0xBD, 0x8F, 0x81,-    0x8A, 0x9E, 0xDF, 0xA6, 0xCA, 0x14, 0xD7, 0xFE,-    0xEA, 0x72, 0x6B, 0x23, 0xB4, 0xA3, 0x3A, 0xA8,-    0xA3, 0xF5, 0xA6, 0x61, 0x67, 0x21, 0x5C, 0x61,-    0x48, 0xC0, 0x6B, 0x94, 0xCD, 0x8B, 0xFE, 0x37-  },-  {-    0x7A, 0x24, 0x40, 0x33, 0x35, 0xB8, 0x64, 0x10,-    0xD8, 0xD6, 0x93, 0xF1, 0x63, 0xD6, 0x19, 0x8A,-    0x68, 0x0F, 0x7E, 0x3A, 0xC0, 0x25, 0xEC, 0x44,-    0x74, 0x24, 0x9B, 0x01, 0x16, 0x77, 0xFE, 0x1C,-    0x86, 0x6A, 0xAF, 0x45, 0x3D, 0xB0, 0xE8, 0xF6,-    0x54, 0x33, 0x51, 0x50, 0x86, 0x3A, 0xCE, 0x57,-    0x66, 0x50, 0x80, 0x31, 0x91, 0x27, 0x8E, 0x9D,-    0x4B, 0x54, 0x7A, 0x43, 0x4C, 0x56, 0x54, 0xE2-  },-  {-    0xAF, 0x07, 0xC6, 0x7D, 0x58, 0x74, 0x3A, 0xEB,-    0x18, 0x50, 0xEB, 0x53, 0xB2, 0xDA, 0x78, 0xEC,-    0xF7, 0x09, 0x58, 0x18, 0x32, 0x5B, 0xEB, 0x86,-    0x6F, 0xF3, 0x13, 0xE3, 0x94, 0xC0, 0x07, 0xE0,-    0xC0, 0xB5, 0xA1, 0xCD, 0x7A, 0xE6, 0xBB, 0x37,-    0xCD, 0x27, 0x81, 0xB5, 0x2D, 0x15, 0x4D, 0x18,-    0x86, 0x5D, 0x5E, 0x37, 0xDB, 0xAA, 0x5F, 0x96,-    0x73, 0x9B, 0xF7, 0x69, 0x59, 0x96, 0xAE, 0x30-  },-  {-    0x28, 0xB3, 0xC2, 0x60, 0xFA, 0x7F, 0x23, 0xB9,-    0xCC, 0xAD, 0xD6, 0x15, 0xA1, 0x14, 0x69, 0x49,-    0x8A, 0xDB, 0x18, 0xD7, 0xA9, 0xF6, 0x84, 0xFD,-    0xE4, 0x35, 0xC0, 0x65, 0x33, 0xF5, 0xF5, 0x08,-    0xB2, 0x9B, 0x5E, 0xCD, 0x0E, 0xCD, 0x57, 0x36,-    0x9F, 0x22, 0xF1, 0xC5, 0x4E, 0x61, 0xBE, 0x6C,-    0xD1, 0x04, 0xC8, 0xF7, 0xD3, 0xE1, 0x84, 0x7A,-    0xAD, 0x67, 0x07, 0x3A, 0x47, 0x86, 0xE1, 0xDB-  },-  {-    0xD6, 0x43, 0x23, 0x33, 0x25, 0x23, 0x9E, 0x2E,-    0xBD, 0x41, 0x1F, 0x0E, 0x00, 0x23, 0x30, 0x56,-    0x2E, 0xB1, 0xBB, 0x08, 0xE6, 0x88, 0x24, 0xB7,-    0x1B, 0x98, 0x19, 0x9C, 0x76, 0xD5, 0x31, 0x58,-    0xD9, 0x1D, 0xDD, 0x6F, 0x4F, 0x82, 0x61, 0xEC,-    0x1D, 0x72, 0xFC, 0x77, 0xC2, 0xCC, 0x23, 0x7E,-    0xDA, 0x15, 0xF0, 0x25, 0x7C, 0xF0, 0x7B, 0x84,-    0xCF, 0x1F, 0xBD, 0x1D, 0xBA, 0xFA, 0x1D, 0xFC-  },-  {-    0x3D, 0x7B, 0x44, 0xCC, 0x82, 0xEF, 0xCA, 0xFC,-    0xAB, 0xA6, 0xB1, 0x91, 0x05, 0x48, 0x95, 0x8C,-    0x18, 0x0A, 0x0E, 0x8D, 0x84, 0xBC, 0x66, 0x3E,-    0x8E, 0xF9, 0x53, 0x3B, 0xD8, 0x0C, 0x4B, 0xBA,-    0xAA, 0x25, 0x5B, 0x19, 0x81, 0xF7, 0x56, 0xEB,-    0x10, 0x79, 0xAD, 0x0F, 0x34, 0x71, 0xA1, 0xFC,-    0x9D, 0x7A, 0x43, 0x23, 0x39, 0x30, 0x3A, 0x57,-    0x81, 0xA3, 0x45, 0x35, 0x30, 0x9E, 0x5A, 0x24-  },-  {-    0xEB, 0x08, 0x12, 0xC9, 0x67, 0x06, 0x46, 0xD5,-    0x63, 0x19, 0x8B, 0x11, 0x7A, 0xAF, 0xC5, 0x6F,-    0xA1, 0xB6, 0x56, 0x0F, 0x88, 0xB5, 0x75, 0x4E,-    0xBF, 0xC3, 0x1B, 0x35, 0x52, 0x16, 0xD8, 0xD7,-    0x4D, 0x34, 0x1E, 0x35, 0xB2, 0x43, 0xBC, 0x93,-    0x8C, 0xF5, 0x46, 0xAF, 0x1F, 0x73, 0xC1, 0xB0,-    0x04, 0x55, 0xDC, 0x06, 0xB2, 0xC6, 0xC5, 0x35,-    0x27, 0x9E, 0x87, 0x67, 0x49, 0x8F, 0x14, 0xE6-  },-  {-    0x7B, 0xBA, 0x7D, 0x73, 0x04, 0x02, 0x1C, 0x75,-    0xB5, 0xD6, 0xCE, 0x66, 0xB4, 0xEF, 0xA5, 0x50,-    0x19, 0xD9, 0x42, 0xD2, 0x08, 0xAF, 0xAC, 0x82,-    0x11, 0xAA, 0x7E, 0x5E, 0x11, 0x1E, 0x27, 0x69,-    0x76, 0x70, 0xE4, 0xEC, 0x91, 0xBA, 0x30, 0x8E,-    0xBD, 0xFB, 0x19, 0x15, 0x4C, 0x3B, 0xAD, 0x05,-    0x26, 0xA6, 0x25, 0x41, 0xAE, 0x5D, 0x43, 0xD0,-    0xF5, 0x47, 0xB9, 0xD9, 0x8E, 0x07, 0x36, 0x60-  },-  {-    0xA8, 0xE2, 0xA9, 0x46, 0x8D, 0xA3, 0xE3, 0x54,-    0x3A, 0x23, 0xA5, 0x78, 0x78, 0x0E, 0x25, 0x62,-    0xC7, 0xCE, 0x57, 0xFD, 0x11, 0x20, 0xE1, 0xC0,-    0x24, 0xD7, 0xEA, 0x32, 0x90, 0x31, 0x70, 0x46,-    0x61, 0x6E, 0x14, 0xCD, 0x0F, 0x15, 0xA8, 0x6B,-    0x99, 0x39, 0x54, 0x9B, 0x14, 0x76, 0x11, 0xB6,-    0xA5, 0x5D, 0x85, 0xAB, 0xC2, 0x5F, 0x63, 0x95,-    0x46, 0xB8, 0x9D, 0xD2, 0x3D, 0x39, 0xA9, 0x85-  },-  {-    0xCE, 0x87, 0x4C, 0xD6, 0xE1, 0x95, 0x8B, 0x9D,-    0x7F, 0x11, 0xFF, 0x44, 0xAB, 0x08, 0x32, 0xE8,-    0x48, 0x70, 0x2C, 0x8F, 0x26, 0x65, 0x6B, 0xA1,-    0x0B, 0xF5, 0x72, 0x0A, 0x7C, 0xAA, 0x1F, 0x59,-    0x08, 0xC9, 0x9A, 0x96, 0x03, 0xA9, 0x8B, 0x41,-    0x6C, 0x57, 0x22, 0x8C, 0x81, 0x9C, 0xEA, 0xF8,-    0x27, 0x01, 0x3B, 0x2E, 0x6D, 0x6B, 0x2D, 0xAE,-    0x59, 0xDF, 0xF1, 0x04, 0xB9, 0x02, 0xC3, 0x1B-  },-  {-    0x30, 0xFF, 0xFE, 0x37, 0x21, 0x8D, 0xB1, 0x94,-    0xB2, 0x32, 0x73, 0x49, 0x8F, 0x45, 0x44, 0xD3,-    0x84, 0x14, 0xBE, 0xE4, 0x1B, 0x17, 0x55, 0xA0,-    0xC6, 0xC2, 0xDB, 0xCB, 0x41, 0x19, 0x42, 0xD5,-    0xEC, 0xB9, 0xD4, 0x52, 0x3F, 0xB4, 0x79, 0x4B,-    0xA3, 0x6E, 0x57, 0x9A, 0xF2, 0xF8, 0xDD, 0x85,-    0x19, 0x99, 0x23, 0x31, 0x83, 0xFA, 0xB2, 0x7B,-    0x47, 0xAD, 0xD8, 0x7D, 0xF3, 0x59, 0x14, 0xBB-  },-  {-    0xCE, 0xF4, 0x43, 0x1D, 0xCE, 0x9F, 0xF5, 0x5A,-    0x00, 0x30, 0x0E, 0xC8, 0x64, 0x9E, 0x27, 0x58,-    0x36, 0x18, 0x22, 0x43, 0x69, 0xF6, 0x0A, 0x5C,-    0x89, 0x6B, 0x2A, 0x31, 0x10, 0xB0, 0x32, 0xB8,-    0x7C, 0x9E, 0xE4, 0xF2, 0x6C, 0x5F, 0x0B, 0xDB,-    0x50, 0x3E, 0xA7, 0x44, 0x7A, 0x5D, 0xB3, 0xF7,-    0x07, 0xFE, 0x34, 0x10, 0xDA, 0xCD, 0xD7, 0x57,-    0x22, 0x19, 0xBD, 0xEA, 0x8E, 0x17, 0xDC, 0x04-  },-  {-    0x8F, 0xF0, 0xBC, 0xB7, 0x5F, 0x00, 0x61, 0xB5,-    0xF9, 0x09, 0x29, 0x8F, 0x56, 0x9E, 0x45, 0xC7,-    0x5E, 0xD2, 0xD6, 0x4A, 0x81, 0x89, 0xCE, 0xBD,-    0x4E, 0x02, 0x56, 0x6E, 0x1A, 0x1B, 0x8B, 0xE5,-    0x3A, 0x78, 0x32, 0x28, 0x55, 0x8E, 0x28, 0xB5,-    0xF8, 0x7C, 0xCC, 0x2F, 0x42, 0x8F, 0x7F, 0x87,-    0x97, 0x44, 0xB5, 0x25, 0xB2, 0x49, 0x62, 0xB3,-    0x60, 0x4B, 0x12, 0x0F, 0x06, 0x77, 0x9F, 0x2E-  },-  {-    0x7F, 0x8D, 0xDF, 0xFB, 0x4D, 0xC1, 0x51, 0x91,-    0xDE, 0x3D, 0xDB, 0xE4, 0xA0, 0xF8, 0x8B, 0x7A,-    0xB0, 0x2D, 0x48, 0xE2, 0x5C, 0xFC, 0x1F, 0xE9,-    0x1D, 0xA5, 0x57, 0xE8, 0x85, 0xD0, 0x12, 0xB8,-    0xF6, 0x55, 0x26, 0xC5, 0xB7, 0xB1, 0x01, 0x3F,-    0xC8, 0x16, 0x58, 0x50, 0x43, 0xA3, 0x45, 0x60,-    0x5A, 0x39, 0xD8, 0xDA, 0xD7, 0x0D, 0x8A, 0x64,-    0x48, 0x51, 0x32, 0x50, 0xAA, 0xC4, 0xF3, 0xD5-  },-  {-    0xB1, 0xFE, 0x8C, 0x68, 0xAE, 0xF6, 0xB4, 0xD4,-    0xB2, 0x33, 0x54, 0xEB, 0x8C, 0x1D, 0x8F, 0x5A,-    0x56, 0xE3, 0x2E, 0x76, 0xB9, 0x6A, 0xC8, 0x44,-    0x3B, 0x2A, 0xB8, 0x35, 0xE4, 0xC8, 0xB6, 0x74,-    0xB3, 0x3E, 0x4C, 0x6C, 0x6D, 0xC1, 0x21, 0xD7,-    0xC2, 0xD3, 0x4B, 0x59, 0xB3, 0x7A, 0x56, 0x8A,-    0x1C, 0x98, 0xD5, 0x00, 0x32, 0x4E, 0x53, 0x08,-    0x87, 0x85, 0xB6, 0xB0, 0x80, 0x63, 0x47, 0xD1-  },-  {-    0x8E, 0x87, 0x34, 0xFC, 0xF9, 0x25, 0x9E, 0xE3,-    0x7F, 0xE9, 0xC6, 0xCD, 0xA2, 0x82, 0xC2, 0xD5,-    0xEB, 0x83, 0xD0, 0xCF, 0x43, 0x9C, 0x86, 0x19,-    0xD4, 0xB0, 0x42, 0xFF, 0x69, 0x96, 0x6B, 0x03,-    0x56, 0x5B, 0xE4, 0xDF, 0x96, 0x39, 0x3F, 0xE6,-    0xBF, 0x35, 0xAF, 0xA1, 0x6E, 0x02, 0x73, 0xB6,-    0xD3, 0x39, 0xC0, 0x09, 0x95, 0xBF, 0x6F, 0x60,-    0xA7, 0x14, 0xEF, 0x18, 0x0E, 0xBB, 0x93, 0x15-  },-  {-    0xAE, 0x15, 0x6D, 0x43, 0xA7, 0x2C, 0x04, 0x29,-    0x42, 0x59, 0x58, 0x78, 0xA7, 0x83, 0x07, 0x97,-    0x60, 0xF5, 0x21, 0xED, 0xB8, 0xB2, 0xC3, 0xD4,-    0x1A, 0x56, 0x6B, 0x7C, 0xF7, 0x4A, 0x4A, 0x08,-    0xEA, 0x0F, 0x11, 0x9D, 0x24, 0x0A, 0x62, 0xEC,-    0x73, 0xB9, 0x50, 0x97, 0x88, 0xFA, 0x3A, 0xED,-    0xF1, 0x20, 0xEE, 0x88, 0xCB, 0x95, 0x1B, 0x69,-    0x3F, 0x8F, 0x7C, 0xAF, 0x8C, 0xBA, 0x37, 0x7F-  },-  {-    0x93, 0x30, 0xAA, 0xCA, 0x8C, 0x08, 0x84, 0x46,-    0x58, 0xC2, 0x95, 0x06, 0xB1, 0xC3, 0x42, 0x72,-    0xE2, 0xB3, 0xC7, 0xB4, 0xE7, 0x5E, 0x6F, 0xE9,-    0x9A, 0x01, 0x07, 0xEC, 0x5D, 0xA4, 0x53, 0x0F,-    0xB1, 0xC8, 0x8C, 0xAA, 0x66, 0xDD, 0x9C, 0x47,-    0x1E, 0x01, 0xCA, 0x21, 0xA1, 0x3A, 0x5D, 0x6F,-    0x82, 0x15, 0xDE, 0xD3, 0x14, 0x7E, 0x94, 0xDE,-    0x20, 0x88, 0x57, 0x1F, 0xD1, 0xBF, 0x23, 0xB6-  },-  {-    0xC1, 0x29, 0xF2, 0x2C, 0x50, 0xF5, 0x99, 0x72,-    0x32, 0xE2, 0xB9, 0xF9, 0x3D, 0xFA, 0xA0, 0x0A,-    0xD8, 0xA5, 0x34, 0x29, 0xF9, 0xD1, 0x5B, 0x98,-    0x42, 0xE3, 0xAE, 0x08, 0xD8, 0x49, 0xEB, 0xDD,-    0x45, 0x23, 0x8C, 0x85, 0xF9, 0x2C, 0x6F, 0x91,-    0x7E, 0x0F, 0x8F, 0x6F, 0x94, 0xE2, 0x34, 0xBE,-    0x07, 0x61, 0x68, 0xE0, 0xDF, 0x43, 0xD0, 0x28,-    0x45, 0x52, 0x79, 0xA6, 0xFF, 0x65, 0xDC, 0x84-  },-  {-    0x0E, 0x2B, 0x4B, 0xC2, 0xF6, 0xA7, 0x5B, 0xE4,-    0xB7, 0xC9, 0xD4, 0xB5, 0x3D, 0x10, 0x4D, 0xA0,-    0x65, 0x85, 0x8D, 0x38, 0x7B, 0x34, 0x0B, 0xC1,-    0x63, 0x4F, 0x3A, 0x83, 0x32, 0xD5, 0x4C, 0xAA,-    0x94, 0x30, 0x24, 0xB2, 0x13, 0xDC, 0x8D, 0x4F,-    0x21, 0x9E, 0xC8, 0xE1, 0xDE, 0xCA, 0xC7, 0xD5,-    0xC6, 0xAE, 0x69, 0xC9, 0xEF, 0xD8, 0x81, 0x49,-    0x36, 0x78, 0x38, 0x20, 0x5D, 0x0D, 0xC7, 0xC0-  },-  {-    0x83, 0xB5, 0x43, 0x85, 0x3B, 0x81, 0x42, 0xA8,-    0x3B, 0xEF, 0xF0, 0x73, 0x5F, 0x20, 0x18, 0x91,-    0xE7, 0xFF, 0xC6, 0x7D, 0xBD, 0xCD, 0x21, 0xA4,-    0x22, 0xBB, 0x33, 0x6D, 0xE3, 0x29, 0x72, 0xAE,-    0x03, 0x92, 0x64, 0x6F, 0x68, 0x27, 0xD8, 0x0C,-    0xDA, 0x65, 0x4F, 0xD3, 0xA0, 0x77, 0x4C, 0xD2,-    0xF9, 0x95, 0x51, 0x7C, 0xF0, 0x64, 0xC6, 0x17,-    0xF2, 0x1A, 0x54, 0x27, 0x5F, 0xE5, 0x0C, 0x8D-  },-  {-    0x09, 0xBE, 0x15, 0xEB, 0x6A, 0x5C, 0x22, 0x6F,-    0x6D, 0x95, 0x08, 0xCB, 0xA4, 0xA2, 0x51, 0x9F,-    0xBA, 0x17, 0x2A, 0xF8, 0x37, 0x58, 0x27, 0xD7,-    0x54, 0xA7, 0xA1, 0xBC, 0x19, 0x25, 0xD1, 0x3F,-    0x5E, 0x63, 0x43, 0xF3, 0xE1, 0x4D, 0x08, 0xA0,-    0x6E, 0x8D, 0x37, 0xF8, 0xEC, 0x56, 0xFB, 0x43,-    0x8E, 0x62, 0x36, 0x66, 0xB6, 0xFB, 0x0E, 0x23,-    0xFB, 0x50, 0x47, 0x7D, 0x41, 0x1B, 0x0C, 0x3A-  },-  {-    0xC3, 0x57, 0x97, 0xE9, 0x83, 0x2D, 0x3E, 0x23,-    0x23, 0x33, 0x5B, 0x8C, 0x19, 0xC5, 0xFA, 0x74,-    0x91, 0x60, 0x2D, 0xBF, 0x6B, 0xEA, 0x77, 0xFA,-    0xEE, 0xC9, 0x51, 0x0B, 0xC2, 0xE8, 0x91, 0xC8,-    0xC3, 0x46, 0x21, 0x99, 0xF6, 0x04, 0x18, 0xD2,-    0xE0, 0xAB, 0xFF, 0xE3, 0x1B, 0x61, 0x3B, 0xB9,-    0x80, 0xEA, 0x32, 0xB7, 0x6C, 0x82, 0x43, 0x8D,-    0x02, 0x5F, 0x67, 0x8C, 0xAF, 0x48, 0x24, 0xA4-  },-  {-    0xCF, 0xC0, 0x57, 0xFD, 0xA7, 0x8A, 0x50, 0x31,-    0x8F, 0x49, 0x78, 0xFF, 0xFF, 0xAF, 0x77, 0x17,-    0x98, 0xE1, 0x2C, 0x3E, 0xA8, 0xC7, 0x98, 0x19,-    0x5B, 0xC5, 0xB4, 0xE6, 0x89, 0x1E, 0x61, 0xAA,-    0x25, 0xF7, 0xAF, 0x4A, 0xA7, 0x28, 0x6A, 0xC8,-    0x50, 0x76, 0x62, 0xC9, 0x07, 0xED, 0x91, 0x3E,-    0xDA, 0x65, 0x8F, 0x63, 0xFC, 0x47, 0x99, 0x7C,-    0x59, 0xB8, 0x59, 0x70, 0xF8, 0x78, 0xCA, 0x18-  },-  {-    0xD8, 0xEB, 0xE0, 0xE6, 0x38, 0xFC, 0x53, 0x5B,-    0x52, 0xCB, 0x0A, 0xFC, 0xE0, 0xF8, 0x2D, 0xDE,-    0x28, 0x57, 0x01, 0xAF, 0xF3, 0x29, 0xA5, 0x4B,-    0xA0, 0x6D, 0xFD, 0x3D, 0x1B, 0x4B, 0x31, 0xF9,-    0xF4, 0xB2, 0x4D, 0x9D, 0x68, 0x36, 0xF1, 0x22,-    0x3D, 0x6D, 0xE6, 0x6B, 0xAE, 0x78, 0x88, 0xFE,-    0xBC, 0x20, 0x40, 0xCF, 0xE9, 0x30, 0xE6, 0x9C,-    0xED, 0x59, 0xDA, 0x6D, 0xA8, 0xA0, 0xA6, 0xA6-  },-  {-    0x16, 0xB8, 0xC5, 0x5C, 0xF2, 0xF1, 0x35, 0xA4,-    0x32, 0x59, 0x0D, 0x2D, 0x4C, 0xFA, 0x38, 0x59,-    0x2F, 0x59, 0x35, 0xF8, 0xE7, 0x1C, 0xE0, 0x8A,-    0x02, 0x06, 0xA0, 0xE5, 0xAB, 0xEA, 0x90, 0xB2,-    0xE1, 0x07, 0xEB, 0x86, 0xB9, 0x18, 0x82, 0x3B,-    0xDD, 0x3B, 0xD2, 0x66, 0x07, 0x22, 0xC8, 0xDB,-    0xFA, 0x66, 0xAB, 0xB9, 0xF8, 0x63, 0x8E, 0x46,-    0x34, 0x02, 0xF6, 0x57, 0xA1, 0x68, 0x64, 0x0A-  },-  {-    0x6A, 0x6E, 0x89, 0x38, 0x4F, 0x53, 0x5F, 0x02,-    0x17, 0x6C, 0x48, 0xA9, 0x93, 0xD3, 0x68, 0x7B,-    0x38, 0x9B, 0xFC, 0x03, 0x05, 0x0C, 0x77, 0x70,-    0x86, 0x35, 0x5C, 0x1A, 0x55, 0x59, 0x77, 0x42,-    0xF0, 0xB7, 0x48, 0x34, 0xA7, 0x1D, 0x05, 0x2A,-    0xE8, 0xA8, 0x3D, 0xC3, 0x4A, 0x8F, 0xD7, 0xBA,-    0x5A, 0xA6, 0x9D, 0xBD, 0x61, 0x2A, 0x4C, 0x22,-    0xDF, 0x4F, 0x74, 0xE2, 0x52, 0x8F, 0xB7, 0xA3-  },-  {-    0x1E, 0x40, 0x38, 0xCF, 0xA5, 0x0D, 0x8B, 0x13,-    0xEF, 0x68, 0xBE, 0xC3, 0xB0, 0xFF, 0xD5, 0x62,-    0xA0, 0x7A, 0xD6, 0x34, 0xB5, 0x82, 0x82, 0x57,-    0xDB, 0xA8, 0x73, 0x04, 0xF8, 0x23, 0xA9, 0x00,-    0x49, 0x2A, 0x31, 0x37, 0x19, 0x8B, 0x60, 0x5C,-    0xC7, 0xF7, 0x7C, 0x33, 0xB8, 0xCA, 0x3D, 0x94,-    0x0F, 0xD9, 0xB3, 0x38, 0xCF, 0x6B, 0x7B, 0x36,-    0xE7, 0xD9, 0xD9, 0x27, 0x20, 0x97, 0x93, 0xD0-  },-  {-    0x5B, 0xA6, 0xCD, 0x98, 0x8F, 0xF9, 0xA4, 0x81,-    0x91, 0x42, 0x21, 0x7E, 0xD6, 0x5D, 0x43, 0x7B,-    0x41, 0x3B, 0xA5, 0x02, 0x6B, 0x55, 0x4D, 0x8D,-    0x94, 0xEA, 0x27, 0x02, 0xC0, 0x96, 0xD1, 0x01,-    0x47, 0x75, 0xDB, 0xA2, 0xCA, 0xE9, 0x6F, 0x1E,-    0x2E, 0x72, 0x29, 0xC3, 0x78, 0xF2, 0x0B, 0x03,-    0x89, 0xE1, 0x19, 0x54, 0x7F, 0xDD, 0x35, 0x22,-    0x4A, 0x61, 0x7F, 0xCD, 0xCD, 0x0C, 0xB3, 0xAF-  },-  {-    0x2D, 0x20, 0x96, 0x12, 0x30, 0xE2, 0x50, 0xF8,-    0x1D, 0xDC, 0xD2, 0xD2, 0xAB, 0x3E, 0xF0, 0xDA,-    0xCF, 0x96, 0x85, 0x1E, 0xBA, 0xE5, 0x96, 0x34,-    0x47, 0x19, 0x2C, 0xDB, 0x89, 0xE4, 0x8E, 0x84,-    0xF3, 0x96, 0xEC, 0x9A, 0x09, 0x25, 0x27, 0x84,-    0xE1, 0x73, 0xAD, 0xA5, 0x2A, 0x9C, 0x81, 0xAC,-    0xDA, 0xB3, 0xD8, 0xD6, 0x83, 0x80, 0x24, 0x7A,-    0xE9, 0x75, 0x23, 0x9B, 0x01, 0x7D, 0xC1, 0xCE-  },-  {-    0x35, 0x38, 0x3E, 0xA7, 0x76, 0x2B, 0x55, 0x31,-    0x0A, 0x7D, 0x57, 0xFB, 0xD5, 0xA5, 0x49, 0x97,-    0x57, 0x9B, 0x0B, 0xA3, 0x9A, 0x4E, 0xB8, 0x87,-    0x94, 0x2B, 0xD1, 0x4F, 0xD8, 0x48, 0x31, 0x88,-    0xE5, 0x00, 0x48, 0x83, 0x8D, 0x6C, 0x02, 0xDC,-    0x75, 0x89, 0x59, 0xA9, 0xF7, 0x4D, 0x83, 0x37,-    0x27, 0x43, 0xE8, 0x64, 0xC6, 0x01, 0xED, 0x70,-    0x40, 0xA9, 0xE8, 0x71, 0x52, 0xD4, 0xCF, 0xFB-  },-  {-    0x0B, 0x22, 0x3B, 0x6A, 0x1C, 0x2D, 0x3A, 0xB3,-    0xF9, 0x07, 0x7A, 0x31, 0x7B, 0x7F, 0xE3, 0x2F,-    0x6F, 0x95, 0x7B, 0x7B, 0x17, 0x41, 0xF2, 0x71,-    0x77, 0x71, 0x83, 0x4D, 0x37, 0x96, 0xA1, 0x9B,-    0xA3, 0x62, 0x73, 0xC9, 0xEE, 0xD6, 0x4C, 0x07,-    0xFA, 0x4E, 0x9A, 0xF7, 0xA9, 0x8A, 0xCE, 0x9C,-    0x78, 0x9A, 0x79, 0xA5, 0xA0, 0xF9, 0x4D, 0x04,-    0x05, 0xAA, 0xF0, 0x4A, 0xF3, 0x1E, 0xD7, 0x97-  },-  {-    0x5A, 0x00, 0x7F, 0x58, 0x95, 0x52, 0x4A, 0x5E,-    0x80, 0x37, 0x03, 0x6E, 0x0F, 0x26, 0x39, 0xFD,-    0xA8, 0xC5, 0xC1, 0x51, 0x2D, 0x76, 0xE9, 0xD1,-    0x9B, 0x3D, 0xD2, 0xD5, 0xBA, 0x43, 0xF5, 0x07,-    0x97, 0x41, 0xA4, 0x58, 0x31, 0x3C, 0x5E, 0x02,-    0x40, 0x0C, 0xE0, 0x2C, 0xB6, 0x56, 0x80, 0xBE,-    0x28, 0x2E, 0xAC, 0xD9, 0xA2, 0x54, 0xEF, 0x1C,-    0xDD, 0xEE, 0xBD, 0xCE, 0xE8, 0x5D, 0x41, 0x87-  },-  {-    0xBE, 0x4D, 0xD1, 0xCC, 0xBD, 0xE1, 0x67, 0x00,-    0x04, 0xD0, 0xEF, 0xAB, 0x65, 0x43, 0xE9, 0x1C,-    0x4E, 0x46, 0x64, 0xE5, 0xA2, 0xA8, 0x8B, 0xAC,-    0x6D, 0xD2, 0x7D, 0x27, 0x64, 0x8D, 0x30, 0x2A,-    0x06, 0x5B, 0xE6, 0x07, 0x8B, 0x22, 0xE4, 0xC4,-    0xAB, 0x4F, 0x7F, 0x7C, 0xBF, 0xAF, 0xC1, 0xAD,-    0x86, 0xEC, 0x2A, 0x50, 0x4F, 0xE5, 0x85, 0x17,-    0x66, 0xF7, 0xA3, 0x24, 0x47, 0x57, 0xCB, 0x6F-  },-  {-    0x0F, 0xB4, 0x48, 0x3F, 0x96, 0x59, 0x29, 0x6C,-    0xB9, 0x24, 0x5B, 0x57, 0x79, 0x2A, 0x1E, 0x6A,-    0x99, 0xF2, 0x87, 0x90, 0x07, 0x72, 0x87, 0x96,-    0x8A, 0xB3, 0xEF, 0x35, 0x89, 0xE6, 0x90, 0x24,-    0x06, 0xF1, 0xF3, 0x9D, 0xCC, 0xE0, 0x06, 0x1D,-    0xEA, 0x94, 0x0F, 0xC8, 0xC1, 0xC4, 0x9F, 0x4B,-    0x54, 0x5E, 0xED, 0x59, 0xE9, 0x6D, 0xDA, 0xE9,-    0x6A, 0x6C, 0x35, 0xB5, 0x59, 0x3C, 0x29, 0x77-  },-  {-    0x41, 0xD1, 0xFA, 0xDC, 0x60, 0xA4, 0x6C, 0x9A,-    0xD0, 0x12, 0x0A, 0x3F, 0x54, 0xD0, 0x05, 0xF5,-    0xA1, 0x07, 0x5E, 0x2F, 0x71, 0xEE, 0x0D, 0xA6,-    0x18, 0xBA, 0xC1, 0x46, 0x1E, 0xFA, 0xE9, 0x69,-    0xEC, 0xCD, 0x7A, 0xA5, 0x75, 0xC4, 0xCD, 0xAE,-    0x97, 0x1D, 0xED, 0x13, 0xAE, 0x13, 0xC5, 0x06,-    0x87, 0x2C, 0xEC, 0xB5, 0xB2, 0x08, 0xFA, 0x72,-    0xA9, 0x48, 0x40, 0x02, 0x3E, 0xDB, 0x3E, 0xFE-  },-  {-    0x2F, 0x7F, 0xDC, 0x1D, 0xA4, 0x4B, 0x6E, 0x5D,-    0x2D, 0xEC, 0xDE, 0x82, 0x1A, 0xAF, 0x4B, 0x49,-    0x16, 0x8C, 0x02, 0xE8, 0xD5, 0xF2, 0x5D, 0x5C,-    0x69, 0x98, 0x71, 0x08, 0x3A, 0xEB, 0xD9, 0x28,-    0xB7, 0x4D, 0xC2, 0x2D, 0xCB, 0xED, 0xFA, 0xBA,-    0x93, 0x16, 0xAE, 0xFC, 0xA8, 0x48, 0xD1, 0x5F,-    0x05, 0x17, 0x32, 0x99, 0x03, 0xD3, 0x4B, 0x83,-    0x70, 0xDD, 0xF9, 0xBD, 0x58, 0xC6, 0xD0, 0xCD-  },-  {-    0x88, 0x55, 0x8A, 0x46, 0x4E, 0xE1, 0xA8, 0x80,-    0x3B, 0x23, 0x95, 0xAF, 0x6A, 0x64, 0x90, 0x84,-    0x2B, 0x5C, 0xD4, 0x3D, 0x41, 0xF6, 0xC0, 0x7C,-    0xD6, 0xC5, 0xF8, 0x5F, 0x82, 0xF5, 0x84, 0x32,-    0xA0, 0xB1, 0x62, 0xB4, 0x38, 0xBF, 0x0C, 0xB7,-    0x08, 0x2A, 0x76, 0x73, 0xE2, 0x87, 0xD6, 0xB9,-    0x0F, 0x8D, 0x0D, 0xC8, 0xAA, 0x5C, 0xEB, 0xA3,-    0x6B, 0xFA, 0x77, 0xB1, 0x5B, 0xA0, 0x69, 0x16-  },-  {-    0xEC, 0xC1, 0x49, 0x91, 0x7B, 0x26, 0x63, 0x98,-    0xB6, 0xF3, 0x29, 0x7E, 0x96, 0x96, 0x73, 0xB1,-    0x4E, 0xAE, 0x69, 0xCE, 0x43, 0x67, 0x1F, 0xD3,-    0xC6, 0xC2, 0x15, 0xC7, 0xCF, 0x42, 0xDE, 0xA1,-    0x02, 0xFC, 0x6B, 0xD9, 0x0C, 0x87, 0xDB, 0xD4,-    0x29, 0x02, 0x51, 0x12, 0x9C, 0xC1, 0x9B, 0x38,-    0xCC, 0xF0, 0x0C, 0xBD, 0xB1, 0x6D, 0xD8, 0xDE,-    0x51, 0x58, 0x60, 0x1A, 0x41, 0x6B, 0x1F, 0x00-  },-  {-    0xED, 0x30, 0x12, 0xF8, 0x9D, 0x71, 0xED, 0x13,-    0xBB, 0x82, 0x72, 0xEC, 0xDC, 0x3D, 0x0F, 0x51,-    0xE1, 0x4A, 0x37, 0xC1, 0xEF, 0x77, 0x57, 0x77,-    0x7A, 0xDA, 0x67, 0x12, 0x78, 0x4B, 0xE1, 0x6E,-    0xCF, 0xD3, 0xE6, 0x40, 0x58, 0x30, 0xF5, 0x1D,-    0xB3, 0x3D, 0xCB, 0x85, 0x52, 0x92, 0x93, 0xE2,-    0x3E, 0x47, 0x3A, 0xBF, 0x8C, 0x5C, 0x76, 0x55,-    0xD0, 0xC4, 0xF1, 0x52, 0xD0, 0x48, 0xBA, 0xB2-  },-  {-    0x09, 0x7A, 0x81, 0x19, 0x1E, 0x10, 0x05, 0x67,-    0x6D, 0x6E, 0x22, 0xA9, 0x63, 0x48, 0xFA, 0x4A,-    0x7C, 0x95, 0x61, 0xFD, 0x4D, 0x22, 0x8E, 0xB2,-    0x5F, 0x29, 0x47, 0x56, 0xBB, 0x87, 0xA2, 0xBA,-    0x88, 0x47, 0x5B, 0x03, 0x6F, 0x79, 0xFE, 0x37,-    0x3D, 0x75, 0x40, 0x87, 0x05, 0x52, 0x00, 0x1D,-    0x54, 0x79, 0x5F, 0x25, 0x92, 0x39, 0xBE, 0x6D,-    0x32, 0xC4, 0x87, 0xD1, 0x94, 0x4F, 0x1F, 0xE7-  },-  {-    0x3F, 0xC7, 0x98, 0xE4, 0x69, 0xD3, 0x90, 0x86,-    0xBA, 0x0B, 0xB4, 0x06, 0x3E, 0x80, 0x5F, 0xDF,-    0xB2, 0x20, 0x8D, 0xE4, 0x99, 0x18, 0x41, 0x73,-    0xF9, 0xA2, 0x36, 0x4D, 0x56, 0xBC, 0xD5, 0x63,-    0xED, 0x61, 0x9B, 0xB6, 0x87, 0x32, 0x24, 0x25,-    0x01, 0x4A, 0x1A, 0xAD, 0x3B, 0xCF, 0x50, 0xD2,-    0x2D, 0x83, 0xA9, 0x9D, 0x09, 0x73, 0x0A, 0x92,-    0xEC, 0x65, 0x46, 0xB3, 0xFC, 0x40, 0xA2, 0xC6-  },-  {-    0x69, 0x12, 0xB4, 0xB3, 0x41, 0xC7, 0xDD, 0x70,-    0x68, 0x37, 0x38, 0xBA, 0x0E, 0x7D, 0xEB, 0xBA,-    0xBF, 0xCA, 0x5F, 0x4F, 0xB0, 0x76, 0x0C, 0x84,-    0x97, 0x76, 0xE9, 0x20, 0x75, 0x0B, 0xF1, 0x37,-    0x89, 0xA6, 0x99, 0x97, 0x96, 0x23, 0x4E, 0x9E,-    0x24, 0x07, 0x15, 0xB2, 0x67, 0x67, 0x78, 0x2B,-    0x85, 0xA6, 0x4D, 0x68, 0x0C, 0x6D, 0x4C, 0xD4,-    0x26, 0xAD, 0x72, 0xB2, 0xFC, 0xE0, 0x81, 0xE8-  },-  {-    0xCE, 0xCD, 0x14, 0x01, 0x50, 0x15, 0x7D, 0xC9,-    0x06, 0xC0, 0xFF, 0x7F, 0x87, 0xC0, 0x08, 0x8F,-    0x31, 0x64, 0x80, 0x78, 0x3B, 0x4F, 0xE0, 0xA5,-    0x94, 0x45, 0x10, 0xC6, 0x4A, 0x87, 0xE3, 0xED,-    0x06, 0x67, 0x97, 0xA2, 0x7C, 0xE9, 0xD0, 0xF2,-    0x84, 0xDC, 0xA5, 0x18, 0x44, 0x18, 0x08, 0xAC,-    0x18, 0x29, 0x0A, 0xFD, 0xC0, 0x31, 0x29, 0x4B,-    0x31, 0xAA, 0x8B, 0x4A, 0x9F, 0xCD, 0x78, 0xF8-  },-  {-    0x2A, 0x2B, 0xED, 0x5D, 0x6A, 0xC0, 0x89, 0x28,-    0x11, 0xA4, 0x09, 0xD9, 0xF1, 0xFF, 0x63, 0x03,-    0xCC, 0xF9, 0x55, 0x44, 0x57, 0x46, 0x99, 0xCD,-    0xA7, 0xF7, 0x35, 0x03, 0x01, 0xF6, 0xD0, 0xC4,-    0xE8, 0x6E, 0x63, 0x5C, 0x80, 0x87, 0x56, 0x66,-    0xE2, 0xBB, 0x39, 0x07, 0x51, 0x0D, 0x0E, 0x72,-    0x12, 0x0F, 0x04, 0x86, 0x5E, 0xDC, 0x4C, 0x6C,-    0xEE, 0xCB, 0x44, 0x62, 0xD6, 0xAF, 0x60, 0xFB-  },-  {-    0x03, 0x85, 0xAE, 0x9B, 0x73, 0x5D, 0xC5, 0x9F,-    0x30, 0x4D, 0x41, 0x4C, 0xA0, 0x43, 0x74, 0x9A,-    0xB5, 0x1A, 0xB6, 0x65, 0xEE, 0x01, 0xBE, 0x5E,-    0x52, 0xDC, 0xF7, 0x25, 0xEE, 0x7D, 0xFE, 0xFE,-    0xA6, 0xAD, 0x73, 0xF3, 0x35, 0xEE, 0xCF, 0x2A,-    0x51, 0x02, 0xE8, 0x88, 0x07, 0xFD, 0xC7, 0x5A,-    0xE6, 0xDC, 0x49, 0x0D, 0x7B, 0x8B, 0x5F, 0x11,-    0x63, 0x03, 0xEF, 0x60, 0xA5, 0xF1, 0x7C, 0x06-  },-  {-    0x0C, 0xA3, 0xFF, 0x03, 0x89, 0x65, 0xC0, 0x3B,-    0xC6, 0x5B, 0xBE, 0x2D, 0x86, 0x6C, 0xE9, 0xE0,-    0xE4, 0xE7, 0xD0, 0x3D, 0xC7, 0xF8, 0x6B, 0xA5,-    0x65, 0x0F, 0x82, 0xDD, 0xB3, 0xA9, 0xAA, 0x84,-    0x6B, 0x2B, 0x1F, 0x55, 0x3B, 0xD8, 0x9F, 0xB4,-    0xF9, 0xB6, 0x2E, 0x3C, 0x7F, 0xAF, 0x9E, 0xC3,-    0x10, 0x9F, 0xA9, 0x0E, 0xE5, 0x6C, 0x24, 0x63,-    0xE6, 0xEF, 0xD1, 0xAB, 0xAD, 0x8E, 0x28, 0xE6-  },-  {-    0x6D, 0xFD, 0x4F, 0x22, 0x18, 0x4E, 0xD0, 0x91,-    0xFD, 0x5A, 0xBA, 0x03, 0x9F, 0xCD, 0x3D, 0xB9,-    0x22, 0xF5, 0xE5, 0x9B, 0xF8, 0x38, 0xC0, 0x37,-    0x35, 0x7F, 0xAD, 0x93, 0x4B, 0x45, 0x10, 0x60,-    0x3F, 0x43, 0xA7, 0x31, 0x9F, 0xFF, 0xA6, 0x23,-    0x86, 0xF8, 0x78, 0x8F, 0xDF, 0x9D, 0xED, 0x40,-    0xC6, 0x66, 0xB4, 0xBD, 0xCA, 0x86, 0xD9, 0x32,-    0x8F, 0xE5, 0x5A, 0xD8, 0x6B, 0x37, 0x2F, 0xC8-  },-  {-    0xA3, 0x18, 0x97, 0x61, 0x02, 0x74, 0x7D, 0x80,-    0x0F, 0x58, 0x4D, 0xF6, 0x5B, 0xFB, 0x44, 0x3B,-    0x85, 0x6F, 0x00, 0x9E, 0x74, 0xF7, 0x29, 0x46,-    0xD0, 0x07, 0x6C, 0xED, 0xAC, 0x04, 0x37, 0x6F,-    0xAB, 0x97, 0x34, 0x53, 0xAD, 0xAD, 0xC3, 0x10,-    0xF7, 0x20, 0x81, 0xCB, 0xBA, 0x96, 0x26, 0x4F,-    0xFE, 0x2B, 0x21, 0xA3, 0xB1, 0x8B, 0xE9, 0xD8,-    0x8C, 0x42, 0x46, 0xCB, 0xA6, 0xD3, 0x09, 0x01-  },-  {-    0xB5, 0xE6, 0xE4, 0xFC, 0xA0, 0xCF, 0x98, 0x48,-    0xA0, 0x05, 0x89, 0xC6, 0x54, 0x57, 0xDB, 0x68,-    0xB3, 0x25, 0x3A, 0x6E, 0x17, 0x78, 0x85, 0x41,-    0x47, 0x2E, 0x1F, 0xB9, 0x48, 0x17, 0xF8, 0x04,-    0x05, 0x4D, 0x07, 0xA5, 0xD3, 0x2D, 0xFA, 0x0C,-    0xDB, 0x6F, 0xB4, 0x4E, 0xED, 0x50, 0xD2, 0x0E,-    0x5F, 0x22, 0x64, 0x36, 0x11, 0x32, 0xFA, 0x5F,-    0xCF, 0xD6, 0xE1, 0xB3, 0x67, 0xC1, 0xBE, 0x28-  },-  {-    0x2E, 0xA4, 0x57, 0x38, 0x29, 0x25, 0xE0, 0x3C,-    0xF8, 0x11, 0x10, 0x05, 0x0E, 0x63, 0x6A, 0xD6,-    0x78, 0xE0, 0xAA, 0x3C, 0xBC, 0x69, 0x00, 0xBD,-    0xEF, 0x27, 0x8A, 0xAA, 0x18, 0xF2, 0x35, 0xE2,-    0x51, 0x60, 0xA2, 0x0E, 0x23, 0xFE, 0x0E, 0x62,-    0xA8, 0x51, 0x1B, 0x5D, 0xD0, 0x59, 0x2F, 0x79,-    0xCB, 0xC8, 0xEB, 0x7D, 0xEA, 0x64, 0xAC, 0x86,-    0x67, 0x49, 0x43, 0x45, 0xC6, 0x89, 0x2D, 0xD4-  },-  {-    0x96, 0xB3, 0x49, 0x8B, 0xCC, 0xD7, 0x8B, 0x5A,-    0x40, 0x1B, 0x27, 0x38, 0x78, 0x7D, 0x28, 0xA9,-    0x8A, 0x0E, 0xDF, 0xDC, 0x7C, 0x0B, 0x5F, 0xF9,-    0x43, 0xCF, 0xE1, 0xB1, 0x4E, 0x9C, 0xF5, 0xD9,-    0xED, 0x43, 0x10, 0x7D, 0xFB, 0xDD, 0x9E, 0x97,-    0x28, 0xD5, 0xFD, 0xD6, 0xF7, 0x1F, 0xBC, 0x77,-    0x0E, 0xAD, 0xDC, 0x4F, 0x2E, 0x40, 0x9A, 0xBE,-    0x71, 0x92, 0x7B, 0xAE, 0x1F, 0x8F, 0x73, 0xD1-  },-  {-    0xCE, 0x1B, 0xFB, 0x9A, 0xFE, 0xD2, 0x8A, 0xF4,-    0xDC, 0x75, 0x35, 0xAD, 0xEF, 0x71, 0xB8, 0xF1,-    0xB8, 0x0A, 0x8D, 0x72, 0x94, 0xB4, 0x11, 0xFD,-    0x1E, 0xD3, 0x93, 0xCF, 0x23, 0x2D, 0x3A, 0x5C,-    0x5D, 0xF2, 0x3D, 0xBB, 0x1D, 0xB2, 0x6D, 0xDD,-    0xF6, 0xF7, 0x45, 0xF8, 0xBC, 0x24, 0xC3, 0x78,-    0x1F, 0x2D, 0xBB, 0xC8, 0x18, 0xA0, 0x0A, 0xE1,-    0xFB, 0x9D, 0x64, 0x63, 0xE9, 0x5F, 0x29, 0x86-  },-  {-    0xE6, 0x4D, 0x37, 0x35, 0x6B, 0x29, 0x6B, 0x36,-    0x93, 0x0E, 0xAB, 0xE4, 0x54, 0xDB, 0x11, 0xB2,-    0x09, 0x7B, 0x0C, 0x04, 0x0B, 0xED, 0x57, 0x98,-    0x87, 0x8D, 0x38, 0xA8, 0xC4, 0xD1, 0xC6, 0xF3,-    0x26, 0x1F, 0x36, 0xBF, 0xF7, 0x64, 0xE3, 0xB4,-    0xD6, 0x06, 0xB3, 0x17, 0xE5, 0xFF, 0x50, 0x04,-    0x18, 0x45, 0x92, 0xB0, 0xB7, 0xDD, 0xFB, 0x8C,-    0x2F, 0xD8, 0x35, 0x23, 0x26, 0xCD, 0xDD, 0xB1-  },-  {-    0x85, 0xE6, 0xFE, 0x54, 0xE1, 0xE7, 0x60, 0x46,-    0xAF, 0x68, 0xF5, 0xC6, 0x04, 0x4C, 0x1E, 0x3F,-    0xFF, 0x3B, 0xFC, 0xA0, 0xBA, 0xEC, 0xAE, 0xF6,-    0xA1, 0xDF, 0x90, 0x35, 0x0D, 0xF2, 0xB0, 0xBE,-    0xC6, 0xA4, 0x20, 0xEE, 0x8F, 0x49, 0xAD, 0x44,-    0x64, 0xEC, 0x4C, 0x1E, 0x7D, 0x71, 0xF6, 0x67,-    0x61, 0x4A, 0xCE, 0xBD, 0xAD, 0xA3, 0xDF, 0x32,-    0x07, 0x79, 0x07, 0x83, 0x23, 0xF6, 0xA8, 0xAF-  },-  {-    0xB1, 0x2F, 0xF1, 0xEB, 0x3B, 0xAB, 0x32, 0x0D,-    0x78, 0x55, 0xB5, 0x49, 0xD7, 0x2B, 0x72, 0x47,-    0x59, 0x91, 0x68, 0x11, 0xCB, 0xCF, 0x3E, 0x1A,-    0x12, 0x82, 0x3F, 0x98, 0xB6, 0x4A, 0xB5, 0xC4,-    0x59, 0x41, 0x61, 0x0F, 0x6B, 0x47, 0x1E, 0x35,-    0xFF, 0x79, 0x28, 0x29, 0xDD, 0x5A, 0xDE, 0x51,-    0x79, 0x12, 0x57, 0x38, 0xF3, 0xF2, 0x37, 0x28,-    0x63, 0x0F, 0x1E, 0xEC, 0x57, 0x77, 0x5A, 0x19-  },-  {-    0xB4, 0xDB, 0xE7, 0x2A, 0x1E, 0x21, 0x69, 0x7A,-    0x47, 0x44, 0xBE, 0x65, 0x00, 0x0C, 0xB1, 0xBA,-    0xD3, 0x7C, 0xE2, 0x14, 0x16, 0xEE, 0x6F, 0xCE,-    0xA8, 0x4E, 0xBA, 0xF1, 0x2A, 0x59, 0xC1, 0x1D,-    0x7C, 0x08, 0x0D, 0xF9, 0x2F, 0xB2, 0xAA, 0x8F,-    0x1C, 0x4E, 0xE8, 0xE2, 0xA2, 0x2D, 0x30, 0xBE,-    0x49, 0x85, 0x82, 0xD7, 0xC5, 0xFB, 0xBA, 0x16,-    0x5A, 0x47, 0x26, 0x89, 0xAF, 0xF6, 0x01, 0xB6-  },-  {-    0x34, 0x82, 0x18, 0xBE, 0x4D, 0xE0, 0x8D, 0xFB,-    0x24, 0x5B, 0xF2, 0x52, 0x86, 0xE3, 0x66, 0x18,-    0x63, 0x1D, 0x3B, 0xDB, 0x58, 0x27, 0xD9, 0xF7,-    0x4F, 0xA0, 0x43, 0x01, 0x66, 0x11, 0x31, 0xA4,-    0xD5, 0x5C, 0x76, 0x09, 0xB1, 0xA6, 0xA0, 0x3B,-    0x85, 0x3F, 0x07, 0x33, 0xE0, 0xAE, 0xC0, 0x26,-    0x16, 0xA0, 0xA4, 0x0E, 0x84, 0x91, 0xF4, 0x94,-    0xD7, 0x6C, 0x15, 0x43, 0xCF, 0xC6, 0x82, 0x14-  },-  {-    0x42, 0x87, 0xE1, 0x9B, 0xAB, 0x1D, 0x4F, 0x75,-    0xE1, 0xD1, 0x97, 0xCB, 0xB4, 0x3F, 0x11, 0x33,-    0x13, 0x07, 0xF2, 0xF7, 0x5B, 0x8D, 0x0D, 0x50,-    0x27, 0x8E, 0xEC, 0x54, 0x09, 0x99, 0xA0, 0x09,-    0xC0, 0x33, 0x73, 0x52, 0x96, 0x07, 0xFD, 0xA6,-    0x05, 0xAA, 0x0F, 0x07, 0x39, 0xE2, 0x0B, 0xD1,-    0xFD, 0xAA, 0x27, 0xD7, 0xC0, 0xCD, 0xC8, 0x28,-    0x4D, 0x98, 0xE6, 0xC7, 0x55, 0xA7, 0x56, 0x2E-  },-  {-    0x08, 0x56, 0x0C, 0x99, 0x88, 0xC8, 0xCE, 0x5A,-    0x88, 0x76, 0xA6, 0x00, 0xB6, 0xE5, 0x12, 0xB4,-    0xE2, 0x43, 0xA4, 0xA4, 0x30, 0x0A, 0xD5, 0xAB,-    0x2F, 0xF0, 0x63, 0x7C, 0xC5, 0x6A, 0x04, 0x41,-    0x64, 0x5B, 0x3D, 0xEB, 0x16, 0x84, 0x06, 0x4E,-    0xA4, 0x3B, 0xAE, 0x1C, 0xB6, 0x2D, 0x3B, 0xC4,-    0x15, 0x37, 0xFE, 0x8D, 0x7D, 0xEC, 0xA7, 0x17,-    0x29, 0x37, 0x77, 0x6B, 0xBE, 0xD7, 0x93, 0xA9-  },-  {-    0xB5, 0x36, 0x16, 0x23, 0x94, 0x77, 0x6F, 0xA7,-    0xDD, 0x5E, 0x9F, 0xDD, 0x01, 0x53, 0x0F, 0xDA,-    0x52, 0xBE, 0x1D, 0x39, 0xBD, 0x60, 0x9B, 0x3F,-    0x3B, 0xD0, 0x47, 0x6B, 0x81, 0x60, 0xAA, 0x18,-    0xAB, 0x2D, 0x37, 0xD2, 0x99, 0x16, 0x28, 0xBE,-    0x2F, 0xCC, 0x12, 0x56, 0xCD, 0x48, 0x55, 0x25,-    0xD1, 0xFA, 0x35, 0x6B, 0x04, 0xD3, 0x0E, 0x4A,-    0x0F, 0x9F, 0xFF, 0xC9, 0x93, 0x5C, 0xF4, 0x32-  },-  {-    0x02, 0xAB, 0xC9, 0x71, 0x75, 0xED, 0xB4, 0x7A,-    0x4C, 0xB4, 0xBD, 0x38, 0xD8, 0x2F, 0x86, 0xAA,-    0x09, 0x9C, 0x8B, 0x8F, 0xA8, 0xAB, 0x3F, 0xE1,-    0xCE, 0x10, 0x5A, 0x22, 0xBD, 0x61, 0x65, 0x78,-    0xC6, 0xDD, 0x15, 0x15, 0xDF, 0xB0, 0x39, 0x7E,-    0x1D, 0x9D, 0x06, 0x71, 0x91, 0x6D, 0xE4, 0xB5,-    0x22, 0xE7, 0x4E, 0x63, 0x75, 0x23, 0x68, 0x93,-    0xC8, 0xFD, 0xA6, 0xD2, 0x36, 0xBC, 0x8D, 0xA1-  },-  {-    0x21, 0xE1, 0xEB, 0x73, 0x12, 0x76, 0xA8, 0x35,-    0xA6, 0xDD, 0xEA, 0x71, 0x78, 0xB2, 0x3E, 0xBC,-    0x9A, 0xEC, 0xAA, 0xBC, 0x7C, 0xCD, 0x70, 0x65,-    0x87, 0xD7, 0x1B, 0x85, 0x44, 0x97, 0x93, 0xB0,-    0x7E, 0x7B, 0x17, 0x9A, 0x3D, 0xA7, 0xA5, 0x71,-    0x98, 0x29, 0x97, 0xE8, 0xF5, 0xA6, 0x7F, 0x8C,-    0x93, 0xDA, 0xF1, 0x1A, 0xAA, 0x23, 0xF0, 0x7E,-    0x4D, 0xF7, 0xA1, 0x31, 0x05, 0xA5, 0x42, 0x09-  },-  {-    0x1C, 0xC5, 0x37, 0xD3, 0xE5, 0x0E, 0xD9, 0xFD,-    0xCD, 0xC4, 0xF3, 0xCC, 0xB4, 0x81, 0x93, 0x75,-    0x41, 0x53, 0x04, 0xD8, 0xE5, 0xA6, 0xC0, 0x58,-    0x05, 0xB6, 0xB5, 0xD9, 0xE1, 0xFC, 0x18, 0x25,-    0x68, 0x64, 0xF1, 0x0C, 0xD8, 0x12, 0xF8, 0x48,-    0x01, 0xB8, 0x61, 0x6A, 0x92, 0xB4, 0x07, 0x95,-    0xA1, 0x55, 0x93, 0x24, 0x64, 0xF6, 0x2D, 0xBF,-    0x6E, 0xBD, 0x2F, 0x9A, 0xC3, 0xEE, 0x28, 0x16-  },-  {-    0x6F, 0x6C, 0xD2, 0x60, 0x05, 0xC8, 0xA5, 0x61,-    0xCF, 0xF5, 0x1E, 0x30, 0x1D, 0x1A, 0x06, 0x8F,-    0xC2, 0x8B, 0x9B, 0x65, 0x0D, 0xDD, 0x27, 0xAE,-    0x97, 0xB5, 0x22, 0xDA, 0xE9, 0x63, 0x91, 0x34,-    0xD5, 0xA1, 0x50, 0x58, 0x7B, 0x0A, 0x90, 0x1F,-    0x3B, 0x9A, 0xAB, 0xC7, 0xE3, 0x97, 0x84, 0x98,-    0x4C, 0xC5, 0x85, 0x23, 0x5D, 0x8E, 0x17, 0xCE,-    0x9E, 0x3B, 0x42, 0x10, 0x5B, 0xF9, 0x03, 0x4C-  },-  {-    0x69, 0xC1, 0x7C, 0x28, 0x64, 0xC3, 0x37, 0x9F,-    0xAF, 0xB7, 0x14, 0xC0, 0x47, 0x5E, 0x00, 0xCF,-    0x7C, 0x9B, 0x37, 0x7D, 0x57, 0xA8, 0xBC, 0x96,-    0x98, 0xB4, 0xD3, 0x4A, 0x54, 0x85, 0x41, 0x76,-    0xA2, 0xF8, 0xD1, 0x5A, 0xFB, 0x54, 0x77, 0x56,-    0x04, 0x78, 0x73, 0x90, 0xD6, 0x00, 0x74, 0xCD,-    0x4B, 0xCA, 0x69, 0x02, 0xEA, 0x23, 0xD3, 0xAE,-    0x1A, 0xC0, 0x83, 0x40, 0x9F, 0xE3, 0x8A, 0x4D-  },-  {-    0x86, 0x69, 0xB0, 0xAD, 0x35, 0x82, 0x9E, 0xDC,-    0x2A, 0x8A, 0x09, 0x85, 0x2B, 0x0E, 0xE9, 0xB3,-    0x90, 0x3B, 0xF6, 0xC1, 0xF8, 0x2F, 0x90, 0xA3,-    0xF0, 0xED, 0x95, 0x24, 0x19, 0x2F, 0x10, 0x91,-    0xFD, 0x64, 0x84, 0xE0, 0x4C, 0x3F, 0xEA, 0x8B,-    0x02, 0x2F, 0x4A, 0x89, 0x50, 0xDB, 0x17, 0xD4,-    0x73, 0x41, 0x45, 0xC0, 0xCE, 0xC5, 0xDC, 0x38,-    0x74, 0x55, 0xC1, 0x26, 0x90, 0x3F, 0x77, 0x66-  },-  {-    0x3F, 0x35, 0xC4, 0x5D, 0x24, 0xFC, 0xFB, 0x4A,-    0xCC, 0xA6, 0x51, 0x07, 0x6C, 0x08, 0x00, 0x0E,-    0x27, 0x9E, 0xBB, 0xFF, 0x37, 0xA1, 0x33, 0x3C,-    0xE1, 0x9F, 0xD5, 0x77, 0x20, 0x2D, 0xBD, 0x24,-    0xB5, 0x8C, 0x51, 0x4E, 0x36, 0xDD, 0x9B, 0xA6,-    0x4A, 0xF4, 0xD7, 0x8E, 0xEA, 0x4E, 0x2D, 0xD1,-    0x3B, 0xC1, 0x8D, 0x79, 0x88, 0x87, 0xDD, 0x97,-    0x13, 0x76, 0xBC, 0xAE, 0x00, 0x87, 0xE1, 0x7E-  },-};-----static const uint8_t blake2bp_keyed_kat[KAT_LENGTH][BLAKE2B_OUTBYTES] =-{-  {-    0x9D, 0x94, 0x61, 0x07, 0x3E, 0x4E, 0xB6, 0x40,-    0xA2, 0x55, 0x35, 0x7B, 0x83, 0x9F, 0x39, 0x4B,-    0x83, 0x8C, 0x6F, 0xF5, 0x7C, 0x9B, 0x68, 0x6A,-    0x3F, 0x76, 0x10, 0x7C, 0x10, 0x66, 0x72, 0x8F,-    0x3C, 0x99, 0x56, 0xBD, 0x78, 0x5C, 0xBC, 0x3B,-    0xF7, 0x9D, 0xC2, 0xAB, 0x57, 0x8C, 0x5A, 0x0C,-    0x06, 0x3B, 0x9D, 0x9C, 0x40, 0x58, 0x48, 0xDE,-    0x1D, 0xBE, 0x82, 0x1C, 0xD0, 0x5C, 0x94, 0x0A-  },-  {-    0xFF, 0x8E, 0x90, 0xA3, 0x7B, 0x94, 0x62, 0x39,-    0x32, 0xC5, 0x9F, 0x75, 0x59, 0xF2, 0x60, 0x35,-    0x02, 0x9C, 0x37, 0x67, 0x32, 0xCB, 0x14, 0xD4,-    0x16, 0x02, 0x00, 0x1C, 0xBB, 0x73, 0xAD, 0xB7,-    0x92, 0x93, 0xA2, 0xDB, 0xDA, 0x5F, 0x60, 0x70,-    0x30, 0x25, 0x14, 0x4D, 0x15, 0x8E, 0x27, 0x35,-    0x52, 0x95, 0x96, 0x25, 0x1C, 0x73, 0xC0, 0x34,-    0x5C, 0xA6, 0xFC, 0xCB, 0x1F, 0xB1, 0xE9, 0x7E-  },-  {-    0xD6, 0x22, 0x0C, 0xA1, 0x95, 0xA0, 0xF3, 0x56,-    0xA4, 0x79, 0x5E, 0x07, 0x1C, 0xEE, 0x1F, 0x54,-    0x12, 0xEC, 0xD9, 0x5D, 0x8A, 0x5E, 0x01, 0xD7,-    0xC2, 0xB8, 0x67, 0x50, 0xCA, 0x53, 0xD7, 0xF6,-    0x4C, 0x29, 0xCB, 0xB3, 0xD2, 0x89, 0xC6, 0xF4,-    0xEC, 0xC6, 0xC0, 0x1E, 0x3C, 0xA9, 0x33, 0x89,-    0x71, 0x17, 0x03, 0x88, 0xE3, 0xE4, 0x02, 0x28,-    0x47, 0x90, 0x06, 0xD1, 0xBB, 0xEB, 0xAD, 0x51-  },-  {-    0x30, 0x30, 0x2C, 0x3F, 0xC9, 0x99, 0x06, 0x5D,-    0x10, 0xDC, 0x98, 0x2C, 0x8F, 0xEE, 0xF4, 0x1B,-    0xBB, 0x66, 0x42, 0x71, 0x8F, 0x62, 0x4A, 0xF6,-    0xE3, 0xEA, 0xBE, 0xA0, 0x83, 0xE7, 0xFE, 0x78,-    0x53, 0x40, 0xDB, 0x4B, 0x08, 0x97, 0xEF, 0xFF,-    0x39, 0xCE, 0xE1, 0xDC, 0x1E, 0xB7, 0x37, 0xCD,-    0x1E, 0xEA, 0x0F, 0xE7, 0x53, 0x84, 0x98, 0x4E,-    0x7D, 0x8F, 0x44, 0x6F, 0xAA, 0x68, 0x3B, 0x80-  },-  {-    0x32, 0xF3, 0x98, 0xA6, 0x0C, 0x1E, 0x53, 0xF1,-    0xF8, 0x1D, 0x6D, 0x8D, 0xA2, 0xEC, 0x11, 0x75,-    0x42, 0x2D, 0x6B, 0x2C, 0xFA, 0x0C, 0x0E, 0x66,-    0xD8, 0xC4, 0xE7, 0x30, 0xB2, 0x96, 0xA4, 0xB5,-    0x3E, 0x39, 0x2E, 0x39, 0x85, 0x98, 0x22, 0xA1,-    0x45, 0xAE, 0x5F, 0x1A, 0x24, 0xC2, 0x7F, 0x55,-    0x33, 0x9E, 0x2B, 0x4B, 0x44, 0x58, 0xE8, 0xC5,-    0xEB, 0x19, 0xAA, 0x14, 0x20, 0x64, 0x27, 0xAA-  },-  {-    0x23, 0x6D, 0xB9, 0x33, 0xF1, 0x8A, 0x9D, 0xBD,-    0x4E, 0x50, 0xB7, 0x29, 0x53, 0x90, 0x65, 0xBD,-    0xA4, 0x20, 0xDF, 0x97, 0xAC, 0x78, 0x0B, 0xE4,-    0x3F, 0x59, 0x10, 0x3C, 0x47, 0x2E, 0x0B, 0xCC,-    0xA6, 0xD4, 0x97, 0x38, 0x97, 0x86, 0xAF, 0x22,-    0xBA, 0x94, 0x30, 0xB7, 0x4D, 0x6F, 0x74, 0xB1,-    0x3F, 0x6F, 0x94, 0x9E, 0x25, 0x6A, 0x14, 0x0A,-    0xA3, 0x4B, 0x47, 0x70, 0x0B, 0x10, 0x03, 0x43-  },-  {-    0x23, 0x8C, 0x9D, 0x08, 0x02, 0x85, 0xE3, 0x54,-    0x35, 0xCB, 0x53, 0x15, 0x5D, 0x9F, 0x79, 0x2C,-    0xA1, 0xBB, 0x27, 0xDE, 0x4F, 0x9B, 0x6C, 0x87,-    0x26, 0xE1, 0x1C, 0x02, 0x8E, 0x7B, 0x87, 0x87,-    0x33, 0x54, 0x91, 0x12, 0xA3, 0x28, 0xB5, 0x0E,-    0x8C, 0xD8, 0xBA, 0x27, 0x87, 0x21, 0x7E, 0x46,-    0xB8, 0x16, 0x8D, 0x57, 0x11, 0x3D, 0xD4, 0x04,-    0xD9, 0x14, 0xE2, 0x9A, 0x6A, 0x54, 0x70, 0xE6-  },-  {-    0x9A, 0x02, 0x1E, 0xBD, 0x50, 0x4A, 0x97, 0x59,-    0x6D, 0x0E, 0x85, 0x04, 0x8A, 0xE1, 0xDA, 0x89,-    0x99, 0xE3, 0xA0, 0x47, 0x01, 0x6F, 0x17, 0xC6,-    0xC5, 0x55, 0x6C, 0x27, 0x31, 0xE9, 0xB1, 0x39,-    0x26, 0x1F, 0x84, 0x3F, 0xAD, 0x6B, 0xD4, 0x3F,-    0x7C, 0x7C, 0x58, 0x7F, 0x69, 0x8D, 0x69, 0xB6,-    0x82, 0xE5, 0x68, 0xB4, 0x42, 0xAC, 0x45, 0x88,-    0x98, 0x57, 0xB7, 0x69, 0x07, 0x34, 0xCD, 0xBB-  },-  {-    0x3A, 0xBA, 0x07, 0xAE, 0x98, 0x0E, 0x33, 0x86,-    0x37, 0x47, 0x9D, 0xCA, 0x1E, 0x35, 0x28, 0x00,-    0xF4, 0x58, 0x8E, 0x62, 0xD8, 0x23, 0x36, 0x5A,-    0xA6, 0x9C, 0x5B, 0x25, 0xFC, 0xE1, 0x29, 0x68,-    0xD2, 0x6C, 0x9B, 0xDB, 0xEE, 0x9A, 0x32, 0xBF,-    0xFD, 0x42, 0xE6, 0xB2, 0x2C, 0x81, 0x38, 0xA6,-    0x1C, 0x1F, 0xCE, 0x49, 0xFF, 0xBC, 0x19, 0x0E,-    0x1E, 0x15, 0x16, 0x01, 0x53, 0xCC, 0xB6, 0xB4-  },-  {-    0x77, 0x4C, 0xDF, 0x9A, 0xBB, 0x50, 0x81, 0xFE,-    0x07, 0xEB, 0x57, 0x25, 0xE6, 0x06, 0x9B, 0x8D,-    0x6C, 0x7E, 0x60, 0x04, 0xA2, 0x4D, 0x70, 0xF7,-    0xDF, 0xAB, 0xFC, 0x03, 0x82, 0x5B, 0xBC, 0x3B,-    0x30, 0xE6, 0x20, 0xB6, 0x04, 0x1F, 0x3C, 0xC2,-    0x89, 0x6B, 0x14, 0xAB, 0x66, 0x0A, 0xF7, 0x2E,-    0x24, 0x95, 0x10, 0xAC, 0x2F, 0xE8, 0x10, 0xCC,-    0x77, 0x63, 0xA2, 0xE5, 0xC3, 0xFC, 0xA7, 0xFC-  },-  {-    0x9E, 0x08, 0x9F, 0x51, 0x65, 0x7B, 0x29, 0xC2,-    0x66, 0x8E, 0x28, 0x50, 0x52, 0x4E, 0x53, 0xAE,-    0xAA, 0xA7, 0x30, 0x6F, 0x2A, 0xD5, 0xA2, 0x32,-    0xB5, 0xF0, 0x7F, 0x68, 0x8D, 0x8A, 0xB2, 0xB4,-    0x25, 0xDF, 0x7E, 0xA5, 0xBD, 0x3E, 0x9F, 0xFD,-    0x61, 0x68, 0x38, 0x90, 0x15, 0x1D, 0x78, 0xBB,-    0x94, 0x03, 0x11, 0x85, 0xAC, 0xA4, 0x81, 0xE2,-    0x14, 0x0F, 0xE3, 0x79, 0x85, 0x36, 0x76, 0x43-  },-  {-    0xB3, 0x5B, 0xD5, 0x4E, 0x4F, 0x81, 0x69, 0x6B,-    0x4F, 0x22, 0x31, 0x6A, 0x1E, 0x33, 0x7D, 0x98,-    0xD1, 0xC6, 0xB0, 0x61, 0x10, 0x99, 0x87, 0x63,-    0xB5, 0x91, 0x33, 0x35, 0x92, 0x3A, 0x40, 0x76,-    0xCB, 0x80, 0xD6, 0xD8, 0xA5, 0x18, 0x62, 0x91,-    0x13, 0x47, 0x7B, 0x30, 0xA1, 0x32, 0xA6, 0xB2,-    0x7F, 0xC1, 0xEE, 0x79, 0xF6, 0xB2, 0xE0, 0xD3,-    0x5D, 0x5B, 0xC2, 0x97, 0x27, 0x46, 0x3D, 0xB5-  },-  {-    0x12, 0x39, 0x30, 0xD5, 0xA4, 0xB7, 0x3B, 0x49,-    0x1F, 0x50, 0xE5, 0x6E, 0x2B, 0x73, 0x97, 0xA4,-    0x3D, 0x2E, 0x47, 0x87, 0x23, 0x76, 0x02, 0xB6,-    0x6F, 0xE0, 0xA8, 0x47, 0xBD, 0x13, 0xCB, 0xE8,-    0xB3, 0x7D, 0xC7, 0x03, 0xD7, 0xB2, 0xB4, 0xEA,-    0xA8, 0xBF, 0xB9, 0xA5, 0x8A, 0x7D, 0x71, 0x9C,-    0x90, 0x8F, 0x19, 0x66, 0xA2, 0xF1, 0x9F, 0xE6,-    0xEB, 0x1A, 0x78, 0x96, 0x2A, 0xFA, 0x5B, 0xF9-  },-  {-    0x08, 0x9C, 0xBC, 0x7E, 0xE1, 0xB1, 0x2C, 0x0C,-    0xC9, 0xC8, 0x3F, 0xF6, 0x66, 0xFE, 0xC8, 0x02,-    0x6B, 0xB7, 0x1B, 0x90, 0x84, 0x97, 0x9B, 0x0E,-    0xA8, 0xB7, 0x23, 0xBB, 0xBE, 0x8B, 0x00, 0xD4,-    0x10, 0x08, 0xB6, 0x04, 0x99, 0xF2, 0x4F, 0x24,-    0x1B, 0x63, 0x28, 0x1F, 0xE5, 0xB4, 0xD8, 0x89,-    0x66, 0x30, 0x9C, 0x0D, 0x7E, 0x64, 0x66, 0x91,-    0x05, 0xE5, 0x1E, 0x69, 0xD7, 0xAF, 0x8C, 0xE5-  },-  {-    0x6B, 0x3C, 0x67, 0x89, 0x47, 0xF6, 0x12, 0x52,-    0x65, 0x7C, 0x35, 0x49, 0x78, 0xC1, 0x01, 0xB2,-    0xFD, 0xD2, 0x72, 0x9E, 0xC3, 0x49, 0x27, 0xDD,-    0x5E, 0xFF, 0x0A, 0x7C, 0x0A, 0x86, 0x58, 0x26,-    0xE8, 0x33, 0xC3, 0x63, 0x23, 0x21, 0x31, 0xB1,-    0x05, 0x93, 0xBE, 0x1C, 0xCF, 0x6B, 0xA5, 0x4E,-    0xCC, 0x14, 0x31, 0x2F, 0x45, 0xBF, 0xFC, 0x24,-    0x04, 0x62, 0x9F, 0xF8, 0x02, 0x67, 0xF0, 0x94-  },-  {-    0xAA, 0x0C, 0x23, 0xEA, 0x1C, 0x6F, 0xE2, 0xE9,-    0x0A, 0x77, 0x18, 0xEF, 0x4A, 0xA4, 0x75, 0x1F,-    0xF6, 0xBE, 0xB9, 0xD4, 0x61, 0x63, 0x59, 0x5B,-    0x5D, 0x4F, 0xB8, 0x96, 0x00, 0x52, 0x5C, 0x5B,-    0x6C, 0xF1, 0x9E, 0xCD, 0xB2, 0x47, 0x78, 0x72,-    0xA7, 0xA1, 0x2D, 0x40, 0xE5, 0x06, 0x36, 0x08,-    0xE5, 0xF0, 0x00, 0x8E, 0x79, 0x72, 0xA9, 0xC0,-    0x1A, 0x4B, 0xE2, 0xAF, 0xE9, 0x53, 0x2F, 0x9C-  },-  {-    0x63, 0x34, 0x7A, 0xB4, 0xCB, 0xB6, 0xF2, 0x89,-    0x52, 0x99, 0x2C, 0x07, 0x9D, 0x18, 0xD4, 0x20,-    0x01, 0xB7, 0xF3, 0xA9, 0xD0, 0xFD, 0x90, 0xB0,-    0xA4, 0x77, 0x1F, 0x69, 0x72, 0xF0, 0xC5, 0x32,-    0x89, 0xC8, 0xAE, 0xE1, 0x43, 0x29, 0x4B, 0x50,-    0xC6, 0x34, 0x12, 0x58, 0x5C, 0xDC, 0xE4, 0xFF,-    0x7B, 0xED, 0x11, 0x2C, 0xD0, 0x3C, 0x9B, 0x1D,-    0xF3, 0xDE, 0xF0, 0xCC, 0x32, 0x0D, 0x6B, 0x70-  },-  {-    0x23, 0x96, 0xC0, 0xCB, 0x9E, 0xDA, 0xAC, 0xA9,-    0xD8, 0xB1, 0x04, 0x65, 0x2C, 0xB7, 0xF1, 0x25,-    0xF1, 0x93, 0x55, 0x1A, 0xE5, 0xD7, 0xBC, 0x94,-    0x63, 0x30, 0x7C, 0x9E, 0x69, 0xCA, 0x7D, 0xA2,-    0x3A, 0x9F, 0xBC, 0xBC, 0xB8, 0x66, 0x69, 0xD5,-    0xBA, 0x63, 0x43, 0x85, 0x93, 0xE1, 0x32, 0xF9,-    0x92, 0xB5, 0x7C, 0x00, 0x17, 0xC8, 0x6D, 0xDB,-    0x9B, 0x47, 0x28, 0x6E, 0xF5, 0xB6, 0x87, 0x18-  },-  {-    0xA9, 0x4B, 0x80, 0x22, 0x57, 0xFD, 0x03, 0x1E,-    0xE6, 0x0F, 0x1B, 0xE1, 0x84, 0x38, 0x3A, 0x76,-    0x32, 0x85, 0x39, 0xF9, 0xD8, 0x06, 0x08, 0x72,-    0xEF, 0x35, 0x73, 0xBE, 0xB6, 0xF2, 0x73, 0x68,-    0x08, 0x95, 0x90, 0xED, 0xBB, 0x21, 0xF4, 0xD8,-    0xF1, 0x81, 0xBA, 0x66, 0x20, 0x75, 0xF9, 0x19,-    0x05, 0x97, 0x4B, 0xEE, 0xEF, 0x1F, 0xC5, 0xCB,-    0x9B, 0xCF, 0xB2, 0x8A, 0xAE, 0x1E, 0x4D, 0xE3-  },-  {-    0x52, 0xC7, 0xD3, 0x39, 0x9A, 0x03, 0x80, 0x04,-    0xBE, 0xA5, 0x2D, 0x3E, 0xA9, 0xE9, 0x1E, 0x25,-    0x44, 0xC8, 0x65, 0x2A, 0xB8, 0xF5, 0x28, 0x5C,-    0x9D, 0x32, 0x18, 0x63, 0x7A, 0x6D, 0x9F, 0xCA,-    0xF0, 0xD9, 0x65, 0xB3, 0x58, 0x8E, 0xE6, 0xD7,-    0x3F, 0xA5, 0x99, 0xDE, 0xCA, 0x1F, 0x41, 0xDE,-    0xD8, 0x02, 0x5B, 0xF7, 0x76, 0x8E, 0x0E, 0x20,-    0x0E, 0x8C, 0xD3, 0xFF, 0x86, 0x8C, 0x38, 0x00-  },-  {-    0xB6, 0x29, 0xF5, 0x71, 0x62, 0x87, 0x6A, 0xDB,-    0x8F, 0xA9, 0x57, 0x2E, 0xBA, 0x4E, 0x1E, 0xCD,-    0x75, 0xA6, 0x56, 0x73, 0x08, 0xDE, 0x90, 0xDB,-    0xB8, 0xFF, 0xDE, 0x77, 0xDE, 0x82, 0x13, 0xA4,-    0xD7, 0xF7, 0xCB, 0x85, 0xAE, 0x1B, 0x71, 0xE6,-    0x45, 0x7B, 0xC4, 0xE8, 0x9C, 0x0D, 0x9D, 0xE2,-    0x41, 0xB6, 0xB9, 0xF3, 0x74, 0xB7, 0x34, 0x19,-    0x4D, 0xB2, 0xB2, 0x67, 0x02, 0xD7, 0xCB, 0x7C-  },-  {-    0x72, 0x28, 0x46, 0xDD, 0xAC, 0xAA, 0x94, 0xFD,-    0xE6, 0x63, 0x2A, 0x2D, 0xC7, 0xDC, 0x70, 0x8B,-    0xDF, 0x98, 0x31, 0x1C, 0x9F, 0xB6, 0x3C, 0x61,-    0xE5, 0x25, 0xFD, 0x4B, 0x0D, 0x87, 0xB6, 0x38,-    0x8B, 0x5A, 0xF7, 0x04, 0x20, 0x18, 0xDD, 0xCA,-    0x06, 0x5E, 0x8A, 0x55, 0xBB, 0xFD, 0x68, 0xEE,-    0x61, 0xFC, 0xD3, 0xC6, 0x87, 0x8F, 0x5B, 0x09,-    0xBC, 0xC2, 0x7B, 0xED, 0x61, 0xDD, 0x93, 0xED-  },-  {-    0x1C, 0xED, 0x6A, 0x0C, 0x78, 0x9D, 0xDB, 0x29,-    0x56, 0x78, 0xAD, 0x43, 0xA3, 0x22, 0xD8, 0x96,-    0x61, 0x7F, 0xDE, 0x27, 0x5F, 0x13, 0x8C, 0xCC,-    0xFB, 0x13, 0x26, 0xCD, 0x3F, 0x76, 0x09, 0xC2,-    0xAA, 0xA5, 0xEC, 0x10, 0x26, 0x97, 0x17, 0x3E,-    0x12, 0x1A, 0xE1, 0x63, 0x02, 0x4F, 0x42, 0x8C,-    0x98, 0x28, 0x35, 0xB4, 0xFA, 0x6D, 0xA6, 0xD6,-    0x78, 0xAE, 0xB9, 0xEE, 0x10, 0x6A, 0x3F, 0x6C-  },-  {-    0xE8, 0x69, 0x14, 0x8C, 0x05, 0x45, 0xB3, 0x58,-    0x0E, 0x39, 0x5A, 0xFD, 0xC7, 0x45, 0xCD, 0x24,-    0x3B, 0x6B, 0x5F, 0xE3, 0xB6, 0x7E, 0x29, 0x43,-    0xF6, 0xF8, 0xD9, 0xF2, 0x4F, 0xFA, 0x40, 0xE8,-    0x81, 0x75, 0x6E, 0x1C, 0x18, 0xD9, 0x2F, 0x3E,-    0xBE, 0x84, 0x55, 0x9B, 0x57, 0xE2, 0xEE, 0x3A,-    0x65, 0xD9, 0xEC, 0xE0, 0x49, 0x72, 0xB3, 0x5D,-    0x4C, 0x4E, 0xBE, 0x78, 0x6C, 0x88, 0xDA, 0x62-  },-  {-    0xDA, 0xDA, 0x15, 0x5E, 0x55, 0x42, 0x32, 0xB1,-    0x6E, 0xCA, 0xD9, 0x31, 0xCB, 0x42, 0xE3, 0x25,-    0xB5, 0x86, 0xDB, 0xF1, 0xCB, 0xD0, 0xCE, 0x38,-    0x14, 0x45, 0x16, 0x6B, 0xD1, 0xBF, 0xA3, 0x32,-    0x49, 0x85, 0xE7, 0x7C, 0x6F, 0x0D, 0x51, 0x2A,-    0x02, 0x6E, 0x09, 0xD4, 0x86, 0x1C, 0x3B, 0xB8,-    0x52, 0x9D, 0x72, 0x02, 0xEA, 0xC1, 0xC0, 0x44,-    0x27, 0x44, 0xD3, 0x7C, 0x7F, 0x5A, 0xB8, 0xAF-  },-  {-    0x2D, 0x14, 0x8C, 0x8E, 0x8F, 0x76, 0xFA, 0xAC,-    0x6F, 0x7F, 0x01, 0xF2, 0x03, 0x9E, 0xA0, 0x2A,-    0x42, 0xD9, 0x32, 0x57, 0x94, 0xC2, 0xC7, 0xA0,-    0x0F, 0x83, 0xF4, 0xA7, 0x79, 0x8A, 0xFB, 0xA9,-    0x93, 0xFF, 0x94, 0x91, 0x1E, 0x09, 0x8B, 0x00,-    0x1A, 0x0B, 0xDF, 0xF4, 0xC8, 0x5A, 0x2A, 0x61,-    0x31, 0xE0, 0xCF, 0xE7, 0x0F, 0x1D, 0x2E, 0x07,-    0xAF, 0x02, 0x09, 0xDA, 0x77, 0x96, 0x09, 0x1F-  },-  {-    0x99, 0x98, 0x3A, 0x75, 0x9C, 0xCF, 0x9C, 0xAC,-    0xAE, 0x70, 0x2D, 0xCB, 0xFC, 0xDF, 0x72, 0x04,-    0xDD, 0xF0, 0x33, 0x4B, 0xC6, 0x5D, 0xAD, 0x84,-    0x6F, 0x83, 0x1F, 0x9F, 0x9D, 0x8A, 0x45, 0x3F,-    0x0D, 0x24, 0x93, 0x5C, 0x4C, 0x65, 0x7F, 0xFF,-    0x2E, 0xBB, 0xDB, 0xAF, 0x7B, 0xCE, 0x6A, 0xAC,-    0xDB, 0xB8, 0x87, 0x6F, 0x16, 0x04, 0x59, 0xB1,-    0xA4, 0xAA, 0xC9, 0x56, 0x97, 0xE0, 0x0D, 0x98-  },-  {-    0x7E, 0x4A, 0x02, 0x12, 0x6D, 0x75, 0x52, 0xF4,-    0xC9, 0xB9, 0x4D, 0x80, 0xE3, 0xCF, 0x7B, 0x89,-    0x7E, 0x09, 0x84, 0xE4, 0x06, 0xF0, 0x78, 0x13,-    0x5C, 0xF4, 0x56, 0xC0, 0xD5, 0x1E, 0x13, 0x91,-    0xFF, 0x18, 0xA8, 0x8F, 0x93, 0x12, 0x2C, 0x83,-    0x2C, 0xAC, 0x7D, 0x79, 0x6A, 0x6B, 0x42, 0x51,-    0x9B, 0x1D, 0xB4, 0xEA, 0xD8, 0xF4, 0x98, 0x40,-    0xCE, 0xB5, 0x52, 0x33, 0x6B, 0x29, 0xDE, 0x44-  },-  {-    0xD7, 0xE1, 0x6F, 0xD1, 0x59, 0x65, 0x8A, 0xD7,-    0xEE, 0x25, 0x1E, 0x51, 0x7D, 0xCE, 0x5A, 0x29,-    0xF4, 0x6F, 0xD4, 0xB8, 0xD3, 0x19, 0xDB, 0x80,-    0x5F, 0xC2, 0x5A, 0xA6, 0x20, 0x35, 0x0F, 0xF4,-    0x23, 0xAD, 0x8D, 0x05, 0x37, 0xCD, 0x20, 0x69,-    0x43, 0x2E, 0xBF, 0xF2, 0x92, 0x36, 0xF8, 0xC2,-    0xA8, 0xA0, 0x4D, 0x04, 0xB3, 0xB4, 0x8C, 0x59,-    0xA3, 0x55, 0xFC, 0xC6, 0x2D, 0x27, 0xF8, 0xEE-  },-  {-    0x0D, 0x45, 0x17, 0xD4, 0xF1, 0xD0, 0x47, 0x30,-    0xC6, 0x91, 0x69, 0x18, 0xA0, 0x4C, 0x9E, 0x90,-    0xCC, 0xA3, 0xAC, 0x1C, 0x63, 0xD6, 0x45, 0x97,-    0x8A, 0x7F, 0x07, 0x03, 0x9F, 0x92, 0x20, 0x64,-    0x7C, 0x25, 0xC0, 0x4E, 0x85, 0xF6, 0xE2, 0x28,-    0x6D, 0x2E, 0x35, 0x46, 0x0D, 0x0B, 0x2C, 0x1E,-    0x25, 0xAF, 0x9D, 0x35, 0x37, 0xEF, 0x33, 0xFD,-    0x7F, 0xE5, 0x1E, 0x2B, 0xA8, 0x76, 0x4B, 0x36-  },-  {-    0x56, 0xB7, 0x2E, 0x51, 0x37, 0xC6, 0x89, 0xB2,-    0x73, 0x66, 0xFB, 0x22, 0xC7, 0xC6, 0x75, 0x44,-    0xF6, 0xBC, 0xE5, 0x76, 0x19, 0x41, 0x31, 0xC5,-    0xBF, 0xAB, 0x1C, 0xF9, 0x3C, 0x2B, 0x51, 0xAA,-    0xA3, 0x03, 0x36, 0x8A, 0xA8, 0x44, 0xD5, 0x8D,-    0xF0, 0xEE, 0x5D, 0x4E, 0x31, 0x9F, 0xCD, 0x8E,-    0xFF, 0xC6, 0x02, 0xCE, 0xE4, 0x35, 0x1B, 0xD2,-    0xF5, 0x51, 0x43, 0x0B, 0x92, 0x11, 0xE7, 0x3C-  },-  {-    0xF3, 0x35, 0xCC, 0x22, 0xFF, 0xEA, 0x5A, 0xA5,-    0x9C, 0xDF, 0xC8, 0xF5, 0x02, 0x89, 0xCC, 0x92,-    0x31, 0x9B, 0x8B, 0x14, 0x40, 0x8D, 0x7A, 0x5A,-    0xA1, 0x23, 0x2A, 0xE2, 0x3A, 0xA1, 0xEA, 0x7F,-    0x77, 0x48, 0xCF, 0xEF, 0x03, 0x20, 0x10, 0xF8,-    0x62, 0x6D, 0x93, 0x18, 0xED, 0xBA, 0x98, 0xD4,-    0x16, 0x62, 0x03, 0x35, 0xC9, 0x01, 0xED, 0x02,-    0xEA, 0xBD, 0x27, 0x6A, 0x1B, 0x82, 0x9C, 0x9D-  },-  {-    0xA9, 0x9A, 0x3D, 0x10, 0xF9, 0x5B, 0x44, 0x2F,-    0xFF, 0xF7, 0xC4, 0x18, 0xFA, 0x94, 0x9D, 0x48,-    0x30, 0x86, 0x9B, 0x0E, 0x60, 0xEC, 0x8B, 0x97,-    0x2C, 0x30, 0xA3, 0x16, 0x9C, 0x27, 0xBE, 0xB5,-    0xCF, 0x33, 0x05, 0x94, 0xF0, 0x14, 0xB6, 0x6B,-    0x22, 0x00, 0xA7, 0xF0, 0x86, 0xD2, 0xC2, 0xF3,-    0xF9, 0xFD, 0x85, 0x32, 0xA5, 0x71, 0x88, 0x76,-    0xDF, 0xCA, 0x66, 0x1B, 0xA0, 0xF7, 0xB3, 0x6D-  },-  {-    0x15, 0x8E, 0x25, 0x70, 0xD0, 0x84, 0xA4, 0x86,-    0x9D, 0x96, 0x93, 0x43, 0xC0, 0x10, 0x86, 0x07,-    0x17, 0xFF, 0x74, 0x11, 0x61, 0x88, 0x17, 0x5F,-    0x2E, 0xD7, 0x4C, 0xD5, 0x78, 0xFA, 0x0D, 0x80,-    0x91, 0xB0, 0x3F, 0xAD, 0x0C, 0x65, 0xCF, 0x59,-    0xAB, 0x91, 0xDD, 0x73, 0xB3, 0x7F, 0xE3, 0xF5,-    0x8A, 0x58, 0xE7, 0xB4, 0x47, 0x9C, 0x87, 0x5A,-    0xCD, 0x63, 0xEC, 0x52, 0x58, 0x12, 0x35, 0x3F-  },-  {-    0x7C, 0x49, 0x50, 0x1C, 0x58, 0x08, 0xB1, 0x5C,-    0x0D, 0x31, 0xBD, 0xD5, 0xBB, 0x56, 0x31, 0xD5,-    0x3A, 0xE0, 0x0D, 0xF4, 0x31, 0x02, 0x5F, 0xEA,-    0x51, 0xEB, 0x47, 0x62, 0x54, 0x4E, 0xFD, 0xEE,-    0x97, 0x8A, 0x83, 0x50, 0x8D, 0xEA, 0x6B, 0xFD,-    0x3B, 0x93, 0x1A, 0x0E, 0x95, 0x83, 0xCC, 0xFC,-    0x04, 0x9E, 0xA8, 0x46, 0x44, 0x70, 0x5D, 0x31,-    0x9F, 0xDC, 0x5C, 0x16, 0x3B, 0xF4, 0x82, 0x24-  },-  {-    0xFE, 0xF4, 0x36, 0xB3, 0x5F, 0x71, 0x7D, 0x59,-    0xAC, 0xA1, 0x7E, 0x9B, 0xF5, 0xFF, 0xDA, 0x28,-    0xF5, 0xF4, 0x01, 0x94, 0x3E, 0xFE, 0x93, 0xEB,-    0x58, 0x0F, 0xFB, 0x98, 0xF1, 0x3B, 0xEA, 0x80,-    0x94, 0x69, 0xA3, 0x44, 0xE7, 0x82, 0xA4, 0x43,-    0xC6, 0x4E, 0xB2, 0x5A, 0xD0, 0x9D, 0x8D, 0xE2,-    0x05, 0xFE, 0xE7, 0xD5, 0x63, 0x96, 0x86, 0xA1,-    0x9E, 0x7C, 0x42, 0xB4, 0x0F, 0x70, 0x6A, 0x08-  },-  {-    0x4D, 0x47, 0xA6, 0x7A, 0x5F, 0x8E, 0x17, 0xB7,-    0x22, 0xDF, 0x98, 0x58, 0xAE, 0xB6, 0x7B, 0x99,-    0x56, 0xB4, 0x59, 0x62, 0xEC, 0x35, 0x3D, 0xC2,-    0xE2, 0x7F, 0x0F, 0x50, 0x1C, 0x39, 0x8E, 0x34,-    0x39, 0x7B, 0xEB, 0xE0, 0x2B, 0x54, 0x92, 0x7E,-    0x2D, 0x31, 0xF1, 0x2E, 0xCF, 0x55, 0xE8, 0x82,-    0x69, 0xFA, 0xB5, 0x37, 0x0E, 0x7F, 0xA5, 0x70,-    0x35, 0x26, 0x6F, 0x89, 0xD5, 0xC2, 0x64, 0x41-  },-  {-    0x1B, 0x58, 0xDC, 0x7A, 0xAC, 0x36, 0x3B, 0x00,-    0x44, 0x6E, 0xA8, 0x03, 0xBC, 0xD7, 0x49, 0xC3,-    0xF5, 0xCA, 0xBE, 0xAA, 0xF2, 0x23, 0x99, 0x4C,-    0x0C, 0x3E, 0xCC, 0x1B, 0x28, 0x47, 0x73, 0x44,-    0xD7, 0xBF, 0x97, 0xC0, 0x8A, 0x95, 0x9D, 0x1A,-    0xC2, 0x06, 0x0B, 0x47, 0x27, 0x89, 0x86, 0x92,-    0x91, 0x88, 0xAD, 0x73, 0xDE, 0x67, 0x07, 0x8B,-    0xA6, 0x80, 0x96, 0x3B, 0x9D, 0x3B, 0x12, 0xA4-  },-  {-    0x3C, 0x52, 0x2C, 0x84, 0x3E, 0x69, 0x74, 0xEC,-    0x75, 0x0D, 0xF2, 0x20, 0xD4, 0x1A, 0x00, 0x4A,-    0xC2, 0xAD, 0xF0, 0x94, 0x56, 0xFA, 0x78, 0x7F,-    0x7C, 0x65, 0x43, 0xAB, 0x17, 0x97, 0x9C, 0x77,-    0x7B, 0x3E, 0x79, 0xD1, 0x78, 0x7D, 0xA5, 0xA8,-    0x3F, 0x17, 0x8D, 0xA9, 0xF0, 0x4C, 0xF6, 0xF5,-    0xB2, 0x55, 0xDD, 0xCB, 0x18, 0x74, 0x84, 0x1B,-    0xBF, 0x70, 0x16, 0xE6, 0x13, 0x2B, 0x99, 0x8A-  },-  {-    0x5A, 0x4F, 0xEB, 0x8F, 0x70, 0x75, 0xB4, 0xDC,-    0x9C, 0xA1, 0x6C, 0x6F, 0x05, 0xCD, 0x6B, 0x70,-    0x27, 0x48, 0x5F, 0xFE, 0xD9, 0x15, 0x7D, 0x82,-    0x4D, 0x9D, 0x1A, 0x17, 0x20, 0xEE, 0xEE, 0xEA,-    0x3F, 0x6C, 0x12, 0x5F, 0xDA, 0x4B, 0xA4, 0x40,-    0x9D, 0x79, 0x80, 0x49, 0xFD, 0x18, 0x82, 0xC6,-    0x90, 0x28, 0x8F, 0x33, 0x54, 0x7A, 0x3D, 0x8D,-    0x62, 0x60, 0xB6, 0x54, 0x54, 0x88, 0x53, 0xD7-  },-  {-    0xBC, 0xAA, 0x79, 0x36, 0x32, 0x56, 0x9E, 0x2F,-    0x84, 0x17, 0xCC, 0x60, 0x32, 0x53, 0x53, 0x5B,-    0xD7, 0xD8, 0x5F, 0x38, 0x53, 0x19, 0x92, 0x59,-    0x1E, 0x56, 0xC1, 0xA4, 0xB6, 0xF5, 0x8E, 0xE7,-    0xF8, 0x18, 0xFA, 0xE0, 0x27, 0x88, 0x8A, 0x86,-    0x28, 0x43, 0x05, 0x10, 0x1E, 0xC0, 0x46, 0x61,-    0xF5, 0x99, 0x53, 0x47, 0xA4, 0x67, 0xED, 0x8B,-    0x92, 0x79, 0xF1, 0xAC, 0xC2, 0xB4, 0xBB, 0x1F-  },-  {-    0x34, 0xAF, 0x91, 0xCC, 0x22, 0xA6, 0x9B, 0xCB,-    0x55, 0xDD, 0xBF, 0x7F, 0x0F, 0x43, 0xEC, 0x56,-    0x48, 0x40, 0x43, 0x32, 0x13, 0xEA, 0x55, 0xD9,-    0xF8, 0x1A, 0xC4, 0x75, 0x20, 0x8D, 0x74, 0x85,-    0x1D, 0xB7, 0x0F, 0xE4, 0x96, 0xAF, 0x9D, 0xA1,-    0xD3, 0x93, 0xEC, 0xF8, 0x78, 0x69, 0x5D, 0xD3,-    0x3F, 0xD5, 0x43, 0x49, 0xA6, 0xF8, 0x24, 0xAE,-    0xED, 0x18, 0x3C, 0xB1, 0xB0, 0x8C, 0x54, 0x85-  },-  {-    0xB8, 0xB7, 0xAD, 0x2E, 0xA2, 0xB6, 0xFA, 0x06,-    0xD0, 0x0B, 0xCD, 0x59, 0x9C, 0x99, 0x71, 0xC5,-    0xB4, 0xE1, 0x65, 0x58, 0xE1, 0x52, 0x12, 0xC9,-    0xBF, 0xD3, 0x73, 0xE4, 0xBC, 0x79, 0x17, 0x05,-    0x26, 0x01, 0xFF, 0xDB, 0x68, 0x01, 0xBE, 0x80,-    0xBA, 0x50, 0x9D, 0xB8, 0x2A, 0x0B, 0x71, 0x95,-    0x92, 0x91, 0x33, 0xAD, 0x53, 0x99, 0x56, 0x06,-    0x52, 0x33, 0xF4, 0x9D, 0x07, 0x1C, 0x84, 0xE4-  },-  {-    0xDC, 0xEE, 0x9C, 0x45, 0xBC, 0x5D, 0x1F, 0xE6,-    0x30, 0xB1, 0x8B, 0x06, 0x3C, 0xE8, 0x2C, 0x38,-    0x57, 0xE3, 0x0D, 0x20, 0xC6, 0x4B, 0x5C, 0xC2,-    0x58, 0x84, 0x94, 0x3E, 0x7A, 0xE9, 0x4E, 0xDF,-    0xF8, 0x50, 0xEB, 0x0E, 0x82, 0x44, 0x02, 0x3D,-    0x3D, 0x07, 0xA8, 0xA0, 0x07, 0x06, 0xF0, 0x58,-    0x2C, 0xC1, 0x02, 0xB6, 0x6C, 0x6D, 0xDA, 0x86,-    0xE8, 0xF2, 0xDF, 0x32, 0x56, 0x59, 0x88, 0x6F-  },-  {-    0x04, 0xF6, 0xE8, 0x22, 0xF1, 0x7C, 0xC7, 0xA5,-    0x94, 0x6D, 0xF8, 0x0D, 0x95, 0x8A, 0xEF, 0x06,-    0x5D, 0x87, 0x49, 0x16, 0xE1, 0x03, 0xA6, 0x83,-    0x0C, 0x6E, 0x46, 0xB6, 0x05, 0x59, 0x18, 0x18,-    0x0D, 0x14, 0x52, 0x29, 0x3C, 0x58, 0xA9, 0x74,-    0x9C, 0xBC, 0x8F, 0x0A, 0xC4, 0x08, 0xA9, 0xCA,-    0x89, 0x57, 0x61, 0xCF, 0xC4, 0x51, 0x16, 0x46,-    0x41, 0xA1, 0x79, 0xFB, 0x5C, 0xD8, 0xFE, 0xBC-  },-  {-    0x51, 0x1F, 0xDB, 0x7C, 0x88, 0x26, 0x85, 0x35,-    0xE9, 0x7E, 0x4E, 0xD8, 0x92, 0xF3, 0xC0, 0x65,-    0x83, 0x2B, 0x26, 0x59, 0x14, 0xFC, 0x61, 0x07,-    0xA1, 0xD2, 0x7D, 0xBB, 0x7D, 0x51, 0xC3, 0x7E,-    0x95, 0x98, 0x15, 0x06, 0xC1, 0x14, 0x72, 0x44,-    0xD5, 0xBA, 0xE9, 0x0E, 0xE9, 0x0D, 0x08, 0x49,-    0x84, 0xBA, 0xA7, 0x58, 0x7F, 0x41, 0xFF, 0x6F,-    0x4B, 0xA7, 0x22, 0xC8, 0xB9, 0x2A, 0xEB, 0x99-  },-  {-    0x2B, 0xA2, 0xBD, 0x17, 0xE9, 0x26, 0x27, 0x5B,-    0x06, 0x83, 0xB2, 0x36, 0xBF, 0xE3, 0x76, 0x30,-    0x26, 0x6E, 0x37, 0xF4, 0x18, 0x2F, 0x53, 0xA9,-    0x82, 0x34, 0xE9, 0x15, 0xAB, 0x64, 0xC9, 0x59,-    0x96, 0xC6, 0xCB, 0x7A, 0xE8, 0x80, 0xC3, 0xDF,-    0xCB, 0x47, 0xD0, 0x5A, 0xAD, 0xD2, 0x1A, 0xBF,-    0x8E, 0x40, 0xB7, 0x3F, 0x40, 0xF3, 0x98, 0xDC,-    0x5B, 0x02, 0x14, 0x14, 0x57, 0x45, 0x6A, 0x09-  },-  {-    0x9B, 0x66, 0x8D, 0x9B, 0x44, 0x47, 0xE3, 0x76,-    0xF6, 0xC6, 0xCF, 0xA6, 0x8D, 0xBC, 0x79, 0x19,-    0x83, 0x81, 0xAB, 0x60, 0x5F, 0x55, 0xD5, 0xA7,-    0xEF, 0x68, 0x3B, 0xCE, 0xD4, 0x6F, 0x9A, 0xFD,-    0x36, 0x85, 0x41, 0x1A, 0x66, 0xE2, 0x34, 0x6F,-    0x96, 0x07, 0x77, 0xD0, 0xC9, 0x22, 0x71, 0x24,-    0x30, 0xE0, 0x18, 0xBF, 0xAE, 0x86, 0x53, 0x01,-    0x7E, 0xA2, 0x0E, 0xCD, 0x5F, 0x1F, 0x95, 0x6C-  },-  {-    0x56, 0x81, 0x02, 0x4F, 0x53, 0x85, 0x88, 0xA0,-    0x1B, 0x2C, 0x83, 0x94, 0xCA, 0xE8, 0x73, 0xC6,-    0xD8, 0x5D, 0x6A, 0xA0, 0x6E, 0xDD, 0xB3, 0xA5,-    0x02, 0x09, 0x6F, 0xC0, 0x82, 0xBB, 0x89, 0xCB,-    0x24, 0x15, 0x31, 0xB3, 0x15, 0x75, 0x0D, 0x31,-    0xBB, 0x0B, 0x63, 0x01, 0x28, 0xD1, 0x9D, 0x11,-    0x39, 0x2B, 0xCF, 0x4B, 0x34, 0x78, 0xD5, 0x23,-    0xD7, 0xD2, 0x13, 0xE4, 0x75, 0x0F, 0x55, 0x92-  },-  {-    0x2A, 0xA9, 0x1B, 0xA6, 0xDE, 0x60, 0x17, 0xF1,-    0x93, 0x0F, 0xC7, 0xD9, 0x6D, 0xCC, 0xD6, 0x70,-    0x74, 0x8B, 0x7E, 0xB1, 0xD0, 0x94, 0xDF, 0xB4,-    0xB3, 0xB1, 0x47, 0x8A, 0x61, 0x2E, 0xBF, 0x03,-    0xDD, 0xD7, 0x21, 0x27, 0x9A, 0x26, 0x6D, 0xE3,-    0x88, 0x45, 0xE6, 0x12, 0xC9, 0x30, 0x98, 0xC2,-    0xEF, 0xFF, 0x34, 0xFE, 0x50, 0x06, 0x17, 0x20,-    0x5B, 0x1D, 0xE2, 0xFE, 0xA1, 0xD8, 0x02, 0x46-  },-  {-    0x82, 0x4D, 0x89, 0xC0, 0x63, 0x7C, 0xE1, 0x78,-    0xB6, 0x30, 0x68, 0x4C, 0x72, 0x9E, 0x26, 0x65,-    0x3F, 0x34, 0xEA, 0xC7, 0xE9, 0x04, 0x12, 0xE9,-    0x63, 0xD3, 0xF1, 0x9D, 0x64, 0x51, 0xE8, 0x25,-    0x85, 0x21, 0x67, 0xC4, 0x8D, 0xF7, 0xCC, 0x55,-    0xB2, 0x57, 0xB2, 0x50, 0xA7, 0x0C, 0x7B, 0xCC,-    0xFA, 0x9A, 0xA1, 0x5C, 0x18, 0x8A, 0xC4, 0x63,-    0x7A, 0x52, 0x22, 0x89, 0xC0, 0x87, 0x6A, 0xD4-  },-  {-    0x87, 0xE4, 0xAE, 0x11, 0xDA, 0x1A, 0x2C, 0xA8,-    0x82, 0x2A, 0xE3, 0x30, 0xDC, 0x97, 0xAB, 0x2E,-    0x47, 0xFF, 0x62, 0x32, 0x30, 0x93, 0xC2, 0xB7,-    0xA6, 0xC0, 0xE2, 0xC1, 0x68, 0x21, 0xCD, 0x7C,-    0xEC, 0x92, 0x18, 0x4D, 0xF4, 0xBB, 0x6E, 0x2B,-    0x62, 0x6A, 0x44, 0x78, 0x03, 0x90, 0x63, 0xAF,-    0xEE, 0xB0, 0xD2, 0x87, 0xF2, 0x42, 0x19, 0x20,-    0x78, 0x98, 0xCC, 0xE7, 0xAD, 0xE0, 0x63, 0x9C-  },-  {-    0xDD, 0x7F, 0x2F, 0x44, 0xA4, 0x02, 0xA0, 0x1E,-    0x82, 0x16, 0xB1, 0x03, 0xA4, 0xE7, 0x23, 0x5C,-    0x28, 0x30, 0x31, 0x9D, 0x56, 0xAF, 0x63, 0x9F,-    0x23, 0xC4, 0x8C, 0x27, 0x59, 0xAB, 0xA6, 0xEB,-    0x5E, 0xEE, 0xE3, 0x8C, 0x29, 0x8E, 0xBE, 0x41,-    0x98, 0x26, 0x7A, 0x00, 0xEB, 0x2A, 0x08, 0xD9,-    0x3A, 0x50, 0x37, 0x03, 0x17, 0x1C, 0x77, 0x33,-    0x38, 0x62, 0x10, 0x10, 0x55, 0xBD, 0x7A, 0xD2-  },-  {-    0x4C, 0xB8, 0x46, 0x59, 0x61, 0x93, 0xF7, 0xF2,-    0x78, 0xAA, 0xAA, 0xC5, 0xCC, 0xFF, 0xD5, 0x35,-    0x7A, 0xB0, 0xD1, 0x24, 0x5F, 0x69, 0x79, 0xD1,-    0x41, 0xA4, 0x71, 0xBD, 0xAB, 0x55, 0xE2, 0x38,-    0xB1, 0xAE, 0xD6, 0x7B, 0x73, 0x39, 0x95, 0x04,-    0xB9, 0x7D, 0xF1, 0xA2, 0x5E, 0xB6, 0xFE, 0x27,-    0x2B, 0x5C, 0xD4, 0x96, 0xA7, 0xC8, 0xA0, 0x60,-    0x92, 0x6E, 0x74, 0x04, 0xFD, 0xA0, 0x79, 0x0D-  },-  {-    0x6F, 0x44, 0xEC, 0xDA, 0xE1, 0x4E, 0x3B, 0x81,-    0xA1, 0x91, 0x22, 0x03, 0x01, 0x5F, 0x59, 0x18,-    0xEA, 0xC6, 0xFB, 0xF4, 0x96, 0x60, 0x10, 0xF4,-    0x9D, 0x2B, 0xC2, 0xBC, 0xEF, 0xE7, 0xB1, 0xDF,-    0xEC, 0x5C, 0x83, 0x5D, 0x7D, 0x87, 0xA4, 0x43,-    0x71, 0xF1, 0x5A, 0x6C, 0x08, 0x42, 0x52, 0xB9,-    0x34, 0x65, 0x26, 0x42, 0x72, 0xA4, 0x10, 0xD5,-    0x0F, 0x89, 0xA1, 0x17, 0xF3, 0x1A, 0xF4, 0x63-  },-  {-    0x1F, 0x70, 0x5F, 0x6E, 0x9F, 0x07, 0x0D, 0x87,-    0xFD, 0xE8, 0xE2, 0x77, 0x46, 0x74, 0xFA, 0x9B,-    0xF1, 0x20, 0xD2, 0x88, 0xEB, 0x0B, 0xE7, 0xAA,-    0x12, 0x8D, 0xFB, 0x5D, 0x10, 0x11, 0xCE, 0x1F,-    0xDA, 0x99, 0xB2, 0x55, 0x22, 0x66, 0x65, 0xD8,-    0x3F, 0x63, 0x4E, 0x8F, 0xCA, 0xBD, 0xA9, 0xA2,-    0x3C, 0x03, 0x51, 0x5E, 0x9C, 0xFE, 0xCE, 0x6E,-    0x94, 0xA8, 0xEC, 0x92, 0xE4, 0xED, 0xEC, 0xB7-  },-  {-    0x2D, 0x96, 0xC5, 0xB0, 0x15, 0x74, 0x72, 0x2B,-    0x81, 0x7F, 0xEB, 0x48, 0x6C, 0x5F, 0xC9, 0x8F,-    0x5F, 0x84, 0x61, 0xF4, 0xCE, 0xE9, 0x90, 0x5A,-    0xF2, 0x06, 0xD4, 0x72, 0x33, 0x86, 0xD1, 0xC4,-    0xC7, 0xCA, 0xC5, 0x84, 0x00, 0x28, 0xD7, 0xAF,-    0xED, 0x0E, 0x38, 0xAD, 0x13, 0x96, 0x28, 0xEB,-    0x6A, 0xF9, 0x2B, 0x4B, 0x88, 0xEB, 0xF0, 0x9B,-    0x1F, 0xA0, 0x47, 0xFB, 0xE1, 0x0B, 0xC3, 0x1D-  },-  {-    0x65, 0xDA, 0x78, 0x0A, 0x0A, 0x37, 0x47, 0x9D,-    0xD8, 0xF4, 0xD6, 0x55, 0x64, 0xF9, 0xA7, 0x08,-    0x9E, 0x42, 0x07, 0xEB, 0x16, 0xAC, 0xA3, 0xF6,-    0x55, 0x31, 0xCF, 0xEE, 0x76, 0x25, 0xBA, 0x13,-    0x80, 0xA4, 0x97, 0xB6, 0x24, 0x72, 0xFC, 0x7E,-    0x00, 0x07, 0xA6, 0xB0, 0x35, 0x61, 0x04, 0x16,-    0xA5, 0xF8, 0x2C, 0x10, 0x82, 0xFA, 0x06, 0x5C,-    0x46, 0xDD, 0xEE, 0x49, 0x40, 0xD1, 0xFC, 0x46-  },-  {-    0x1C, 0x09, 0xA3, 0xB3, 0x80, 0xB8, 0xA7, 0xFC,-    0x33, 0x3F, 0xD2, 0x71, 0x4D, 0xF7, 0x12, 0x9B,-    0x44, 0xA4, 0x67, 0x68, 0xBA, 0xCF, 0x0A, 0x67,-    0xA3, 0x8A, 0x47, 0xB3, 0xAB, 0x31, 0xF5, 0x1B,-    0x05, 0x33, 0xC2, 0xAA, 0x2B, 0x4B, 0x7B, 0xBB,-    0x6A, 0xE5, 0xED, 0xF3, 0xDC, 0xB0, 0xEC, 0xC1,-    0xA2, 0x83, 0xE8, 0x43, 0xF2, 0x90, 0x7B, 0x34,-    0x1F, 0x17, 0x9A, 0xFD, 0x8B, 0x67, 0xDA, 0x90-  },-  {-    0x67, 0x88, 0x8B, 0x83, 0xFA, 0xAF, 0xBB, 0x62,-    0x29, 0x34, 0xB8, 0xD5, 0x59, 0x63, 0xE1, 0x86,-    0x15, 0x3E, 0x59, 0x51, 0x88, 0x7C, 0x7F, 0x4A,-    0x76, 0x35, 0xC7, 0x98, 0xD9, 0xA5, 0x82, 0x94,-    0xBE, 0x26, 0xA3, 0xC5, 0x49, 0xC9, 0xFD, 0x59,-    0x86, 0xAB, 0xD1, 0x9F, 0x40, 0x1E, 0xE2, 0x4E,-    0xDA, 0x36, 0x02, 0x04, 0x2A, 0xD3, 0x83, 0x35,-    0x7A, 0x31, 0x7D, 0x38, 0x07, 0x3B, 0x38, 0xCE-  },-  {-    0xB4, 0xF7, 0x99, 0x63, 0xCA, 0x31, 0xBB, 0x62,-    0x26, 0x5D, 0xD9, 0x29, 0xAF, 0x7D, 0x51, 0x27,-    0x2F, 0xA6, 0x63, 0x1D, 0xE7, 0xFA, 0x35, 0xF7,-    0xA6, 0xB0, 0x3F, 0x9F, 0xCF, 0xDB, 0x8E, 0x3B,-    0x5B, 0xAC, 0xE3, 0x35, 0x91, 0xB7, 0xEC, 0x2C,-    0xFA, 0xB4, 0x9C, 0x91, 0xA6, 0xDB, 0x1F, 0xF8,-    0xF6, 0x78, 0x6D, 0x08, 0xF4, 0x4E, 0x80, 0x62,-    0xD2, 0xFF, 0x69, 0x6A, 0x7D, 0x98, 0x41, 0x42-  },-  {-    0x40, 0x84, 0x83, 0x69, 0x7B, 0xB6, 0xF9, 0xD0,-    0x11, 0xA1, 0xF2, 0x9A, 0x23, 0xC2, 0x78, 0xA8,-    0x1D, 0x37, 0x57, 0x8D, 0xCC, 0xCF, 0x42, 0x3B,-    0xDF, 0x48, 0x93, 0x37, 0xF1, 0x82, 0xEA, 0xB7,-    0x9A, 0x50, 0xB0, 0x5F, 0x3D, 0x2C, 0xCC, 0x49,-    0x13, 0x37, 0xC7, 0xE4, 0x1F, 0x30, 0x79, 0x3B,-    0xD2, 0x7D, 0x76, 0x61, 0xC2, 0xE3, 0x04, 0xC9,-    0x46, 0xA5, 0xA4, 0x01, 0xAF, 0x8D, 0x94, 0x6F-  },-  {-    0xEE, 0xB5, 0xAD, 0xE1, 0xAB, 0x97, 0xE7, 0x15,-    0x43, 0x43, 0xA4, 0x6E, 0xB4, 0xCD, 0xD2, 0xA7,-    0x73, 0xF3, 0x63, 0x01, 0xED, 0xC6, 0xA1, 0xBC,-    0x1D, 0xD6, 0x48, 0x0E, 0x08, 0xF5, 0x87, 0x65,-    0xCB, 0x93, 0x87, 0x82, 0x92, 0x3B, 0xC0, 0x1F,-    0x8E, 0x0C, 0x61, 0xC6, 0xBE, 0x0D, 0xD1, 0xAB,-    0x4C, 0x18, 0xCB, 0x15, 0xED, 0x52, 0x10, 0x11,-    0x24, 0x05, 0xF1, 0xEA, 0x8F, 0x2E, 0x8C, 0x4E-  },-  {-    0x71, 0x4A, 0xD1, 0x85, 0xF1, 0xEE, 0xC4, 0x3F,-    0x46, 0xB6, 0x7E, 0x99, 0x2D, 0x2D, 0x38, 0xBC,-    0x31, 0x49, 0xE3, 0x7D, 0xA7, 0xB4, 0x47, 0x48,-    0xD4, 0xD1, 0x4C, 0x16, 0x1E, 0x08, 0x78, 0x02,-    0x04, 0x42, 0x14, 0x95, 0x79, 0xA8, 0x65, 0xD8,-    0x04, 0xB0, 0x49, 0xCD, 0x01, 0x55, 0xBA, 0x98,-    0x33, 0x78, 0x75, 0x7A, 0x13, 0x88, 0x30, 0x1B,-    0xDC, 0x0F, 0xAE, 0x2C, 0xEA, 0xEA, 0x07, 0xDD-  },-  {-    0x22, 0xB8, 0x24, 0x9E, 0xAF, 0x72, 0x29, 0x64,-    0xCE, 0x42, 0x4F, 0x71, 0xA7, 0x4D, 0x03, 0x8F,-    0xF9, 0xB6, 0x15, 0xFB, 0xA5, 0xC7, 0xC2, 0x2C,-    0xB6, 0x27, 0x97, 0xF5, 0x39, 0x82, 0x24, 0xC3,-    0xF0, 0x72, 0xEB, 0xC1, 0xDA, 0xCB, 0xA3, 0x2F,-    0xC6, 0xF6, 0x63, 0x60, 0xB3, 0xE1, 0x65, 0x8D,-    0x0F, 0xA0, 0xDA, 0x1E, 0xD1, 0xC1, 0xDA, 0x66,-    0x2A, 0x20, 0x37, 0xDA, 0x82, 0x3A, 0x33, 0x83-  },-  {-    0xB8, 0xE9, 0x03, 0xE6, 0x91, 0xB9, 0x92, 0x78,-    0x25, 0x28, 0xF8, 0xDB, 0x96, 0x4D, 0x08, 0xE3,-    0xBA, 0xAF, 0xBD, 0x08, 0xBA, 0x60, 0xC7, 0x2A,-    0xEC, 0x0C, 0x28, 0xEC, 0x6B, 0xFE, 0xCA, 0x4B,-    0x2E, 0xC4, 0xC4, 0x6F, 0x22, 0xBF, 0x62, 0x1A,-    0x5D, 0x74, 0xF7, 0x5C, 0x0D, 0x29, 0x69, 0x3E,-    0x56, 0xC5, 0xC5, 0x84, 0xF4, 0x39, 0x9E, 0x94,-    0x2F, 0x3B, 0xD8, 0xD3, 0x86, 0x13, 0xE6, 0x39-  },-  {-    0xD5, 0xB4, 0x66, 0xFF, 0x1F, 0xD6, 0x8C, 0xFA,-    0x8E, 0xDF, 0x0B, 0x68, 0x02, 0x44, 0x8F, 0x30,-    0x2D, 0xCC, 0xDA, 0xF5, 0x66, 0x28, 0x78, 0x6B,-    0x9D, 0xA0, 0xF6, 0x62, 0xFD, 0xA6, 0x90, 0x26,-    0x6B, 0xD4, 0x0A, 0xB6, 0xF0, 0xBE, 0xC0, 0x43,-    0xF1, 0x01, 0x28, 0xB3, 0x3D, 0x05, 0xDB, 0x82,-    0xD4, 0xAB, 0x26, 0x8A, 0x4F, 0x91, 0xAC, 0x42,-    0x86, 0x79, 0x5F, 0xC0, 0xF7, 0xCB, 0x48, 0x5C-  },-  {-    0x0A, 0x1E, 0x8C, 0x0A, 0x8C, 0x48, 0xB8, 0x4B,-    0x71, 0xBA, 0x0F, 0xE5, 0x6F, 0xA0, 0x56, 0x09,-    0x8C, 0xA6, 0x92, 0xE9, 0x2F, 0x27, 0x6E, 0x85,-    0xB3, 0x38, 0x26, 0xCD, 0x78, 0x75, 0xFC, 0xF8,-    0x83, 0x85, 0x13, 0x1B, 0x43, 0xDF, 0x74, 0x53,-    0x2E, 0xAA, 0x86, 0xCF, 0x17, 0x1F, 0x50, 0x76,-    0xE6, 0xD1, 0x7B, 0x1C, 0x75, 0xFB, 0xA1, 0xDB,-    0x00, 0x1B, 0x6E, 0x66, 0x97, 0x7C, 0xB8, 0xD7-  },-  {-    0x65, 0xAA, 0x17, 0x99, 0x14, 0x36, 0x93, 0xAB,-    0xD9, 0xCB, 0x21, 0x8D, 0x9B, 0x5E, 0xC6, 0x0C,-    0x0E, 0xDD, 0xB0, 0x67, 0xE6, 0xA3, 0x2F, 0x76,-    0x79, 0x60, 0x10, 0xAC, 0xB1, 0x1A, 0xD0, 0x13,-    0x6C, 0xE4, 0x9F, 0x97, 0x6E, 0x74, 0xF8, 0x95,-    0x04, 0x2F, 0x7C, 0xBF, 0x13, 0xFB, 0x73, 0xD1,-    0x9D, 0xC8, 0x89, 0xD7, 0xE9, 0x03, 0x46, 0x9D,-    0xEB, 0x33, 0x73, 0x1F, 0x24, 0x06, 0xB6, 0x63-  },-  {-    0xDE, 0xB7, 0x12, 0xB9, 0xCC, 0x64, 0xF5, 0x88,-    0x14, 0x86, 0x0B, 0x51, 0xFA, 0x89, 0xAD, 0x8A,-    0x92, 0x6A, 0x69, 0x08, 0xC7, 0x96, 0xDE, 0x55,-    0x7F, 0x90, 0xCF, 0xAD, 0xB0, 0xC6, 0x2C, 0x07,-    0x87, 0x2F, 0x33, 0xFE, 0x18, 0x4E, 0x5E, 0x21,-    0x2A, 0x3C, 0x5C, 0x37, 0x31, 0x74, 0x18, 0x44,-    0x6E, 0xFD, 0x95, 0x61, 0x3F, 0x61, 0x8A, 0x35,-    0xF7, 0xD2, 0x78, 0x9E, 0xFE, 0x0D, 0x96, 0x60-  },-  {-    0xB4, 0x2F, 0x4A, 0x40, 0xB3, 0xC8, 0x8B, 0xCE,-    0xCF, 0xE3, 0x28, 0xC8, 0x46, 0xBF, 0x06, 0x48,-    0xA1, 0x69, 0x90, 0xCA, 0x53, 0x91, 0x95, 0xC0,-    0xC1, 0xDC, 0x8D, 0x70, 0x30, 0x80, 0x67, 0x68,-    0x5A, 0xF6, 0x77, 0xAD, 0x65, 0xAC, 0x0C, 0x7A,-    0x9B, 0xCF, 0xA8, 0xF7, 0xAC, 0xC0, 0xAA, 0xCF,-    0x45, 0xCA, 0x18, 0xAC, 0x83, 0x1F, 0xED, 0x64,-    0x4E, 0xC3, 0xD9, 0x28, 0x31, 0x01, 0xFF, 0xEF-  },-  {-    0xED, 0xCF, 0x6C, 0x81, 0xCC, 0xF1, 0x6E, 0x11,-    0xDD, 0xF7, 0x19, 0xA3, 0x3D, 0xD0, 0xE5, 0x34,-    0x9C, 0xAB, 0xAC, 0x5C, 0xFA, 0xE5, 0x97, 0x00,-    0x98, 0x40, 0xE1, 0xC3, 0x93, 0x62, 0xC0, 0xF1,-    0x19, 0x82, 0xFE, 0x2C, 0x27, 0x65, 0x85, 0x9A,-    0x94, 0x26, 0x2D, 0xA2, 0x8D, 0xD3, 0x37, 0x3D,-    0x52, 0x26, 0x93, 0x89, 0x75, 0x11, 0xEB, 0xA5,-    0xE0, 0x7B, 0x8B, 0xC6, 0xB6, 0x06, 0x4D, 0xC0-  },-  {-    0x46, 0xB9, 0x62, 0xD2, 0x28, 0x36, 0x94, 0xD2,-    0x79, 0x75, 0xDC, 0xBF, 0x32, 0x56, 0x4C, 0x9B,-    0x04, 0x03, 0x2B, 0x30, 0xA9, 0x3E, 0x05, 0x8F,-    0xB7, 0x7B, 0x2B, 0x71, 0x8B, 0x4A, 0xD5, 0xFB,-    0x78, 0x9A, 0xB7, 0xD7, 0xAA, 0x90, 0x85, 0x2D,-    0xA2, 0xBF, 0xB6, 0xB3, 0x93, 0xB0, 0x9F, 0x98,-    0xE8, 0x69, 0xB1, 0x6E, 0x41, 0x0E, 0x7D, 0xE2,-    0x30, 0xB1, 0x79, 0xF6, 0x2E, 0xB5, 0x74, 0x71-  },-  {-    0x29, 0x03, 0x6C, 0x3F, 0x53, 0x82, 0xE3, 0x5D,-    0xE7, 0xA6, 0x9F, 0xA7, 0xA6, 0x3E, 0xC7, 0xBD,-    0xCB, 0xC4, 0xE0, 0xCC, 0x5A, 0x7B, 0x64, 0x14,-    0xCF, 0x44, 0xBF, 0x9A, 0x83, 0x83, 0xEF, 0xB5,-    0x97, 0x23, 0x50, 0x6F, 0x0D, 0x51, 0xAD, 0x50,-    0xAC, 0x1E, 0xAC, 0xF7, 0x04, 0x30, 0x8E, 0x8A,-    0xEC, 0xB9, 0x66, 0xF6, 0xAC, 0x94, 0x1D, 0xB1,-    0xCD, 0xE4, 0xB5, 0x9E, 0x84, 0xC1, 0xEB, 0xBA-  },-  {-    0x17, 0x3F, 0x8A, 0xB8, 0x93, 0x3E, 0xB0, 0x7C,-    0xC5, 0xFD, 0x6E, 0x4B, 0xCE, 0xBA, 0xE1, 0xFF,-    0x35, 0xC7, 0x87, 0x9B, 0x93, 0x8A, 0x5A, 0x15,-    0x79, 0xEA, 0x02, 0xF3, 0x83, 0x32, 0x48, 0x86,-    0xC7, 0x0E, 0xD9, 0x10, 0x9D, 0xE1, 0x69, 0x0B,-    0x8E, 0xE8, 0x01, 0xBC, 0x95, 0x9B, 0x21, 0xD3,-    0x81, 0x17, 0xEB, 0xB8, 0x4A, 0xB5, 0x6F, 0x88,-    0xF8, 0xA3, 0x72, 0x62, 0x00, 0x2D, 0xD9, 0x8E-  },-  {-    0xC6, 0xAF, 0xA6, 0xA1, 0x91, 0x93, 0x1F, 0xD4,-    0x5C, 0x3B, 0xAD, 0xBA, 0x72, 0x6E, 0x68, 0xA9,-    0xBC, 0x73, 0x88, 0xC8, 0xCF, 0x37, 0xAD, 0xEC,-    0x7C, 0x64, 0x56, 0x1C, 0xF4, 0x81, 0xFD, 0x25,-    0x9A, 0x64, 0x6C, 0x8B, 0xD8, 0x43, 0xE7, 0x70,-    0x9E, 0x11, 0xE6, 0x4D, 0xCF, 0xD5, 0xDF, 0xFF,-    0xED, 0x79, 0x23, 0x5C, 0x68, 0x9B, 0x42, 0x00,-    0xFE, 0x7A, 0xC8, 0xDF, 0xDA, 0xDD, 0xEC, 0xE0-  },-  {-    0xA6, 0xDC, 0xCD, 0x8C, 0x19, 0x26, 0x64, 0x88,-    0xBF, 0x77, 0xB9, 0xF2, 0x4B, 0x91, 0x43, 0xDE,-    0xF1, 0xFE, 0xD6, 0x1D, 0x0C, 0x60, 0xB5, 0x00,-    0x0A, 0x52, 0x3F, 0x45, 0x0D, 0xA2, 0x3D, 0x74,-    0xE4, 0xE3, 0xF6, 0xEF, 0x04, 0x09, 0x0D, 0x10,-    0x66, 0xB6, 0xAC, 0xE8, 0x5A, 0xBC, 0x0F, 0x03,-    0x01, 0x73, 0xF5, 0x28, 0x17, 0x72, 0x7C, 0x4E,-    0x40, 0x43, 0x2D, 0xD3, 0x4C, 0x6E, 0xF9, 0xF0-  },-  {-    0xAA, 0xF8, 0x90, 0x8D, 0x54, 0x6E, 0x4F, 0x1E,-    0x31, 0x4C, 0x00, 0xE9, 0xD2, 0xE8, 0x85, 0x5C,-    0xB2, 0x56, 0x44, 0x5A, 0xAE, 0x3E, 0xCA, 0x44,-    0x23, 0x83, 0x22, 0xAE, 0xC7, 0x40, 0x34, 0xA1,-    0x45, 0x8A, 0x29, 0x36, 0x75, 0xDA, 0xD9, 0x49,-    0x40, 0x8D, 0xE5, 0x55, 0x4F, 0x22, 0xD7, 0x34,-    0x54, 0xF3, 0xF0, 0x70, 0x9C, 0xBC, 0xCC, 0x85,-    0xCB, 0x05, 0x3A, 0x6F, 0x50, 0x38, 0x91, 0xA1-  },-  {-    0x52, 0x5F, 0x4A, 0xAB, 0x9C, 0x32, 0x7D, 0x2A,-    0x6A, 0x3C, 0x9D, 0xF8, 0x1F, 0xB7, 0xBE, 0x97,-    0xEE, 0x03, 0xE3, 0xF7, 0xCE, 0x33, 0x21, 0x1C,-    0x47, 0x78, 0x8A, 0xCD, 0x13, 0x46, 0x40, 0xDD,-    0x90, 0xAD, 0x74, 0x99, 0x2D, 0x3D, 0xD6, 0xAC,-    0x80, 0x63, 0x50, 0xF3, 0xBA, 0xBC, 0x7F, 0xE1,-    0x98, 0xA6, 0x1D, 0xB3, 0x2D, 0x4A, 0xD1, 0xD6,-    0x56, 0x9A, 0xE8, 0x41, 0x31, 0x04, 0xDE, 0xA4-  },-  {-    0x2D, 0xAC, 0xCD, 0x88, 0x71, 0x9D, 0x0A, 0x00,-    0xB5, 0x2C, 0x6E, 0xB7, 0x9E, 0x1C, 0xA8, 0xB4,-    0xA1, 0xB4, 0xB4, 0x4F, 0xFA, 0x20, 0x88, 0x9F,-    0x23, 0x63, 0xEF, 0x5C, 0x0D, 0x73, 0x7F, 0x1F,-    0x81, 0xF5, 0x0D, 0xA1, 0xCA, 0xAC, 0x23, 0x1D,-    0x6F, 0xCB, 0x48, 0x89, 0x5E, 0x72, 0x99, 0xB7,-    0x7A, 0xF8, 0x1F, 0x0A, 0xA4, 0xA7, 0x61, 0x8A,-    0xD2, 0x4B, 0x7A, 0xAF, 0xC8, 0xE3, 0xA2, 0xBE-  },-  {-    0x7D, 0x28, 0x6F, 0x1F, 0x72, 0x1E, 0xC2, 0xD2,-    0x11, 0x5E, 0xF4, 0xCC, 0xD8, 0x28, 0x58, 0xA4,-    0xD5, 0x12, 0x21, 0x13, 0x55, 0xD4, 0xFC, 0x58,-    0xE5, 0x34, 0xBF, 0xA5, 0x9C, 0x2E, 0x1B, 0xF5,-    0x52, 0xA9, 0x6D, 0xC4, 0xB3, 0xE4, 0x6B, 0x01,-    0x28, 0x65, 0xDA, 0x88, 0x13, 0x4C, 0xF0, 0x4E,-    0x73, 0x1B, 0x19, 0x30, 0x75, 0x9E, 0x15, 0x8F,-    0xF6, 0x20, 0xB6, 0xEC, 0x5A, 0xAF, 0xD0, 0x12-  },-  {-    0x21, 0x82, 0x6B, 0x95, 0x29, 0xC4, 0xBC, 0x51,-    0x91, 0x47, 0xF5, 0xF9, 0xFE, 0x6D, 0xB8, 0x78,-    0x34, 0x52, 0x15, 0xE5, 0x09, 0x4F, 0x4E, 0x99,-    0xB1, 0x31, 0xED, 0x54, 0xE2, 0x49, 0x53, 0xCE,-    0xE9, 0xAD, 0xB7, 0x18, 0xD1, 0x74, 0x3E, 0x6C,-    0x27, 0xFC, 0x94, 0x51, 0x6A, 0x99, 0x22, 0xFB,-    0x97, 0x5A, 0x78, 0x16, 0xB8, 0xAA, 0xB0, 0x21,-    0x12, 0x60, 0x8C, 0x03, 0x2B, 0xF1, 0x38, 0xE3-  },-  {-    0xC1, 0x68, 0x9C, 0x69, 0x8A, 0xB0, 0x65, 0xF6,-    0x2E, 0xEE, 0x65, 0xDD, 0xCA, 0x67, 0x6B, 0xAA,-    0x45, 0xB5, 0x2F, 0x30, 0x8A, 0xFA, 0x80, 0x4A,-    0xB4, 0xAA, 0x6A, 0xB8, 0x4B, 0x7A, 0xC1, 0xAA,-    0x1D, 0xFF, 0x07, 0x17, 0x56, 0x10, 0xB1, 0x2A,-    0xE1, 0x1F, 0x27, 0xB7, 0xC4, 0x30, 0xAF, 0xD5,-    0x75, 0x56, 0xBD, 0x18, 0x1D, 0x02, 0x83, 0x2C,-    0xD8, 0xD0, 0xA5, 0xFD, 0xC3, 0x02, 0x01, 0x24-  },-  {-    0xA1, 0xA6, 0x28, 0x17, 0x47, 0xE3, 0x4D, 0x3E,-    0xDE, 0x5E, 0x93, 0x34, 0x01, 0x74, 0x7C, 0xA7,-    0xF7, 0x66, 0x28, 0xB6, 0x14, 0xC8, 0xA3, 0x94,-    0xF5, 0x02, 0x56, 0x2B, 0xFE, 0xE0, 0xB9, 0x94,-    0xEC, 0xB6, 0x5F, 0xBF, 0xE1, 0xFF, 0x70, 0x67,-    0xDC, 0xB0, 0x1D, 0x02, 0xA9, 0x2B, 0xA4, 0x62,-    0x20, 0x75, 0x87, 0xCE, 0xF7, 0xDC, 0x2C, 0xFD,-    0xB4, 0x58, 0x48, 0x48, 0xAD, 0x55, 0x91, 0x4A-  },-  {-    0x00, 0x70, 0xA0, 0x19, 0x0A, 0xA6, 0x96, 0x57,-    0x2D, 0x85, 0x3F, 0x1D, 0x24, 0xAB, 0x63, 0x08,-    0x48, 0xAC, 0x56, 0xAD, 0x5C, 0x2E, 0xBF, 0xCF,-    0xDE, 0x27, 0xD1, 0x11, 0xCD, 0x55, 0x93, 0x9C,-    0x1E, 0x4D, 0x07, 0x87, 0x2D, 0xDE, 0x7C, 0xE7,-    0x8B, 0x53, 0x4B, 0x53, 0x0F, 0x0A, 0x39, 0x6E,-    0x86, 0xAF, 0x9D, 0x57, 0x53, 0x54, 0xB5, 0xD7,-    0xE3, 0x4A, 0xCD, 0xE1, 0x8C, 0xC7, 0x67, 0xAE-  },-  {-    0x51, 0xB9, 0xB5, 0xED, 0x19, 0x3F, 0xD4, 0xB1,-    0xA3, 0xA9, 0x2B, 0x46, 0xBD, 0x4B, 0xD1, 0xF6,-    0xEC, 0x6B, 0x38, 0xA6, 0x0F, 0x2D, 0x02, 0x61,-    0xD7, 0x2A, 0xBF, 0xD1, 0x64, 0x36, 0x12, 0x8D,-    0xCB, 0xF2, 0x2C, 0x25, 0xE3, 0xE3, 0xC4, 0x3F,-    0xE4, 0xD2, 0x9D, 0xB9, 0x12, 0x4D, 0x03, 0x33,-    0x30, 0x18, 0x45, 0x92, 0xD2, 0x0C, 0x5B, 0x08,-    0x2C, 0x23, 0x20, 0x64, 0x54, 0xCB, 0x3D, 0xD7-  },-  {-    0x57, 0x8F, 0x24, 0x27, 0x46, 0x91, 0x4E, 0x36,-    0xD0, 0xD9, 0xD4, 0x80, 0x96, 0x89, 0x57, 0x12,-    0x16, 0xA4, 0x3E, 0x47, 0x33, 0x32, 0x39, 0x51,-    0x62, 0x0F, 0x5E, 0xE7, 0x8C, 0xCF, 0xEE, 0x91,-    0x9B, 0xF5, 0x5F, 0x28, 0x7B, 0x45, 0xA7, 0x3D,-    0x44, 0x85, 0xAC, 0x74, 0x22, 0x87, 0x92, 0x39,-    0x65, 0x3B, 0x05, 0x91, 0xC3, 0x6C, 0x86, 0x69,-    0x41, 0xF8, 0xAF, 0xFE, 0x4A, 0xE5, 0x6E, 0x9E-  },-  {-    0x94, 0x71, 0x30, 0xEF, 0x0B, 0x94, 0x8E, 0xE0,-    0x45, 0x81, 0xAB, 0xA3, 0xE2, 0xCC, 0x4C, 0xEF,-    0xC3, 0x8C, 0xCE, 0xDC, 0x86, 0x17, 0x92, 0xB7,-    0xB5, 0xDC, 0xD9, 0xD9, 0x36, 0x1C, 0x72, 0x4A,-    0x12, 0x20, 0x03, 0xBF, 0x79, 0x6C, 0xE0, 0x97,-    0x98, 0x00, 0xAD, 0xAB, 0xC7, 0x45, 0x6F, 0x17,-    0x3A, 0xE5, 0x26, 0x93, 0x15, 0xAF, 0xC0, 0x1B,-    0x60, 0x6D, 0xB2, 0x9C, 0x75, 0x50, 0xE8, 0xCA-  },-  {-    0xC8, 0x52, 0xE6, 0x77, 0xF7, 0x7B, 0x14, 0xB5,-    0x85, 0xBD, 0x10, 0x2A, 0x0F, 0x14, 0x42, 0x43,-    0x05, 0x9D, 0xAB, 0xEC, 0x7C, 0xB0, 0x1F, 0xFA,-    0x61, 0xDF, 0x19, 0xFC, 0xE8, 0xAB, 0x43, 0x6B,-    0xF5, 0xE2, 0xD5, 0xC7, 0x9A, 0xA2, 0xD7, 0xB6,-    0x77, 0xF6, 0xC3, 0x75, 0xE9, 0x34, 0x3D, 0x34,-    0x2E, 0x4F, 0xF4, 0xE3, 0xAB, 0x00, 0x1B, 0xC7,-    0x98, 0x8C, 0x3C, 0x7A, 0x83, 0xCC, 0xB6, 0x9F-  },-  {-    0x01, 0x19, 0x75, 0x26, 0x91, 0x7A, 0xC2, 0xC7,-    0xBC, 0x53, 0x95, 0x19, 0xE6, 0x8B, 0xB2, 0x79,-    0x81, 0x35, 0xF6, 0x03, 0x3E, 0xD5, 0x8F, 0x5C,-    0x45, 0x1E, 0x0C, 0xE9, 0x46, 0xAF, 0xF0, 0xF9,-    0x8D, 0xFD, 0xD1, 0x51, 0x01, 0x73, 0x1A, 0xC1,-    0x66, 0x12, 0x6E, 0xAF, 0xB5, 0xE7, 0xCB, 0xE2,-    0xE2, 0x72, 0xEE, 0x23, 0x3F, 0x34, 0xE5, 0xF3,-    0xF8, 0xEA, 0x3D, 0x2D, 0x12, 0x24, 0x82, 0xFB-  },-  {-    0x05, 0x9C, 0x90, 0x85, 0x89, 0x5E, 0xB7, 0x18,-    0x30, 0x4E, 0x2D, 0xDA, 0x78, 0x68, 0x6B, 0xD9,-    0x57, 0x49, 0x81, 0x5A, 0x5E, 0xE9, 0x02, 0x51,-    0x0B, 0x00, 0x9A, 0xF6, 0x92, 0x48, 0xB6, 0xA7,-    0xA7, 0x2F, 0xF8, 0xA6, 0x28, 0xD8, 0x17, 0x73,-    0xE1, 0x1D, 0x5A, 0x1E, 0x7F, 0x69, 0x7A, 0x44,-    0x9B, 0x7A, 0x1E, 0x27, 0x12, 0xD5, 0xCF, 0xAE,-    0x7A, 0xB2, 0x65, 0x07, 0xD1, 0x11, 0x29, 0x18-  },-  {-    0x29, 0x52, 0x43, 0xBD, 0x75, 0x8C, 0xF2, 0x1C,-    0x80, 0x31, 0x25, 0xFC, 0xF3, 0x21, 0xDE, 0x5F,-    0x97, 0x98, 0x7C, 0x8D, 0xB3, 0xBB, 0x3C, 0xB5,-    0x1F, 0xF9, 0x7C, 0x4C, 0xDA, 0xC9, 0xD3, 0xBF,-    0x0A, 0x67, 0xCE, 0xE7, 0xED, 0x35, 0x0A, 0x41,-    0xFD, 0xE6, 0xAB, 0xCC, 0x25, 0x4F, 0xBC, 0x9F,-    0x8E, 0x6B, 0x3E, 0x3C, 0xCE, 0xCB, 0xD0, 0xE4,-    0xA6, 0x40, 0xA2, 0x0F, 0x36, 0x2B, 0xA3, 0xA0-  },-  {-    0xDD, 0x82, 0x32, 0xD2, 0x41, 0x2C, 0xCE, 0xEC,-    0xB5, 0x12, 0x31, 0x91, 0xF6, 0xE9, 0x22, 0x1E,-    0x85, 0x1E, 0xCC, 0xE0, 0xFA, 0xEB, 0xF0, 0x50,-    0x5F, 0x2A, 0xEE, 0xFF, 0x8A, 0x8C, 0x92, 0xD4,-    0x1D, 0xAC, 0xF1, 0x77, 0xBD, 0xAE, 0x27, 0x76,-    0x3E, 0xA4, 0xA8, 0x62, 0x05, 0xEF, 0x76, 0x34,-    0xF7, 0xA6, 0x87, 0xCC, 0x44, 0xBB, 0xBB, 0xDE,-    0xEE, 0x5E, 0x11, 0xE6, 0x5F, 0x9F, 0xBD, 0x69-  },-  {-    0xB0, 0x46, 0xB6, 0x83, 0x71, 0x6D, 0x31, 0xC9,-    0x14, 0xC7, 0x0B, 0x10, 0xF7, 0x64, 0x6D, 0xA3,-    0x1E, 0xFA, 0xB2, 0x23, 0x63, 0x47, 0x45, 0x9C,-    0xF8, 0xFA, 0x2C, 0x09, 0x12, 0x34, 0x31, 0xF7,-    0x28, 0x07, 0xF1, 0x1D, 0x86, 0x7C, 0x37, 0x70,-    0xB1, 0xF0, 0x61, 0xD5, 0x6C, 0xA0, 0xE5, 0xB1,-    0xE8, 0x8A, 0x6B, 0x44, 0xA3, 0x3C, 0xF9, 0x3E,-    0x18, 0xBC, 0xC9, 0xCE, 0xBB, 0xA5, 0xAD, 0xE7-  },-  {-    0x20, 0xE5, 0xA2, 0x55, 0x05, 0x8B, 0xE5, 0x1E,-    0x1A, 0x62, 0x9B, 0x4E, 0xBF, 0x81, 0xE5, 0xCB,-    0xE0, 0x78, 0x1C, 0xB6, 0x7C, 0xA4, 0xE5, 0x7B,-    0xA8, 0x6B, 0x30, 0x88, 0x96, 0xBC, 0xE7, 0x38,-    0x20, 0xEB, 0x08, 0x43, 0x1C, 0xE8, 0xC9, 0xBC,-    0x58, 0x10, 0xCC, 0x8D, 0x8B, 0x9C, 0x9D, 0x6F,-    0xCF, 0x83, 0x4E, 0x42, 0xEA, 0x33, 0xEF, 0x73,-    0xCE, 0xC4, 0x7D, 0x71, 0x3B, 0x6D, 0x8D, 0xFD-  },-  {-    0x1E, 0x48, 0x04, 0xF9, 0xC0, 0xB1, 0xE8, 0x2B,-    0x9E, 0xD3, 0x63, 0xBD, 0xE4, 0x47, 0x28, 0xAC,-    0xF7, 0xD0, 0x90, 0xA1, 0xBF, 0xE2, 0xDD, 0xF8,-    0x81, 0x9D, 0x65, 0x92, 0xEF, 0x45, 0x3B, 0x83,-    0x5B, 0xD2, 0xEF, 0xE8, 0xB0, 0x20, 0x6E, 0x29,-    0x25, 0x5B, 0x07, 0xFB, 0x90, 0xC7, 0xD3, 0x0D,-    0x2C, 0x11, 0x48, 0x00, 0xB8, 0x6C, 0xB0, 0xE3,-    0xE0, 0x7D, 0x38, 0x7E, 0x98, 0xCE, 0x95, 0x37-  },-  {-    0x41, 0xC9, 0x53, 0xD8, 0xD2, 0x2A, 0x86, 0xC3,-    0x63, 0x4D, 0xF4, 0x22, 0xB6, 0xDE, 0x4A, 0x4F,-    0x14, 0x96, 0x66, 0xBE, 0x8C, 0x4F, 0x58, 0x1B,-    0x26, 0x23, 0xEE, 0x65, 0xC3, 0x92, 0xA5, 0xC3,-    0x28, 0x36, 0x63, 0x9E, 0xF5, 0x6B, 0x93, 0x68,-    0x62, 0x20, 0xF4, 0x5C, 0xE6, 0x5B, 0x4F, 0xA8,-    0x58, 0x9C, 0x91, 0x25, 0x64, 0x17, 0x90, 0xB6,-    0x92, 0x5F, 0xAA, 0xD9, 0x48, 0xB8, 0xBE, 0x04-  },-  {-    0x8B, 0xFC, 0xA4, 0xC8, 0xDF, 0xE3, 0xFD, 0xE4,-    0x25, 0x7B, 0x75, 0xC3, 0xDB, 0x01, 0x86, 0x2E,-    0xD3, 0x11, 0x67, 0xDE, 0x66, 0xC2, 0xE0, 0x3A,-    0x25, 0x56, 0xC4, 0xF4, 0x6C, 0x9D, 0xFF, 0xC1,-    0xAC, 0x45, 0xF7, 0xBC, 0x59, 0xA6, 0x7A, 0xB9,-    0x36, 0x24, 0xBE, 0xB8, 0x6D, 0xDD, 0x0D, 0x02,-    0x60, 0x3F, 0x0D, 0xCD, 0x03, 0x64, 0xF0, 0xF8,-    0x08, 0x81, 0x9B, 0xE9, 0x6C, 0xD8, 0xD3, 0xB6-  },-  {-    0xF6, 0xBF, 0x59, 0xD8, 0xD4, 0x5A, 0x55, 0x71,-    0x11, 0xA2, 0x36, 0xCB, 0xBA, 0x52, 0x61, 0x9A,-    0xE3, 0xDF, 0xCC, 0x43, 0x16, 0x94, 0x38, 0x43,-    0xAF, 0xD1, 0x28, 0x1B, 0x28, 0x21, 0x4A, 0x4A,-    0x5E, 0x85, 0x1E, 0xF8, 0xC5, 0x4F, 0x50, 0x5E,-    0x3C, 0x4B, 0x60, 0x0E, 0xFF, 0xBE, 0xBB, 0x3E,-    0xAC, 0x17, 0x08, 0x7F, 0x22, 0x27, 0x58, 0x12,-    0x63, 0xF1, 0x7D, 0x7E, 0x5F, 0x68, 0xEA, 0x83-  },-  {-    0x1B, 0xC9, 0xED, 0xE4, 0xD4, 0x1A, 0x4D, 0xF6,-    0xE8, 0xE6, 0xF4, 0x7C, 0x2F, 0x4A, 0xD8, 0x73,-    0x37, 0xB6, 0x9B, 0x19, 0xF7, 0x10, 0xF7, 0x66,-    0xE1, 0xFA, 0xF5, 0xAA, 0x05, 0xA4, 0x3B, 0x66,-    0x45, 0x39, 0x6E, 0x7F, 0xBE, 0xF4, 0x3B, 0xB7,-    0x79, 0x5D, 0x39, 0x40, 0x7B, 0x58, 0x15, 0xB9,-    0x2E, 0xCC, 0x23, 0xA6, 0xC1, 0x24, 0x14, 0x21,-    0x15, 0x3A, 0x55, 0xD5, 0x1F, 0x12, 0xBF, 0xD8-  },-  {-    0x76, 0xB3, 0x8B, 0x36, 0x31, 0x55, 0x5D, 0xBC,-    0xFB, 0x21, 0x21, 0x8F, 0xF9, 0xE4, 0x12, 0xA2,-    0x29, 0x88, 0x9E, 0xF2, 0xCE, 0x8A, 0xD7, 0x05,-    0xE9, 0x0F, 0x96, 0xAA, 0xBB, 0xD5, 0xBE, 0x7E,-    0x53, 0x29, 0xA4, 0x26, 0x53, 0x4C, 0x81, 0x5A,-    0x56, 0x53, 0x77, 0x13, 0x18, 0x72, 0x66, 0x41,-    0x42, 0x4E, 0x3B, 0x88, 0x29, 0x2F, 0xB1, 0xD8,-    0x95, 0x44, 0x40, 0x6A, 0xDE, 0x9B, 0xCC, 0xB5-  },-  {-    0xE5, 0x3F, 0x60, 0x07, 0x40, 0x22, 0x4E, 0x4D,-    0x10, 0xD3, 0x1D, 0x24, 0x38, 0x00, 0x31, 0x43,-    0xAF, 0xDB, 0x43, 0x6E, 0xB1, 0x79, 0x1B, 0x15,-    0x0D, 0xE3, 0x56, 0x76, 0xF0, 0xE3, 0x2F, 0x80,-    0xB0, 0xB6, 0x5F, 0x0A, 0xCF, 0x48, 0x1A, 0x5F,-    0xBF, 0x95, 0x96, 0xC0, 0xCB, 0x0A, 0x27, 0xC7,-    0xAF, 0xC1, 0x1D, 0x1E, 0x2C, 0x4D, 0x54, 0x02,-    0x47, 0x5E, 0x4F, 0xFC, 0xC1, 0xCD, 0xA8, 0x11-  },-  {-    0x62, 0x06, 0xB9, 0x1F, 0xC0, 0xB6, 0xF1, 0x21,-    0x1E, 0x9F, 0xDE, 0xCD, 0xC9, 0xD5, 0x1A, 0x6F,-    0x1E, 0xEE, 0x65, 0x54, 0xB1, 0x38, 0xAD, 0xCD,-    0x4A, 0x82, 0x3D, 0xF0, 0x0D, 0xDE, 0xF6, 0x75,-    0x9A, 0x9B, 0xFD, 0x7A, 0x4E, 0x98, 0x1E, 0x04,-    0x52, 0x36, 0x83, 0x8F, 0x4A, 0xF6, 0x93, 0xF6,-    0x93, 0x77, 0x93, 0x14, 0x84, 0xB3, 0xE8, 0x1E,-    0x3E, 0x3B, 0xC2, 0xCB, 0x7E, 0xF7, 0x9F, 0xE9-  },-  {-    0x76, 0xFD, 0x02, 0xDA, 0xDD, 0x96, 0x3B, 0xC0,-    0x35, 0x39, 0x91, 0x46, 0xCE, 0x42, 0x98, 0x8C,-    0xC0, 0x99, 0xD3, 0xCF, 0x4D, 0x32, 0xDF, 0x5C,-    0x0B, 0xBF, 0x64, 0x10, 0x12, 0x46, 0xB1, 0xC7,-    0x08, 0xD1, 0x67, 0xE2, 0x95, 0x95, 0xD1, 0x1D,-    0x09, 0xB3, 0xF6, 0x34, 0x86, 0xB4, 0x05, 0x26,-    0xAC, 0x1D, 0xFE, 0x31, 0xBC, 0x22, 0xDE, 0xC7,-    0x0B, 0x74, 0x5E, 0x90, 0xE2, 0xEA, 0xAF, 0x5A-  },-  {-    0xF0, 0xA1, 0xFB, 0xE3, 0x11, 0x63, 0xE4, 0x21,-    0x01, 0x50, 0x72, 0x18, 0x3D, 0x68, 0xEE, 0x51,-    0x91, 0xA9, 0x9C, 0xFD, 0xA1, 0x69, 0xBA, 0x5A,-    0x19, 0x54, 0xC9, 0xF3, 0x10, 0x7D, 0x4E, 0xCA,-    0x06, 0x3E, 0x13, 0x7A, 0x71, 0x14, 0xD3, 0x97,-    0xC9, 0xDB, 0x67, 0x2B, 0x9F, 0x47, 0x8D, 0x41,-    0xC3, 0x4E, 0x99, 0x1B, 0x06, 0x69, 0xA9, 0x51,-    0x53, 0x92, 0x90, 0xC8, 0xED, 0x65, 0xE4, 0x6A-  },-  {-    0x13, 0xC7, 0x2A, 0x6A, 0xA5, 0x71, 0xB1, 0x43,-    0xDC, 0xCF, 0x45, 0xAD, 0xCD, 0x98, 0xEA, 0xE6,-    0x99, 0xA1, 0x54, 0xB1, 0x10, 0xF2, 0x5E, 0x7E,-    0x9E, 0x82, 0xB7, 0x65, 0xB9, 0xA0, 0x89, 0x23,-    0x68, 0x8E, 0x8E, 0x0F, 0xF3, 0x11, 0xA6, 0x8A,-    0x77, 0x1E, 0x14, 0x50, 0x96, 0xD6, 0x07, 0x76,-    0xC6, 0xD6, 0xEE, 0x70, 0xAD, 0x6F, 0x69, 0xFA,-    0x2B, 0x76, 0x77, 0x63, 0x40, 0x55, 0xA0, 0x0E-  },-  {-    0x0E, 0x06, 0x2B, 0xFE, 0x81, 0x8E, 0xE1, 0x0F,-    0x33, 0x48, 0x1D, 0xEA, 0x43, 0x02, 0x8B, 0x2C,-    0xFB, 0xB4, 0x9E, 0xC9, 0x5E, 0x0F, 0x75, 0xA9,-    0xE1, 0x6D, 0x40, 0x4B, 0xC5, 0x19, 0xB9, 0xAD,-    0x50, 0xB4, 0xA7, 0x33, 0x69, 0x2C, 0xA5, 0x4E,-    0xFB, 0x68, 0x04, 0x69, 0xED, 0x83, 0xDD, 0xEF,-    0xBD, 0xDD, 0xB1, 0x39, 0x04, 0x2E, 0x0E, 0x1C,-    0x09, 0xC3, 0xEB, 0x79, 0x03, 0xFA, 0x08, 0xDF-  },-  {-    0x45, 0x3B, 0xE4, 0xAA, 0xB9, 0xF4, 0x23, 0xB3,-    0x36, 0x52, 0xA0, 0xB5, 0xD0, 0x2A, 0x9A, 0xF8,-    0x55, 0xDD, 0x0D, 0x42, 0xDD, 0x83, 0x11, 0x0B,-    0xA3, 0xBC, 0x4B, 0x39, 0x94, 0xEA, 0x3F, 0x88,-    0x5A, 0x71, 0x30, 0x89, 0x75, 0x08, 0x9B, 0x49,-    0x03, 0xE2, 0xE4, 0xD6, 0xBA, 0x6D, 0xC2, 0xE8,-    0x40, 0x31, 0xFF, 0xE9, 0xC8, 0x56, 0x39, 0x75,-    0xC8, 0x61, 0x6A, 0xCA, 0x07, 0x42, 0xE8, 0x29-  },-  {-    0x53, 0x61, 0xE3, 0xE8, 0x93, 0xDD, 0x36, 0x0B,-    0xCB, 0xF5, 0x1C, 0x79, 0x3E, 0xC0, 0x92, 0xA6,-    0xB0, 0x52, 0x05, 0x4F, 0x5F, 0x00, 0x0B, 0x9F,-    0xCE, 0x50, 0x7B, 0x66, 0x45, 0xF8, 0xD4, 0x70,-    0x13, 0xA8, 0x70, 0x6A, 0x58, 0xD4, 0xB1, 0x06,-    0x29, 0xCC, 0x82, 0xB8, 0xD2, 0xD7, 0x96, 0xFD,-    0xD3, 0x7B, 0x60, 0x8A, 0x58, 0x79, 0x52, 0xD6,-    0x55, 0x3E, 0x01, 0xD1, 0xAF, 0x0E, 0x04, 0xB8-  },-  {-    0x74, 0xB5, 0x67, 0x39, 0xF0, 0x1F, 0x82, 0x09,-    0xA4, 0x04, 0x44, 0xDF, 0x4C, 0xCD, 0xEE, 0xEA,-    0x8F, 0x97, 0xE8, 0xE7, 0x6E, 0xFA, 0x3C, 0x04,-    0x33, 0x7F, 0x69, 0x94, 0x5C, 0x4D, 0x44, 0xC0,-    0x85, 0xF1, 0xF4, 0x78, 0x96, 0x96, 0x36, 0x1E,-    0x3C, 0x97, 0x77, 0x4A, 0x93, 0x5F, 0x86, 0x0D,-    0x67, 0x46, 0x86, 0xDC, 0xBA, 0x3D, 0x45, 0xEC,-    0xD8, 0x63, 0x9A, 0x64, 0xAE, 0xA0, 0x62, 0x1B-  },-  {-    0xB4, 0xD3, 0x15, 0x87, 0xB9, 0x2B, 0x53, 0x61,-    0xCD, 0xC2, 0xD3, 0xC4, 0x10, 0x86, 0xC1, 0x55,-    0x3E, 0x7B, 0x55, 0xA1, 0xF6, 0x1E, 0x94, 0xD2,-    0xBC, 0x30, 0xBC, 0x25, 0x1D, 0xAF, 0x8A, 0x5E,-    0xBF, 0xC5, 0x07, 0x09, 0xCC, 0x04, 0xCB, 0xAF,-    0x4B, 0x3B, 0x4D, 0xA2, 0xD2, 0x6B, 0x81, 0x23,-    0x8F, 0xBA, 0x71, 0x8F, 0xA9, 0x17, 0x59, 0xB8,-    0x0B, 0xD3, 0x10, 0x3A, 0xEC, 0x11, 0xE0, 0x6F-  },-  {-    0xAA, 0xF6, 0x12, 0x7F, 0x00, 0xA0, 0x3D, 0x96,-    0x40, 0x6B, 0x9F, 0xB4, 0xAC, 0x70, 0x16, 0x0D,-    0xB5, 0x22, 0x42, 0x9B, 0x5C, 0xD9, 0x4E, 0x7F,-    0xA0, 0x30, 0x3A, 0x74, 0x94, 0x78, 0xFE, 0x31,-    0x89, 0xC8, 0xEA, 0x23, 0x93, 0x0A, 0x66, 0x25,-    0x2A, 0x80, 0x26, 0x74, 0xDC, 0xAF, 0x77, 0x00,-    0x46, 0x82, 0x0D, 0xD9, 0x64, 0xC6, 0x6F, 0x0F,-    0x54, 0x75, 0x1A, 0x72, 0xF9, 0x7D, 0x9C, 0x35-  },-  {-    0x2C, 0x30, 0xD4, 0x8D, 0xF9, 0x98, 0x4E, 0x02,-    0xF7, 0x5A, 0x94, 0x54, 0x92, 0x17, 0x18, 0x4D,-    0xD0, 0x2A, 0xAD, 0x3B, 0x57, 0x68, 0x3D, 0x09,-    0xB5, 0xA8, 0xC2, 0xEF, 0x53, 0xA9, 0x6A, 0xFB,-    0x73, 0xFE, 0xB6, 0xF9, 0x14, 0xE2, 0xD8, 0x15,-    0xBB, 0x3B, 0x08, 0x65, 0x43, 0x32, 0xFC, 0xFE,-    0x79, 0xF8, 0x0E, 0xC5, 0xF0, 0x51, 0xDA, 0x10,-    0xD7, 0x21, 0x41, 0x3D, 0xDD, 0xE8, 0xFA, 0x60-  },-  {-    0x92, 0xE2, 0xC5, 0xF7, 0x5D, 0x0C, 0xEA, 0xFC,-    0x81, 0x8F, 0xA7, 0x93, 0x59, 0x39, 0xE4, 0x8B,-    0x91, 0x59, 0x41, 0xEF, 0x73, 0x4D, 0x75, 0x27,-    0x0E, 0xB3, 0x21, 0xBA, 0x20, 0x80, 0xEF, 0x6D,-    0x25, 0x5E, 0x90, 0xEF, 0x96, 0xC6, 0x4C, 0xFF,-    0x1D, 0x8C, 0x18, 0xF3, 0x3C, 0x2E, 0xAB, 0x10,-    0x7F, 0xEF, 0x53, 0xE0, 0xD8, 0xBB, 0x16, 0x05,-    0x16, 0x80, 0x74, 0x80, 0xFC, 0xBA, 0x53, 0x73-  },-  {-    0x6E, 0x03, 0xA9, 0x1E, 0x20, 0x44, 0x46, 0x27,-    0xE3, 0xD2, 0xE2, 0x22, 0x26, 0xCF, 0x47, 0x00,-    0x26, 0x69, 0x44, 0x34, 0xED, 0x64, 0x79, 0x82,-    0x8C, 0xB6, 0xDC, 0x8F, 0x27, 0x96, 0x0A, 0xEE,-    0xE2, 0xF4, 0xAB, 0x87, 0x2A, 0x5C, 0xA2, 0xF7,-    0xF6, 0x52, 0xF7, 0xDC, 0x77, 0xD5, 0xF9, 0x6D,-    0x85, 0x82, 0x8B, 0x8F, 0x9C, 0x2D, 0x6C, 0x23,-    0x9E, 0x79, 0x77, 0x24, 0xA1, 0x31, 0x31, 0xB1-  },-  {-    0xBA, 0x43, 0x2D, 0xB0, 0xA3, 0x31, 0xBB, 0x8C,-    0x39, 0xB1, 0x7B, 0xEE, 0x34, 0x46, 0x2B, 0x26,-    0xDD, 0xB7, 0xAD, 0x91, 0xB6, 0xC7, 0x5A, 0xEC,-    0x27, 0x65, 0xFB, 0xAE, 0x3A, 0x0E, 0x60, 0xEC,-    0x54, 0x6D, 0x45, 0xF8, 0xE5, 0x84, 0x37, 0xB9,-    0xD7, 0x7C, 0x3D, 0x2E, 0x8D, 0x7C, 0xE0, 0x69,-    0x73, 0x15, 0x66, 0x51, 0xD4, 0x08, 0x22, 0x2A,-    0xA2, 0x90, 0xCB, 0x58, 0xCA, 0xBC, 0x0A, 0xE5-  },-  {-    0x83, 0xA0, 0x1E, 0x23, 0xAB, 0x27, 0x7B, 0x1F,-    0xC2, 0x8C, 0xD8, 0xBB, 0x8D, 0xA7, 0xE9, 0x4C,-    0x70, 0xF1, 0xDE, 0xE3, 0x2D, 0x19, 0x55, 0xCE,-    0xE2, 0x50, 0xEE, 0x58, 0x41, 0x9A, 0x1F, 0xEE,-    0x10, 0xA8, 0x99, 0x17, 0x97, 0xCE, 0x3D, 0x20,-    0x93, 0x80, 0xCA, 0x9F, 0x98, 0x93, 0x39, 0xE2,-    0xD8, 0xA8, 0x1C, 0x67, 0xD7, 0x37, 0xD8, 0x28,-    0x8C, 0x7F, 0xAE, 0x46, 0x02, 0x83, 0x4A, 0x8B-  },-  {-    0x0E, 0xA3, 0x21, 0x72, 0xCC, 0x19, 0x1D, 0xFC,-    0x13, 0x1C, 0xD8, 0x8A, 0xA0, 0x3F, 0xF4, 0x18,-    0x5C, 0x0B, 0xFA, 0x7B, 0x19, 0x11, 0x12, 0x19,-    0xEE, 0xCB, 0x45, 0xB0, 0xFF, 0x60, 0x4D, 0x3E,-    0xDB, 0x00, 0x55, 0x0A, 0xBB, 0xA1, 0x11, 0x52,-    0x2B, 0x77, 0xAE, 0x61, 0xC9, 0xA8, 0xD6, 0xE9,-    0x4F, 0xCA, 0x9D, 0x96, 0xC3, 0x8D, 0x6B, 0x7C,-    0xCE, 0x27, 0x52, 0xF0, 0xD0, 0xC3, 0x7E, 0x78-  },-  {-    0x54, 0xAD, 0xD6, 0x55, 0x2B, 0x08, 0x85, 0x8B,-    0x23, 0xD6, 0x64, 0x5F, 0x6C, 0xE7, 0x9E, 0x92,-    0xF3, 0x8B, 0x66, 0xAE, 0x91, 0x86, 0x77, 0xE6,-    0xD9, 0x1F, 0x71, 0x87, 0xC4, 0x16, 0x05, 0x24,-    0xDF, 0xA8, 0xD0, 0x1F, 0x00, 0xEA, 0x93, 0xDD,-    0x29, 0x9F, 0x3C, 0xC4, 0x09, 0x01, 0xBD, 0x33,-    0x27, 0xA0, 0xF1, 0x8C, 0xCD, 0x7B, 0x6B, 0x8E,-    0x4E, 0x47, 0xCD, 0x28, 0xCF, 0x83, 0x8F, 0xAB-  },-  {-    0xEF, 0x84, 0x74, 0x6D, 0xC2, 0x01, 0x56, 0xB6,-    0x6B, 0xA5, 0xC7, 0x8A, 0x50, 0x83, 0x0A, 0xBD,-    0x2A, 0xEF, 0x90, 0xE6, 0x67, 0xB9, 0x7E, 0xB5,-    0x22, 0x91, 0xBC, 0x86, 0x9D, 0x8A, 0xA2, 0x45,-    0x59, 0xA1, 0x42, 0xC6, 0x8F, 0xEA, 0x2E, 0xF3,-    0x2A, 0xF2, 0x2D, 0xFC, 0xEA, 0x4C, 0x90, 0xB3,-    0xD4, 0x90, 0x8C, 0xC9, 0xEA, 0x5C, 0xFC, 0x4E,-    0x91, 0xBF, 0x11, 0xCE, 0x6A, 0x7E, 0x57, 0x61-  },-  {-    0x5A, 0x1B, 0xF3, 0x81, 0xA0, 0x41, 0x19, 0xF9,-    0x42, 0xE4, 0x63, 0xAB, 0xA2, 0xB1, 0x64, 0x38,-    0x82, 0x46, 0x8A, 0xEC, 0xC1, 0xB1, 0xAA, 0x1E,-    0x7B, 0xCA, 0xAB, 0x3B, 0x47, 0x8F, 0xC5, 0xF0,-    0x56, 0xF1, 0x0D, 0xA9, 0x03, 0x7D, 0x40, 0xFA,-    0x7F, 0x55, 0x70, 0x8E, 0x10, 0x3B, 0xDA, 0x96,-    0x5E, 0x92, 0x0C, 0xF6, 0x7C, 0xE3, 0xAD, 0xF7,-    0xE2, 0x00, 0xE8, 0x61, 0x01, 0x4D, 0xEC, 0xC6-  },-  {-    0xAC, 0xF7, 0x8A, 0xA3, 0x28, 0x45, 0x96, 0xF3,-    0x30, 0xB7, 0xE8, 0x47, 0x51, 0xB9, 0x4C, 0x31,-    0x4C, 0xD8, 0x36, 0x36, 0x27, 0xBA, 0x99, 0x78,-    0x81, 0x30, 0x85, 0x78, 0x87, 0x37, 0x59, 0x89,-    0x5D, 0x13, 0xDF, 0xFF, 0xA5, 0xE5, 0x74, 0x50,-    0x13, 0x61, 0xF0, 0x43, 0xC7, 0x4F, 0x57, 0xD2,-    0xD0, 0xF1, 0x5C, 0x7A, 0x41, 0xC7, 0xC4, 0x5E,-    0x3C, 0x09, 0xAD, 0x89, 0xD6, 0x99, 0xA9, 0x77-  },-  {-    0x18, 0xB3, 0xE9, 0x04, 0x38, 0x44, 0xD4, 0xF3,-    0xA2, 0xD0, 0x21, 0xF5, 0x4C, 0x38, 0xFA, 0xCC,-    0x36, 0x4F, 0x84, 0xBA, 0x10, 0x58, 0xF2, 0x10,-    0x09, 0xFC, 0x37, 0x1D, 0x2E, 0x4F, 0x38, 0xC7,-    0x27, 0x51, 0x8A, 0xAB, 0xA6, 0xA2, 0x9E, 0x0F,-    0xDA, 0xE6, 0xE7, 0x60, 0xA4, 0xF1, 0xA6, 0xD7,-    0x58, 0xEB, 0xE4, 0x2C, 0x2A, 0xFC, 0x9D, 0x2C,-    0xDC, 0x6D, 0xD5, 0x80, 0x77, 0x8C, 0x4B, 0x32-  },-  {-    0x18, 0x96, 0xB2, 0x31, 0x70, 0x33, 0xCF, 0x31,-    0x04, 0x68, 0x73, 0xD8, 0x7F, 0x26, 0xE6, 0xA4,-    0x2A, 0x9D, 0x77, 0x0B, 0xBA, 0xF6, 0xE0, 0x62,-    0xDF, 0x11, 0xF9, 0xB4, 0xA0, 0xEA, 0xB2, 0x75,-    0xAA, 0xB1, 0x2C, 0xAA, 0xC2, 0xD3, 0xF5, 0x29,-    0xEB, 0x20, 0xD0, 0x70, 0xFD, 0x84, 0x4D, 0x86,-    0xD0, 0xA5, 0x71, 0xCD, 0xF6, 0x28, 0x5F, 0x80,-    0xE2, 0x30, 0x8B, 0xB8, 0x2C, 0x6C, 0x5B, 0x3B-  },-  {-    0x8C, 0x3D, 0xC4, 0x01, 0x94, 0xAA, 0x02, 0x1F,-    0x3C, 0x4A, 0x1F, 0x9A, 0x05, 0x5E, 0x4D, 0x41,-    0x9E, 0xB3, 0xA2, 0x6D, 0x4C, 0x2F, 0x1A, 0x8C,-    0x7E, 0x18, 0x8B, 0x73, 0x48, 0x13, 0x40, 0x80,-    0xB6, 0x3F, 0x6E, 0x57, 0x0A, 0xD1, 0x1C, 0x28,-    0x78, 0x66, 0x53, 0x55, 0x41, 0x9C, 0x10, 0x20,-    0xDE, 0x4B, 0x65, 0x5E, 0x7A, 0x6C, 0x2C, 0xCD,-    0xE9, 0x07, 0x2C, 0xD4, 0x27, 0xFE, 0x8C, 0x4E-  },-  {-    0x70, 0xAE, 0x04, 0x30, 0xD5, 0x45, 0xEC, 0x42,-    0x7F, 0x85, 0x41, 0x21, 0x1D, 0x4F, 0xE0, 0x42,-    0xB9, 0x82, 0x3A, 0xCE, 0xC0, 0x4B, 0x15, 0xC9,-    0x0B, 0x7F, 0x4B, 0x8B, 0xDD, 0x3D, 0xC7, 0x85,-    0x19, 0x90, 0xF3, 0x70, 0xE7, 0x14, 0x16, 0x75,-    0x10, 0x66, 0x49, 0xD3, 0x91, 0x51, 0x09, 0x03,-    0x18, 0x23, 0x1E, 0x4D, 0xED, 0x51, 0x22, 0x5D,-    0x9A, 0x6F, 0xA6, 0xC4, 0x24, 0x69, 0x5D, 0xE2-  },-  {-    0x07, 0x33, 0x6C, 0x42, 0xBD, 0x51, 0x49, 0x0E,-    0xF8, 0x4D, 0xFB, 0xDF, 0xAB, 0x74, 0x66, 0xF6,-    0xB6, 0x39, 0x99, 0xA5, 0xC0, 0x88, 0x72, 0xDF,-    0xED, 0xA0, 0x20, 0x6F, 0xDA, 0x80, 0xB9, 0xA6,-    0x2D, 0xE7, 0x28, 0xE3, 0xE3, 0xC3, 0xFD, 0x6B,-    0x7D, 0x21, 0xA4, 0x38, 0xAA, 0xD1, 0xB8, 0xDD,-    0x22, 0x38, 0x63, 0xC0, 0xD2, 0x6A, 0xCA, 0x27,-    0x79, 0x01, 0x74, 0xD9, 0xD4, 0x42, 0xA6, 0x4C-  },-  {-    0x79, 0x26, 0x70, 0x88, 0x59, 0xE6, 0xE2, 0xAB,-    0x68, 0xF6, 0x04, 0xDA, 0x69, 0xA9, 0xFB, 0x50,-    0x87, 0xBB, 0x33, 0xF4, 0xE8, 0xD8, 0x95, 0x73,-    0x0E, 0x30, 0x1A, 0xB2, 0xD7, 0xDF, 0x74, 0x8B,-    0x67, 0xDF, 0x0B, 0x6B, 0x86, 0x22, 0xE5, 0x2D,-    0xD5, 0x7D, 0x8D, 0x3A, 0xD8, 0x7D, 0x58, 0x20,-    0xD4, 0xEC, 0xFD, 0x24, 0x17, 0x8B, 0x2D, 0x2B,-    0x78, 0xD6, 0x4F, 0x4F, 0xBD, 0x38, 0x75, 0x82-  },-  {-    0x92, 0x80, 0xF4, 0xD1, 0x15, 0x70, 0x32, 0xAB,-    0x31, 0x5C, 0x10, 0x0D, 0x63, 0x62, 0x83, 0xFB,-    0xF4, 0xFB, 0xA2, 0xFB, 0xAD, 0x0F, 0x8B, 0xC0,-    0x20, 0x72, 0x1D, 0x76, 0xBC, 0x1C, 0x89, 0x73,-    0xCE, 0xD2, 0x88, 0x71, 0xCC, 0x90, 0x7D, 0xAB,-    0x60, 0xE5, 0x97, 0x56, 0x98, 0x7B, 0x0E, 0x0F,-    0x86, 0x7F, 0xA2, 0xFE, 0x9D, 0x90, 0x41, 0xF2,-    0xC9, 0x61, 0x80, 0x74, 0xE4, 0x4F, 0xE5, 0xE9-  },-  {-    0x55, 0x30, 0xC2, 0xD5, 0x9F, 0x14, 0x48, 0x72,-    0xE9, 0x87, 0xE4, 0xE2, 0x58, 0xA7, 0xD8, 0xC3,-    0x8C, 0xE8, 0x44, 0xE2, 0xCC, 0x2E, 0xED, 0x94,-    0x0F, 0xFC, 0x68, 0x3B, 0x49, 0x88, 0x15, 0xE5,-    0x3A, 0xDB, 0x1F, 0xAA, 0xF5, 0x68, 0x94, 0x61,-    0x22, 0x80, 0x5A, 0xC3, 0xB8, 0xE2, 0xFE, 0xD4,-    0x35, 0xFE, 0xD6, 0x16, 0x2E, 0x76, 0xF5, 0x64,-    0xE5, 0x86, 0xBA, 0x46, 0x44, 0x24, 0xE8, 0x85-  },-  {-    0xDA, 0x85, 0x0A, 0x2F, 0x54, 0xE9, 0x44, 0x89,-    0x17, 0xD0, 0xDC, 0xAA, 0x63, 0x93, 0x7B, 0x95,-    0xA4, 0xDA, 0x1E, 0xAC, 0x8A, 0xF4, 0xDD, 0xF2,-    0x11, 0x3E, 0x5C, 0x8B, 0x0D, 0x4D, 0xB2, 0x66,-    0x9A, 0xF3, 0xC2, 0xAC, 0xB0, 0x80, 0x3D, 0x05,-    0x32, 0x3F, 0x3E, 0xC5, 0x5A, 0xBD, 0x33, 0xBD,-    0xF9, 0xB2, 0xBE, 0x89, 0x0E, 0xE7, 0x9E, 0x7F,-    0x3F, 0xCE, 0x4E, 0x19, 0x86, 0x96, 0xA7, 0xA3-  },-  {-    0xF1, 0x60, 0x95, 0xDD, 0x9F, 0x1E, 0xEB, 0x77,-    0xD5, 0xB9, 0x2F, 0x4B, 0x1F, 0xAC, 0x3A, 0x2C,-    0x5D, 0xA6, 0xAE, 0x5D, 0x0A, 0xB3, 0xF2, 0x54,-    0xE2, 0xA7, 0xFE, 0x52, 0x67, 0x24, 0x11, 0xD0,-    0x1C, 0xFA, 0x6A, 0xC0, 0x5B, 0xF3, 0x9E, 0xF6,-    0x5F, 0x4B, 0x22, 0x26, 0x4B, 0x41, 0xC3, 0xF3,-    0x63, 0x56, 0x3A, 0xBF, 0x0E, 0x92, 0x42, 0x90,-    0xC1, 0xC6, 0x80, 0xB1, 0x8A, 0xA6, 0x5B, 0x44-  },-  {-    0x76, 0xD0, 0x0A, 0x09, 0xC5, 0xBD, 0xD3, 0x9E,-    0xD3, 0x28, 0x71, 0x72, 0x2C, 0xFA, 0x00, 0x47,-    0x67, 0x4B, 0xEC, 0x8D, 0x35, 0x17, 0x5A, 0xF9,-    0x0D, 0x7A, 0xE9, 0x10, 0x74, 0x40, 0xA2, 0xA0,-    0x63, 0x88, 0x56, 0xD8, 0x38, 0x4C, 0x81, 0x7D,-    0x77, 0x2A, 0x4A, 0x59, 0x7A, 0x89, 0x55, 0x49,-    0xC8, 0x48, 0x66, 0x37, 0x56, 0x31, 0xCB, 0xA0,-    0x42, 0xF0, 0xEF, 0x6F, 0xFE, 0xB8, 0x9D, 0x44-  },-  {-    0xA6, 0x51, 0x13, 0x7B, 0x2C, 0x47, 0xFB, 0x79,-    0x51, 0xE7, 0xBD, 0xA7, 0x15, 0x43, 0xA6, 0xEB,-    0xC6, 0x24, 0x2A, 0xCA, 0xB4, 0x34, 0x7D, 0x38,-    0x8B, 0xE8, 0x35, 0x0F, 0x0C, 0x3F, 0xA3, 0xDF,-    0x8D, 0x95, 0x2C, 0x7C, 0x8A, 0x3D, 0xAF, 0x01,-    0xE0, 0x6C, 0x1D, 0xA6, 0x94, 0x96, 0xBB, 0xA8,-    0xDE, 0x62, 0xD8, 0x6B, 0x50, 0x93, 0x25, 0x6F,-    0x77, 0xA1, 0x87, 0xB5, 0x3D, 0xB0, 0x39, 0x88-  },-  {-    0xF3, 0x2F, 0x15, 0x0C, 0x2D, 0x67, 0xC0, 0xC4,-    0x37, 0x40, 0x1B, 0x70, 0xF6, 0x0B, 0x38, 0xF0,-    0xA3, 0xA4, 0x70, 0x59, 0x03, 0x3E, 0x75, 0x05,-    0xE6, 0x9A, 0x1D, 0x30, 0x12, 0x96, 0x03, 0x0B,-    0xC9, 0xB2, 0x95, 0x19, 0xC7, 0xF8, 0xB7, 0xD5,-    0x9A, 0x71, 0xFA, 0xB9, 0x05, 0x57, 0xDC, 0x3D,-    0xC8, 0x23, 0xFA, 0xC9, 0x5B, 0x9E, 0x85, 0xE6,-    0x52, 0x52, 0x8C, 0xBF, 0xB0, 0x1B, 0x11, 0x78-  },-  {-    0x27, 0x02, 0x56, 0x61, 0x36, 0xC4, 0x92, 0xF4,-    0x10, 0x89, 0xB0, 0x60, 0x10, 0x84, 0x60, 0xFA,-    0x30, 0x22, 0xC9, 0xC2, 0x5D, 0x34, 0x3B, 0xCB,-    0xD8, 0xAF, 0x2A, 0xF1, 0x9C, 0x17, 0xEF, 0x4C,-    0xA9, 0xF2, 0x22, 0x4F, 0xE7, 0xC4, 0x70, 0x0A,-    0x10, 0x19, 0x8E, 0xE5, 0x24, 0x8F, 0x30, 0x0B,-    0x54, 0x8E, 0xBF, 0x5C, 0x8E, 0x71, 0x16, 0x32,-    0x0C, 0xC8, 0x93, 0xFF, 0x7E, 0x23, 0x1F, 0xFB-  },-  {-    0xFF, 0xE6, 0x87, 0x9F, 0x46, 0xB6, 0x29, 0x2B,-    0x21, 0x96, 0x97, 0x2E, 0x3F, 0xDF, 0x4F, 0xE9,-    0xEA, 0x4A, 0x81, 0x6D, 0x18, 0x07, 0xA3, 0x1C,-    0xAE, 0xAD, 0x6A, 0xAC, 0x5F, 0x06, 0x3C, 0x8F,-    0xE8, 0x77, 0x79, 0x75, 0x59, 0xA7, 0x59, 0xA0,-    0x0F, 0x8B, 0xA8, 0xF6, 0x68, 0xD8, 0x96, 0x8F,-    0xB3, 0x1D, 0x8A, 0x3B, 0x84, 0x57, 0x35, 0x90,-    0x2C, 0x5E, 0x42, 0xE2, 0x89, 0xEE, 0x0B, 0x62-  },-  {-    0x14, 0x48, 0x84, 0x28, 0x68, 0x22, 0xC2, 0x51,-    0x2D, 0x61, 0xB0, 0x46, 0xE6, 0x74, 0xD8, 0x6B,-    0x26, 0x4E, 0x9C, 0xC6, 0x89, 0x3E, 0xFF, 0x36,-    0x73, 0x11, 0x24, 0xF5, 0x9D, 0x1A, 0x82, 0x00,-    0x1E, 0x63, 0xF3, 0xE8, 0x05, 0x1C, 0xFE, 0x52,-    0xE7, 0x59, 0x7E, 0x28, 0x73, 0x8E, 0x3C, 0x3A,-    0x70, 0xF1, 0xBE, 0xD9, 0x68, 0x0E, 0x2C, 0x0E,-    0xF3, 0x72, 0x8B, 0x10, 0xA5, 0x6E, 0xD9, 0x87-  },-  {-    0x17, 0xC3, 0xF1, 0x46, 0xEE, 0x8D, 0xEC, 0x3B,-    0xAF, 0xCB, 0x51, 0xC0, 0xDA, 0x37, 0xF1, 0x78,-    0x71, 0xF2, 0x34, 0xC4, 0xA0, 0xFB, 0x7F, 0xA6,-    0xD0, 0x70, 0x7A, 0x54, 0x3E, 0x3C, 0xBF, 0x3A,-    0xDB, 0x81, 0xE3, 0x0C, 0x1E, 0x0A, 0xE9, 0xE1,-    0xAC, 0xE7, 0x22, 0x3B, 0xDA, 0x99, 0xBD, 0x59,-    0x19, 0xA3, 0xCF, 0xCC, 0x92, 0xC6, 0xA7, 0x55,-    0xE4, 0x56, 0xF0, 0x93, 0x82, 0x3B, 0xD3, 0x3E-  },-  {-    0x1B, 0x83, 0x7A, 0xF2, 0x33, 0xA8, 0xA6, 0x8B,-    0xE7, 0x09, 0x52, 0xF7, 0x83, 0xC4, 0x96, 0x1A,-    0x81, 0x52, 0xD1, 0xE0, 0xB0, 0xFA, 0x32, 0x5F,-    0xF0, 0x86, 0xEA, 0x5B, 0x5F, 0x13, 0x12, 0xB8,-    0x9C, 0x42, 0xE0, 0x1B, 0x8C, 0x3A, 0x47, 0x7C,-    0xB5, 0x40, 0xC0, 0x6B, 0x2F, 0x37, 0xEE, 0x0E,-    0x39, 0x24, 0xD7, 0x45, 0xB4, 0xFF, 0x5C, 0x6A,-    0xF7, 0xD6, 0x1E, 0x0E, 0x37, 0xAC, 0x19, 0x31-  },-  {-    0x78, 0x97, 0x88, 0x0C, 0x1E, 0xB0, 0x0F, 0xD2,-    0x56, 0x7A, 0xE8, 0xA5, 0x9E, 0x64, 0x82, 0xAF,-    0xE1, 0x73, 0x49, 0xCF, 0x93, 0x92, 0x4A, 0x91,-    0x5F, 0x8C, 0x59, 0x26, 0x93, 0xD4, 0x52, 0x07,-    0x55, 0x19, 0x68, 0x9D, 0xFC, 0xD2, 0x93, 0xE3,-    0x76, 0x89, 0x7B, 0x3B, 0x0E, 0x03, 0x6F, 0x11,-    0x4F, 0xE8, 0x1E, 0xBC, 0xB3, 0x15, 0x36, 0x71,-    0xBD, 0x23, 0xBC, 0x2B, 0xED, 0x46, 0xF9, 0xC2-  },-  {-    0xCA, 0x7B, 0x6C, 0x77, 0x5D, 0x20, 0x1E, 0x5B,-    0x5A, 0x77, 0x22, 0x61, 0xDE, 0x52, 0x8E, 0x47,-    0x5F, 0x4B, 0xDE, 0x51, 0x76, 0x60, 0x52, 0x9F,-    0x41, 0xBE, 0xEB, 0x15, 0x78, 0xB2, 0x4B, 0xCB,-    0x94, 0xB9, 0x41, 0x0F, 0x9B, 0xF3, 0x36, 0xC1,-    0x09, 0xF9, 0xD4, 0x70, 0x93, 0xA1, 0x0B, 0xA6,-    0xDE, 0xBE, 0x50, 0x43, 0x80, 0xD9, 0xD1, 0x50,-    0x73, 0xBD, 0xD1, 0x11, 0xC8, 0xD1, 0x29, 0xFA-  },-  {-    0x57, 0x18, 0xE0, 0xD4, 0x5D, 0xEB, 0xC3, 0x00,-    0x2D, 0x52, 0xB2, 0x2C, 0x52, 0x73, 0x29, 0xAE,-    0x5E, 0xBF, 0x27, 0xE8, 0xFA, 0x9C, 0x8F, 0xEA,-    0xB4, 0x6C, 0x40, 0xBC, 0x64, 0x22, 0xCA, 0x03,-    0x35, 0x30, 0x4C, 0xF9, 0xE7, 0xF1, 0x41, 0xDE,-    0x7F, 0xA6, 0xAD, 0xB6, 0x78, 0x9B, 0xDB, 0xF3,-    0x8D, 0x14, 0xDA, 0xBA, 0x3E, 0x62, 0x97, 0xD2,-    0x5B, 0xF1, 0x7D, 0xE1, 0x70, 0xD6, 0xE3, 0xC8-  },-  {-    0x48, 0xD0, 0xED, 0x24, 0x9F, 0x90, 0x28, 0x41,-    0x99, 0x7C, 0x25, 0x5D, 0xAF, 0x99, 0x08, 0x9C,-    0x9A, 0x31, 0x24, 0x69, 0x8B, 0x16, 0x4A, 0x30,-    0x28, 0x33, 0x0F, 0xDD, 0x4C, 0xEE, 0x41, 0xE1,-    0x68, 0x3F, 0xA4, 0xD9, 0xDC, 0x66, 0xB2, 0xA7,-    0x9C, 0x8A, 0xA4, 0xC8, 0x28, 0x4E, 0x27, 0xBE,-    0xE2, 0xA4, 0x28, 0xA6, 0x71, 0x9D, 0x6E, 0xC6,-    0x55, 0xED, 0x76, 0x9D, 0xCB, 0x62, 0x4E, 0x24-  },-  {-    0x79, 0x4E, 0x0B, 0x64, 0xAC, 0xE1, 0xFE, 0x5A,-    0xE3, 0x79, 0x93, 0x70, 0x68, 0xD8, 0x2D, 0xF0,-    0x48, 0x68, 0x61, 0x6C, 0xAE, 0x0C, 0x17, 0xD3,-    0x05, 0x72, 0xC2, 0x02, 0x4E, 0x77, 0x48, 0x94,-    0xE0, 0x66, 0x8C, 0x47, 0x2D, 0x62, 0x3C, 0x90,-    0x3C, 0xC5, 0x88, 0x5F, 0x17, 0x84, 0x94, 0x51,-    0x10, 0x32, 0x9E, 0xB4, 0x98, 0xA8, 0x95, 0xA9,-    0xE5, 0x9A, 0x75, 0xE5, 0x27, 0x15, 0x8A, 0x5C-  },-  {-    0x21, 0x79, 0xAA, 0x82, 0x0E, 0x03, 0xFA, 0x33,-    0xD9, 0xBD, 0xE5, 0x56, 0x8C, 0x26, 0x2E, 0x2D,-    0x34, 0x17, 0xA4, 0x02, 0xE0, 0x7A, 0x59, 0x1F,-    0x9D, 0x55, 0x70, 0x68, 0x2D, 0xB5, 0xF9, 0xBB,-    0xA4, 0xBB, 0x9D, 0x5A, 0x82, 0xEE, 0x5E, 0xFD,-    0xB4, 0xF6, 0x5B, 0xBB, 0xFE, 0xEE, 0x2F, 0x4A,-    0xB9, 0xE4, 0x6C, 0xF2, 0xCE, 0x7E, 0x3B, 0x05,-    0x43, 0x27, 0xA7, 0x18, 0xD3, 0xF1, 0x08, 0x06-  },-  {-    0xB0, 0xA4, 0x8C, 0x6A, 0xDA, 0x54, 0x87, 0x25,-    0x79, 0x9B, 0x59, 0x86, 0xBA, 0xB4, 0x32, 0x69,-    0x79, 0x60, 0x92, 0x24, 0xD8, 0x97, 0x18, 0x4B,-    0x89, 0x97, 0x10, 0x4E, 0x0C, 0x6A, 0x24, 0xB3,-    0xAB, 0xE5, 0x62, 0x16, 0x54, 0x22, 0xA4, 0x5D,-    0x8A, 0xC8, 0x19, 0xB9, 0x9D, 0x37, 0x56, 0xEB,-    0xBB, 0x64, 0xF8, 0x43, 0xE3, 0xE0, 0x93, 0x4D,-    0xEC, 0x48, 0x7A, 0xED, 0x12, 0x13, 0x72, 0x79-  },-  {-    0x84, 0x8D, 0x7F, 0x2E, 0xAD, 0x41, 0x29, 0x1D,-    0x05, 0x38, 0x68, 0x0C, 0x64, 0x9D, 0x07, 0x89,-    0x7E, 0x45, 0xC7, 0x0A, 0x0A, 0xA4, 0xF9, 0x35,-    0x3F, 0x82, 0xC3, 0xF6, 0xFB, 0xB8, 0xE8, 0x48,-    0x9C, 0x75, 0x3E, 0x90, 0xDB, 0xE8, 0x89, 0x00,-    0x41, 0xA1, 0xAE, 0xEF, 0x84, 0xCD, 0x31, 0x36,-    0x43, 0x4F, 0x53, 0x0E, 0x9D, 0xD9, 0xC2, 0x3F,-    0xA5, 0x4F, 0xE1, 0x24, 0xEA, 0xFB, 0x72, 0xAD-  },-  {-    0x0E, 0xD1, 0x46, 0x26, 0xEE, 0x6D, 0x0C, 0x8E,-    0xD3, 0xF0, 0xC2, 0x00, 0xC1, 0x29, 0x85, 0x0F,-    0xFF, 0x76, 0x31, 0x8F, 0xFF, 0xA1, 0xDD, 0xD7,-    0xDD, 0x56, 0x3A, 0x01, 0xB7, 0x77, 0x97, 0x06,-    0x86, 0x2B, 0x23, 0x99, 0x59, 0xB6, 0x15, 0xAE,-    0x2E, 0xBE, 0x27, 0xC4, 0x50, 0x37, 0xE6, 0xFF,-    0xAF, 0x99, 0x14, 0xDA, 0x8F, 0xF2, 0x77, 0x2B,-    0xA5, 0xEE, 0x08, 0x11, 0xCD, 0x9E, 0xD5, 0x32-  },-  {-    0x52, 0x03, 0xC0, 0x76, 0x38, 0xC4, 0xB6, 0x5F,-    0x78, 0x43, 0x1E, 0x8B, 0x02, 0xE2, 0x0F, 0x6D,-    0x68, 0x3F, 0x19, 0xFA, 0x8F, 0x83, 0xB5, 0x13,-    0x4C, 0xD0, 0xF4, 0xE4, 0x68, 0xC9, 0x7E, 0xAC,-    0xB5, 0x26, 0x7C, 0x7D, 0x3E, 0xAB, 0x58, 0x3C,-    0xCA, 0xAC, 0xD0, 0xDB, 0xA4, 0xD5, 0x8A, 0xCE,-    0x52, 0x19, 0x3A, 0x51, 0x78, 0xA7, 0xB1, 0x2D,-    0x27, 0x95, 0xF5, 0xFD, 0xE8, 0xA3, 0x7B, 0xB9-  },-  {-    0x48, 0xBE, 0x43, 0xD5, 0xE0, 0x04, 0x36, 0x88,-    0xDF, 0x35, 0x32, 0xF7, 0x12, 0x1A, 0xFF, 0xFA,-    0x16, 0x7D, 0xAB, 0xE4, 0xA4, 0x84, 0xFB, 0x75,-    0xA0, 0x3A, 0xF3, 0x04, 0xA5, 0xC6, 0xF8, 0x25,-    0xF3, 0x6C, 0xEC, 0xCB, 0xBB, 0xC0, 0x75, 0xEE,-    0xF3, 0x20, 0xC4, 0xCD, 0x8D, 0x7E, 0xF8, 0xCB,-    0x49, 0xE6, 0xDD, 0x59, 0x73, 0x37, 0x9E, 0xEC,-    0x4C, 0x23, 0x3C, 0x45, 0x43, 0xD1, 0x32, 0xCE-  },-  {-    0xB5, 0x46, 0x4E, 0x6A, 0xBA, 0xF5, 0xD3, 0xD4,-    0x08, 0x3D, 0x1D, 0x7D, 0x2A, 0x8B, 0x0B, 0xAB,-    0x78, 0xB6, 0x17, 0x09, 0x50, 0x0B, 0xBF, 0x77,-    0x82, 0x3F, 0x60, 0x2D, 0x57, 0xD5, 0x13, 0xCA,-    0x9E, 0x9F, 0xFF, 0x65, 0xEF, 0xAA, 0x89, 0x9C,-    0xFE, 0x7B, 0xF8, 0x8A, 0x01, 0x88, 0x82, 0x9C,-    0x24, 0xE4, 0x98, 0xAD, 0x00, 0x23, 0x5A, 0xBE,-    0x8E, 0xEF, 0xA7, 0x19, 0xFA, 0x6A, 0xE6, 0xF6-  },-  {-    0xAF, 0xE5, 0xE5, 0xE8, 0x3F, 0x19, 0xAD, 0xAD,-    0x9E, 0x95, 0x90, 0x3E, 0xA9, 0xB2, 0x98, 0x10,-    0x7D, 0x37, 0xDD, 0x38, 0x63, 0x2C, 0x95, 0x90,-    0xBB, 0xFF, 0xC6, 0x24, 0xD4, 0xDE, 0x95, 0x8C,-    0xB6, 0xB6, 0x1A, 0xF0, 0x80, 0xF0, 0x37, 0xAD,-    0x17, 0xD0, 0x35, 0xB6, 0xBF, 0x58, 0xF7, 0x80,-    0xFA, 0xDF, 0x70, 0xF3, 0xC9, 0x59, 0x66, 0x8A,-    0x1B, 0x47, 0x21, 0x98, 0xA5, 0x9A, 0x8A, 0x00-  },-  {-    0xEF, 0xA2, 0xC7, 0xC8, 0x02, 0xE2, 0x10, 0xD2,-    0xD8, 0x0F, 0xB3, 0x50, 0xB3, 0xC2, 0xCB, 0x31,-    0x56, 0x13, 0x18, 0x11, 0xE7, 0x18, 0xEE, 0xE5,-    0xC9, 0xC6, 0x64, 0x0F, 0x87, 0x68, 0x2A, 0x55,-    0x81, 0x2B, 0x10, 0xF4, 0x03, 0x10, 0xBA, 0xA7,-    0xB8, 0x2B, 0x27, 0x3E, 0xF3, 0xAC, 0xC5, 0x5F,-    0xED, 0xE0, 0xB5, 0xF1, 0x94, 0x9D, 0xE4, 0x29,-    0x3D, 0x91, 0xB5, 0x89, 0xA2, 0x17, 0x5F, 0xF7-  },-  {-    0xD6, 0xC6, 0x2A, 0x61, 0x82, 0x71, 0xF3, 0xBC,-    0xBE, 0x00, 0x79, 0x24, 0xA0, 0xC9, 0x81, 0x2F,-    0x83, 0x17, 0x44, 0x5F, 0xB6, 0xFB, 0x19, 0xEB,-    0x58, 0x9A, 0x62, 0x9F, 0x51, 0x2F, 0xB3, 0x8A,-    0x0B, 0x4E, 0x24, 0x7D, 0xEA, 0x88, 0xC5, 0x6A,-    0x1B, 0xAF, 0x17, 0x88, 0x33, 0x65, 0xB4, 0x36,-    0xF2, 0x84, 0x46, 0xFF, 0x66, 0xEA, 0x43, 0x18,-    0x0B, 0xD0, 0x1E, 0xB5, 0xA6, 0x50, 0x9B, 0xD5-  },-  {-    0x0B, 0x41, 0x16, 0x6B, 0xE6, 0x2F, 0x65, 0xE1,-    0x93, 0xB3, 0xB8, 0x65, 0xE6, 0xC4, 0x7A, 0xAD,-    0x26, 0x0A, 0xF5, 0xFC, 0xEE, 0xC9, 0xAB, 0x44,-    0xAB, 0xAA, 0x46, 0x0A, 0x0C, 0x02, 0x46, 0xB6,-    0xC6, 0x9B, 0x67, 0xD7, 0x1D, 0x3A, 0xDF, 0xEC,-    0x60, 0xDC, 0x8E, 0x77, 0x37, 0x2F, 0x09, 0x49,-    0x52, 0x34, 0x4F, 0xE1, 0x0C, 0x0D, 0x59, 0xEF,-    0xEC, 0x0E, 0x11, 0xC4, 0xA5, 0x16, 0x93, 0x6D-  },-  {-    0x79, 0xD5, 0xF9, 0xFF, 0xC0, 0x5E, 0xCF, 0x33,-    0x7D, 0xE9, 0xF1, 0xE0, 0xF1, 0xD8, 0x9B, 0x30,-    0xAC, 0xFE, 0xBB, 0xB8, 0x8A, 0x69, 0x35, 0x86,-    0x78, 0x18, 0xCD, 0x8D, 0x45, 0xDA, 0x3D, 0x25,-    0x18, 0xDE, 0x61, 0xA7, 0xFE, 0x28, 0x75, 0x1B,-    0x61, 0x8F, 0x7A, 0x87, 0x5E, 0x11, 0x89, 0x8F,-    0xFF, 0x74, 0x15, 0x7A, 0xB9, 0x06, 0x81, 0xBD,-    0x53, 0xFA, 0x69, 0x62, 0x67, 0x1E, 0xD9, 0x9D-  },-  {-    0xBE, 0xA9, 0x83, 0xD7, 0x6F, 0x24, 0xB1, 0xEE,-    0xDE, 0x1D, 0x06, 0x71, 0x48, 0x05, 0x76, 0x8F,-    0xAA, 0xAD, 0x47, 0x08, 0xC9, 0xA4, 0xFF, 0x9C,-    0xD2, 0x42, 0x2F, 0x70, 0x6B, 0x6F, 0x0C, 0x30,-    0x6D, 0x8B, 0x67, 0xF3, 0x40, 0x89, 0xC6, 0x5E,-    0xD3, 0x88, 0x0C, 0x75, 0xF6, 0x7B, 0xBC, 0x4D,-    0x89, 0xAD, 0x87, 0x12, 0x0A, 0x77, 0xD0, 0xFF,-    0xE4, 0x36, 0xFB, 0x7B, 0x58, 0xB2, 0xCA, 0x41-  },-  {-    0x46, 0x6F, 0xD9, 0x15, 0xEF, 0xD9, 0x50, 0xBC,-    0x96, 0x65, 0x78, 0xCD, 0x92, 0xC6, 0x85, 0x92,-    0x9D, 0x7B, 0x51, 0xA6, 0x3D, 0xB1, 0x42, 0xC7,-    0xB9, 0xA9, 0x3D, 0x16, 0x52, 0x04, 0x95, 0x31,-    0x9B, 0x87, 0xF6, 0x58, 0xE6, 0xAF, 0xDA, 0x1B,-    0x42, 0x77, 0x3E, 0x2D, 0x49, 0xDA, 0x81, 0x45,-    0x94, 0xA5, 0x54, 0x90, 0x89, 0xEF, 0xB1, 0xF3,-    0xAB, 0x5F, 0x15, 0x90, 0xCA, 0x0A, 0x02, 0xAF-  },-  {-    0xF6, 0x46, 0x11, 0x13, 0x7A, 0xD2, 0x95, 0x46,-    0x70, 0xEA, 0xEC, 0xD6, 0x26, 0xD2, 0x12, 0xCF,-    0xC5, 0xB9, 0xF6, 0xBB, 0x41, 0xAA, 0xEB, 0xB1,-    0xD7, 0x1E, 0x89, 0x79, 0x2E, 0xB1, 0x31, 0x7A,-    0xED, 0xC6, 0x38, 0x13, 0xFE, 0x63, 0xDE, 0x40,-    0x17, 0x98, 0xDF, 0x75, 0x6C, 0xA1, 0xF2, 0x20,-    0x35, 0xA0, 0xFA, 0xBD, 0x37, 0xFB, 0x11, 0x03,-    0x43, 0x7F, 0x89, 0x1E, 0xAD, 0x5E, 0x64, 0x29-  },-  {-    0x32, 0xE1, 0xF9, 0x38, 0xA2, 0x7F, 0xAA, 0xD8,-    0xAC, 0x4A, 0x13, 0xFD, 0x4F, 0x6A, 0x8B, 0xF3,-    0xDA, 0xBE, 0x4B, 0xC7, 0x2A, 0xF1, 0x1C, 0x8F,-    0x0E, 0x1A, 0x06, 0x56, 0x7E, 0xD7, 0x04, 0xB8,-    0xE7, 0x8E, 0x11, 0x40, 0xA0, 0xC7, 0x72, 0x4E,-    0x3E, 0xFB, 0x70, 0xD2, 0x38, 0x07, 0xCF, 0x38,-    0xE6, 0x27, 0xE3, 0x26, 0xAF, 0xC1, 0x64, 0xCD,-    0xED, 0x52, 0xB4, 0x41, 0x39, 0xFF, 0xB3, 0xF3-  },-  {-    0x48, 0x33, 0xAC, 0x92, 0xE3, 0x02, 0xAC, 0x2B,-    0x67, 0xB0, 0x2B, 0x88, 0x27, 0x14, 0x3B, 0xAD,-    0xA1, 0x5C, 0xED, 0x22, 0x0E, 0x1D, 0x1F, 0x5B,-    0x71, 0x12, 0x0C, 0x51, 0xEE, 0x54, 0xC1, 0x9D,-    0x30, 0x1F, 0x29, 0x60, 0xBD, 0xB5, 0xA2, 0xCE,-    0x27, 0xD4, 0x41, 0xD1, 0x4A, 0xF0, 0x80, 0xCB,-    0x01, 0x0A, 0x8A, 0x23, 0xEE, 0xFF, 0x58, 0x11,-    0xDF, 0xA4, 0x4D, 0x1D, 0x7B, 0x35, 0x8B, 0x48-  },-  {-    0x9A, 0x03, 0x88, 0xCE, 0xE1, 0xAD, 0x01, 0x46,-    0x17, 0x7C, 0x48, 0xB5, 0xA0, 0x8A, 0x2D, 0xB3,-    0xC4, 0x89, 0xE8, 0x4C, 0xE2, 0xAB, 0xA8, 0xC6,-    0x45, 0x11, 0x2A, 0x02, 0x1E, 0x41, 0x1C, 0xF8,-    0x29, 0x12, 0x7F, 0xA2, 0xF1, 0xD1, 0xAE, 0x1B,-    0xAF, 0x3A, 0x33, 0xEA, 0x53, 0x09, 0x84, 0x77,-    0xA7, 0xD1, 0x2B, 0xA7, 0x48, 0xD2, 0xAF, 0x24,-    0xD1, 0x66, 0x02, 0xE9, 0x19, 0x07, 0x76, 0x23-  },-  {-    0xE3, 0xDF, 0x00, 0x74, 0xA9, 0x37, 0x35, 0x13,-    0x0D, 0x99, 0x22, 0xD2, 0xBE, 0x91, 0x6F, 0x35,-    0x34, 0x3D, 0x98, 0x8C, 0xE5, 0x9D, 0x76, 0x97,-    0x15, 0xA9, 0x83, 0xB4, 0xBA, 0x80, 0x7C, 0xE1,-    0xEE, 0x70, 0xA3, 0x13, 0xE5, 0x92, 0x31, 0x58,-    0x4F, 0x55, 0x6E, 0xBB, 0xA1, 0xB9, 0x0B, 0x1B,-    0xB6, 0xA6, 0xC5, 0x81, 0xA4, 0xB4, 0x7C, 0x3F,-    0xF5, 0x21, 0x89, 0x65, 0x2A, 0xAB, 0x36, 0xF5-  },-  {-    0x91, 0x91, 0xCF, 0x46, 0x1B, 0x69, 0x59, 0xBE,-    0xC9, 0x3E, 0xAE, 0x7F, 0xB1, 0xC6, 0xE3, 0x70,-    0x73, 0xD1, 0xA6, 0x15, 0x27, 0xAD, 0x75, 0xD1,-    0x0B, 0x7F, 0x89, 0x49, 0xD9, 0xB8, 0xAF, 0x70,-    0xA2, 0x3A, 0xD1, 0x31, 0x2E, 0xD5, 0x1F, 0x70,-    0xF0, 0xE9, 0xDF, 0x60, 0x1D, 0xDA, 0xE2, 0x38,-    0x90, 0x6C, 0x0F, 0xE3, 0xF7, 0x66, 0xB1, 0x4F,-    0x11, 0x3B, 0x26, 0xBC, 0x85, 0x42, 0xD1, 0xD2-  },-  {-    0x2A, 0x8B, 0xAD, 0xE2, 0x72, 0xEE, 0x7A, 0xC6,-    0x43, 0xC5, 0xE3, 0x71, 0x47, 0xFA, 0xAC, 0x92,-    0xC3, 0x97, 0x0B, 0xD3, 0x86, 0x2F, 0x53, 0x1E,-    0x5D, 0xCE, 0xA5, 0xCE, 0xAC, 0xD1, 0x83, 0x74,-    0x53, 0xAA, 0x49, 0x8D, 0x78, 0x5B, 0x4D, 0x1F,-    0x89, 0xE1, 0xB2, 0xA7, 0x39, 0xCA, 0x4A, 0x38,-    0x49, 0x87, 0x30, 0x27, 0x46, 0xB4, 0xF1, 0x13,-    0x42, 0x43, 0x02, 0xC4, 0xA1, 0xE0, 0xF9, 0xDF-  },-  {-    0x32, 0x3E, 0x67, 0x93, 0xC7, 0xDD, 0x9B, 0x4D,-    0x7B, 0xB7, 0xFB, 0xF2, 0x15, 0x31, 0xD3, 0x7F,-    0x72, 0x64, 0x53, 0x2C, 0x58, 0xF1, 0x22, 0x55,-    0x48, 0xD0, 0x6E, 0x69, 0x40, 0xC6, 0x3E, 0x91,-    0x27, 0x09, 0x90, 0xE7, 0xF5, 0x64, 0x32, 0x03,-    0xC9, 0x87, 0x64, 0x7E, 0x5C, 0xF6, 0x61, 0x03,-    0xE7, 0x9B, 0x71, 0x4C, 0x58, 0x1B, 0xD8, 0x77,-    0x2E, 0x19, 0xD0, 0xF0, 0x05, 0xDC, 0x86, 0x33-  },-  {-    0xF9, 0x22, 0x07, 0x6D, 0x29, 0x5D, 0x23, 0xE2,-    0x98, 0x58, 0x30, 0xAA, 0xD2, 0xF2, 0x3F, 0x65,-    0x2F, 0x7F, 0x4D, 0xB4, 0x2C, 0x11, 0x9E, 0xD2,-    0x20, 0xA5, 0x45, 0x14, 0x88, 0xA4, 0x53, 0xF5,-    0x9F, 0xA8, 0xA2, 0xDE, 0x23, 0x03, 0x00, 0x0D,-    0x6B, 0xFD, 0x8C, 0x48, 0x23, 0xA8, 0x5F, 0xAD,-    0xB4, 0xFB, 0x8E, 0x7E, 0xAC, 0x12, 0x2B, 0xF0,-    0x12, 0x47, 0xD7, 0x6F, 0x65, 0x24, 0x7D, 0x45-  },-  {-    0xDC, 0x40, 0x00, 0x95, 0x60, 0x95, 0x92, 0x91,-    0x55, 0x8E, 0xBE, 0x07, 0x20, 0x64, 0xCE, 0x67,-    0x12, 0xC9, 0x21, 0xB5, 0x40, 0x9B, 0x44, 0xE0,-    0x4F, 0x9A, 0x56, 0x5E, 0xEA, 0xDD, 0x39, 0xA7,-    0x71, 0x6E, 0x21, 0xB4, 0x6D, 0xD8, 0x61, 0x65,-    0x17, 0xA2, 0x1A, 0x0C, 0x03, 0x41, 0x9E, 0x94,-    0xDB, 0x82, 0x0A, 0x35, 0x3F, 0x15, 0x2D, 0x10,-    0x83, 0x84, 0xBE, 0x94, 0x70, 0x09, 0x3F, 0x89-  },-  {-    0x7F, 0xA4, 0xBE, 0x91, 0xCA, 0x52, 0x07, 0xFF,-    0x08, 0x7D, 0xE9, 0x2F, 0x1D, 0xB0, 0x9B, 0xF7,-    0x1A, 0x67, 0x87, 0x8B, 0xED, 0x19, 0x3A, 0x5C,-    0x2C, 0xC4, 0xE3, 0x53, 0x23, 0xB8, 0xDF, 0x99,-    0xA2, 0x6E, 0xCB, 0x98, 0x88, 0xD7, 0xB3, 0x4A,-    0x73, 0x9D, 0x64, 0x1A, 0x0E, 0xCD, 0x0A, 0x66,-    0x47, 0xA6, 0xA0, 0x64, 0x26, 0xF3, 0xCC, 0x1F,-    0xEF, 0xDF, 0x90, 0x69, 0x92, 0x2F, 0xAE, 0x4C-  },-  {-    0xBA, 0xD3, 0xCD, 0x75, 0x90, 0x5D, 0x7B, 0xFD,-    0xA3, 0x32, 0x2B, 0x44, 0xA7, 0xD3, 0x58, 0x87,-    0x14, 0xD3, 0x33, 0xEE, 0x86, 0x85, 0x5A, 0x87,-    0x27, 0x47, 0xE7, 0x04, 0xF6, 0x11, 0x94, 0x84,-    0xBD, 0xB7, 0xD0, 0x77, 0xFA, 0x08, 0xED, 0xC4,-    0xA7, 0x9D, 0xE0, 0xF4, 0x3F, 0xCA, 0x8D, 0x43,-    0x6E, 0x8A, 0x10, 0x08, 0x57, 0xF5, 0x9B, 0xC7,-    0xB0, 0x55, 0xB9, 0x87, 0xF9, 0x7A, 0xC6, 0xB9-  },-  {-    0xB7, 0xDE, 0xE8, 0xE8, 0x33, 0x9D, 0xB2, 0x97,-    0xFD, 0xAA, 0x3C, 0xA5, 0xC1, 0xDC, 0x19, 0x88,-    0xD9, 0x7F, 0x5F, 0xB6, 0x20, 0x8C, 0x64, 0xDE,-    0xA9, 0x5E, 0x1C, 0x78, 0xF3, 0x37, 0xCE, 0x20,-    0xA2, 0xB4, 0xDF, 0x17, 0xA7, 0xB8, 0x23, 0x6A,-    0x90, 0xD6, 0x28, 0x67, 0x33, 0x16, 0x35, 0x72,-    0xC8, 0x67, 0xD9, 0x3D, 0xE8, 0x9E, 0xF6, 0x2F,-    0xA0, 0x5D, 0xAB, 0x70, 0x7E, 0xC3, 0xA7, 0x70-  },-  {-    0xA0, 0xF7, 0xE9, 0x3C, 0xF3, 0x25, 0x02, 0xB9,-    0xFD, 0x79, 0xEC, 0x20, 0x54, 0x62, 0x07, 0xF3,-    0x31, 0xC5, 0x29, 0x9E, 0xCE, 0xF3, 0x50, 0xD6,-    0x6E, 0xA8, 0x55, 0xC8, 0x7F, 0xBD, 0xDF, 0x18,-    0xE6, 0x91, 0xC2, 0x0D, 0x04, 0x5A, 0x30, 0x8F,-    0x83, 0xF6, 0xCB, 0x8F, 0xCA, 0x69, 0xD7, 0xE2,-    0xB3, 0x9B, 0x34, 0xD2, 0xF8, 0x77, 0x27, 0x6C,-    0x19, 0x6B, 0xF5, 0x14, 0xBA, 0xC6, 0x02, 0x70-  },-  {-    0x6F, 0x50, 0x93, 0xCF, 0xC8, 0x83, 0x00, 0xBF,-    0x68, 0x8E, 0x88, 0x4B, 0x4C, 0x5E, 0xC2, 0xC3,-    0x1A, 0x8C, 0xC2, 0x8D, 0x63, 0x31, 0xAD, 0x7C,-    0xA7, 0x1D, 0x97, 0x60, 0x21, 0x64, 0x82, 0x05,-    0x28, 0x15, 0xD4, 0x4F, 0xC6, 0x9E, 0x18, 0xA8,-    0xDC, 0x8B, 0xD7, 0x1B, 0x31, 0xF2, 0xB5, 0x89,-    0xA7, 0xC0, 0x78, 0x0B, 0x61, 0x99, 0x38, 0x5F,-    0x8D, 0xAE, 0x6C, 0x9B, 0x79, 0x74, 0xC4, 0xCB-  },-  {-    0x3C, 0xFF, 0x46, 0xAC, 0x35, 0x46, 0xF6, 0x5A,-    0xD7, 0xA7, 0x20, 0x87, 0x1A, 0xFA, 0x20, 0xA9,-    0x21, 0x6D, 0xDA, 0x5C, 0x45, 0x18, 0x81, 0x56,-    0xA5, 0xBB, 0xED, 0xF2, 0x15, 0x46, 0xD4, 0xBB,-    0x39, 0x40, 0xB2, 0x1A, 0x41, 0xA3, 0x94, 0x03,-    0xE3, 0xCF, 0xD5, 0xE7, 0xA0, 0xE7, 0x90, 0x4D,-    0xA9, 0x5F, 0x4D, 0x8E, 0x0C, 0x5B, 0xF5, 0xB7,-    0x0E, 0xB0, 0x29, 0x55, 0x6E, 0xFD, 0x49, 0x7E-  },-  {-    0xAF, 0x66, 0x8A, 0x80, 0x5E, 0x6D, 0x70, 0x4B,-    0x1E, 0x58, 0x1F, 0x1E, 0x8E, 0x3C, 0x00, 0xCF,-    0x4C, 0xF3, 0xE5, 0x46, 0x14, 0x7C, 0x40, 0x6D,-    0x17, 0xCA, 0x97, 0x4D, 0x19, 0xA0, 0x14, 0xC7,-    0x8B, 0x44, 0xE7, 0x2D, 0xDE, 0xEB, 0x65, 0x26,-    0x07, 0xE8, 0x6D, 0x69, 0x02, 0x59, 0xDC, 0xAB,-    0x0D, 0xDA, 0x81, 0xC7, 0x7C, 0x7E, 0xE2, 0x72,-    0x1E, 0x82, 0xBB, 0xB1, 0x39, 0x43, 0x07, 0x1D-  },-  {-    0x79, 0xDD, 0xEB, 0x5C, 0x54, 0xDE, 0xD1, 0xE4,-    0x48, 0x40, 0x71, 0xC4, 0x6B, 0xB4, 0x28, 0x02,-    0xD2, 0x3B, 0x3A, 0x08, 0xC1, 0x23, 0x11, 0xBE,-    0x36, 0x3C, 0x7C, 0x7A, 0x02, 0x5A, 0x17, 0x64,-    0xC8, 0xD8, 0x50, 0x69, 0xFD, 0xA8, 0xD5, 0x17,-    0x77, 0x7D, 0x8D, 0xD8, 0x09, 0xE3, 0xD4, 0xA9,-    0x56, 0x04, 0x1A, 0x70, 0x79, 0xF9, 0x16, 0x7B,-    0x0F, 0xE9, 0x71, 0x2E, 0x5F, 0x12, 0x29, 0xF5-  },-  {-    0x99, 0x8E, 0x82, 0xF4, 0x26, 0x3D, 0x53, 0xAE,-    0xDA, 0xC9, 0x39, 0xEB, 0xB6, 0xEB, 0x8B, 0x19,-    0x69, 0x74, 0x6C, 0xB8, 0x15, 0xBD, 0x72, 0x1F,-    0x17, 0xA4, 0x8B, 0xEE, 0x9E, 0xCF, 0xF2, 0xFE,-    0x59, 0x8C, 0x53, 0x9C, 0x41, 0x9A, 0x60, 0xE0,-    0xD5, 0xA0, 0x4F, 0x1C, 0xB5, 0x23, 0xA2, 0xFD,-    0x05, 0x38, 0xBB, 0x17, 0x8E, 0x44, 0x75, 0x8D,-    0x31, 0x59, 0xAB, 0x9E, 0x02, 0x84, 0x01, 0xA3-  },-  {-    0x33, 0x96, 0xCF, 0xD5, 0xCD, 0xE1, 0x4A, 0xEC,-    0x1A, 0xAE, 0xD3, 0xE1, 0x22, 0x52, 0xCF, 0xD6,-    0xE3, 0x42, 0xED, 0x25, 0x5E, 0x8E, 0x9E, 0x1B,-    0xE1, 0x0F, 0x1F, 0x27, 0x38, 0x77, 0xF3, 0x63,-    0x33, 0x81, 0xE3, 0xC9, 0x61, 0xE6, 0x7E, 0xC4,-    0x1E, 0x8F, 0x9E, 0x16, 0x11, 0x0F, 0xC0, 0x3D,-    0xDE, 0x88, 0xBF, 0xC0, 0x96, 0xFC, 0x15, 0x14,-    0x46, 0x1D, 0x70, 0xD0, 0xBE, 0xCE, 0x0A, 0xF6-  },-  {-    0x77, 0x7D, 0x9D, 0xC5, 0x5A, 0x2F, 0x57, 0xA4,-    0x6E, 0xA0, 0x6A, 0x2F, 0x4C, 0xB9, 0x76, 0x0D,-    0x00, 0xD7, 0xA8, 0x62, 0xD0, 0xA2, 0xAA, 0x19,-    0x46, 0x7B, 0x57, 0x0F, 0x7C, 0x7D, 0x5E, 0xA7,-    0x62, 0x9A, 0x95, 0xEB, 0x20, 0x0E, 0x1F, 0x9D,-    0xB0, 0x66, 0x10, 0xCF, 0x8E, 0x30, 0xD5, 0xE6,-    0xAD, 0x0A, 0x7B, 0x63, 0x29, 0x77, 0xFC, 0x21,-    0xBB, 0x17, 0x89, 0x67, 0xF3, 0xB0, 0xE0, 0x9B-  },-  {-    0x32, 0xEE, 0x35, 0x7F, 0xC9, 0x16, 0x36, 0xA8,-    0x55, 0xBA, 0x01, 0xA0, 0xB8, 0xDA, 0x6F, 0x35,-    0x53, 0xB1, 0xD5, 0x20, 0xAD, 0xCF, 0xE8, 0xFE,-    0x9D, 0xEB, 0xCC, 0xB2, 0x6C, 0x5C, 0x4C, 0xE8,-    0x50, 0x5B, 0xB1, 0xEF, 0xB5, 0xED, 0x5B, 0xAA,-    0x4C, 0x52, 0x45, 0xB5, 0x0D, 0x74, 0x46, 0x3F,-    0x07, 0x67, 0xB2, 0xC7, 0x83, 0xC4, 0x7A, 0x93,-    0xB0, 0xFD, 0xA6, 0x68, 0x95, 0x69, 0x3C, 0xE6-  },-  {-    0x34, 0x0C, 0x0A, 0x7C, 0xE4, 0x96, 0xFE, 0xBD,-    0xA1, 0x3F, 0xA2, 0x40, 0x7A, 0x21, 0xDC, 0x19,-    0x83, 0x9B, 0xED, 0xAE, 0x1A, 0x08, 0x6A, 0xD0,-    0xFE, 0xD3, 0x91, 0x7D, 0xF9, 0xBF, 0x40, 0x94,-    0x4A, 0x78, 0x7F, 0x64, 0x1E, 0x90, 0xDD, 0xBA,-    0xE0, 0x3A, 0x93, 0x37, 0x72, 0x3E, 0x51, 0x66,-    0x8F, 0xB8, 0x93, 0x77, 0x2C, 0x0F, 0xBD, 0xB3,-    0xEB, 0x7E, 0xF7, 0x90, 0xDF, 0xCB, 0xB9, 0xAB-  },-  {-    0xD8, 0x6A, 0x5B, 0xAA, 0x33, 0x65, 0xAB, 0xD8,-    0xF4, 0x42, 0xCD, 0x6E, 0xBB, 0x93, 0x11, 0x38,-    0x19, 0xF0, 0xB4, 0x60, 0x61, 0xE1, 0x34, 0x04,-    0xEF, 0xAA, 0x1A, 0x58, 0xE1, 0xFF, 0x27, 0x2A,-    0xD4, 0xBF, 0xD3, 0x08, 0x15, 0xAD, 0xD8, 0x8A,-    0xD9, 0x8F, 0xCE, 0x9A, 0xF0, 0x18, 0x37, 0x4C,-    0xA6, 0x0D, 0x89, 0x79, 0x0F, 0x71, 0xA6, 0x07,-    0x5F, 0x3D, 0x68, 0xD3, 0x20, 0x21, 0xA9, 0xEB-  },-  {-    0xA6, 0x7E, 0x6E, 0xC6, 0x57, 0xC9, 0x5E, 0xAB,-    0x3C, 0x3C, 0x32, 0xE4, 0x1F, 0xBF, 0x39, 0xCF,-    0x20, 0x33, 0xAB, 0x4B, 0xE2, 0xE2, 0xB8, 0x21,-    0x10, 0x4A, 0xDB, 0xE6, 0x9D, 0x16, 0xE9, 0x48,-    0xDC, 0xE4, 0xC4, 0xC6, 0xA3, 0xCF, 0x22, 0x76,-    0x90, 0x1F, 0x7D, 0x4F, 0xFD, 0x69, 0x65, 0x46,-    0x49, 0x88, 0x2C, 0x01, 0x4D, 0x2C, 0x10, 0xA1,-    0x30, 0x2B, 0x79, 0xC6, 0x15, 0x69, 0xCD, 0x36-  },-  {-    0x55, 0xCE, 0x19, 0x2A, 0xE4, 0xB3, 0xEA, 0xF8,-    0x55, 0x59, 0x0E, 0x2D, 0x44, 0xE6, 0x25, 0xD9,-    0xBA, 0x14, 0x6E, 0xB7, 0x50, 0x48, 0xE6, 0xB5,-    0x6E, 0x02, 0x50, 0x31, 0xEF, 0xBA, 0x0B, 0xDA,-    0x8A, 0xAA, 0xFA, 0x04, 0x70, 0xB7, 0xAC, 0x3D,-    0x40, 0x6E, 0x5A, 0xBA, 0x3E, 0x83, 0x2F, 0x27,-    0xA5, 0x07, 0x24, 0x6D, 0x1B, 0x5F, 0x33, 0xDE,-    0xA1, 0xF7, 0x24, 0xE2, 0xB8, 0x1B, 0x0C, 0x98-  },-  {-    0xB3, 0xA2, 0x0C, 0x1F, 0xB0, 0xB4, 0xF0, 0xD3,-    0x77, 0x26, 0xC2, 0x3B, 0x58, 0x77, 0xDD, 0x8E,-    0x72, 0xF6, 0x98, 0x86, 0xE0, 0x9A, 0x8C, 0x68,-    0xCF, 0xC3, 0x01, 0xD2, 0xA3, 0xF2, 0xF9, 0x5C,-    0xEF, 0xCF, 0xAB, 0xB8, 0x88, 0x99, 0x03, 0xC7,-    0x32, 0xF4, 0xE8, 0x14, 0x32, 0xD3, 0xF6, 0x78,-    0xCC, 0xDF, 0xC3, 0x98, 0xAC, 0xD8, 0xA2, 0xF0,-    0x66, 0x41, 0x10, 0x04, 0x50, 0xD8, 0x9F, 0x32-  },-  {-    0xF7, 0x27, 0x2D, 0x93, 0xC7, 0x01, 0x2D, 0x38,-    0xB2, 0x7F, 0x0C, 0x9A, 0xE2, 0x01, 0x79, 0x58,-    0xBB, 0xA6, 0x66, 0xA9, 0xDE, 0x1E, 0x88, 0x12,-    0xE9, 0x74, 0x37, 0xAE, 0xB2, 0xE0, 0x3C, 0x99,-    0x94, 0x38, 0xF0, 0xBE, 0x33, 0x3D, 0x09, 0xAD,-    0xDB, 0xCF, 0xAA, 0xC7, 0xAA, 0x73, 0xF7, 0xB6,-    0xCC, 0xEC, 0x67, 0xDC, 0x07, 0x79, 0x98, 0xDE,-    0xDB, 0x8C, 0x13, 0x32, 0xBA, 0xC0, 0xFB, 0xA8-  },-  {-    0x1F, 0xE7, 0xB3, 0xDE, 0x34, 0xC0, 0x47, 0x9C,-    0xA8, 0x40, 0x5F, 0x3C, 0xBC, 0xD2, 0xDB, 0x64,-    0xBB, 0x18, 0xDB, 0xB2, 0x91, 0xA5, 0xFE, 0xAA,-    0x16, 0xC5, 0x22, 0x8C, 0x93, 0xEE, 0x21, 0xC7,-    0x11, 0xD6, 0x8A, 0x01, 0x0C, 0x2A, 0xE8, 0x80,-    0x05, 0xEB, 0xAC, 0x95, 0x9E, 0x3A, 0x32, 0x24,-    0x52, 0xF8, 0x62, 0xDD, 0xE9, 0x4B, 0xB9, 0x41,-    0x81, 0x3E, 0x52, 0x4D, 0x23, 0x47, 0xFE, 0xEE-  },-  {-    0x4E, 0xE1, 0xD3, 0x88, 0x05, 0xC3, 0x22, 0x84,-    0xEC, 0xEB, 0xE9, 0x2E, 0x3D, 0xF6, 0xCD, 0x98,-    0xC7, 0xD6, 0x68, 0x0E, 0xAB, 0x0D, 0x68, 0x66,-    0x4F, 0x96, 0x70, 0x6C, 0x45, 0x63, 0x3B, 0x1E,-    0x26, 0x82, 0x22, 0xAA, 0x5A, 0x52, 0x79, 0xEF,-    0x01, 0xFC, 0x28, 0x54, 0x32, 0xAB, 0xEE, 0xD7,-    0x4B, 0xA3, 0xDF, 0x18, 0x9F, 0x50, 0xA9, 0x89,-    0xD5, 0x8E, 0x71, 0x30, 0x62, 0x2D, 0xAA, 0x59-  },-  {-    0x0E, 0x14, 0x05, 0x87, 0x1C, 0x87, 0xA5, 0xEA,-    0x40, 0x83, 0x42, 0xF3, 0x9D, 0x34, 0x94, 0xF9,-    0x39, 0xF7, 0x3C, 0x22, 0x60, 0xC2, 0xA4, 0x3A,-    0x5C, 0x9F, 0x1B, 0x57, 0x33, 0x0C, 0xCA, 0x40,-    0x93, 0xFC, 0x1F, 0x42, 0xF9, 0x6D, 0x83, 0x00,-    0x56, 0x77, 0x03, 0x7D, 0xB5, 0x1A, 0xEF, 0x26,-    0xF0, 0x54, 0x38, 0x05, 0x7A, 0xE7, 0x9E, 0xD1,-    0x44, 0x64, 0xFD, 0x8E, 0x57, 0xD1, 0x55, 0x86-  },-  {-    0x17, 0xC5, 0xCA, 0xB4, 0x09, 0x10, 0x73, 0x62,-    0x1B, 0x5C, 0x24, 0xC3, 0x36, 0x31, 0x6D, 0x0C,-    0xF6, 0x49, 0xBA, 0x1E, 0xFF, 0xEB, 0xFC, 0x87,-    0xE0, 0x43, 0x9C, 0xDF, 0x57, 0x88, 0x87, 0xB2,-    0x21, 0x65, 0x6D, 0x33, 0x9A, 0x6F, 0xD1, 0x98,-    0xAB, 0xAE, 0xE6, 0x7E, 0xA1, 0x88, 0xDD, 0x66,-    0x56, 0x78, 0x23, 0xFC, 0x22, 0x0C, 0x52, 0xB5,-    0x74, 0x90, 0x25, 0x14, 0x69, 0xD2, 0x5D, 0x8C-  },-  {-    0x57, 0xDC, 0x27, 0x97, 0xD1, 0x42, 0x68, 0x1C,-    0x94, 0xFE, 0x48, 0x86, 0x26, 0x98, 0x6E, 0xD4,-    0xB2, 0x67, 0x03, 0xCB, 0xF6, 0xBF, 0xE5, 0x93,-    0x91, 0x64, 0x36, 0x57, 0x06, 0x5B, 0x2D, 0x46,-    0xE4, 0xB1, 0xDD, 0xB3, 0xAA, 0x83, 0x2C, 0x9B,-    0xD4, 0x49, 0x75, 0x5A, 0xC8, 0xB1, 0xBF, 0x93,-    0x68, 0x97, 0xFB, 0xC6, 0xAD, 0xE3, 0x78, 0xF2,-    0xBD, 0x64, 0x93, 0xE4, 0x86, 0xF4, 0x20, 0x29-  },-  {-    0x44, 0x12, 0xDD, 0x6B, 0xED, 0x6D, 0xB2, 0xA8,-    0x03, 0xC2, 0xE0, 0xDF, 0x8F, 0x58, 0x29, 0xE7,-    0xA4, 0xB0, 0x41, 0x78, 0x89, 0x51, 0x0D, 0xF7,-    0xDF, 0xEE, 0x49, 0x57, 0x4A, 0x71, 0xEC, 0x0D,-    0x9E, 0x0D, 0x46, 0x06, 0x50, 0x17, 0xC7, 0x2D,-    0xD9, 0x74, 0x39, 0x33, 0xCA, 0x83, 0x9A, 0x76,-    0x8D, 0xD1, 0x5A, 0xB0, 0xB7, 0xC1, 0x4C, 0x62,-    0x6A, 0x35, 0x41, 0x09, 0x69, 0x01, 0x96, 0xAE-  },-  {-    0xD0, 0xEB, 0xC7, 0x71, 0x03, 0x1B, 0x7C, 0x16,-    0x00, 0x21, 0xC9, 0xB6, 0xFB, 0xB2, 0xB6, 0x70,-    0xE3, 0xB4, 0x02, 0x70, 0x02, 0x69, 0x07, 0xA3,-    0x91, 0x63, 0xDB, 0x18, 0x73, 0xEC, 0xC3, 0xB8,-    0x00, 0x11, 0x1D, 0xD7, 0xBF, 0x13, 0x8F, 0x83,-    0xA6, 0x10, 0xDC, 0x04, 0x6D, 0xA2, 0x68, 0xB7,-    0x2B, 0x8C, 0x90, 0x86, 0x92, 0x23, 0x77, 0xDB,-    0xED, 0x73, 0x94, 0x82, 0x43, 0xCA, 0x1E, 0x14-  },-  {-    0x10, 0xC4, 0xBA, 0x31, 0x55, 0x91, 0x69, 0x8D,-    0xFB, 0x91, 0xA5, 0x73, 0x37, 0x63, 0x18, 0x84,-    0xB4, 0x73, 0x8D, 0x9F, 0x59, 0x80, 0x78, 0x51,-    0xA6, 0x79, 0x84, 0x0C, 0xC2, 0x87, 0xAC, 0xE3,-    0x01, 0x1C, 0xCD, 0xC8, 0xF4, 0xA4, 0x85, 0xBB,-    0x19, 0x73, 0x40, 0x4E, 0xF9, 0xEE, 0x9B, 0x9C,-    0xF1, 0xEA, 0xDB, 0xC5, 0x40, 0x74, 0xC6, 0xD1,-    0x13, 0xDE, 0x8F, 0xC9, 0x1D, 0x07, 0x97, 0xEB-  },-  {-    0x14, 0x64, 0x34, 0x7B, 0xE3, 0x2C, 0x79, 0x59,-    0x17, 0x2B, 0x74, 0x72, 0xD1, 0x1F, 0xE0, 0x78,-    0x44, 0xA5, 0x2E, 0x2D, 0x3B, 0x2D, 0x05, 0x8C,-    0xC6, 0xBC, 0xC0, 0xA8, 0xA2, 0x75, 0xD6, 0xB8,-    0x2B, 0x2D, 0x62, 0x63, 0x75, 0x5E, 0xAF, 0x2A,-    0x65, 0x88, 0xB6, 0xA1, 0xEB, 0x79, 0x9A, 0xF8,-    0x3A, 0x4C, 0xE7, 0x53, 0xF8, 0xC7, 0x5A, 0x22,-    0x84, 0xD0, 0x28, 0x5B, 0xAB, 0x5F, 0x7C, 0x1C-  },-  {-    0xF4, 0x09, 0x23, 0x1E, 0xD1, 0x87, 0xF5, 0xC4,-    0xE8, 0x33, 0xFA, 0x9E, 0x30, 0x42, 0xAC, 0xA6,-    0xC8, 0x58, 0xB0, 0x8B, 0x49, 0x6B, 0x25, 0x31,-    0xF8, 0x4F, 0xD5, 0xCE, 0xA9, 0x3E, 0xCD, 0x06,-    0xDA, 0xFE, 0x0A, 0x10, 0xC3, 0xFF, 0x23, 0x76,-    0xC7, 0x4D, 0xC8, 0x0D, 0xA0, 0x7D, 0xA0, 0x18,-    0x64, 0xFB, 0xF2, 0x68, 0x59, 0x60, 0xB5, 0x40,-    0xB3, 0xA2, 0xE9, 0x42, 0xCB, 0x8D, 0x90, 0x9F-  },-  {-    0x39, 0x51, 0x32, 0xC5, 0x80, 0xC3, 0x55, 0xB5,-    0xB0, 0xE2, 0x35, 0x33, 0x6C, 0x8D, 0xC1, 0x08,-    0x5E, 0x59, 0x59, 0x64, 0x04, 0x3D, 0x38, 0x9E,-    0x08, 0x1E, 0xFE, 0x48, 0x5B, 0xA4, 0xC6, 0x37,-    0x72, 0xDB, 0x8D, 0x7E, 0x0F, 0x18, 0x6C, 0x50,-    0x98, 0x2E, 0x12, 0x23, 0xEA, 0x78, 0x5A, 0xDC,-    0x74, 0x0B, 0x0C, 0xF2, 0x18, 0x70, 0x74, 0x58,-    0xB8, 0xB8, 0x03, 0x40, 0x42, 0xF9, 0x23, 0xC2-  },-  {-    0xF9, 0x2A, 0xBA, 0xCA, 0x21, 0x32, 0x29, 0x66,-    0x06, 0x49, 0xEF, 0x2D, 0x8F, 0x88, 0x11, 0x5B,-    0x5B, 0xED, 0x8A, 0xB5, 0xB9, 0xBC, 0xA9, 0xA1,-    0xB4, 0xC5, 0x24, 0x57, 0x03, 0x53, 0x10, 0xC4,-    0x1A, 0x6B, 0xEA, 0x2B, 0x23, 0xB7, 0x91, 0x8B,-    0x5B, 0x8B, 0xF3, 0x8B, 0x52, 0xEA, 0xC6, 0xFF,-    0x3B, 0x62, 0x13, 0xA5, 0x22, 0xF3, 0x81, 0xBE,-    0x7F, 0xF0, 0x90, 0x6D, 0xBA, 0x7B, 0xD0, 0x0C-  },-  {-    0xCB, 0xAD, 0xE7, 0xAD, 0x3B, 0x5D, 0xEE, 0x0F,-    0xF1, 0xA4, 0x6B, 0x08, 0x2C, 0xF4, 0xE1, 0xE1,-    0xDC, 0x21, 0x62, 0x0D, 0xD2, 0xCC, 0x0E, 0xDC,-    0x2C, 0x70, 0x7A, 0x21, 0x62, 0xD2, 0x14, 0x99,-    0x69, 0xAB, 0xBB, 0x29, 0xC5, 0x72, 0x0B, 0x04,-    0xBD, 0x15, 0x68, 0xA9, 0x55, 0x61, 0x95, 0xE6,-    0x7F, 0x24, 0x32, 0x2D, 0xD9, 0xAA, 0x4E, 0x83,-    0x65, 0x19, 0x1A, 0xA5, 0xB6, 0xC4, 0x45, 0x79-  },-  {-    0xF5, 0x1B, 0x4A, 0xE4, 0xD4, 0xC5, 0x4A, 0x29,-    0xCF, 0x71, 0x35, 0xA8, 0xFE, 0x1E, 0xAB, 0xD5,-    0xE1, 0xBC, 0xBF, 0x82, 0x08, 0x96, 0x96, 0x7D,-    0xC4, 0x1E, 0x38, 0x49, 0xDA, 0xC2, 0x25, 0x07,-    0x69, 0x42, 0x10, 0xCA, 0x11, 0xC4, 0xEB, 0xF1,-    0xC2, 0x9A, 0x8D, 0x4F, 0x71, 0xB3, 0x0F, 0x76,-    0xC9, 0xB6, 0x01, 0x0A, 0xD9, 0x5B, 0xDF, 0xB0,-    0xDE, 0x83, 0x79, 0x25, 0xF0, 0x61, 0x25, 0x97-  },-  {-    0xCE, 0x38, 0x72, 0x11, 0x5D, 0x83, 0x3B, 0x34,-    0x56, 0xCA, 0x94, 0x2E, 0x6E, 0x38, 0x5F, 0x28,-    0xA9, 0x03, 0xBE, 0xAB, 0xFB, 0x75, 0x3F, 0x8A,-    0xFC, 0xCC, 0x12, 0xF2, 0x58, 0x2C, 0xE1, 0xF3,-    0x62, 0x12, 0xBD, 0x05, 0xE0, 0x5A, 0x46, 0xFC,-    0x88, 0xD3, 0x19, 0x50, 0xB4, 0x91, 0x1A, 0xE5,-    0xDC, 0xD8, 0xFF, 0x7A, 0x0B, 0x50, 0x47, 0x4C,-    0xB4, 0x88, 0xCC, 0xF2, 0xA8, 0x9C, 0xD0, 0xEB-  },-  {-    0x9B, 0xB7, 0x4C, 0xBD, 0x47, 0xA6, 0x24, 0xCB,-    0xEA, 0xFC, 0xC1, 0x6D, 0x46, 0x29, 0x47, 0xBB,-    0xEA, 0x13, 0x70, 0xB8, 0x5C, 0x96, 0x1A, 0x40,-    0x7D, 0xF9, 0x86, 0x3E, 0x54, 0xE6, 0xD9, 0xE6,-    0xA8, 0xD2, 0xEF, 0x0C, 0x64, 0x97, 0x20, 0x5E,-    0x5E, 0xB7, 0xC3, 0xE5, 0x9E, 0x69, 0x8D, 0x99,-    0x24, 0x63, 0xCA, 0x9D, 0xD4, 0xCF, 0x28, 0xCF,-    0x9A, 0x2D, 0x4E, 0x30, 0xC1, 0x33, 0xE8, 0x55-  },-  {-    0x72, 0x96, 0x33, 0x82, 0x0B, 0xF0, 0x13, 0xD9,-    0xD2, 0xBD, 0x37, 0x3C, 0xCA, 0xC7, 0xBC, 0x9F,-    0x37, 0x16, 0xF6, 0x9E, 0x16, 0xA4, 0x4E, 0x94,-    0x9C, 0x7A, 0x9A, 0x93, 0xDC, 0xA1, 0x26, 0xBB,-    0x1A, 0xA5, 0x4E, 0x5E, 0x70, 0x40, 0x70, 0x7F,-    0x02, 0x87, 0x6A, 0xFD, 0x02, 0x0A, 0xF4, 0x72,-    0x63, 0x9D, 0x49, 0xF5, 0x42, 0x0D, 0x29, 0x4C,-    0x3A, 0xA3, 0x1D, 0x06, 0x7E, 0x3E, 0x85, 0x75-  },-  {-    0x06, 0x86, 0x1D, 0xB3, 0x07, 0xC6, 0x78, 0x08,-    0x6E, 0x8B, 0x2A, 0xEC, 0xDF, 0x18, 0x29, 0xD2,-    0x88, 0x3D, 0x28, 0xB7, 0x31, 0xAB, 0xD0, 0xF1,-    0xE7, 0x2F, 0x1C, 0xED, 0x6C, 0x7A, 0xD4, 0x17,-    0x2E, 0xCA, 0x63, 0x22, 0xA8, 0x3F, 0xB6, 0xA6,-    0x5A, 0xFA, 0x37, 0xE9, 0x4A, 0x3E, 0x2B, 0xA2,-    0x05, 0xB8, 0x7B, 0xF3, 0x82, 0xD9, 0x15, 0x88,-    0x49, 0x7A, 0x46, 0x50, 0x88, 0x3B, 0xD8, 0x75-  },-  {-    0x35, 0x6E, 0xCE, 0xAF, 0x17, 0x02, 0xB3, 0x70,-    0xF4, 0xAA, 0xB8, 0xEA, 0x82, 0x84, 0x86, 0xF3,-    0x30, 0x13, 0xF7, 0x44, 0xB3, 0x9E, 0x7E, 0xA2,-    0x6C, 0x69, 0x18, 0xD6, 0x0E, 0x1A, 0xBC, 0xF4,-    0x4F, 0xB1, 0x6E, 0xDC, 0xA7, 0x72, 0x0A, 0xCF,-    0xC6, 0xA7, 0x01, 0xBF, 0x1E, 0x2C, 0x35, 0xDD,-    0xBD, 0x69, 0x5A, 0x8D, 0x40, 0x8E, 0x8C, 0x96,-    0x32, 0xE8, 0xCD, 0x27, 0x23, 0x0C, 0xAD, 0x8D-  },-  {-    0x48, 0x9A, 0x39, 0xD0, 0xFC, 0x3C, 0xDE, 0xAF,-    0x42, 0x89, 0x2E, 0xD8, 0x03, 0x85, 0xC1, 0x1C,-    0xE2, 0x93, 0xC9, 0x32, 0x21, 0x5B, 0xB2, 0x31,-    0x88, 0x69, 0x2A, 0x86, 0xE6, 0x1B, 0xCA, 0xD9,-    0x2C, 0x2A, 0x1D, 0x11, 0x42, 0x60, 0x1B, 0x1B,-    0xDF, 0x09, 0x82, 0xD1, 0xCD, 0x1E, 0x05, 0xC0,-    0x52, 0xDE, 0x81, 0x9E, 0x64, 0xF2, 0x47, 0xDB,-    0x35, 0x91, 0x5D, 0xD1, 0xDB, 0x79, 0xA3, 0xB5-  },-  {-    0xC0, 0x2F, 0x46, 0x4B, 0x4D, 0xD1, 0x81, 0x17,-    0xE3, 0x0A, 0x8D, 0xB8, 0xEF, 0x1D, 0xA0, 0x67,-    0x13, 0x4B, 0x60, 0x4E, 0xFA, 0x19, 0x51, 0x76,-    0x7E, 0xE6, 0x32, 0xDC, 0x02, 0x4D, 0x64, 0xC0,-    0x0F, 0x24, 0x49, 0xF0, 0x42, 0xDB, 0x3A, 0xEA,-    0x01, 0x74, 0xEB, 0xCD, 0xBB, 0x4F, 0xF5, 0x9D,-    0xAE, 0x75, 0x4F, 0x72, 0x39, 0x46, 0xF1, 0xB9,-    0x0A, 0x77, 0xFD, 0x95, 0x23, 0x69, 0x0B, 0x7B-  },-  {-    0xFB, 0x31, 0xE6, 0xDD, 0xB8, 0x6D, 0xBF, 0xF3,-    0x72, 0x64, 0x6D, 0x1E, 0x3A, 0x3F, 0x31, 0xDD,-    0x61, 0x15, 0x9F, 0xC3, 0x93, 0x65, 0x8C, 0x2E,-    0xE9, 0x57, 0x10, 0x3B, 0xF2, 0x11, 0x6B, 0xDE,-    0xF8, 0x2C, 0x33, 0xE8, 0x69, 0xF3, 0xC8, 0x3A,-    0xC3, 0xC2, 0xF6, 0x38, 0x0C, 0xF6, 0x92, 0xF7,-    0xB1, 0xDC, 0xBA, 0xE0, 0xBB, 0x22, 0x7A, 0xD3,-    0x47, 0xE7, 0x54, 0x13, 0x74, 0x66, 0xC6, 0x9F-  },-  {-    0x00, 0x60, 0x62, 0xAB, 0xE1, 0x6C, 0x2F, 0xE7,-    0x9A, 0xF8, 0x80, 0x85, 0xE0, 0xB5, 0x82, 0xB1,-    0x06, 0xE7, 0xF7, 0x9F, 0x01, 0xA4, 0x39, 0x46,-    0xC7, 0x8B, 0x19, 0xF9, 0xBD, 0xD7, 0x25, 0x99,-    0x76, 0x36, 0xA3, 0x32, 0xEB, 0x9A, 0x3A, 0xAA,-    0x6D, 0xE0, 0xD4, 0xA8, 0xE9, 0xE2, 0x8E, 0x8C,-    0x77, 0x87, 0x74, 0x22, 0x4C, 0x66, 0x5B, 0xF7,-    0xBC, 0x36, 0x44, 0xFC, 0xE4, 0x11, 0x22, 0x8C-  },-  {-    0xD4, 0x4A, 0x6D, 0xB3, 0xDE, 0x9F, 0xD4, 0xE4,-    0xA7, 0xEF, 0x15, 0x5A, 0x01, 0xBC, 0xCB, 0x91,-    0xC1, 0xBC, 0xF1, 0xCB, 0x53, 0x22, 0x56, 0x89,-    0xA7, 0x7A, 0x0D, 0x23, 0xB4, 0xD3, 0x9A, 0x89,-    0xA1, 0x89, 0xF2, 0x89, 0x80, 0xF9, 0x1C, 0x56,-    0xEA, 0xC5, 0x87, 0x9E, 0xAE, 0x93, 0x3C, 0xED,-    0x7F, 0x26, 0x7E, 0x2F, 0x70, 0x40, 0xEB, 0x38,-    0x0F, 0xDB, 0xBF, 0x34, 0xA6, 0xB7, 0xB6, 0x15-  },-  {-    0x5A, 0xFB, 0xFE, 0xA1, 0xDE, 0xDA, 0x5A, 0xEA,-    0xB9, 0x2E, 0x4D, 0x0C, 0x31, 0xD1, 0x6A, 0x9A,-    0x86, 0xBF, 0x7C, 0x75, 0x23, 0x27, 0x4A, 0x05,-    0xC5, 0x05, 0x29, 0xF5, 0xC1, 0x39, 0xDB, 0x10,-    0x93, 0x3A, 0x52, 0xC6, 0x22, 0x9C, 0xD3, 0x11,-    0x08, 0xF0, 0x83, 0xFB, 0x0C, 0x85, 0xCF, 0x52,-    0x83, 0x1B, 0x5A, 0x05, 0xF2, 0x55, 0x0A, 0x77,-    0xB5, 0x70, 0x3C, 0xC6, 0x68, 0x91, 0x2D, 0xBC-  },-  {-    0xD1, 0x7F, 0xCA, 0xD4, 0xE0, 0xD8, 0xBD, 0xE2,-    0xED, 0xFD, 0xA1, 0x68, 0xBA, 0x47, 0x10, 0x4B,-    0xBC, 0xA4, 0xD2, 0x6D, 0xA2, 0xD3, 0x1A, 0x07,-    0x0B, 0x0F, 0xBA, 0x0B, 0x26, 0xEE, 0xDD, 0x95,-    0xEE, 0xC1, 0xFC, 0x34, 0xD7, 0x6C, 0xD4, 0xA1,-    0xCB, 0x15, 0xF2, 0x62, 0x16, 0x88, 0xA9, 0xCC,-    0x0E, 0x96, 0x35, 0x8D, 0xE9, 0x93, 0x22, 0x2B,-    0xB3, 0xE3, 0xCD, 0x0B, 0xFD, 0xCB, 0x74, 0x6C-  },-  {-    0xBD, 0x6A, 0x59, 0x21, 0x63, 0x37, 0xB4, 0x5D,-    0x6B, 0x71, 0xAE, 0xAC, 0x01, 0x36, 0x6B, 0xFE,-    0x96, 0x60, 0xE0, 0xFB, 0xC2, 0x95, 0x9A, 0xDB,-    0xB6, 0x8D, 0x52, 0x6C, 0x43, 0xD4, 0x8F, 0xFF,-    0xFE, 0x2F, 0xFC, 0x43, 0x05, 0x88, 0xE7, 0x8E,-    0x66, 0x54, 0x6A, 0x3C, 0x70, 0x9B, 0x0A, 0xCE,-    0xA1, 0x7C, 0xBC, 0x5A, 0x21, 0x8C, 0x53, 0xCD,-    0x47, 0xAA, 0x48, 0x71, 0xC1, 0xDD, 0x98, 0x4A-  },-  {-    0x83, 0xEA, 0x5A, 0xE1, 0x89, 0x11, 0x45, 0xC4,-    0x1A, 0x7C, 0x6C, 0x87, 0xFE, 0x92, 0x24, 0x87,-    0xF5, 0xD2, 0x82, 0x93, 0x35, 0x69, 0xB7, 0xAE,-    0x0E, 0x34, 0x56, 0x53, 0x38, 0x1E, 0xDE, 0x6D,-    0x4B, 0x16, 0xE1, 0x44, 0xD1, 0xC3, 0xE8, 0xF0,-    0x60, 0x5D, 0xAA, 0x0D, 0xB5, 0x96, 0x5A, 0x7B,-    0x79, 0xD9, 0x1A, 0x8A, 0xFE, 0x11, 0xF1, 0xE0,-    0xBC, 0x54, 0x9A, 0xC0, 0x74, 0xA0, 0x1A, 0xB7-  },-  {-    0x37, 0x50, 0x50, 0xCF, 0x2E, 0x43, 0x0D, 0x0E,-    0x29, 0x87, 0x58, 0x35, 0x20, 0x8E, 0x89, 0x06,-    0xD7, 0x05, 0x2E, 0x47, 0x29, 0x2C, 0x5A, 0x38,-    0xA6, 0x30, 0x82, 0x87, 0x3D, 0x31, 0xD5, 0x83,-    0x13, 0x5C, 0x07, 0xA2, 0x0C, 0x52, 0xD9, 0x5B,-    0x2D, 0x5D, 0xC3, 0xEA, 0xDE, 0x6B, 0xE1, 0x43,-    0xCA, 0x34, 0x38, 0xF4, 0x4D, 0x02, 0x0A, 0xAE,-    0x16, 0x0E, 0xD7, 0x7A, 0xB9, 0x88, 0x4F, 0x7D-  },-  {-    0x30, 0x28, 0xB0, 0xE8, 0x24, 0x95, 0x7F, 0xF3,-    0xB3, 0x05, 0xE9, 0x7F, 0xF5, 0x92, 0xAA, 0x8E,-    0xF2, 0x9B, 0x3B, 0xEC, 0x1D, 0xC4, 0x7B, 0x76,-    0x13, 0x3D, 0x10, 0x3F, 0xFE, 0x38, 0x71, 0xBF,-    0x05, 0x12, 0xA2, 0x31, 0xAF, 0xCB, 0x1D, 0xF8,-    0x65, 0x97, 0xEC, 0x5E, 0x46, 0xE9, 0x23, 0xC8,-    0xB9, 0x85, 0xC2, 0x85, 0x08, 0x57, 0xC6, 0x40,-    0x01, 0xB2, 0xC5, 0x51, 0xEA, 0x83, 0x3D, 0x0E-  },-  {-    0x08, 0x7C, 0xCB, 0x1E, 0x5B, 0xD1, 0x72, 0x22,-    0xB8, 0xAF, 0x20, 0x6D, 0xD6, 0x39, 0x08, 0xF8,-    0x91, 0x72, 0x97, 0x62, 0x1A, 0x8C, 0xB9, 0x33,-    0x0A, 0xE0, 0xBA, 0x4A, 0xF3, 0xE9, 0xD6, 0x0C,-    0x98, 0xFC, 0xF1, 0xEF, 0xFC, 0xEC, 0x20, 0x13,-    0x6B, 0x4F, 0x91, 0x88, 0x12, 0x6D, 0xFA, 0x04,-    0x4E, 0x1C, 0x1C, 0xCD, 0xA3, 0xCE, 0xD8, 0x73,-    0x73, 0xD9, 0x37, 0x9C, 0xCB, 0xED, 0xBD, 0xB3-  },-  {-    0x7F, 0x17, 0x06, 0x24, 0x98, 0xBF, 0xA2, 0xBB,-    0x58, 0x56, 0xCD, 0x0A, 0x62, 0xC5, 0x68, 0xC5,-    0xC6, 0xB8, 0x97, 0x43, 0x24, 0x74, 0xEF, 0xB2,-    0xE6, 0xA2, 0xEE, 0x18, 0xCA, 0xFF, 0xD2, 0x1E,-    0x1E, 0xF3, 0x0D, 0x06, 0x47, 0x23, 0x85, 0x0F,-    0x79, 0x90, 0xD2, 0x1B, 0xA3, 0x4E, 0x8F, 0x2B,-    0x3B, 0xB0, 0x67, 0x02, 0x3A, 0x77, 0x27, 0x82,-    0x15, 0x8A, 0x27, 0xC6, 0xC4, 0x67, 0xC9, 0x28-  },-  {-    0x6B, 0xA9, 0x86, 0xA9, 0x42, 0x49, 0x7F, 0xD3,-    0x84, 0x62, 0x97, 0x2F, 0x50, 0xA6, 0x19, 0x68,-    0xC0, 0x65, 0x2D, 0xAC, 0x56, 0xCE, 0x9B, 0x9A,-    0xC1, 0xBC, 0x06, 0x1A, 0xB6, 0x34, 0xFE, 0x5A,-    0x77, 0xAC, 0xD0, 0x27, 0x5F, 0x83, 0x96, 0xE3,-    0xC0, 0xBE, 0xF0, 0x12, 0xAE, 0x93, 0xB7, 0x27,-    0x58, 0xB8, 0xD7, 0x67, 0x9C, 0x87, 0xE8, 0x47,-    0xE6, 0x30, 0x17, 0xB5, 0x5A, 0x69, 0xC5, 0xC6-  },-  {-    0x96, 0x7C, 0x81, 0xF5, 0x61, 0x95, 0x18, 0x33,-    0xFA, 0x56, 0x6F, 0x6B, 0x36, 0x07, 0x7E, 0xAD,-    0xB2, 0xA6, 0x15, 0xCC, 0x15, 0xF0, 0xED, 0xBB,-    0xAE, 0x4F, 0x84, 0x4D, 0xDC, 0x8E, 0x9C, 0x1F,-    0xB8, 0x3D, 0x31, 0xA9, 0x3F, 0xCB, 0x17, 0x74,-    0xD7, 0x40, 0xD6, 0x92, 0x08, 0xCA, 0x59, 0x30,-    0xBC, 0xFA, 0xC4, 0xA1, 0xF9, 0x44, 0x46, 0x9F,-    0xEF, 0xD1, 0x9B, 0x6E, 0x93, 0x75, 0xE0, 0xB5-  },-  {-    0xE8, 0xAE, 0xF1, 0x78, 0xE6, 0xDA, 0x3E, 0xF5,-    0xCA, 0xED, 0x65, 0x30, 0xF7, 0xEB, 0x25, 0x60,-    0x82, 0x56, 0xC2, 0x37, 0x7C, 0x4C, 0xF9, 0x6B,-    0x0C, 0xFD, 0x0D, 0x76, 0xEE, 0xB4, 0xBB, 0x86,-    0xEE, 0xFF, 0x7B, 0x7D, 0xF1, 0x58, 0x5C, 0x8D,-    0x7A, 0x20, 0xC0, 0x63, 0x3A, 0x67, 0x90, 0x7F,-    0x6D, 0x28, 0x67, 0xC3, 0x26, 0x4A, 0x91, 0xC0,-    0x51, 0xAB, 0xAE, 0x6E, 0xEA, 0x5A, 0x91, 0xD8-  },-  {-    0x64, 0x81, 0xDC, 0xC8, 0x15, 0x7A, 0xE6, 0x28,-    0xB5, 0xCD, 0x52, 0x6B, 0xAC, 0x8F, 0x93, 0x31,-    0x56, 0xDE, 0xDA, 0xC9, 0x56, 0xA2, 0xB2, 0x2A,-    0x97, 0x4B, 0xF5, 0xF7, 0xEC, 0x2D, 0xB5, 0x80,-    0x6F, 0x53, 0xDD, 0x0E, 0x2D, 0xD5, 0x3D, 0xB8,-    0x7C, 0xD8, 0xF5, 0x8A, 0x58, 0x6F, 0x9B, 0x3C,-    0x5C, 0x52, 0x23, 0x31, 0xA3, 0x11, 0x74, 0xC4,-    0xE7, 0xB9, 0xB6, 0xF7, 0xF0, 0x57, 0xC2, 0x8F-  },-  {-    0xA7, 0x1E, 0xA4, 0x5C, 0xE6, 0x61, 0x6A, 0x3D,-    0x2F, 0x0A, 0x59, 0x2D, 0x5D, 0x02, 0x86, 0x93,-    0x2D, 0xA6, 0x3C, 0x6D, 0xB1, 0x1D, 0x59, 0xC6,-    0x69, 0x1C, 0x35, 0xA5, 0x6F, 0x7E, 0xE4, 0xF8,-    0x0B, 0x6F, 0xC3, 0x40, 0xB4, 0xDB, 0xC1, 0x84,-    0x4C, 0x50, 0x40, 0xE6, 0x68, 0xD2, 0x89, 0x2F,-    0x4A, 0x4A, 0xE8, 0x53, 0x3F, 0x1B, 0x67, 0x71,-    0xBC, 0xFC, 0xE7, 0xC3, 0xA2, 0x3E, 0x0D, 0x97-  },-  {-    0x96, 0x93, 0x44, 0x87, 0x70, 0xFE, 0xAE, 0x42,-    0x17, 0x26, 0xEB, 0x20, 0x3B, 0x01, 0xC7, 0x08,-    0x23, 0xD5, 0xF4, 0x4C, 0xC5, 0x21, 0x3E, 0x6A,-    0x68, 0x28, 0x47, 0x29, 0xBD, 0x11, 0x7D, 0x9B,-    0xD1, 0x8F, 0xEC, 0x4A, 0x0A, 0x82, 0x4A, 0x24,-    0x08, 0x0F, 0x29, 0x8B, 0xAC, 0xD2, 0x96, 0xD7,-    0xB4, 0x97, 0x83, 0x8F, 0xBD, 0x7B, 0x0D, 0x57,-    0x5C, 0x52, 0x49, 0x2B, 0x3E, 0x6F, 0x92, 0x6B-  },-  {-    0x37, 0xA1, 0x50, 0x66, 0xF2, 0xB9, 0xF9, 0x4C,-    0x24, 0x61, 0x1B, 0xC4, 0x53, 0xED, 0x02, 0x74,-    0x07, 0x8D, 0x1F, 0x70, 0xB2, 0xD3, 0x4C, 0x8B,-    0x96, 0x36, 0x08, 0x48, 0x9D, 0xCB, 0xE8, 0xDF,-    0x44, 0x8E, 0xDD, 0x9C, 0x73, 0x36, 0x2B, 0xB2,-    0xB6, 0x6B, 0xEE, 0xF6, 0x1F, 0xCE, 0x60, 0x10,-    0x6F, 0x70, 0x19, 0xED, 0x37, 0x3C, 0x69, 0x22,-    0x59, 0xD9, 0x55, 0x6A, 0x94, 0x0B, 0x1A, 0x06-  },-  {-    0xBD, 0x44, 0xE7, 0x39, 0xE1, 0xF9, 0xDB, 0x1C,-    0x6B, 0xAF, 0x42, 0xCA, 0x4A, 0x12, 0xAC, 0x09,-    0x9B, 0x96, 0xF6, 0xB3, 0x6C, 0x4B, 0xCB, 0x1B,-    0x72, 0xEE, 0xFF, 0x08, 0xA6, 0x49, 0x68, 0x35,-    0xEC, 0x65, 0x15, 0x0B, 0xE8, 0xFE, 0x16, 0xCB,-    0xE3, 0x27, 0x07, 0xE3, 0x47, 0x54, 0x7D, 0xC5,-    0xA5, 0x83, 0xD2, 0x65, 0x74, 0x6F, 0xA5, 0x95,-    0xC5, 0xE7, 0x73, 0x0F, 0xCF, 0x24, 0x58, 0x1E-  },-  {-    0xFA, 0xB2, 0x03, 0x8E, 0x94, 0x98, 0xA1, 0xC3,-    0x9E, 0x05, 0x78, 0xA0, 0xA5, 0xEA, 0x6B, 0x44,-    0xF3, 0xC1, 0xB4, 0x1A, 0xE5, 0x67, 0xF9, 0x91,-    0x4A, 0x95, 0xB1, 0x31, 0xC4, 0x8D, 0x12, 0x1E,-    0xCA, 0xCE, 0xA8, 0x95, 0xA0, 0x9B, 0x1D, 0x4E,-    0x04, 0x42, 0xBE, 0xC9, 0xC5, 0x0C, 0x50, 0xE0,-    0x0A, 0x9F, 0xAF, 0xEF, 0xFA, 0xE0, 0x70, 0x88,-    0x4C, 0x26, 0x25, 0xA8, 0xB1, 0xA2, 0x17, 0x26-  },-  {-    0x05, 0xA1, 0xB7, 0x6B, 0x2F, 0xD5, 0x62, 0x11,-    0xE0, 0xF2, 0xD7, 0x5A, 0x25, 0x16, 0x54, 0xA7,-    0x72, 0xF5, 0x5E, 0x18, 0xCA, 0x02, 0x2A, 0xF5,-    0x2C, 0xB3, 0x30, 0x19, 0x1E, 0x98, 0xA3, 0xB8,-    0xEB, 0x87, 0xE5, 0x11, 0x7B, 0xAE, 0x58, 0x04,-    0x4D, 0x94, 0x4C, 0x1F, 0x18, 0x85, 0x45, 0x12,-    0x25, 0x41, 0x77, 0x35, 0xFC, 0x72, 0xF7, 0x39,-    0x36, 0x69, 0x3C, 0xFF, 0x45, 0x46, 0x9F, 0x8C-  },-  {-    0x2A, 0x30, 0xC9, 0x6B, 0xDA, 0xC7, 0x8A, 0x39,-    0x94, 0xEE, 0xCA, 0xA5, 0xA5, 0x3F, 0x82, 0x7F,-    0x58, 0xE1, 0x32, 0x31, 0xA0, 0xD1, 0x13, 0x08,-    0x6C, 0x06, 0xB1, 0xBD, 0xAB, 0xDA, 0x38, 0xD0,-    0x8F, 0x1A, 0xE2, 0x7D, 0xE2, 0x5F, 0xD2, 0x2E,-    0xEA, 0x70, 0xC0, 0x5F, 0x01, 0x32, 0xBF, 0x7A,-    0x50, 0x1C, 0x82, 0xAE, 0x62, 0x15, 0xBF, 0xEF,-    0x3C, 0x01, 0x63, 0x98, 0xBA, 0xF2, 0xCB, 0x62-  },-  {-    0x48, 0xDB, 0x53, 0x76, 0x5B, 0x82, 0xBD, 0x6F,-    0x25, 0x33, 0xEA, 0xE1, 0x7F, 0x67, 0x69, 0xD7,-    0xA4, 0xE3, 0xB2, 0x43, 0x74, 0x60, 0x1C, 0xDD,-    0x8E, 0xC0, 0xCA, 0x3A, 0xAB, 0x30, 0x93, 0xFD,-    0x2B, 0x99, 0x24, 0x38, 0x46, 0x0B, 0xAF, 0x8D,-    0xA5, 0x8F, 0xB9, 0xA8, 0x9B, 0x2C, 0x58, 0xF9,-    0x68, 0xE6, 0x36, 0x17, 0xCB, 0xEB, 0x18, 0x44,-    0xB0, 0x2D, 0x6A, 0x27, 0xC5, 0xB4, 0xAD, 0x41-  },-  {-    0x5C, 0x8B, 0x2E, 0x0E, 0x1B, 0x5C, 0x8F, 0x45,-    0x7D, 0x7F, 0x7B, 0xD9, 0xF0, 0x5A, 0x97, 0xE5,-    0x8D, 0xDA, 0x1D, 0x28, 0xDB, 0x9F, 0x34, 0xD1,-    0xCE, 0x73, 0x25, 0x28, 0xF9, 0x68, 0xBE, 0xDD,-    0x9E, 0x1C, 0xC9, 0x35, 0x2D, 0x0A, 0x5D, 0xF6,-    0x67, 0x29, 0x28, 0xBD, 0xD3, 0xEA, 0x6F, 0x5C,-    0xB0, 0x60, 0x77, 0xCF, 0x3A, 0xD3, 0xA7, 0x6E,-    0x29, 0xB2, 0x2E, 0x82, 0xBA, 0xC6, 0x7B, 0x61-  },-  {-    0x5B, 0x73, 0x91, 0xAA, 0x52, 0xF2, 0x76, 0xFA,-    0xB9, 0xC1, 0x38, 0x77, 0xF1, 0x22, 0x32, 0x70,-    0x84, 0x97, 0xFC, 0x02, 0x8F, 0xAA, 0x17, 0x32,-    0xA5, 0xDB, 0x07, 0x9E, 0x7F, 0xE0, 0x73, 0xED,-    0x0C, 0xC9, 0x52, 0x9C, 0xFC, 0x86, 0x3A, 0x4E,-    0xCB, 0xA4, 0xDC, 0x2F, 0x1E, 0xA9, 0xF6, 0xBD,-    0x69, 0x04, 0xF3, 0xA0, 0xC1, 0x07, 0x19, 0x3C,-    0x5E, 0x71, 0x1C, 0xB9, 0x11, 0xF3, 0x80, 0x25-  },-  {-    0x1D, 0x5A, 0xF7, 0x0F, 0x09, 0xA5, 0xFC, 0x69,-    0x16, 0xEF, 0x59, 0xA3, 0x8A, 0x86, 0x92, 0x6D,-    0xCA, 0xAE, 0x39, 0xA8, 0x95, 0x4D, 0x73, 0xFC,-    0x80, 0xA3, 0x50, 0x75, 0x1A, 0xDD, 0xA3, 0x8C,-    0x9D, 0x59, 0x75, 0x06, 0xDC, 0x05, 0xE1, 0xED,-    0x37, 0xBD, 0x2D, 0xB1, 0x59, 0x0F, 0x99, 0xAA,-    0x29, 0x6A, 0xEA, 0x13, 0xAB, 0x84, 0x43, 0xD5,-    0xA9, 0x23, 0x47, 0xFB, 0x85, 0xFC, 0x81, 0x6D-  },-  {-    0x80, 0xE3, 0x70, 0x92, 0x97, 0xD4, 0x41, 0x14,-    0xB9, 0xFB, 0xDF, 0x55, 0x67, 0xF0, 0x5F, 0x33,-    0x00, 0x94, 0xCF, 0x09, 0xF4, 0xC0, 0xEF, 0xCF,-    0xAC, 0x05, 0x09, 0x5C, 0x36, 0x08, 0x10, 0x77,-    0x30, 0xC1, 0xAA, 0x07, 0xFF, 0x23, 0x00, 0x25,-    0x62, 0xC7, 0xE8, 0x41, 0xA9, 0xF5, 0x66, 0x24,-    0xFF, 0xE2, 0xAB, 0xEC, 0x61, 0x1E, 0xB9, 0xE7,-    0x3E, 0x1C, 0xCB, 0xD8, 0xF6, 0x2B, 0x11, 0x49-  },-  {-    0xF9, 0x94, 0x5C, 0x19, 0x06, 0x77, 0x84, 0x61,-    0x94, 0x13, 0x2B, 0x49, 0x6E, 0xC6, 0x01, 0x2C,-    0x08, 0x75, 0x0E, 0x02, 0x5F, 0xD5, 0x52, 0xED,-    0x32, 0x4D, 0x3A, 0x49, 0xD8, 0x63, 0x66, 0xC0,-    0x3D, 0xCC, 0xDE, 0x8D, 0x5B, 0x5A, 0xC9, 0xA4,-    0xBC, 0xB7, 0x19, 0x5E, 0x63, 0xBC, 0xAA, 0x93,-    0x9E, 0x8E, 0xDA, 0x18, 0xF1, 0x16, 0x94, 0xB6,-    0xFA, 0x69, 0x37, 0x39, 0x3B, 0xFF, 0xDB, 0xF4-  },-  {-    0x8D, 0x8F, 0x2E, 0xD9, 0xAE, 0x39, 0x80, 0x9A,-    0xAC, 0xAD, 0x2F, 0xCE, 0xDB, 0xD2, 0xDC, 0xA7,-    0x30, 0xC7, 0x83, 0xE6, 0x2F, 0xF7, 0x0B, 0x8D,-    0x3C, 0x53, 0x62, 0xF0, 0x73, 0xF8, 0x34, 0x67,-    0x19, 0x7D, 0x37, 0x56, 0xB4, 0x45, 0x19, 0x5F,-    0xE7, 0x52, 0x11, 0x73, 0x64, 0xD9, 0x2C, 0xF4,-    0x2C, 0x02, 0x6E, 0x40, 0x9D, 0x5F, 0xF7, 0xA9,-    0x53, 0x3E, 0xAB, 0x78, 0xF1, 0x75, 0x4A, 0x2D-  },-  {-    0x3A, 0xC9, 0x9A, 0xC5, 0x3A, 0xC4, 0x9A, 0x56,-    0xFA, 0xA1, 0x86, 0x46, 0xB8, 0xE0, 0x8A, 0x2D,-    0x35, 0xBE, 0x80, 0xDF, 0x3E, 0xFB, 0xBB, 0xA6,-    0xBD, 0xA4, 0xAE, 0x90, 0x2B, 0x8D, 0x3E, 0x17,-    0x0A, 0x7B, 0xE8, 0x60, 0x5C, 0x34, 0xA4, 0xDC,-    0x9A, 0x73, 0x62, 0xB1, 0xC2, 0x01, 0xD7, 0x02,-    0x39, 0x1B, 0xD7, 0xD5, 0x20, 0x7F, 0x95, 0xFA,-    0x39, 0x0C, 0xE3, 0x3C, 0x43, 0x14, 0xD4, 0x11-  },-  {-    0xE4, 0x69, 0x4B, 0xDB, 0x31, 0x01, 0x6F, 0x25,-    0x53, 0x2C, 0x04, 0x3C, 0x5C, 0x63, 0x08, 0xCC,-    0x61, 0x9B, 0x0F, 0x87, 0x16, 0xF0, 0xC2, 0x9E,-    0xEB, 0x9F, 0x34, 0x0F, 0x47, 0xB0, 0x7B, 0x4A,-    0x4C, 0xE0, 0x98, 0x4C, 0x47, 0x24, 0xB1, 0x2A,-    0xB3, 0xD3, 0x2A, 0xF5, 0x16, 0xAD, 0xA2, 0x64,-    0x4C, 0xA6, 0x55, 0x8C, 0x1C, 0xB5, 0x81, 0x5C,-    0x12, 0x12, 0xA9, 0xB5, 0xFA, 0x83, 0x44, 0x12-  },-  {-    0xC6, 0x3C, 0x70, 0x3E, 0x62, 0x10, 0x8A, 0xA0,-    0xED, 0xC6, 0x83, 0xF3, 0x67, 0x8A, 0x00, 0x78,-    0x8F, 0xB1, 0x00, 0xC0, 0x96, 0x0B, 0x4E, 0x98,-    0xB7, 0x6A, 0x48, 0xE4, 0xE5, 0x92, 0x3D, 0x34,-    0x13, 0x44, 0x8D, 0xB8, 0x87, 0x5E, 0x3B, 0xCE,-    0xA7, 0xB6, 0xB8, 0x5D, 0x9E, 0x3E, 0xEA, 0xB7,-    0x2C, 0xD1, 0x50, 0x96, 0xFB, 0xBB, 0x2C, 0xC4,-    0x27, 0x03, 0x17, 0xFC, 0x34, 0xD4, 0x04, 0x71-  },-  {-    0x90, 0x80, 0xB7, 0xE8, 0x41, 0xEF, 0x51, 0x9C,-    0x54, 0x17, 0xE6, 0x90, 0xAA, 0xF4, 0x32, 0x79,-    0x07, 0xA8, 0x3D, 0xBC, 0xB7, 0x38, 0xD0, 0xF7,-    0x30, 0x8B, 0x1D, 0x61, 0x1D, 0xEF, 0x16, 0x9A,-    0x4F, 0x47, 0x42, 0x3E, 0x69, 0x0F, 0x27, 0xA7,-    0xE2, 0x74, 0x1A, 0xE7, 0x86, 0x5D, 0xA2, 0x3C,-    0x5D, 0x3F, 0x13, 0xC3, 0x16, 0x06, 0x3C, 0x7A,-    0xA1, 0xA9, 0x58, 0xE5, 0xBE, 0x83, 0x8F, 0x04-  },-  {-    0x29, 0x8D, 0xF6, 0x46, 0x91, 0x5F, 0x04, 0xD6,-    0x65, 0xE9, 0x67, 0x5E, 0x6A, 0x10, 0x31, 0x87,-    0x0D, 0x28, 0xEB, 0x7A, 0x04, 0x05, 0x66, 0x3E,-    0xAC, 0x3B, 0x10, 0xD1, 0xB4, 0xFA, 0x2E, 0x86,-    0x8E, 0x63, 0x73, 0xA5, 0x86, 0xCD, 0x73, 0xE0,-    0x6D, 0x8E, 0x7A, 0xD7, 0x71, 0xB4, 0xFB, 0x0A,-    0x8B, 0x4F, 0xC2, 0xDC, 0x6C, 0xE0, 0x9C, 0x64,-    0x2E, 0xE8, 0x99, 0x26, 0xFD, 0xC6, 0x52, 0x60-  },-  {-    0x4F, 0x2D, 0xE9, 0xC4, 0xF4, 0x34, 0x8B, 0xDB,-    0x32, 0x3A, 0x66, 0x83, 0x72, 0xE7, 0x71, 0x42,-    0x99, 0xC7, 0x76, 0xF9, 0x60, 0x2F, 0x3A, 0xF8,-    0xFB, 0x77, 0x46, 0xF1, 0x76, 0x86, 0x8D, 0xF3,-    0x54, 0x2B, 0x2F, 0xA6, 0x9E, 0xAE, 0x38, 0xB6,-    0xA2, 0x6A, 0x06, 0xCA, 0x89, 0x42, 0xF8, 0x82,-    0x78, 0xC6, 0x4E, 0x3D, 0x01, 0x7F, 0xEE, 0x67,-    0xA9, 0x4E, 0xA0, 0x23, 0xB2, 0xB5, 0xBE, 0x5F-  },-  {-    0x40, 0x18, 0xC5, 0xEE, 0x90, 0x93, 0xA6, 0x81,-    0x11, 0x2F, 0x4C, 0xE1, 0x93, 0xA1, 0xD6, 0x5E,-    0x05, 0x48, 0x72, 0x5F, 0x96, 0xAE, 0x31, 0x53,-    0x87, 0xCD, 0x76, 0x5C, 0x2B, 0x9C, 0x30, 0x68,-    0xAE, 0x4C, 0xBE, 0x5C, 0xD5, 0x40, 0x2C, 0x11,-    0xC5, 0x5A, 0x9D, 0x78, 0x5F, 0xFD, 0xFC, 0x2B,-    0xDE, 0x6E, 0x7A, 0xCF, 0x19, 0x61, 0x74, 0x75,-    0xDA, 0xE0, 0xEB, 0x01, 0x44, 0x56, 0xCE, 0x45-  },-  {-    0x6F, 0xCE, 0x66, 0x75, 0xE8, 0x6D, 0x7E, 0x85,-    0x70, 0x4C, 0x96, 0xC2, 0x95, 0x70, 0x3C, 0xD9,-    0x54, 0x98, 0x59, 0x0E, 0x50, 0x76, 0x4D, 0x23,-    0xD7, 0xA7, 0xA3, 0xA3, 0x22, 0x68, 0xA0, 0xB3,-    0xC9, 0x91, 0xE8, 0xF7, 0x84, 0x87, 0x69, 0x9A,-    0x55, 0x4B, 0x58, 0x1E, 0x33, 0x9C, 0x09, 0xAE,-    0xC9, 0x82, 0xE0, 0xBA, 0xA4, 0x31, 0x87, 0x93,-    0x62, 0x06, 0x35, 0xE1, 0xE2, 0xC8, 0xD9, 0xF2-  },-  {-    0xEB, 0xA9, 0x37, 0x85, 0x91, 0x97, 0xC7, 0xFD,-    0x41, 0x2D, 0xBC, 0x9A, 0xFC, 0x0D, 0x67, 0xCC,-    0x19, 0x81, 0x60, 0xB5, 0xA9, 0xCC, 0xEE, 0x87,-    0xC4, 0x1A, 0x86, 0x64, 0x85, 0x9F, 0x3E, 0xFD,-    0x96, 0x13, 0x66, 0xA8, 0x09, 0xC7, 0xC6, 0xBC,-    0x6F, 0xA8, 0x44, 0x92, 0x68, 0x14, 0xE0, 0xB4,-    0xEF, 0xA3, 0x7E, 0xDE, 0x2C, 0x88, 0x44, 0x26,-    0x8D, 0x7F, 0x35, 0x56, 0xE4, 0x46, 0x58, 0x1D-  },-  {-    0x83, 0xF4, 0x33, 0xE4, 0xF1, 0xC5, 0x07, 0x97,-    0x49, 0x3C, 0x58, 0xC2, 0x64, 0xCF, 0xFA, 0x70,-    0xC4, 0xA7, 0xA2, 0x4C, 0x33, 0x4D, 0xBA, 0xA3,-    0xC5, 0x74, 0x89, 0xD9, 0x70, 0xD4, 0x9D, 0x69,-    0x49, 0xFE, 0x45, 0xB7, 0x04, 0xF2, 0x65, 0xEF,-    0xD2, 0xAE, 0xE1, 0xAC, 0x1B, 0x46, 0xF4, 0xAA,-    0x3E, 0x4F, 0xAD, 0x68, 0xB3, 0x79, 0x61, 0xD2,-    0xC7, 0x28, 0x0A, 0xE1, 0x96, 0x72, 0xC8, 0x50-  },-  {-    0xB5, 0x57, 0xEC, 0xE1, 0x22, 0x72, 0x49, 0x3D,-    0xC2, 0x7E, 0x88, 0xA0, 0x5A, 0xDC, 0xD8, 0x61,-    0x87, 0x5A, 0x0C, 0xD0, 0x0B, 0xD6, 0x8A, 0xDC,-    0x3A, 0x30, 0x1D, 0x26, 0x3A, 0x9C, 0xD9, 0x93,-    0xA9, 0x6A, 0xE1, 0x4C, 0xFC, 0xDD, 0xCB, 0x99,-    0x7C, 0xC9, 0x86, 0x23, 0x93, 0x50, 0x50, 0xEA,-    0x43, 0x55, 0x2A, 0x34, 0x11, 0x07, 0x18, 0x7D,-    0xE7, 0x5C, 0x4E, 0xDE, 0xD7, 0xC7, 0x86, 0xBD-  },-  {-    0x95, 0x89, 0xC0, 0x81, 0x3B, 0x73, 0x93, 0xDB,-    0xAA, 0xAF, 0xE4, 0x7A, 0xF5, 0xB4, 0x08, 0xB2,-    0x3C, 0x8A, 0x8C, 0x8B, 0xAC, 0x62, 0x55, 0x4B,-    0x8F, 0xA1, 0x32, 0xA3, 0x58, 0xCE, 0x30, 0x83,-    0xB1, 0xD4, 0xE3, 0x97, 0x07, 0xCD, 0x54, 0xA5,-    0x5F, 0x67, 0x3D, 0x48, 0x11, 0x6E, 0xB1, 0xF9,-    0xED, 0x8D, 0xE9, 0xC9, 0x43, 0xCD, 0x2D, 0xE4,-    0x60, 0xA6, 0x8B, 0xDD, 0xF7, 0x1E, 0x98, 0x03-  },-  {-    0xAE, 0x4C, 0xCF, 0x27, 0xAB, 0x00, 0xA4, 0x0C,-    0x36, 0x37, 0xD3, 0xD2, 0xCE, 0x51, 0xA8, 0x3E,-    0xFB, 0xA6, 0x2D, 0x4A, 0x6F, 0xDA, 0xD6, 0x95,-    0x06, 0x3F, 0xBC, 0x60, 0xA2, 0xD8, 0x2E, 0xC5,-    0xA5, 0x4A, 0xCB, 0xE0, 0x9B, 0xA9, 0x38, 0x8F,-    0x49, 0xAA, 0xC2, 0x7C, 0x99, 0x2D, 0x84, 0x63,-    0x20, 0x36, 0xE1, 0xBD, 0xD4, 0xC5, 0x29, 0xBB,-    0xF1, 0x85, 0x1E, 0xAE, 0x0C, 0x6E, 0xA9, 0x02-  },-  {-    0xA3, 0x94, 0x4B, 0x2C, 0x31, 0xCB, 0x49, 0x40,-    0x80, 0xB7, 0xEE, 0x1D, 0xB0, 0x81, 0x68, 0x53,-    0xE4, 0x25, 0xB5, 0x4C, 0x48, 0xD6, 0x31, 0x44,-    0x7E, 0xA5, 0x2C, 0x1D, 0x29, 0x52, 0x07, 0x9B,-    0xD8, 0x8F, 0xAB, 0x9E, 0xD0, 0xB7, 0xD8, 0xC0,-    0xBA, 0xAF, 0x0C, 0x4E, 0xCA, 0x19, 0x10, 0xDB,-    0x6F, 0x98, 0x53, 0x4F, 0x0D, 0x42, 0xE5, 0xEB,-    0xB6, 0xC0, 0xA7, 0x5E, 0xF0, 0xD8, 0xB2, 0xC0-  },-  {-    0xCF, 0xA1, 0xA2, 0x24, 0x68, 0x5A, 0x5F, 0xB2,-    0x01, 0x04, 0x58, 0x20, 0x1C, 0xEB, 0x0C, 0xDA,-    0x21, 0xC8, 0x2B, 0x16, 0x02, 0xDC, 0x41, 0x35,-    0x85, 0xFB, 0xCE, 0x80, 0x97, 0x6F, 0x06, 0x1C,-    0x23, 0x5B, 0x13, 0x67, 0x71, 0x24, 0x98, 0x14,-    0x4A, 0xC1, 0x6A, 0x98, 0x54, 0xF6, 0xFB, 0x32,-    0x3C, 0xBE, 0xB6, 0x23, 0x69, 0xCF, 0x9B, 0x75,-    0x2B, 0x92, 0x52, 0xA2, 0xA7, 0xAC, 0xE1, 0xFD-  },-  {-    0xFA, 0x62, 0xC6, 0xCF, 0xC8, 0xF0, 0x79, 0xE5,-    0x8F, 0x3D, 0x3F, 0xEF, 0xD7, 0xC2, 0x24, 0xE7,-    0x1E, 0xBC, 0x69, 0xA9, 0x5B, 0x18, 0x35, 0xCC,-    0xC3, 0x2F, 0x35, 0x07, 0x77, 0x05, 0x11, 0x02,-    0x61, 0x54, 0x92, 0xD6, 0x7F, 0xB6, 0xDE, 0x62,-    0xCF, 0x2A, 0xD5, 0xB1, 0x84, 0x67, 0xFE, 0x87,-    0x15, 0x74, 0x88, 0x82, 0xDB, 0x89, 0xFF, 0x86,-    0xEF, 0xDF, 0x2F, 0x96, 0xF8, 0x13, 0x5E, 0xD2-  },-  {-    0xCC, 0x63, 0x3F, 0xD4, 0xEA, 0x6A, 0xC4, 0x08,-    0xC3, 0x87, 0x57, 0x56, 0xB9, 0x01, 0x28, 0x8A,-    0x1D, 0xE1, 0x91, 0x89, 0x28, 0x32, 0xBE, 0x2E,-    0x90, 0x26, 0xDC, 0x65, 0xC2, 0xFF, 0x00, 0x00,-    0x9F, 0x14, 0x36, 0xDD, 0xFF, 0x42, 0x06, 0x26,-    0x0A, 0x3D, 0x66, 0xEF, 0x61, 0x92, 0x14, 0x3E,-    0x57, 0x2F, 0x1E, 0x4B, 0xB8, 0xE5, 0xA7, 0x4B,-    0x12, 0x05, 0x5E, 0x42, 0x41, 0x1C, 0x18, 0xBC-  },-  {-    0x44, 0xD2, 0xBF, 0x7F, 0x36, 0x96, 0xB8, 0x93,-    0x3F, 0x25, 0x5B, 0x9B, 0xE1, 0xA4, 0xA6, 0xAE,-    0x33, 0x16, 0xC2, 0x5D, 0x03, 0x95, 0xF5, 0x90,-    0xB9, 0xB9, 0x89, 0x8F, 0x12, 0x7E, 0x40, 0xD3,-    0xF4, 0x12, 0x4D, 0x7B, 0xDB, 0xC8, 0x72, 0x5F,-    0x00, 0xB0, 0xD2, 0x81, 0x50, 0xFF, 0x05, 0xB4,-    0xA7, 0x9E, 0x5E, 0x04, 0xE3, 0x4A, 0x47, 0xE9,-    0x08, 0x7B, 0x3F, 0x79, 0xD4, 0x13, 0xAB, 0x7F-  },-  {-    0x96, 0xFB, 0xCB, 0xB6, 0x0B, 0xD3, 0x13, 0xB8,-    0x84, 0x50, 0x33, 0xE5, 0xBC, 0x05, 0x8A, 0x38,-    0x02, 0x74, 0x38, 0x57, 0x2D, 0x7E, 0x79, 0x57,-    0xF3, 0x68, 0x4F, 0x62, 0x68, 0xAA, 0xDD, 0x3A,-    0xD0, 0x8D, 0x21, 0x76, 0x7E, 0xD6, 0x87, 0x86,-    0x85, 0x33, 0x1B, 0xA9, 0x85, 0x71, 0x48, 0x7E,-    0x12, 0x47, 0x0A, 0xAD, 0x66, 0x93, 0x26, 0x71,-    0x6E, 0x46, 0x66, 0x7F, 0x69, 0xF8, 0xD7, 0xE8-  },-};-----#endif---
cbits/blake2/ref/blake2.h view
@@ -1,22 +1,29 @@ /*    BLAKE2 reference source code package - reference C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2_H__-#define __BLAKE2_H__+#ifndef BLAKE2_H+#define BLAKE2_H  #include <stddef.h> #include <stdint.h> +#if defined(_MSC_VER)+#define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop))+#else+#define BLAKE2_PACKED(x) x __attribute__((packed))+#endif+ #if defined(__cplusplus) extern "C" { #endif@@ -39,112 +46,150 @@     BLAKE2B_PERSONALBYTES = 16   }; -#pragma pack(push, 1)-  typedef struct __blake2s_param-  {-    uint8_t  digest_length; // 1-    uint8_t  key_length;    // 2-    uint8_t  fanout;        // 3-    uint8_t  depth;         // 4-    uint32_t leaf_length;   // 8-    uint8_t  node_offset[6];// 14-    uint8_t  node_depth;    // 15-    uint8_t  inner_length;  // 16-    // uint8_t  reserved[0];-    uint8_t  salt[BLAKE2S_SALTBYTES]; // 24-    uint8_t  personal[BLAKE2S_PERSONALBYTES];  // 32-  } blake2s_param;--  typedef struct __blake2s_state+  typedef struct blake2s_state__   {     uint32_t h[8];     uint32_t t[2];     uint32_t f[2];-    uint8_t  buf[2 * BLAKE2S_BLOCKBYTES];+    uint8_t  buf[BLAKE2S_BLOCKBYTES];     size_t   buflen;+    size_t   outlen;     uint8_t  last_node;   } blake2s_state; -  typedef struct __blake2b_param-  {-    uint8_t  digest_length; // 1-    uint8_t  key_length;    // 2-    uint8_t  fanout;        // 3-    uint8_t  depth;         // 4-    uint32_t leaf_length;   // 8-    uint64_t node_offset;   // 16-    uint8_t  node_depth;    // 17-    uint8_t  inner_length;  // 18-    uint8_t  reserved[14];  // 32-    uint8_t  salt[BLAKE2B_SALTBYTES]; // 48-    uint8_t  personal[BLAKE2B_PERSONALBYTES];  // 64-  } blake2b_param;--  typedef struct __blake2b_state+  typedef struct blake2b_state__   {     uint64_t h[8];     uint64_t t[2];     uint64_t f[2];-    uint8_t  buf[2 * BLAKE2B_BLOCKBYTES];+    uint8_t  buf[BLAKE2B_BLOCKBYTES];     size_t   buflen;+    size_t   outlen;     uint8_t  last_node;   } blake2b_state; -  typedef struct __blake2sp_state+  typedef struct blake2sp_state__   {     blake2s_state S[8][1];     blake2s_state R[1];-    uint8_t buf[8 * BLAKE2S_BLOCKBYTES];-    size_t  buflen;+    uint8_t       buf[8 * BLAKE2S_BLOCKBYTES];+    size_t        buflen;+    size_t        outlen;   } blake2sp_state; -  typedef struct __blake2bp_state+  typedef struct blake2bp_state__   {     blake2b_state S[4][1];     blake2b_state R[1];-    uint8_t buf[4 * BLAKE2B_BLOCKBYTES];-    size_t  buflen;+    uint8_t       buf[4 * BLAKE2B_BLOCKBYTES];+    size_t        buflen;+    size_t        outlen;   } blake2bp_state;-#pragma pack(pop) -  // Streaming API-  int blake2s_init( blake2s_state *S, const uint8_t outlen );-  int blake2s_init_key( blake2s_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );++  BLAKE2_PACKED(struct blake2s_param__+  {+    uint8_t  digest_length; /* 1 */+    uint8_t  key_length;    /* 2 */+    uint8_t  fanout;        /* 3 */+    uint8_t  depth;         /* 4 */+    uint32_t leaf_length;   /* 8 */+    uint32_t node_offset;  /* 12 */+    uint16_t xof_length;    /* 14 */+    uint8_t  node_depth;    /* 15 */+    uint8_t  inner_length;  /* 16 */+    /* uint8_t  reserved[0]; */+    uint8_t  salt[BLAKE2S_SALTBYTES]; /* 24 */+    uint8_t  personal[BLAKE2S_PERSONALBYTES];  /* 32 */+  });++  typedef struct blake2s_param__ blake2s_param;++  BLAKE2_PACKED(struct blake2b_param__+  {+    uint8_t  digest_length; /* 1 */+    uint8_t  key_length;    /* 2 */+    uint8_t  fanout;        /* 3 */+    uint8_t  depth;         /* 4 */+    uint32_t leaf_length;   /* 8 */+    uint32_t node_offset;   /* 12 */+    uint32_t xof_length;    /* 16 */+    uint8_t  node_depth;    /* 17 */+    uint8_t  inner_length;  /* 18 */+    uint8_t  reserved[14];  /* 32 */+    uint8_t  salt[BLAKE2B_SALTBYTES]; /* 48 */+    uint8_t  personal[BLAKE2B_PERSONALBYTES];  /* 64 */+  });++  typedef struct blake2b_param__ blake2b_param;++  typedef struct blake2xs_state__+  {+    blake2s_state S[1];+    blake2s_param P[1];+  } blake2xs_state;++  typedef struct blake2xb_state__+  {+    blake2b_state S[1];+    blake2b_param P[1];+  } blake2xb_state;++  /* Padded structs result in a compile-time error */+  enum {+    BLAKE2_DUMMY_1 = 1/(sizeof(blake2s_param) == BLAKE2S_OUTBYTES),+    BLAKE2_DUMMY_2 = 1/(sizeof(blake2b_param) == BLAKE2B_OUTBYTES)+  };++  /* Streaming API */+  int blake2s_init( blake2s_state *S, size_t outlen );+  int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen );   int blake2s_init_param( blake2s_state *S, const blake2s_param *P );-  int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen );-  int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen );+  int blake2s_update( blake2s_state *S, const void *in, size_t inlen );+  int blake2s_final( blake2s_state *S, void *out, size_t outlen ); -  int blake2b_init( blake2b_state *S, const uint8_t outlen );-  int blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );+  int blake2b_init( blake2b_state *S, size_t outlen );+  int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen );   int blake2b_init_param( blake2b_state *S, const blake2b_param *P );-  int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen );-  int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen );+  int blake2b_update( blake2b_state *S, const void *in, size_t inlen );+  int blake2b_final( blake2b_state *S, void *out, size_t outlen ); -  int blake2sp_init( blake2sp_state *S, const uint8_t outlen );-  int blake2sp_init_key( blake2sp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );-  int blake2sp_update( blake2sp_state *S, const uint8_t *in, uint64_t inlen );-  int blake2sp_final( blake2sp_state *S, uint8_t *out, uint8_t outlen );+  int blake2sp_init( blake2sp_state *S, size_t outlen );+  int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen );+  int blake2sp_update( blake2sp_state *S, const void *in, size_t inlen );+  int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ); -  int blake2bp_init( blake2bp_state *S, const uint8_t outlen );-  int blake2bp_init_key( blake2bp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );-  int blake2bp_update( blake2bp_state *S, const uint8_t *in, uint64_t inlen );-  int blake2bp_final( blake2bp_state *S, uint8_t *out, uint8_t outlen );+  int blake2bp_init( blake2bp_state *S, size_t outlen );+  int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen );+  int blake2bp_update( blake2bp_state *S, const void *in, size_t inlen );+  int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ); -  // Simple API-  int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );-  int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );+  /* Variable output length API */+  int blake2xs_init( blake2xs_state *S, const size_t outlen );+  int blake2xs_init_key( blake2xs_state *S, const size_t outlen, const void *key, size_t keylen );+  int blake2xs_update( blake2xs_state *S, const void *in, size_t inlen );+  int blake2xs_final(blake2xs_state *S, void *out, size_t outlen); -  int blake2sp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );-  int blake2bp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );+  int blake2xb_init( blake2xb_state *S, const size_t outlen );+  int blake2xb_init_key( blake2xb_state *S, const size_t outlen, const void *key, size_t keylen );+  int blake2xb_update( blake2xb_state *S, const void *in, size_t inlen );+  int blake2xb_final(blake2xb_state *S, void *out, size_t outlen); -  static inline int blake2( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )-  {-    return blake2b( out, in, key, outlen, inlen, keylen );-  }+  /* Simple API */+  int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );+  int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); +  int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );+  int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );++  int blake2xs( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );+  int blake2xb( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );++  /* This is simply an alias for blake2b */+  int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );+ #if defined(__cplusplus) } #endif  #endif-
cbits/blake2/ref/blake2b-ref.c view
@@ -1,14 +1,16 @@ /*    BLAKE2 reference source code package - reference C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */  #include <stdint.h>@@ -43,135 +45,69 @@ };  -static inline int blake2b_set_lastnode( blake2b_state *S )-{-  S->f[1] = -1;-  return 0;-}--static inline int blake2b_clear_lastnode( blake2b_state *S )+static void blake2b_set_lastnode( blake2b_state *S ) {-  S->f[1] = 0;-  return 0;+  S->f[1] = (uint64_t)-1; }  /* Some helper functions, not necessarily useful */-static inline int blake2b_set_lastblock( blake2b_state *S )+static int blake2b_is_lastblock( const blake2b_state *S ) {-  if( S->last_node ) blake2b_set_lastnode( S );--  S->f[0] = -1;-  return 0;+  return S->f[0] != 0; } -static inline int blake2b_clear_lastblock( blake2b_state *S )+static void blake2b_set_lastblock( blake2b_state *S ) {-  if( S->last_node ) blake2b_clear_lastnode( S );+  if( S->last_node ) blake2b_set_lastnode( S ); -  S->f[0] = 0;-  return 0;+  S->f[0] = (uint64_t)-1; } -static inline int blake2b_increment_counter( blake2b_state *S, const uint64_t inc )+static void blake2b_increment_counter( blake2b_state *S, const uint64_t inc ) {   S->t[0] += inc;   S->t[1] += ( S->t[0] < inc );-  return 0; } ---// Parameter-related functions-static inline int blake2b_param_set_digest_length( blake2b_param *P, const uint8_t digest_length )-{-  P->digest_length = digest_length;-  return 0;-}--static inline int blake2b_param_set_fanout( blake2b_param *P, const uint8_t fanout )-{-  P->fanout = fanout;-  return 0;-}--static inline int blake2b_param_set_max_depth( blake2b_param *P, const uint8_t depth )-{-  P->depth = depth;-  return 0;-}--static inline int blake2b_param_set_leaf_length( blake2b_param *P, const uint32_t leaf_length )-{-  store32( &P->leaf_length, leaf_length );-  return 0;-}--static inline int blake2b_param_set_node_offset( blake2b_param *P, const uint64_t node_offset )-{-  store64( &P->node_offset, node_offset );-  return 0;-}--static inline int blake2b_param_set_node_depth( blake2b_param *P, const uint8_t node_depth )-{-  P->node_depth = node_depth;-  return 0;-}--static inline int blake2b_param_set_inner_length( blake2b_param *P, const uint8_t inner_length )-{-  P->inner_length = inner_length;-  return 0;-}--static inline int blake2b_param_set_salt( blake2b_param *P, const uint8_t salt[BLAKE2B_SALTBYTES] )-{-  memcpy( P->salt, salt, BLAKE2B_SALTBYTES );-  return 0;-}--static inline int blake2b_param_set_personal( blake2b_param *P, const uint8_t personal[BLAKE2B_PERSONALBYTES] )-{-  memcpy( P->personal, personal, BLAKE2B_PERSONALBYTES );-  return 0;-}--static inline int blake2b_init0( blake2b_state *S )+static void blake2b_init0( blake2b_state *S ) {+  size_t i;   memset( S, 0, sizeof( blake2b_state ) ); -  for( int i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i];--  return 0;+  for( i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; }  /* init xors IV with input parameter block */ int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) {-  blake2b_init0( S );   const uint8_t *p = ( const uint8_t * )( P );+  size_t i; +  blake2b_init0( S );+   /* IV XOR ParamBlock */-  for( size_t i = 0; i < 8; ++i )+  for( i = 0; i < 8; ++i )     S->h[i] ^= load64( p + sizeof( S->h[i] ) * i ); +  S->outlen = P->digest_length;   return 0; }   -int blake2b_init( blake2b_state *S, const uint8_t outlen )+int blake2b_init( blake2b_state *S, size_t outlen ) {   blake2b_param P[1];    if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; -  P->digest_length = outlen;+  P->digest_length = (uint8_t)outlen;   P->key_length    = 0;   P->fanout        = 1;   P->depth         = 1;   store32( &P->leaf_length, 0 );-  store64( &P->node_offset, 0 );+  store32( &P->node_offset, 0 );+  store32( &P->xof_length, 0 );   P->node_depth    = 0;   P->inner_length  = 0;   memset( P->reserved, 0, sizeof( P->reserved ) );@@ -181,7 +117,7 @@ }  -int blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )+int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ) {   blake2b_param P[1]; @@ -189,12 +125,13 @@    if ( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1; -  P->digest_length = outlen;-  P->key_length    = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length    = (uint8_t)keylen;   P->fanout        = 1;   P->depth         = 1;   store32( &P->leaf_length, 0 );-  store64( &P->node_offset, 0 );+  store32( &P->node_offset, 0 );+  store32( &P->xof_length, 0 );   P->node_depth    = 0;   P->inner_length  = 0;   memset( P->reserved, 0, sizeof( P->reserved ) );@@ -213,39 +150,20 @@   return 0; } -static int blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] )-{-  uint64_t m[16];-  uint64_t v[16];-  int i;--  for( i = 0; i < 16; ++i )-    m[i] = load64( block + i * sizeof( m[i] ) );--  for( i = 0; i < 8; ++i )-    v[i] = S->h[i];--  v[ 8] = blake2b_IV[0];-  v[ 9] = blake2b_IV[1];-  v[10] = blake2b_IV[2];-  v[11] = blake2b_IV[3];-  v[12] = S->t[0] ^ blake2b_IV[4];-  v[13] = S->t[1] ^ blake2b_IV[5];-  v[14] = S->f[0] ^ blake2b_IV[6];-  v[15] = S->f[1] ^ blake2b_IV[7];-#define G(r,i,a,b,c,d) \-  do { \+#define G(r,i,a,b,c,d)                      \+  do {                                      \     a = a + b + m[blake2b_sigma[r][2*i+0]]; \-    d = rotr64(d ^ a, 32); \-    c = c + d; \-    b = rotr64(b ^ c, 24); \+    d = rotr64(d ^ a, 32);                  \+    c = c + d;                              \+    b = rotr64(b ^ c, 24);                  \     a = a + b + m[blake2b_sigma[r][2*i+1]]; \-    d = rotr64(d ^ a, 16); \-    c = c + d; \-    b = rotr64(b ^ c, 63); \+    d = rotr64(d ^ a, 16);                  \+    c = c + d;                              \+    b = rotr64(b ^ c, 63);                  \   } while(0)-#define ROUND(r)  \-  do { \++#define ROUND(r)                    \+  do {                              \     G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \     G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \     G(r,2,v[ 2],v[ 6],v[10],v[14]); \@@ -255,6 +173,30 @@     G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \     G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \   } while(0)++static void blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] )+{+  uint64_t m[16];+  uint64_t v[16];+  size_t i;++  for( i = 0; i < 16; ++i ) {+    m[i] = load64( block + i * sizeof( m[i] ) );+  }++  for( i = 0; i < 8; ++i ) {+    v[i] = S->h[i];+  }++  v[ 8] = blake2b_IV[0];+  v[ 9] = blake2b_IV[1];+  v[10] = blake2b_IV[2];+  v[11] = blake2b_IV[3];+  v[12] = blake2b_IV[4] ^ S->t[0];+  v[13] = blake2b_IV[5] ^ S->t[1];+  v[14] = blake2b_IV[6] ^ S->f[0];+  v[15] = blake2b_IV[7] ^ S->f[1];+   ROUND( 0 );   ROUND( 1 );   ROUND( 2 );@@ -268,75 +210,67 @@   ROUND( 10 );   ROUND( 11 ); -  for( i = 0; i < 8; ++i )+  for( i = 0; i < 8; ++i ) {     S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];+  }+}  #undef G #undef ROUND-  return 0;-} -/* inlen now in bytes */-int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen )+int blake2b_update( blake2b_state *S, const void *pin, size_t inlen ) {-  while( inlen > 0 )+  const unsigned char * in = (const unsigned char *)pin;+  if( inlen > 0 )   {     size_t left = S->buflen;-    size_t fill = 2 * BLAKE2B_BLOCKBYTES - left;-+    size_t fill = BLAKE2B_BLOCKBYTES - left;     if( inlen > fill )     {-      memcpy( S->buf + left, in, fill ); // Fill buffer-      S->buflen += fill;+      S->buflen = 0;+      memcpy( S->buf + left, in, fill ); /* Fill buffer */       blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES );-      blake2b_compress( S, S->buf ); // Compress-      memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); // Shift buffer left-      S->buflen -= BLAKE2B_BLOCKBYTES;-      in += fill;-      inlen -= fill;-    }-    else // inlen <= fill-    {-      memcpy( S->buf + left, in, inlen );-      S->buflen += inlen; // Be lazy, do not compress-      in += inlen;-      inlen -= inlen;+      blake2b_compress( S, S->buf ); /* Compress */+      in += fill; inlen -= fill;+      while(inlen > BLAKE2B_BLOCKBYTES) {+        blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES);+        blake2b_compress( S, in );+        in += BLAKE2B_BLOCKBYTES;+        inlen -= BLAKE2B_BLOCKBYTES;+      }     }+    memcpy( S->buf + S->buflen, in, inlen );+    S->buflen += inlen;   }-   return 0; } -/* Is this correct? */-int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen )+int blake2b_final( blake2b_state *S, void *out, size_t outlen ) {   uint8_t buffer[BLAKE2B_OUTBYTES] = {0};+  size_t i; -  if( outlen > BLAKE2B_OUTBYTES )+  if( out == NULL || outlen < S->outlen )     return -1; -  if( S->buflen > BLAKE2B_BLOCKBYTES )-  {-    blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES );-    blake2b_compress( S, S->buf );-    S->buflen -= BLAKE2B_BLOCKBYTES;-    memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen );-  }+  if( blake2b_is_lastblock( S ) )+    return -1;    blake2b_increment_counter( S, S->buflen );   blake2b_set_lastblock( S );-  memset( S->buf + S->buflen, 0, 2 * BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */+  memset( S->buf + S->buflen, 0, BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */   blake2b_compress( S, S->buf ); -  for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */+  for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */     store64( buffer + sizeof( S->h[i] ) * i, S->h[i] ); -  memcpy( out, buffer, outlen );+  memcpy( out, buffer, S->outlen );+  secure_zero_memory(buffer, sizeof(buffer));   return 0; }  /* inlen, at least, should be uint64_t. Others can be size_t. */-int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )+int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {   blake2b_state S[1]; @@ -365,41 +299,81 @@   return 0; } +int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {+  return blake2b(out, outlen, in, inlen, key, keylen);+}+ #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) {-  return blake2b( out, in, NULL, BLAKE2B_OUTBYTES, inlen, 0 );+  return blake2b( out, BLAKE2B_OUTBYTES, in, inlen, NULL, 0 ); } #endif  #if defined(BLAKE2B_SELFTEST) #include <string.h> #include "blake2-kat.h"-int main( int argc, char **argv )+int main( void ) {   uint8_t key[BLAKE2B_KEYBYTES];-  uint8_t buf[KAT_LENGTH];+  uint8_t buf[BLAKE2_KAT_LENGTH];+  size_t i, step; -  for( size_t i = 0; i < BLAKE2B_KEYBYTES; ++i )+  for( i = 0; i < BLAKE2B_KEYBYTES; ++i )     key[i] = ( uint8_t )i; -  for( size_t i = 0; i < KAT_LENGTH; ++i )+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )     buf[i] = ( uint8_t )i; -  for( size_t i = 0; i < KAT_LENGTH; ++i )+  /* Test simple API */+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )   {     uint8_t hash[BLAKE2B_OUTBYTES];-    blake2b( hash, buf, key, BLAKE2B_OUTBYTES, i, BLAKE2B_KEYBYTES );+    blake2b( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES );      if( 0 != memcmp( hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES ) )     {-      puts( "error" );-      return -1;+      goto fail;     }   } +  /* Test streaming API */+  for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) {+    for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {+      uint8_t hash[BLAKE2B_OUTBYTES];+      blake2b_state S;+      uint8_t * p = buf;+      size_t mlen = i;+      int err = 0;++      if( (err = blake2b_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) {+        goto fail;+      }++      while (mlen >= step) {+        if ( (err = blake2b_update(&S, p, step)) < 0 ) {+          goto fail;+        }+        mlen -= step;+        p += step;+      }+      if ( (err = blake2b_update(&S, p, mlen)) < 0) {+        goto fail;+      }+      if ( (err = blake2b_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) {+        goto fail;+      }++      if (0 != memcmp(hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES)) {+        goto fail;+      }+    }+  }+   puts( "ok" );   return 0;+fail:+  puts("error");+  return -1; } #endif-
cbits/blake2/ref/blake2bp-ref.c view
@@ -1,14 +1,16 @@ /*    BLAKE2 reference source code package - reference C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */  #include <stdio.h>@@ -25,32 +27,48 @@  #define PARALLELISM_DEGREE 4 -static inline int blake2bp_init_leaf( blake2b_state *S, uint8_t outlen, uint8_t keylen, uint64_t offset )+/*+  blake2b_init_param defaults to setting the expecting output length+  from the digest_length parameter block field.++  In some cases, however, we do not want this, as the output length+  of these instances is given by inner_length instead.+*/+static int blake2bp_init_leaf_param( blake2b_state *S, const blake2b_param *P ) {+  int err = blake2b_init_param(S, P);+  S->outlen = P->inner_length;+  return err;+}++static int blake2bp_init_leaf( blake2b_state *S, size_t outlen, size_t keylen, uint64_t offset )+{   blake2b_param P[1];-  P->digest_length = outlen;-  P->key_length = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length = (uint8_t)keylen;   P->fanout = PARALLELISM_DEGREE;   P->depth = 2;   store32( &P->leaf_length, 0 );-  store64( &P->node_offset, offset );+  store32( &P->node_offset, offset );+  store32( &P->xof_length, 0 );   P->node_depth = 0;   P->inner_length = BLAKE2B_OUTBYTES;   memset( P->reserved, 0, sizeof( P->reserved ) );   memset( P->salt, 0, sizeof( P->salt ) );   memset( P->personal, 0, sizeof( P->personal ) );-  return blake2b_init_param( S, P );+  return blake2bp_init_leaf_param( S, P ); } -static inline int blake2bp_init_root( blake2b_state *S, uint8_t outlen, uint8_t keylen )+static int blake2bp_init_root( blake2b_state *S, size_t outlen, size_t keylen ) {   blake2b_param P[1];-  P->digest_length = outlen;-  P->key_length = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length = (uint8_t)keylen;   P->fanout = PARALLELISM_DEGREE;   P->depth = 2;   store32( &P->leaf_length, 0 );-  store64( &P->node_offset, 0 );+  store32( &P->node_offset, 0 );+  store32( &P->xof_length, 0 );   P->node_depth = 1;   P->inner_length = BLAKE2B_OUTBYTES;   memset( P->reserved, 0, sizeof( P->reserved ) );@@ -60,17 +78,20 @@ }  -int blake2bp_init( blake2bp_state *S, const uint8_t outlen )+int blake2bp_init( blake2bp_state *S, size_t outlen ) {+  size_t i;+   if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1;    memset( S->buf, 0, sizeof( S->buf ) );   S->buflen = 0;+  S->outlen = outlen;    if( blake2bp_init_root( S->R, outlen, 0 ) < 0 )     return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2bp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1;    S->R->last_node = 1;@@ -78,19 +99,22 @@   return 0; } -int blake2bp_init_key( blake2bp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )+int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen ) {+  size_t i;+   if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1;    if( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1;    memset( S->buf, 0, sizeof( S->buf ) );   S->buflen = 0;+  S->outlen = outlen;    if( blake2bp_init_root( S->R, outlen, keylen ) < 0 )     return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2bp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1;    S->R->last_node = 1;@@ -100,7 +124,7 @@     memset( block, 0, BLAKE2B_BLOCKBYTES );     memcpy( block, key, keylen ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2b_update( S->S[i], block, BLAKE2B_BLOCKBYTES );      secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */@@ -109,16 +133,18 @@ }  -int blake2bp_update( blake2bp_state *S, const uint8_t *in, uint64_t inlen )+int blake2bp_update( blake2bp_state *S, const void *pin, size_t inlen ) {+  const unsigned char * in = (const unsigned char *)pin;   size_t left = S->buflen;   size_t fill = sizeof( S->buf ) - left;+  size_t i;    if( left && inlen >= fill )   {     memcpy( S->buf + left, in, fill ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2b_update( S->S[i], S->buf + i * BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES );      in += fill;@@ -130,19 +156,19 @@   #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else -  for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ )+  for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif   { #if defined(_OPENMP)-    size_t      id__ = omp_get_thread_num();+    size_t      i = omp_get_thread_num(); #endif-    uint64_t inlen__ = inlen;-    const uint8_t *in__ = ( const uint8_t * )in;-    in__ += id__ * BLAKE2B_BLOCKBYTES;+    size_t inlen__ = inlen;+    const unsigned char *in__ = ( const unsigned char * )in;+    in__ += i * BLAKE2B_BLOCKBYTES;      while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES )     {-      blake2b_update( S->S[id__], in__, BLAKE2B_BLOCKBYTES );+      blake2b_update( S->S[i], in__, BLAKE2B_BLOCKBYTES );       in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES;       inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES;     }@@ -158,11 +184,16 @@   return 0; } -int blake2bp_final( blake2bp_state *S, uint8_t *out, const uint8_t outlen )+int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ) {   uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES];+  size_t i; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  if(out == NULL || outlen < S->outlen) {+    return -1;+  }++  for( i = 0; i < PARALLELISM_DEGREE; ++i )   {     if( S->buflen > i * BLAKE2B_BLOCKBYTES )     {@@ -176,18 +207,18 @@     blake2b_final( S->S[i], hash[i], BLAKE2B_OUTBYTES );   } -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     blake2b_update( S->R, hash[i], BLAKE2B_OUTBYTES ); -  -  return blake2b_final( S->R, out, outlen );+  return blake2b_final( S->R, out, S->outlen ); } -int blake2bp( uint8_t *out, const void *in, const void *key, uint8_t outlen, uint64_t inlen, uint8_t keylen )+int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {   uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES];   blake2b_state S[PARALLELISM_DEGREE][1];   blake2b_state FS[1];+  size_t i;    /* Verify parameters */   if ( NULL == in && inlen > 0 ) return -1;@@ -200,10 +231,10 @@    if( keylen > BLAKE2B_KEYBYTES ) return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2bp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; -  S[PARALLELISM_DEGREE - 1]->last_node = 1; // mark last node+  S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */    if( keylen > 0 )   {@@ -211,7 +242,7 @@     memset( block, 0, BLAKE2B_BLOCKBYTES );     memcpy( block, key, keylen ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2b_update( S[i], block, BLAKE2B_BLOCKBYTES );      secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */@@ -221,39 +252,39 @@   #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else -  for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ )+  for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif   { #if defined(_OPENMP)-    size_t      id__ = omp_get_thread_num();+    size_t      i = omp_get_thread_num(); #endif-    uint64_t inlen__ = inlen;-    const uint8_t *in__ = ( const uint8_t * )in;-    in__ += id__ * BLAKE2B_BLOCKBYTES;+    size_t inlen__ = inlen;+    const unsigned char *in__ = ( const unsigned char * )in;+    in__ += i * BLAKE2B_BLOCKBYTES;      while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES )     {-      blake2b_update( S[id__], in__, BLAKE2B_BLOCKBYTES );+      blake2b_update( S[i], in__, BLAKE2B_BLOCKBYTES );       in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES;       inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES;     } -    if( inlen__ > id__ * BLAKE2B_BLOCKBYTES )+    if( inlen__ > i * BLAKE2B_BLOCKBYTES )     {-      const size_t left = inlen__ - id__ * BLAKE2B_BLOCKBYTES;+      const size_t left = inlen__ - i * BLAKE2B_BLOCKBYTES;       const size_t len = left <= BLAKE2B_BLOCKBYTES ? left : BLAKE2B_BLOCKBYTES;-      blake2b_update( S[id__], in__, len );+      blake2b_update( S[i], in__, len );     } -    blake2b_final( S[id__], hash[id__], BLAKE2B_OUTBYTES );+    blake2b_final( S[i], hash[i], BLAKE2B_OUTBYTES );   }    if( blake2bp_init_root( FS, outlen, keylen ) < 0 )     return -1; -  FS->last_node = 1; // Mark as last node+  FS->last_node = 1; /* Mark as last node */ -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     blake2b_update( FS, hash[i], BLAKE2B_OUTBYTES );    return blake2b_final( FS, out, outlen );;@@ -262,30 +293,67 @@ #if defined(BLAKE2BP_SELFTEST) #include <string.h> #include "blake2-kat.h"-int main( int argc, char **argv )+int main( void ) {   uint8_t key[BLAKE2B_KEYBYTES];-  uint8_t buf[KAT_LENGTH];+  uint8_t buf[BLAKE2_KAT_LENGTH];+  size_t i, step; -  for( size_t i = 0; i < BLAKE2B_KEYBYTES; ++i )+  for( i = 0; i < BLAKE2B_KEYBYTES; ++i )     key[i] = ( uint8_t )i; -  for( size_t i = 0; i < KAT_LENGTH; ++i )+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )     buf[i] = ( uint8_t )i; -  for( size_t i = 0; i < KAT_LENGTH; ++i )+  /* Test simple API */+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )   {     uint8_t hash[BLAKE2B_OUTBYTES];-    blake2bp( hash, buf, key, BLAKE2B_OUTBYTES, i, BLAKE2B_KEYBYTES );+    blake2bp( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES );      if( 0 != memcmp( hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES ) )     {-      puts( "error" );-      return -1;+      goto fail;     }   } +  /* Test streaming API */+  for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) {+    for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {+      uint8_t hash[BLAKE2B_OUTBYTES];+      blake2bp_state S;+      uint8_t * p = buf;+      size_t mlen = i;+      int err = 0;++      if( (err = blake2bp_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) {+        goto fail;+      }++      while (mlen >= step) {+        if ( (err = blake2bp_update(&S, p, step)) < 0 ) {+          goto fail;+        }+        mlen -= step;+        p += step;+      }+      if ( (err = blake2bp_update(&S, p, mlen)) < 0) {+        goto fail;+      }+      if ( (err = blake2bp_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) {+        goto fail;+      }++      if (0 != memcmp(hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES)) {+        goto fail;+      }+    }+  }+   puts( "ok" );   return 0;+fail:+  puts("error");+  return -1; } #endif
cbits/blake2/ref/blake2s-ref.c view
@@ -1,14 +1,16 @@ /*    BLAKE2 reference source code package - reference C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */  #include <stdint.h>@@ -38,143 +40,79 @@   { 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13 , 0 } , }; -static inline int blake2s_set_lastnode( blake2s_state *S )-{-  S->f[1] = -1;-  return 0;-}--static inline int blake2s_clear_lastnode( blake2s_state *S )+static void blake2s_set_lastnode( blake2s_state *S ) {-  S->f[1] = 0;-  return 0;+  S->f[1] = (uint32_t)-1; }  /* Some helper functions, not necessarily useful */-static inline int blake2s_set_lastblock( blake2s_state *S )+static int blake2s_is_lastblock( const blake2s_state *S ) {-  if( S->last_node ) blake2s_set_lastnode( S );--  S->f[0] = -1;-  return 0;+  return S->f[0] != 0; } -static inline int blake2s_clear_lastblock( blake2s_state *S )+static void blake2s_set_lastblock( blake2s_state *S ) {-  if( S->last_node ) blake2s_clear_lastnode( S );+  if( S->last_node ) blake2s_set_lastnode( S ); -  S->f[0] = 0;-  return 0;+  S->f[0] = (uint32_t)-1; } -static inline int blake2s_increment_counter( blake2s_state *S, const uint32_t inc )+static void blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) {   S->t[0] += inc;   S->t[1] += ( S->t[0] < inc );-  return 0; } -// Parameter-related functions-static inline int blake2s_param_set_digest_length( blake2s_param *P, const uint8_t digest_length )-{-  P->digest_length = digest_length;-  return 0;-}--static inline int blake2s_param_set_fanout( blake2s_param *P, const uint8_t fanout )-{-  P->fanout = fanout;-  return 0;-}--static inline int blake2s_param_set_max_depth( blake2s_param *P, const uint8_t depth )-{-  P->depth = depth;-  return 0;-}--static inline int blake2s_param_set_leaf_length( blake2s_param *P, const uint32_t leaf_length )-{-  store32( &P->leaf_length, leaf_length );-  return 0;-}--static inline int blake2s_param_set_node_offset( blake2s_param *P, const uint64_t node_offset )-{-  store48( P->node_offset, node_offset );-  return 0;-}--static inline int blake2s_param_set_node_depth( blake2s_param *P, const uint8_t node_depth )-{-  P->node_depth = node_depth;-  return 0;-}--static inline int blake2s_param_set_inner_length( blake2s_param *P, const uint8_t inner_length )-{-  P->inner_length = inner_length;-  return 0;-}--static inline int blake2s_param_set_salt( blake2s_param *P, const uint8_t salt[BLAKE2S_SALTBYTES] )-{-  memcpy( P->salt, salt, BLAKE2S_SALTBYTES );-  return 0;-}--static inline int blake2s_param_set_personal( blake2s_param *P, const uint8_t personal[BLAKE2S_PERSONALBYTES] )-{-  memcpy( P->personal, personal, BLAKE2S_PERSONALBYTES );-  return 0;-}--static inline int blake2s_init0( blake2s_state *S )+static void blake2s_init0( blake2s_state *S ) {+  size_t i;   memset( S, 0, sizeof( blake2s_state ) ); -  for( int i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i];--  return 0;+  for( i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; }  /* init2 xors IV with input parameter block */ int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) {+  const unsigned char *p = ( const unsigned char * )( P );+  size_t i;+   blake2s_init0( S );-  const uint32_t *p = ( const uint32_t * )( P );    /* IV XOR ParamBlock */-  for( size_t i = 0; i < 8; ++i )-    S->h[i] ^= load32( &p[i] );+  for( i = 0; i < 8; ++i )+    S->h[i] ^= load32( &p[i * 4] ); +  S->outlen = P->digest_length;   return 0; }  -// Sequential blake2s initialization-int blake2s_init( blake2s_state *S, const uint8_t outlen )+/* Sequential blake2s initialization */+int blake2s_init( blake2s_state *S, size_t outlen ) {   blake2s_param P[1];    /* Move interval verification here? */   if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; -  P->digest_length = outlen;+  P->digest_length = (uint8_t)outlen;   P->key_length    = 0;   P->fanout        = 1;   P->depth         = 1;   store32( &P->leaf_length, 0 );-  store48( &P->node_offset, 0 );+  store32( &P->node_offset, 0 );+  store16( &P->xof_length, 0 );   P->node_depth    = 0;   P->inner_length  = 0;-  // memset(P->reserved, 0, sizeof(P->reserved) );+  /* memset(P->reserved, 0, sizeof(P->reserved) ); */   memset( P->salt,     0, sizeof( P->salt ) );   memset( P->personal, 0, sizeof( P->personal ) );   return blake2s_init_param( S, P ); } -int blake2s_init_key( blake2s_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )+int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ) {   blake2s_param P[1]; @@ -182,15 +120,16 @@    if ( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; -  P->digest_length = outlen;-  P->key_length    = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length    = (uint8_t)keylen;   P->fanout        = 1;   P->depth         = 1;   store32( &P->leaf_length, 0 );-  store48( &P->node_offset, 0 );+  store32( &P->node_offset, 0 );+  store16( &P->xof_length, 0 );   P->node_depth    = 0;   P->inner_length  = 0;-  // memset(P->reserved, 0, sizeof(P->reserved) );+  /* memset(P->reserved, 0, sizeof(P->reserved) ); */   memset( P->salt,     0, sizeof( P->salt ) );   memset( P->personal, 0, sizeof( P->personal ) ); @@ -206,16 +145,43 @@   return 0; } -static int blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCKBYTES] )+#define G(r,i,a,b,c,d)                      \+  do {                                      \+    a = a + b + m[blake2s_sigma[r][2*i+0]]; \+    d = rotr32(d ^ a, 16);                  \+    c = c + d;                              \+    b = rotr32(b ^ c, 12);                  \+    a = a + b + m[blake2s_sigma[r][2*i+1]]; \+    d = rotr32(d ^ a, 8);                   \+    c = c + d;                              \+    b = rotr32(b ^ c, 7);                   \+  } while(0)++#define ROUND(r)                    \+  do {                              \+    G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \+    G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \+    G(r,2,v[ 2],v[ 6],v[10],v[14]); \+    G(r,3,v[ 3],v[ 7],v[11],v[15]); \+    G(r,4,v[ 0],v[ 5],v[10],v[15]); \+    G(r,5,v[ 1],v[ 6],v[11],v[12]); \+    G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \+    G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \+  } while(0)++static void blake2s_compress( blake2s_state *S, const uint8_t in[BLAKE2S_BLOCKBYTES] ) {   uint32_t m[16];   uint32_t v[16];+  size_t i; -  for( size_t i = 0; i < 16; ++i )-    m[i] = load32( block + i * sizeof( m[i] ) );+  for( i = 0; i < 16; ++i ) {+    m[i] = load32( in + i * sizeof( m[i] ) );+  } -  for( size_t i = 0; i < 8; ++i )+  for( i = 0; i < 8; ++i ) {     v[i] = S->h[i];+  }    v[ 8] = blake2s_IV[0];   v[ 9] = blake2s_IV[1];@@ -225,28 +191,7 @@   v[13] = S->t[1] ^ blake2s_IV[5];   v[14] = S->f[0] ^ blake2s_IV[6];   v[15] = S->f[1] ^ blake2s_IV[7];-#define G(r,i,a,b,c,d) \-  do { \-    a = a + b + m[blake2s_sigma[r][2*i+0]]; \-    d = rotr32(d ^ a, 16); \-    c = c + d; \-    b = rotr32(b ^ c, 12); \-    a = a + b + m[blake2s_sigma[r][2*i+1]]; \-    d = rotr32(d ^ a, 8); \-    c = c + d; \-    b = rotr32(b ^ c, 7); \-  } while(0)-#define ROUND(r)  \-  do { \-    G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \-    G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \-    G(r,2,v[ 2],v[ 6],v[10],v[14]); \-    G(r,3,v[ 3],v[ 7],v[11],v[15]); \-    G(r,4,v[ 0],v[ 5],v[10],v[15]); \-    G(r,5,v[ 1],v[ 6],v[11],v[12]); \-    G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \-    G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \-  } while(0)+   ROUND( 0 );   ROUND( 1 );   ROUND( 2 );@@ -258,73 +203,66 @@   ROUND( 8 );   ROUND( 9 ); -  for( size_t i = 0; i < 8; ++i )+  for( i = 0; i < 8; ++i ) {     S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];+  }+}  #undef G #undef ROUND-  return 0;-} --int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen )+int blake2s_update( blake2s_state *S, const void *pin, size_t inlen ) {-  while( inlen > 0 )+  const unsigned char * in = (const unsigned char *)pin;+  if( inlen > 0 )   {     size_t left = S->buflen;-    size_t fill = 2 * BLAKE2S_BLOCKBYTES - left;-+    size_t fill = BLAKE2S_BLOCKBYTES - left;     if( inlen > fill )     {-      memcpy( S->buf + left, in, fill ); // Fill buffer-      S->buflen += fill;+      S->buflen = 0;+      memcpy( S->buf + left, in, fill ); /* Fill buffer */       blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES );-      blake2s_compress( S, S->buf ); // Compress-      memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); // Shift buffer left-      S->buflen -= BLAKE2S_BLOCKBYTES;-      in += fill;-      inlen -= fill;-    }-    else // inlen <= fill-    {-      memcpy( S->buf + left, in, inlen );-      S->buflen += inlen; // Be lazy, do not compress-      in += inlen;-      inlen -= inlen;+      blake2s_compress( S, S->buf ); /* Compress */+      in += fill; inlen -= fill;+      while(inlen > BLAKE2S_BLOCKBYTES) {+        blake2s_increment_counter(S, BLAKE2S_BLOCKBYTES);+        blake2s_compress( S, in );+        in += BLAKE2S_BLOCKBYTES;+        inlen -= BLAKE2S_BLOCKBYTES;+      }     }+    memcpy( S->buf + S->buflen, in, inlen );+    S->buflen += inlen;   }-   return 0; } -int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen )+int blake2s_final( blake2s_state *S, void *out, size_t outlen ) {   uint8_t buffer[BLAKE2S_OUTBYTES] = {0};+  size_t i; -  if( outlen > BLAKE2S_OUTBYTES )+  if( out == NULL || outlen < S->outlen )     return -1; -  if( S->buflen > BLAKE2S_BLOCKBYTES )-  {-    blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES );-    blake2s_compress( S, S->buf );-    S->buflen -= BLAKE2S_BLOCKBYTES;-    memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, S->buflen );-  }+  if( blake2s_is_lastblock( S ) )+    return -1;    blake2s_increment_counter( S, ( uint32_t )S->buflen );   blake2s_set_lastblock( S );-  memset( S->buf + S->buflen, 0, 2 * BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */+  memset( S->buf + S->buflen, 0, BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */   blake2s_compress( S, S->buf ); -  for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */+  for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */     store32( buffer + sizeof( S->h[i] ) * i, S->h[i] );-    +   memcpy( out, buffer, outlen );+  secure_zero_memory(buffer, sizeof(buffer));   return 0; } -int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )+int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {   blake2s_state S[1]; @@ -356,39 +294,74 @@ #if defined(SUPERCOP) int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) {-  return blake2s( out, in, NULL, BLAKE2S_OUTBYTES, inlen, 0 );+  return blake2s( out, BLAKE2S_OUTBYTES in, inlen, NULL, 0 ); } #endif  #if defined(BLAKE2S_SELFTEST) #include <string.h> #include "blake2-kat.h"-int main( int argc, char **argv )+int main( void ) {   uint8_t key[BLAKE2S_KEYBYTES];-  uint8_t buf[KAT_LENGTH];+  uint8_t buf[BLAKE2_KAT_LENGTH];+  size_t i, step; -  for( size_t i = 0; i < BLAKE2S_KEYBYTES; ++i )+  for( i = 0; i < BLAKE2S_KEYBYTES; ++i )     key[i] = ( uint8_t )i; -  for( size_t i = 0; i < KAT_LENGTH; ++i )+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )     buf[i] = ( uint8_t )i; -  for( size_t i = 0; i < KAT_LENGTH; ++i )+  /* Test simple API */+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )   {     uint8_t hash[BLAKE2S_OUTBYTES];-    blake2s( hash, buf, key, BLAKE2S_OUTBYTES, i, BLAKE2S_KEYBYTES );+    blake2s( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES );      if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) )     {-      puts( "error" );-      return -1;+      goto fail;     }   } +  /* Test streaming API */+  for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) {+    for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {+      uint8_t hash[BLAKE2S_OUTBYTES];+      blake2s_state S;+      uint8_t * p = buf;+      size_t mlen = i;+      int err = 0;++      if( (err = blake2s_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) {+        goto fail;+      }++      while (mlen >= step) {+        if ( (err = blake2s_update(&S, p, step)) < 0 ) {+          goto fail;+        }+        mlen -= step;+        p += step;+      }+      if ( (err = blake2s_update(&S, p, mlen)) < 0) {+        goto fail;+      }+      if ( (err = blake2s_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) {+        goto fail;+      }++      if (0 != memcmp(hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES)) {+        goto fail;+      }+    }+  }+   puts( "ok" );   return 0;+fail:+  puts("error");+  return -1; } #endif--
cbits/blake2/ref/blake2sp-ref.c view
@@ -1,14 +1,16 @@ /*    BLAKE2 reference source code package - reference C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */  #include <stdlib.h>@@ -24,31 +26,47 @@  #define PARALLELISM_DEGREE 8 -static inline int blake2sp_init_leaf( blake2s_state *S, uint8_t outlen, uint8_t keylen, uint64_t offset )+/*+  blake2sp_init_param defaults to setting the expecting output length+  from the digest_length parameter block field.++  In some cases, however, we do not want this, as the output length+  of these instances is given by inner_length instead.+*/+static int blake2sp_init_leaf_param( blake2s_state *S, const blake2s_param *P ) {+  int err = blake2s_init_param(S, P);+  S->outlen = P->inner_length;+  return err;+}++static int blake2sp_init_leaf( blake2s_state *S, size_t outlen, size_t keylen, uint64_t offset )+{   blake2s_param P[1];-  P->digest_length = outlen;-  P->key_length = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length = (uint8_t)keylen;   P->fanout = PARALLELISM_DEGREE;   P->depth = 2;   store32( &P->leaf_length, 0 );-  store48( P->node_offset, offset );+  store32( &P->node_offset, offset );+  store16( &P->xof_length, 0 );   P->node_depth = 0;   P->inner_length = BLAKE2S_OUTBYTES;   memset( P->salt, 0, sizeof( P->salt ) );   memset( P->personal, 0, sizeof( P->personal ) );-  return blake2s_init_param( S, P );+  return blake2sp_init_leaf_param( S, P ); } -static inline int blake2sp_init_root( blake2s_state *S, uint8_t outlen, uint8_t keylen )+static int blake2sp_init_root( blake2s_state *S, size_t outlen, size_t keylen ) {   blake2s_param P[1];-  P->digest_length = outlen;-  P->key_length = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length = (uint8_t)keylen;   P->fanout = PARALLELISM_DEGREE;   P->depth = 2;   store32( &P->leaf_length, 0 );-  store48( P->node_offset, 0ULL );+  store32( &P->node_offset, 0 );+  store16( &P->xof_length, 0 );   P->node_depth = 1;   P->inner_length = BLAKE2S_OUTBYTES;   memset( P->salt, 0, sizeof( P->salt ) );@@ -57,17 +75,20 @@ }  -int blake2sp_init( blake2sp_state *S, const uint8_t outlen )+int blake2sp_init( blake2sp_state *S, size_t outlen ) {+  size_t i;+   if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1;    memset( S->buf, 0, sizeof( S->buf ) );   S->buflen = 0;+  S->outlen = outlen;    if( blake2sp_init_root( S->R, outlen, 0 ) < 0 )     return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2sp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1;    S->R->last_node = 1;@@ -75,19 +96,22 @@   return 0; } -int blake2sp_init_key( blake2sp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )+int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ) {+  size_t i;+   if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1;    if( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1;    memset( S->buf, 0, sizeof( S->buf ) );   S->buflen = 0;+  S->outlen = outlen;    if( blake2sp_init_root( S->R, outlen, keylen ) < 0 )     return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2sp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1;    S->R->last_node = 1;@@ -97,7 +121,7 @@     memset( block, 0, BLAKE2S_BLOCKBYTES );     memcpy( block, key, keylen ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2s_update( S->S[i], block, BLAKE2S_BLOCKBYTES );      secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */@@ -106,16 +130,18 @@ }  -int blake2sp_update( blake2sp_state *S, const uint8_t *in, uint64_t inlen )+int blake2sp_update( blake2sp_state *S, const void *pin, size_t inlen ) {+  const unsigned char * in = (const unsigned char *)pin;   size_t left = S->buflen;   size_t fill = sizeof( S->buf ) - left;+  size_t i;    if( left && inlen >= fill )   {     memcpy( S->buf + left, in, fill ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES );      in += fill;@@ -126,20 +152,19 @@ #if defined(_OPENMP)   #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else--  for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ )+  for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif   { #if defined(_OPENMP)-    size_t      id__ = omp_get_thread_num();+    size_t      i = omp_get_thread_num(); #endif-    uint64_t inlen__ = inlen;-    const uint8_t *in__ = ( const uint8_t * )in;-    in__ += id__ * BLAKE2S_BLOCKBYTES;+    size_t inlen__ = inlen;+    const unsigned char *in__ = ( const unsigned char * )in;+    in__ += i * BLAKE2S_BLOCKBYTES;      while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES )     {-      blake2s_update( S->S[id__], in__, BLAKE2S_BLOCKBYTES );+      blake2s_update( S->S[i], in__, BLAKE2S_BLOCKBYTES );       in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;       inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;     }@@ -156,11 +181,16 @@ }  -int blake2sp_final( blake2sp_state *S, uint8_t *out, const uint8_t outlen )+int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ) {   uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES];+  size_t i; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  if(out == NULL || outlen < S->outlen) {+    return -1;+  }++  for( i = 0; i < PARALLELISM_DEGREE; ++i )   {     if( S->buflen > i * BLAKE2S_BLOCKBYTES )     {@@ -174,18 +204,19 @@     blake2s_final( S->S[i], hash[i], BLAKE2S_OUTBYTES );   } -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     blake2s_update( S->R, hash[i], BLAKE2S_OUTBYTES ); -  return blake2s_final( S->R, out, outlen );+  return blake2s_final( S->R, out, S->outlen ); }  -int blake2sp( uint8_t *out, const void *in, const void *key, uint8_t outlen, uint64_t inlen, uint8_t keylen )+int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {   uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES];   blake2s_state S[PARALLELISM_DEGREE][1];   blake2s_state FS[1];+  size_t i;    /* Verify parameters */   if ( NULL == in && inlen > 0 ) return -1;@@ -198,10 +229,10 @@    if( keylen > BLAKE2S_KEYBYTES ) return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2sp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; -  S[PARALLELISM_DEGREE - 1]->last_node = 1; // mark last node+  S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */    if( keylen > 0 )   {@@ -209,7 +240,7 @@     memset( block, 0, BLAKE2S_BLOCKBYTES );     memcpy( block, key, keylen ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2s_update( S[i], block, BLAKE2S_BLOCKBYTES );      secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */@@ -219,31 +250,31 @@   #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else -  for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ )+  for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif   { #if defined(_OPENMP)-    size_t      id__ = omp_get_thread_num();+    size_t      i = omp_get_thread_num(); #endif-    uint64_t inlen__ = inlen;-    const uint8_t *in__ = ( const uint8_t * )in;-    in__ += id__ * BLAKE2S_BLOCKBYTES;+    size_t inlen__ = inlen;+    const unsigned char *in__ = ( const unsigned char * )in;+    in__ += i * BLAKE2S_BLOCKBYTES;      while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES )     {-      blake2s_update( S[id__], in__, BLAKE2S_BLOCKBYTES );+      blake2s_update( S[i], in__, BLAKE2S_BLOCKBYTES );       in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;       inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;     } -    if( inlen__ > id__ * BLAKE2S_BLOCKBYTES )+    if( inlen__ > i * BLAKE2S_BLOCKBYTES )     {-      const size_t left = inlen__ - id__ * BLAKE2S_BLOCKBYTES;+      const size_t left = inlen__ - i * BLAKE2S_BLOCKBYTES;       const size_t len = left <= BLAKE2S_BLOCKBYTES ? left : BLAKE2S_BLOCKBYTES;-      blake2s_update( S[id__], in__, len );+      blake2s_update( S[i], in__, len );     } -    blake2s_final( S[id__], hash[id__], BLAKE2S_OUTBYTES );+    blake2s_final( S[i], hash[i], BLAKE2S_OUTBYTES );   }    if( blake2sp_init_root( FS, outlen, keylen ) < 0 )@@ -251,7 +282,7 @@    FS->last_node = 1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     blake2s_update( FS, hash[i], BLAKE2S_OUTBYTES );    return blake2s_final( FS, out, outlen );@@ -262,36 +293,67 @@ #if defined(BLAKE2SP_SELFTEST) #include <string.h> #include "blake2-kat.h"-int main( int argc, char **argv )+int main( void ) {   uint8_t key[BLAKE2S_KEYBYTES];-  uint8_t buf[KAT_LENGTH];+  uint8_t buf[BLAKE2_KAT_LENGTH];+  size_t i, step; -  for( size_t i = 0; i < BLAKE2S_KEYBYTES; ++i )+  for( i = 0; i < BLAKE2S_KEYBYTES; ++i )     key[i] = ( uint8_t )i; -  for( size_t i = 0; i < KAT_LENGTH; ++i )+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )     buf[i] = ( uint8_t )i; -  for( size_t i = 0; i < KAT_LENGTH; ++i )+  /* Test simple API */+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )   {     uint8_t hash[BLAKE2S_OUTBYTES];-    blake2sp( hash, buf, key, BLAKE2S_OUTBYTES, i, BLAKE2S_KEYBYTES );+    blake2sp( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES );      if( 0 != memcmp( hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES ) )     {-      puts( "error" );-      return -1;+      goto fail;     }   } -  puts( "ok" );-  return 0;-}-#endif--+  /* Test streaming API */+  for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) {+    for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {+      uint8_t hash[BLAKE2S_OUTBYTES];+      blake2sp_state S;+      uint8_t * p = buf;+      size_t mlen = i;+      int err = 0; +      if( (err = blake2sp_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) {+        goto fail;+      } +      while (mlen >= step) {+        if ( (err = blake2sp_update(&S, p, step)) < 0 ) {+          goto fail;+        }+        mlen -= step;+        p += step;+      }+      if ( (err = blake2sp_update(&S, p, mlen)) < 0) {+        goto fail;+      }+      if ( (err = blake2sp_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) {+        goto fail;+      } +      if (0 != memcmp(hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES)) {+        goto fail;+      }+    }+  } +  puts( "ok" );+  return 0;+fail:+  puts("error");+  return -1;+}+#endif
cbits/blake2/sse/blake2-config.h view
@@ -1,21 +1,22 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2_CONFIG_H__-#define __BLAKE2_CONFIG_H__+#ifndef BLAKE2_CONFIG_H+#define BLAKE2_CONFIG_H -// These don't work everywhere-#if defined(__SSE2__)+/* These don't work everywhere */+#if defined(__SSE2__) || defined(__x86_64__) || defined(__amd64__) #define HAVE_SSE2 #endif @@ -69,4 +70,3 @@ #endif  #endif-
cbits/blake2/sse/blake2-impl.h view
@@ -1,22 +1,36 @@ /*-   BLAKE2 reference source code package - optimized C implementations+   BLAKE2 reference source code package - reference C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2_IMPL_H__-#define __BLAKE2_IMPL_H__+#ifndef BLAKE2_IMPL_H+#define BLAKE2_IMPL_H  #include <stdint.h>+#include <string.h> -static inline uint32_t load32( const void *src )+#if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L)+  #if   defined(_MSC_VER)+    #define BLAKE2_INLINE __inline+  #elif defined(__GNUC__)+    #define BLAKE2_INLINE __inline__+  #else+    #define BLAKE2_INLINE+  #endif+#else+  #define BLAKE2_INLINE inline+#endif++static BLAKE2_INLINE uint32_t load32( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN)   uint32_t w;@@ -24,15 +38,14 @@   return w; #else   const uint8_t *p = ( const uint8_t * )src;-  uint32_t w = *p++;-  w |= ( uint32_t )( *p++ ) <<  8;-  w |= ( uint32_t )( *p++ ) << 16;-  w |= ( uint32_t )( *p++ ) << 24;-  return w;+  return (( uint32_t )( p[0] ) <<  0) |+         (( uint32_t )( p[1] ) <<  8) |+         (( uint32_t )( p[2] ) << 16) |+         (( uint32_t )( p[3] ) << 24) ; #endif } -static inline uint64_t load64( const void *src )+static BLAKE2_INLINE uint64_t load64( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN)   uint64_t w;@@ -40,97 +53,108 @@   return w; #else   const uint8_t *p = ( const uint8_t * )src;-  uint64_t w = *p++;-  w |= ( uint64_t )( *p++ ) <<  8;-  w |= ( uint64_t )( *p++ ) << 16;-  w |= ( uint64_t )( *p++ ) << 24;-  w |= ( uint64_t )( *p++ ) << 32;-  w |= ( uint64_t )( *p++ ) << 40;-  w |= ( uint64_t )( *p++ ) << 48;-  w |= ( uint64_t )( *p++ ) << 56;-  return w;+  return (( uint64_t )( p[0] ) <<  0) |+         (( uint64_t )( p[1] ) <<  8) |+         (( uint64_t )( p[2] ) << 16) |+         (( uint64_t )( p[3] ) << 24) |+         (( uint64_t )( p[4] ) << 32) |+         (( uint64_t )( p[5] ) << 40) |+         (( uint64_t )( p[6] ) << 48) |+         (( uint64_t )( p[7] ) << 56) ; #endif } -static inline void store32( void *dst, uint32_t w )+static BLAKE2_INLINE uint16_t load16( const void *src ) { #if defined(NATIVE_LITTLE_ENDIAN)-  memcpy(dst, &w, sizeof w);+  uint16_t w;+  memcpy(&w, src, sizeof w);+  return w; #else-  uint8_t *p = ( uint8_t * )dst;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w;+  const uint8_t *p = ( const uint8_t * )src;+  return (( uint16_t )( p[0] ) <<  0) |+         (( uint16_t )( p[1] ) <<  8) ; #endif } -static inline void store64( void *dst, uint64_t w )+static BLAKE2_INLINE void store16( void *dst, uint16_t w ) { #if defined(NATIVE_LITTLE_ENDIAN)   memcpy(dst, &w, sizeof w); #else   uint8_t *p = ( uint8_t * )dst;   *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;   *p++ = ( uint8_t )w; #endif } -static inline uint64_t load48( const void *src )+static BLAKE2_INLINE void store32( void *dst, uint32_t w ) {-  const uint8_t *p = ( const uint8_t * )src;-  uint64_t w = *p++;-  w |= ( uint64_t )( *p++ ) <<  8;-  w |= ( uint64_t )( *p++ ) << 16;-  w |= ( uint64_t )( *p++ ) << 24;-  w |= ( uint64_t )( *p++ ) << 32;-  w |= ( uint64_t )( *p++ ) << 40;-  return w;+#if defined(NATIVE_LITTLE_ENDIAN)+  memcpy(dst, &w, sizeof w);+#else+  uint8_t *p = ( uint8_t * )dst;+  p[0] = (uint8_t)(w >>  0);+  p[1] = (uint8_t)(w >>  8);+  p[2] = (uint8_t)(w >> 16);+  p[3] = (uint8_t)(w >> 24);+#endif } -static inline void store48( void *dst, uint64_t w )+static BLAKE2_INLINE void store64( void *dst, uint64_t w ) {+#if defined(NATIVE_LITTLE_ENDIAN)+  memcpy(dst, &w, sizeof w);+#else   uint8_t *p = ( uint8_t * )dst;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w; w >>= 8;-  *p++ = ( uint8_t )w;+  p[0] = (uint8_t)(w >>  0);+  p[1] = (uint8_t)(w >>  8);+  p[2] = (uint8_t)(w >> 16);+  p[3] = (uint8_t)(w >> 24);+  p[4] = (uint8_t)(w >> 32);+  p[5] = (uint8_t)(w >> 40);+  p[6] = (uint8_t)(w >> 48);+  p[7] = (uint8_t)(w >> 56);+#endif } -static inline uint32_t rotl32( const uint32_t w, const unsigned c )+static BLAKE2_INLINE uint64_t load48( const void *src ) {-  return ( w << c ) | ( w >> ( 32 - c ) );+  const uint8_t *p = ( const uint8_t * )src;+  return (( uint64_t )( p[0] ) <<  0) |+         (( uint64_t )( p[1] ) <<  8) |+         (( uint64_t )( p[2] ) << 16) |+         (( uint64_t )( p[3] ) << 24) |+         (( uint64_t )( p[4] ) << 32) |+         (( uint64_t )( p[5] ) << 40) ; } -static inline uint64_t rotl64( const uint64_t w, const unsigned c )+static BLAKE2_INLINE void store48( void *dst, uint64_t w ) {-  return ( w << c ) | ( w >> ( 64 - c ) );+  uint8_t *p = ( uint8_t * )dst;+  p[0] = (uint8_t)(w >>  0);+  p[1] = (uint8_t)(w >>  8);+  p[2] = (uint8_t)(w >> 16);+  p[3] = (uint8_t)(w >> 24);+  p[4] = (uint8_t)(w >> 32);+  p[5] = (uint8_t)(w >> 40); } -static inline uint32_t rotr32( const uint32_t w, const unsigned c )+static BLAKE2_INLINE uint32_t rotr32( const uint32_t w, const unsigned c ) {   return ( w >> c ) | ( w << ( 32 - c ) ); } -static inline uint64_t rotr64( const uint64_t w, const unsigned c )+static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c ) {   return ( w >> c ) | ( w << ( 64 - c ) ); }  /* prevents compiler optimizing out memset() */-static inline void secure_zero_memory( void *v, size_t n )+static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n) {-  volatile uint8_t *p = ( volatile uint8_t * )v;-  while( n-- ) *p++ = 0;+  static void *(*const volatile memset_v)(void *, int, size_t) = &memset;+  memset_v(v, 0, n); }  #endif-
cbits/blake2/sse/blake2.h view
@@ -1,22 +1,29 @@ /*-   BLAKE2 reference source code package - optimized C implementations+   BLAKE2 reference source code package - reference C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2_H__-#define __BLAKE2_H__+#ifndef BLAKE2_H+#define BLAKE2_H  #include <stddef.h> #include <stdint.h> +#if defined(_MSC_VER)+#define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop))+#else+#define BLAKE2_PACKED(x) x __attribute__((packed))+#endif+ #if defined(__cplusplus) extern "C" { #endif@@ -39,112 +46,150 @@     BLAKE2B_PERSONALBYTES = 16   }; -#pragma pack(push, 1)-  typedef struct __blake2s_param-  {-    uint8_t  digest_length; // 1-    uint8_t  key_length;    // 2-    uint8_t  fanout;        // 3-    uint8_t  depth;         // 4-    uint32_t leaf_length;   // 8-    uint8_t  node_offset[6];// 14-    uint8_t  node_depth;    // 15-    uint8_t  inner_length;  // 16-    // uint8_t  reserved[0];-    uint8_t  salt[BLAKE2S_SALTBYTES]; // 24-    uint8_t  personal[BLAKE2S_PERSONALBYTES];  // 32-  } blake2s_param;--  typedef struct __blake2s_state+  typedef struct blake2s_state__   {     uint32_t h[8];     uint32_t t[2];     uint32_t f[2];-    uint8_t  buf[2 * BLAKE2S_BLOCKBYTES];+    uint8_t  buf[BLAKE2S_BLOCKBYTES];     size_t   buflen;+    size_t   outlen;     uint8_t  last_node;   } blake2s_state; -  typedef struct __blake2b_param-  {-    uint8_t  digest_length; // 1-    uint8_t  key_length;    // 2-    uint8_t  fanout;        // 3-    uint8_t  depth;         // 4-    uint32_t leaf_length;   // 8-    uint64_t node_offset;   // 16-    uint8_t  node_depth;    // 17-    uint8_t  inner_length;  // 18-    uint8_t  reserved[14];  // 32-    uint8_t  salt[BLAKE2B_SALTBYTES]; // 48-    uint8_t  personal[BLAKE2B_PERSONALBYTES];  // 64-  } blake2b_param;--  typedef struct __blake2b_state+  typedef struct blake2b_state__   {     uint64_t h[8];     uint64_t t[2];     uint64_t f[2];-    uint8_t  buf[2 * BLAKE2B_BLOCKBYTES];+    uint8_t  buf[BLAKE2B_BLOCKBYTES];     size_t   buflen;+    size_t   outlen;     uint8_t  last_node;   } blake2b_state; -  typedef struct __blake2sp_state+  typedef struct blake2sp_state__   {     blake2s_state S[8][1];     blake2s_state R[1];-    uint8_t buf[8 * BLAKE2S_BLOCKBYTES];-    size_t  buflen;+    uint8_t       buf[8 * BLAKE2S_BLOCKBYTES];+    size_t        buflen;+    size_t        outlen;   } blake2sp_state; -  typedef struct __blake2bp_state+  typedef struct blake2bp_state__   {     blake2b_state S[4][1];     blake2b_state R[1];-    uint8_t buf[4 * BLAKE2B_BLOCKBYTES];-    size_t  buflen;+    uint8_t       buf[4 * BLAKE2B_BLOCKBYTES];+    size_t        buflen;+    size_t        outlen;   } blake2bp_state;-#pragma pack(pop) -  // Streaming API-  int blake2s_init( blake2s_state *S, const uint8_t outlen );-  int blake2s_init_key( blake2s_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );++  BLAKE2_PACKED(struct blake2s_param__+  {+    uint8_t  digest_length; /* 1 */+    uint8_t  key_length;    /* 2 */+    uint8_t  fanout;        /* 3 */+    uint8_t  depth;         /* 4 */+    uint32_t leaf_length;   /* 8 */+    uint32_t node_offset;  /* 12 */+    uint16_t xof_length;    /* 14 */+    uint8_t  node_depth;    /* 15 */+    uint8_t  inner_length;  /* 16 */+    /* uint8_t  reserved[0]; */+    uint8_t  salt[BLAKE2S_SALTBYTES]; /* 24 */+    uint8_t  personal[BLAKE2S_PERSONALBYTES];  /* 32 */+  });++  typedef struct blake2s_param__ blake2s_param;++  BLAKE2_PACKED(struct blake2b_param__+  {+    uint8_t  digest_length; /* 1 */+    uint8_t  key_length;    /* 2 */+    uint8_t  fanout;        /* 3 */+    uint8_t  depth;         /* 4 */+    uint32_t leaf_length;   /* 8 */+    uint32_t node_offset;   /* 12 */+    uint32_t xof_length;    /* 16 */+    uint8_t  node_depth;    /* 17 */+    uint8_t  inner_length;  /* 18 */+    uint8_t  reserved[14];  /* 32 */+    uint8_t  salt[BLAKE2B_SALTBYTES]; /* 48 */+    uint8_t  personal[BLAKE2B_PERSONALBYTES];  /* 64 */+  });++  typedef struct blake2b_param__ blake2b_param;++  typedef struct blake2xs_state__+  {+    blake2s_state S[1];+    blake2s_param P[1];+  } blake2xs_state;++  typedef struct blake2xb_state__+  {+    blake2b_state S[1];+    blake2b_param P[1];+  } blake2xb_state;++  /* Padded structs result in a compile-time error */+  enum {+    BLAKE2_DUMMY_1 = 1/(sizeof(blake2s_param) == BLAKE2S_OUTBYTES),+    BLAKE2_DUMMY_2 = 1/(sizeof(blake2b_param) == BLAKE2B_OUTBYTES)+  };++  /* Streaming API */+  int blake2s_init( blake2s_state *S, size_t outlen );+  int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen );   int blake2s_init_param( blake2s_state *S, const blake2s_param *P );-  int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen );-  int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen );+  int blake2s_update( blake2s_state *S, const void *in, size_t inlen );+  int blake2s_final( blake2s_state *S, void *out, size_t outlen ); -  int blake2b_init( blake2b_state *S, const uint8_t outlen );-  int blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );+  int blake2b_init( blake2b_state *S, size_t outlen );+  int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen );   int blake2b_init_param( blake2b_state *S, const blake2b_param *P );-  int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen );-  int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen );+  int blake2b_update( blake2b_state *S, const void *in, size_t inlen );+  int blake2b_final( blake2b_state *S, void *out, size_t outlen ); -  int blake2sp_init( blake2sp_state *S, const uint8_t outlen );-  int blake2sp_init_key( blake2sp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );-  int blake2sp_update( blake2sp_state *S, const uint8_t *in, uint64_t inlen );-  int blake2sp_final( blake2sp_state *S, uint8_t *out, uint8_t outlen );+  int blake2sp_init( blake2sp_state *S, size_t outlen );+  int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen );+  int blake2sp_update( blake2sp_state *S, const void *in, size_t inlen );+  int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ); -  int blake2bp_init( blake2bp_state *S, const uint8_t outlen );-  int blake2bp_init_key( blake2bp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );-  int blake2bp_update( blake2bp_state *S, const uint8_t *in, uint64_t inlen );-  int blake2bp_final( blake2bp_state *S, uint8_t *out, uint8_t outlen );+  int blake2bp_init( blake2bp_state *S, size_t outlen );+  int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen );+  int blake2bp_update( blake2bp_state *S, const void *in, size_t inlen );+  int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ); -  // Simple API-  int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );-  int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );+  /* Variable output length API */+  int blake2xs_init( blake2xs_state *S, const size_t outlen );+  int blake2xs_init_key( blake2xs_state *S, const size_t outlen, const void *key, size_t keylen );+  int blake2xs_update( blake2xs_state *S, const void *in, size_t inlen );+  int blake2xs_final(blake2xs_state *S, void *out, size_t outlen); -  int blake2sp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );-  int blake2bp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );+  int blake2xb_init( blake2xb_state *S, const size_t outlen );+  int blake2xb_init_key( blake2xb_state *S, const size_t outlen, const void *key, size_t keylen );+  int blake2xb_update( blake2xb_state *S, const void *in, size_t inlen );+  int blake2xb_final(blake2xb_state *S, void *out, size_t outlen); -  static inline int blake2( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )-  {-    return blake2b( out, in, key, outlen, inlen, keylen );-  }+  /* Simple API */+  int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );+  int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); +  int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );+  int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );++  int blake2xs( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );+  int blake2xb( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );++  /* This is simply an alias for blake2b */+  int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );+ #if defined(__cplusplus) } #endif  #endif-
cbits/blake2/sse/blake2b-load-sse2.h view
@@ -1,18 +1,19 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2B_LOAD_SSE2_H__-#define __BLAKE2B_LOAD_SSE2_H__+#ifndef BLAKE2B_LOAD_SSE2_H+#define BLAKE2B_LOAD_SSE2_H  #define LOAD_MSG_0_1(b0, b1) b0 = _mm_set_epi64x(m2, m0); b1 = _mm_set_epi64x(m6, m4) #define LOAD_MSG_0_2(b0, b1) b0 = _mm_set_epi64x(m3, m1); b1 = _mm_set_epi64x(m7, m5)@@ -65,4 +66,3 @@   #endif-
cbits/blake2/sse/blake2b-load-sse41.h view
@@ -1,18 +1,19 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2B_LOAD_SSE41_H__-#define __BLAKE2B_LOAD_SSE41_H__+#ifndef BLAKE2B_LOAD_SSE41_H+#define BLAKE2B_LOAD_SSE41_H  #define LOAD_MSG_0_1(b0, b1) \ do \@@ -399,4 +400,3 @@   #endif-
cbits/blake2/sse/blake2b-round.h view
@@ -1,18 +1,19 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2B_ROUND_H__-#define __BLAKE2B_ROUND_H__+#ifndef BLAKE2B_ROUND_H+#define BLAKE2B_ROUND_H  #define LOADU(p)  _mm_loadu_si128( (const __m128i *)(p) ) #define STOREU(p,r) _mm_storeu_si128((__m128i *)(p), r)@@ -59,7 +60,7 @@   \   row2l = _mm_roti_epi64(row2l, -24); \   row2h = _mm_roti_epi64(row2h, -24); \- + #define G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \   row1l = _mm_add_epi64(_mm_add_epi64(row1l, b0), row2l); \   row1h = _mm_add_epi64(_mm_add_epi64(row1h, b1), row2h); \@@ -78,7 +79,7 @@   \   row2l = _mm_roti_epi64(row2l, -63); \   row2h = _mm_roti_epi64(row2h, -63); \- + #if defined(HAVE_SSSE3) #define DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \   t0 = _mm_alignr_epi8(row2h, row2l, 8); \@@ -154,4 +155,3 @@   UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h);  #endif-
cbits/blake2/sse/blake2b.c view
@@ -1,14 +1,16 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */  #include <stdint.h>@@ -47,196 +49,93 @@   0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL }; -static const uint8_t blake2b_sigma[12][16] =-{-  {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 } ,-  { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 } ,-  { 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4 } ,-  {  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8 } ,-  {  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13 } ,-  {  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9 } ,-  { 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11 } ,-  { 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10 } ,-  {  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5 } ,-  { 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13 , 0 } ,-  {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 } ,-  { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 }-};---/* Some helper functions, not necessarily useful */-static inline int blake2b_set_lastnode( blake2b_state *S )+/* Some helper functions */+static void blake2b_set_lastnode( blake2b_state *S ) {-  S->f[1] = -1;-  return 0;+  S->f[1] = (uint64_t)-1; } -static inline int blake2b_clear_lastnode( blake2b_state *S )+static int blake2b_is_lastblock( const blake2b_state *S ) {-  S->f[1] = 0;-  return 0;+  return S->f[0] != 0; } -static inline int blake2b_set_lastblock( blake2b_state *S )+static void blake2b_set_lastblock( blake2b_state *S ) {   if( S->last_node ) blake2b_set_lastnode( S ); -  S->f[0] = -1;-  return 0;-}--static inline int blake2b_clear_lastblock( blake2b_state *S )-{-  if( S->last_node ) blake2b_clear_lastnode( S );--  S->f[0] = 0;-  return 0;+  S->f[0] = (uint64_t)-1; } --static inline int blake2b_increment_counter( blake2b_state *S, const uint64_t inc )+static void blake2b_increment_counter( blake2b_state *S, const uint64_t inc ) {-#if __x86_64__-  // ADD/ADC chain-  __uint128_t t = ( ( __uint128_t )S->t[1] << 64 ) | S->t[0];-  t += inc;-  S->t[0] = ( uint64_t )( t >>  0 );-  S->t[1] = ( uint64_t )( t >> 64 );-#else   S->t[0] += inc;   S->t[1] += ( S->t[0] < inc );-#endif-  return 0; } --// Parameter-related functions-static inline int blake2b_param_set_digest_length( blake2b_param *P, const uint8_t digest_length )-{-  P->digest_length = digest_length;-  return 0;-}--static inline int blake2b_param_set_fanout( blake2b_param *P, const uint8_t fanout )-{-  P->fanout = fanout;-  return 0;-}--static inline int blake2b_param_set_max_depth( blake2b_param *P, const uint8_t depth )-{-  P->depth = depth;-  return 0;-}--static inline int blake2b_param_set_leaf_length( blake2b_param *P, const uint32_t leaf_length )-{-  P->leaf_length = leaf_length;-  return 0;-}--static inline int blake2b_param_set_node_offset( blake2b_param *P, const uint64_t node_offset )-{-  P->node_offset = node_offset;-  return 0;-}--static inline int blake2b_param_set_node_depth( blake2b_param *P, const uint8_t node_depth )-{-  P->node_depth = node_depth;-  return 0;-}--static inline int blake2b_param_set_inner_length( blake2b_param *P, const uint8_t inner_length )-{-  P->inner_length = inner_length;-  return 0;-}--static inline int blake2b_param_set_salt( blake2b_param *P, const uint8_t salt[BLAKE2B_SALTBYTES] )-{-  memcpy( P->salt, salt, BLAKE2B_SALTBYTES );-  return 0;-}--static inline int blake2b_param_set_personal( blake2b_param *P, const uint8_t personal[BLAKE2B_PERSONALBYTES] )-{-  memcpy( P->personal, personal, BLAKE2B_PERSONALBYTES );-  return 0;-}--static inline int blake2b_init0( blake2b_state *S )-{-  memset( S, 0, sizeof( blake2b_state ) );--  for( int i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i];--  return 0;-}- /* init xors IV with input parameter block */-__attribute__((visibility ("hidden"))) int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) {-  //blake2b_init0( S );-  const uint8_t * v = ( const uint8_t * )( blake2b_IV );-  const uint8_t * p = ( const uint8_t * )( P );-  uint8_t * h = ( uint8_t * )( S->h );+  size_t i;+  /*blake2b_init0( S ); */+  const unsigned char * v = ( const unsigned char * )( blake2b_IV );+  const unsigned char * p = ( const unsigned char * )( P );+  unsigned char * h = ( unsigned char * )( S->h );   /* IV XOR ParamBlock */   memset( S, 0, sizeof( blake2b_state ) ); -  for( int i = 0; i < BLAKE2B_OUTBYTES; ++i ) h[i] = v[i] ^ p[i];+  for( i = 0; i < BLAKE2B_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; +  S->outlen = P->digest_length;   return 0; }   /* Some sort of default parameter block initialization, for sequential blake2b */-__attribute__((visibility ("hidden")))-int blake2b_init( blake2b_state *S, const uint8_t outlen )+int blake2b_init( blake2b_state *S, size_t outlen ) {+  blake2b_param P[1];+   if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; -  const blake2b_param P =-  {-    outlen,-    0,-    1,-    1,-    0,-    0,-    0,-    0,-    {0},-    {0},-    {0}-  };-  return blake2b_init_param( S, &P );+  P->digest_length = (uint8_t)outlen;+  P->key_length    = 0;+  P->fanout        = 1;+  P->depth         = 1;+  store32( &P->leaf_length, 0 );+  store32( &P->node_offset, 0 );+  store32( &P->xof_length, 0 );+  P->node_depth    = 0;+  P->inner_length  = 0;+  memset( P->reserved, 0, sizeof( P->reserved ) );+  memset( P->salt,     0, sizeof( P->salt ) );+  memset( P->personal, 0, sizeof( P->personal ) );++  return blake2b_init_param( S, P ); } -__attribute__((visibility ("hidden")))-int blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )+int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ) {+  blake2b_param P[1];+   if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1;    if ( ( !keylen ) || keylen > BLAKE2B_KEYBYTES ) return -1; -  const blake2b_param P =-  {-    outlen,-    keylen,-    1,-    1,-    0,-    0,-    0,-    0,-    {0},-    {0},-    {0}-  };+  P->digest_length = (uint8_t)outlen;+  P->key_length    = (uint8_t)keylen;+  P->fanout        = 1;+  P->depth         = 1;+  store32( &P->leaf_length, 0 );+  store32( &P->node_offset, 0 );+  store32( &P->xof_length, 0 );+  P->node_depth    = 0;+  P->inner_length  = 0;+  memset( P->reserved, 0, sizeof( P->reserved ) );+  memset( P->salt,     0, sizeof( P->salt ) );+  memset( P->personal, 0, sizeof( P->personal ) ); -  if( blake2b_init_param( S, &P ) < 0 )+  if( blake2b_init_param( S, P ) < 0 )     return 0;    {@@ -249,7 +148,7 @@   return 0; } -static inline int blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] )+static void blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] ) {   __m128i row1l, row1h;   __m128i row2l, row2h;@@ -271,22 +170,22 @@   const __m128i m6 = LOADU( block + 96 );   const __m128i m7 = LOADU( block + 112 ); #else-  const uint64_t  m0 = ( ( uint64_t * )block )[ 0];-  const uint64_t  m1 = ( ( uint64_t * )block )[ 1];-  const uint64_t  m2 = ( ( uint64_t * )block )[ 2];-  const uint64_t  m3 = ( ( uint64_t * )block )[ 3];-  const uint64_t  m4 = ( ( uint64_t * )block )[ 4];-  const uint64_t  m5 = ( ( uint64_t * )block )[ 5];-  const uint64_t  m6 = ( ( uint64_t * )block )[ 6];-  const uint64_t  m7 = ( ( uint64_t * )block )[ 7];-  const uint64_t  m8 = ( ( uint64_t * )block )[ 8];-  const uint64_t  m9 = ( ( uint64_t * )block )[ 9];-  const uint64_t m10 = ( ( uint64_t * )block )[10];-  const uint64_t m11 = ( ( uint64_t * )block )[11];-  const uint64_t m12 = ( ( uint64_t * )block )[12];-  const uint64_t m13 = ( ( uint64_t * )block )[13];-  const uint64_t m14 = ( ( uint64_t * )block )[14];-  const uint64_t m15 = ( ( uint64_t * )block )[15];+  const uint64_t  m0 = load64(block +  0 * sizeof(uint64_t));+  const uint64_t  m1 = load64(block +  1 * sizeof(uint64_t));+  const uint64_t  m2 = load64(block +  2 * sizeof(uint64_t));+  const uint64_t  m3 = load64(block +  3 * sizeof(uint64_t));+  const uint64_t  m4 = load64(block +  4 * sizeof(uint64_t));+  const uint64_t  m5 = load64(block +  5 * sizeof(uint64_t));+  const uint64_t  m6 = load64(block +  6 * sizeof(uint64_t));+  const uint64_t  m7 = load64(block +  7 * sizeof(uint64_t));+  const uint64_t  m8 = load64(block +  8 * sizeof(uint64_t));+  const uint64_t  m9 = load64(block +  9 * sizeof(uint64_t));+  const uint64_t m10 = load64(block + 10 * sizeof(uint64_t));+  const uint64_t m11 = load64(block + 11 * sizeof(uint64_t));+  const uint64_t m12 = load64(block + 12 * sizeof(uint64_t));+  const uint64_t m13 = load64(block + 13 * sizeof(uint64_t));+  const uint64_t m14 = load64(block + 14 * sizeof(uint64_t));+  const uint64_t m15 = load64(block + 15 * sizeof(uint64_t)); #endif   row1l = LOADU( &S->h[0] );   row1h = LOADU( &S->h[2] );@@ -316,64 +215,56 @@   row2h = _mm_xor_si128( row4h, row2h );   STOREU( &S->h[4], _mm_xor_si128( LOADU( &S->h[4] ), row2l ) );   STOREU( &S->h[6], _mm_xor_si128( LOADU( &S->h[6] ), row2h ) );-  return 0; } -__attribute__((visibility ("hidden")))-int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen )++int blake2b_update( blake2b_state *S, const void *pin, size_t inlen ) {-  while( inlen > 0 )+  const unsigned char * in = (const unsigned char *)pin;+  if( inlen > 0 )   {     size_t left = S->buflen;-    size_t fill = 2 * BLAKE2B_BLOCKBYTES - left;-+    size_t fill = BLAKE2B_BLOCKBYTES - left;     if( inlen > fill )     {-      memcpy( S->buf + left, in, fill ); // Fill buffer-      S->buflen += fill;+      S->buflen = 0;+      memcpy( S->buf + left, in, fill ); /* Fill buffer */       blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES );-      blake2b_compress( S, S->buf ); // Compress-      memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); // Shift buffer left-      S->buflen -= BLAKE2B_BLOCKBYTES;-      in += fill;-      inlen -= fill;-    }-    else // inlen <= fill-    {-      memcpy( S->buf + left, in, inlen );-      S->buflen += inlen; // Be lazy, do not compress-      in += inlen;-      inlen -= inlen;+      blake2b_compress( S, S->buf ); /* Compress */+      in += fill; inlen -= fill;+      while(inlen > BLAKE2B_BLOCKBYTES) {+        blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES);+        blake2b_compress( S, in );+        in += BLAKE2B_BLOCKBYTES;+        inlen -= BLAKE2B_BLOCKBYTES;+      }     }+    memcpy( S->buf + S->buflen, in, inlen );+    S->buflen += inlen;   }-   return 0; } -__attribute__((visibility ("hidden")))-int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen )++int blake2b_final( blake2b_state *S, void *out, size_t outlen ) {-  if( outlen > BLAKE2B_OUTBYTES )+  if( out == NULL || outlen < S->outlen )     return -1; -  if( S->buflen > BLAKE2B_BLOCKBYTES )-  {-    blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES );-    blake2b_compress( S, S->buf );-    S->buflen -= BLAKE2B_BLOCKBYTES;-    memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen );-  }+  if( blake2b_is_lastblock( S ) )+    return -1;    blake2b_increment_counter( S, S->buflen );   blake2b_set_lastblock( S );-  memset( S->buf + S->buflen, 0, 2 * BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */+  memset( S->buf + S->buflen, 0, BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */   blake2b_compress( S, S->buf );-  memcpy( out, &S->h[0], outlen );++  memcpy( out, &S->h[0], S->outlen );   return 0; } -__attribute__((visibility ("hidden")))-int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )++int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {   blake2b_state S[1]; @@ -401,3 +292,82 @@   blake2b_final( S, out, outlen );   return 0; }++int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {+  return blake2b(out, outlen, in, inlen, key, keylen);+}++#if defined(SUPERCOP)+int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen )+{+  return blake2b( out, BLAKE2B_OUTBYTES, in, inlen, NULL, 0 );+}+#endif++#if defined(BLAKE2B_SELFTEST)+#include <string.h>+#include "blake2-kat.h"+int main( void )+{+  uint8_t key[BLAKE2B_KEYBYTES];+  uint8_t buf[BLAKE2_KAT_LENGTH];+  size_t i, step;++  for( i = 0; i < BLAKE2B_KEYBYTES; ++i )+    key[i] = ( uint8_t )i;++  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )+    buf[i] = ( uint8_t )i;++  /* Test simple API */+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )+  {+    uint8_t hash[BLAKE2B_OUTBYTES];+    blake2b( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES );++    if( 0 != memcmp( hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES ) )+    {+      goto fail;+    }+  }++  /* Test streaming API */+  for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) {+    for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {+      uint8_t hash[BLAKE2B_OUTBYTES];+      blake2b_state S;+      uint8_t * p = buf;+      size_t mlen = i;+      int err = 0;++      if( (err = blake2b_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) {+        goto fail;+      }++      while (mlen >= step) {+        if ( (err = blake2b_update(&S, p, step)) < 0 ) {+          goto fail;+        }+        mlen -= step;+        p += step;+      }+      if ( (err = blake2b_update(&S, p, mlen)) < 0) {+        goto fail;+      }+      if ( (err = blake2b_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) {+        goto fail;+      }++      if (0 != memcmp(hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES)) {+        goto fail;+      }+    }+  }++  puts( "ok" );+  return 0;+fail:+  puts("error");+  return -1;+}+#endif
cbits/blake2/sse/blake2bp.c view
@@ -1,14 +1,16 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */  #include <stdio.h>@@ -25,32 +27,48 @@  #define PARALLELISM_DEGREE 4 -static inline int blake2bp_init_leaf( blake2b_state *S, uint8_t outlen, uint8_t keylen, uint64_t offset )+/*+  blake2b_init_param defaults to setting the expecting output length+  from the digest_length parameter block field.++  In some cases, however, we do not want this, as the output length+  of these instances is given by inner_length instead.+*/+static int blake2bp_init_leaf_param( blake2b_state *S, const blake2b_param *P ) {+  int err = blake2b_init_param(S, P);+  S->outlen = P->inner_length;+  return err;+}++static int blake2bp_init_leaf( blake2b_state *S, size_t outlen, size_t keylen, uint64_t offset )+{   blake2b_param P[1];-  P->digest_length = outlen;-  P->key_length = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length = (uint8_t)keylen;   P->fanout = PARALLELISM_DEGREE;   P->depth = 2;   P->leaf_length = 0;   P->node_offset = offset;+  P->xof_length = 0;   P->node_depth = 0;   P->inner_length = BLAKE2B_OUTBYTES;   memset( P->reserved, 0, sizeof( P->reserved ) );   memset( P->salt, 0, sizeof( P->salt ) );   memset( P->personal, 0, sizeof( P->personal ) );-  return blake2b_init_param( S, P );+  return blake2bp_init_leaf_param( S, P ); } -static inline int blake2bp_init_root( blake2b_state *S, uint8_t outlen, uint8_t keylen )+static int blake2bp_init_root( blake2b_state *S, size_t outlen, size_t keylen ) {   blake2b_param P[1];-  P->digest_length = outlen;-  P->key_length = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length = (uint8_t)keylen;   P->fanout = PARALLELISM_DEGREE;   P->depth = 2;   P->leaf_length = 0;   P->node_offset = 0;+  P->xof_length = 0;   P->node_depth = 1;   P->inner_length = BLAKE2B_OUTBYTES;   memset( P->reserved, 0, sizeof( P->reserved ) );@@ -59,18 +77,20 @@   return blake2b_init_param( S, P ); } -__attribute__((visibility ("hidden")))-int blake2bp_init( blake2bp_state *S, const uint8_t outlen )++int blake2bp_init( blake2bp_state *S, size_t outlen ) {+  size_t i;   if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1;    memset( S->buf, 0, sizeof( S->buf ) );   S->buflen = 0;+  S->outlen = outlen;    if( blake2bp_init_root( S->R, outlen, 0 ) < 0 )     return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2bp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1;    S->R->last_node = 1;@@ -78,20 +98,22 @@   return 0; } -__attribute__((visibility ("hidden")))-int blake2bp_init_key( blake2bp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )+int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen ) {+  size_t i;+   if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1;    if( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1;    memset( S->buf, 0, sizeof( S->buf ) );   S->buflen = 0;+  S->outlen = outlen;    if( blake2bp_init_root( S->R, outlen, keylen ) < 0 )     return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2bp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1;    S->R->last_node = 1;@@ -101,7 +123,7 @@     memset( block, 0, BLAKE2B_BLOCKBYTES );     memcpy( block, key, keylen ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2b_update( S->S[i], block, BLAKE2B_BLOCKBYTES );      secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */@@ -109,17 +131,19 @@   return 0; } -__attribute__((visibility ("hidden")))-int blake2bp_update( blake2bp_state *S, const uint8_t *in, uint64_t inlen )++int blake2bp_update( blake2bp_state *S, const void *pin, size_t inlen ) {+  const unsigned char * in = (const unsigned char *)pin;   size_t left = S->buflen;   size_t fill = sizeof( S->buf ) - left;+  size_t i;    if( left && inlen >= fill )   {     memcpy( S->buf + left, in, fill ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2b_update( S->S[i], S->buf + i * BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES );      in += fill;@@ -131,19 +155,19 @@   #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else -  for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ )+  for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif   { #if defined(_OPENMP)-    size_t      id__ = omp_get_thread_num();+    size_t      i = omp_get_thread_num(); #endif-    uint64_t inlen__ = inlen;-    const uint8_t *in__ = ( const uint8_t * )in;-    in__ += id__ * BLAKE2B_BLOCKBYTES;+    size_t inlen__ = inlen;+    const unsigned char *in__ = ( const unsigned char * )in;+    in__ += i * BLAKE2B_BLOCKBYTES;      while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES )     {-      blake2b_update( S->S[id__], in__, BLAKE2B_BLOCKBYTES );+      blake2b_update( S->S[i], in__, BLAKE2B_BLOCKBYTES );       in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES;       inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES;     }@@ -160,12 +184,17 @@ }  -__attribute__((visibility ("hidden")))-int blake2bp_final( blake2bp_state *S, uint8_t *out, const uint8_t outlen )++int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ) {   uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES];+  size_t i; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  if(out == NULL || outlen < S->outlen) {+    return -1;+  }++  for( i = 0; i < PARALLELISM_DEGREE; ++i )   {     if( S->buflen > i * BLAKE2B_BLOCKBYTES )     {@@ -179,18 +208,18 @@     blake2b_final( S->S[i], hash[i], BLAKE2B_OUTBYTES );   } -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     blake2b_update( S->R, hash[i], BLAKE2B_OUTBYTES ); -  return blake2b_final( S->R, out, outlen );+  return blake2b_final( S->R, out, S->outlen ); } -__attribute__((visibility ("hidden")))-int blake2bp( uint8_t *out, const void *in, const void *key, uint8_t outlen, uint64_t inlen, uint8_t keylen )+int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {   uint8_t hash[PARALLELISM_DEGREE][BLAKE2B_OUTBYTES];   blake2b_state S[PARALLELISM_DEGREE][1];   blake2b_state FS[1];+  size_t i;    /* Verify parameters */   if ( NULL == in && inlen > 0 ) return -1;@@ -203,10 +232,10 @@    if( keylen > BLAKE2B_KEYBYTES ) return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2bp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; -  S[PARALLELISM_DEGREE - 1]->last_node = 1; // mark last node+  S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */    if( keylen > 0 )   {@@ -214,7 +243,7 @@     memset( block, 0, BLAKE2B_BLOCKBYTES );     memcpy( block, key, keylen ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2b_update( S[i], block, BLAKE2B_BLOCKBYTES );      secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */@@ -224,40 +253,109 @@   #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else -  for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ )+  for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif   { #if defined(_OPENMP)-    size_t      id__ = omp_get_thread_num();+    size_t      i = omp_get_thread_num(); #endif-    uint64_t inlen__ = inlen;-    const uint8_t *in__ = ( const uint8_t * )in;-    in__ += id__ * BLAKE2B_BLOCKBYTES;+    size_t inlen__ = inlen;+    const unsigned char *in__ = ( const unsigned char * )in;+    in__ += i * BLAKE2B_BLOCKBYTES;      while( inlen__ >= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES )     {-      blake2b_update( S[id__], in__, BLAKE2B_BLOCKBYTES );+      blake2b_update( S[i], in__, BLAKE2B_BLOCKBYTES );       in__ += PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES;       inlen__ -= PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES;     } -    if( inlen__ > id__ * BLAKE2B_BLOCKBYTES )+    if( inlen__ > i * BLAKE2B_BLOCKBYTES )     {-      const size_t left = inlen__ - id__ * BLAKE2B_BLOCKBYTES;+      const size_t left = inlen__ - i * BLAKE2B_BLOCKBYTES;       const size_t len = left <= BLAKE2B_BLOCKBYTES ? left : BLAKE2B_BLOCKBYTES;-      blake2b_update( S[id__], in__, len );+      blake2b_update( S[i], in__, len );     } -    blake2b_final( S[id__], hash[id__], BLAKE2B_OUTBYTES );+    blake2b_final( S[i], hash[i], BLAKE2B_OUTBYTES );   }    if( blake2bp_init_root( FS, outlen, keylen ) < 0 )     return -1; -  FS->last_node = 1; // Mark as last node+  FS->last_node = 1; /* Mark as last node */ -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     blake2b_update( FS, hash[i], BLAKE2B_OUTBYTES );    return blake2b_final( FS, out, outlen ); }+++#if defined(BLAKE2BP_SELFTEST)+#include <string.h>+#include "blake2-kat.h"+int main( void )+{+  uint8_t key[BLAKE2B_KEYBYTES];+  uint8_t buf[BLAKE2_KAT_LENGTH];+  size_t i, step;++  for( i = 0; i < BLAKE2B_KEYBYTES; ++i )+    key[i] = ( uint8_t )i;++  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )+    buf[i] = ( uint8_t )i;++  /* Test simple API */+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )+  {+    uint8_t hash[BLAKE2B_OUTBYTES];+    blake2bp( hash, BLAKE2B_OUTBYTES, buf, i, key, BLAKE2B_KEYBYTES );++    if( 0 != memcmp( hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES ) )+    {+      goto fail;+    }+  }++  /* Test streaming API */+  for(step = 1; step < BLAKE2B_BLOCKBYTES; ++step) {+    for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {+      uint8_t hash[BLAKE2B_OUTBYTES];+      blake2bp_state S;+      uint8_t * p = buf;+      size_t mlen = i;+      int err = 0;++      if( (err = blake2bp_init_key(&S, BLAKE2B_OUTBYTES, key, BLAKE2B_KEYBYTES)) < 0 ) {+        goto fail;+      }++      while (mlen >= step) {+        if ( (err = blake2bp_update(&S, p, step)) < 0 ) {+          goto fail;+        }+        mlen -= step;+        p += step;+      }+      if ( (err = blake2bp_update(&S, p, mlen)) < 0) {+        goto fail;+      }+      if ( (err = blake2bp_final(&S, hash, BLAKE2B_OUTBYTES)) < 0) {+        goto fail;+      }++      if (0 != memcmp(hash, blake2bp_keyed_kat[i], BLAKE2B_OUTBYTES)) {+        goto fail;+      }+    }+  }++  puts( "ok" );+  return 0;+fail:+  puts("error");+  return -1;+}+#endif
cbits/blake2/sse/blake2s-load-sse2.h view
@@ -1,18 +1,19 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2S_LOAD_SSE2_H__-#define __BLAKE2S_LOAD_SSE2_H__+#ifndef BLAKE2S_LOAD_SSE2_H+#define BLAKE2S_LOAD_SSE2_H  #define LOAD_MSG_0_1(buf) buf = _mm_set_epi32(m6,m4,m2,m0) #define LOAD_MSG_0_2(buf) buf = _mm_set_epi32(m7,m5,m3,m1)
cbits/blake2/sse/blake2s-load-sse41.h view
@@ -1,18 +1,19 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2S_LOAD_SSE41_H__-#define __BLAKE2S_LOAD_SSE41_H__+#ifndef BLAKE2S_LOAD_SSE41_H+#define BLAKE2S_LOAD_SSE41_H  #define LOAD_MSG_0_1(buf) \ buf = TOI(_mm_shuffle_ps(TOF(m0), TOF(m1), _MM_SHUFFLE(2,0,2,0)));@@ -226,4 +227,3 @@ buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(0,1,2,3));  #endif-
cbits/blake2/sse/blake2s-load-xop.h view
@@ -1,31 +1,34 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2S_LOAD_XOP_H__-#define __BLAKE2S_LOAD_XOP_H__+#ifndef BLAKE2S_LOAD_XOP_H+#define BLAKE2S_LOAD_XOP_H -#define TOB(x) ((x)*4*0x01010101 + 0x03020100) // ..or not TOB+#define TOB(x) ((x)*4*0x01010101 + 0x03020100) /* ..or not TOB */ +#if 0 /* Basic VPPERM emulation, for testing purposes */-/*static __m128i _mm_perm_epi8(const __m128i src1, const __m128i src2, const __m128i sel)+static __m128i _mm_perm_epi8(const __m128i src1, const __m128i src2, const __m128i sel) {    const __m128i sixteen = _mm_set1_epi8(16);    const __m128i t0 = _mm_shuffle_epi8(src1, sel);    const __m128i s1 = _mm_shuffle_epi8(src2, _mm_sub_epi8(sel, sixteen));    const __m128i mask = _mm_or_si128(_mm_cmpeq_epi8(sel, sixteen),-                                     _mm_cmpgt_epi8(sel, sixteen)); // (>=16) = 0xff : 00+                                     _mm_cmpgt_epi8(sel, sixteen)); /* (>=16) = 0xff : 00 */    return _mm_blendv_epi8(t0, s1, mask);-}*/+}+#endif  #define LOAD_MSG_0_1(buf) \ buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(6),TOB(4),TOB(2),TOB(0)) );@@ -166,7 +169,7 @@ #define LOAD_MSG_8_3(buf) \ t0 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(6),TOB(1),TOB(0),TOB(0)) ); \ buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(5),TOB(4)) ); \- + #define LOAD_MSG_8_4(buf) \ buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(5),TOB(4),TOB(7),TOB(2)) ); @@ -186,4 +189,3 @@ buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(4),TOB(6),TOB(0)) );  #endif-
cbits/blake2/sse/blake2s-round.h view
@@ -1,18 +1,19 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */-#pragma once-#ifndef __BLAKE2S_ROUND_H__-#define __BLAKE2S_ROUND_H__+#ifndef BLAKE2S_ROUND_H+#define BLAKE2S_ROUND_H  #define LOADU(p)  _mm_loadu_si128( (const __m128i *)(p) ) #define STOREU(p,r) _mm_storeu_si128((__m128i *)(p), r)@@ -83,6 +84,5 @@   LOAD_MSG_ ##r ##_4(buf4); \   G2(row1,row2,row3,row4,buf4); \   UNDIAGONALIZE(row1,row2,row3,row4); \- -#endif +#endif
cbits/blake2/sse/blake2s.c view
@@ -1,14 +1,16 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */  #include <stdint.h>@@ -43,187 +45,98 @@   0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL }; -static const uint8_t blake2s_sigma[10][16] =-{-  {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 } ,-  { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 } ,-  { 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4 } ,-  {  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8 } ,-  {  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13 } ,-  {  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9 } ,-  { 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11 } ,-  { 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10 } ,-  {  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5 } ,-  { 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13 , 0 } ,-};---/* Some helper functions, not necessarily useful */-static inline int blake2s_set_lastnode( blake2s_state *S )+/* Some helper functions */+static void blake2s_set_lastnode( blake2s_state *S ) {-  S->f[1] = -1;-  return 0;+  S->f[1] = (uint32_t)-1; } -static inline int blake2s_clear_lastnode( blake2s_state *S )+static int blake2s_is_lastblock( const blake2s_state *S ) {-  S->f[1] = 0;-  return 0;+  return S->f[0] != 0; } -static inline int blake2s_set_lastblock( blake2s_state *S )+static void blake2s_set_lastblock( blake2s_state *S ) {   if( S->last_node ) blake2s_set_lastnode( S ); -  S->f[0] = -1;-  return 0;-}--static inline int blake2s_clear_lastblock( blake2s_state *S )-{-  if( S->last_node ) blake2s_clear_lastnode( S );--  S->f[0] = 0;-  return 0;+  S->f[0] = (uint32_t)-1; } -static inline int blake2s_increment_counter( blake2s_state *S, const uint32_t inc )+static void blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) {   uint64_t t = ( ( uint64_t )S->t[1] << 32 ) | S->t[0];   t += inc;   S->t[0] = ( uint32_t )( t >>  0 );   S->t[1] = ( uint32_t )( t >> 32 );-  return 0; } --// Parameter-related functions-static inline int blake2s_param_set_digest_length( blake2s_param *P, const uint8_t digest_length )-{-  P->digest_length = digest_length;-  return 0;-}--static inline int blake2s_param_set_fanout( blake2s_param *P, const uint8_t fanout )-{-  P->fanout = fanout;-  return 0;-}--static inline int blake2s_param_set_max_depth( blake2s_param *P, const uint8_t depth )-{-  P->depth = depth;-  return 0;-}--static inline int blake2s_param_set_leaf_length( blake2s_param *P, const uint32_t leaf_length )-{-  P->leaf_length = leaf_length;-  return 0;-}--static inline int blake2s_param_set_node_offset( blake2s_param *P, const uint64_t node_offset )-{-  store48( P->node_offset, node_offset );-  return 0;-}--static inline int blake2s_param_set_node_depth( blake2s_param *P, const uint8_t node_depth )-{-  P->node_depth = node_depth;-  return 0;-}--static inline int blake2s_param_set_inner_length( blake2s_param *P, const uint8_t inner_length )-{-  P->inner_length = inner_length;-  return 0;-}--static inline int blake2s_param_set_salt( blake2s_param *P, const uint8_t salt[BLAKE2S_SALTBYTES] )-{-  memcpy( P->salt, salt, BLAKE2S_SALTBYTES );-  return 0;-}--static inline int blake2s_param_set_personal( blake2s_param *P, const uint8_t personal[BLAKE2S_PERSONALBYTES] )-{-  memcpy( P->personal, personal, BLAKE2S_PERSONALBYTES );-  return 0;-}--static inline int blake2s_init0( blake2s_state *S )-{-  memset( S, 0, sizeof( blake2s_state ) );--  for( int i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i];--  return 0;-}- /* init2 xors IV with input parameter block */-__attribute__((visibility ("hidden"))) int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) {-  //blake2s_init0( S );+  size_t i;+  /*blake2s_init0( S ); */   const uint8_t * v = ( const uint8_t * )( blake2s_IV );   const uint8_t * p = ( const uint8_t * )( P );   uint8_t * h = ( uint8_t * )( S->h );   /* IV XOR ParamBlock */   memset( S, 0, sizeof( blake2s_state ) ); -  for( int i = 0; i < BLAKE2S_OUTBYTES; ++i ) h[i] = v[i] ^ p[i];+  for( i = 0; i < BLAKE2S_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; +  S->outlen = P->digest_length;   return 0; }   /* Some sort of default parameter block initialization, for sequential blake2s */-__attribute__((visibility ("hidden")))-int blake2s_init( blake2s_state *S, const uint8_t outlen )+int blake2s_init( blake2s_state *S, size_t outlen ) {+  blake2s_param P[1];+   /* Move interval verification here? */   if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; -  const blake2s_param P =-  {-    outlen,-    0,-    1,-    1,-    0,-    {0},-    0,-    0,-    {0},-    {0}-  };-  return blake2s_init_param( S, &P );+  P->digest_length = (uint8_t)outlen;+  P->key_length    = 0;+  P->fanout        = 1;+  P->depth         = 1;+  store32( &P->leaf_length, 0 );+  store32( &P->node_offset, 0 );+  store16( &P->xof_length, 0 );+  P->node_depth    = 0;+  P->inner_length  = 0;+  /* memset(P->reserved, 0, sizeof(P->reserved) ); */+  memset( P->salt,     0, sizeof( P->salt ) );+  memset( P->personal, 0, sizeof( P->personal ) );++  return blake2s_init_param( S, P ); } -__attribute__((visibility ("hidden")))-int blake2s_init_key( blake2s_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )++int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ) {+  blake2s_param P[1];+   /* Move interval verification here? */   if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1;    if ( ( !key ) || ( !keylen ) || keylen > BLAKE2S_KEYBYTES ) return -1; -  const blake2s_param P =-  {-    outlen,-    keylen,-    1,-    1,-    0,-    {0},-    0,-    0,-    {0},-    {0}-  };+  P->digest_length = (uint8_t)outlen;+  P->key_length    = (uint8_t)keylen;+  P->fanout        = 1;+  P->depth         = 1;+  store32( &P->leaf_length, 0 );+  store32( &P->node_offset, 0 );+  store16( &P->xof_length, 0 );+  P->node_depth    = 0;+  P->inner_length  = 0;+  /* memset(P->reserved, 0, sizeof(P->reserved) ); */+  memset( P->salt,     0, sizeof( P->salt ) );+  memset( P->personal, 0, sizeof( P->personal ) ); -  if( blake2s_init_param( S, &P ) < 0 )+  if( blake2s_init_param( S, P ) < 0 )     return -1;    {@@ -237,7 +150,7 @@ }  -static inline int blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCKBYTES] )+static void blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCKBYTES] ) {   __m128i row1, row2, row3, row4;   __m128i buf1, buf2, buf3, buf4;@@ -258,27 +171,27 @@   const __m128i m2 = LOADU( block +  32 );   const __m128i m3 = LOADU( block +  48 ); #else-  const uint32_t  m0 = ( ( uint32_t * )block )[ 0];-  const uint32_t  m1 = ( ( uint32_t * )block )[ 1];-  const uint32_t  m2 = ( ( uint32_t * )block )[ 2];-  const uint32_t  m3 = ( ( uint32_t * )block )[ 3];-  const uint32_t  m4 = ( ( uint32_t * )block )[ 4];-  const uint32_t  m5 = ( ( uint32_t * )block )[ 5];-  const uint32_t  m6 = ( ( uint32_t * )block )[ 6];-  const uint32_t  m7 = ( ( uint32_t * )block )[ 7];-  const uint32_t  m8 = ( ( uint32_t * )block )[ 8];-  const uint32_t  m9 = ( ( uint32_t * )block )[ 9];-  const uint32_t m10 = ( ( uint32_t * )block )[10];-  const uint32_t m11 = ( ( uint32_t * )block )[11];-  const uint32_t m12 = ( ( uint32_t * )block )[12];-  const uint32_t m13 = ( ( uint32_t * )block )[13];-  const uint32_t m14 = ( ( uint32_t * )block )[14];-  const uint32_t m15 = ( ( uint32_t * )block )[15];+  const uint32_t  m0 = load32(block +  0 * sizeof(uint32_t));+  const uint32_t  m1 = load32(block +  1 * sizeof(uint32_t));+  const uint32_t  m2 = load32(block +  2 * sizeof(uint32_t));+  const uint32_t  m3 = load32(block +  3 * sizeof(uint32_t));+  const uint32_t  m4 = load32(block +  4 * sizeof(uint32_t));+  const uint32_t  m5 = load32(block +  5 * sizeof(uint32_t));+  const uint32_t  m6 = load32(block +  6 * sizeof(uint32_t));+  const uint32_t  m7 = load32(block +  7 * sizeof(uint32_t));+  const uint32_t  m8 = load32(block +  8 * sizeof(uint32_t));+  const uint32_t  m9 = load32(block +  9 * sizeof(uint32_t));+  const uint32_t m10 = load32(block + 10 * sizeof(uint32_t));+  const uint32_t m11 = load32(block + 11 * sizeof(uint32_t));+  const uint32_t m12 = load32(block + 12 * sizeof(uint32_t));+  const uint32_t m13 = load32(block + 13 * sizeof(uint32_t));+  const uint32_t m14 = load32(block + 14 * sizeof(uint32_t));+  const uint32_t m15 = load32(block + 15 * sizeof(uint32_t)); #endif   row1 = ff0 = LOADU( &S->h[0] );   row2 = ff1 = LOADU( &S->h[4] );-  row3 = _mm_setr_epi32( 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A );-  row4 = _mm_xor_si128( _mm_setr_epi32( 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 ), LOADU( &S->t[0] ) );+  row3 = _mm_loadu_si128( (__m128i const *)&blake2s_IV[0] );+  row4 = _mm_xor_si128( _mm_loadu_si128( (__m128i const *)&blake2s_IV[4] ), LOADU( &S->t[0] ) );   ROUND( 0 );   ROUND( 1 );   ROUND( 2 );@@ -291,73 +204,61 @@   ROUND( 9 );   STOREU( &S->h[0], _mm_xor_si128( ff0, _mm_xor_si128( row1, row3 ) ) );   STOREU( &S->h[4], _mm_xor_si128( ff1, _mm_xor_si128( row2, row4 ) ) );-  return 0; } -/* inlen now in bytes */-__attribute__((visibility ("hidden")))-int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen )+int blake2s_update( blake2s_state *S, const void *pin, size_t inlen ) {-  while( inlen > 0 )+  const unsigned char * in = (const unsigned char *)pin;+  if( inlen > 0 )   {     size_t left = S->buflen;-    size_t fill = 2 * BLAKE2S_BLOCKBYTES - left;-+    size_t fill = BLAKE2S_BLOCKBYTES - left;     if( inlen > fill )     {-      memcpy( S->buf + left, in, fill ); // Fill buffer-      S->buflen += fill;+      S->buflen = 0;+      memcpy( S->buf + left, in, fill ); /* Fill buffer */       blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES );-      blake2s_compress( S, S->buf ); // Compress-      memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); // Shift buffer left-      S->buflen -= BLAKE2S_BLOCKBYTES;-      in += fill;-      inlen -= fill;-    }-    else // inlen <= fill-    {-      memcpy( S->buf + left, in, inlen );-      S->buflen += inlen; // Be lazy, do not compress-      in += inlen;-      inlen -= inlen;+      blake2s_compress( S, S->buf ); /* Compress */+      in += fill; inlen -= fill;+      while(inlen > BLAKE2S_BLOCKBYTES) {+        blake2s_increment_counter(S, BLAKE2S_BLOCKBYTES);+        blake2s_compress( S, in );+        in += BLAKE2S_BLOCKBYTES;+        inlen -= BLAKE2S_BLOCKBYTES;+      }     }+    memcpy( S->buf + S->buflen, in, inlen );+    S->buflen += inlen;   }-   return 0; } -/* Is this correct? */-__attribute__((visibility ("hidden")))-int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen )+int blake2s_final( blake2s_state *S, void *out, size_t outlen ) {   uint8_t buffer[BLAKE2S_OUTBYTES] = {0};+  size_t i; -  if( outlen > BLAKE2S_OUTBYTES )+  if( out == NULL || outlen < S->outlen )     return -1; -  if( S->buflen > BLAKE2S_BLOCKBYTES )-  {-    blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES );-    blake2s_compress( S, S->buf );-    S->buflen -= BLAKE2S_BLOCKBYTES;-    memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, S->buflen );-  }+  if( blake2s_is_lastblock( S ) )+    return -1; -  blake2s_increment_counter( S, ( uint32_t )S->buflen );+  blake2s_increment_counter( S, (uint32_t)S->buflen );   blake2s_set_lastblock( S );-  memset( S->buf + S->buflen, 0, 2 * BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */+  memset( S->buf + S->buflen, 0, BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */   blake2s_compress( S, S->buf ); -  for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */+  for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */     store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); -  memcpy( out, buffer, outlen );+  memcpy( out, buffer, S->outlen );+  secure_zero_memory( buffer, sizeof(buffer) );   return 0; }  /* inlen, at least, should be uint64_t. Others can be size_t. */-__attribute__((visibility ("hidden")))-int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )+int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {   blake2s_state S[1]; @@ -385,3 +286,78 @@   blake2s_final( S, out, outlen );   return 0; }++#if defined(SUPERCOP)+int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen )+{+  return blake2s( out, BLAKE2S_OUTBYTES, in, inlen, NULL, 0 );+}+#endif++#if defined(BLAKE2S_SELFTEST)+#include <string.h>+#include "blake2-kat.h"+int main( void )+{+  uint8_t key[BLAKE2S_KEYBYTES];+  uint8_t buf[BLAKE2_KAT_LENGTH];+  size_t i, step;++  for( i = 0; i < BLAKE2S_KEYBYTES; ++i )+    key[i] = ( uint8_t )i;++  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )+    buf[i] = ( uint8_t )i;++  /* Test simple API */+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )+  {+    uint8_t hash[BLAKE2S_OUTBYTES];+    blake2s( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES );++    if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) )+    {+      goto fail;+    }+  }++  /* Test streaming API */+  for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) {+    for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {+      uint8_t hash[BLAKE2S_OUTBYTES];+      blake2s_state S;+      uint8_t * p = buf;+      size_t mlen = i;+      int err = 0;++      if( (err = blake2s_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) {+        goto fail;+      }++      while (mlen >= step) {+        if ( (err = blake2s_update(&S, p, step)) < 0 ) {+          goto fail;+        }+        mlen -= step;+        p += step;+      }+      if ( (err = blake2s_update(&S, p, mlen)) < 0) {+        goto fail;+      }+      if ( (err = blake2s_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) {+        goto fail;+      }++      if (0 != memcmp(hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES)) {+        goto fail;+      }+    }+  }++  puts( "ok" );+  return 0;+fail:+  puts("error");+  return -1;+}+#endif
cbits/blake2/sse/blake2sp.c view
@@ -1,14 +1,16 @@ /*    BLAKE2 reference source code package - optimized C implementations -   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>+   Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under the+   terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at+   your option.  The terms of these licenses can be found at: -   To the extent possible under law, the author(s) have dedicated all copyright-   and related and neighboring rights to this software to the public domain-   worldwide. This software is distributed without any warranty.+   - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0+   - OpenSSL license   : https://www.openssl.org/source/license.html+   - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0 -   You should have received a copy of the CC0 Public Domain Dedication along with-   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.+   More information about the BLAKE2 hash function can be found at+   https://blake2.net. */  #include <stdlib.h>@@ -24,31 +26,47 @@  #define PARALLELISM_DEGREE 8 -static inline int blake2sp_init_leaf( blake2s_state *S, uint8_t outlen, uint8_t keylen, uint64_t offset )+/*+  blake2sp_init_param defaults to setting the expecting output length+  from the digest_length parameter block field.++  In some cases, however, we do not want this, as the output length+  of these instances is given by inner_length instead.+*/+static int blake2sp_init_leaf_param( blake2s_state *S, const blake2s_param *P ) {+  int err = blake2s_init_param(S, P);+  S->outlen = P->inner_length;+  return err;+}++static int blake2sp_init_leaf( blake2s_state *S, size_t outlen, size_t keylen, uint64_t offset )+{   blake2s_param P[1];-  P->digest_length = outlen;-  P->key_length = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length = (uint8_t)keylen;   P->fanout = PARALLELISM_DEGREE;   P->depth = 2;   P->leaf_length = 0;-  store48( P->node_offset, offset );+  P->node_offset = offset;+  P->xof_length = 0;   P->node_depth = 0;   P->inner_length = BLAKE2S_OUTBYTES;   memset( P->salt, 0, sizeof( P->salt ) );   memset( P->personal, 0, sizeof( P->personal ) );-  return blake2s_init_param( S, P );+  return blake2sp_init_leaf_param( S, P ); } -static inline int blake2sp_init_root( blake2s_state *S, uint8_t outlen, uint8_t keylen )+static int blake2sp_init_root( blake2s_state *S, size_t outlen, size_t keylen ) {   blake2s_param P[1];-  P->digest_length = outlen;-  P->key_length = keylen;+  P->digest_length = (uint8_t)outlen;+  P->key_length = (uint8_t)keylen;   P->fanout = PARALLELISM_DEGREE;   P->depth = 2;   P->leaf_length = 0;-  store48( P->node_offset, 0ULL );+  P->node_offset = 0;+  P->xof_length = 0;   P->node_depth = 1;   P->inner_length = BLAKE2S_OUTBYTES;   memset( P->salt, 0, sizeof( P->salt ) );@@ -56,18 +74,21 @@   return blake2s_init_param( S, P ); } -__attribute__((visibility ("hidden")))-int blake2sp_init( blake2sp_state *S, const uint8_t outlen )++int blake2sp_init( blake2sp_state *S, size_t outlen ) {+  size_t i;+   if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1;    memset( S->buf, 0, sizeof( S->buf ) );   S->buflen = 0;+  S->outlen = outlen;    if( blake2sp_init_root( S->R, outlen, 0 ) < 0 )     return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2sp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1;    S->R->last_node = 1;@@ -75,20 +96,22 @@   return 0; } -__attribute__((visibility ("hidden")))-int blake2sp_init_key( blake2sp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )+int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ) {+  size_t i;+   if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1;    if( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1;    memset( S->buf, 0, sizeof( S->buf ) );   S->buflen = 0;+  S->outlen = outlen;    if( blake2sp_init_root( S->R, outlen, keylen ) < 0 )     return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2sp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1;    S->R->last_node = 1;@@ -98,7 +121,7 @@     memset( block, 0, BLAKE2S_BLOCKBYTES );     memcpy( block, key, keylen ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2s_update( S->S[i], block, BLAKE2S_BLOCKBYTES );      secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */@@ -106,17 +129,19 @@   return 0; } -__attribute__((visibility ("hidden")))-int blake2sp_update( blake2sp_state *S, const uint8_t *in, uint64_t inlen )++int blake2sp_update( blake2sp_state *S, const void *pin, size_t inlen ) {+  const unsigned char * in = (const unsigned char *)pin;   size_t left = S->buflen;   size_t fill = sizeof( S->buf ) - left;+  size_t i;    if( left && inlen >= fill )   {     memcpy( S->buf + left, in, fill ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES );      in += fill;@@ -128,19 +153,19 @@   #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) #else -  for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ )+  for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif   { #if defined(_OPENMP)-    size_t      id__ = omp_get_thread_num();+    size_t      i = omp_get_thread_num(); #endif-    uint64_t inlen__ = inlen;-    const uint8_t *in__ = ( const uint8_t * )in;-    in__ += id__ * BLAKE2S_BLOCKBYTES;+    size_t inlen__ = inlen;+    const unsigned char *in__ = ( const unsigned char * )in;+    in__ += i * BLAKE2S_BLOCKBYTES;      while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES )     {-      blake2s_update( S->S[id__], in__, BLAKE2S_BLOCKBYTES );+      blake2s_update( S->S[i], in__, BLAKE2S_BLOCKBYTES );       in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;       inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;     }@@ -156,12 +181,17 @@   return 0; } -__attribute__((visibility ("hidden")))-int blake2sp_final( blake2sp_state *S, uint8_t *out, const uint8_t outlen )++int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ) {   uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES];+  size_t i; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  if(out == NULL || outlen < S->outlen) {+    return -1;+  }++  for( i = 0; i < PARALLELISM_DEGREE; ++i )   {     if( S->buflen > i * BLAKE2S_BLOCKBYTES )     {@@ -175,18 +205,19 @@     blake2s_final( S->S[i], hash[i], BLAKE2S_OUTBYTES );   } -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     blake2s_update( S->R, hash[i], BLAKE2S_OUTBYTES ); -  return blake2s_final( S->R, out, outlen );+  return blake2s_final( S->R, out, S->outlen ); } -__attribute__((visibility ("hidden")))-int blake2sp( uint8_t *out, const void *in, const void *key, uint8_t outlen, uint64_t inlen, uint8_t keylen )++int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) {   uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES];   blake2s_state S[PARALLELISM_DEGREE][1];   blake2s_state FS[1];+  size_t i;    /* Verify parameters */   if ( NULL == in && inlen > 0 ) return -1;@@ -199,10 +230,10 @@    if( keylen > BLAKE2S_KEYBYTES ) return -1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     if( blake2sp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; -  S[PARALLELISM_DEGREE - 1]->last_node = 1; // mark last node+  S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */    if( keylen > 0 )   {@@ -210,7 +241,7 @@     memset( block, 0, BLAKE2S_BLOCKBYTES );     memcpy( block, key, keylen ); -    for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+    for( i = 0; i < PARALLELISM_DEGREE; ++i )       blake2s_update( S[i], block, BLAKE2S_BLOCKBYTES );      secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */@@ -220,31 +251,31 @@   #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) #else -  for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ )+  for( i = 0; i < PARALLELISM_DEGREE; ++i ) #endif   { #if defined(_OPENMP)-    size_t      id__ = omp_get_thread_num();+    size_t      i = omp_get_thread_num(); #endif-    uint64_t inlen__ = inlen;-    const uint8_t *in__ = ( const uint8_t * )in;-    in__ += id__ * BLAKE2S_BLOCKBYTES;+    size_t inlen__ = inlen;+    const unsigned char *in__ = ( const unsigned char * )in;+    in__ += i * BLAKE2S_BLOCKBYTES;      while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES )     {-      blake2s_update( S[id__], in__, BLAKE2S_BLOCKBYTES );+      blake2s_update( S[i], in__, BLAKE2S_BLOCKBYTES );       in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;       inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;     } -    if( inlen__ > id__ * BLAKE2S_BLOCKBYTES )+    if( inlen__ > i * BLAKE2S_BLOCKBYTES )     {-      const size_t left = inlen__ - id__ * BLAKE2S_BLOCKBYTES;+      const size_t left = inlen__ - i * BLAKE2S_BLOCKBYTES;       const size_t len = left <= BLAKE2S_BLOCKBYTES ? left : BLAKE2S_BLOCKBYTES;-      blake2s_update( S[id__], in__, len );+      blake2s_update( S[i], in__, len );     } -    blake2s_final( S[id__], hash[id__], BLAKE2S_OUTBYTES );+    blake2s_final( S[i], hash[i], BLAKE2S_OUTBYTES );   }    if( blake2sp_init_root( FS, outlen, keylen ) < 0 )@@ -252,8 +283,76 @@    FS->last_node = 1; -  for( size_t i = 0; i < PARALLELISM_DEGREE; ++i )+  for( i = 0; i < PARALLELISM_DEGREE; ++i )     blake2s_update( FS, hash[i], BLAKE2S_OUTBYTES );    return blake2s_final( FS, out, outlen ); }++#if defined(BLAKE2SP_SELFTEST)+#include <string.h>+#include "blake2-kat.h"+int main( void )+{+  uint8_t key[BLAKE2S_KEYBYTES];+  uint8_t buf[BLAKE2_KAT_LENGTH];+  size_t i, step;++  for( i = 0; i < BLAKE2S_KEYBYTES; ++i )+    key[i] = ( uint8_t )i;++  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )+    buf[i] = ( uint8_t )i;++  /* Test simple API */+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )+  {+    uint8_t hash[BLAKE2S_OUTBYTES];+    blake2sp( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES );++    if( 0 != memcmp( hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES ) )+    {+      goto fail;+    }+  }++  /* Test streaming API */+  for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) {+    for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {+      uint8_t hash[BLAKE2S_OUTBYTES];+      blake2sp_state S;+      uint8_t * p = buf;+      size_t mlen = i;+      int err = 0;++      if( (err = blake2sp_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) {+        goto fail;+      }++      while (mlen >= step) {+        if ( (err = blake2sp_update(&S, p, step)) < 0 ) {+          goto fail;+        }+        mlen -= step;+        p += step;+      }+      if ( (err = blake2sp_update(&S, p, mlen)) < 0) {+        goto fail;+      }+      if ( (err = blake2sp_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) {+        goto fail;+      }++      if (0 != memcmp(hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES)) {+        goto fail;+      }+    }+  }++  puts( "ok" );+  return 0;+fail:+  puts("error");+  return -1;+}+#endif
cbits/cryptonite_align.h view
@@ -39,12 +39,70 @@ 	return le32_to_cpu(*((uint32_t *) p));		 } +static inline void store_le32_aligned(uint8_t *dst, const uint32_t v)+{+	*((uint32_t *) dst) = cpu_to_le32(v);+}++static inline void store_be32_aligned(uint8_t *dst, const uint32_t v)+{+	*((uint32_t *) dst) = cpu_to_be32(v);+}++static inline void store_le64_aligned(uint8_t *dst, const uint64_t v)+{+	*((uint64_t *) dst) = cpu_to_le64(v);+}++static inline void store_be64_aligned(uint8_t *dst, const uint64_t v)+{+	*((uint64_t *) dst) = cpu_to_be64(v);+}+ #ifdef UNALIGNED_ACCESS_OK #define load_le32(a) load_le32_aligned(a) #else static inline uint32_t load_le32(const uint8_t *p) { 	return ((uint32_t)p[0]) | ((uint32_t)p[1] <<  8) | ((uint32_t)p[2] << 16) | ((uint32_t)p[3] << 24);+}+#endif++#ifdef UNALIGNED_ACCESS_OK+#define store_le32(a, b) store_le32_aligned(a, b)+#else+static inline void store_le32(uint8_t *dst, const uint32_t v)+{+	dst[0] = v; dst[1] = v >> 8; dst[2] = v >> 16; dst[3] = v >> 24;+}+#endif++#ifdef UNALIGNED_ACCESS_OK+#define store_be32(a, b) store_be32_aligned(a, b)+#else+static inline void store_be32(uint8_t *dst, const uint32_t v)+{+	dst[3] = v; dst[2] = v >> 8; dst[1] = v >> 16; dst[0] = v >> 24;+}+#endif++#ifdef UNALIGNED_ACCESS_OK+#define store_le64(a, b) store_le64_aligned(a, b)+#else+static inline void store_le64(uint8_t *dst, const uint64_t v)+{+	dst[0] = v      ; dst[1] = v >> 8 ; dst[2] = v >> 16; dst[3] = v >> 24;+	dst[4] = v >> 32; dst[5] = v >> 40; dst[6] = v >> 48; dst[7] = v >> 56;+}+#endif++#ifdef UNALIGNED_ACCESS_OK+#define store_be64(a, b) store_be64_aligned(a, b)+#else+static inline void store_be64(uint8_t *dst, const uint64_t v)+{+	dst[7] = v      ; dst[6] = v >> 8 ; dst[5] = v >> 16; dst[4] = v >> 24;+	dst[3] = v >> 32; dst[2] = v >> 40; dst[1] = v >> 48; dst[0] = v >> 56; } #endif 
− cbits/cryptonite_keccak.c
@@ -1,159 +0,0 @@-/*- * Copyright (C) 2012 Vincent Hanquez <vincent@snarc.org>- *- * Redistribution and use in source and binary forms, with or without- * modification, are permitted provided that the following conditions- * are met:- * 1. Redistributions of source code must retain the above copyright- *    notice, this list of conditions and the following disclaimer.- * 2. Redistributions in binary form must reproduce the above copyright- *    notice, this list of conditions and the following disclaimer in the- *    documentation and/or other materials provided with the distribution.- *- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.- */--#include <stdint.h>-#include <string.h>-#include "cryptonite_bitfn.h"-#include "cryptonite_keccak.h"--#define KECCAK_NB_ROUNDS 24--/* rounds constants */-static const uint64_t keccak_rndc[24] =-{-	0x0000000000000001ULL, 0x0000000000008082ULL, 0x800000000000808aULL,-	0x8000000080008000ULL, 0x000000000000808bULL, 0x0000000080000001ULL,-	0x8000000080008081ULL, 0x8000000000008009ULL, 0x000000000000008aULL,-	0x0000000000000088ULL, 0x0000000080008009ULL, 0x000000008000000aULL,-	0x000000008000808bULL, 0x800000000000008bULL, 0x8000000000008089ULL,-	0x8000000000008003ULL, 0x8000000000008002ULL, 0x8000000000000080ULL,-	0x000000000000800aULL, 0x800000008000000aULL, 0x8000000080008081ULL,-	0x8000000000008080ULL, 0x0000000080000001ULL, 0x8000000080008008ULL,-};--/* triangular numbers constants */-static const int keccak_rotc[24] =-	{ 1,3,6,10,15,21,28,36,45,55,2,14,27,41,56,8,25,43,62,18,39,61,20,44 };--static const int keccak_piln[24] =-	{ 10,7,11,17,18,3,5,16,8,21,24,4,15,23,19,13,12,2,20,14,22,9,6,1 };--static inline void keccak_do_chunk(uint64_t state[25], uint64_t buf[], int bufsz)-{-	int i, j, r;-	uint64_t tmp, bc[5];--	/* merge buf with state */-	for (i = 0; i < bufsz; i++)-		state[i] ^= le64_to_cpu(buf[i]);--	/* run keccak rounds */-	for (r = 0; r < KECCAK_NB_ROUNDS; r++) {-		/* compute the parity of each columns */-		for (i = 0; i < 5; i++)-			bc[i] = state[i] ^ state[i+5] ^ state[i+10] ^ state[i+15] ^ state[i+20];--		for (i = 0; i < 5; i++) {-			tmp = bc[(i + 4) % 5] ^ rol64(bc[(i + 1) % 5], 1);-			for (j = 0; j < 25; j += 5)-				state[j + i] ^= tmp;-		}--		/* rho pi */-		tmp = state[1];-		for (i = 0; i < 24; i++) {-			j = keccak_piln[i];-			bc[0] = state[j];-			state[j] = rol64(tmp, keccak_rotc[i]);-			tmp = bc[0];-		}--		/* bitwise combine along rows using a = a xor (not b and c) */-		for (j = 0; j < 25; j += 5) {-			for (i = 0; i < 5; i++)-				bc[i] = state[j + i];-			#define andn(b,c) (~(b) & (c))-			state[j + 0] ^= andn(bc[1], bc[2]);-			state[j + 1] ^= andn(bc[2], bc[3]);-			state[j + 2] ^= andn(bc[3], bc[4]);-			state[j + 3] ^= andn(bc[4], bc[0]);-			state[j + 4] ^= andn(bc[0], bc[1]);-			#undef andn-		}--		/* xor the round constant */-		state[0] ^= keccak_rndc[r];-	}-}--void cryptonite_keccak_init(struct keccak_ctx *ctx, uint32_t hashlen)-{-	int bufsz = 200 - 2 * (hashlen / 8);-	memset(ctx, 0, sizeof(*ctx) + bufsz);-	ctx->bufsz = bufsz;-}--void cryptonite_keccak_update(struct keccak_ctx *ctx, uint8_t *data, uint32_t len)-{-	uint32_t to_fill;--	to_fill = ctx->bufsz - ctx->bufindex;--	if (ctx->bufindex == ctx->bufsz) {-		keccak_do_chunk(ctx->state, (uint64_t *) ctx->buf, ctx->bufsz / 8);-		ctx->bufindex = 0;-	}--	/* process partial buffer if there's enough data to make a block */-	if (ctx->bufindex && len >= to_fill) {-		memcpy(ctx->buf + ctx->bufindex, data, to_fill);-		keccak_do_chunk(ctx->state, (uint64_t *) ctx->buf, ctx->bufsz / 8);-		len -= to_fill;-		data += to_fill;-		ctx->bufindex = 0;-	}--	/* process as much ctx->bufsz-block */-	for (; len >= ctx->bufsz; len -= ctx->bufsz, data += ctx->bufsz)-		keccak_do_chunk(ctx->state, (uint64_t *) data, ctx->bufsz / 8);--	/* append data into buf */-	if (len) {-		memcpy(ctx->buf + ctx->bufindex, data, len);-		ctx->bufindex += len;-	}-}--void cryptonite_keccak_finalize(struct keccak_ctx *ctx, uint32_t hashlen, uint8_t *out)-{-	uint64_t w[25];--	/* process full buffer if needed */-	if (ctx->bufindex == ctx->bufsz) {-		keccak_do_chunk(ctx->state, (uint64_t *) ctx->buf, ctx->bufsz / 8);-		ctx->bufindex = 0;-	}--	/* add the 10*1 padding */-	ctx->buf[ctx->bufindex++] = 1;-	memset(ctx->buf + ctx->bufindex, 0, ctx->bufsz - ctx->bufindex);-	ctx->buf[ctx->bufsz - 1] |= 0x80;--	/* process */-	keccak_do_chunk(ctx->state, (uint64_t *) ctx->buf, ctx->bufsz / 8);--	/* output */-	cpu_to_le64_array(w, ctx->state, 25);-	memcpy(out, w, hashlen / 8);-}
− cbits/cryptonite_keccak.h
@@ -1,43 +0,0 @@-/*- * Copyright (C) 2012 Vincent Hanquez <vincent@snarc.org>- *- * Redistribution and use in source and binary forms, with or without- * modification, are permitted provided that the following conditions- * are met:- * 1. Redistributions of source code must retain the above copyright- *    notice, this list of conditions and the following disclaimer.- * 2. Redistributions in binary form must reproduce the above copyright- *    notice, this list of conditions and the following disclaimer in the- *    documentation and/or other materials provided with the distribution.- *- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.- */-#ifndef CRYPTOHASH_SHA3_H-#define CRYPTOHASH_SHA3_H--#include <stdint.h>--struct keccak_ctx-{-	uint32_t bufindex;-	uint32_t bufsz;-	uint64_t state[25];-	uint8_t  buf[0]; /* maximum SHA3-224 = 144, otherwise buffer need decrease */-};--#define SHA3_CTX_SIZE		sizeof(struct keccak_ctx)--void cryptonite_keccak_init(struct keccak_ctx *ctx, uint32_t hashlen);-void cryptonite_keccak_update(struct keccak_ctx *ctx, uint8_t *data, uint32_t len);-void cryptonite_keccak_finalize(struct keccak_ctx *ctx, uint32_t hashlen, uint8_t *out);--#endif
+ cbits/cryptonite_pbkdf2.c view
@@ -0,0 +1,390 @@+/*+ * fast-pbkdf2 - Optimal PBKDF2-HMAC calculation+ * Written in 2015 by Joseph Birr-Pixton <jpixton@gmail.com>+ * Ported to cryptonite in 2017 by Nicolas Di Prima <nicolas@primetype.co.uk>+ *+ * To the extent possible under law, the author(s) have dedicated all+ * copyright and related and neighboring rights to this software to the+ * public domain worldwide. This software is distributed without any+ * warranty.+ *+ * You should have received a copy of the CC0 Public Domain Dedication+ * along with this software. If not, see+ * <http://creativecommons.org/publicdomain/zero/1.0/>.+ */++#include <assert.h>+#include <string.h>++#include "cryptonite_pbkdf2.h"+#include "cryptonite_bitfn.h"+#include "cryptonite_align.h"+#include "cryptonite_sha1.h"+#include "cryptonite_sha256.h"+#include "cryptonite_sha512.h"++/* --- MSVC doesn't support C99 --- */+#ifdef _MSC_VER+#define restrict+#define _Pragma __pragma+#endif++/* --- Common useful things --- */+#define MIN(a, b) ((a) > (b)) ? (b) : (a)++/* Prepare block (of blocksz bytes) to contain md padding denoting a msg-size+ * message (in bytes).  block has a prefix of used bytes.+ *+ * Message length is expressed in 32 bits (so suitable for sha1, sha256, sha512). */+static inline void md_pad(uint8_t *block, size_t blocksz, size_t used, size_t msg)+{+  memset(block + used, 0, blocksz - used - 4);+  block[used] = 0x80;+  block += blocksz - 4;+  store_be32(block, (uint32_t) (msg * 8));+}++/* Internal function/type names for hash-specific things. */+#define HMAC_CTX(_name) HMAC_ ## _name ## _ctx+#define HMAC_INIT(_name) HMAC_ ## _name ## _init+#define HMAC_UPDATE(_name) HMAC_ ## _name ## _update+#define HMAC_FINAL(_name) HMAC_ ## _name ## _final++#define PBKDF2_F(_name) pbkdf2_f_ ## _name+#define PBKDF2(_name) pbkdf2_ ## _name++/* This macro expands to decls for the whole implementation for a given+ * hash function.  Arguments are:+ *+ * _name like 'sha1', added to symbol names+ * _blocksz block size, in bytes+ * _hashsz digest output, in bytes+ * _ctx hash context type+ * _init hash context initialisation function+ *    args: (_ctx *c)+ * _update hash context update function+ *    args: (_ctx *c, const void *data, size_t ndata)+ * _final hash context finish function+ *    args: (void *out, _ctx *c)+ * _xform hash context raw block update function+ *    args: (_ctx *c, const void *data)+ * _xcpy hash context raw copy function (only need copy hash state)+ *    args: (_ctx * restrict out, const _ctx *restrict in)+ * _xtract hash context state extraction+ *    args: args (_ctx *restrict c, uint8_t *restrict out)+ * _xxor hash context xor function (only need xor hash state)+ *    args: (_ctx *restrict out, const _ctx *restrict in)+ *+ * The resulting function is named PBKDF2(_name).+ */+#define DECL_PBKDF2(_name, _blocksz, _hashsz, _ctx,                           \+                    _init, _update, _xform, _final, _xcpy, _xtract, _xxor)    \+  typedef struct {                                                            \+    _ctx inner;                                                               \+    _ctx outer;                                                               \+  } HMAC_CTX(_name);                                                          \+                                                                              \+  static inline void HMAC_INIT(_name)(HMAC_CTX(_name) *ctx,                   \+                                      const uint8_t *key, size_t nkey)        \+  {                                                                           \+    /* Prepare key: */                                                        \+    uint8_t k[_blocksz];                                                      \+                                                                              \+    /* Shorten long keys. */                                                  \+    if (nkey > _blocksz)                                                      \+    {                                                                         \+      _init(&ctx->inner);                                                     \+      _update(&ctx->inner, key, nkey);                                        \+      _final(&ctx->inner, k);                                                 \+                                                                              \+      key = k;                                                                \+      nkey = _hashsz;                                                         \+    }                                                                         \+                                                                              \+    /* Standard doesn't cover case where blocksz < hashsz. */                 \+    assert(nkey <= _blocksz);                                                 \+                                                                              \+    /* Right zero-pad short keys. */                                          \+    if (k != key)                                                             \+      memcpy(k, key, nkey);                                                   \+    if (_blocksz > nkey)                                                      \+      memset(k + nkey, 0, _blocksz - nkey);                                   \+                                                                              \+    /* Start inner hash computation */                                        \+    uint8_t blk_inner[_blocksz];                                              \+    uint8_t blk_outer[_blocksz];                                              \+                                                                              \+    for (size_t i = 0; i < _blocksz; i++)                                     \+    {                                                                         \+      blk_inner[i] = 0x36 ^ k[i];                                             \+      blk_outer[i] = 0x5c ^ k[i];                                             \+    }                                                                         \+                                                                              \+    _init(&ctx->inner);                                                       \+    _update(&ctx->inner, blk_inner, sizeof blk_inner);                        \+                                                                              \+    /* And outer. */                                                          \+    _init(&ctx->outer);                                                       \+    _update(&ctx->outer, blk_outer, sizeof blk_outer);                        \+  }                                                                           \+                                                                              \+  static inline void HMAC_UPDATE(_name)(HMAC_CTX(_name) *ctx,                 \+                                        const void *data, size_t ndata)       \+  {                                                                           \+    _update(&ctx->inner, data, ndata);                                        \+  }                                                                           \+                                                                              \+  static inline void HMAC_FINAL(_name)(HMAC_CTX(_name) *ctx,                  \+                                       uint8_t out[_hashsz])                  \+  {                                                                           \+    _final(&ctx->inner, out);                                                 \+    _update(&ctx->outer, out, _hashsz);                                       \+    _final(&ctx->outer, out);                                                 \+  }                                                                           \+                                                                              \+                                                                              \+  /* --- PBKDF2 --- */                                                        \+  static inline void PBKDF2_F(_name)(const HMAC_CTX(_name) *startctx,         \+                                     uint32_t counter,                        \+                                     const uint8_t *salt, size_t nsalt,       \+                                     uint32_t iterations,                     \+                                     uint8_t *out)                            \+  {                                                                           \+    uint8_t countbuf[4];                                                      \+    store_be32(countbuf, counter);                                            \+                                                                              \+    /* Prepare loop-invariant padding block. */                               \+    uint8_t Ublock[_blocksz];                                                 \+    md_pad(Ublock, _blocksz, _hashsz, _blocksz + _hashsz);                    \+                                                                              \+    /* First iteration:                                                       \+     *   U_1 = PRF(P, S || INT_32_BE(i))                                      \+     */                                                                       \+    HMAC_CTX(_name) ctx = *startctx;                                          \+    HMAC_UPDATE(_name)(&ctx, salt, nsalt);                                    \+    HMAC_UPDATE(_name)(&ctx, countbuf, sizeof countbuf);                      \+    HMAC_FINAL(_name)(&ctx, Ublock);                                          \+    _ctx result = ctx.outer;                                                  \+                                                                              \+    /* Subsequent iterations:                                                 \+     *   U_c = PRF(P, U_{c-1})                                                \+     */                                                                       \+    for (uint32_t i = 1; i < iterations; i++)                                 \+    {                                                                         \+      /* Complete inner hash with previous U */                               \+      _xcpy(&ctx.inner, &startctx->inner);                                    \+      _xform(&ctx.inner, Ublock);                                             \+      _xtract(&ctx.inner, Ublock);                                            \+      /* Complete outer hash with inner output */                             \+      _xcpy(&ctx.outer, &startctx->outer);                                    \+      _xform(&ctx.outer, Ublock);                                             \+      _xtract(&ctx.outer, Ublock);                                            \+      _xxor(&result, &ctx.outer);                                             \+    }                                                                         \+                                                                              \+    /* Reform result into output buffer. */                                   \+    _xtract(&result, out);                                                    \+  }                                                                           \+                                                                              \+  static inline void PBKDF2(_name)(const uint8_t *pw, size_t npw,             \+                     const uint8_t *salt, size_t nsalt,                       \+                     uint32_t iterations,                                     \+                     uint8_t *out, size_t nout)                               \+  {                                                                           \+    assert(iterations);                                                       \+    assert(out && nout);                                                      \+                                                                              \+    /* Starting point for inner loop. */                                      \+    HMAC_CTX(_name) ctx;                                                      \+    HMAC_INIT(_name)(&ctx, pw, npw);                                          \+                                                                              \+    /* How many blocks do we need? */                                         \+    uint32_t blocks_needed = (uint32_t)(nout + _hashsz - 1) / _hashsz;        \+                                                                              \+    for (uint32_t counter = 1; counter <= blocks_needed; counter++)           \+    {                                                                         \+      uint8_t block[_hashsz];                                                 \+      PBKDF2_F(_name)(&ctx, counter, salt, nsalt, iterations, block);         \+                                                                              \+      size_t offset = (counter - 1) * _hashsz;                                \+      size_t taken = MIN(nout - offset, _hashsz);                             \+      memcpy(out + offset, block, taken);                                     \+    }                                                                         \+  }++static inline void sha1_extract(struct sha1_ctx *restrict ctx, uint8_t *restrict out)+{+	store_be32(out   , ctx->h[0]);+	store_be32(out+4 , ctx->h[1]);+	store_be32(out+8 , ctx->h[2]);+	store_be32(out+12, ctx->h[3]);+	store_be32(out+16, ctx->h[4]);+}++static inline void sha1_cpy(struct sha1_ctx *restrict out, const struct sha1_ctx *restrict in)+{+  out->h[0] = in->h[0];+  out->h[1] = in->h[1];+  out->h[2] = in->h[2];+  out->h[3] = in->h[3];+  out->h[4] = in->h[4];+}++static inline void sha1_xor(struct sha1_ctx *restrict out, const struct sha1_ctx *restrict in)+{+  out->h[0] ^= in->h[0];+  out->h[1] ^= in->h[1];+  out->h[2] ^= in->h[2];+  out->h[3] ^= in->h[3];+  out->h[4] ^= in->h[4];+}++void cryptonite_sha1_transform(struct sha1_ctx* ctx, uint8_t block[SHA1_BLOCK_SIZE])+{+  cryptonite_sha1_update(ctx, block, SHA1_BLOCK_SIZE);+}++DECL_PBKDF2(sha1,+            SHA1_BLOCK_SIZE,+            SHA1_DIGEST_SIZE,+            struct sha1_ctx,+            cryptonite_sha1_init,+            cryptonite_sha1_update,+            cryptonite_sha1_transform,+            cryptonite_sha1_finalize,+            sha1_cpy,+            sha1_extract,+            sha1_xor);++static inline void sha256_extract(struct sha256_ctx *restrict ctx, uint8_t *restrict out)+{+	store_be32(out   , ctx->h[0]);+	store_be32(out+4 , ctx->h[1]);+	store_be32(out+8 , ctx->h[2]);+	store_be32(out+12, ctx->h[3]);+	store_be32(out+16, ctx->h[4]);+	store_be32(out+20, ctx->h[5]);+	store_be32(out+24, ctx->h[6]);+	store_be32(out+28, ctx->h[7]);+}++static inline void sha256_cpy(struct sha256_ctx *restrict out, const struct sha256_ctx *restrict in)+{+	out->h[0] = in->h[0];+	out->h[1] = in->h[1];+	out->h[2] = in->h[2];+	out->h[3] = in->h[3];+	out->h[4] = in->h[4];+	out->h[5] = in->h[5];+	out->h[6] = in->h[6];+	out->h[7] = in->h[7];+}++static inline void sha256_xor(struct sha256_ctx *restrict out, const struct sha256_ctx *restrict in)+{+	out->h[0] ^= in->h[0];+	out->h[1] ^= in->h[1];+	out->h[2] ^= in->h[2];+	out->h[3] ^= in->h[3];+	out->h[4] ^= in->h[4];+	out->h[5] ^= in->h[5];+	out->h[6] ^= in->h[6];+	out->h[7] ^= in->h[7];+}++void cryptonite_sha256_transform(struct sha256_ctx* ctx, uint8_t block[SHA256_BLOCK_SIZE])+{+  cryptonite_sha256_update(ctx, block, SHA256_BLOCK_SIZE);+}++DECL_PBKDF2(sha256,+            SHA256_BLOCK_SIZE,+            SHA256_DIGEST_SIZE,+            struct sha256_ctx,+            cryptonite_sha256_init,+            cryptonite_sha256_update,+            cryptonite_sha256_transform,+            cryptonite_sha256_finalize,+            sha256_cpy,+            sha256_extract,+            sha256_xor);++static inline void sha512_extract(struct sha512_ctx *restrict ctx, uint8_t *restrict out)+{+	store_be64(out   , ctx->h[0]);+	store_be64(out+8 , ctx->h[1]);+	store_be64(out+16, ctx->h[2]);+	store_be64(out+24, ctx->h[3]);+	store_be64(out+32, ctx->h[4]);+	store_be64(out+40, ctx->h[5]);+	store_be64(out+48, ctx->h[6]);+	store_be64(out+56, ctx->h[7]);+}++static inline void sha512_cpy(struct sha512_ctx *restrict out, const struct sha512_ctx *restrict in)+{+	out->h[0] = in->h[0];+	out->h[1] = in->h[1];+	out->h[2] = in->h[2];+	out->h[3] = in->h[3];+	out->h[4] = in->h[4];+	out->h[5] = in->h[5];+	out->h[6] = in->h[6];+	out->h[7] = in->h[7];+}++static inline void sha512_xor(struct sha512_ctx *restrict out, const struct sha512_ctx *restrict in)+{+	out->h[0] ^= in->h[0];+	out->h[1] ^= in->h[1];+	out->h[2] ^= in->h[2];+	out->h[3] ^= in->h[3];+	out->h[4] ^= in->h[4];+	out->h[5] ^= in->h[5];+	out->h[6] ^= in->h[6];+	out->h[7] ^= in->h[7];+}++void cryptonite_sha512_transform(struct sha512_ctx* ctx, uint8_t block[SHA512_BLOCK_SIZE])+{+	cryptonite_sha512_update(ctx, block, SHA512_BLOCK_SIZE);+}++DECL_PBKDF2(sha512,+            SHA512_BLOCK_SIZE,+            SHA512_DIGEST_SIZE,+            struct sha512_ctx,+            cryptonite_sha512_init,+            cryptonite_sha512_update,+            cryptonite_sha512_transform,+            cryptonite_sha512_finalize,+            sha512_cpy,+            sha512_extract,+            sha512_xor);++void cryptonite_fastpbkdf2_hmac_sha1( const uint8_t *pw, size_t npw+                                    , const uint8_t *salt, size_t nsalt+                                    , uint32_t iterations+                                    , uint8_t *out, size_t nout+                                    )+{+  PBKDF2(sha1)(pw, npw, salt, nsalt, iterations, out, nout);+}++void cryptonite_fastpbkdf2_hmac_sha256( const uint8_t *pw, size_t npw+                                      , const uint8_t *salt, size_t nsalt+                                      , uint32_t iterations+                                      , uint8_t *out, size_t nout+                                      )+{+  PBKDF2(sha256)(pw, npw, salt, nsalt, iterations, out, nout);+}++void cryptonite_fastpbkdf2_hmac_sha512( const uint8_t *pw, size_t npw+                                      , const uint8_t *salt, size_t nsalt+                                      , uint32_t iterations+                                      , uint8_t *out, size_t nout+                                      )+{+  PBKDF2(sha512)(pw, npw, salt, nsalt, iterations, out, nout);+}
+ cbits/cryptonite_pbkdf2.h view
@@ -0,0 +1,31 @@+#ifndef CRYPTONITE_PBKDF2_H_+#define CRYPTONITE_PBKDF2_H_++#include <stdlib.h>+#include <stdint.h>++#ifdef __cplusplus+extern "C" {+#endif++void cryptonite_fastpbkdf2_hmac_sha1( const uint8_t *pw, size_t npw+                                    , const uint8_t *salt, size_t nsalt+                                    , uint32_t iterations+                                    , uint8_t *out, size_t nout+                                    );+void cryptonite_fastpbkdf2_hmac_sha256( const uint8_t *pw, size_t npw+                                      , const uint8_t *salt, size_t nsalt+                                      , uint32_t iterations+                                      , uint8_t *out, size_t nout+                                      );+void cryptonite_fastpbkdf2_hmac_sha512( const uint8_t *pw, size_t npw+                                      , const uint8_t *salt, size_t nsalt+                                      , uint32_t iterations+                                      , uint8_t *out, size_t nout+                                      );++#ifdef __cplusplus+}+#endif++#endif
cbits/cryptonite_sha1.h view
@@ -26,10 +26,12 @@  #include <stdint.h> +# define SHA1_BLOCK_SIZE 64+ struct sha1_ctx { 	uint64_t sz;-	uint8_t  buf[64];+	uint8_t  buf[SHA1_BLOCK_SIZE]; 	uint32_t h[5]; }; 
cbits/cryptonite_sha256.h view
@@ -27,6 +27,8 @@  #include <stdint.h> +#define SHA256_BLOCK_SIZE 64+ struct sha256_ctx { 	uint64_t sz;
cbits/cryptonite_sha3.c view
@@ -98,13 +98,19 @@ 	} } +/*+ * Initialize a SHA-3 / SHAKE context: hashlen is the security level (and+ * half the capacity) in bits+ */ void cryptonite_sha3_init(struct sha3_ctx *ctx, uint32_t hashlen) {-	int bufsz = 200 - 2 * (hashlen / 8);+	/* assert(hashlen >= SHA3_BITSIZE_MIN && hashlen <= SHA3_BITSIZE_MAX) */+	int bufsz = SHA3_BUF_SIZE(hashlen); 	memset(ctx, 0, sizeof(*ctx) + bufsz); 	ctx->bufsz = bufsz; } +/* Update a SHA-3 / SHAKE context */ void cryptonite_sha3_update(struct sha3_ctx *ctx, const uint8_t *data, uint32_t len) { 	uint32_t to_fill;@@ -126,7 +132,7 @@ 	}  	if (need_alignment(data, 8)) {-		uint64_t tramp[200 - 2 * (224 / 8)];+		uint64_t tramp[SHA3_BUF_SIZE_MAX/8]; 		ASSERT_ALIGNMENT(tramp, 8); 		for (; len >= ctx->bufsz; len -= ctx->bufsz, data += ctx->bufsz) { 			memcpy(tramp, data, ctx->bufsz / 8);@@ -146,10 +152,8 @@ 	} } -void cryptonite_sha3_finalize(struct sha3_ctx *ctx, uint32_t hashlen, uint8_t *out)+void cryptonite_sha3_finalize_with_pad_byte(struct sha3_ctx *ctx, uint8_t pad_byte) {-	uint64_t w[25];- 	/* process full buffer if needed */ 	if (ctx->bufindex == ctx->bufsz) { 		sha3_do_chunk(ctx->state, (uint64_t *) ctx->buf, ctx->bufsz / 8);@@ -157,14 +161,83 @@ 	}  	/* add the 10*1 padding */-	ctx->buf[ctx->bufindex++] = 0x06;+	ctx->buf[ctx->bufindex++] = pad_byte; 	memset(ctx->buf + ctx->bufindex, 0, ctx->bufsz - ctx->bufindex); 	ctx->buf[ctx->bufsz - 1] |= 0x80;  	/* process */ 	sha3_do_chunk(ctx->state, (uint64_t *) ctx->buf, ctx->bufsz / 8);+	ctx->bufindex = 0;+} -	/* output */-	cpu_to_le64_array(w, ctx->state, 25);-	memcpy(out, w, hashlen / 8);+/*+ * Extract some bytes from a finalized SHA-3 / SHAKE context.+ * May be called multiple times.+ */+void cryptonite_sha3_output(struct sha3_ctx *ctx, uint8_t *out, uint32_t len)+{+	uint64_t w[25];+	uint8_t *wptr = (uint8_t *) w;+	uint32_t still_avail;++	still_avail = ctx->bufsz - ctx->bufindex;++	if (ctx->bufindex == ctx->bufsz) {+		/* squeeze the sponge again, without any input */+		sha3_do_chunk(ctx->state, NULL, 0);+		ctx->bufindex = 0;+	}++	/* use bytes already available if this block is fully consumed */+	if (ctx->bufindex && len >= still_avail) {+		cpu_to_le64_array(w, ctx->state, 25);+		memcpy(out, wptr + ctx->bufindex, still_avail);+		sha3_do_chunk(ctx->state, NULL, 0);+		len -= still_avail;+		out += still_avail;+		ctx->bufindex = 0;+	}++	/* output as much ctx->bufsz-block */+	for (; len > ctx->bufsz; len -= ctx->bufsz, out += ctx->bufsz) {+		cpu_to_le64_array(w, ctx->state, 25);+		memcpy(out, w, ctx->bufsz);+		sha3_do_chunk(ctx->state, NULL, 0);+	}++	/* output from partial buffer */+	if (len) {+		cpu_to_le64_array(w, ctx->state, 25);+		memcpy(out, wptr + ctx->bufindex, len);+		ctx->bufindex += len;+	}+}++/* Finalize a SHA-3 context and return the digest value */+void cryptonite_sha3_finalize(struct sha3_ctx *ctx, uint32_t hashlen, uint8_t *out)+{+	cryptonite_sha3_finalize_with_pad_byte(ctx, 0x06);+	cryptonite_sha3_output(ctx, out, hashlen / 8);+}++/* Finalize a SHAKE context. Output is read using cryptonite_sha3_output. */+void cryptonite_sha3_finalize_shake(struct sha3_ctx *ctx)+{+	cryptonite_sha3_finalize_with_pad_byte(ctx, 0x1F);+}++void cryptonite_keccak_init(struct sha3_ctx *ctx, uint32_t hashlen)+{+	cryptonite_sha3_init(ctx, hashlen);+}++void cryptonite_keccak_update(struct sha3_ctx *ctx, uint8_t *data, uint32_t len)+{+	cryptonite_sha3_update(ctx, data, len);+}++void cryptonite_keccak_finalize(struct sha3_ctx *ctx, uint32_t hashlen, uint8_t *out)+{+	cryptonite_sha3_finalize_with_pad_byte(ctx, 1);+	cryptonite_sha3_output(ctx, out, hashlen / 8); }
cbits/cryptonite_sha3.h view
@@ -31,13 +31,36 @@ 	uint32_t bufindex; 	uint32_t bufsz; 	uint64_t state[25];-	uint8_t  buf[0]; /* maximum SHA3-224 is 144 bytes, otherwise buffer can be decreases */+	uint8_t  buf[0]; /* maximum SHAKE128 is 168 bytes, otherwise buffer can be decreased */ };  #define SHA3_CTX_SIZE		sizeof(struct sha3_ctx)+#define SHA3_CTX_BUF_MAX_SIZE   (SHA3_CTX_SIZE + SHA3_BUF_SIZE_MAX)+#define SHA3_BITSIZE_MIN   	128+#define SHA3_BITSIZE_MAX    	512 +#define SHA3_BUF_SIZE(bitsize)  (200 - 2 * ((bitsize) / 8))++#define SHA3_BUF_SIZE_MIN       SHA3_BUF_SIZE(SHA3_BITSIZE_MAX)+#define SHA3_BUF_SIZE_MAX       SHA3_BUF_SIZE(SHA3_BITSIZE_MIN)++/*+ * buffer size:+ *+ * 128 bits (shake 128 bits) => 200 - 2 * (128 / 8) = 200 - 2*16 = 200 - 32  = 168 bytes+ * 224 bits (SHA3 224 bits)  => 200 - 2 * (224 / 8) = 200 - 2*28 = 200 - 56  = 144 bytes+ * 512 bits (SHA3 512 bits)  => 200 - 2 * (512 / 8) = 200 - 2*64 = 200 - 128 = 72 bytes+ */+ void cryptonite_sha3_init(struct sha3_ctx *ctx, uint32_t hashlen); void cryptonite_sha3_update(struct sha3_ctx *ctx, const uint8_t *data, uint32_t len); void cryptonite_sha3_finalize(struct sha3_ctx *ctx, uint32_t hashlen, uint8_t *out);++void cryptonite_sha3_finalize_shake(struct sha3_ctx *ctx);+void cryptonite_sha3_output(struct sha3_ctx *ctx, uint8_t *out, uint32_t len);++void cryptonite_keccak_init(struct sha3_ctx *ctx, uint32_t hashlen);+void cryptonite_keccak_update(struct sha3_ctx *ctx, uint8_t *data, uint32_t len);+void cryptonite_keccak_finalize(struct sha3_ctx *ctx, uint32_t hashlen, uint8_t *out);  #endif
cbits/cryptonite_sha512.h view
@@ -26,10 +26,12 @@  #include <stdint.h> +# define SHA512_BLOCK_SIZE 128+ struct sha512_ctx { 	uint64_t sz[2];-	uint8_t  buf[128];+	uint8_t  buf[SHA512_BLOCK_SIZE]; 	uint64_t h[8]; }; 
cbits/ed448/x448.c view
@@ -36,7 +36,7 @@  typedef struct { decaf_word_t limb[X448_LIMBS]; } gf_s, gf[1]; -const unsigned char X448_BASE_POINT[X448_BYTES] = {5};+static const unsigned char X448_BASE_POINT[X448_BYTES] = {5};  static const gf ZERO = {{{0}}}, ONE = {{{1}}}; 
cbits/ed448/x448.h view
@@ -2,7 +2,7 @@ #define X448_BYTES (448/8)  /* The base point (5) */-extern const unsigned char X448_BASE_POINT[X448_BYTES];+//extern const unsigned char X448_BASE_POINT[X448_BYTES];  /* Returns 0 on success, -1 on failure */ int __attribute__((visibility("default")))
cryptonite.cabal view
@@ -1,18 +1,18 @@ Name:                cryptonite-Version:             0.21+Version:             0.22 Synopsis:            Cryptography Primitives sink Description:     A repository of cryptographic primitives.     .     * Symmetric ciphers: AES, DES, 3DES, Blowfish, Camellia, RC4, Salsa, XSalsa, ChaCha.     .-    * Hash: SHA1, SHA2, SHA3, MD2, MD4, MD5, Keccak, Skein, Ripemd, Tiger, Whirlpool, Blake2+    * Hash: SHA1, SHA2, SHA3, SHAKE, MD2, MD4, MD5, Keccak, Skein, Ripemd, Tiger, Whirlpool, Blake2     .     * MAC: HMAC, Poly1305     .-    * Asymmetric crypto: DSA, RSA, DH, ECDH, ECDSA, ECC, Curve25519, Ed25519, Ed448+    * Asymmetric crypto: DSA, RSA, DH, ECDH, ECDSA, ECC, Curve25519, Curve448, Ed25519     .-    * Key Derivation Function: PBKDF2, Scrypt, HKDF+    * Key Derivation Function: PBKDF2, Scrypt, HKDF, Argon2     .     * Cryptographic Random generation: System Entropy, Deterministic Random Generator     .@@ -35,7 +35,7 @@ Build-Type:          Simple Homepage:            https://github.com/haskell-crypto/cryptonite Bug-reports:         https://github.com/haskell-crypto/cryptonite/issues-Cabal-Version:       >=1.10+Cabal-Version:       >=1.18 extra-doc-files:     README.md CHANGELOG.md extra-source-files:  cbits/*.h                      cbits/aes/*.h@@ -44,6 +44,8 @@                      cbits/p256/*.h                      cbits/blake2/ref/*.h                      cbits/blake2/sse/*.h+                     cbits/argon2/*.h+                     cbits/argon2/*.c                      cbits/aes/x86ni_impl.c                      tests/*.hs @@ -66,6 +68,11 @@   Default:           False   Manual:            True +Flag support_sse+  Description:       Use SSE optimized version when existing (BLAKE2, ARGON2)+  Default:           False+  Manual:            True+ Flag support_blake2_sse   Description:       Use SSE optimized version of BLAKE2.   Default:           False@@ -118,6 +125,7 @@                      Crypto.Number.Prime                      Crypto.Number.Serialize                      Crypto.Number.Serialize.Internal+                     Crypto.KDF.Argon2                      Crypto.KDF.PBKDF2                      Crypto.KDF.Scrypt                      Crypto.KDF.BCrypt@@ -125,7 +133,9 @@                      Crypto.Hash                      Crypto.Hash.IO                      Crypto.Hash.Algorithms+                     Crypto.OTP                      Crypto.PubKey.Curve25519+                     Crypto.PubKey.Curve448                      Crypto.PubKey.MaskGenFunction                      Crypto.PubKey.DH                      Crypto.PubKey.DSA@@ -201,9 +211,12 @@                      Crypto.Internal.Imports                      Crypto.Internal.Words                      Crypto.Internal.WordArray+  if impl(ghc >= 7.8)+    Other-modules:   Crypto.Hash.SHAKE+                     Crypto.Internal.Nat   Build-depends:     base >= 4.3 && < 5                    , bytestring-                   , memory >= 0.8+                   , memory >= 0.12                    , ghc-prim   ghc-options:       -Wall -fwarn-tabs -optc-O3 -fno-warn-unused-imports   default-language:  Haskell2010@@ -228,7 +241,6 @@                    , cbits/cryptonite_sha256.c                    , cbits/cryptonite_sha512.c                    , cbits/cryptonite_sha3.c-                   , cbits/cryptonite_keccak.c                    , cbits/cryptonite_md2.c                    , cbits/cryptonite_md4.c                    , cbits/cryptonite_md5.c@@ -238,6 +250,7 @@                    , cbits/cryptonite_tiger.c                    , cbits/cryptonite_whirlpool.c                    , cbits/cryptonite_scrypt.c+                   , cbits/cryptonite_pbkdf2.c   include-dirs:  cbits cbits/ed25519    if arch(x86_64)@@ -288,6 +301,12 @@                   , cbits/blake2/ref/blake2bp-ref.c     include-dirs: cbits/blake2/ref +  if arch(x86_64) || flag(support_sse)+    CPP-options:    -DSUPPORT_SSE++  C-sources:      cbits/argon2/argon2.c+  include-dirs:   cbits/argon2+   if os(windows)     cpp-options:    -DWINDOWS     Build-Depends:  Win32@@ -321,17 +340,19 @@                      KAT_AES.KATXTS                      KAT_AES                      KAT_AFIS+                     KAT_Argon2                      KAT_Blowfish                      KAT_Camellia                      KAT_Curve25519+                     KAT_Curve448                      KAT_DES-                     KAT_Ed448                      KAT_Ed25519                      KAT_CMAC                      KAT_HKDF                      KAT_HMAC                      KAT_MiyaguchiPreneel                      KAT_PBKDF2+                     KAT_OTP                      KAT_PubKey.DSA                      KAT_PubKey.ECC                      KAT_PubKey.ECDSA@@ -353,7 +374,6 @@   Build-Depends:     base >= 3 && < 5                    , bytestring                    , memory-                   , byteable                    , tasty                    , tasty-quickcheck                    , tasty-hunit
tests/Hash.hs view
@@ -1,6 +1,10 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ViewPatterns #-}+#if MIN_VERSION_base(4,7,0) {-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE DataKinds #-}+#endif module Hash     ( tests     ) where@@ -138,10 +142,48 @@         "a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26",         "01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450",         "28e361fe8c56e617caa56c28c7c36e5c13be552b77081be82b642f08bb7ef085b9a81910fe98269386b9aacfd2349076c9506126e198f6f6ad44c12017ca77b1" ])+    , ("Blake2b-160", HashAlg Blake2b_160, [+        "3345524abf6bbe1809449224b5972c41790b6cf2",+        "3c523ed102ab45a37d54f5610d5a983162fde84f",+        "a3d365b5fba5d36fbb19c03b7fde496058969c5a" ])+    , ("Blake2b-224", HashAlg Blake2b_224, [+        "836cc68931c2e4e3e838602eca1902591d216837bafddfe6f0c8cb07",+        "477c3985751dd4d1b8c93827ea5310b33bb02a26463a050dffd3e857",+        "a4a1b6851be66891a3deff406c4d7556879ebf952407450755f90eb6" ])+    , ("Blake2b-256", HashAlg Blake2b_256, [+        "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8",+        "01718cec35cd3d796dd00020e0bfecb473ad23457d063b75eff29c0ffa2e58a9",+        "036c13096926b3dfccfe3f233bd1b2f583b818b8b15c01be65af69238e900b2c" ])+    , ("Blake2b-384", HashAlg Blake2b_384, [+        "b32811423377f52d7862286ee1a72ee540524380fda1724a6f25d7978c6fd3244a6caf0498812673c5e05ef583825100",+        "b7c81b228b6bd912930e8f0b5387989691c1cee1e65aade4da3b86a3c9f678fc8018f6ed9e2906720c8d2a3aeda9c03d",+        "927a1f297873cbe887a93b2183c4e2eba53966ba92c6db8b87029a1d8c673471d09740676cced79c5016838973f630c3" ])     , ("Blake2b-512", HashAlg Blake2b_512, [         "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce",         "a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918",         "af438eea5d8cdb209336a7e85bf58090dc21b49d823f89a7d064c119f127bd361af9c7d109edda0f0e91bdce078d1d86b8e6f25727c98f6d3bb6f50acb2dd376" ])+    , ("Blake2s-160", HashAlg Blake2s_160, [+        "354c9c33f735962418bdacb9479873429c34916f",+        "5a604fec9713c369e84b0ed68daed7d7504ef240",+        "759bef6d041bcbd861b8b51baaece6c8fffd0acf" ])+    , ("Blake2s-224", HashAlg Blake2s_224, [+        "1fa1291e65248b37b3433475b2a0dd63d54a11ecc4e3e034e7bc1ef4",+        "e4e5cb6c7cae41982b397bf7b7d2d9d1949823ae78435326e8db4912",+        "e220025fd46a9a635c3f7f60bb96a84c01019ac0817f5901e7eeaa2c" ])+    , ("Blake2s-256", HashAlg Blake2s_256, [+        "69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9",+        "606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812",+        "94662583a600a12dff357c0a6f1b514a710ef0f587a38e8d2e4d7f67e9c81667" ])+#if MIN_VERSION_base(4,7,0)+    , ("SHAKE128_4096", HashAlg (SHAKE128 :: SHAKE128 4096), [+        "7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef263cb1eea988004b93103cfb0aeefd2a686e01fa4a58e8a3639ca8a1e3f9ae57e235b8cc873c23dc62b8d260169afa2f75ab916a58d974918835d25e6a435085b2badfd6dfaac359a5efbb7bcc4b59d538df9a04302e10c8bc1cbf1a0b3a5120ea17cda7cfad765f5623474d368ccca8af0007cd9f5e4c849f167a580b14aabdefaee7eef47cb0fca9767be1fda69419dfb927e9df07348b196691abaeb580b32def58538b8d23f87732ea63b02b4fa0f4873360e2841928cd60dd4cee8cc0d4c922a96188d032675c8ac850933c7aff1533b94c834adbb69c6115bad4692d8619f90b0cdf8a7b9c264029ac185b70b83f2801f2f4b3f70c593ea3aeeb613a7f1b1de33fd75081f592305f2e4526edc09631b10958f464d889f31ba010250fda7f1368ec2967fc84ef2ae9aff268e0b1700affc6820b523a3d917135f2dff2ee06bfe72b3124721d4a26c04e53a75e30e73a7a9c4a95d91c55d495e9f51dd0b5e9d83c6d5e8ce803aa62b8d654db53d09b8dcff273cdfeb573fad8bcd45578bec2e770d01efde86e721a3f7c6cce275dabe6e2143f1af18da7efddc4c7b70b5e345db93cc936bea323491ccb38a388f546a9ff00dd4e1300b9b2153d2041d205b443e41b45a653f2a5c4492c1add544512dda2529833462b71a41a45be97290b6f",+        "f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66eb5585ec6f86021cacf272c798bcf97d368b886b18fec3a571f096086a523717a3732d50db2b0b7998b4117ae66a761ccf1847a1616f4c07d5178d0d965f9feba351420f8bfb6f5ab9a0cb102568eabf3dfa4e22279f8082dce8143eb78235a1a54914ab71abb07f2f3648468370b9fbb071e074f1c030a4030225f40c39480339f3dc71d0f04f71326de1381674cc89e259e219927fae8ea2799a03da862a55afafe670957a2af3318d919d0a3358f3b891236d6a8e8d19999d1076b529968faefbd880d77bb300829dca87e9c8e4c28e0800ff37490a5bd8c36c0b0bdb2701a5d58d03378b9dbd384389e3ef0fd4003b08998fd3f32fe1a0810fc0eccaad94bca8dd83b34559c333f0b16dfc2896ed87b30ba14c81f87cd8b4bb6317db89b0e7e94c0616f9a665fba5b0e6fb3549c9d7b68e66d08a86eb2faec05cc462a771806b93cc38b0a4feb9935c6c8945da6a589891ba5ee99753cfdd38e1abc7147fd74b7c7d1ce0609b6680a2e18888d84949b6e6cf6a2aa4113535aaee079459e3f257b569a9450523c41f5b5ba4b79b3ba5949140a74bb048de0657d04954bdd71dae76f61e2a1f88aecb91cfa5b36c1bf3350a798dc4dcf48628effe3a0c5340c756bd922f78d0e36ef7df12ce78c179cc721ad087e15ea496bf5f60b21b5822d",+        "22fd225fb8f2c8d0d2097e1f8d38b6a9e619d39664dad3795f0336fda544d305e1be56a9953ecd6e4bec14b622f53da492eccbe257b9af84775a6bdf81aab6b1ba3492149b7ce4ea402c56e343939f78b9a9727193269798420c9323a9eb1fa63006e1482fcf15e3696aa1ae5cb66eb8aad4ac6041ca0b576b78785ad95bc5fb6f8a420ba9e1726552c0f2b97050ae69fc018d3f63b3a812a2d39ef64b8ae368472dec4341511b02cf77363c74f216055d5905412bc2bf57b4010b1bdce2882cb28fc7e4d470ed05219fc4d1ce11d11e10db369c807cd71891653638956b2f9d176e116188aff2fbb8519d9ad8c3fb52fa8bb4a0413364e89d9f9d7db627f2a2288babedcc314a19e45c6b7fb93b16a15d9953ff619ab4d523c481552588f711b450f854c858ebcb8cf49492d6240a753bde2109c486cac666bdba767c6e9254cc723f67855534c34d08ed486c67c1b8dd288c6010ce8e6c1c9b7f927acf4d71ee99729cee55ecec544245d0b51b31dd78eb99c2723e8ba5cf92ac7720e8933d9fd3596b90073f6980c5ed3f1cbfada26bdb6946e72391198e3d1cedebdba092324500e32b8e04e32550f6dd6c4befafa95acc206c5708300d2a8df2765751102f9738a1449c4c0d588f0076d0c1a5ee445eb85c97ada5837d5dc1d34ea081c8411d64a4d9ce9279bfe9feb25696cf741c705ed46f171e2239216d6c45dc8d15" ])+    , ("SHAKE256_4096", HashAlg (SHAKE256 :: SHAKE256 4096), [+        "46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be141e96616fb13957692cc7edd0b45ae3dc07223c8e92937bef84bc0eab862853349ec75546f58fb7c2775c38462c5010d846c185c15111e595522a6bcd16cf86f3d122109e3b1fdd943b6aec468a2d621a7c06c6a957c62b54dafc3be87567d677231395f6147293b68ceab7a9e0c58d864e8efde4e1b9a46cbe854713672f5caaae314ed9083dab4b099f8e300f01b8650f1f4b1d8fcf3f3cb53fb8e9eb2ea203bdc970f50ae55428a91f7f53ac266b28419c3778a15fd248d339ede785fb7f5a1aaa96d313eacc890936c173cdcd0fab882c45755feb3aed96d477ff96390bf9a66d1368b208e21f7c10d04a3dbd4e360633e5db4b602601c14cea737db3dcf722632cc77851cbdde2aaf0a33a07b373445df490cc8fc1e4160ff118378f11f0477de055a81a9eda57a4a2cfb0c83929d310912f729ec6cfa36c6ac6a75837143045d791cc85eff5b21932f23861bcf23a52b5da67eaf7baae0f5fb1369db78f3ac45f8c4ac5671d85735cdddb09d2b1e34a1fc066ff4a162cb263d6541274ae2fcc865f618abe27c124cd8b074ccd516301b91875824d09958f341ef274bdab0bae316339894304e35877b0c28a9b1fd166c796b9cc258a064a8f57e27f2a",+        "2f671343d9b2e1604dc9dcf0753e5fe15c7c64a0d283cbbf722d411a0e36f6ca1d01d1369a23539cd80f7c054b6e5daf9c962cad5b8ed5bd11998b40d5734442bed798f6e5c915bd8bb07e0188d0a55c1290074f1c287af06352299184492cbdec9acba737ee292e5adaa445547355e72a03a3bac3aac770fe5d6b66600ff15d37d5b4789994ea2aeb097f550aa5e88e4d8ff0ba07b88c1c88573063f5d96df820abc2abd177ab037f351c375e553af917132cf2f563c79a619e1bb76e8e2266b0c5617d695f2c496a25f4073b6840c1833757ebb386f16757a8e16a21e9355e9b248f3b33be672da700266be99b8f8725e8ab06075f0219e655ebc188976364b7db139390d34a6ea67b4b223229183a94cf455ece91fdaf5b9c707fa4b40ec39816c1120c7aaaf47920977be900e6b9ca4b8940e192b927c475bd58e836f512ae3e52924e36ff8e9b1d0251047770a5e465905622b1f159be121ab93819c5e5c6dae299ac73bf1c4ed4a1e2c7fa3caa1039b05e94c9f993d04feb272b6e00bb0276939cf746c42936831fc8f2b4cb0cf94808ae0af405ce4bc67d1e7acfc6fd6590d3de91f795df5aaf57e2cee1845a303d0ea564be3f1299acdce67efe0d62cfc6d6829ff4ecc0a05153c24696c4d34c076453827e796f3062f94f62f4528b7cfc870f0dcd615b7c97b95da4b9be5830e8b3f66cce71e0f622c771994443e2",+        "fffcaac0606c0edb7bc0d15f033accb68538159016e5ae8470bf9ebea89fa6c9fcc3e027d94f7f967b7246346bd9f6b8084e45a057b976847c4db03bf383c834054866f6a8282a497368c46e1852fc09e20f22c45607a27c8b2a4798ebefada54f8d3795b9f07606b1cd6e41f90d765480ef5c0d5790659cf1d210adfd412378b92e1dd9bd7fd95a1a66677fc6baa0e3a53c9031c1fb59cbad9f5dc5881a3c8e25c80ecb1abf0971488ada1f533dcbf8d37031335378574b8d3fad61159c9fae28caa543b3072ce308d369be340e78c6edc664cc6dde9b2f0a4ad2e60ce9c8b1e5722b8d5b73d0962b74fb9ed86307a180f53933339f9d56d3b345c2a0e98fcf5de7754f3845f6be30089f0e142ad4602f18abdc750bda7c91c3f32872e66640db46045ab4c276b379f1b834c2cbb1bd8601305649ec6b3bf20618695136dee6541492d1d985ea1fb765fd7a559e810eba30f2f710233ae5a411b94ddcaa01a08f1c31320d111c0714422cd5e987c9a76fc865de34003ab12664081be8017d23d977f2bf4ed9e3ce09ea3d64bb4ae8ebfa9d0721f57841008c297e2f455a0441a2bd618ca379dbd239a21e410defb4001b1e11f87e36bf894c222f76f12ddcc3771bbb17d5c0dfd86d89a3e13e084f6dc1c4762bcd393c1757db7afb1434221569e7ddaaffd6318253ec3df8cf5f826b81896d6474ee06a2e30ccc8c6a96bdd5" ])+#endif     ]  runhash :: HashAlg -> ByteString -> ByteString
+ tests/KAT_Argon2.hs view
@@ -0,0 +1,42 @@+{-# LANGUAGE OverloadedStrings #-}+module KAT_Argon2 (tests) where++import           Crypto.Error+import qualified Crypto.KDF.Argon2 as Argon2+import qualified Data.ByteString as B+import           Imports++data KDFVector = KDFVector+    { kdfPass      :: ByteString+    , kdfSalt      :: ByteString+    , kdfOptions   :: Argon2.Options+    , kdfResult    :: ByteString+    }++argon2i_13 :: Argon2.TimeCost -> Argon2.MemoryCost -> Argon2.Options+argon2i_13 iters memory = Argon2.Options+    { Argon2.iterations  = iters+    , Argon2.memory      = memory+    , Argon2.parallelism = 1+    , Argon2.variant     = Argon2.Argon2i+    , Argon2.version     = Argon2.Version13+    }++vectors =+    [ KDFVector "password" "somesalt" (argon2i_13 2 65536)+        "\xc1\x62\x88\x32\x14\x7d\x97\x20\xc5\xbd\x1c\xfd\x61\x36\x70\x78\x72\x9f\x6d\xfb\x6f\x8f\xea\x9f\xf9\x81\x58\xe0\xd7\x81\x6e\xd0"+    ]++kdfTests :: [TestTree]+kdfTests = map toKDFTest $ zip is vectors+  where+    toKDFTest (i, v) =+        testCase (show i)+            (CryptoPassed (kdfResult v) @=? Argon2.hash (kdfOptions v) (kdfPass v) (kdfSalt v) (B.length $ kdfResult v))++    is :: [Int]+    is = [1..]++tests = testGroup "Argon2"+    [ testGroup "KATs" kdfTests+    ]
+ tests/KAT_Curve448.hs view
@@ -0,0 +1,25 @@+{-# LANGUAGE OverloadedStrings #-}+module KAT_Curve448 ( tests ) where++import           Crypto.Error+import qualified Crypto.PubKey.Curve448 as Curve448+import           Data.ByteArray as B+import           Imports++alicePrivate = throwCryptoError $ Curve448.secretKey ("\x9a\x8f\x49\x25\xd1\x51\x9f\x57\x75\xcf\x46\xb0\x4b\x58\x00\xd4\xee\x9e\xe8\xba\xe8\xbc\x55\x65\xd4\x98\xc2\x8d\xd9\xc9\xba\xf5\x74\xa9\x41\x97\x44\x89\x73\x91\x00\x63\x82\xa6\xf1\x27\xab\x1d\x9a\xc2\xd8\xc0\xa5\x98\x72\x6b" :: ByteString)+alicePublic  = throwCryptoError $ Curve448.publicKey ("\x9b\x08\xf7\xcc\x31\xb7\xe3\xe6\x7d\x22\xd5\xae\xa1\x21\x07\x4a\x27\x3b\xd2\xb8\x3d\xe0\x9c\x63\xfa\xa7\x3d\x2c\x22\xc5\xd9\xbb\xc8\x36\x64\x72\x41\xd9\x53\xd4\x0c\x5b\x12\xda\x88\x12\x0d\x53\x17\x7f\x80\xe5\x32\xc4\x1f\xa0" :: ByteString)+bobPrivate   = throwCryptoError $ Curve448.secretKey ("\x1c\x30\x6a\x7a\xc2\xa0\xe2\xe0\x99\x0b\x29\x44\x70\xcb\xa3\x39\xe6\x45\x37\x72\xb0\x75\x81\x1d\x8f\xad\x0d\x1d\x69\x27\xc1\x20\xbb\x5e\xe8\x97\x2b\x0d\x3e\x21\x37\x4c\x9c\x92\x1b\x09\xd1\xb0\x36\x6f\x10\xb6\x51\x73\x99\x2d" :: ByteString)+bobPublic    = throwCryptoError $ Curve448.publicKey ("\x3e\xb7\xa8\x29\xb0\xcd\x20\xf5\xbc\xfc\x0b\x59\x9b\x6f\xec\xcf\x6d\xa4\x62\x71\x07\xbd\xb0\xd4\xf3\x45\xb4\x30\x27\xd8\xb9\x72\xfc\x3e\x34\xfb\x42\x32\xa1\x3c\xa7\x06\xdc\xb5\x7a\xec\x3d\xae\x07\xbd\xc1\xc6\x7b\xf3\x36\x09" :: ByteString)+aliceMultBob = "\x07\xff\xf4\x18\x1a\xc6\xcc\x95\xec\x1c\x16\xa9\x4a\x0f\x74\xd1\x2d\xa2\x32\xce\x40\xa7\x75\x52\x28\x1d\x28\x2b\xb6\x0c\x0b\x56\xfd\x24\x64\xc3\x35\x54\x39\x36\x52\x1c\x24\x40\x30\x85\xd5\x9a\x44\x9a\x50\x37\x51\x4a\x87\x9d" :: ByteString++katTests :: [TestTree]+katTests =+    [ testCase "0" (aliceMultBob @=? B.convert (Curve448.dh alicePublic bobPrivate))+    , testCase "1" (aliceMultBob @=? B.convert (Curve448.dh bobPublic alicePrivate))+    , testCase "2" (alicePublic  @=? Curve448.toPublic alicePrivate)+    , testCase "3" (bobPublic    @=? Curve448.toPublic bobPrivate)+    ]++tests = testGroup "Curve448"+    [ testGroup "KATs" katTests+    ]
− tests/KAT_Ed448.hs
@@ -1,25 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-module KAT_Ed448 ( tests ) where--import           Crypto.Error-import qualified Crypto.PubKey.Ed448 as Ed448-import           Data.ByteArray as B-import           Imports--alicePrivate = throwCryptoError $ Ed448.secretKey ("\x9a\x8f\x49\x25\xd1\x51\x9f\x57\x75\xcf\x46\xb0\x4b\x58\x00\xd4\xee\x9e\xe8\xba\xe8\xbc\x55\x65\xd4\x98\xc2\x8d\xd9\xc9\xba\xf5\x74\xa9\x41\x97\x44\x89\x73\x91\x00\x63\x82\xa6\xf1\x27\xab\x1d\x9a\xc2\xd8\xc0\xa5\x98\x72\x6b" :: ByteString)-alicePublic  = throwCryptoError $ Ed448.publicKey ("\x9b\x08\xf7\xcc\x31\xb7\xe3\xe6\x7d\x22\xd5\xae\xa1\x21\x07\x4a\x27\x3b\xd2\xb8\x3d\xe0\x9c\x63\xfa\xa7\x3d\x2c\x22\xc5\xd9\xbb\xc8\x36\x64\x72\x41\xd9\x53\xd4\x0c\x5b\x12\xda\x88\x12\x0d\x53\x17\x7f\x80\xe5\x32\xc4\x1f\xa0" :: ByteString)-bobPrivate   = throwCryptoError $ Ed448.secretKey ("\x1c\x30\x6a\x7a\xc2\xa0\xe2\xe0\x99\x0b\x29\x44\x70\xcb\xa3\x39\xe6\x45\x37\x72\xb0\x75\x81\x1d\x8f\xad\x0d\x1d\x69\x27\xc1\x20\xbb\x5e\xe8\x97\x2b\x0d\x3e\x21\x37\x4c\x9c\x92\x1b\x09\xd1\xb0\x36\x6f\x10\xb6\x51\x73\x99\x2d" :: ByteString)-bobPublic    = throwCryptoError $ Ed448.publicKey ("\x3e\xb7\xa8\x29\xb0\xcd\x20\xf5\xbc\xfc\x0b\x59\x9b\x6f\xec\xcf\x6d\xa4\x62\x71\x07\xbd\xb0\xd4\xf3\x45\xb4\x30\x27\xd8\xb9\x72\xfc\x3e\x34\xfb\x42\x32\xa1\x3c\xa7\x06\xdc\xb5\x7a\xec\x3d\xae\x07\xbd\xc1\xc6\x7b\xf3\x36\x09" :: ByteString)-aliceMultBob = "\x07\xff\xf4\x18\x1a\xc6\xcc\x95\xec\x1c\x16\xa9\x4a\x0f\x74\xd1\x2d\xa2\x32\xce\x40\xa7\x75\x52\x28\x1d\x28\x2b\xb6\x0c\x0b\x56\xfd\x24\x64\xc3\x35\x54\x39\x36\x52\x1c\x24\x40\x30\x85\xd5\x9a\x44\x9a\x50\x37\x51\x4a\x87\x9d" :: ByteString--katTests :: [TestTree]-katTests =-    [ testCase "0" (aliceMultBob @=? B.convert (Ed448.dh alicePublic bobPrivate))-    , testCase "1" (aliceMultBob @=? B.convert (Ed448.dh bobPublic alicePrivate))-    , testCase "2" (alicePublic  @=? Ed448.toPublic alicePrivate)-    , testCase "3" (bobPublic    @=? Ed448.toPublic bobPrivate)-    ]--tests = testGroup "Ed448"-    [ testGroup "KATs" katTests-    ]
+ tests/KAT_OTP.hs view
@@ -0,0 +1,102 @@+{-# LANGUAGE OverloadedStrings #-}+++module KAT_OTP+    ( tests+    )+where++import Crypto.Hash.Algorithms (SHA1(..), SHA256(..), SHA512(..))+import Crypto.OTP+import Data.ByteString (ByteString)+import Imports++-- | Test values from Appendix D of http://tools.ietf.org/html/rfc4226+hotpExpected :: [(Word64, Word32)]+hotpExpected =+    [ (0, 755224)+    , (1, 287082)+    , (3, 969429)+    , (4, 338314)+    , (5, 254676)+    , (6, 287922)+    , (7, 162583)+    , (8, 399871)+    , (9, 520489)+    ]++-- | Test data from Appendix B of http://tools.ietf.org/html/rfc6238+-- Note that the shared keys for the non SHA-1 values are actually+-- different (see the errata, or the Java example code).+totpSHA1Expected :: [(Word64, Word32)]+totpSHA1Expected =+    [ (59        , 94287082)+    , (1111111109, 07081804)+    , (1111111111, 14050471)+    , (1234567890, 89005924)+    , (2000000000, 69279037)+    , (20000000000, 65353130)+    ]++totpSHA256Expected :: [(Word64, Word32)]+totpSHA256Expected =+    [ (59        , 46119246)+    , (1111111109, 68084774)+    , (1111111111, 67062674)+    , (1234567890, 91819424)+    , (2000000000, 90698825)+    , (20000000000, 77737706)+    ]++totpSHA512Expected :: [(Word64, Word32)]+totpSHA512Expected =+    [ (59        , 90693936)+    , (1111111109, 25091201)+    , (1111111111, 99943326)+    , (1234567890, 93441116)+    , (2000000000, 38618901)+    , (20000000000, 47863826)+    ]++otpKey = "12345678901234567890" :: ByteString+totpSHA256Key = "12345678901234567890123456789012" :: ByteString+totpSHA512Key = "1234567890123456789012345678901234567890123456789012345678901234" :: ByteString++makeKATs otp expected = concatMap (makeTest otp) (zip3 is counts otps)+  where+    is :: [Int]+    is = [1..]++    counts = map fst expected+    otps  = map snd expected++makeTest otp (i, count, password) =+    [ testCase (show i) (assertEqual "" password (otp count))+    ]++Right totpSHA1Params = mkTOTPParams SHA1 0 30 OTP8 TwoSteps+Right totpSHA256Params = mkTOTPParams SHA256 0 30 OTP8 TwoSteps+Right totpSHA512Params = mkTOTPParams SHA512 0 30 OTP8 TwoSteps++-- resynching with the expected value should just return the current counter + 1+prop_resyncExpected ctr window = resynchronize SHA1 OTP6 window key ctr (otp, []) == Just (ctr + 1)+  where+    key = "1234" :: ByteString+    otp = hotp SHA1 OTP6 key ctr+++tests = testGroup "OTP"+    [ testGroup "HOTP"+        [ testGroup "KATs" (makeKATs (hotp SHA1 OTP6 otpKey) hotpExpected)+        , testGroup "properties"+            [ testProperty "resync-expected" prop_resyncExpected+            ]+        ]+    , testGroup "TOTP"+        [ testGroup "KATs"+            [ testGroup "SHA1" (makeKATs (totp totpSHA1Params otpKey . fromIntegral) totpSHA1Expected)+            , testGroup "SHA256" (makeKATs (totp totpSHA256Params totpSHA256Key . fromIntegral) totpSHA256Expected)+            , testGroup "SHA512" (makeKATs (totp totpSHA512Params totpSHA512Key . fromIntegral) totpSHA512Expected)+            ]+        ]+    ]
tests/KAT_PBKDF2.hs view
@@ -3,7 +3,7 @@ -- from <http://www.ietf.org/rfc/rfc6070.txt> module KAT_PBKDF2 (tests) where -import Crypto.Hash (SHA1(..), SHA256(..))+import Crypto.Hash (SHA1(..), SHA256(..), SHA512(..)) import qualified Crypto.KDF.PBKDF2 as PBKDF2  import Data.ByteString (ByteString)@@ -42,14 +42,48 @@         )     ] +vectors_hmac_sha512 :: [ (VectParams, ByteString) ]+vectors_hmac_sha512 =+    [   ( ("password", "salt", 1, 32)+        , "\x86\x7f\x70\xcf\x1a\xde\x02\xcf\xf3\x75\x25\x99\xa3\xa5\x3d\xc4\xaf\x34\xc7\xa6\x69\x81\x5a\xe5\xd5\x13\x55\x4e\x1c\x8c\xf2\x52"+        )+    ,   ( ("password", "salt", 2, 32)+        ,  "\xe1\xd9\xc1\x6a\xa6\x81\x70\x8a\x45\xf5\xc7\xc4\xe2\x15\xce\xb6\x6e\x01\x1a\x2e\x9f\x00\x40\x71\x3f\x18\xae\xfd\xb8\x66\xd5\x3c"+        )+    ,   ( ("password", "salt", 4096, 32)+        ,  "\xd1\x97\xb1\xb3\x3d\xb0\x14\x3e\x01\x8b\x12\xf3\xd1\xd1\x47\x9e\x6c\xde\xbd\xcc\x97\xc5\xc0\xf8\x7f\x69\x02\xe0\x72\xf4\x57\xb5"+        )+    ,   ( ("passwordPASSWORDpassword", "saltSALTsaltSALTsaltSALTsaltSALTsalt", 1, 72)+        , "n\x23\xf2\x76\x38\x08\x4b\x0f\x7e\xa1\x73\x4e\x0d\x98\x41\xf5\x5d\xd2\x9e\xa6\x0a\x83\x44\x66\xf3\x39\x6b\xac\x80\x1f\xac\x1e\xeb\x63\x80\x2f\x03\xa0\xb4\xac\xd7\x60\x3e\x36\x99\xc8\xb7\x44\x37\xbe\x83\xff\x01\xad\x7f\x55\xda\xc1\xef\x60\xf4\xd5\x64\x80\xc3\x5e\xe6\x8f\xd5\x2c\x69\x36"+        )+    ]++ tests = testGroup "PBKDF2"     [ testGroup "KATs-HMAC-SHA1" (katTests (PBKDF2.prfHMAC SHA1) vectors_hmac_sha1)+    , testGroup "KATs-HMAC-SHA1 (fast)" (katTestFastPBKDF2_SHA1 vectors_hmac_sha1)     , testGroup "KATs-HMAC-SHA256" (katTests (PBKDF2.prfHMAC SHA256) vectors_hmac_sha256)+    , testGroup "KATs-HMAC-SHA256 (fast)" (katTestFastPBKDF2_SHA256 vectors_hmac_sha256)+    , testGroup "KATs-HMAC-SHA512" (katTests (PBKDF2.prfHMAC SHA512) vectors_hmac_sha512)+    , testGroup "KATs-HMAC-SHA512 (fast)" (katTestFastPBKDF2_SHA512 vectors_hmac_sha512)     ]   where katTests prf vects = map (toKatTest prf) $ zip is vects          toKatTest prf (i, ((pass, salt, iter, dkLen), output)) =             testCase (show i) (output @=? PBKDF2.generate prf (PBKDF2.Parameters iter dkLen) pass salt)++        katTestFastPBKDF2_SHA1 = map toKatTestFastPBKDF2_SHA1 . zip is+        toKatTestFastPBKDF2_SHA1 (i, ((pass, salt, iter, dkLen), output)) =+            testCase (show i) (output @=? PBKDF2.fastPBKDF2_SHA1 (PBKDF2.Parameters iter dkLen) pass salt)++        katTestFastPBKDF2_SHA256 = map toKatTestFastPBKDF2_SHA256 . zip is+        toKatTestFastPBKDF2_SHA256 (i, ((pass, salt, iter, dkLen), output)) =+            testCase (show i) (output @=? PBKDF2.fastPBKDF2_SHA256 (PBKDF2.Parameters iter dkLen) pass salt)++        katTestFastPBKDF2_SHA512 = map toKatTestFastPBKDF2_SHA512 . zip is+        toKatTestFastPBKDF2_SHA512 (i, ((pass, salt, iter, dkLen), output)) =+            testCase (show i) (output @=? PBKDF2.fastPBKDF2_SHA512 (PBKDF2.Parameters iter dkLen) pass salt)+          is :: [Int]         is = [1..]
tests/Number.hs view
@@ -42,17 +42,19 @@          in 0 <= r && r < range     , testProperty "generate-prime" $ \testDRG (Int0_2901 baseBits') ->         let baseBits = baseBits' `mod` 800-            bits  = 48 + baseBits -- no point generating lower than 48 bits ..+            bits  = 5 + baseBits -- generating lower than 5 bits causes an error ..             prime = withTestDRG testDRG $ generatePrime bits-        -- with small base bits numbers, the probability that we "cross" this bit size ness-        -- to the next is quite high, as the number generated has two highest bit set.-        ---         in bits == numBits prime || (if baseBits < 64 then (bits + 1) == numBits prime else False)+         in bits == numBits prime+    , testProperty "generate-safe-prime" $ \testDRG (Int0_2901 baseBits') ->+        let baseBits = baseBits' `mod` 200+            bits = 6 + baseBits+            prime = withTestDRG testDRG $ generateSafePrime bits+         in bits == numBits prime     , testProperty "marshalling" $ \qaInt ->         getQAInteger qaInt == os2ip (i2osp (getQAInteger qaInt) :: Bytes)     , testGroup "marshalling-kat-to-bytearray" $ map toSerializationKat $ zip [katZero..] serializationVectors     , testGroup "marshalling-kat-to-integer" $ map toSerializationKatInteger $ zip [katZero..] serializationVectors-    ] +    ]   where     toSerializationKat (i, (sz, n, ba)) = testCase (show i) (ba @=? i2ospOf_ sz n)     toSerializationKatInteger (i, (_, n, ba)) = testCase (show i) (n @=? os2ip ba)
tests/Tests.hs view
@@ -16,10 +16,12 @@ import qualified KAT_CMAC import qualified KAT_HMAC import qualified KAT_HKDF+import qualified KAT_Argon2 import qualified KAT_PBKDF2 import qualified KAT_Curve25519-import qualified KAT_Ed448+import qualified KAT_Curve448 import qualified KAT_Ed25519+import qualified KAT_OTP import qualified KAT_PubKey import qualified KAT_Scrypt -- symmetric cipher --------------------@@ -47,14 +49,16 @@         , KAT_HMAC.tests         ]     , KAT_Curve25519.tests-    , KAT_Ed448.tests+    , KAT_Curve448.tests     , KAT_Ed25519.tests     , KAT_PubKey.tests+    , KAT_OTP.tests     , testGroup "KDF"         [ KAT_PBKDF2.tests         , KAT_Scrypt.tests         , BCrypt.tests         , KAT_HKDF.tests+        , KAT_Argon2.tests         ]     , testGroup "block-cipher"         [ KAT_AES.tests