Remove sec module from 2.7 release.
authorlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 14 Jun 2011 07:19:04 +0000 (07:19 +0000)
committerlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 14 Jun 2011 07:19:04 +0000 (07:19 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/branches/2.7@4959 38d2e660-2303-0410-9eaa-f027e97ec537

51 files changed:
bertos/sec/benchmarks.c [deleted file]
bertos/sec/benchmarks.h [deleted file]
bertos/sec/cipher.c [deleted file]
bertos/sec/cipher.h [deleted file]
bertos/sec/cipher/aes.c [deleted file]
bertos/sec/cipher/aes.h [deleted file]
bertos/sec/cipher/aes_f32.h [deleted file]
bertos/sec/cipher/aes_f8.h [deleted file]
bertos/sec/cipher/aes_test.c [deleted file]
bertos/sec/cipher/blowfish.c [deleted file]
bertos/sec/cipher/blowfish.h [deleted file]
bertos/sec/cipher/blowfish_test.c [deleted file]
bertos/sec/entropy.h [deleted file]
bertos/sec/entropy/yarrow_pool.c [deleted file]
bertos/sec/entropy/yarrow_pool.h [deleted file]
bertos/sec/hash.h [deleted file]
bertos/sec/hash/md5.c [deleted file]
bertos/sec/hash/md5.h [deleted file]
bertos/sec/hash/md5_test.c [deleted file]
bertos/sec/hash/ripemd.c [deleted file]
bertos/sec/hash/ripemd.h [deleted file]
bertos/sec/hash/ripemd_test.c [deleted file]
bertos/sec/hash/sha1.c [deleted file]
bertos/sec/hash/sha1.h [deleted file]
bertos/sec/hash/sha1_test.c [deleted file]
bertos/sec/kdf.h [deleted file]
bertos/sec/kdf/pbkdf1.c [deleted file]
bertos/sec/kdf/pbkdf1.h [deleted file]
bertos/sec/kdf/pbkdf1_test.c [deleted file]
bertos/sec/kdf/pbkdf2.c [deleted file]
bertos/sec/kdf/pbkdf2.h [deleted file]
bertos/sec/kdf/pbkdf2_test.c [deleted file]
bertos/sec/mac.h [deleted file]
bertos/sec/mac/hmac.c [deleted file]
bertos/sec/mac/hmac.h [deleted file]
bertos/sec/mac/hmac_test.c [deleted file]
bertos/sec/mac/omac.c [deleted file]
bertos/sec/mac/omac.h [deleted file]
bertos/sec/mac/omac_test.c [deleted file]
bertos/sec/prng.h [deleted file]
bertos/sec/prng/isaac.c [deleted file]
bertos/sec/prng/isaac.h [deleted file]
bertos/sec/prng/x917.c [deleted file]
bertos/sec/prng/x917.h [deleted file]
bertos/sec/prng/yarrow.c [deleted file]
bertos/sec/prng/yarrow.h [deleted file]
bertos/sec/random.c [deleted file]
bertos/sec/random.h [deleted file]
bertos/sec/random_p.h [deleted file]
bertos/sec/util.c [deleted file]
bertos/sec/util.h [deleted file]

diff --git a/bertos/sec/benchmarks.c b/bertos/sec/benchmarks.c
deleted file mode 100644 (file)
index d0e3cdf..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#include "benchmarks.h"
-#include <drv/timer.h>
-#include <string.h>
-
-static uint8_t buf[512];
-
-void hash_benchmark(Hash *h, const char *hname, int numk)
-{
-       memset(buf, 0x12, sizeof(buf));
-       ticks_t t = timer_clock();
-
-       for (int j=0;j<64;++j) {
-               hash_begin(h);
-               for (int i=0; i<numk*2; ++i)
-                       hash_update(h, buf, 512);
-               hash_final(h);
-       }
-
-       t = timer_clock() - t;
-
-       utime_t usec = ticks_to_us(t) / 64;
-       kprintf("%s @ %ldMhz: %s of %dKiB of data: %lu.%lu ms\n", CPU_CORE_NAME, CPU_FREQ/1000000, hname, numk, (usec/1000), (usec % 1000));
-}
-
-void prng_benchmark(PRNG *prng, const char *hname, int numbytes)
-{
-       memset(buf, 0x12, sizeof(buf));
-
-       ASSERT(sizeof(buf) >= prng_seed_len(prng));
-       prng_reseed(prng, buf);
-
-       ticks_t t = timer_clock();
-       enum { CYCLES = 2048 };
-
-       for (int j=0;j<CYCLES;++j)
-       {
-               for (int i=0; i<(numbytes+511)/512-1; ++i)
-                       prng_generate(prng, buf, 512);
-               if (numbytes % 512)
-                       prng_generate(prng, buf, numbytes%512);
-       }
-
-       t = timer_clock() - t;
-
-       utime_t usec = ticks_to_us(t) / CYCLES;
-       kprintf("%s @ %ldMhz: %s generation of %d random bytes: %lu.%lu ms\n", CPU_CORE_NAME, CPU_FREQ/1000000, hname, numbytes, (usec/1000), (usec % 1000));
-       kprintf("Sample of random data:\n");
-       kdump(buf, MIN(numbytes, 64));
-}
-
-void cipher_benchmark(BlockCipher *c, const char *cname, int numbytes)
-{
-       memset(buf, 0x12, sizeof(buf));
-
-       ASSERT(sizeof(buf) >= cipher_key_len(c));
-       cipher_set_key(c, buf);
-
-       uint8_t iv[cipher_block_len(c)];
-       memset(iv, 0, sizeof(iv));
-
-       ticks_t t = timer_clock();
-       enum { CYCLES = 64 };
-
-       for (int j=0;j<CYCLES;++j)
-       {
-               cipher_cbc_begin(c, iv);
-               int numblocks = (numbytes / cipher_block_len(c)) + 1;
-               for (int i=0; i<numblocks; ++i)
-                       cipher_cbc_encrypt(c, buf);
-       }
-
-       t = timer_clock() - t;
-
-       utime_t usec = ticks_to_us(t) / CYCLES;
-       kprintf("%s @ %ldMhz: %s-CBC of %d bytes: %lu.%lu ms (%d KiB/s)\n",
-                       CPU_CORE_NAME, CPU_FREQ/1000000,
-                       cname, numbytes,
-                       (usec/1000), (usec % 1000),
-                       (uint32_t)(numbytes * (CYCLES * 1000000 / 1024) / ticks_to_us(t)));
-}
diff --git a/bertos/sec/benchmarks.h b/bertos/sec/benchmarks.h
deleted file mode 100644 (file)
index 23d078f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef SEC_BENCHMARKS_H
-#define SEC_BENCHMARKS_H
-
-#include <sec/hash.h>
-#include <sec/prng.h>
-#include <sec/cipher.h>
-
-void hash_benchmark(Hash *h, const char *hname, int numk);
-void prng_benchmark(PRNG *prng, const char *hname, int numk);
-void cipher_benchmark(BlockCipher *c, const char *cname, int msg_len);
-
-#endif /* SEC_BENCHMARKS_H */
diff --git a/bertos/sec/cipher.c b/bertos/sec/cipher.c
deleted file mode 100644 (file)
index ba4ae98..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for symmetric block ciphers.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "cipher.h"
-#include <sec/util.h>
-
-void cipher_cbc_encrypt(BlockCipher *c, void *block)
-{
-       xor_block(c->buf, c->buf, block, c->block_len);
-       c->enc_block(c, c->buf);
-       memcpy(block, c->buf, c->block_len);
-}
-
-void cipher_cbc_decrypt(BlockCipher *c, void *block)
-{
-       uint8_t temp[c->block_len];
-       memcpy(temp, block, c->block_len);
-
-       c->dec_block(c, block);
-       xor_block(block, block, c->buf, c->block_len);
-
-       memcpy(c->buf, temp, c->block_len);
-}
-
-static void ctr_increment(void *buf, size_t len)
-{
-       uint8_t *data = (uint8_t*)buf;
-       while (len--)
-               if (LIKELY(++data[len] != 0))
-                       return;
-}
-
-void cipher_ctr_step(BlockCipher *c, void *block)
-{
-       memcpy(block, c->buf, c->block_len);
-       c->enc_block(c, block);
-       ctr_increment(c->buf, c->block_len);
-}
-
-void cipher_ctr_encrypt(BlockCipher *c, void *block)
-{
-       uint8_t temp[c->block_len];
-
-       cipher_ctr_step(c, temp);
-       xor_block(block, block, temp, c->block_len);
-
-       PURGE(temp);
-}
-
-void cipher_ctr_decrypt(BlockCipher *c, void *block)
-{
-       cipher_ctr_encrypt(c, block);
-}
-
-static void ofb_step(BlockCipher *c)
-{
-       c->enc_block(c, c->buf);
-}
-
-void cipher_ofb_encrypt(BlockCipher *c, void *block)
-{
-       ofb_step(c);
-       xor_block(block, block, c->buf, c->block_len);
-}
-
-void cipher_ofb_decrypt(BlockCipher *c, void *block)
-{
-       cipher_ofb_encrypt(c, block);
-}
diff --git a/bertos/sec/cipher.h b/bertos/sec/cipher.h
deleted file mode 100644 (file)
index 22eb313..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for symmetric block ciphers.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_CIPHER_H
-#define SEC_CIPHER_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-typedef struct BlockCipher
-{
-       void (*set_key)(struct BlockCipher *c, const void *key, size_t len);
-       void (*enc_block)(struct BlockCipher *c, void *block);
-       void (*dec_block)(struct BlockCipher *c, void *block);
-
-       void *buf;
-       uint8_t key_len;
-       uint8_t block_len;
-} BlockCipher;
-
-
-/**
- * Return the key length (in bytes).
- *
- * In case of ciphers that allow a variabile key size with a fixed state
- * (eg: Blowfish), this returns the preferred key length.
- */
-INLINE size_t cipher_key_len(BlockCipher *c)
-{
-       return c->key_len;
-}
-
-/**
- * Return the block length (in bytes)
- */
-INLINE size_t cipher_block_len(BlockCipher *c)
-{
-       return c->block_len;
-}
-
-/**
- * Set the current key used by the cipher.
- *
- * \note the buffer pointed by \a key is not modified and it is
- * not needed anymore after this call returns. Its lenght must match
- * the value returned by \a cipher_key_len().
- */
-INLINE void cipher_set_key(BlockCipher *c, const void *key)
-{
-       ASSERT(c->set_key);
-       c->set_key(c, key, c->key_len);
-}
-
-/**
- * Set the current key (of variable size) used by the cipher.
- *
- * This function is useful for ciphers that allow a variable size for the key
- * (even with a fixed state). For all the other ciphers, the length must
- * match the value returned by \a cipher_key_len().
- *
- * \note the buffer pointed by \a key is not modified and it is
- * not needed anymore after this call returns.
- */
-INLINE void cipher_set_vkey(BlockCipher *c, const void *key, size_t len)
-{
-       ASSERT(c->set_key);
-       c->set_key(c, key, len);
-}
-
-/*********************************************************************************/
-/* ECB mode                                                                      */
-/*********************************************************************************/
-
-/**
- * Encrypt a block (in-place) using the current key in ECB mode.
- */
-INLINE void cipher_ecb_encrypt(BlockCipher *c, void *block)
-{
-       ASSERT(c->enc_block);
-       c->enc_block(c, block);
-}
-
-/**
- * Decrypt a block (in-place) using the current key in ECB mode.
- */
-INLINE void cipher_ecb_decrypt(BlockCipher *c, void *block)
-{
-       ASSERT(c->dec_block);
-       c->dec_block(c, block);
-}
-
-
-/*********************************************************************************/
-/* CBC mode                                                                      */
-/*********************************************************************************/
-
-/**
- * Initialize CBC by setting the IV.
- *
- * \note the memory pointed by \a iv will be used and modified by the CBC
- * functions. It is caller's responsibility to keep it available until there is
- * no more CBC work to do.
- */
-INLINE void cipher_cbc_begin(BlockCipher *c, void *iv)
-{
-       c->buf = iv;
-}
-
-/**
- * Encrypt a block (in-place) using the current key in CBC mode.
- */
-void cipher_cbc_encrypt(BlockCipher *c, void *block);
-
-/**
- * Decrypt a block (in-place) using the current key in CBC mode.
- */
-void cipher_cbc_decrypt(BlockCipher *c, void *block);
-
-
-
-/*********************************************************************************/
-/* CTR mode                                                                      */
-/*********************************************************************************/
-
-/**
- * Initialize CTR by setting the counter.
- *
- * \note the memory pointed by \a counter will be used and modified (incremented)
- * by the CTR functions. It is caller's responsibility to keep it available until
- * there is no more CTR work to do.
- */
-INLINE void cipher_ctr_begin(BlockCipher *c, void *counter)
-{
-       c->buf = counter;
-}
-
-/**
- * Encrypt a block (in-place) using the current key in CTR mode.
- */
-void cipher_ctr_encrypt(BlockCipher *c, void *block);
-
-/**
- * Decrypt a block (in-place) using the current key in CTR mode.
- */
-void cipher_ctr_decrypt(BlockCipher *c, void *block);
-
-/**
- * Generate the crypted stream block in CTR mode for the current
- * counter, and then bump it.
- *
- * This function is basically the core CTR operation, without the final
- * XOR pass with the plaintext or ciphertext. For normal CTR usage,
- * you never need to call it.
- */
-void cipher_ctr_step(BlockCipher *c, void *block);
-
-
-/*********************************************************************************/
-/* OFB mode                                                                      */
-/*********************************************************************************/
-
-/**
- * Initialize OFB by setting the IV.
- *
- * \note the memory pointed by \a iv will be used and modified by the OFB
- * functions. It is caller's responsibility to keep it available until there is
- * no more OFB work to do.
- */
-INLINE void cipher_ofb_begin(BlockCipher *c, void *iv)
-{
-       c->buf = iv;
-}
-
-/**
- * Encrypt a block (in-place) using the current key in OFB mode.
- */
-void cipher_ofb_encrypt(BlockCipher *c, void *block);
-
-/**
- * Decrypt a block (in-place) using the current key in OFB mode.
- */
-void cipher_ofb_decrypt(BlockCipher *c, void *block);
-
-
-#endif /* SEC_CIPHER_H */
diff --git a/bertos/sec/cipher/aes.c b/bertos/sec/cipher/aes.c
deleted file mode 100644 (file)
index 53b8510..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief AES Advanced Encryption Standard implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "aes"
- */
-
-
-#include "aes.h"
-#include <cfg/compiler.h>
-#include <cpu/byteorder.h>
-
-#include <string.h>
-
-// AES only supports Nb=4
-#define Nb 4                   // number of columns in the state & expanded key
-
-typedef struct
-{
-       BlockCipher c;
-       uint8_t num_rounds;
-       int8_t key_status;
-       uint8_t _dummy1;
-       uint8_t _dummy2;
-       uint8_t expkey[0];
-} AES_Context;
-
-
-#if CPU_REG_BITS == 32
-
-// 32-bit optimized implementation
-#include "aes_f32.h"
-
-#else
-
-// Full 8-bit implementation
-#include "aes_f8.h"
-
-#endif
-
-
-/******************************************************************************/
-
-void AES128_init(AES128_Context *aes_)
-{
-       AES_Context *aes = (AES_Context *)aes_;
-       aes->c.set_key = AES_expandKey;
-       aes->c.enc_block = AES_encrypt;
-       aes->c.dec_block = AES_decrypt;
-       aes->c.block_len = Nb*4;
-       aes->c.key_len = 16;
-       aes->num_rounds = 10;
-}
-
-void AES192_init(AES192_Context *aes_)
-{
-       AES_Context *aes = (AES_Context *)aes_;
-       aes->c.set_key = AES_expandKey;
-       aes->c.enc_block = AES_encrypt;
-       aes->c.dec_block = AES_decrypt;
-       aes->c.block_len = Nb*4;
-       aes->c.key_len = 24;
-       aes->num_rounds = 12;
-}
-
-void AES256_init(AES256_Context *aes_)
-{
-       AES_Context *aes = (AES_Context *)aes_;
-       aes->c.set_key = AES_expandKey;
-       aes->c.enc_block = AES_encrypt;
-       aes->c.dec_block = AES_decrypt;
-       aes->c.block_len = Nb*4;
-       aes->c.key_len = 32;
-       aes->num_rounds = 14;
-}
diff --git a/bertos/sec/cipher/aes.h b/bertos/sec/cipher/aes.h
deleted file mode 100644 (file)
index 7be6265..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief AES Advanced Encryption Standard implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "aes"
- */
-
-#ifndef SEC_CIPHER_AES_H
-#define SEC_CIPHER_AES_H
-
-#include <sec/cipher.h>
-#include <sec/util.h>
-#include <alloca.h>
-
-typedef struct
-{
-       BlockCipher c;
-       uint32_t status;
-       uint8_t expkey[44*4];
-} AES128_Context;
-
-typedef struct
-{
-       BlockCipher c;
-       uint32_t status;
-       uint8_t expkey[52*4];
-} AES192_Context;
-
-typedef struct
-{
-       BlockCipher c;
-       uint32_t status;
-       uint8_t expkey[60*4];
-} AES256_Context;
-
-void AES128_init(AES128_Context *c);
-void AES192_init(AES192_Context *c);
-void AES256_init(AES256_Context *c);
-
-#define AES128_stackinit(...) \
-       ({ AES128_Context *ctx = alloca(sizeof(AES128_Context)); AES128_init(ctx, ##__VA_ARGS__); &ctx->c; })
-
-#define AES192_stackinit(...) \
-       ({ AES192_Context *ctx = alloca(sizeof(AES192_Context)); AES192_init(ctx, ##__VA_ARGS__); &ctx->c; })
-
-#define AES256_stackinit(...) \
-       ({ AES256_Context *ctx = alloca(sizeof(AES256_Context)); AES256_init(ctx, ##__VA_ARGS__); &ctx->c; })
-
-int AES_testSetup(void);
-int AES_testRun(void);
-int AES_testTearDown(void);
-
-#endif /* SEC_CIPHER_AES_H */
diff --git a/bertos/sec/cipher/aes_f32.h b/bertos/sec/cipher/aes_f32.h
deleted file mode 100644 (file)
index 4fa64a0..0000000
+++ /dev/null
@@ -1,568 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief AES Advanced Encryption Standard implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-/*****************************************************************************/
-// ENCRYPTION TABLES
-/*****************************************************************************/
-
-static const uint32_t TE0[256] =
-{
-    be32_to_cpu(0xc66363a5UL), be32_to_cpu(0xf87c7c84UL), be32_to_cpu(0xee777799UL), be32_to_cpu(0xf67b7b8dUL),
-    be32_to_cpu(0xfff2f20dUL), be32_to_cpu(0xd66b6bbdUL), be32_to_cpu(0xde6f6fb1UL), be32_to_cpu(0x91c5c554UL),
-    be32_to_cpu(0x60303050UL), be32_to_cpu(0x02010103UL), be32_to_cpu(0xce6767a9UL), be32_to_cpu(0x562b2b7dUL),
-    be32_to_cpu(0xe7fefe19UL), be32_to_cpu(0xb5d7d762UL), be32_to_cpu(0x4dababe6UL), be32_to_cpu(0xec76769aUL),
-    be32_to_cpu(0x8fcaca45UL), be32_to_cpu(0x1f82829dUL), be32_to_cpu(0x89c9c940UL), be32_to_cpu(0xfa7d7d87UL),
-    be32_to_cpu(0xeffafa15UL), be32_to_cpu(0xb25959ebUL), be32_to_cpu(0x8e4747c9UL), be32_to_cpu(0xfbf0f00bUL),
-    be32_to_cpu(0x41adadecUL), be32_to_cpu(0xb3d4d467UL), be32_to_cpu(0x5fa2a2fdUL), be32_to_cpu(0x45afafeaUL),
-    be32_to_cpu(0x239c9cbfUL), be32_to_cpu(0x53a4a4f7UL), be32_to_cpu(0xe4727296UL), be32_to_cpu(0x9bc0c05bUL),
-    be32_to_cpu(0x75b7b7c2UL), be32_to_cpu(0xe1fdfd1cUL), be32_to_cpu(0x3d9393aeUL), be32_to_cpu(0x4c26266aUL),
-    be32_to_cpu(0x6c36365aUL), be32_to_cpu(0x7e3f3f41UL), be32_to_cpu(0xf5f7f702UL), be32_to_cpu(0x83cccc4fUL),
-    be32_to_cpu(0x6834345cUL), be32_to_cpu(0x51a5a5f4UL), be32_to_cpu(0xd1e5e534UL), be32_to_cpu(0xf9f1f108UL),
-    be32_to_cpu(0xe2717193UL), be32_to_cpu(0xabd8d873UL), be32_to_cpu(0x62313153UL), be32_to_cpu(0x2a15153fUL),
-    be32_to_cpu(0x0804040cUL), be32_to_cpu(0x95c7c752UL), be32_to_cpu(0x46232365UL), be32_to_cpu(0x9dc3c35eUL),
-    be32_to_cpu(0x30181828UL), be32_to_cpu(0x379696a1UL), be32_to_cpu(0x0a05050fUL), be32_to_cpu(0x2f9a9ab5UL),
-    be32_to_cpu(0x0e070709UL), be32_to_cpu(0x24121236UL), be32_to_cpu(0x1b80809bUL), be32_to_cpu(0xdfe2e23dUL),
-    be32_to_cpu(0xcdebeb26UL), be32_to_cpu(0x4e272769UL), be32_to_cpu(0x7fb2b2cdUL), be32_to_cpu(0xea75759fUL),
-    be32_to_cpu(0x1209091bUL), be32_to_cpu(0x1d83839eUL), be32_to_cpu(0x582c2c74UL), be32_to_cpu(0x341a1a2eUL),
-    be32_to_cpu(0x361b1b2dUL), be32_to_cpu(0xdc6e6eb2UL), be32_to_cpu(0xb45a5aeeUL), be32_to_cpu(0x5ba0a0fbUL),
-    be32_to_cpu(0xa45252f6UL), be32_to_cpu(0x763b3b4dUL), be32_to_cpu(0xb7d6d661UL), be32_to_cpu(0x7db3b3ceUL),
-    be32_to_cpu(0x5229297bUL), be32_to_cpu(0xdde3e33eUL), be32_to_cpu(0x5e2f2f71UL), be32_to_cpu(0x13848497UL),
-    be32_to_cpu(0xa65353f5UL), be32_to_cpu(0xb9d1d168UL), be32_to_cpu(0x00000000UL), be32_to_cpu(0xc1eded2cUL),
-    be32_to_cpu(0x40202060UL), be32_to_cpu(0xe3fcfc1fUL), be32_to_cpu(0x79b1b1c8UL), be32_to_cpu(0xb65b5bedUL),
-    be32_to_cpu(0xd46a6abeUL), be32_to_cpu(0x8dcbcb46UL), be32_to_cpu(0x67bebed9UL), be32_to_cpu(0x7239394bUL),
-    be32_to_cpu(0x944a4adeUL), be32_to_cpu(0x984c4cd4UL), be32_to_cpu(0xb05858e8UL), be32_to_cpu(0x85cfcf4aUL),
-    be32_to_cpu(0xbbd0d06bUL), be32_to_cpu(0xc5efef2aUL), be32_to_cpu(0x4faaaae5UL), be32_to_cpu(0xedfbfb16UL),
-    be32_to_cpu(0x864343c5UL), be32_to_cpu(0x9a4d4dd7UL), be32_to_cpu(0x66333355UL), be32_to_cpu(0x11858594UL),
-    be32_to_cpu(0x8a4545cfUL), be32_to_cpu(0xe9f9f910UL), be32_to_cpu(0x04020206UL), be32_to_cpu(0xfe7f7f81UL),
-    be32_to_cpu(0xa05050f0UL), be32_to_cpu(0x783c3c44UL), be32_to_cpu(0x259f9fbaUL), be32_to_cpu(0x4ba8a8e3UL),
-    be32_to_cpu(0xa25151f3UL), be32_to_cpu(0x5da3a3feUL), be32_to_cpu(0x804040c0UL), be32_to_cpu(0x058f8f8aUL),
-    be32_to_cpu(0x3f9292adUL), be32_to_cpu(0x219d9dbcUL), be32_to_cpu(0x70383848UL), be32_to_cpu(0xf1f5f504UL),
-    be32_to_cpu(0x63bcbcdfUL), be32_to_cpu(0x77b6b6c1UL), be32_to_cpu(0xafdada75UL), be32_to_cpu(0x42212163UL),
-    be32_to_cpu(0x20101030UL), be32_to_cpu(0xe5ffff1aUL), be32_to_cpu(0xfdf3f30eUL), be32_to_cpu(0xbfd2d26dUL),
-    be32_to_cpu(0x81cdcd4cUL), be32_to_cpu(0x180c0c14UL), be32_to_cpu(0x26131335UL), be32_to_cpu(0xc3ecec2fUL),
-    be32_to_cpu(0xbe5f5fe1UL), be32_to_cpu(0x359797a2UL), be32_to_cpu(0x884444ccUL), be32_to_cpu(0x2e171739UL),
-    be32_to_cpu(0x93c4c457UL), be32_to_cpu(0x55a7a7f2UL), be32_to_cpu(0xfc7e7e82UL), be32_to_cpu(0x7a3d3d47UL),
-    be32_to_cpu(0xc86464acUL), be32_to_cpu(0xba5d5de7UL), be32_to_cpu(0x3219192bUL), be32_to_cpu(0xe6737395UL),
-    be32_to_cpu(0xc06060a0UL), be32_to_cpu(0x19818198UL), be32_to_cpu(0x9e4f4fd1UL), be32_to_cpu(0xa3dcdc7fUL),
-    be32_to_cpu(0x44222266UL), be32_to_cpu(0x542a2a7eUL), be32_to_cpu(0x3b9090abUL), be32_to_cpu(0x0b888883UL),
-    be32_to_cpu(0x8c4646caUL), be32_to_cpu(0xc7eeee29UL), be32_to_cpu(0x6bb8b8d3UL), be32_to_cpu(0x2814143cUL),
-    be32_to_cpu(0xa7dede79UL), be32_to_cpu(0xbc5e5ee2UL), be32_to_cpu(0x160b0b1dUL), be32_to_cpu(0xaddbdb76UL),
-    be32_to_cpu(0xdbe0e03bUL), be32_to_cpu(0x64323256UL), be32_to_cpu(0x743a3a4eUL), be32_to_cpu(0x140a0a1eUL),
-    be32_to_cpu(0x924949dbUL), be32_to_cpu(0x0c06060aUL), be32_to_cpu(0x4824246cUL), be32_to_cpu(0xb85c5ce4UL),
-    be32_to_cpu(0x9fc2c25dUL), be32_to_cpu(0xbdd3d36eUL), be32_to_cpu(0x43acacefUL), be32_to_cpu(0xc46262a6UL),
-    be32_to_cpu(0x399191a8UL), be32_to_cpu(0x319595a4UL), be32_to_cpu(0xd3e4e437UL), be32_to_cpu(0xf279798bUL),
-    be32_to_cpu(0xd5e7e732UL), be32_to_cpu(0x8bc8c843UL), be32_to_cpu(0x6e373759UL), be32_to_cpu(0xda6d6db7UL),
-    be32_to_cpu(0x018d8d8cUL), be32_to_cpu(0xb1d5d564UL), be32_to_cpu(0x9c4e4ed2UL), be32_to_cpu(0x49a9a9e0UL),
-    be32_to_cpu(0xd86c6cb4UL), be32_to_cpu(0xac5656faUL), be32_to_cpu(0xf3f4f407UL), be32_to_cpu(0xcfeaea25UL),
-    be32_to_cpu(0xca6565afUL), be32_to_cpu(0xf47a7a8eUL), be32_to_cpu(0x47aeaee9UL), be32_to_cpu(0x10080818UL),
-    be32_to_cpu(0x6fbabad5UL), be32_to_cpu(0xf0787888UL), be32_to_cpu(0x4a25256fUL), be32_to_cpu(0x5c2e2e72UL),
-    be32_to_cpu(0x381c1c24UL), be32_to_cpu(0x57a6a6f1UL), be32_to_cpu(0x73b4b4c7UL), be32_to_cpu(0x97c6c651UL),
-    be32_to_cpu(0xcbe8e823UL), be32_to_cpu(0xa1dddd7cUL), be32_to_cpu(0xe874749cUL), be32_to_cpu(0x3e1f1f21UL),
-    be32_to_cpu(0x964b4bddUL), be32_to_cpu(0x61bdbddcUL), be32_to_cpu(0x0d8b8b86UL), be32_to_cpu(0x0f8a8a85UL),
-    be32_to_cpu(0xe0707090UL), be32_to_cpu(0x7c3e3e42UL), be32_to_cpu(0x71b5b5c4UL), be32_to_cpu(0xcc6666aaUL),
-    be32_to_cpu(0x904848d8UL), be32_to_cpu(0x06030305UL), be32_to_cpu(0xf7f6f601UL), be32_to_cpu(0x1c0e0e12UL),
-    be32_to_cpu(0xc26161a3UL), be32_to_cpu(0x6a35355fUL), be32_to_cpu(0xae5757f9UL), be32_to_cpu(0x69b9b9d0UL),
-    be32_to_cpu(0x17868691UL), be32_to_cpu(0x99c1c158UL), be32_to_cpu(0x3a1d1d27UL), be32_to_cpu(0x279e9eb9UL),
-    be32_to_cpu(0xd9e1e138UL), be32_to_cpu(0xebf8f813UL), be32_to_cpu(0x2b9898b3UL), be32_to_cpu(0x22111133UL),
-    be32_to_cpu(0xd26969bbUL), be32_to_cpu(0xa9d9d970UL), be32_to_cpu(0x078e8e89UL), be32_to_cpu(0x339494a7UL),
-    be32_to_cpu(0x2d9b9bb6UL), be32_to_cpu(0x3c1e1e22UL), be32_to_cpu(0x15878792UL), be32_to_cpu(0xc9e9e920UL),
-    be32_to_cpu(0x87cece49UL), be32_to_cpu(0xaa5555ffUL), be32_to_cpu(0x50282878UL), be32_to_cpu(0xa5dfdf7aUL),
-    be32_to_cpu(0x038c8c8fUL), be32_to_cpu(0x59a1a1f8UL), be32_to_cpu(0x09898980UL), be32_to_cpu(0x1a0d0d17UL),
-    be32_to_cpu(0x65bfbfdaUL), be32_to_cpu(0xd7e6e631UL), be32_to_cpu(0x844242c6UL), be32_to_cpu(0xd06868b8UL),
-    be32_to_cpu(0x824141c3UL), be32_to_cpu(0x299999b0UL), be32_to_cpu(0x5a2d2d77UL), be32_to_cpu(0x1e0f0f11UL),
-    be32_to_cpu(0x7bb0b0cbUL), be32_to_cpu(0xa85454fcUL), be32_to_cpu(0x6dbbbbd6UL), be32_to_cpu(0x2c16163aUL),
-};
-
-static const uint8_t TE4[256] =
-{
-       0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
-       0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
-       0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
-       0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
-       0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
-       0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
-       0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
-       0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
-       0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
-       0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
-       0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
-       0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
-       0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
-       0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
-       0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
-       0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
-       0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
-       0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
-       0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
-       0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
-       0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
-       0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
-       0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
-       0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
-       0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
-       0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
-       0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
-       0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
-       0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
-       0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
-       0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
-       0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-};
-
-static const uint8_t rcon[10] =
-{
-       0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36,
-       /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
-};
-
-#if CPU_BYTE_ORDER == CPU_LITTLE_ENDIAN
-
-#define Te0(x) TE0[x&0xFF]
-#define Te1(x) ROTL(TE0[(x>>8)&0xFF], 8)
-#define Te2(x) ROTL(TE0[(x>>16)&0xFF], 16)
-#define Te3(x) ROTL(TE0[x>>24], 24)
-
-#define Te4_0(x)  ((uint32_t)TE4[x>>24] << 24)
-#define Te4_1(x)  ((uint32_t)TE4[(x>>16)&0xFF] << 16)
-#define Te4_2(x)  ((uint32_t)TE4[(x>>8)&0xFF] << 8)
-#define Te4_3(x)  ((uint32_t)TE4[x&0xFF])
-
-#define RCON(x)   ((uint32_t)rcon[x])
-
-#define TeKeyMix(x)  \
-       (((uint32_t)TE4[(x>>8)&0xFF]) ^ \
-    ((uint32_t)TE4[(x>>16)&0xFF] << 8) ^ \
-    ((uint32_t)TE4[x>>24] << 16) ^ \
-    ((uint32_t)TE4[x&0xFF]) << 24)
-
-#define TeKeyMix2(x) TeKeyMix(ROTL(x, 8))
-
-#else
-
-#define Te0(x) TE0[x>>24]
-#define Te1(x) ROTR(TE0[(x>>16)&0xFF], 8)
-#define Te2(x) ROTR(TE0[(x>>8)&0xFF], 16)
-#define Te3(x) ROTR(TE0[x&0xFF], 24)
-
-#define Te4_0(x)  ((uint32_t)TE4[x&0xFF])
-#define Te4_1(x)  ((uint32_t)TE4[(x>>8)&0xFF] << 8)
-#define Te4_2(x)  ((uint32_t)TE4[(x>>16)&0xFF] << 16)
-#define Te4_3(x)  ((uint32_t)TE4[x>>24] << 24)
-
-#define TeKeyMix(x)  \
-       ((TE4[(x>>16)&0xFF] << 24) ^ \
-    (TE4[(x>>8)&0xFF] << 16) ^ \
-    (TE4[x&0xFF] << 8) ^ \
-    (TE4[x>>24]))
-
-#define TeKeyMix2(x) TeKeyMix(ROTR(x, 8))
-
-#define RCON(x)   (((uint32_t)rcon[x])<<24)
-
-#endif
-
-
-/*****************************************************************************/
-// DECRYPTION TABLES
-/*****************************************************************************/
-
-static const uint32_t TD0[256] =
-{
-    be32_to_cpu(0x51f4a750UL), be32_to_cpu(0x7e416553UL), be32_to_cpu(0x1a17a4c3UL), be32_to_cpu(0x3a275e96UL),
-    be32_to_cpu(0x3bab6bcbUL), be32_to_cpu(0x1f9d45f1UL), be32_to_cpu(0xacfa58abUL), be32_to_cpu(0x4be30393UL),
-    be32_to_cpu(0x2030fa55UL), be32_to_cpu(0xad766df6UL), be32_to_cpu(0x88cc7691UL), be32_to_cpu(0xf5024c25UL),
-    be32_to_cpu(0x4fe5d7fcUL), be32_to_cpu(0xc52acbd7UL), be32_to_cpu(0x26354480UL), be32_to_cpu(0xb562a38fUL),
-    be32_to_cpu(0xdeb15a49UL), be32_to_cpu(0x25ba1b67UL), be32_to_cpu(0x45ea0e98UL), be32_to_cpu(0x5dfec0e1UL),
-    be32_to_cpu(0xc32f7502UL), be32_to_cpu(0x814cf012UL), be32_to_cpu(0x8d4697a3UL), be32_to_cpu(0x6bd3f9c6UL),
-    be32_to_cpu(0x038f5fe7UL), be32_to_cpu(0x15929c95UL), be32_to_cpu(0xbf6d7aebUL), be32_to_cpu(0x955259daUL),
-    be32_to_cpu(0xd4be832dUL), be32_to_cpu(0x587421d3UL), be32_to_cpu(0x49e06929UL), be32_to_cpu(0x8ec9c844UL),
-    be32_to_cpu(0x75c2896aUL), be32_to_cpu(0xf48e7978UL), be32_to_cpu(0x99583e6bUL), be32_to_cpu(0x27b971ddUL),
-    be32_to_cpu(0xbee14fb6UL), be32_to_cpu(0xf088ad17UL), be32_to_cpu(0xc920ac66UL), be32_to_cpu(0x7dce3ab4UL),
-    be32_to_cpu(0x63df4a18UL), be32_to_cpu(0xe51a3182UL), be32_to_cpu(0x97513360UL), be32_to_cpu(0x62537f45UL),
-    be32_to_cpu(0xb16477e0UL), be32_to_cpu(0xbb6bae84UL), be32_to_cpu(0xfe81a01cUL), be32_to_cpu(0xf9082b94UL),
-    be32_to_cpu(0x70486858UL), be32_to_cpu(0x8f45fd19UL), be32_to_cpu(0x94de6c87UL), be32_to_cpu(0x527bf8b7UL),
-    be32_to_cpu(0xab73d323UL), be32_to_cpu(0x724b02e2UL), be32_to_cpu(0xe31f8f57UL), be32_to_cpu(0x6655ab2aUL),
-    be32_to_cpu(0xb2eb2807UL), be32_to_cpu(0x2fb5c203UL), be32_to_cpu(0x86c57b9aUL), be32_to_cpu(0xd33708a5UL),
-    be32_to_cpu(0x302887f2UL), be32_to_cpu(0x23bfa5b2UL), be32_to_cpu(0x02036abaUL), be32_to_cpu(0xed16825cUL),
-    be32_to_cpu(0x8acf1c2bUL), be32_to_cpu(0xa779b492UL), be32_to_cpu(0xf307f2f0UL), be32_to_cpu(0x4e69e2a1UL),
-    be32_to_cpu(0x65daf4cdUL), be32_to_cpu(0x0605bed5UL), be32_to_cpu(0xd134621fUL), be32_to_cpu(0xc4a6fe8aUL),
-    be32_to_cpu(0x342e539dUL), be32_to_cpu(0xa2f355a0UL), be32_to_cpu(0x058ae132UL), be32_to_cpu(0xa4f6eb75UL),
-    be32_to_cpu(0x0b83ec39UL), be32_to_cpu(0x4060efaaUL), be32_to_cpu(0x5e719f06UL), be32_to_cpu(0xbd6e1051UL),
-    be32_to_cpu(0x3e218af9UL), be32_to_cpu(0x96dd063dUL), be32_to_cpu(0xdd3e05aeUL), be32_to_cpu(0x4de6bd46UL),
-    be32_to_cpu(0x91548db5UL), be32_to_cpu(0x71c45d05UL), be32_to_cpu(0x0406d46fUL), be32_to_cpu(0x605015ffUL),
-    be32_to_cpu(0x1998fb24UL), be32_to_cpu(0xd6bde997UL), be32_to_cpu(0x894043ccUL), be32_to_cpu(0x67d99e77UL),
-    be32_to_cpu(0xb0e842bdUL), be32_to_cpu(0x07898b88UL), be32_to_cpu(0xe7195b38UL), be32_to_cpu(0x79c8eedbUL),
-    be32_to_cpu(0xa17c0a47UL), be32_to_cpu(0x7c420fe9UL), be32_to_cpu(0xf8841ec9UL), be32_to_cpu(0x00000000UL),
-    be32_to_cpu(0x09808683UL), be32_to_cpu(0x322bed48UL), be32_to_cpu(0x1e1170acUL), be32_to_cpu(0x6c5a724eUL),
-    be32_to_cpu(0xfd0efffbUL), be32_to_cpu(0x0f853856UL), be32_to_cpu(0x3daed51eUL), be32_to_cpu(0x362d3927UL),
-    be32_to_cpu(0x0a0fd964UL), be32_to_cpu(0x685ca621UL), be32_to_cpu(0x9b5b54d1UL), be32_to_cpu(0x24362e3aUL),
-    be32_to_cpu(0x0c0a67b1UL), be32_to_cpu(0x9357e70fUL), be32_to_cpu(0xb4ee96d2UL), be32_to_cpu(0x1b9b919eUL),
-    be32_to_cpu(0x80c0c54fUL), be32_to_cpu(0x61dc20a2UL), be32_to_cpu(0x5a774b69UL), be32_to_cpu(0x1c121a16UL),
-    be32_to_cpu(0xe293ba0aUL), be32_to_cpu(0xc0a02ae5UL), be32_to_cpu(0x3c22e043UL), be32_to_cpu(0x121b171dUL),
-    be32_to_cpu(0x0e090d0bUL), be32_to_cpu(0xf28bc7adUL), be32_to_cpu(0x2db6a8b9UL), be32_to_cpu(0x141ea9c8UL),
-    be32_to_cpu(0x57f11985UL), be32_to_cpu(0xaf75074cUL), be32_to_cpu(0xee99ddbbUL), be32_to_cpu(0xa37f60fdUL),
-    be32_to_cpu(0xf701269fUL), be32_to_cpu(0x5c72f5bcUL), be32_to_cpu(0x44663bc5UL), be32_to_cpu(0x5bfb7e34UL),
-    be32_to_cpu(0x8b432976UL), be32_to_cpu(0xcb23c6dcUL), be32_to_cpu(0xb6edfc68UL), be32_to_cpu(0xb8e4f163UL),
-    be32_to_cpu(0xd731dccaUL), be32_to_cpu(0x42638510UL), be32_to_cpu(0x13972240UL), be32_to_cpu(0x84c61120UL),
-    be32_to_cpu(0x854a247dUL), be32_to_cpu(0xd2bb3df8UL), be32_to_cpu(0xaef93211UL), be32_to_cpu(0xc729a16dUL),
-    be32_to_cpu(0x1d9e2f4bUL), be32_to_cpu(0xdcb230f3UL), be32_to_cpu(0x0d8652ecUL), be32_to_cpu(0x77c1e3d0UL),
-    be32_to_cpu(0x2bb3166cUL), be32_to_cpu(0xa970b999UL), be32_to_cpu(0x119448faUL), be32_to_cpu(0x47e96422UL),
-    be32_to_cpu(0xa8fc8cc4UL), be32_to_cpu(0xa0f03f1aUL), be32_to_cpu(0x567d2cd8UL), be32_to_cpu(0x223390efUL),
-    be32_to_cpu(0x87494ec7UL), be32_to_cpu(0xd938d1c1UL), be32_to_cpu(0x8ccaa2feUL), be32_to_cpu(0x98d40b36UL),
-    be32_to_cpu(0xa6f581cfUL), be32_to_cpu(0xa57ade28UL), be32_to_cpu(0xdab78e26UL), be32_to_cpu(0x3fadbfa4UL),
-    be32_to_cpu(0x2c3a9de4UL), be32_to_cpu(0x5078920dUL), be32_to_cpu(0x6a5fcc9bUL), be32_to_cpu(0x547e4662UL),
-    be32_to_cpu(0xf68d13c2UL), be32_to_cpu(0x90d8b8e8UL), be32_to_cpu(0x2e39f75eUL), be32_to_cpu(0x82c3aff5UL),
-    be32_to_cpu(0x9f5d80beUL), be32_to_cpu(0x69d0937cUL), be32_to_cpu(0x6fd52da9UL), be32_to_cpu(0xcf2512b3UL),
-    be32_to_cpu(0xc8ac993bUL), be32_to_cpu(0x10187da7UL), be32_to_cpu(0xe89c636eUL), be32_to_cpu(0xdb3bbb7bUL),
-    be32_to_cpu(0xcd267809UL), be32_to_cpu(0x6e5918f4UL), be32_to_cpu(0xec9ab701UL), be32_to_cpu(0x834f9aa8UL),
-    be32_to_cpu(0xe6956e65UL), be32_to_cpu(0xaaffe67eUL), be32_to_cpu(0x21bccf08UL), be32_to_cpu(0xef15e8e6UL),
-    be32_to_cpu(0xbae79bd9UL), be32_to_cpu(0x4a6f36ceUL), be32_to_cpu(0xea9f09d4UL), be32_to_cpu(0x29b07cd6UL),
-    be32_to_cpu(0x31a4b2afUL), be32_to_cpu(0x2a3f2331UL), be32_to_cpu(0xc6a59430UL), be32_to_cpu(0x35a266c0UL),
-    be32_to_cpu(0x744ebc37UL), be32_to_cpu(0xfc82caa6UL), be32_to_cpu(0xe090d0b0UL), be32_to_cpu(0x33a7d815UL),
-    be32_to_cpu(0xf104984aUL), be32_to_cpu(0x41ecdaf7UL), be32_to_cpu(0x7fcd500eUL), be32_to_cpu(0x1791f62fUL),
-    be32_to_cpu(0x764dd68dUL), be32_to_cpu(0x43efb04dUL), be32_to_cpu(0xccaa4d54UL), be32_to_cpu(0xe49604dfUL),
-    be32_to_cpu(0x9ed1b5e3UL), be32_to_cpu(0x4c6a881bUL), be32_to_cpu(0xc12c1fb8UL), be32_to_cpu(0x4665517fUL),
-    be32_to_cpu(0x9d5eea04UL), be32_to_cpu(0x018c355dUL), be32_to_cpu(0xfa877473UL), be32_to_cpu(0xfb0b412eUL),
-    be32_to_cpu(0xb3671d5aUL), be32_to_cpu(0x92dbd252UL), be32_to_cpu(0xe9105633UL), be32_to_cpu(0x6dd64713UL),
-    be32_to_cpu(0x9ad7618cUL), be32_to_cpu(0x37a10c7aUL), be32_to_cpu(0x59f8148eUL), be32_to_cpu(0xeb133c89UL),
-    be32_to_cpu(0xcea927eeUL), be32_to_cpu(0xb761c935UL), be32_to_cpu(0xe11ce5edUL), be32_to_cpu(0x7a47b13cUL),
-    be32_to_cpu(0x9cd2df59UL), be32_to_cpu(0x55f2733fUL), be32_to_cpu(0x1814ce79UL), be32_to_cpu(0x73c737bfUL),
-    be32_to_cpu(0x53f7cdeaUL), be32_to_cpu(0x5ffdaa5bUL), be32_to_cpu(0xdf3d6f14UL), be32_to_cpu(0x7844db86UL),
-    be32_to_cpu(0xcaaff381UL), be32_to_cpu(0xb968c43eUL), be32_to_cpu(0x3824342cUL), be32_to_cpu(0xc2a3405fUL),
-    be32_to_cpu(0x161dc372UL), be32_to_cpu(0xbce2250cUL), be32_to_cpu(0x283c498bUL), be32_to_cpu(0xff0d9541UL),
-    be32_to_cpu(0x39a80171UL), be32_to_cpu(0x080cb3deUL), be32_to_cpu(0xd8b4e49cUL), be32_to_cpu(0x6456c190UL),
-    be32_to_cpu(0x7bcb8461UL), be32_to_cpu(0xd532b670UL), be32_to_cpu(0x486c5c74UL), be32_to_cpu(0xd0b85742UL),
-};
-
-static const uint8_t TD4[256] =
-{
-    0x52, 0x09, 0x6a, 0xd5,
-    0x30, 0x36, 0xa5, 0x38,
-    0xbf, 0x40, 0xa3, 0x9e,
-    0x81, 0xf3, 0xd7, 0xfb,
-    0x7c, 0xe3, 0x39, 0x82,
-    0x9b, 0x2f, 0xff, 0x87,
-    0x34, 0x8e, 0x43, 0x44,
-    0xc4, 0xde, 0xe9, 0xcb,
-    0x54, 0x7b, 0x94, 0x32,
-    0xa6, 0xc2, 0x23, 0x3d,
-    0xee, 0x4c, 0x95, 0x0b,
-    0x42, 0xfa, 0xc3, 0x4e,
-    0x08, 0x2e, 0xa1, 0x66,
-    0x28, 0xd9, 0x24, 0xb2,
-    0x76, 0x5b, 0xa2, 0x49,
-    0x6d, 0x8b, 0xd1, 0x25,
-    0x72, 0xf8, 0xf6, 0x64,
-    0x86, 0x68, 0x98, 0x16,
-    0xd4, 0xa4, 0x5c, 0xcc,
-    0x5d, 0x65, 0xb6, 0x92,
-    0x6c, 0x70, 0x48, 0x50,
-    0xfd, 0xed, 0xb9, 0xda,
-    0x5e, 0x15, 0x46, 0x57,
-    0xa7, 0x8d, 0x9d, 0x84,
-    0x90, 0xd8, 0xab, 0x00,
-    0x8c, 0xbc, 0xd3, 0x0a,
-    0xf7, 0xe4, 0x58, 0x05,
-    0xb8, 0xb3, 0x45, 0x06,
-    0xd0, 0x2c, 0x1e, 0x8f,
-    0xca, 0x3f, 0x0f, 0x02,
-    0xc1, 0xaf, 0xbd, 0x03,
-    0x01, 0x13, 0x8a, 0x6b,
-    0x3a, 0x91, 0x11, 0x41,
-    0x4f, 0x67, 0xdc, 0xea,
-    0x97, 0xf2, 0xcf, 0xce,
-    0xf0, 0xb4, 0xe6, 0x73,
-    0x96, 0xac, 0x74, 0x22,
-    0xe7, 0xad, 0x35, 0x85,
-    0xe2, 0xf9, 0x37, 0xe8,
-    0x1c, 0x75, 0xdf, 0x6e,
-    0x47, 0xf1, 0x1a, 0x71,
-    0x1d, 0x29, 0xc5, 0x89,
-    0x6f, 0xb7, 0x62, 0x0e,
-    0xaa, 0x18, 0xbe, 0x1b,
-    0xfc, 0x56, 0x3e, 0x4b,
-    0xc6, 0xd2, 0x79, 0x20,
-    0x9a, 0xdb, 0xc0, 0xfe,
-    0x78, 0xcd, 0x5a, 0xf4,
-    0x1f, 0xdd, 0xa8, 0x33,
-    0x88, 0x07, 0xc7, 0x31,
-    0xb1, 0x12, 0x10, 0x59,
-    0x27, 0x80, 0xec, 0x5f,
-    0x60, 0x51, 0x7f, 0xa9,
-    0x19, 0xb5, 0x4a, 0x0d,
-    0x2d, 0xe5, 0x7a, 0x9f,
-    0x93, 0xc9, 0x9c, 0xef,
-    0xa0, 0xe0, 0x3b, 0x4d,
-    0xae, 0x2a, 0xf5, 0xb0,
-    0xc8, 0xeb, 0xbb, 0x3c,
-    0x83, 0x53, 0x99, 0x61,
-    0x17, 0x2b, 0x04, 0x7e,
-    0xba, 0x77, 0xd6, 0x26,
-    0xe1, 0x69, 0x14, 0x63,
-    0x55, 0x21, 0x0c, 0x7d,
-};
-
-
-#if CPU_BYTE_ORDER == CPU_LITTLE_ENDIAN
-
-#define XTd0(x) TD0[x]
-#define XTd1(x) ROTL(TD0[x], 8)
-#define XTd2(x) ROTL(TD0[x], 16)
-#define XTd3(x) ROTL(TD0[x], 24)
-
-#define Td0(x)  XTd0(x&0xff)
-#define Td1(x)  XTd1((x>>8)&0xff)
-#define Td2(x)  XTd2((x>>16)&0xff)
-#define Td3(x)  XTd3(x>>24)
-
-#define TdMix_0(x)  TE4[x&0xFF]
-#define TdMix_1(x)  TE4[(x>>8)&0xFF]
-#define TdMix_2(x)  TE4[(x>>16)&0xFF]
-#define TdMix_3(x)  TE4[x>>24]
-
-#define Td4_0(x)  ((uint32_t)TD4[x&0xFF])
-#define Td4_1(x)  ((uint32_t)TD4[(x>>8)&0xFF] << 8)
-#define Td4_2(x)  ((uint32_t)TD4[(x>>16)&0xFF] << 16)
-#define Td4_3(x)  ((uint32_t)TD4[x>>24] << 24)
-
-#else
-
-#define XTd0(x) TD0[x]
-#define XTd1(x) ROTR(TD0[x], 8)
-#define XTd2(x) ROTR(TD0[x], 16)
-#define XTd3(x) ROTR(TD0[x], 24)
-
-#define Td0(x)  XTd0(x>>24)
-#define Td1(x)  XTd1((x>>16)&0xff)
-#define Td2(x)  XTd2((x>>8)&0xff)
-#define Td3(x)  XTd3(x&0xff)
-
-#define TdMix_0(x)  TE4[x>>24]
-#define TdMix_1(x)  TE4[(x>>16)&0xFF]
-#define TdMix_2(x)  TE4[(x>>8)&0xFF]
-#define TdMix_3(x)  TE4[x&0xFF]
-
-#define Td4_0(x)  ((uint32_t)TD4[x>>24] << 24)
-#define Td4_1(x)  ((uint32_t)TD4[(x>>16)&0xFF] << 16)
-#define Td4_2(x)  ((uint32_t)TD4[(x>>8)&0xFF] << 8)
-#define Td4_3(x)  ((uint32_t)TD4[x&0xFF])
-
-#endif
-
-
-/*****************************************************************************/
-// CODE
-/*****************************************************************************/
-
-static void lazy_expandKeyEnc128(uint32_t *k)
-{
-       int i = 0;
-       while (1)
-       {
-               k[4] = k[0] ^ TeKeyMix(k[3]) ^ RCON(i);
-               k[5] = k[1] ^ k[4];
-               k[6] = k[2] ^ k[5];
-               k[7] = k[3] ^ k[6];
-               if (++i == 10)
-                  break;
-               k += 4;
-       }
-}
-
-static void lazy_expandKeyEnc192(uint32_t *k)
-{
-       int i = 0;
-       while (1)
-       {
-               k[ 6] = k[ 0] ^ TeKeyMix(k[5]) ^ RCON(i);
-               k[ 7] = k[ 1] ^ k[ 6];
-               k[ 8] = k[ 2] ^ k[ 7];
-               k[ 9] = k[ 3] ^ k[ 8];
-               if (++i == 8)
-                       break;
-               k[10] = k[ 4] ^ k[ 9];
-               k[11] = k[ 5] ^ k[10];
-               k += 6;
-       }
-}
-
-static void lazy_expandKeyEnc256(uint32_t *k)
-{
-       int i = 0;
-       for (;;)
-       {
-               k[ 8] = k[ 0] ^ TeKeyMix(k[7]) ^ RCON(i);
-               k[ 9] = k[ 1] ^ k[ 8];
-               k[10] = k[ 2] ^ k[ 9];
-               k[11] = k[ 3] ^ k[10];
-               if (++i == 7)
-                       break;
-               k[12] = k[ 4] ^ TeKeyMix2(k[11]);
-               k[13] = k[ 5] ^ k[12];
-               k[14] = k[ 6] ^ k[13];
-               k[15] = k[ 7] ^ k[14];
-               k += 8;
-       }
-}
-
-typedef void (*lazy_expand_handler)(uint32_t *);
-
-static const lazy_expand_handler lazy_expandKeyEnc[3] =
-{
-       lazy_expandKeyEnc128, lazy_expandKeyEnc192, lazy_expandKeyEnc256,
-};
-
-static void lazy_expandKeyDec(uint32_t *k, int len)
-{
-       k += len-5;
-       for (int i=0;i<len-8;++i)
-       {
-               k[0] = XTd0(TdMix_0(k[0])) ^ XTd1(TdMix_1(k[0])) ^ XTd2(TdMix_2(k[0])) ^ XTd3(TdMix_3(k[0]));
-               --k;
-       }
-}
-
-static void AES_expandKey(BlockCipher *c_, const void *key, size_t len)
-{
-       AES_Context *c = (AES_Context *)c_;
-       ASSERT(len == c->c.key_len);
-
-       memcpy (c->expkey, key, c->c.key_len);
-       c->key_status = 0;
-}
-
-static void AES_encrypt(BlockCipher *c_, void *block)
-{
-       AES_Context *c = (AES_Context *)c_;
-       uint32_t *k = c->expkey;
-       uint32_t t0, t1, t2, t3, s0, s1, s2, s3;
-       int Nr = c->num_rounds;
-
-       if (c->key_status <= 0)
-       {
-               lazy_expandKeyEnc[(Nr-10U)/2](k);
-               c->key_status = 1;
-       }
-
-       s0 = ((uint32_t*)block)[0];
-       s1 = ((uint32_t*)block)[1];
-       s2 = ((uint32_t*)block)[2];
-       s3 = ((uint32_t*)block)[3];
-
-       s0 ^= k[0];
-       s1 ^= k[1];
-       s2 ^= k[2];
-       s3 ^= k[3];
-
-       int r = 0;
-       while (1)
-       {
-               k += 4;
-               t0 = Te0(s0)^Te1(s1)^Te2(s2)^Te3(s3)^k[0];
-               t1 = Te0(s1)^Te1(s2)^Te2(s3)^Te3(s0)^k[1];
-               t2 = Te0(s2)^Te1(s3)^Te2(s0)^Te3(s1)^k[2];
-               t3 = Te0(s3)^Te1(s0)^Te2(s1)^Te3(s2)^k[3];
-               if (r == Nr-2)
-                       break;
-               s0 = t0; s1 = t1; s2 = t2; s3 = t3;
-               ++r;
-       }
-       k += 4;
-
-       s0 = Te4_3(t0)^Te4_2(t1)^Te4_1(t2)^Te4_0(t3)^k[0];
-       s1 = Te4_3(t1)^Te4_2(t2)^Te4_1(t3)^Te4_0(t0)^k[1];
-       s2 = Te4_3(t2)^Te4_2(t3)^Te4_1(t0)^Te4_0(t1)^k[2];
-       s3 = Te4_3(t3)^Te4_2(t0)^Te4_1(t1)^Te4_0(t2)^k[3];
-
-       ((uint32_t*)block)[0] = s0;
-       ((uint32_t*)block)[1] = s1;
-       ((uint32_t*)block)[2] = s2;
-       ((uint32_t*)block)[3] = s3;
-}
-
-
-static void AES_decrypt(BlockCipher *c_, void *block)
-{
-       AES_Context *c = (AES_Context *)c_;
-       uint32_t *k = c->expkey;
-       uint32_t t0, t1, t2, t3, s0, s1, s2, s3;
-       uint8_t Nr = c->num_rounds;
-       int klen = (Nr+1)*4;
-
-       if (c->key_status >= 0)
-       {
-               if (c->key_status == 0)
-                       lazy_expandKeyEnc[(Nr-10U)/2](k);
-               lazy_expandKeyDec(k, klen);
-               c->key_status = -1;
-       }
-
-       k += klen-4;
-
-       s0 = ((uint32_t*)block)[0] ^ k[0];
-       s1 = ((uint32_t*)block)[1] ^ k[1];
-       s2 = ((uint32_t*)block)[2] ^ k[2];
-       s3 = ((uint32_t*)block)[3] ^ k[3];
-
-       int r = 0;
-       while (1)
-       {
-               k -= 4;
-
-               t0 = Td0(s0)^Td1(s3)^Td2(s2)^Td3(s1)^k[0];
-               t1 = Td0(s1)^Td1(s0)^Td2(s3)^Td3(s2)^k[1];
-               t2 = Td0(s2)^Td1(s1)^Td2(s0)^Td3(s3)^k[2];
-               t3 = Td0(s3)^Td1(s2)^Td2(s1)^Td3(s0)^k[3];
-
-               if (r == Nr-2)
-                       break;
-               s0 = t0; s1 = t1; s2 = t2; s3 = t3;
-               ++r;
-       }
-
-       k -= 4;
-       s0 = Td4_0(t0)^Td4_1(t3)^Td4_2(t2)^Td4_3(t1)^k[0];
-       s1 = Td4_0(t1)^Td4_1(t0)^Td4_2(t3)^Td4_3(t2)^k[1];
-       s2 = Td4_0(t2)^Td4_1(t1)^Td4_2(t0)^Td4_3(t3)^k[2];
-       s3 = Td4_0(t3)^Td4_1(t2)^Td4_2(t1)^Td4_3(t0)^k[3];
-
-       ((uint32_t*)block)[0] = s0;
-       ((uint32_t*)block)[1] = s1;
-       ((uint32_t*)block)[2] = s2;
-       ((uint32_t*)block)[3] = s3;
-}
diff --git a/bertos/sec/cipher/aes_f8.h b/bertos/sec/cipher/aes_f8.h
deleted file mode 100644 (file)
index 40e9909..0000000
+++ /dev/null
@@ -1,433 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief AES Advanced Encryption Standard implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-// advanced encryption standard
-// author: karl malbrain, malbrain@yahoo.com
-/*
-This work, including the source code, documentation
-and related data, is placed into the public domain.
-
-The orginal author is Karl Malbrain.
-
-THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY
-OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF
-MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE,
-ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE
-RESULTING FROM THE USE, MODIFICATION, OR
-REDISTRIBUTION OF THIS SOFTWARE.
-*/
-
-static uint8_t Sbox[256] = {           // forward s-box
-0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
-0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
-0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
-0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
-0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
-0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
-0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
-0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
-0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
-0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
-0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
-0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
-0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
-0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
-0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
-0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16};
-
-static uint8_t InvSbox[256] = {        // inverse s-box
-0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
-0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
-0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
-0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
-0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
-0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
-0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
-0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
-0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
-0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
-0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
-0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
-0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
-0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
-0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
-0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d};
-
-// combined Xtimes2[Sbox[]]
-static uint8_t Xtime2Sbox[256] = {
-0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91, 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec,
-0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb, 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b,
-0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83, 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a,
-0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f, 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea,
-0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b, 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13,
-0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6, 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85,
-0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11, 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b,
-0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1, 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf,
-0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e, 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6,
-0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b, 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad,
-0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8, 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2,
-0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49, 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10,
-0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97, 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f,
-0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c, 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27,
-0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33, 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5,
-0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0, 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c
-};
-
-// combined Xtimes3[Sbox[]]
-static uint8_t Xtime3Sbox[256] = {
-0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54, 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a,
-0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b, 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b,
-0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f, 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f,
-0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5, 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f,
-0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb, 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97,
-0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed, 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a,
-0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94, 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3,
-0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04, 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d,
-0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39, 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95,
-0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83, 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76,
-0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4, 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b,
-0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0, 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18,
-0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51, 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85,
-0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12, 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9,
-0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7, 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a,
-0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8, 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a
-};
-
-// modular multiplication tables
-// based on:
-
-// Xtime2[x] = (x & 0x80 ? 0x1b : 0) ^ (x + x)
-// Xtime3[x] = x^Xtime2[x];
-#if 0
-static uint8_t Xtime2[256] = {
-0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
-0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
-0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
-0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e,
-0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e,
-0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
-0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,
-0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,
-0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
-0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25,
-0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45,
-0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
-0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85,
-0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5,
-0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
-0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5};
-#endif
-
-static uint8_t Xtime9[256] = {
-0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77,
-0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7,
-0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
-0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc,
-0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01,
-0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91,
-0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a,
-0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa,
-0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b,
-0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b,
-0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0,
-0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30,
-0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed,
-0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d,
-0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
-0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46};
-
-static uint8_t XtimeB[256] = {
-0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69,
-0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9,
-0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
-0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2,
-0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f,
-0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f,
-0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4,
-0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54,
-0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e,
-0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e,
-0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5,
-0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55,
-0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68,
-0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8,
-0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
-0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3};
-
-static uint8_t XtimeD[256] = {
-0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b,
-0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b,
-0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
-0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20,
-0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26,
-0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6,
-0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d,
-0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d,
-0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91,
-0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41,
-0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a,
-0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa,
-0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc,
-0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c,
-0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
-0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97};
-
-static uint8_t XtimeE[256] = {
-0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a,
-0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba,
-0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
-0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61,
-0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7,
-0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17,
-0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c,
-0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc,
-0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b,
-0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb,
-0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0,
-0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20,
-0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6,
-0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56,
-0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
-0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d};
-
-// exchanges columns in each of 4 rows
-// row0 - unchanged, row1- shifted left 1,
-// row2 - shifted left 2 and row3 - shifted left 3
-static void ShiftRows (uint8_t *state)
-{
-       uint8_t tmp;
-
-       // just substitute row 0
-       state[0] = Sbox[state[0]], state[4] = Sbox[state[4]];
-       state[8] = Sbox[state[8]], state[12] = Sbox[state[12]];
-
-       // rotate row 1
-       tmp = Sbox[state[1]], state[1] = Sbox[state[5]];
-       state[5] = Sbox[state[9]], state[9] = Sbox[state[13]], state[13] = tmp;
-
-       // rotate row 2
-       tmp = Sbox[state[2]], state[2] = Sbox[state[10]], state[10] = tmp;
-       tmp = Sbox[state[6]], state[6] = Sbox[state[14]], state[14] = tmp;
-
-       // rotate row 3
-       tmp = Sbox[state[15]], state[15] = Sbox[state[11]];
-       state[11] = Sbox[state[7]], state[7] = Sbox[state[3]], state[3] = tmp;
-}
-
-// restores columns in each of 4 rows
-// row0 - unchanged, row1- shifted right 1,
-// row2 - shifted right 2 and row3 - shifted right 3
-static void InvShiftRows (uint8_t *state)
-{
-       uint8_t tmp;
-
-       // restore row 0
-       state[0] = InvSbox[state[0]], state[4] = InvSbox[state[4]];
-       state[8] = InvSbox[state[8]], state[12] = InvSbox[state[12]];
-
-       // restore row 1
-       tmp = InvSbox[state[13]], state[13] = InvSbox[state[9]];
-       state[9] = InvSbox[state[5]], state[5] = InvSbox[state[1]], state[1] = tmp;
-
-       // restore row 2
-       tmp = InvSbox[state[2]], state[2] = InvSbox[state[10]], state[10] = tmp;
-       tmp = InvSbox[state[6]], state[6] = InvSbox[state[14]], state[14] = tmp;
-
-       // restore row 3
-       tmp = InvSbox[state[3]], state[3] = InvSbox[state[7]];
-       state[7] = InvSbox[state[11]], state[11] = InvSbox[state[15]], state[15] = tmp;
-}
-
-// recombine and mix each row in a column
-static void MixSubColumns (uint8_t *state)
-{
-       uint8_t tmp[4 * Nb];
-
-       // mixing column 0
-       tmp[0] = Xtime2Sbox[state[0]] ^ Xtime3Sbox[state[5]] ^ Sbox[state[10]] ^ Sbox[state[15]];
-       tmp[1] = Sbox[state[0]] ^ Xtime2Sbox[state[5]] ^ Xtime3Sbox[state[10]] ^ Sbox[state[15]];
-       tmp[2] = Sbox[state[0]] ^ Sbox[state[5]] ^ Xtime2Sbox[state[10]] ^ Xtime3Sbox[state[15]];
-       tmp[3] = Xtime3Sbox[state[0]] ^ Sbox[state[5]] ^ Sbox[state[10]] ^ Xtime2Sbox[state[15]];
-
-       // mixing column 1
-       tmp[4] = Xtime2Sbox[state[4]] ^ Xtime3Sbox[state[9]] ^ Sbox[state[14]] ^ Sbox[state[3]];
-       tmp[5] = Sbox[state[4]] ^ Xtime2Sbox[state[9]] ^ Xtime3Sbox[state[14]] ^ Sbox[state[3]];
-       tmp[6] = Sbox[state[4]] ^ Sbox[state[9]] ^ Xtime2Sbox[state[14]] ^ Xtime3Sbox[state[3]];
-       tmp[7] = Xtime3Sbox[state[4]] ^ Sbox[state[9]] ^ Sbox[state[14]] ^ Xtime2Sbox[state[3]];
-
-       // mixing column 2
-       tmp[8] = Xtime2Sbox[state[8]] ^ Xtime3Sbox[state[13]] ^ Sbox[state[2]] ^ Sbox[state[7]];
-       tmp[9] = Sbox[state[8]] ^ Xtime2Sbox[state[13]] ^ Xtime3Sbox[state[2]] ^ Sbox[state[7]];
-       tmp[10]  = Sbox[state[8]] ^ Sbox[state[13]] ^ Xtime2Sbox[state[2]] ^ Xtime3Sbox[state[7]];
-       tmp[11]  = Xtime3Sbox[state[8]] ^ Sbox[state[13]] ^ Sbox[state[2]] ^ Xtime2Sbox[state[7]];
-
-       // mixing column 3
-       tmp[12] = Xtime2Sbox[state[12]] ^ Xtime3Sbox[state[1]] ^ Sbox[state[6]] ^ Sbox[state[11]];
-       tmp[13] = Sbox[state[12]] ^ Xtime2Sbox[state[1]] ^ Xtime3Sbox[state[6]] ^ Sbox[state[11]];
-       tmp[14] = Sbox[state[12]] ^ Sbox[state[1]] ^ Xtime2Sbox[state[6]] ^ Xtime3Sbox[state[11]];
-       tmp[15] = Xtime3Sbox[state[12]] ^ Sbox[state[1]] ^ Sbox[state[6]] ^ Xtime2Sbox[state[11]];
-
-       memcpy (state, tmp, sizeof(tmp));
-}
-
-// restore and un-mix each row in a column
-static void InvMixSubColumns (uint8_t *state)
-{
-       uint8_t tmp[4 * Nb];
-       int i;
-
-       // restore column 0
-       tmp[0] = XtimeE[state[0]] ^ XtimeB[state[1]] ^ XtimeD[state[2]] ^ Xtime9[state[3]];
-       tmp[5] = Xtime9[state[0]] ^ XtimeE[state[1]] ^ XtimeB[state[2]] ^ XtimeD[state[3]];
-       tmp[10] = XtimeD[state[0]] ^ Xtime9[state[1]] ^ XtimeE[state[2]] ^ XtimeB[state[3]];
-       tmp[15] = XtimeB[state[0]] ^ XtimeD[state[1]] ^ Xtime9[state[2]] ^ XtimeE[state[3]];
-
-       // restore column 1
-       tmp[4] = XtimeE[state[4]] ^ XtimeB[state[5]] ^ XtimeD[state[6]] ^ Xtime9[state[7]];
-       tmp[9] = Xtime9[state[4]] ^ XtimeE[state[5]] ^ XtimeB[state[6]] ^ XtimeD[state[7]];
-       tmp[14] = XtimeD[state[4]] ^ Xtime9[state[5]] ^ XtimeE[state[6]] ^ XtimeB[state[7]];
-       tmp[3] = XtimeB[state[4]] ^ XtimeD[state[5]] ^ Xtime9[state[6]] ^ XtimeE[state[7]];
-
-       // restore column 2
-       tmp[8] = XtimeE[state[8]] ^ XtimeB[state[9]] ^ XtimeD[state[10]] ^ Xtime9[state[11]];
-       tmp[13] = Xtime9[state[8]] ^ XtimeE[state[9]] ^ XtimeB[state[10]] ^ XtimeD[state[11]];
-       tmp[2]  = XtimeD[state[8]] ^ Xtime9[state[9]] ^ XtimeE[state[10]] ^ XtimeB[state[11]];
-       tmp[7]  = XtimeB[state[8]] ^ XtimeD[state[9]] ^ Xtime9[state[10]] ^ XtimeE[state[11]];
-
-       // restore column 3
-       tmp[12] = XtimeE[state[12]] ^ XtimeB[state[13]] ^ XtimeD[state[14]] ^ Xtime9[state[15]];
-       tmp[1] = Xtime9[state[12]] ^ XtimeE[state[13]] ^ XtimeB[state[14]] ^ XtimeD[state[15]];
-       tmp[6] = XtimeD[state[12]] ^ Xtime9[state[13]] ^ XtimeE[state[14]] ^ XtimeB[state[15]];
-       tmp[11] = XtimeB[state[12]] ^ XtimeD[state[13]] ^ Xtime9[state[14]] ^ XtimeE[state[15]];
-
-       for( i=0; i < 4 * Nb; i++ )
-               state[i] = InvSbox[tmp[i]];
-}
-
-// encrypt/decrypt columns of the key
-INLINE void AddRoundKey (uint8_t *state, uint8_t *key)
-{
-       xor_block(state, state, key, 16);
-}
-
-static uint8_t Rcon[11] =
-{
-       0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36
-};
-
-// produce Nb bytes for each round
-static void AES_expandKey(BlockCipher *c_, const void *key, size_t len)
-{
-       AES_Context *c = (AES_Context *)c_;
-       ASSERT(len == c->c.key_len);
-
-       uint8_t tmp0, tmp1, tmp2, tmp3, tmp4;
-       uint32_t idx, idx_mod_nk, idx_div_nk;
-       int Nk = c->c.key_len/4;
-       int Nr = c->num_rounds;
-
-       memcpy (c->expkey, key, Nk*4);
-
-       for( idx = Nk, idx_mod_nk = 0, idx_div_nk = 1; idx < Nb * (Nr + 1); idx++ ) {
-               tmp0 = c->expkey[4*idx - 4];
-               tmp1 = c->expkey[4*idx - 3];
-               tmp2 = c->expkey[4*idx - 2];
-               tmp3 = c->expkey[4*idx - 1];
-
-               if( idx_mod_nk == 0 ) {
-                       tmp4 = tmp3;
-                       tmp3 = Sbox[tmp0];
-                       tmp0 = Sbox[tmp1] ^ Rcon[idx_div_nk];
-                       tmp1 = Sbox[tmp2];
-                       tmp2 = Sbox[tmp4];
-               } else if( Nk > 6 && idx_mod_nk == 4 ) {
-                       tmp0 = Sbox[tmp0];
-                       tmp1 = Sbox[tmp1];
-                       tmp2 = Sbox[tmp2];
-                       tmp3 = Sbox[tmp3];
-               }
-
-               c->expkey[4*idx+0] = c->expkey[4*idx - 4*Nk + 0] ^ tmp0;
-               c->expkey[4*idx+1] = c->expkey[4*idx - 4*Nk + 1] ^ tmp1;
-               c->expkey[4*idx+2] = c->expkey[4*idx - 4*Nk + 2] ^ tmp2;
-               c->expkey[4*idx+3] = c->expkey[4*idx - 4*Nk + 3] ^ tmp3;
-
-               idx_mod_nk += 1;
-               if (idx_mod_nk == Nk)
-               {
-                       idx_mod_nk = 0;
-                       ++idx_div_nk;
-               }
-       }
-}
-
-// encrypt one 128 bit block
-static void AES_encrypt(BlockCipher *c_, void *block)
-{
-       AES_Context *c = (AES_Context *)c_;
-       uint8_t Nr = c->num_rounds;
-       uint32_t round;
-
-       AddRoundKey (block, c->expkey);
-
-       for( round = 1; round < Nr + 1; round++ ) {
-               if( round < Nr )
-                       MixSubColumns (block);
-               else
-                       ShiftRows (block);
-
-               AddRoundKey (block, c->expkey + round * Nb * 4);
-       }
-}
-
-static void AES_decrypt(BlockCipher *c_, void *block)
-{
-       AES_Context *c = (AES_Context *)c_;
-       uint8_t Nr = c->num_rounds;
-       uint32_t round;
-
-       AddRoundKey (block, c->expkey + Nr * Nb * 4);
-       InvShiftRows(block);
-
-       for( round = Nr; round--; )
-       {
-               AddRoundKey (block, c->expkey + round * Nb * 4);
-               if( round )
-                       InvMixSubColumns (block);
-       }
-}
diff --git a/bertos/sec/cipher/aes_test.c b/bertos/sec/cipher/aes_test.c
deleted file mode 100644 (file)
index 1d10740..0000000
+++ /dev/null
@@ -1,1097 +0,0 @@
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include "aes.h"
-#include <string.h>
-
-int AES_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int AES_testTearDown(void)
-{
-       return 0;
-}
-
-static const struct ECB128_Test
-{
-       uint8_t key[16];
-       uint8_t pt[16];
-       uint8_t ct[16];
-}
-ECB128_Tests[] =
-{
-{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0e\xdd\x33\xd3\xc6\x21\xe5\x46\x45\x5b\xd8\xba\x14\x18\xbe\xc8", },
-{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\xc3\xf8\x83\x45\x0c\x11\x3c\x64\xca\x42\xe1\x11\x2a\x9e\x87", },
-{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xa1\xda\x77\x0f\x5d\x7a\xc4\xc9\xef\x94\xd8\x22\xaf\xfd\x97", },
-{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x00\x14\xd6\x34\xe2\xb7\x65\x07\x77\xe8\xe8\x4d\x03\xcc\xd8", },
-{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\x7e\x79\xae\xd0\xdb\x7e\x27\x9e\x95\x5b\x5f\x49\x38\x75\xa7", },
-{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9e\xd5\xa7\x51\x36\xa9\x40\xd0\x96\x3d\xa3\x79\xdb\x4a\xf2\x6a", },
-{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x29\x5f\x83\x46\x5c\x77\x55\xe8\xfa\x36\x4b\xac\x6a\x7e\xa5", },
-{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xd7\x58\x25\x6b\x28\xfd\x85\x0a\xd4\x94\x42\x08\xcf\x11\x55", },
-{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xff\xb3\x4c\x74\x3d\xe4\xd8\x8c\xa3\x80\x11\xc9\x90\x89\x0b", },
-{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x58\xf0\xec\xea\x8b\x21\x72\xc0\xc1\x99\x5f\x91\x82\xc0\xf3", },
-{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\x6d\x77\x98\xfa\xc2\x0f\x82\xa8\x82\x3f\x98\x4d\x06\xf7\xf5", },
-{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x1b\xf4\x4f\x2d\x16\xbe\x92\x8c\xa4\x4a\xaf\x7b\x9b\x10\x6b", },
-{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xf1\xa3\x3e\x50\xd4\x0d\x10\x37\x64\xc7\x6b\xd4\xc6\xb6\xf8", },
-{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x37\x05\x0c\x9f\xc0\xd4\x81\x7e\x2d\x69\xde\x87\x8a\xee\x8d", },
-{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x3e\xcb\xe4\xa4\x53\x26\x9a\x0d\xd2\x60\x69\x46\x7f\xb5\xb5", },
-{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xd0\x75\x4f\xe6\x8f\x11\xb9\xe3\x75\xd0\x70\xa6\x08\xc8\x84", },
-{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\xa0\xb3\xe9\x98\xd0\x50\x68\xa5\x39\x97\x78\x40\x52\x00\xb4", },
-{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\x55\x6a\x33\x43\x8d\xb8\x7b\xc4\x1b\x17\x52\xc5\x5e\x5e\x49", },
-{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\xfb\x12\x8d\x3a\x1a\xf6\xe5\x48\x52\x1b\xb9\x62\xbf\x1f\x05", },
-{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x29\x8e\x9c\x1d\xb5\x17\xc2\x15\xfa\xdf\xb7\xd2\xa8\xd6\x91", },
-{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa6\xcb\x76\x1d\x61\xf8\x29\x2d\x0d\xf3\x93\xa2\x79\xad\x03\x80", },
-{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x12\xac\xd8\x9b\x13\xcd\x5f\x87\x26\xe3\x4d\x44\xfd\x48\x61\x08", },
-{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\xb1\x70\x3f\xc5\x7b\xa0\x9f\xe0\xc3\x58\x0f\xeb\xdd\x7e\xd4", },
-{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xde\x11\x72\x2d\x89\x3e\x9f\x91\x21\xc3\x81\xbe\xcc\x1d\xa5\x9a", },
-{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6d\x11\x4c\xcb\x27\xbf\x39\x10\x12\xe8\x97\x4c\x54\x6d\x9b\xf2", },
-{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5c\xe3\x7e\x17\xeb\x46\x46\xec\xfa\xc2\x9b\x9c\xc3\x8d\x93\x40", },
-{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\xc1\xb6\xe2\x15\x71\x22\x05\x6d\x02\x43\xd8\xa1\x65\xcd\xdb", },
-{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x69\x3e\x6a\x59\xd1\x36\x6c\x74\xd8\x23\x56\x2d\x7e\x14\x31", },
-{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x7c\x64\xdc\x84\xa8\xbb\xa7\x58\xed\x17\xeb\x02\x5a\x57\xe3", },
-{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe1\x7b\xc7\x9f\x30\xea\xab\x2f\xac\x2c\xbb\xe3\x45\x8d\x68\x7a", },
-{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x14\xbc\x20\x28\x00\x9b\x92\x3f\x0b\x01\x91\x5c\xe5\xe7\xc4", },
-{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\x28\x52\x4a\x16\xa1\xe1\xc1\x45\x29\x71\xca\xa8\xd1\x34\x76", },
-{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\x62\xe1\x63\x63\x63\x83\x60\xfd\xd6\xad\x62\x11\x27\x94\xf0", },
-{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5a\x86\x88\xf0\xb2\xa2\xc1\x62\x24\xc1\x61\x65\x8f\xfd\x40\x44", },
-{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\xf7\x10\x84\x2b\x9b\xb9\xc3\x2f\x26\x64\x8c\x78\x68\x07\xca", },
-{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xa9\x8b\xf1\x1e\x16\x3f\x63\x2c\x47\xec\x6a\x49\x68\x3a\x89", },
-{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0f\x18\xaf\xf9\x42\x74\x69\x6d\x9b\x61\x84\x8b\xd5\x0a\xc5\xe5", },
-{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x40\x85\x71\xc3\xe2\x42\x45\x40\x20\x7f\x83\x3b\x6d\xda\x69", },
-{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x3f\xf9\x96\x94\x7f\x0c\x7d\x1f\x43\xc8\xf3\x02\x7b\x9b\x75", },
-{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\xf4\xda\xf4\xad\x29\xa3\x61\x5a\x9b\x6e\xce\x5c\x99\x51\x8a", },
-{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc7\x29\x54\xa4\x8d\x07\x74\xdb\x0b\x49\x71\xc5\x26\x26\x04\x15", },
-{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xf9\xb7\x61\x12\xdc\x65\x31\xe0\x7d\x2c\xfd\xa0\x44\x11\xf0", },
-{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\x4d\x8e\x69\x91\x19\xe1\xfc\x87\x54\x5a\x64\x7f\xb1\xd3\x4f", },
-{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\xc4\x80\x7a\xe1\x1f\x36\xf0\x91\xc5\x7d\x9f\xb6\x85\x48\xd1", },
-{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xbf\x73\xaa\xd4\x9c\x82\x00\x7f\x77\xa5\xc1\xcc\xec\x6a\xb4", },
-{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xb2\x88\xcc\x20\x40\x04\x90\x01\xd2\xc7\x58\x5a\xd1\x23\xfc", },
-{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\x49\x71\x10\xef\xb9\xdc\xeb\x13\xe2\xb1\x3f\xb4\x46\x55\x64", },
-{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x55\x0e\x6c\xb5\xa8\x8e\x49\x63\x4c\x9a\xb6\x9e\xda\x04\x30", },
-{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x76\x84\x73\xce\x98\x43\xea\x66\xa8\x14\x05\xdd\x50\xb3\x45", },
-{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x2f\x43\x03\x83\xf9\x08\x4e\x03\xa6\x53\x57\x1e\x06\x5d\xe6", },
-{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x4e\x66\xc0\x7b\xae\x3e\x79\xfb\x7d\x21\x08\x47\xa3\xb0\xba", },
-{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x90\x78\x51\x25\x50\x5f\xad\x59\xb1\x3c\x18\x6d\xd6\x6c\xe3", },
-{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x52\x7a\x6a\xeb\xda\xec\x9e\xae\xf8\xed\xa2\xcb\x77\x83\xe5", },
-{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\xfd\xaf\x53\xeb\xbc\x98\x80\xc2\x28\x61\x7d\x6a\x9b\x54\x8b", },
-{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x78\x61\x04\xb9\x74\x4b\x98\xf0\x52\xc4\x6f\x1c\x85\x0d\x0b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xab\x30\x13\xdd\x1e\x61\xdf\x06\xcb\xaf\x34\xca\x2a\xee\x78", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x74\x70\x46\x9b\xe9\x72\x30\x30\xfd\xcc\x73\xa8\xcd\x4f\xbb\x10", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa3\x5a\x63\xf5\x34\x3e\xbe\x9e\xf8\x16\x7b\xcb\x48\xad\x12\x2e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\x86\x87\xf0\x75\x7a\x21\x0e\x9f\xdf\x18\x12\x04\xc3\x08\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\x18\x1e\x84\xbd\x54\x57\xd2\x6a\x88\xfb\xae\x96\x01\x8f\xb0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x65\x33\x17\xb9\x36\x2b\x6f\x9b\x9e\x1a\x58\x0e\x68\xd4\x94\xb5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x5c\x9d\xc0\xb6\x89\xf0\x3c\x45\x86\x7b\x5f\xaa\x5c\x18\xd1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xa4\xd9\x6d\x56\xdd\xa3\x98\xb9\xaa\xbe\xcf\xc7\x57\x29\xfd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xbe\x19\xe0\x53\x63\x5f\x09\xf2\x66\x5e\x7b\xae\x85\xb4\x2d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\xcd\x65\x28\x42\x92\x6a\xea\x4a\xa6\x13\x7b\xb2\xbe\x2b\x5e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x3d\x4a\x4f\x38\xeb\xb3\x37\xd1\x0a\xa8\x4e\x91\x71\xa5\x54", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\xbf\xf7\xff\x45\x4b\x0e\xc5\xa4\xa2\xa6\x95\x66\xe2\xcb\x84", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\x35\xd5\x65\xac\xe3\xf3\x1e\xb2\x49\xba\x2c\xc6\x76\x5d\x7a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf6\x0e\x91\xfc\x32\x69\xee\xcf\x32\x31\xc6\xe9\x94\x56\x97\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x69\xcf\xad\xf5\x1f\x8e\x60\x4d\x9c\xc3\x71\x82\xf6\x63\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\x66\x37\x3f\x24\xa0\xb6\xed\x56\xe0\xd9\x6f\xcd\xaf\xb8\x77", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xa4\x48\xc2\xaa\xc9\x54\xf5\xd8\x12\xe9\xd7\x84\x94\x44\x6a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\xc5\x59\x9d\xd8\xac\x02\x23\x9a\x0f\xef\x4a\x36\xdd\x16\x68", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x76\x44\x68\xbb\x10\x38\x28\xcf\x7e\x14\x73\xce\x89\x50\x73", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x0d\x02\x89\x36\x83\xb9\xf1\x80\x45\x8e\x4a\xa6\xb7\x39\x82", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xd9\xb0\x17\xd3\x02\xdf\x41\x0a\x93\x7d\xcd\xb8\xbb\x6e\x43", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x16\x23\xcc\x44\x31\x3c\xff\x44\x0b\x15\x94\xa7\xe2\x1c\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x28\x4c\xa2\xfa\x35\x80\x7b\x8b\x0a\xe4\xd1\x9e\x11\xd7\xdb\xd7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xe9\x76\x87\x57\x55\xf9\x40\x1d\x54\xf3\x6e\x2a\x23\xa5\x94", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xec\x19\x8a\x18\xe1\x0e\x53\x24\x03\xb7\xe2\x08\x87\xc8\xdd\x80", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x54\x5d\x50\xeb\xd9\x19\xe4\xa6\x94\x9d\x96\xad\x47\xe4\x6a\x80", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\xdf\xb5\x27\x06\x0e\x0a\x71\x00\x9c\x7b\xb0\xc6\x8f\x1d\x44", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\xfa\x13\x22\xea\x33\xda\x21\x73\xa0\x24\xf2\xff\x0d\x89\x6d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\x85\xb1\xa7\x5b\x0f\x3b\xd9\x58\xdc\xd0\xe2\x93\x18\xc5\x21", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x38\xf6\x7b\x9e\x98\xe4\xa9\x7b\x6d\xf0\x30\xa9\xfc\xdd\x01\x04", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x2a\xff\xfb\x2c\x88\x0e\x82\xb0\x59\x26\xd0\xfc\x6c\x44\x8b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\x79\x80\xce\x7b\x10\x5c\xf5\x30\x95\x2d\x74\xda\xaf\x79\x8c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x36\x95\xe1\x35\x1b\x9d\x68\x58\xbd\x95\x8c\xf5\x13\xef\x6c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6d\xa0\x49\x0b\xa0\xba\x03\x43\xb9\x35\x68\x1d\x2c\xce\x5b\xa1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\xea\x23\xaf\x08\x53\x40\x11\xc6\x00\x09\xab\x29\xad\xa2\xf1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x13\x80\x6c\xf1\x9c\xc3\x87\x21\x55\x4d\x7c\x0f\xcd\xcd\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x38\xaf\x1f\x4f\x69\xba\xe9\xd8\x5d\xd1\x88\xdc\xdf\x06\x88", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xcf\x44\xc9\x2d\x55\x0b\xfb\x1e\xd2\x8e\xf5\x83\xdd\xf5\xd7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd0\x6e\x31\x95\xb5\x37\x6f\x10\x9d\x5c\x4e\xc6\xc5\xd6\x2c\xed", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x40\xde\x01\x4d\x3d\x61\x07\x07\x27\x9b\x13\x24\x2a\x5c\x36", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\xc5\xc6\xff\xa5\xe0\xbd\x3a\x94\xc8\x8f\x6b\x6f\x7c\x16\xb9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\x40\xc3\x90\x1c\xd7\xef\xfc\x22\xbf\xfc\x35\xde\xe0\xb4\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x33\x05\xc7\x2b\xed\xfa\xb9\x73\x82\xc4\x06\xd0\xc4\x9b\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xbb\xaa\xb2\x2a\x6b\xd4\x92\x5a\x99\xa2\xb4\x08\xd2\xdb\xae", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x7c\x5b\x8f\xcd\x05\x33\xab\x98\xbc\x51\xe2\x7a\x6c\xe4\x61", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x9c\x04\xff\x4c\x07\x51\x3c\x0b\x3e\xf0\x5c\x03\xe3\x37\xb5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\x7a\xf0\xe8\x95\xdd\xa5\xeb\x98\xef\xc6\x80\x66\xe8\x4c\x54", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x71\x67\xf3\x81\x2a\xff\xf1\xff\xac\xb4\xa9\x34\x37\x9f\xc3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xb1\xdc\x3a\x9c\x72\x97\x2e\x42\x5a\xe2\xef\x3e\xb5\x97\xcd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xae\xaa\x3a\x21\x3e\x96\x8d\x4b\x5b\x67\x9d\x3a\x2c\x97\xfe", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x92\x41\xda\xca\x4f\xdd\x03\x4a\x82\x37\x2d\xb5\x0e\x1a\x0f\x3f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\x45\x74\xd9\xcd\x00\xcf\x2b\x5a\x7f\x77\xe5\x3c\xd5\x78\x85", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x79\x3d\xe3\x92\x36\x57\x0a\xba\x83\xab\x9b\x73\x7c\xb5\x21\xc9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x16\x59\x1c\x0f\x27\xd6\x0e\x29\xb8\x5a\x96\xc3\x38\x61\xa7\xef", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xfb\x5c\x4d\x4f\x5c\xb7\x9b\xe5\xc1\x74\xa3\xb1\xc9\x73\x48", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x4d\x2b\x61\x63\x3d\x16\x2b\xe5\x9d\xde\x04\x22\x2f\x47\x40", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\x75\x0f\xf2\x63\xa6\x5e\x1f\x9e\x92\x4c\xcf\xd9\x8f\x3e\x37", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\xd0\x66\x2d\x6e\xae\xdd\xed\xeb\xae\x7f\x7e\xa3\xa4\xf6\xb6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\xc4\x6b\xb3\x06\x92\xbe\x65\x7f\x7e\xaa\x93\xeb\xad\x98\x97", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\x39\x94\xcf\xb9\xda\x28\x5a\x5d\x96\x42\xe1\x75\x9b\x22\x4a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xbf\x57\x87\x7b\x7b\x17\x38\x5c\x85\xd0\xb5\x48\x51\xe3\x71", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\xa5\xc0\x97\xcd\xc1\x53\x2a\xc0\x71\xd5\x7b\x1d\x28\xd1\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x0c\x53\xfa\x37\x31\x1f\xc1\x0b\xd2\xa9\x98\x1f\x51\x31\x74", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x4f\x97\x0c\x0a\x25\xc4\x18\x14\xbd\xae\x2e\x50\x6b\xe3\xb4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2d\xce\x3a\xcb\x72\x7c\xd1\x3c\xcd\x76\xd4\x25\xea\x56\xe4\xf6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\x60\x47\x4d\x50\x4b\x9b\x3e\xef\xb6\x8d\x35\xf2\x45\xf4\xb3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xa8\xa9\x47\x76\x66\x35\xde\xc3\x75\x53\xd9\xa6\xc0\xcb\xb7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x25\xd6\xcf\xe6\x88\x1f\x2b\xf4\x97\xdd\x14\xcd\x4d\xdf\x44\x5b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xc7\x8c\x13\x5e\xd9\xe9\x8c\x09\x66\x40\x64\x72\x65\xda\x1e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5a\x4d\x40\x4d\x89\x17\xe3\x53\xe9\x2a\x21\x07\x2c\x3b\x23\x05", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xbc\x96\x84\x6b\x3f\xdc\x71\x64\x3f\x38\x4c\xd3\xcc\x3e\xaf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\xa4\xa9\x14\x3f\x4e\x5d\x40\x48\x52\x1c\x4f\x88\x77\xd8\x8e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\xd7\x8e\x72\x6c\x1e\xc0\x2b\x7e\xbf\xe9\x2b\x23\xd9\xec\x34", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xe5\x93\x9c\x8e\xfd\xf2\xf0\x4e\x60\xb9\xfe\x71\x17\xb2\xc2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x31\xd4\xd7\x4f\x5d\xcb\xf3\x9d\xaa\xf8\xca\x3a\xf6\xe5\x27", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xd9\xfd\x5c\xc4\xf0\x74\x41\x72\x7d\xf0\xf3\x3e\x40\x1a\x36", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\xcc\xdb\x04\x46\x46\xd7\xe1\xf3\xcc\xea\x3d\xca\x08\xb8\xc0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x16\xae\x4c\xe5\x04\x2a\x67\xee\x8e\x17\x7b\x7c\x58\x7e\xcc\x82", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\xda\x0b\xb1\x1a\x23\x85\x5d\x9c\x5c\xb1\xb4\xc6\x41\x2e\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x4f\x1a\xa5\x30\x96\x7d\x67\x32\xce\x47\x15\xeb\x0e\xe2\x4b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x17\x38\x25\x26\x21\xdd\x18\x0a\x34\xf3\x45\x5b\x4b\xaa\x2f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xe2\xb5\x08\xdb\x7f\xd8\x92\x34\xca\xf7\x93\x9e\xe5\x62\x1a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\x49\x9c\x25\x1f\x84\x42\xee\x13\xf0\x93\x3b\x68\x8f\xcd\x19", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x51\x35\xf8\xa8\x1f\x25\xc9\xd6\x30\xb1\x75\x02\xf6\x8e\x53", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x87\x14\x5a\x01\xad\x1c\x6c\xed\xe9\x95\xea\x36\x70\x45\x4f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xae\x3b\x10\xa0\xc8\xca\x6d\x1d\x3b\x0f\xa6\x1e\x56\xb0\xb2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x64\xb4\xd6\x29\x81\x0f\xda\x6b\xaf\xdf\x08\xf3\xb0\xd8\xd2\xc5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd7\xe5\xdb\xd3\x32\x45\x95\xf8\xfd\xc7\xd7\xc5\x71\xda\x6c\x2a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\xf7\x23\x75\x26\x4e\x16\x7f\xca\x9d\xe2\xc1\x52\x7d\x96\x06", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xe7\x9d\xd4\xf4\x01\xff\x9b\x7e\xa9\x45\xd8\x66\x66\xc1\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\x35\xce\xa2\x79\x99\x40\xb4\x0d\xb3\xf8\x19\xcb\x94\xc0\x8b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x69\x41\xcb\x6b\x3e\x08\xc2\xb7\xaf\xa5\x81\xeb\xdd\x60\x7b\x87", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\x20\xf4\x39\xf6\xbb\x09\x7b\x29\xb8\xbd\x6d\x99\xaa\xd7\x99", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\x5d\x01\xf0\x58\xe5\x65\xf7\x7a\xe8\x63\x78\xbd\x2c\x49\xb3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\xb5\xfd\x98\x19\x0e\xf4\x5f\xbb\x43\x01\x43\x8d\x09\x59\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x00\x1f\xf5\xd9\x98\x06\xef\xd2\x5d\xa3\x4f\x56\xbe\x85\x4b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x59\x4c\x60\xf5\xc8\x27\x7a\x51\x13\x67\x7f\x94\x20\x8d\x82", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\xc0\xfc\x18\x18\xe4\xaa\x46\xbd\x2e\x39\xd6\x38\xf8\x9e\x05", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x02\x3e\xe9\xc3\xfd\xc4\x5a\x01\x9b\x4e\x98\x5c\x7e\x1a\x54", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xf4\x01\x82\xab\x46\x62\xf3\x02\x3b\xae\xc1\xee\x79\x6b\x57", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\xeb\xba\xd7\x30\x36\x49\xb4\x19\x4a\x69\x45\xc6\xcc\x36\x94", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa2\x12\x4b\xea\x53\xec\x28\x34\x27\x9b\xed\x7f\x7e\xb0\xf9\x38", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb9\xfb\x43\x99\xfa\x4f\xac\xc7\x30\x9e\x14\xec\x98\x36\x0b\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x62\x77\x43\x74\x20\xc5\xd6\x34\xf7\x15\xae\xa8\x1a\x91\x32", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x17\x1a\x0e\x1b\x2d\xd4\x24\xf0\xe0\x89\xaf\x2c\x4c\x10\xf3\x2f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\xad\xbe\x40\x2d\x1b\x20\x8f\xe7\x35\xed\xce\x00\xae\xe7\xce", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\xb0\x2f\xf9\x29\xa1\x48\x5a\xf6\xf5\xc6\xd6\x55\x8b\xaa\x0f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x09\x2f\xaa\xcc\x9b\xf4\x35\x08\xbf\x8f\xa8\x61\x3c\xa7\x5d\xea", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x2b\xf8\x28\x0f\x3f\x97\x42\xc7\xed\x51\x3f\xe8\x02\x62\x9c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x21\x5a\x41\xee\x44\x2f\xa9\x92\xa6\xe3\x23\x98\x6d\xed\x3f\x68", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\x1e\x99\xcf\x4f\x0f\x77\xce\xa8\x36\xe1\x1a\x2f\xe7\x5f\xb1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\xe3\xa0\xca\x90\x79\xe6\x46\x33\x1d\xf8\xb4\xe7\x0d\x2c\xd6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4a\xfe\x7f\x12\x0c\xe7\x61\x3f\x74\xfc\x12\xa0\x1a\x82\x80\x73", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x7f\x00\x0e\x75\xe2\xc8\xb9\xd4\x79\xbe\xed\x91\x3f\xe6\x78", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\x83\x0c\x8e\x7a\xae\xfe\x2d\x30\x31\x0e\xf3\x81\xcb\xf6\x91", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x1a\xa0\xf2\xc8\x57\x01\x44\xf3\x86\x57\xea\x40\x85\xeb\xe5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x85\x06\x2c\x2c\x90\x9f\x15\xd9\x26\x9b\x6c\x18\xce\x99\xc4\xf0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x80\x34\xdc\x9e\x41\xb5\xa5\x60\xed\x23\x9e\xea\xb1\xbc\x78", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\xf9\x3a\x4c\xe5\xab\x6d\x5d\x56\xf1\xb9\x3c\xf1\x99\x11\xc1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x31\x12\xbc\xb0\xc1\xdc\xc7\x49\xd7\x99\x74\x36\x91\xbf\x82", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\xc5\x5b\xd7\x5c\x7f\x9c\x88\x19\x89\xd3\xec\x19\x11\xc0\xd4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x2e\x6b\x5e\xf1\x82\xb7\xdf\xf3\x62\x9a\xbd\x6a\x12\x04\x5f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x32\x23\x27\xe0\x17\x80\xb1\x73\x97\xf2\x40\x87\xf8\xcc\x6f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xca\xcb\x5c\xd1\x16\x92\xc3\x73\xb2\x41\x17\x68\x14\x9e\xe7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x8e\x3d\xbb\xca\x57\x78\x60\xda\xb6\xb8\x0d\xa3\x13\x92\x56", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x79\xb6\x1c\x37\xbf\x32\x8e\xcc\xa8\xd7\x43\x26\x5a\x3d\x42\x5c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xd9\x9c\x6b\xcc\x1f\x06\xfd\xa8\xe2\x7e\x8a\xe3\xf1\xcc\xc7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\xfd\x4b\x91\xc7\x01\xfd\x6b\x61\xb7\xf9\x97\x82\x9d\x66\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x00\x5d\x52\xf2\x5f\x16\xbd\xc9\x54\x5a\x87\x6a\x63\x49\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x4d\x35\x4f\x02\xbb\x5a\x5e\x47\xd3\x96\x66\x86\x7f\x24\x6a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x51\xb8\xd6\xe1\xe1\xa0\xeb\xb1\x55\xfb\xbf\x6e\x7b\x7d\xc3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x98\xd4\xf4\x2f\xa7\xba\x6a\x10\xac\x05\xe8\x7b\x9f\x20\x80", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x11\x29\x5e\x73\x9c\xa7\xd9\xb5\x0f\x8e\x4c\x0e\x75\x4a\x3f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\x33\xfc\x7d\x8a\xbe\x3c\xa1\x93\x67\x59\xf8\xf5\xde\xaf\x20", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x5e\x0f\x56\x6d\xc9\x6c\x29\x8f\x0c\x12\x63\x75\x39\xb2\x5c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x07\xc3\xe7\x98\x5f\xe0\xf5\xa5\x0e\x2c\xdb\x25\xc5\x10\x9e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x41\xf9\x92\xa8\x56\xfb\x27\x8b\x38\x9a\x62\xf5\xd2\x74\xd7\xe9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x10\xd3\xed\x7a\x6f\xe1\x5a\xb4\xd9\x1a\xcb\xc7\xd0\x76\x7a\xb1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x21\xfe\xec\xd4\x5b\x2e\x67\x59\x73\xac\x33\xbf\x0c\x54\x24\xfc", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x14\x80\xcb\x39\x55\xba\x62\xd0\x9e\xea\x66\x8f\x7c\x70\x88\x17", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x66\x40\x40\x33\xd6\xb7\x2b\x60\x93\x54\xd5\x49\x6e\x7e\xb5\x11", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x1c\x31\x7a\x22\x0a\x7d\x70\x0d\xa2\xb1\xe0\x75\xb0\x02\x66\xe1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\xab\x3b\x89\x54\x22\x33\xf1\x27\x1b\xf8\xfd\x0c\x0f\x40\x35\x45", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\xd9\x3e\xae\x96\x6f\xac\x46\xdc\xa9\x27\xd6\xb1\x14\xfa\x3f\x9e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x1b\xde\xc5\x21\x31\x65\x03\xd9\xd5\xee\x65\xdf\x3e\xa9\x4d\xdf", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\xee\xf4\x56\x43\x1d\xea\x8b\x4a\xcf\x83\xbd\xae\x37\x17\xf7\x5f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x06\xf2\x51\x9a\x2f\xaf\xaa\x59\x6b\xfe\xf5\xcf\xa1\x5c\x21\xb9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x25\x1a\x7e\xac\x7e\x2f\xe8\x09\xe4\xaa\x8d\x0d\x70\x12\x53\x1a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x3b\xff\xc1\x6e\x4c\x49\xb2\x68\xa2\x0f\x8d\x96\xa6\x0b\x40\x58", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\xe8\x86\xf9\x28\x19\x99\xc5\xbb\x3b\x3e\x88\x62\xe2\xf7\xc9\x88", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x56\x3b\xf9\x0d\x61\xbe\xef\x39\xf4\x8d\xd6\x25\xfc\xef\x13\x61", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x4d\x37\xc8\x50\x64\x45\x63\xc6\x9f\xd0\xac\xd9\xa0\x49\x32\x5b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\xb8\x7c\x92\x1b\x91\x82\x9e\xf3\xb1\x3c\xa5\x41\xee\x11\x30\xa6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x2e\x65\xeb\x6b\x6e\xa3\x83\xe1\x09\xac\xcc\xe8\x32\x6b\x03\x93", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x9c\xa5\x47\xf7\x43\x9e\xdc\x3e\x25\x5c\x0f\x4d\x49\xaa\x89\x90", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\xa5\xe6\x52\x61\x4c\x93\x00\xf3\x78\x16\xb1\xf9\xfd\x0c\x87\xf9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x14\x95\x4f\x0b\x46\x97\x77\x6f\x44\x49\x4f\xe4\x58\xd8\x14\xed", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x7c\x8d\x9a\xb6\xc2\x76\x17\x23\xfe\x42\xf8\xbb\x50\x6c\xbc\xf7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\xdb\x7e\x19\x32\x67\x9f\xdd\x99\x74\x2a\xab\x04\xaa\x0d\x5a\x80", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x4c\x6a\x1c\x83\xe5\x68\xcd\x10\xf2\x7c\x2d\x73\xde\xd1\x9c\x28", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x90\xec\xbe\x61\x77\xe6\x74\xc9\x8d\xe4\x12\x41\x3f\x7a\xc9\x15", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x90\x68\x4a\x2a\xc5\x5f\xe1\xec\x2b\x8e\xbd\x56\x22\x52\x0b\x73", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x74\x72\xf9\xa7\x98\x86\x07\xca\x79\x70\x77\x95\x99\x10\x35\xe6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x56\xaf\xf0\x89\x87\x8b\xf3\x35\x2f\x8d\xf1\x72\xa3\xae\x47\xd8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x65\xc0\x52\x6c\xbe\x40\x16\x1b\x80\x19\xa2\xa3\x17\x1a\xbd\x23", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x37\x7b\xe0\xbe\x33\xb4\xe3\xe3\x10\xb4\xaa\xbd\xa1\x73\xf8\x4f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x94\x02\xe9\xaa\x6f\x69\xde\x65\x04\xda\x8d\x20\xc4\xfc\xaa\x2f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x12\x3c\x1f\x4a\xf3\x13\xad\x8c\x2c\xe6\x48\xb2\xe7\x1f\xb6\xe1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x1f\xfc\x62\x6d\x30\x20\x3d\xcd\xb0\x01\x9f\xb8\x0f\x72\x6c\xf4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x76\xda\x1f\xbe\x3a\x50\x72\x8c\x50\xfd\x2e\x62\x1b\x5a\xd8\x85", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x08\x2e\xb8\xbe\x35\xf4\x42\xfb\x52\x66\x8e\x16\xa5\x91\xd1\xd6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xe6\x56\xf9\xec\xf5\xfe\x27\xec\x3e\x4a\x73\xd0\x0c\x28\x2f\xb3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x2c\xa8\x20\x9d\x63\x27\x4c\xd9\xa2\x9b\xb7\x4b\xcd\x77\x68\x3a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x79\xbf\x5d\xce\x14\xbb\x7d\xd7\x3a\x8e\x36\x11\xde\x7c\xe0\x26", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x3c\x84\x99\x39\xa5\xd2\x93\x99\xf3\x44\xc4\xa0\xec\xa8\xa5\x76", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\xed\x3c\x0a\x94\xd5\x9b\xec\xe9\x88\x35\xda\x7a\xa4\xf0\x7c\xa2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x63\x91\x9e\xd4\xce\x10\x19\x64\x38\xb6\xad\x09\xd9\x9c\xd7\x95", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x76\x78\xf3\xa8\x33\xf1\x9f\xea\x95\xf3\xc6\x02\x9e\x2b\xc6\x10", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x3a\xa4\x26\x83\x10\x67\xd3\x6b\x92\xbe\x7c\x5f\x81\xc1\x3c\x56", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x92\x72\xe2\xd2\xcd\xd1\x10\x50\x99\x8c\x84\x50\x77\xa3\x0e\xa0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x08\x8c\x4b\x53\xf5\xec\x0f\xf8\x14\xc1\x9a\xda\xe7\xf6\x24\x6c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x40\x10\xa5\xe4\x01\xfd\xf0\xa0\x35\x4d\xdb\xcc\x0d\x01\x2b\x17", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\xa8\x7a\x38\x57\x36\xc0\xa6\x18\x9b\xd6\x58\x9b\xd8\x44\x5a\x93", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x54\x5f\x2b\x83\xd9\x61\x6d\xcc\xf6\x0f\xa9\x83\x0e\x9c\xd2\x87", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x4b\x70\x6f\x7f\x92\x40\x63\x52\x39\x40\x37\xa6\xd4\xf4\x68\x8d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\xb7\x97\x2b\x39\x41\xc4\x4b\x90\xaf\xa7\xb2\x64\xbf\xba\x73\x87", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x6f\x45\x73\x2c\xf1\x08\x81\x54\x6f\x0f\xd2\x38\x96\xd2\xbb\x60", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x2e\x35\x79\xca\x15\xaf\x27\xf6\x4b\x3c\x95\x5a\x5b\xfc\x30\xba", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x34\xa2\xc5\xa9\x1a\xe2\xae\xc9\x9b\x7d\x1b\x5f\xa6\x78\x04\x47", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\xa4\xd6\x61\x6b\xd0\x4f\x87\x33\x5b\x0e\x53\x35\x12\x27\xa9\xee", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x7f\x69\x2b\x03\x94\x58\x67\xd1\x61\x79\xa8\xce\xfc\x83\xea\x3f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x3b\xd1\x41\xee\x84\xa0\xe6\x41\x4a\x26\xe7\xa4\xf2\x81\xf8\xa2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\xd1\x78\x8f\x57\x2d\x98\xb2\xb1\x6e\xc5\xd5\xf3\x92\x2b\x99\xbc", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x08\x33\xff\x6f\x61\xd9\x8a\x57\xb2\x88\xe8\xc3\x58\x6b\x85\xa6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x85\x68\x26\x17\x97\xde\x17\x6b\xf0\xb4\x3b\xec\xc6\x28\x5a\xfb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\xf9\xb0\xfd\xa0\xc4\xa8\x98\xf5\xb9\xe6\xf6\x61\xc4\xce\x4d\x07", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x8a\xde\x89\x59\x13\x68\x5c\x67\xc5\x26\x9f\x8a\xae\x42\x98\x3e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x39\xbd\xe6\x7d\x5c\x8e\xd8\xa8\xb1\xc3\x7e\xb8\xfa\x9f\x5a\xc0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x5c\x00\x5e\x72\xc1\x41\x8c\x44\xf5\x69\xf2\xea\x33\xba\x54\xf3", },
-};
-
-static const struct ECB192_Test
-{
-       uint8_t key[24];
-       uint8_t pt[16];
-       uint8_t ct[16];
-}
-ECB192_Tests[] =
-{
-{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xde\x88\x5d\xc8\x7f\x5a\x92\x59\x40\x82\xd0\x2c\xc1\xe1\xb4\x2c", },
-{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x2b\x07\x4e\x80\xf2\xa5\x97\xbf\x5f\xeb\xd8\xea\x5d\xa5\x5e", },
-{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xcc\xed\xf8\xde\x59\x2c\x22\xfb\x81\x34\x7b\x79\xf2\xdb\x1f", },
-{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\x0b\x09\xf2\x67\xc4\x51\x45\xdb\x2f\x82\x6c\x25\x82\xd3\x5c", },
-{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xd8\x07\xef\x76\x52\xd7\xeb\x0e\x13\xc8\xb5\xe1\x5b\x3b\xc0", },
-{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x78\xbc\xf8\xdd\x8f\xd7\x22\x41\x22\x3a\xd2\x4b\x31\xb8\xa4", },
-{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x10\xf6\x54\x34\x3e\x8f\x27\xe1\x2c\x83\xa4\x8d\x24\xff\x81", },
-{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x83\x3f\x71\x25\x8d\x53\x03\x6b\x02\x95\x2c\x76\xc7\x44\xf5\xa1", },
-{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\xa8\x3f\xf2\x00\xcf\xf9\x31\x8a\x92\xf8\x69\x1a\x06\xb0\x9f", },
-{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x62\x0c\xcb\xe9\xf3\x29\x2a\xbd\xf2\x17\x6b\x09\xf0\x4e\xba", },
-{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\xba\xbc\x4b\x3f\x51\x6c\x9a\xaf\xb3\x5f\x41\x40\xb5\x48\xf9", },
-{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\x18\x78\x24\xd9\xc4\x58\x2b\x09\x16\x49\x3e\xcb\xde\x8c\x57", },
-{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x0a\xd5\x53\x17\x7f\xd5\xea\x10\x92\xc9\xd6\x26\xa2\x9d\xc4", },
-{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\xdc\x46\xc3\x72\x61\x19\x41\x24\xec\xae\xbd\x68\x04\x08\xec", },
-{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe4\xf2\xf2\xae\x23\xe9\xb1\x0b\xac\xfa\x58\x60\x15\x31\xba\x54", },
-{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb7\xd6\x7c\xf1\xa1\xe9\x1e\x8f\xf3\xa5\x7a\x17\x2c\x7b\xf4\x12", },
-{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x70\x6b\xe0\x69\x67\x88\x4e\x84\x7d\x13\x71\x28\xce\x47\xb3", },
-{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb2\xf8\xb4\x09\xb0\x58\x59\x09\xaa\xd3\xa7\xb5\xa2\x19\x07\x2a", },
-{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\x4b\x7b\xff\x02\x90\xc7\x83\x44\xc5\x4a\x23\xb7\x22\xcd\x20", },
-{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x09\x36\x57\x55\x2d\x44\x14\x22\x7c\xe1\x61\xe9\xeb\xf7\xdd", },
-{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe1\xaf\x1e\x7d\x8b\xc2\x25\xed\x4d\xff\xb7\x71\xec\xbb\x9e\x67", },
-{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x65\x55\x25\x36\x35\xd8\x43\x21\x56\xcf\xd9\xc1\x1b\x14\x5a", },
-{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x40\x35\x07\x4a\x5d\x42\x60\xc9\x0c\xbd\x6d\xa6\xc3\xfc\xeb", },
-{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\x6e\xe4\x16\xf9\xad\x1c\x10\x3e\xb0\xcc\x96\x75\x1c\x88\xe1", },
-{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x8a\xe2\xa4\x63\x7a\xc0\xa7\x89\x0a\x8f\xd1\x48\x54\x45\xc9", },
-{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x20\x12\xec\x8f\xad\xed\x08\x25\xfb\x2f\xa7\x0a\xb3\x0c\xbd", },
-{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x8a\x64\xb4\x6b\x5d\x88\xbf\x7f\x24\x7d\x4d\xba\xf3\x8f\x05", },
-{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x68\x25\x37\x62\xe2\xcc\x81\xb4\x2d\x1e\x50\x01\x76\x26\x99", },
-{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x41\xf8\x3b\x38\xce\x50\x32\xc6\xcd\x7a\xf9\x8c\xf6\x20\x61", },
-{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\xa8\x99\x90\xcd\x14\x11\x75\x0d\x5f\xb0\xdc\x98\x84\x47\xd4", },
-{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xac\xcc\x8e\xd6\x29\xed\xf8\xc6\x8a\x53\x91\x83\xb1\xea\x82", },
-{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\x6f\xa7\x1f\x84\x6b\x81\xa1\x3f\x36\x1c\x43\xa8\x51\xf2\x90", },
-{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xad\x6e\xfd\xff\x59\x75\xae\xe7\x69\x22\x34\xbc\xd5\x44\x88", },
-{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\xfd\xb0\x5a\x78\x3d\x03\x08\x2d\xfe\x5f\xdd\x80\xa0\x0b\x17", },
-{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\x81\xb5\x84\x76\x69\x97\xaf\x6b\xa5\x52\x9d\x3b\xdd\x86\x09", },
-{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0c\xf4\xff\x4f\x49\xc8\xa0\xca\x06\x0c\x44\x34\x99\xe2\x93\x13", },
-{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x4b\xa8\xa8\xe0\x29\xf8\xb2\x6d\x8a\xff\xf9\xdf\x13\x3b\xb6", },
-{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\xfe\xbf\x64\x36\x0f\x38\xe4\xe6\x35\x58\xf0\xff\xc5\x50\xc3", },
-{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x12\xad\x98\xcb\xf7\x25\x13\x7d\x6a\x81\x08\xc2\xbe\xd9\x93\x22", },
-{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\xfa\xa9\x96\x22\x61\x98\xb3\xe2\x61\x04\x13\xce\x1b\x3f\x78", },
-{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2a\x8c\xe6\x74\x7a\x7e\x39\x36\x78\x28\xe2\x90\x84\x85\x02\xd9", },
-{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x37\x36\xe8\xb8\xf8\x9c\xa1\xe3\x7b\x6d\xea\xb4\x0f\xac\xf1", },
-{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\xf7\x97\xe5\x04\x18\xb9\x5f\xa6\x01\x33\x33\x91\x7a\x94\x80", },
-{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x58\xde\x37\xc2\xec\xe2\xa0\x2c\x73\xc0\x1f\xed\xc9\xa1\x32", },
-{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x9b\x87\xae\x77\xba\xe7\x06\x80\x39\x66\xc6\x6c\x73\xad\xbd", },
-{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\x65\xab\x8d\xf8\xff\xd7\x82\xe3\x58\x12\x1a\x4a\x4f\xc5\x41", },
-{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc8\xdc\xd9\xe6\xf7\x5e\x6c\x36\xc8\xda\xee\x04\x66\xf0\xed\x74", },
-{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc7\x9a\x63\x7b\xeb\x1c\x03\x04\xf1\x40\x14\xc0\x37\xe7\x36\xdd", },
-{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\x5f\x0a\x25\xe8\x4a\xc9\x30\xd9\x96\x28\x1a\x5f\x95\x4d\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xe4\x07\x4b\x29\x27\x97\x3e\x8d\x17\xff\xa9\x2f\x7f\xe6\x15", },
-{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xe2\xa9\xd2\xc1\x82\x44\x49\xc6\x9e\x3e\x03\x98\xf1\x29\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb7\xf2\x9c\x1e\x1f\x62\x84\x7a\x15\x25\x3b\x28\xa1\xe9\xd7\x12", },
-{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xed\x5d\x29\xb9\x03\xf3\x1e\x89\x83\xef\x8b\x0a\x2b\xf9\x90", },
-{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xb8\x07\x02\x70\x81\x0f\x9d\x02\x3f\x9d\xd7\xff\x3b\x4a\xa2", },
-{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\xd4\x6e\x15\x5c\x12\x28\xf6\x1d\x1a\x0d\xb4\x81\x5e\xcc\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x61\x08\xd1\xd9\x80\x71\x42\x8e\xec\xee\xf1\x71\x4b\x96\xdd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x5b\x25\xb7\x1b\x62\x96\xcf\x73\xdd\x2c\xdc\xac\x2f\x70\xb1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xab\xa9\x5e\x8a\x06\xa2\xd9\xd3\x53\x0d\x26\x77\x87\x8c\x80", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\x70\xd2\x0e\x89\xb4\x67\xe8\xf5\x17\x60\x61\xb8\x1d\xd3\x96", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x8f\x44\x67\xa5\xd8\xf1\xe7\x30\x7d\xc3\x0b\x34\xe4\x04\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbc\xea\x28\xe9\x07\x1b\x5a\x23\x02\x97\x0f\xf3\x52\x45\x1b\xc5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x23\xc0\x0b\xc1\x77\xd3\x31\xad\x31\x2e\x09\xc9\x01\x5c\x1c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\xac\x61\xe3\x18\x37\x47\xb3\xf5\x83\x6d\xa2\x1a\x1b\xc4\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x7b\x07\x57\x91\x87\x88\x80\xb4\x41\x89\xd3\x52\x2b\x8c\x30", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x71\x32\xd0\xc0\xe4\xa0\x75\x93\xcf\x12\xeb\xb1\x2b\xe7\x68\x8c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\xfb\xac\x16\x44\xde\xb0\xc7\x84\x27\x5f\xe5\x6e\x19\xea\xd3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x05\x06\x3f\x30\xf4\x22\x8b\x37\x4e\x24\x59\x73\x8f\x26\xbb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x97\x5b\x5f\x48\xbb\x68\xfc\xbb\xc7\xce\xa9\x3b\x45\x2e\xd7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x3f\x25\x76\xe2\xaf\xed\xc7\x4b\xb1\xca\x7e\xee\xc1\xc0\xe7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\xc4\x03\xf5\xf9\x66\xe0\xe3\xd9\xf2\x96\xd6\x22\x6d\xca\x28", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc8\xc2\x09\x08\x24\x9a\xb4\xa3\x4d\x6d\xd0\xa3\x13\x27\xff\x1a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x54\x13\x29\xec\xb6\x15\x9a\xb2\x3b\x7f\xc5\xe6\xa2\x1b\xca", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\xa1\xac\xf1\xa2\xed\x9b\xa7\x2b\xc6\xde\xb3\x1d\x88\xb8\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x8b\xd8\xed\xda\xbb\x6f\x3b\xf0\xd5\xa8\xa2\x7b\xe1\xfe\x8a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x3c\x7d\x76\x85\xe1\x4e\xc6\x6b\xbb\x96\xb8\xf0\x5b\x6d\xdd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\x75\x2e\xef\xc8\xc2\xa9\x3f\x91\xb6\xe7\x3e\xb0\x7c\xca\x6e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x93\xe7\xd6\x2f\x6c\xe5\x02\xc6\x4f\x75\xe2\x81\xf9\xc0\x00", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\xfd\x99\x9b\xe5\xd0\xcf\xa3\x57\x32\xc0\xdd\xc8\x8f\xf5\xa5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\x64\x7c\x76\xa3\x00\xc3\x17\x3b\x84\x14\x87\xeb\x2b\xae\x9f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x17\x2d\xf8\xb0\x2f\x04\xb5\x3a\xda\xb0\x28\xb4\xe0\x1a\xcd\x87", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\x4b\x3b\xf4\x99\x8a\xeb\x05\xaf\xd8\x7e\xc5\x36\x53\x3a\x36", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\x83\xf7\xbf\x44\xc9\x7f\x06\x52\x58\xa6\x66\xca\xe0\x30\x20", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xd4\xc8\xa6\x3f\x80\x95\x41\x04\xde\x7b\x92\xce\xde\x1b\xe1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\xfe\x61\x81\x0f\xd5\x46\x7c\xcd\xac\xb7\x58\x00\xf3\xac\x07", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x83\x0d\x8a\x25\x90\xf7\xd8\xe1\xb5\x5a\x73\x7f\x4a\xf4\x5f\x34", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\xd4\x68\x3f\x85\x80\x58\xe7\x43\x14\x67\x1d\x43\xfa\x2c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x52\x3d\x0b\xab\xbb\x82\xf4\x6e\xbc\x9e\x70\xb1\xcd\x41\xdd\xd0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x34\x4a\xab\x37\x08\x0d\x74\x86\xf7\xd5\x42\xa3\x09\xe5\x3e\xed", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\xc5\x60\x9d\x09\x06\xb2\x3a\xb9\xca\xca\x81\x6f\x5d\xbe\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x26\x02\x6e\xed\xd9\x1a\xdc\x6d\x83\x1c\xdf\x98\x94\xbd\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x88\x33\x0b\xaa\x4f\x2b\x61\x8f\xc9\xd9\xb0\x21\xbf\x50\x3d\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x9e\x0e\xa2\x24\x80\xb0\xba\xc9\x35\xc8\xa8\xeb\xef\xcd\xcf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\xca\x77\x9f\x39\x8f\xb0\x4f\x86\x7d\xa7\xe8\xa4\x47\x56\xcb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\xf8\x9c\x42\x98\x57\x86\xbf\xc4\x3c\x6d\xf8\xad\xa3\x68\x32", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\xc1\xde\x5f\xb8\xf2\x1d\x87\x4e\x91\xc5\x3b\x56\x0c\x50\xe3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\xaa\x90\x58\x49\x0e\xda\x30\x60\x01\xa8\xa9\xf4\x8d\x0c\xa7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x4e\xc7\x1d\x61\x28\xd4\x87\x18\x65\xd6\x17\xc3\x0b\x37\xe3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x14\xbe\x1c\x53\x5b\x17\xca\xbd\x0c\x4d\x93\x52\x9d\x69\xbf\x47", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xef\x67\x75\x65\x07\xbe\xec\x9d\xd3\x86\x28\x83\x47\x80\x44", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\xe2\x31\xfa\x5a\x59\x48\xce\x21\x34\xe9\x2f\xc0\x66\x4d\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x19\x4b\x8e\x5d\xda\x55\x30\xd0\xc6\x78\xc0\xb4\x8f\x5d\x92", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\xbd\x08\x6f\x23\x7c\xc4\xfd\x99\xf4\xd7\x6b\xde\x6b\x48\x26", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x25\x97\x61\xca\x17\x13\x0d\x6e\xd8\x6d\x57\xcd\x79\x51\xee", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd7\xcb\xb3\xf3\x4b\x9b\x45\x0f\x24\xb0\xe8\x51\x8e\x54\xda\x6d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\x5b\x9c\xae\xbe\x9f\x7f\x41\x7f\x40\x68\xd0\xd2\xee\x20\xb3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9d\x92\x4b\x93\x4a\x90\xce\x1f\xd3\x9b\x8a\x97\x94\xf8\x26\x72", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc5\x05\x62\xbf\x09\x45\x26\xa9\x1c\x5b\xc6\x3c\x0c\x22\x49\x95", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xf1\x18\x05\x04\x67\x43\xbd\x74\xf5\x71\x88\xd9\x18\x8d\xf7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\xd2\x74\xbd\x0f\x1b\x58\xae\x34\x5d\x9e\x72\x33\xf9\xb8\xf3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9d\x6b\xdc\x8f\x4c\xe5\xfe\xb0\xf3\xbe\xd2\xe4\xb9\xa9\xbb\x0b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\x55\x48\xbc\xf3\xf4\x25\x65\xf7\xef\xa9\x45\x62\x52\x8d\x46", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xcc\xae\xbd\x3a\x4c\x3e\x80\xb0\x63\x74\x81\x31\xba\x4a\x71", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x3c\xb2\x3d\x9e\x11\xc9\xd9\x3f\x11\x7e\x9c\x0a\x91\xb5\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\xf9\x33\xa2\x08\x1a\xc1\xdb\x84\xf6\x9d\x10\xf4\x52\x3f\xe0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\x61\xf7\x41\x2e\xd3\x20\xde\x0e\xdc\x88\x51\xc2\xe2\x43\x6f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\x64\xba\x1c\xd0\x4c\xe6\xba\xb9\x84\x74\x33\x08\x14\xb4\xd4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\x39\x1b\xff\xb9\xcf\xff\x80\xac\x23\x8c\x88\x6e\xf0\xa4\x61", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\xd2\xa6\x7d\xf5\xa9\x99\xfd\xbf\x93\xed\xd0\x34\x32\x96\xc9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xca\x73\x67\x39\x6b\x69\xa2\x21\xbd\x63\x2b\xea\x38\x6e\xec", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x0f\xd5\x02\x0d\xfe\x65\xf5\xf1\x62\x93\xec\x92\xc6\xfd\x89", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x21\x62\x99\x5b\x82\x17\xa6\x7f\x1a\xbc\x34\x2e\x14\x64\x06\xf8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\xa6\x16\x4b\x7a\x60\xba\xe4\xe9\x86\xff\xac\x28\xdf\xad\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x64\xe0\xd7\xf9\x00\xe3\xd9\xc8\x3e\x4b\x8f\x96\x71\x7b\x21\x46", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\xd2\x56\x1d\xe8\xc1\x23\x2f\x5d\x8d\xba\xb4\x73\x9b\x6c\xbb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x96\x89\xe9\xa5\x57\xf5\x8b\x1c\x3b\xf4\x0c\x97\xa9\x09\x64", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x63\x7e\x4a\x5e\x63\x77\xf9\xcc\x5a\x86\x38\x04\x5d\xe0\x29", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x2e\x60\x7e\x5a\xea\x46\x88\x59\x4b\x45\xf3\xae\xe3\xdf\x90", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\xc4\xe4\x38\x1f\xee\xc7\x40\x54\x95\x4c\x05\xb7\x77\xa0\x0a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x91\x54\x95\x14\x60\x5f\x38\x24\x6c\x9b\x72\x4a\xd8\x39\xf0\x1d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x74\xb2\x4e\x3b\x6f\xef\xe4\x0a\x4f\x9e\xf7\xac\x6e\x44\xd7\x6a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x37\xa6\x83\xdc\x5d\x4b\x52\xab\xb4\xa1\x23\xa8\xdf\x86\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbb\x28\x52\xc8\x91\xc5\x94\x7d\x2e\xd4\x40\x32\xc4\x21\xb8\x5f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x9f\x5f\xbd\x5e\x8a\x42\x64\xc0\xa8\x5b\x80\x40\x9a\xfa\x5e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\xda\xb8\x09\xf8\x5a\x91\x7f\xe9\x24\x73\x3f\x42\x4a\xc5\x89", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xef\x5c\x1f\x8d\x60\x51\x92\x64\x66\x95\xce\xad\xc6\x5f\x32", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\xaa\x90\x04\x0b\x4c\x15\xa1\x23\x16\xb7\x8e\x0f\x95\x86\xfc", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xfa\xc8\x29\x7c\xea\xab\xc8\x7d\x45\x43\x50\x60\x1e\x06\x73", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x47\xef\x56\x7a\xc2\x8d\xfe\x48\x84\x92\xf1\x57\xe2\xb2\xe0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x84\x26\x02\x7d\xdb\x96\x2b\x5c\x5b\xa7\xeb\x8b\xc9\xab\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\x17\xfc\x77\xe7\x19\x92\xa1\x2d\xbe\x4c\x18\x06\x8b\xec\x82", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xee\xbb\xc9\x88\x40\xf8\xae\x6d\xaf\x76\x57\x3b\x7e\x56\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4e\x11\xa9\xf7\x42\x05\x12\x5b\x61\xe0\xae\xe0\x47\xec\xa2\x0d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf6\x04\x67\xf5\x5a\x1f\x17\xea\xb8\x8e\x80\x01\x20\xcb\xc2\x84", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x36\x64\x9f\x60\x0b\x44\x9e\xe2\x76\x53\x0f\x0c\xd8\x3c\x11", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\xc0\xe3\x65\x6a\x9e\x3a\xc7\xcd\x37\x8a\x73\x7f\x53\xb6\x37", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6b\xac\xae\x63\xd3\x3b\x92\x8a\xa8\x38\x0f\x8d\x54\xd8\x8c\x17", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x89\x35\xff\xbc\x75\xae\x62\x51\xbf\x8e\x85\x9f\x08\x5a\xdc\xb9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xdc\x49\x70\xfe\x35\xf6\x77\x47\xcb\x05\x62\xc0\x6d\x87\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x14\xf9\xdf\x85\x89\x75\x85\x17\x97\xba\x60\x4f\xb0\xd1\x6c\xc7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xea\x0c\x98\xdc\xa1\x0b\x38\xc2\x1b\x3b\x14\xe8\xd1\xb7\x1f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\x09\x1b\x1b\x5b\x07\x49\xb2\xad\xc8\x03\xe6\x3d\xda\x9b\x72", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\xb3\x89\xe3\x32\x2c\x6d\xa0\x83\x84\x34\x5a\x41\x37\xfd\x08", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x38\x13\x08\xc4\x38\xf3\x5b\x39\x9f\x10\xad\x71\xb0\x50\x27\xd8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\xc2\x30\xfc\xfa\x92\x79\xc3\x40\x9f\xc4\x23\xe2\xac\xbe\x04", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x84\xa4\x75\xac\xb0\x11\xf3\xf5\x9f\x4f\x46\xb7\x62\x74\xc0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\x11\x9b\x68\xcb\x3f\x83\x99\xee\x60\x06\x6b\x56\x11\xa4\xd7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\x23\x76\x2f\x52\x7a\x40\x60\xff\xca\x31\x2d\xcc\xa2\x2a\x16", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x61\xa2\x74\x5a\x33\xf0\x56\xa5\xac\x6a\xce\x2f\x08\xe3\x44", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\xf1\x45\x76\x6e\xca\x84\x9f\x5d\x01\x15\x36\xa6\x55\x7f\xdb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xaf\x27\xb2\xc8\x9c\x9b\x4c\xf4\xa0\xc4\x10\x6a\xc8\x03\x18", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x9c\x4f\x16\xc6\x21\xf4\xea\xb7\xe9\xac\x1d\x75\x51\xdd\x57", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x8e\x06\xfb\xa4\x66\xfa\x70\x85\x4d\x8c\x2e\x52\x4c\xff\xb2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x4b\xc7\x8b\x22\x50\x70\x77\x3f\x04\xc4\x04\x66\xd4\xe9\x0c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x2c\xbf\xf1\xed\x01\x50\xfe\xda\x8a\x47\x99\xbe\x94\x55\x1f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x08\xb3\x0d\x7b\x3f\x27\x96\x27\x09\xa3\x6b\xca\xdf\xb9\x74\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xf6\xd3\x2e\x04\x4d\x77\xad\xcf\x37\xfb\x97\xac\x21\x33\x26", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xcb\x28\x4e\xcd\xcf\xd7\x81\xa8\xaf\xe3\x20\x77\x94\x9e\x88", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x01\x7b\xb0\x2e\xc8\x7b\x2b\x94\xc9\x6e\x40\xa2\x6f\xc7\x1a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc5\xc0\x38\xb6\x99\x06\x64\xab\x08\xa3\xaa\xa5\xdf\x9f\x32\x66", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\x70\x20\xbe\x37\xfa\xb6\x25\x9b\x2a\x27\xf4\xec\x55\x15\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\x13\x67\x03\x37\x4f\x64\xe8\x60\xb4\x8c\xe3\x1f\x93\x07\x16", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x63\xa2\x69\xb1\x4d\x50\x6c\xcc\x40\x1a\xb8\xa9\xf1\xb5\x91", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\x17\xf8\x1d\xc6\xaa\x45\x4a\xee\x4b\xd4\xa5\xa5\xcf\xf4\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xde\xce\xcd\x53\x54\xf0\x4d\x53\x0d\x76\xed\x88\x42\x46\xeb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xc5\x20\x5c\xc8\xfd\x8e\xda\x9a\x3c\xff\xd2\x51\x8f\x36\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x42\xfb\x47\x42\x93\xd9\x6e\xca\x9d\xb1\xb3\x7b\x1b\xa6\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa2\x31\x69\x26\x07\x16\x9b\x4e\xcd\xea\xd5\xcd\x3b\x10\xdb\x3e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\xe4\xb9\x1c\x9c\x66\x9e\x77\xe7\xac\xac\xd1\x98\x59\xed\x49", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\xdb\x7c\xfd\x4a\x7b\x2b\x62\xab\x78\xa4\x8f\x3d\xda\xf4\xaf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\xfa\xba\x2d\x46\xe2\x59\xcf\x48\x0d\x7c\x38\xe4\x57\x2a\x58", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x1c\x45\xbc\x6a\xe1\x6d\xee\x6e\xb7\xbe\xa1\x28\x70\x15\x82", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\xd0\x30\x57\xcf\x13\x64\x42\x0c\x2b\x78\x06\x9a\x3e\x25\x02", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xb5\x05\xe6\xcc\x13\x84\xcb\xae\xc1\xdf\x90\xb8\x0b\xeb\x20", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x74\xa3\xbe\xd2\x7b\xf4\xbd\x36\x22\xf9\xf5\xfe\x20\x83\x06", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x87\xf2\x6a\x89\xcf\xbf\xbb\x8e\x5e\xea\xc5\x40\x55\x31\x5e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\x47\xdd\x32\xd3\xb2\x9a\xb6\xa4\xca\xeb\x60\x6c\x5b\x6f\x78", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\x68\x61\xf8\xbc\x53\x86\xd3\x1f\xb7\x7f\x72\x0c\x32\x26\xe6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xcf\x1e\x6c\x42\x24\xef\xb3\x89\x00\xb1\x85\xab\x1d\xfd\x42", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x41\xaa\xb0\x5a\x42\xd3\x19\xde\x81\xd8\x74\xf5\xc7\xb9\x0d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\xb9\xbc\x75\x9e\x2a\xd8\xd2\x14\x0a\x6c\x76\x2a\xe9\xe1\xab", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\x85\x96\xe1\x5e\x78\xe2\xc0\x64\x15\x9d\xef\xce\x5f\x30\x85", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\xd0\x25\x13\xe8\xd4\xdc\x98\x6b\x4a\xfe\x08\x7a\x60\xbd\x0c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xe1\xf8\xb7\xe3\x06\x27\xc1\xc4\x51\x9e\xad\xa4\x4b\xc4\x36", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x46\xb5\xf8\x7a\xf4\x46\xf5\x79\x6c\x1f\xee\x63\xa2\xda\x24", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2a\x56\x03\x64\xce\x52\x9e\xfc\x21\x78\x87\x79\x56\x8d\x55\x55", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xc1\x47\x18\x37\xaf\x44\x61\x53\xbc\xe5\x5d\x5b\xa7\x2a\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xce\x60\xbc\x52\x38\x62\x34\xf1\x58\xf8\x43\x41\xe5\x34\xcd\x9e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8c\x7c\x27\xff\x32\xbc\xf8\xdc\x2d\xc5\x7c\x90\xc2\x90\x39\x61", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\xbb\x6a\x7e\xc8\x44\x99\xe1\x66\xf9\x36\x00\x3d\x55\xa5\xbb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\xc7\x72\xe5\xc6\x26\x31\xef\x66\x0e\xe1\xd5\x87\x7f\x6d\x1b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x0d\x7e\x5b\x64\xf3\x80\xa7\xe4\xea\x53\x87\xb5\xcd\x7f\x49", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xc9\xa2\x61\x00\x37\x00\x9b\x69\x8f\x11\xbb\x7e\x86\xc8\x3e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x46\x61\x2c\x76\x6d\x18\x40\xc2\x26\x36\x4f\x1f\xa7\xed\x72", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\x80\xc7\xe0\x8f\x27\xbe\xfe\x78\x59\x07\x43\xc0\x5e\x69\x8b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x25\x20\xce\x82\x9a\x26\x57\x7f\x0f\x48\x22\xc4\xec\xc8\x74\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\x65\xe8\xac\xc1\x69\x75\x83\x19\xcb\x46\xdc\x7b\xcf\x3d\xca", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\x8f\x4b\xa4\xf0\x73\xdf\x4b\xaa\x11\x6d\x01\x1d\xc2\x4a\x28", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x78\xf6\x8c\x5d\xbf\x59\xe2\x11\xb3\xa6\x59\xa7\x31\x7d\x94", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x28\x3d\x3b\x06\x9d\x8e\xb9\xfb\x43\x2d\x74\xb9\x6c\xa7\x62\xb4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\xe1\x84\x2e\x8a\x87\x86\x1c\x22\x1a\x50\x08\x83\x24\x5c\x51", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xaa\x27\x04\x71\x88\x1b\xe0\x70\xfb\x52\xc7\x06\x7c\xe7\x32", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\xb0\xf4\x76\xd4\x84\xf4\x3f\x1a\xeb\x6e\xfa\x93\x61\xa8\xac", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x3a\x94\xf1\xc0\x52\xc5\x5c\x2d\x83\x59\xaf\xf2\x16\x3b\x4f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\xa0\x67\xb6\x04\xd5\x37\x3d\x8b\x0f\x2e\x05\xa0\x3b\x34\x1b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x87\x6e\xc8\x7f\x5a\x09\xbf\xea\x42\xc7\x7d\xa3\x0f\xd5\x0e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0c\xf3\xe9\xd3\xa4\x2b\xe5\xb8\x54\xca\x65\xb1\x3f\x35\xf4\x8d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x62\xf6\xbb\xca\xb7\xc3\xe8\x21\xc9\x29\x0f\x08\x89\x2d\xda", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7f\x5e\x05\xbd\x20\x68\x73\x81\x96\xfe\xe7\x9a\xce\x7e\x3a\xec", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\x0e\x0d\x73\x32\x55\xcd\xa9\x2f\xb4\x6e\x84\x2f\xe5\x80\x54", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\x5d\x5b\x1c\x4e\xa1\xb7\xa2\x2e\x55\x83\xac\x2e\x9e\xd8\xa7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xe5\x37\xe8\x9e\x84\x91\xe8\x66\x2a\xae\x3b\xc8\x09\x42\x1d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x7d\xd3\xe9\xf1\x59\x8b\xfa\x73\xf7\x59\x73\xf7\xe9\x3b\x76", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x38\xd4\xf7\x45\x2a\xfe\xfc\xb7\xfc\x72\x12\x44\xe4\xb7\x2e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0b\xe2\xb1\x82\x52\xe7\x74\xdd\xa3\x0c\xdd\xa0\x2c\x69\x06\xe3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x69\x5e\x59\xc2\x03\x61\xd8\x26\x52\xd7\xd5\x8b\x6f\x11\xb2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\x2d\x88\xd1\x3e\xae\x52\x08\x9a\xbd\x61\x43\xcf\xe3\x94\xe9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x9b\xce\xb3\xb8\x23\xfe\xdd\x60\x2c\x30\x53\x45\x73\x4b\xd2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x7b\x1d\xbb\x0f\xfa\x40\xef\x7d\x95\xde\xf4\x21\x23\x3f\xae", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\xa0\xc1\xd9\x33\x56\xd9\xeb\x8a\xa9\x52\x08\x4d\x75\xf9\x13", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xcb\xf9\xcb\x18\x6e\x27\x0d\xd7\xbd\xb0\xc2\x8f\xeb\xc5\x7d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\x43\x37\xc3\x7c\x4e\x79\x0a\xb4\x57\x80\xbd\x9c\x36\x74\xa0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\x35\x58\xc1\x35\x25\x2f\xb9\xc9\xf3\x67\xed\x60\x94\x67\xa1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x72\xee\xae\xe4\x89\x9b\x44\x39\x14\xe5\xb3\xa5\x7f\xba\x92", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\x18\x65\xf9\x1b\xc5\x68\x68\xd0\x51\xe5\x2c\x9e\xfd\x59\xb7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe4\x77\x13\x18\xad\x7a\x63\xdd\x68\x0f\x6e\x58\x3b\x77\x47\xea", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\xe3\xd1\x94\x08\x8d\xc8\xd9\x7e\x9e\x6d\xb3\x74\x57\xea\xc5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xff\x1e\xc9\xcc\xfb\xc3\x49\xe5\xd3\x56\xd0\x63\x69\x3a\xd6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3c\xc9\xe9\xa9\xbe\x8c\xc3\xf6\xfb\x2e\xa2\x40\x88\xe9\xbb\x19", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xe5\xab\x00\x3d\xc8\x72\x2e\x74\x90\x5d\x9a\x8f\xe3\xd3\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x53\x39\x31\x95\x84\xb0\xa4\x12\x41\x28\x69\xd6\xc2\xea\xda", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\xd4\x96\x91\x81\x15\xd1\x4e\xd5\x38\x08\x52\x71\x6c\x88\x14", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x3a\xb2\xf2\xb4\xa3\x66\xa5\x7d\x58\x2a\x33\x93\x13\xc8\xb1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x33\x65\xa9\xff\xbe\x3b\x0c\xa6\x1e\x98\x50\x75\x54\x16\x8b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaf\xa9\x9c\x99\x7a\xc4\x78\xa0\xde\xa4\x11\x9c\x9e\x45\xf8\xb1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x92\x16\x30\x9a\x78\x42\x43\x0b\x83\xff\xb9\x86\x38\x01\x15\x12", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\xab\xc7\x92\x28\x82\x58\x49\x2a\x7c\xb4\x51\x45\xf4\xb7\x59", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x49\x23\xc1\x69\xd5\x04\xd7\x51\x9c\x15\xd3\x0e\x75\x6c\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\xfa\x75\xe0\x5b\xcd\xc7\xe0\x0c\x27\x3f\xa3\x3f\x6e\xe4\x41\xd2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\x35\x0f\xa6\x05\x70\x80\xf1\x08\x6a\x56\xb1\x7e\xc2\x40\xdb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x4e\x4a\x63\x24\xea\x4a\x5c\x39\xa6\x61\xc8\xfe\x5a\xda\x8f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x08\x82\xa1\x6f\x44\x08\x8d\x42\x44\x7a\x29\xac\x09\x0e\xc1\x7e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x3c\x15\xbf\xc1\x1a\x95\x37\xc1\x30\x68\x70\x04\xe1\x36\xee", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\xc0\xa7\x67\x8d\xc6\xd8\xcf\x5c\x8a\x6d\x5a\x99\x60\x76\x7c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\x6b\x09\x80\x9d\x68\xb9\xa4\x56\x43\x2a\x79\xbd\xc2\xe3\x8c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xba\xaf\xfb\x35\xfb\xe7\x39\xc1\x7c\x6a\xc2\x2e\xec\xf1\x8f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\xc8\xaa\x80\xa7\x85\x06\x75\xbc\x00\x7c\x46\xdf\x06\xb4\x98\x68", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x12\xc6\xf3\x87\x7a\xf4\x21\xa9\x18\xa8\x4b\x77\x58\x58\x02\x1d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x33\xf1\x23\x28\x2c\x5d\x63\x39\x24\xf7\xd5\xba\x3f\x3c\xab\x11", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\xa8\xf1\x61\x00\x27\x33\xe9\x3c\xa4\x52\x7d\x22\xc1\xa0\xc5\xbb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\xb7\x2f\x70\xeb\xf3\xe3\xfd\xa2\x3f\x50\x8e\xec\x76\xb4\x2c\x02", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x6a\x9d\x96\x5e\x62\x74\x14\x3f\x25\xaf\xdc\xfc\x88\xff\xd7\x7c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\xa0\xc7\x4f\xd0\xb9\x36\x17\x64\xce\x91\xc5\x20\x0b\x09\x53\x57", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x09\x1d\x1f\xdc\x2b\xd2\xc3\x46\xcd\x50\x46\xa8\xc6\x20\x91\x46", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\xe2\xa3\x75\x80\x11\x6c\xfb\x71\x85\x62\x54\x49\x6a\xb0\xac\xa8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\xe0\xb3\xa0\x07\x85\x91\x7c\x7e\xfc\x9a\xdb\xa3\x22\x81\x35\x71", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x73\x3d\x41\xf4\x72\x7b\x5e\xf0\xdf\x4a\xf4\xcf\x3c\xff\xa0\xcb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\xa9\x9e\xbb\x03\x02\x60\x82\x6f\x98\x1a\xd3\xe6\x44\x90\xaa\x4f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x73\xf3\x4c\x7d\x3e\xae\x5e\x80\x08\x2c\x16\x47\x52\x43\x08\xee", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x40\xeb\xd5\xad\x08\x23\x45\xb7\xa2\x09\x7c\xcd\x34\x64\xda\x02", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x7c\xc4\xae\x9a\x42\x4b\x2c\xec\x90\xc9\x71\x53\xc2\x45\x7e\xc5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x54\xd6\x32\xd0\x3a\xba\x0b\xd0\xf9\x18\x77\xeb\xdd\x4d\x09\xcb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\xd3\x42\x7b\xe7\xe4\xd2\x7c\xd5\x4f\x5f\xe3\x7b\x03\xcf\x08\x97", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\xb2\x09\x97\x95\xe8\x8c\xc1\x58\xfd\x75\xea\x13\x3d\x7e\x7f\xbe", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\xa6\xca\xe4\x6f\xb6\xfa\xdf\xe7\xa2\xc3\x02\xa3\x42\x42\x81\x7b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x02\x6a\x70\x24\xd6\xa9\x02\xe0\xb3\xff\xcc\xba\xa9\x10\xcc\x3f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x15\x6f\x07\x76\x7a\x85\xa4\x31\x23\x21\xf6\x39\x68\x33\x8a\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x15\xee\xc9\xeb\xf4\x2b\x9c\xa7\x68\x97\xd2\xcd\x6c\x5a\x12\xe2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\xdb\x0d\x3a\x6f\xdc\xc1\x3f\x91\x5e\x2b\x30\x2c\xee\xb7\x0f\xd8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x71\xdb\xf3\x7e\x87\xa2\xe3\x4d\x15\xb2\x0e\x8f\x10\xe4\x89\x24", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\xc7\x45\xc4\x51\xe9\x6f\xf3\xc0\x45\xe4\x36\x7c\x83\x3e\x3b\x54", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x34\x0d\xa0\x9c\x2d\xd1\x1c\x3b\x67\x9d\x08\xcc\xd2\x7d\xd5\x95", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x82\x79\xf7\xc0\xc2\xa0\x3e\xe6\x60\xc6\xd3\x92\xdb\x02\x5d\x18", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\xa4\xb2\xc7\xd8\xeb\xa5\x31\xff\x47\xc5\x04\x1a\x55\xfb\xd1\xec", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x74\x56\x9a\x2c\xa5\xa7\xbd\x51\x31\xce\x8d\xc7\xcb\xfb\xf7\x2f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x37\x13\xda\x0c\x02\x19\xb6\x34\x54\x03\x56\x13\xb5\xa4\x03\xdd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x88\x27\x55\x1d\xdc\xc9\xdf\x23\xfa\x72\xa3\xde\x4e\x9f\x0b\x07", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x2e\x3f\xeb\xfd\x62\x5b\xfc\xd0\xa2\xc0\x6e\xb4\x60\xda\x17\x32", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\xee\x82\xe6\xba\x48\x81\x56\xf7\x64\x96\x31\x1d\xa6\x94\x1d\xeb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x47\x70\x44\x6f\x01\xd1\xf3\x91\x25\x6e\x85\xa1\xb3\x0d\x89\xd3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\xaf\x04\xb6\x8f\x10\x4f\x21\xef\x2a\xfb\x47\x67\xcf\x74\x14\x3c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xcf\x35\x79\xa9\xba\x38\xc8\xe4\x36\x53\x17\x3e\x14\xf3\xa4\xc6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\xb3\xbb\xa9\x04\xf4\x95\x3e\x09\xb5\x48\x00\xaf\x2f\x62\xe7\xd4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\xfc\x42\x49\x65\x6e\x14\xb2\x9e\xb9\xc4\x48\x29\xb4\xc5\x9a\x46", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x9b\x31\x56\x8f\xeb\xe8\x1c\xfc\x2e\x65\xaf\x1c\x86\xd1\xa3\x08", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x9c\xa0\x9c\x25\xf2\x73\xa7\x66\xdb\x98\xa4\x80\xce\x8d\xfe\xdc", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\xb9\x09\x92\x57\x86\xf3\x4c\x3c\x92\xd9\x71\x88\x3c\x9f\xbe\xdf", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x82\x64\x7f\x13\x32\xfe\x57\x0a\x9d\x4d\x92\xb2\xee\x77\x1d\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x36\x04\xa7\xe8\x08\x32\xb3\xa9\x99\x54\xbc\xa6\xf5\xb9\xf5\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x88\x46\x07\xb1\x28\xc5\xde\x3a\xb3\x9a\x52\x9a\x1e\xf5\x1b\xef", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x67\x0c\xfa\x09\x3d\x1d\xbd\xb2\x31\x70\x41\x40\x41\x02\x43\x5e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x7a\x86\x71\x95\xf3\xce\x87\x69\xcb\xd3\x36\x50\x2f\xbb\x51\x30", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x52\xef\xcf\x64\xc7\x2b\x2f\x7c\xa5\xb3\xc8\x36\xb1\x07\x8c\x15", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x40\x19\x25\x0f\x6e\xef\xb2\xac\x5c\xcb\xca\xe0\x44\xe7\x5c\x7e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x02\x2c\x4f\x6f\x5a\x01\x7d\x29\x27\x85\x62\x76\x67\xdd\xef\x24", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\xe9\xc2\x10\x78\xa2\xeb\x7e\x03\x25\x0f\x71\x00\x0f\xa9\xe3\xed", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\xa1\x3e\xae\xeb\x9c\xd3\x91\xda\x4e\x2b\x09\x49\x0b\x3e\x7f\xad", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\xc9\x58\xa1\x71\xdc\xa1\xd4\xed\x53\xe1\xaf\x1d\x38\x08\x03\xa9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x21\x44\x2e\x07\xa1\x10\x66\x7f\x25\x83\xea\xee\xee\x44\xdc\x8c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x59\xbb\xb3\x53\xcf\x1d\xd8\x67\xa6\xe3\x37\x37\xaf\x65\x5e\x99", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x43\xcd\x3b\x25\x37\x5d\x0c\xe4\x10\x87\xff\x9f\xe2\x82\x96\x39", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x6b\x98\xb1\x7e\x80\xd1\x11\x8e\x35\x16\xbd\x76\x8b\x28\x5a\x84", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\xae\x47\xed\x36\x76\xca\x0c\x08\xde\xea\x02\xd9\x5b\x81\xdb\x58", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x34\xec\x40\xdc\x20\x41\x37\x95\xed\x53\x62\x8e\xa7\x48\x72\x0b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x4d\xc6\x81\x63\xf8\xe9\x83\x54\x73\x25\x35\x42\xc8\xa6\x5d\x46", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x2a\xab\xb9\x99\xf4\x36\x93\x17\x5a\xf6\x5c\x6c\x61\x2c\x46\xfb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\xe0\x1f\x94\x49\x9d\xac\x35\x47\x51\x5c\x5b\x1d\x75\x6f\x0f\x58", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x9d\x12\x43\x5a\x46\x48\x0c\xe0\x0e\xa3\x49\xf7\x17\x99\xdf\x9a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\xce\xf4\x1d\x16\xd2\x66\xbd\xfe\x46\x93\x8a\xd7\x88\x4c\xc0\xcf", },
-};
-
-static const struct ECB256_Test
-{
-       uint8_t key[32];
-       uint8_t pt[16];
-       uint8_t ct[16];
-}
-ECB256_Tests[] =
-{
-{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x5a\x6d\xcb\x19\xb2\x01\xa0\x1e\xbc\xfa\x8a\xa2\x2b\x57\x59", },
-{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb2\x91\x69\xcd\xcf\x2d\x83\xe8\x38\x12\x5a\x12\xee\x6a\xa4\x00", },
-{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xf3\xa7\x2f\xc3\xcd\xf7\x4d\xfa\xf6\xc3\xe6\xb9\x7b\x2f\xa6", },
-{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x77\x76\x79\xd5\x00\x37\xc7\x94\x91\xa9\x4d\xa7\x6a\x9a\x35", },
-{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\xf4\x89\x3e\xca\xfa\x0a\x02\x47\xa8\x98\xe0\x40\x69\x15\x59", },
-{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\xbb\x41\x37\x03\x73\x53\x26\x31\x0a\x26\x9b\xd3\xaa\x94\xb2", },
-{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\xe3\x22\x46\xbe\xd2\xb0\xe8\x59\xe5\x5c\x1c\xc6\xb2\x65\x02", },
-{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xec\x52\xa2\x12\xf8\x0a\x09\xdf\x63\x17\x02\x1b\xc2\xa9\x81\x9e", },
-{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\x3e\x5b\x60\x0e\xb7\x0d\xbc\xcf\x6c\x0b\x1d\x9a\x68\x18\x2c", },
-{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa3\xf5\x99\xd6\x3a\x82\xa9\x68\xc3\x3f\xe2\x65\x90\x74\x59\x70", },
-{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\xcc\xb9\xb1\x33\x70\x02\xcb\xac\x42\xc5\x20\xb5\xd6\x77\x22", },
-{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x11\x1f\x6c\x37\xcf\x40\xa1\x15\x9d\x00\xfb\x59\xfb\x04\x88", },
-{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x43\xb5\x1a\xb6\x09\x05\x23\x72\x98\x9a\x26\xe9\xcd\xd7\x14", },
-{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4d\xce\xde\x8d\xa9\xe2\x57\x8f\x39\x70\x3d\x44\x33\xdc\x64\x59", },
-{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\x4c\x1c\x26\x3b\xbc\xcf\xaf\xc1\x17\x82\x89\x46\x85\xe3\xa8", },
-{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x7a\xd8\x48\x80\xdb\x50\x61\x34\x23\xd6\xd5\x27\xa2\x82\x3d", },
-{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\x0b\x71\xdf\xc6\x88\xe1\x50\xd8\x15\x2c\x5b\x35\xeb\xc1\x4d", },
-{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xef\x24\x95\xda\xbf\x32\x38\x85\xaa\xb3\x9c\x80\xf1\x8d\x8b", },
-{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x63\x3c\xaf\xea\x39\x5b\xc0\x3a\xda\xe3\xa1\xe2\x06\x8e\x4b\x4e", },
-{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\x1b\x48\x2b\x53\x76\x1c\xf6\x31\x81\x9b\x74\x9a\x6f\x37\x24", },
-{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x6e\x6f\x85\x1a\xb5\x2c\x77\x19\x98\xdb\xb2\xd7\x1c\x75\xa9", },
-{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x85\xf2\xba\x84\xf8\xc3\x07\xcf\x52\x5e\x12\x4c\x3e\x22\xe6\xcc", },
-{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6b\xcc\xa9\x8b\xf6\xa8\x35\xfa\x64\x95\x5f\x72\xde\x41\x15\xfe", },
-{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\x75\xe2\xd3\x6e\xeb\xd6\x54\x11\xf1\x4f\xd0\xeb\x1d\x2a\x06", },
-{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbd\x49\x29\x50\x06\x25\x0f\xfc\xa5\x10\x0b\x60\x07\xa0\xea\xde", },
-{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x90\x52\x7d\x0e\xf7\xc7\x0f\x45\x9c\xd3\x94\x0d\xf3\x16\xec", },
-{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbb\xd1\x09\x7a\x62\x43\x3f\x79\x44\x9f\xa9\x7d\x4e\xe8\x0d\xbf", },
-{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x05\x8e\x40\x8f\x5b\x99\xb0\xe0\xf0\x61\xa1\x76\x1b\x5b\x3b", },
-{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5f\xd1\xf1\x3f\xa0\xf3\x1e\x37\xfa\xbd\xe3\x28\xf8\x94\xea\xc2", },
-{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x4a\xf7\xc9\x48\xdf\x26\xe2\xef\x3e\x01\xc1\xee\x5b\x8f\x6f", },
-{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x9f\xd7\x20\x8f\xb9\x2d\x44\xa0\x74\xa6\x77\xee\x98\x61\xac", },
-{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xad\x9f\xc6\x13\xa7\x03\x25\x1b\x54\xc6\x4a\x0e\x76\x43\x17\x11", },
-{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\xac\x9e\xcc\xc4\xcc\x75\xe2\x71\x16\x18\xf8\x0b\x15\x48\xe8", },
-{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x20\x25\xc7\x4b\x8a\xd8\xf4\xcd\xa1\x7e\xe2\x04\x9c\x4c\x90\x2d", },
-{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x5c\xa0\x5f\xe5\x28\xf1\xce\x9b\x79\x01\x66\xe8\xd5\x51\xe7", },
-{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6f\x62\x38\xd8\x96\x60\x48\xd4\x96\x71\x54\xe0\xda\xd5\xa6\xc9", },
-{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xb2\x1b\x4e\x76\x40\xa9\xb3\x34\x6d\xe8\xb8\x2f\xb4\x1e\x49", },
-{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x36\xf2\x51\xad\x1d\x11\xd4\x9d\xc3\x44\x62\x8b\x18\x84\xe1", },
-{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x7e\x94\x70\xae\x7a\xbe\xa5\xa9\x76\x9d\x49\x18\x26\x28\xc3", },
-{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\xdc\xc2\xd2\x7f\xc9\x86\x56\x33\xf8\x52\x23\xcf\x0d\x61\x1f", },
-{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbe\x66\xcf\xea\x2f\xec\xd6\xbf\x0e\xc7\xb4\x35\x2c\x99\xbc\xaa", },
-{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\x31\x14\x4f\x87\xa2\xef\x52\x3f\xac\xdc\xf2\x1a\x42\x78\x04", },
-{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xbb\x0f\x56\x29\xfb\x6a\xae\x5e\x18\x39\xa3\xc3\x62\x5d\x63", },
-{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3c\x9d\xb3\x33\x53\x06\xfe\x1e\xc6\x12\xbd\xbf\xae\x6b\x60\x28", },
-{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3d\xd5\xc3\x46\x34\xa7\x9d\x3c\xfc\xc8\x33\x97\x60\xe6\xf5\xf4", },
-{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\xbd\xa1\x18\xa3\xed\x7a\xf3\x14\xfa\x2c\xcc\x5c\x07\xb7\x61", },
-{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x37\xa6\x4f\x7d\x4f\x46\xfe\x6f\xea\x3b\x34\x9e\xc7\x8e\x38", },
-{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x5f\x06\x8c\x28\x47\x66\x05\x73\x5a\xd6\x71\xbb\x8f\x39\xf3", },
-{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xae\x68\x2c\x5e\xcd\x71\x89\x8e\x08\x94\x2a\xc9\xaa\x89\x87\x5c", },
-{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\x03\x1c\xb9\xd6\x76\xc3\x02\x2d\x7f\x26\x22\x7e\x85\xc3\x8f", },
-{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x84\x63\xfb\x06\x4d\xb5\xd5\x2b\xb6\x4b\xfe\xf6\x4f\x2d\xda", },
-{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8a\xa9\xb7\x5e\x78\x45\x93\x87\x6c\x53\xa0\x0e\xae\x5a\xf5\x2b", },
-{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x84\x56\x6d\xf2\x3d\xa4\x8a\xf6\x92\x72\x2f\xe9\x80\x57\x3a", },
-{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x31\x69\x0b\x5e\xd4\x1c\x7e\xb4\x2a\x1e\x83\x27\x0a\x7f\xf0\xe6", },
-{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xdd\x77\x02\x64\x6d\x55\xf0\x83\x65\xe4\x77\xd3\x59\x0e\xda", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4c\x02\x2a\xc6\x2b\x3c\xb7\x8d\x73\x9c\xc6\x7b\x3e\x20\xbb\x7e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x09\x2f\xa1\x37\xce\x18\xb5\xdf\xe7\x90\x6f\x55\x0b\xb1\x33\x70", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\x0c\xda\xdf\x2e\x68\x35\x3c\x00\x27\x67\x2c\x97\x14\x4d\xd3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xc4\xb2\x00\xb3\x83\xfc\x1f\x2b\x2e\xa6\x77\x61\x8a\x1d\x27", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x82\x5f\x99\xb0\xe9\xbb\x34\x77\xc1\xc0\x71\x3b\x01\x5a\xac", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\xb9\xff\xfb\x5c\x18\x7f\x7d\xdc\x7a\xb1\x0f\x4f\xb7\x75\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xb4\xe8\x7a\x32\xb3\x7d\x6f\x2c\x83\x28\xd3\xb5\x37\x78\x02", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x76\xc1\x3a\x5d\x22\x0f\x4d\xa9\x22\x4e\x74\x89\x63\x91\xce", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\xef\xe7\xa0\xe2\xe0\x31\xe2\x53\x6d\xa0\x1d\xf7\x99\xc9\x27", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\x8f\xd8\x22\x68\x0a\x85\x97\x4e\x53\xa5\xa8\xeb\x9d\x38\xde", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\xf0\xa9\x1b\x2e\x45\xf8\xcc\x37\xb7\x80\x5a\x30\x42\x58\x8d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\x7a\x62\x52\x25\x5e\x46\xd6\x36\x4d\xbe\xed\xa3\x1e\x27\x9c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf5\x1a\x0f\x69\x44\x42\xb8\xf0\x55\x71\x79\x7f\xec\x7e\xe8\xbf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9f\xf0\x71\xb1\x65\xb5\x19\x8a\x93\xdd\xde\xeb\xc5\x4d\x09\xb5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x0a\x19\xfd\x57\x58\xb0\xc4\xbc\x1a\x5d\xf8\x9c\xf7\x38\x77", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x12\x01\x66\x30\x71\x19\xca\x22\x80\xe9\x31\x56\x68\xe9\x6f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\x3b\x9f\x1e\x09\x9c\x2a\x09\xdc\x09\x1e\x90\xe4\xf1\x8f\x0a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\x04\x0b\x89\x1d\x4b\x37\xf6\x85\x1f\x7e\xc2\x19\xcd\x3f\x6d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9f\x0f\xde\xc0\x8b\x7f\xd7\x9a\xa3\x95\x35\xbe\xa4\x2d\xb9\x2a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x70\xf1\x68\xfc\x74\xbf\x91\x1d\xf2\x40\xbc\xd2\xce\xf2\x36", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x46\x2c\xcd\x7f\x5f\xd1\x10\x8d\xbc\x15\x2f\x3c\xac\xad\x32\x8b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa4\xaf\x53\x4a\x7d\x0b\x64\x3a\x01\x86\x87\x85\xd8\x6d\xfb\x95", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x98\x02\x96\x19\x7e\x1a\x50\x22\x32\x6c\x31\xda\x4b\xf6\xf3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf9\x7d\x57\xb3\x33\x3b\x62\x81\xb0\x7d\x48\x6d\xb2\xd4\xe2\x0c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x3f\xa3\x67\x20\x23\x1a\xfe\x4c\x75\x9a\xde\x6b\xd6\x2e\xb6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xcf\xac\x0c\x02\xca\x53\x83\x43\xc6\x81\x17\xe0\xa1\x59\x38", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xad\x49\x16\xf5\xee\x57\x72\xbe\x76\x4f\xc0\x27\xb8\xa6\xe5\x39", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x16\x87\x3e\x16\x78\x61\x0d\x7e\x14\xc0\x2d\x00\x2e\xa8\x45", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4e\x6e\x62\x7c\x1a\xcc\x51\x34\x00\x53\xa8\x23\x6d\x57\x95\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x0c\x84\x10\xae\xee\xad\x92\xfe\xec\x1e\xb4\x30\xd6\x52\xcb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\x6f\x7e\x23\xe8\x35\xe1\x14\x97\x7f\x60\xe1\xa5\x92\x20\x2e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\x8a\xd5\x05\x5a\x36\x70\x41\xfa\xde\x09\xd9\xa7\x0a\x79\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x91\x82\x3a\x3c\x66\x6b\xb6\x16\x28\x25\xe7\x86\x06\xa7\xfe", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xca\x36\x6a\x9b\xf4\x7b\x7b\x86\x8b\x77\xe2\x5c\x18\xa3\x64", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x4c\x9e\xfc\x23\x7e\x4a\x44\x29\x65\xf8\x4b\xce\x20\x24\x7a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x58\x41\x1f\xfb\xe6\x3f\xdb\x9c\x8a\xa1\xbf\xae\xd6\x7b\x52", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\xbc\x3d\xa2\x17\x9c\x30\x15\x49\x8b\x0e\x03\x91\x0d\xb5\xb8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\x07\x1e\xea\xb3\xf9\x35\xdb\xc2\x5d\x00\x84\x14\x60\x26\x0f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0e\xbd\x7c\x30\xed\x20\x16\xe0\x8b\xa8\x06\xdd\xb0\x08\xbc\xc8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x15\xc6\xbe\xcf\x0f\x4c\xec\x71\x29\xcb\xd2\x2d\x1a\x79\xb1\xb8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0a\xee\xde\x5b\x91\xf7\x21\x70\x0e\x9e\x62\xed\xbf\x60\xb7\x81", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x65\x81\xaf\x0d\xcf\xbe\xd1\x58\x5e\x0a\x24\x2c\x64\xb8\xdf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x66\x93\xdc\x91\x16\x62\xae\x47\x32\x16\xba\x22\x18\x9a\x51\x1a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x76\x06\xfa\x36\xd8\x64\x73\xe6\xfb\x3a\x1b\xb0\xe2\xc0\xad\xf5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x20\x78\xe9\xe1\x1f\xbb\x78\xe2\x6f\xfb\x88\x99\xe9\x6b\x9a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\xb2\x64\xe9\x21\xe9\xe4\xa8\x26\x94\x58\x9e\xf3\x79\x82\x62", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x45\x95\xcb\x4f\xa7\x02\x67\x15\xf5\x5b\xd6\x8e\x28\x82\xf9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\x88\xa3\x02\xbd\xbc\x09\x19\x7d\xf1\xed\xae\x68\x92\x6e\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\xf7\x50\x23\x90\xb8\xa4\xa2\x21\xcf\xec\xd0\x66\x66\x24\xba", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3d\x20\x25\x3a\xdb\xce\x3b\xe2\x37\x37\x67\xc4\xd8\x22\xc5\x66", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa4\x27\x34\xa3\x92\x9b\xf8\x4c\xf0\x11\x6c\x98\x56\xa3\xc1\x8c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\xab\xc4\x93\x94\x57\x42\x2b\xb9\x57\xda\x3c\x56\x93\x8c\x6d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x2b\xdd\x2e\x7c\x52\x51\x30\xfa\xdc\x8f\x76\xfc\x6f\x4b\x3f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xa8\x3d\x7b\x94\xc6\x99\xcb\xcb\x8a\x7d\x9b\x61\xf6\x40\x93", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xce\x61\xd6\x35\x14\xad\xed\x03\xd4\x3e\x6e\xbf\xc3\xa9\x00\x1f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x83\x9d\xd5\x8e\xea\xe6\xb8\xa3\x6a\xf4\x8e\xd6\x3d\x2d\xc9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcd\x5e\xce\x55\xb8\xda\x3b\xf6\x22\xc4\x10\x0d\xf5\xde\x46\xf9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x6f\x46\xf4\x0e\x0a\xc5\xfc\x0a\x9c\x11\x05\xf8\x00\xf4\x8d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x26\xd4\x7d\xa3\xae\xb0\x28\xde\x4f\xb5\xb3\xa8\x54\xa2\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\xf5\x3b\xf6\x20\xd3\x67\x72\x68\x44\x52\x12\x90\x43\x89\xd5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\x61\x7d\x28\xb5\xe0\xf4\x60\x54\x92\xb1\x82\xa5\xd7\xf9\xf6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9a\xae\xc4\xfa\xbb\xf6\xfa\xe2\xa7\x1f\xef\xf0\x2e\x37\x2b\x39", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x90\xc6\x2d\x88\xb5\xc4\x28\x09\xab\xf7\x82\x48\x8e\xd1\x30", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\xf1\xc5\xa4\x08\x99\xe1\x57\x72\x85\x7c\xcb\x65\xc7\xa0\x9a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x08\x43\xd2\x9b\x25\xa3\x89\x7c\x69\x2c\xe1\xdd\x81\xee\x52", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x66\xbc\x65\xb6\x94\x1d\x86\xe8\x42\x0a\x7f\xfb\x09\x64\xdb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x81\x93\xc6\xff\x85\x22\x5c\xed\x42\x55\xe9\x2f\x6e\x07\x8a\x14", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x61\xcb\x24\x24\xd7\xd4\xa3\x80\xd5\x47\xf9\xe7\xec\x1c\xb9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\xf9\x3d\x9e\xc0\x84\x53\xa0\x71\xe2\xe2\x87\x78\x77\xa9\xc8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xee\xfa\x80\xce\x6a\x4a\x9d\x59\x8e\x3f\xec\x36\x54\x34\xd2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd6\x20\x68\x44\x45\x78\xe3\xab\x39\xce\x7e\xc9\x5d\xd0\x45\xdc", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xf7\x1d\x4d\xd9\xa7\x1f\xe5\xd8\xbc\x8b\xa7\xe6\xea\x30\x48", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x25\xa3\x47\xac\x47\x9d\x4f\x9d\x95\xc5\xcb\x8d\x3f\xd7\xe9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x71\x4e\x94\xa5\x77\x89\x55\xcc\x03\x46\x35\x8e\x94\x78\x3a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x36\xb4\x4b\xb2\x9e\x0c\x7d\x89\xfa\x4b\x2d\x4b\x67\x7d\x2a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5d\x45\x4b\x75\x02\x1d\x76\xd4\xb8\x4f\x87\x3a\x8f\x87\x7b\x92", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc3\x49\x8f\x7e\xce\xd2\x09\x53\x14\xfc\x28\x11\x58\x85\xb3\x3f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\x66\x88\x56\x53\x9a\xd8\xe4\x05\xbd\x12\x3f\xe6\xc8\x85\x30", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\x80\xdb\x7f\x3a\x87\xb8\x60\x55\x43\xcf\xdb\xe6\x75\x40\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x5d\x03\xb1\x30\x69\xc3\x65\x8b\x31\x79\xbe\x91\xb0\x80\x0c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x1b\x38\x4a\xc4\xd9\x3e\xda\x00\xc9\x2a\xdd\x09\x95\xea\x5f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbf\x81\x15\x80\x54\x71\x74\x1b\xd5\xad\x20\xa0\x39\x44\x79\x0f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\x4c\x24\xb6\x89\x4b\x03\x8b\x3c\x0d\x09\xb1\xdf\x06\x8b\x0b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x39\x67\xa1\x0c\xff\xe2\x7d\x01\x78\x54\x5f\xbf\x6a\x40\x54\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\x85\xe9\xc9\x5d\xe1\xa9\xec\x5a\x53\x63\xa8\xa0\x53\x47\x2d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa9\xee\xc0\x3c\x8a\xbe\xc7\xba\x68\x31\x5c\x2c\x8c\x23\x16\xe0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\xc8\xe4\x14\xc2\xf3\x88\x22\x7a\xe1\x49\x86\xfc\x98\x35\x24", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5d\x94\x2b\x7f\x46\x22\xce\x05\x6c\x3c\xe3\xce\x5f\x1d\xd9\xd6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x40\xd6\x48\xce\x21\xa3\x02\x02\x82\xc3\xf1\xb5\x28\xa0\xb6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\xd0\x89\xc3\x6d\x5c\x5a\x4e\xfc\x68\x9e\x3b\x0d\xe1\x0d\xd5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\xda\x5d\xf4\xbe\xcb\x54\x62\xe0\x3a\x0e\xd0\x0d\x29\x56\x29", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xf4\xe1\x29\x13\x6c\x1a\x4b\x7a\x0f\x38\x93\x5c\xc3\x4b\x2b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\xa4\xc7\x61\x8b\x0c\xe4\x8a\x3d\x5a\xee\x1a\x1c\x01\x14\xc4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x35\x2d\xf0\x25\xc6\x5c\x7b\x0b\xf3\x06\xfb\xee\x0f\x36\xba", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\x8a\xca\x23\xfd\x34\x09\xf3\x8a\xf6\x33\x78\xed\x2f\x54\x73", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\x83\x6a\x0e\x06\xa7\x96\x91\xb3\x66\x67\xd5\x38\x0d\x81\x88", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x90\x50\x80\xf7\xac\xf1\xcd\xae\x0a\x91\xfc\x3e\x85\xae\xe4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xc9\xe4\x64\x6d\xbc\x3d\x63\x20\xfc\x66\x89\xd9\x3e\x88\x33", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x77\x41\x3d\xea\x59\x25\xb7\xf5\x41\x7e\xa4\x7f\xf1\x9f\x59", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\xae\x81\x29\xf8\x43\xd8\x6d\xc7\x86\xa0\xfb\x1a\x18\x49\x70", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\xfe\xfb\x53\x41\x00\x79\x6e\xeb\xbd\x99\x02\x06\x75\x4e\x19", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8c\x79\x1d\x5f\xdd\xdf\x47\x0d\xa0\x4f\x3e\x6d\xc4\xa5\xb5\xb5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\x3b\xbd\xc0\x7a\x46\x11\xae\x4b\xb2\x66\xea\x50\x34\xa3\x87", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\x02\xe3\x8e\x48\x9a\xa7\x47\x62\xf3\xef\xc5\xbb\x23\x20\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x20\x14\x81\x66\x5c\xba\xfc\x1f\xcc\x22\x0b\xc5\x45\xfb\x3d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x60\x75\x7e\xc6\xce\x68\xcf\x19\x5e\x45\x4c\xfd\x0f\x32\xca", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\xec\x7c\xe6\xa6\xcb\xd0\x7c\x04\x34\x16\x73\x7f\x1b\xbb\x33", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\xc5\x41\x39\x04\x48\x7a\x80\x5d\x70\xa8\xed\xd9\xc3\x55\x27", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x34\x78\x46\xb2\xb2\xe3\x6f\x1f\x03\x24\xc8\x6f\x7f\x1b\x98\xe2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x2e\xee\x1a\x0c\xbd\x19\xca\x2d\x69\xb4\x26\x89\x40\x44\xf0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\x6b\x5b\x39\x77\xba\x6e\xfa\x51\x28\xef\xbd\xa9\xff\x03\xcd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x14\x45\xee\x94\xc0\xf0\x8c\xde\xe5\xc3\x44\xec\xd1\xe2\x33", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbe\x28\x83\x19\x02\x93\x63\xc2\x62\x2f\xeb\xa4\xb0\x5d\xfd\xfe", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\xd1\x87\x55\x23\xf3\xcd\x21\xc3\x95\x65\x1e\x6e\xe1\x5e\x56", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x5a\x40\x86\x57\x83\x7c\x53\xbf\x16\xf9\xd8\x46\x5d\xce\x19", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x0b\xf4\x2c\xb1\x07\xf5\x5c\xcf\xf2\xfc\x09\xee\x08\xca\x15", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xd9\xbb\xb4\xa7\xdc\x2e\x4a\x23\x53\x6a\x58\x80\xa2\xdb\x67", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xe4\x47\xb3\x62\xc4\x84\x99\x3d\xec\x94\x42\xa3\xb4\x6a\xef", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\xdf\xfb\x05\x90\x4b\xff\x7c\x47\x81\xdf\x78\x0a\xd2\x68\x37", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc3\x3b\xc1\x3e\x8d\xe8\x8a\xc2\x52\x32\xaa\x74\x96\x39\x87\x83", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x35\x9c\x70\x80\x3a\x3b\x2a\x3d\x54\x2e\x87\x81\xde\xa9\x75", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbc\xc6\x5b\x52\x6f\x88\xd0\x5b\x89\xce\x8a\x52\x02\x1f\xdb\x06", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x91\xa3\x88\x55\xc8\xc4\x64\x38\x51\xfb\xfb\x35\x8b\x01\x09", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x6e\x88\x93\xa1\x14\xae\x8e\x27\xd5\xab\x03\xa5\x49\x96\x10", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x66\x29\xd2\xb8\xdf\x97\xda\x72\x8c\xdd\x8b\x1e\x7f\x94\x50\x77", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\x70\xa5\xa1\x8c\xfc\x0d\xd5\x82\xf1\xd8\x8d\x5c\x9a\x17\x20", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xbc\x65\xaa\x8e\x89\x56\x2e\x3f\x27\x4d\x45\xaf\x1c\xd1\x0b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x98\x55\x1d\xa1\xa6\x50\x32\x76\xae\x1c\x77\x62\x5f\x9e\xa6\x15", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xdf\xe5\x1c\xed\x7e\x3f\x4a\xe9\x27\xda\xa3\xfe\x45\x2c\xee", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x82\x62\x51\xe4\xce\x38\x4b\x80\x21\x8b\x0e\x1d\xa1\xdd\x4c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xac\xf7\x28\xb8\x8a\xbb\xad\x70\x11\xed\x0e\x64\xa1\x68\x0c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x0d\x8e\xe7\xc5\x67\x7e\x09\x9a\xc7\x4c\x99\x94\xee\x4c\xfb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xf6\x1a\xe3\x62\xe8\x82\xdd\xc0\x16\x74\x74\xa7\xa7\x7f\x3a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\x68\xb0\x0b\xa7\x85\x9e\x09\x70\xec\xfd\x75\x7e\xfe\xcf\x7c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\x41\x54\x47\x86\x62\x30\xd2\x8b\xb1\xea\x18\xa4\xcd\xfd\x02", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\x61\x83\x39\x2f\x7a\x87\x63\xaf\xec\x68\xa0\x60\x26\x41\x41", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\x56\x5c\x8d\x73\xcf\xd4\x13\x0b\x4a\xa1\x4d\x89\x11\x71\x0f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\x23\x2a\x4e\xd2\x1c\xcc\x27\xc1\x9c\x96\x10\x07\x8c\xab\xac", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x4f\x32\xea\x71\x82\x8c\x7d\x32\x90\x77\xe7\x12\x23\x16\x66", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd6\x44\x24\xf2\x3c\xb9\x72\x15\xe9\xc2\xc6\xf2\x8d\x29\xea\xb7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\x3e\x82\xb5\x33\xf6\x8c\x75\xc2\x38\xce\xbd\xb2\xee\x89\xa2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x3a\x3d\x24\x15\x7a\x51\xf1\xee\x08\x93\xf6\x77\x74\x17\xe7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xec\xac\xfc\xd4\x00\x08\x4d\x07\x86\x12\xb1\x94\x5f\x2e\xf5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xcd\x8b\xb1\x73\x25\x9e\xb3\x3a\x52\x42\xb0\xde\x31\xa4\x55", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xe9\xed\xdb\xc3\x75\xe7\x92\xc1\x99\x92\xc1\x91\x65\x01\x2b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8a\x77\x22\x31\xc0\x1d\xfd\xd7\xc9\x8e\x4c\xfd\xdc\xc0\x80\x7a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xda\x7f\xf6\xb8\x31\x91\x80\xff\x0d\x6e\x65\x62\x9d\x01\xc3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x67\xef\x0e\x2d\x01\xa9\x93\x94\x4d\xd3\x97\x10\x14\x13\xcb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\xf8\x0e\x9d\x84\x5b\xcc\x0f\x62\x92\x6a\xf7\x2e\xab\xca\x39", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x02\x99\x07\x27\xaa\x08\x78\x63\x7b\x45\xdc\xd3\xa3\xb0\x74", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x2e\x64\x7d\x53\x60\xe0\x92\x30\xa5\xd7\x38\xca\x33\x47\x1e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x56\x41\x3c\x7a\xdd\x6f\x43\xd1\xd5\x6e\x4f\x02\x19\x03\x30", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x69\xcd\x06\x06\xe1\x5a\xf7\x29\xd6\xbc\xa1\x43\x01\x6d\x98\x42", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x85\xd7\xc1\xa5\x00\x87\x3a\x20\x09\x9c\x4c\xaa\x3c\x3f\x5b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xc0\xd2\x30\xf8\x89\x14\x15\xb8\x7b\x83\xf9\x5f\x2e\x09\xd1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\x27\xd0\x8c\x52\x3d\x8e\xba\x69\x7a\x43\x36\x50\x7d\x1f\x42", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\x15\xaa\xb8\x27\x01\xef\xa5\xae\x36\xab\x1d\x6b\x76\x29\x0f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5b\xf0\x05\x18\x93\xa1\x8b\xb3\x0e\x13\x9a\x58\xfe\xd0\xfa\x54", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xe8\xad\xf6\x56\x38\xfd\x9c\xdf\x3b\xc2\x2c\x17\xfe\x4d\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xe6\xee\x32\x65\x83\xa0\x58\x64\x91\xc9\x64\x18\xd1\xa3\x5d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\xb5\x49\xc2\xec\x75\x6f\x82\xec\xc4\x80\x08\xe5\x29\x95\x6b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x37\x7b\x6d\xa6\x69\xb0\x72\x12\x9e\x05\x7c\xc2\x8e\x9c\xa5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\x94\xb8\xb0\xcb\x8b\xcc\x91\x90\x72\x26\x2b\x3f\xa0\x5a\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\xbb\x83\xdf\xd0\xd7\xab\xcb\x05\xcd\x28\xca\xd2\xdf\xb5\x23", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x87\x78\x03\xde\x77\x74\x4b\xb9\x70\xd0\xa9\x1f\x4d\xeb\xae", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x73\x79\xf3\x37\x0c\xf6\xe5\xce\x12\xae\x59\x69\xc8\xee\xa3\x12", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xdc\x99\xfa\x3d\x4f\x98\xce\x80\x98\x5e\x72\x33\x88\x93\x13", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\x38\xe7\x59\x07\x5b\xa5\xca\xb6\x45\x7d\xa5\x18\x44\x29\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\xbe\xd8\xdb\xf6\x15\x86\x8a\x1f\x9d\x9b\x05\xd3\xe7\xa2\x67", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\x4b\x14\x8b\x8c\xb1\xd8\xc3\x2b\x28\x7e\x89\x69\x03\xd1\x50", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x4b\x03\x3d\xf4\xda\x85\x3f\x4b\xe3\xe2\x43\xf7\xe5\x13\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x58\xc9\x50\xf0\x36\x71\x60\xad\xec\x45\xf2\x44\x1e\x74\x11", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\xf6\x55\x53\x6a\x70\x4e\x5a\xce\x18\x2d\x74\x2a\x82\x0c\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x7b\xd6\xbb\x63\x41\x87\x31\xae\xac\x79\x0f\xe4\x2d\x61\xe8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe7\x4a\x4c\x99\x9b\x4c\x06\x4e\x48\xbb\x1e\x41\x3f\x51\xe5\xea", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x9e\xbe\xfd\xb4\xcc\xf3\x0f\x29\x6c\xec\xb3\xbc\x19\x43\xe8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x31\x94\x36\x7a\x48\x98\xc5\x02\xc1\x3b\xb7\x47\x86\x40\xa7\x2d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xda\x79\x77\x13\x26\x3d\x6f\x33\xa5\x47\x8a\x65\xef\x60\xd4\x12", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\xac\x39\xbb\x1e\xf8\x6b\x9c\x13\x44\xf2\x14\x67\x9a\xa3\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\xde\xa9\xe6\x50\x53\x2b\xe5\xbc\x0e\x73\x25\x33\x7f\xd3\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\xa2\x04\xdb\xd9\xc2\xaf\x15\x8b\x6c\xa6\x7a\x51\x56\xce\x4a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x0a\x0e\x75\xa8\xda\x36\x73\x5a\xee\x66\x84\xd9\x65\xa7\x78", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x52\xfc\x3e\x62\x04\x92\xea\x99\x64\x1e\xa1\x68\xda\x5b\x6d\x52", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xe0\xc7\xf1\x5b\x47\x72\x46\x7d\x2c\xfc\x87\x30\x00\xb2\xca", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x35\x31\x13\x5e\x0c\x4d\x70\xa3\x8f\x8b\xdb\x19\x0b\xa0\x4e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\xa3\x9a\x0f\x56\x63\xf4\xc0\xfe\x5f\x2d\x3c\xaf\xff\x42\x1a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\x4b\x5e\x90\xdb\x35\x4c\x1e\x42\xf6\x1f\xab\xe1\x67\xb2\xc0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x50\xe6\xd3\xc9\xb6\x69\x8a\x7c\xd2\x76\xf9\x6b\x14\x73\xf3\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x38\xf0\x8e\x0e\xbe\xe9\x69\x05\xd8\xf2\xe8\x25\x20\x8f\x43", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x37\x8c\x86\x67\x2a\xa5\x4a\x3a\x26\x6b\xa1\x9d\x25\x80\xca", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\xa7\xc3\x08\x6f\x5f\x95\x11\xb3\x12\x33\xda\x7c\xab\x91\x60", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5b\x40\xff\x4e\xc9\xbe\x53\x6b\xa2\x30\x35\xfa\x4f\x06\x06\x4c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\xeb\x5a\xf8\x41\x6b\x25\x71\x49\x37\x21\x94\xe8\xb8\x87\x49", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\x00\x5a\x8a\xed\x8a\x36\x1c\x92\xe4\x40\xc1\x55\x20\xcb\xd1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x03\x62\x76\x11\x67\x8a\x99\x77\x17\x57\x88\x07\xa8\x00\xe2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x78\x61\x8f\x74\xf6\xf3\x69\x6e\x0a\x47\x79\xb9\x0b\x5a\x77", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x72\x03\x71\xa0\x49\x62\xea\xea\x0a\x85\x2e\x69\x97\x28\x58", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x8a\x81\x33\xaa\x8c\xcf\x70\xe2\xbd\x32\x85\x83\x1c\xa6\xb7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x93\x6b\xd2\x7f\xb1\x46\x8f\xc8\xb4\x8b\xc4\x83\x32\x17\x25", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb0\x7d\x4f\x3e\x2c\xd2\xef\x2e\xb5\x45\x98\x07\x54\xdf\xea\x0f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xc6\xbf\x79\x0c\x15\x76\x0d\x8d\x9a\xeb\x6f\x9a\x75\xfd\x4e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0a\x6b\xdc\x6d\x4c\x1e\x62\x80\x30\x1f\xd8\xe9\x7d\xdb\xe6\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x80\xee\xfb\x7e\xbe\x2d\x2b\x16\x24\x7a\xa0\xef\xc7\x2f\x5d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7f\x2c\x5e\xce\x07\xa9\x8d\x8b\xee\x13\xc5\x11\x77\x39\x5f\xf7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\x18\xd8\x00\xdc\xf6\xf4\xbe\x1e\x0e\x94\xf4\x03\xd1\xe4\xc2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe7\x4c\xd1\xc9\x2f\x09\x19\xc3\x5a\x03\x24\x12\x3d\x61\x77\xd3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x92\xa4\xdc\xf2\xda\x7e\x77\xe9\x3b\xdd\x37\x1d\xfe\xd8\x2e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\xaf\x6b\x37\x21\x35\xac\xef\x10\x13\x2e\x54\x8f\x21\x7b\x17", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\xcd\x40\xf9\x4e\xbb\x63\xb9\xf7\x90\x96\x76\xe6\x67\xf1\xe7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x1c\xff\xb8\x3f\x45\xdc\xfb\x38\xb2\x9b\xe4\x38\xdb\xd3\xab", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xc5\x8a\x8d\x88\x66\x23\x70\x5a\xec\x15\xcb\x1e\x70\xdc\x0e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x18\xfa\xa1\x60\x56\xbd\x07\x74\xc3\xe8\xd7\x9c\x35\xa5\xe4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\x7b\xba\x83\xf7\xaa\x84\x17\x31\x50\x4e\x01\x22\x08\xfc\x9e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x8f\x0e\x49\x15\xfd\x81\xba\x70\xa3\x31\x31\x08\x82\xf6\xda", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x15\x69\x85\x9e\xa6\xb7\x20\x6c\x30\xbf\x4f\xd0\xcb\xfa\xc3\x3c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x0a\xde\x92\xf8\x8f\x48\xfa\x2d\xf7\x30\xec\x16\xef\x44\xcd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\xe6\xcc\x3c\x05\x96\x5d\xc0\x8e\xb0\x59\x0c\x95\xac\x71\xd0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\xe8\x58\xea\xaa\x97\xfe\xc3\x81\x11\x27\x5b\x6c\xf5\xab\xc0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x39\x45\x5e\x7a\xfe\x3b\x06\x16\x10\x02\x88\xcc\x5a\x72\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\xe5\x00\xc5\xc8\xd6\x34\x79\x71\x71\x63\xe5\x5c\x5c\x45\x22", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd5\xe3\x8b\xf1\x5f\x16\xd9\x0e\x3e\x21\x40\x41\xd7\x74\xda\xa8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xf4\x06\x6e\x6f\x4f\x18\x7d\xfe\x5f\x2a\xd1\xb1\x78\x19\xd0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xf4\xcc\x4d\xe4\x9b\x11\x06\x5d\x7a\xf2\x90\x98\x54\x79\x4a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\x86\xbc\x60\x6b\x66\x40\xc3\x09\xe7\x82\xf2\x32\xbf\x36\x7f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xaf\xf0\xef\x7b\xf3\x28\x07\x72\xcf\x4c\xac\x80\xa0\xd2\xb2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x8e\xed\xea\x0f\x62\xa1\x40\x6d\x58\xcf\xc3\xec\xea\x72\xcf", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\xf4\x15\x4a\x33\x75\xa1\xd3\xe6\xb1\xd4\x54\x43\x8f\x95\xa6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xf9\x6e\x9d\x60\x7f\x66\x15\xfc\x19\x20\x61\xee\x64\x8b\x07", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x37\xcd\xaa\xa0\xd2\xd5\x36\xc7\x18\x57\x63\x4c\x79\x20\x64", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\xd6\x64\x0c\x80\x24\x5c\x2b\x80\x53\x73\xf1\x30\x70\x31\x27", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x6a\x8a\xfe\x55\xa6\xe4\x81\xba\xda\xe0\xd1\x46\xf4\x36\xdb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\x49\x81\xf2\x91\x5e\x3e\x68\xaf\x6c\x22\x38\x5d\xd0\x67\x56", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xa1\x13\x6e\x5f\x8d\x8d\x21\xd3\x10\x19\x98\x64\x2d\x57\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x47\x15\x96\xdc\x69\xae\x15\x86\xce\xe6\x15\x8b\x0b\x01\x81", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x36\x65\xc4\xaf\x1e\xff\x33\xaa\x8b\x62\x8b\xf8\x74\x1c\xfd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9a\x68\x2a\xcf\x40\xbe\x01\xf5\xb2\xa4\x19\x3c\x9a\x82\x40\x4d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x54\xfa\xfe\x26\xe4\x28\x7f\x17\xd1\x93\x5f\x87\xeb\x9a\xde\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\xd5\x41\xb2\xe7\x4c\xfe\x73\xe6\xa8\xe8\x22\x5f\x7b\xd4\x49", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\xa4\x55\x30\xf6\x24\xff\x6f\x76\xa1\xb3\x82\x66\x26\xff\x7b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf9\x6b\x0c\x4a\x8b\xc6\xc8\x61\x30\x28\x9f\x60\xb4\x3b\x8f\xba", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\xc7\xd0\xe8\x08\x34\xeb\xdc\x35\xb6\x73\x5f\x76\xb4\x6c\x8b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x63\x53\x1a\xb5\x4d\x66\x95\x5e\x73\xed\xc4\xcb\x8e\xaa\x45", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\x9b\xd8\xe2\x53\x04\x69\x13\x4b\x9d\x5b\x06\x5d\x4f\x56\x5b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x5f\x91\x06\xd0\xe5\x2f\x97\x3d\x48\x90\xe6\xf3\x7e\x8a\x00", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x20\xeb\xc8\x6f\x13\x04\xd2\x72\xe2\xe2\x07\xe5\x9d\xb6\x39\xf0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\x7a\xe6\x42\x6b\xf9\x52\x6c\x97\x2c\xff\x07\x2b\x52\x25\x2c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\x51\x8d\xdd\xaf\x9e\xfa\x0d\x00\x2c\xc5\x8d\x10\x7e\xdf\xc8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xd7\x31\xaf\x4d\x3a\x2f\xe3\xb3\x4b\xed\x04\x79\x42\xa4\x9f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xd4\xef\xe4\x02\x42\xf8\x3e\x93\xb6\xc8\xd7\xef\xb5\xea\xe9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcd\x2b\x1f\xec\x11\xfd\x90\x6c\x5c\x76\x30\x09\x94\x43\x61\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x85\x3f\xe4\x7f\xe2\x92\x89\xd1\x53\x16\x1d\x06\x38\x7d\x21", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x46\x32\x15\x41\x79\xa5\x55\xc1\x7e\xa6\x04\xd0\x88\x9f\xab\x14", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\x27\xca\xc6\x40\x1a\x02\x2e\x8f\x38\xf9\xf9\x3e\x77\x44\x17", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x90\x31\x3e\xb9\x86\x74\xf3\x5f\x31\x23\x38\x5f\xb9\x5d\x4d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x35\x26\x26\x2b\x92\xf0\x2e\xdc\xe5\x48\xf7\x16\xb9\xf4\x5c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x83\x8d\x1a\x2b\x16\xa7\xc7\xf0\xdf\xcc\x43\x3c\x39\x9c\x33", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\x9a\xc7\x56\xeb\x29\x76\x95\xee\xd4\xd3\x82\xeb\x12\x6d\x26", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\xed\xe9\xdd\xa3\xf6\xf1\x41\xbf\xf1\x75\x7f\xa6\x89\xc3\xe1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x76\x8f\x52\x0e\xfe\x0f\x23\xe6\x1d\x3e\xc8\xad\x9c\xe9\x17\x74", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\x14\x4d\xdf\xa7\x57\x55\x21\x33\x90\xe7\xc5\x96\x66\x04\x90", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\x7c\x0c\x40\x40\xb3\x55\xb9\xd1\x07\xa9\x93\x25\xe3\xb0\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xe2\xbb\x1a\xe8\xee\x3d\xcf\x5b\xf7\xd6\xc3\x8d\xa8\x2a\x1a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\xfa\xf8\x2d\x17\x8a\xf2\x5a\x98\x86\xa4\x7e\x7f\x78\x9b\x98\xd7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x58\xdb\xfd\x77\xfe\x5a\xca\x9c\xfc\x19\x0c\xd1\xb8\x2d\x19", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x77\xf3\x92\x08\x90\x42\xe4\x78\xac\x16\xc0\xc8\x6a\x0b\x5d\xb5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x19\xf0\x8e\x34\x20\xee\x69\xb4\x77\xca\x14\x20\x28\x1c\x47\x82", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\xa1\xb1\x9b\xee\xe4\xe1\x17\x13\x9f\x74\xb3\xc5\x3f\xdc\xb8\x75", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\xa3\x7a\x58\x69\xb2\x18\xa9\xf3\xa0\x86\x8d\x19\xae\xa0\xad\x6a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\xbc\x35\x94\xe8\x65\xbc\xd0\x26\x1b\x13\x20\x27\x31\xf3\x35\x80", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x81\x14\x41\xce\x1d\x30\x9e\xee\x71\x85\xe8\xc7\x52\xc0\x75\x57", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x95\x99\x71\xce\x41\x34\x19\x05\x63\x51\x8e\x70\x0b\x98\x74\xd1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x76\xb5\x61\x4a\x04\x27\x07\xc9\x8e\x21\x32\xe2\xe8\x05\xfe\x63", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x7d\x9f\xa6\xa5\x75\x30\xd0\xf0\x36\xfe\xc3\x1c\x23\x0b\x0c\xc6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x96\x41\x53\xa8\x3b\xf6\x98\x9a\x4b\xa8\x0d\xaa\x91\xc3\xe0\x81", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\xa0\x13\x01\x4d\x4c\xe8\x05\x4c\xf2\x59\x1d\x06\xf6\xf2\xf1\x76", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\xd1\xc5\xf6\x39\x9b\xf3\x82\x50\x2e\x38\x5e\xee\x14\x74\xa8\x69", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x07\xe2\x0b\x82\x98\xec\x35\x4f\x0f\x5f\xe7\x47\x0f\x36\xbd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\xb9\x5b\xa0\x5b\x33\x2d\xa6\x1e\xf6\x3a\x2b\x31\xfc\xad\x98\x79", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x46\x20\xa4\x9b\xd9\x67\x49\x15\x61\x66\x9a\xb2\x5d\xce\x45\xf4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x12\xe7\x12\x14\xae\x8e\x04\xf0\xbb\x63\xd7\x42\x5c\x6f\x14\xd5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x4c\xc4\x2f\xc1\x40\x7b\x00\x8f\xe3\x50\x90\x7c\x09\x2e\x80\xac", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x08\xb2\x44\xce\x7c\xbc\x8e\xe9\x7f\xbb\xa8\x08\xcb\x14\x6f\xda", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x39\xb3\x33\xe8\x69\x4f\x21\x54\x6a\xd1\xed\xd9\xd8\x7e\xd9\x5b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x3b\x27\x1f\x8a\xb2\xe6\xe4\xa2\x0b\xa8\x09\x0f\x43\xba\x78\xf3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x9a\xd9\x83\xf3\xbf\x65\x1c\xd0\x39\x3f\x0a\x73\xcc\xcd\xea\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x8f\x47\x6c\xbf\xf7\x5c\x1f\x72\x5c\xe1\x8e\x4b\xbc\xd1\x9b\x32", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x90\x5b\x62\x67\xf1\xd6\xab\x53\x20\x83\x5a\x13\x3f\x09\x6f\x2a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x14\x5b\x60\xd6\xd0\x19\x3c\x23\xf4\x22\x18\x48\xa8\x92\xd6\x1a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x55\xcf\xb3\xfb\x6d\x75\xca\xd0\x44\x5b\xbc\x8d\xaf\xa2\x5b\x0f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x7b\x8e\x70\x98\xe3\x57\xef\x71\x23\x7d\x46\xd8\xb0\x75\xb0\xf5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x2b\xf2\x72\x29\x90\x1e\xb4\x0f\x2d\xf9\xd8\x39\x8d\x15\x05\xae", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x83\xa6\x34\x02\xa7\x7f\x9a\xd5\xc1\xe9\x31\xa9\x31\xec\xd7\x06", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x6f\x8b\xa6\x52\x11\x52\xd3\x1f\x2b\xad\xa1\x84\x3e\x26\xb9\x73", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\xe5\xc3\xb8\xe3\x0f\xd2\xd8\xe6\x23\x9b\x17\xb4\x4b\xd2\x3b\xbd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x1a\xc1\xf7\x10\x2c\x59\x93\x3e\x8b\x2d\xdc\x3f\x14\xe9\x4b\xaa", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x21\xd9\xba\x49\xf2\x76\xb4\x5f\x11\xaf\x8f\xc7\x1a\x08\x8e\x3d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x64\x9f\x1c\xdd\xc3\x79\x2b\x46\x38\x63\x5a\x39\x2b\xc9\xba\xde", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\xe2\x77\x5e\x4b\x59\xc1\xbc\x2e\x31\xa2\x07\x8c\x11\xb5\xa0\x8c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x2b\xe1\xfa\xe5\x04\x8a\x25\x58\x2a\x67\x9c\xa1\x09\x05\xeb\x80", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xda\x86\xf2\x92\xc6\xf4\x1e\xa3\x4f\xb2\x06\x8d\xf7\x5e\xcc\x29", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x22\x0d\xf1\x9f\x85\xd6\x9b\x1b\x56\x2f\xa6\x9a\x3c\x5b\xec\xa5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x1f\x11\xd5\xd0\x35\x5e\x0b\x55\x6c\xcd\xb6\xc7\xf5\x08\x3b\x4d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x62\x52\x6b\x78\xbe\x79\xcb\x38\x46\x33\xc9\x1f\x83\xb4\x15\x1b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x90\xdd\xbc\xb9\x50\x84\x35\x92\xdd\x47\xbb\xef\x00\xfd\xc8\x76", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x2f\xd0\xe4\x1c\x5b\x84\x02\x27\x73\x54\xa7\x39\x1d\x26\x18\xe2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x3c\xdf\x13\xe7\x2d\xee\x4c\x58\x1b\xaf\xec\x70\xb8\x5f\x96\x60", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\xaf\xa2\xff\xc1\x37\x57\x70\x92\xe2\xb6\x54\xfa\x19\x9d\x2c\x43", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x8d\x68\x3e\xe6\x3e\x60\xd2\x08\xe3\x43\xce\x48\xdb\xc4\x4c\xac", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x70\x5a\x4e\xf8\xba\x21\x33\x72\x9c\x20\x18\x5c\x3d\x3a\x47\x63", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x08\x61\xa8\x61\xc3\xdb\x4e\x94\x19\x42\x11\xb7\x7e\xd7\x61\xb9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x4b\x00\xc2\x7e\x8b\x26\xda\x7e\xab\x9d\x3a\x88\xde\xc8\xb0\x31", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x5f\x39\x7b\xf0\x30\x84\x82\x0c\xc8\x81\x0d\x52\xe5\xb6\x66\xe9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x63\xfa\xfa\xbb\x72\xc0\x7b\xfb\xd3\xdd\xc9\xb1\x20\x31\x04\xb8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x68\x3e\x21\x40\x58\x5b\x18\x45\x2d\xd4\xff\xbb\x93\xc9\x5d\xf9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x28\x68\x94\xe4\x8e\x53\x7f\x87\x63\xb5\x67\x07\xd7\xd1\x55\xc8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\xa4\x23\xde\xab\xc1\x73\xdc\xf7\xe2\xc4\xc5\x3e\x77\xd3\x7c\xd1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\xeb\x81\x68\x31\x3e\x1c\xfd\xfd\xb5\xe9\x86\xd5\x42\x9c\xf1\x72", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x27\x12\x7d\xaa\xfc\x9a\xcc\xd2\xfb\x33\x4e\xc3\xeb\xa5\x23\x23", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\xee\x07\x15\xb9\x6f\x72\xe3\xf7\xa2\x2a\x50\x64\xfc\x59\x2f\x4c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x29\xee\x52\x67\x70\xf2\xa1\x1d\xcf\xa9\x89\xd1\xce\x88\x83\x0f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x04\x93\x37\x0e\x05\x4b\x09\x87\x11\x30\xfe\x49\xaf\x73\x0a\x5a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x9b\x7b\x94\x0f\x6c\x50\x9f\x9e\x44\xa4\xee\x14\x04\x48\xee\x46", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x29\x15\xbe\x4a\x1e\xcf\xdc\xbe\x3e\x02\x38\x11\xa1\x2b\xb6\xc7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x72\x40\xe5\x24\xbc\x51\xd8\xc4\xd4\x40\xb1\xbe\x55\xd1\x06\x2c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\xda\x63\x03\x9d\x38\xcb\x46\x12\xb2\xdc\x36\xba\x26\x68\x4b\x93", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x0f\x59\xcb\x5a\x4b\x52\x2e\x2a\xc5\x6c\x1a\x64\xf5\x58\xad\x9a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x7b\xfe\x9d\x87\x6c\x6d\x63\xc1\xd0\x35\xda\x8f\xe2\x1c\x40\x9d", },
-};
-
-
-static void AES128_testRun(void)
-{
-       uint32_t buf[4];
-       BlockCipher *c = AES128_stackinit();
-       for (size_t i=0;i<countof(ECB128_Tests);++i)
-       {
-               const struct ECB128_Test *t = &ECB128_Tests[i];
-               cipher_set_key(c, t->key);
-
-               memcpy(buf, t->pt, 16);
-               cipher_ecb_encrypt(c, buf);
-               ASSERT(memcmp(buf, t->ct, 16) == 0);
-               cipher_ecb_decrypt(c, buf);
-               ASSERT(memcmp(buf, t->pt, 16) == 0);
-       }
-
-       uint8_t data[16];
-       memset(data, 0, 16);
-       cipher_set_key(c, "0123456789ABCDEF");
-       for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data);
-       for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data);
-       ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0);
-}
-
-static void AES192_testRun(void)
-{
-       uint32_t buf[4];
-       BlockCipher *c = AES192_stackinit();
-       for (size_t i=0;i<countof(ECB192_Tests);++i)
-       {
-               const struct ECB192_Test *t = &ECB192_Tests[i];
-               cipher_set_key(c, t->key);
-
-               memcpy(buf, t->pt, 16);
-               cipher_ecb_encrypt(c, buf);
-               ASSERT(memcmp(buf, t->ct, 16) == 0);
-               cipher_ecb_decrypt(c, buf);
-               ASSERT(memcmp(buf, t->pt, 16) == 0);
-       }
-
-       uint8_t data[16];
-       memset(data, 0, 16);
-       cipher_set_key(c, "0123456789ABCDEF01234567");
-       for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data);
-       for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data);
-       ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0);
-}
-
-static void AES256_testRun(void)
-{
-       uint32_t buf[4];
-       BlockCipher *c = AES256_stackinit();
-       for (size_t i=0;i<countof(ECB256_Tests);++i)
-       {
-               const struct ECB256_Test *t = &ECB256_Tests[i];
-               cipher_set_key(c, t->key);
-
-               memcpy(buf, t->pt, 16);
-               cipher_ecb_encrypt(c, buf);
-               ASSERT(memcmp(buf, t->ct, 16) == 0);
-               cipher_ecb_decrypt(c, buf);
-               ASSERT(memcmp(buf, t->pt, 16) == 0);
-       }
-
-       uint8_t data[16];
-       memset(data, 0, 16);
-       cipher_set_key(c, "0123456789ABCDEF0123456789ABCDEF");
-       for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data);
-       for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data);
-       ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0);
-}
-
-int AES_testRun(void)
-{
-       AES128_testRun();
-       AES192_testRun();
-       AES256_testRun();
-
-       //BlockCipher *c = AES192_stackinit();
-       //cipher_set_key(c, "\x8e\x73\xb0\xf7\xda\x0e\x64\x52\xc8\x10\xf3\x2b\x80\x90\x79\xe5\x62\xf8\xea\xd2\x52\x2c\x6b\x7b");
-
-       // This is the step-by-step example in FIPS-197
-       BlockCipher *c = AES128_stackinit();
-       uint8_t data[] = { "\x32\x43\xf6\xa8\x88\x5a\x30\x8d\x31\x31\x98\xa2\xe0\x37\x07\x34" };
-       cipher_set_key(c, "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c");
-       cipher_ecb_encrypt(c, data);
-       ASSERT(memcmp(data, "\x39\x25\x84\x1D\x02\xDC\x09\xFB\xDC\x11\x85\x97\x19\x6A\x0B\x32", 16) == 0);
-       cipher_ecb_decrypt(c, data);
-       ASSERT(memcmp(data, "\x32\x43\xf6\xa8\x88\x5a\x30\x8d\x31\x31\x98\xa2\xe0\x37\x07\x34", 16) == 0);
-
-       return 0;
-}
-
-TEST_MAIN(AES);
diff --git a/bertos/sec/cipher/blowfish.c b/bertos/sec/cipher/blowfish.c
deleted file mode 100644 (file)
index 461594c..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Blowfish implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- *
- */
-
-#include "blowfish.h"
-#include <cfg/macros.h>
-#include <cpu/byteorder.h>
-#include <string.h>
-
-#define N 16
-
-static const uint32_t P[16 + 2] =
-{
-       0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L,
-       0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L,
-       0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL,
-       0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L,
-       0x9216D5D9L, 0x8979FB1BL
-};
-
-static const uint32_t S[4][256] =
-{
-       {
-               0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L,
-               0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L,
-               0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L,
-               0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL,
-               0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL,
-               0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L,
-               0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL,
-               0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL,
-               0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L,
-               0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L,
-               0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL,
-               0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL,
-               0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL,
-               0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L,
-               0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L,
-               0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L,
-               0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L,
-               0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L,
-               0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL,
-               0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L,
-               0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L,
-               0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L,
-               0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L,
-               0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL,
-               0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L,
-               0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL,
-               0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL,
-               0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L,
-               0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL,
-               0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L,
-               0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL,
-               0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L,
-               0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L,
-               0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL,
-               0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L,
-               0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L,
-               0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL,
-               0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L,
-               0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL,
-               0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L,
-               0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L,
-               0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL,
-               0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L,
-               0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L,
-               0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L,
-               0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L,
-               0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L,
-               0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL,
-               0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL,
-               0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L,
-               0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L,
-               0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L,
-               0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L,
-               0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL,
-               0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L,
-               0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL,
-               0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL,
-               0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L,
-               0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L,
-               0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L,
-               0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L,
-               0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L,
-               0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L,
-               0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL,
-       },
-       {
-               0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L,
-           0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L,
-           0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L,
-           0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL,
-           0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L,
-           0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L,
-           0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL,
-           0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L,
-           0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L,
-           0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L,
-           0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL,
-           0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL,
-           0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L,
-           0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L,
-           0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L,
-           0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L,
-           0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL,
-           0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL,
-           0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL,
-           0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L,
-           0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL,
-           0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L,
-           0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L,
-           0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL,
-           0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL,
-           0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L,
-           0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL,
-           0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L,
-           0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL,
-           0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL,
-           0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L,
-           0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L,
-           0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L,
-           0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L,
-           0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L,
-           0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L,
-           0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L,
-           0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL,
-           0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L,
-           0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL,
-           0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L,
-           0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L,
-           0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L,
-           0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L,
-           0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L,
-           0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L,
-           0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L,
-           0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L,
-           0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L,
-           0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L,
-           0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L,
-           0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L,
-           0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L,
-           0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L,
-           0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L,
-           0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L,
-           0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL,
-           0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL,
-           0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L,
-           0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL,
-           0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L,
-           0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L,
-           0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L,
-           0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L,
-       },
-       {
-               0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L,
-           0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L,
-           0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL,
-           0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L,
-           0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L,
-           0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L,
-           0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL,
-           0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL,
-           0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL,
-           0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L,
-           0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L,
-           0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL,
-           0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L,
-           0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL,
-           0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L,
-           0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL,
-           0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L,
-           0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL,
-           0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L,
-           0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL,
-           0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L,
-           0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L,
-           0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL,
-           0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L,
-           0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L,
-           0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L,
-           0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L,
-           0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL,
-           0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L,
-           0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL,
-           0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L,
-           0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL,
-           0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L,
-           0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL,
-           0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL,
-           0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL,
-           0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L,
-           0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L,
-           0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL,
-           0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL,
-           0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL,
-           0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL,
-           0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL,
-           0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L,
-           0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L,
-           0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L,
-           0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L,
-           0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL,
-           0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL,
-           0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L,
-           0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L,
-           0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L,
-           0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L,
-           0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L,
-           0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L,
-           0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L,
-           0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L,
-           0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L,
-           0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L,
-           0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL,
-           0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L,
-           0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL,
-           0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L,
-           0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L,
-       },
-       {
-               0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL,
-           0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL,
-           0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL,
-           0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L,
-           0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L,
-           0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L,
-           0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L,
-           0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L,
-           0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L,
-           0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L,
-           0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L,
-           0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L,
-           0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L,
-           0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L,
-           0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L,
-           0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL,
-           0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL,
-           0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L,
-           0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL,
-           0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL,
-           0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL,
-           0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L,
-           0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL,
-           0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL,
-           0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L,
-           0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L,
-           0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L,
-           0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L,
-           0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL,
-           0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL,
-           0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L,
-           0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L,
-           0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L,
-           0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL,
-           0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L,
-           0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L,
-           0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L,
-           0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL,
-           0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L,
-           0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L,
-           0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L,
-           0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL,
-           0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL,
-           0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L,
-           0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L,
-           0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L,
-           0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L,
-           0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL,
-           0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L,
-           0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL,
-           0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL,
-           0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L,
-           0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L,
-           0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL,
-           0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L,
-           0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL,
-           0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L,
-           0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL,
-           0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L,
-           0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L,
-           0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL,
-           0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L,
-           0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL,
-           0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L,
-       },
-};
-
-INLINE uint32_t F(uint32_t S[4][256], uint32_t x)
-{
-       uint8_t a, b, c, d;
-       uint32_t y;
-
-       d = x & 0x00FF;
-       x >>= 8;
-       c = x & 0x00FF;
-       x >>= 8;
-       b = x & 0x00FF;
-       x >>= 8;
-       a = x & 0x00FF;
-
-       y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d];
-
-       return y;
-}
-
-
-static void blowfish_enc(BlockCipher *ctx_, void *block)
-{
-       BlowfishContext *ctx = (BlowfishContext *)ctx_;
-       uint32_t Xl;
-       uint32_t Xr;
-
-       Xl = be32_to_cpu(((uint32_t*)block)[0]);
-       Xr = be32_to_cpu(((uint32_t*)block)[1]);
-
-       for (int i = 0; i < N; ++i) {
-               Xl = Xl ^ ctx->P[i];
-               Xr = F(ctx->S, Xl) ^ Xr;
-
-               SWAP(Xl, Xr);
-       }
-
-       SWAP(Xl, Xr);
-
-       Xr = Xr ^ ctx->P[N];
-       Xl = Xl ^ ctx->P[N + 1];
-
-       ((uint32_t*)block)[0] = cpu_to_be32(Xl);
-       ((uint32_t*)block)[1] = cpu_to_be32(Xr);
-}
-
-static void blowfish_dec(BlockCipher *ctx_, void *block)
-{
-       BlowfishContext *ctx = (BlowfishContext *)ctx_;
-       uint32_t Xl;
-       uint32_t Xr;
-
-       Xl = be32_to_cpu(((uint32_t*)block)[0]);
-       Xr = be32_to_cpu(((uint32_t*)block)[1]);
-
-       for (int i = N + 1; i > 1; --i) {
-               Xl = Xl ^ ctx->P[i];
-               Xr = F(ctx->S, Xl) ^ Xr;
-
-               SWAP(Xl, Xr);
-       }
-
-       SWAP(Xl, Xr);
-
-       Xr = Xr ^ ctx->P[1];
-       Xl = Xl ^ ctx->P[0];
-
-       ((uint32_t*)block)[0] = cpu_to_be32(Xl);
-       ((uint32_t*)block)[1] = cpu_to_be32(Xr);
-}
-
-static void blowfish_setkey(BlockCipher *ctx_, const void *key_, size_t klen)
-{
-       BlowfishContext *ctx = (BlowfishContext *)ctx_;
-       const uint8_t *key = (const uint8_t*)key_;
-       int i, k;
-       size_t j;
-
-       STATIC_ASSERT(sizeof(P) == sizeof(ctx->P));
-       STATIC_ASSERT(sizeof(S) == sizeof(ctx->S));
-
-       for (i = 0; i < 4; ++i)
-               for (k = 0; k < 256; ++k)
-                       ctx->S[i][k] = S[i][k];
-
-       j = 0;
-       for (i = 0; i < N + 2; ++i)
-       {
-               uint32_t data = 0x00000000;
-               for (k = 0; k < 4; ++k)
-               {
-                       data = (data << 8) | key[j];
-                       j = j + 1;
-                       if (j >= klen)
-                               j = 0;
-               }
-               ctx->P[i] = P[i] ^ data;
-       }
-
-       uint32_t data[2] = { 0x00000000, 0x00000000 };
-
-       for (i = 0; i < N + 2; i += 2)
-       {
-               blowfish_enc(ctx_, data);
-
-               ctx->P[i] = be32_to_cpu(data[0]);
-               ctx->P[i + 1] = be32_to_cpu(data[1]);
-       }
-
-       for (i = 0; i < 4; ++i)
-       {
-               for (j = 0; j < 256; j += 2)
-               {
-                       blowfish_enc(ctx_, data);
-
-                       ctx->S[i][j] = be32_to_cpu(data[0]);
-                       ctx->S[i][j + 1] = be32_to_cpu(data[1]);
-               }
-       }
-}
-
-/*****************************************************************************/
-
-void blowfish_init(BlowfishContext *ctx)
-{
-       ctx->c.set_key = blowfish_setkey;
-       ctx->c.enc_block = blowfish_enc;
-       ctx->c.dec_block = blowfish_dec;
-       ctx->c.key_len = 16;
-       ctx->c.block_len = 8;
-}
diff --git a/bertos/sec/cipher/blowfish.h b/bertos/sec/cipher/blowfish.h
deleted file mode 100644 (file)
index 0895ceb..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Blowfish implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- *
- */
-
-#ifndef SEC_CIPHER_BLOWFISH_H
-#define SEC_CIPHER_BLOWFISH_H
-
-#include <sec/cipher.h>
-#include <alloca.h>
-
-typedef struct BlowfishContext
-{
-       BlockCipher c;
-       uint32_t S[4][256];
-       uint32_t P[18];
-
-} BlowfishContext;
-
-void blowfish_init(BlowfishContext *ctx);
-
-#define blowfish_stackinit(...) \
-       ({ BlowfishContext *ctx = alloca(sizeof(BlowfishContext)); blowfish_init(ctx, ##__VA_ARGS__); &ctx->c; })
-
-int blowfish_testSetup(void);
-int blowfish_testRun(void);
-int blowfish_testTearDown(void);
-
-#endif /* SEC_CIPHER_BLOWFISH_H */
diff --git a/bertos/sec/cipher/blowfish_test.c b/bertos/sec/cipher/blowfish_test.c
deleted file mode 100644 (file)
index ab60bab..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Blowfish testsuite
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "blowfish.h"
-
-#include <cfg/debug.h>
-#include <cfg/test.h>
-
-#include <cpu/byteorder.h>
-#include <string.h>
-
-/*
- *  Author     :  Randy L. Milbert
- *  E-mail     :  rmilbert@mit.edu
- *  Date       :  18 Jun 97
- *  Description:  Eric Young's test vectors for Blowfish.
- */
-
-#define NUM_VARIABLE_KEY_TESTS 34
-#define NUM_SET_KEY_TESTS                      24
-
-/* plaintext bytes -- left halves */
-static const uint32_t plaintext_l[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = {
-   0x00000000l, 0xFFFFFFFFl, 0x10000000l, 0x11111111l, 0x11111111l,
-   0x01234567l, 0x00000000l, 0x01234567l, 0x01A1D6D0l, 0x5CD54CA8l,
-   0x0248D438l, 0x51454B58l, 0x42FD4430l, 0x059B5E08l, 0x0756D8E0l,
-   0x762514B8l, 0x3BDD1190l, 0x26955F68l, 0x164D5E40l, 0x6B056E18l,
-   0x004BD6EFl, 0x480D3900l, 0x437540C8l, 0x072D43A0l, 0x02FE5577l,
-   0x1D9D5C50l, 0x30553228l, 0x01234567l, 0x01234567l, 0x01234567l,
-   0xFFFFFFFFl, 0x00000000l, 0x00000000l, 0xFFFFFFFFl, 0xFEDCBA98l,
-   0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l,
-   0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l,
-   0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l,
-   0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l,
-   0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l };
-
-/* plaintext bytes -- right halves */
-static const uint32_t plaintext_r[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = {
-   0x00000000l, 0xFFFFFFFFl, 0x00000001l, 0x11111111l, 0x11111111l,
-   0x89ABCDEFl, 0x00000000l, 0x89ABCDEFl, 0x39776742l, 0x3DEF57DAl,
-   0x06F67172l, 0x2DDF440Al, 0x59577FA2l, 0x51CF143Al, 0x774761D2l,
-   0x29BF486Al, 0x49372802l, 0x35AF609Al, 0x4F275232l, 0x759F5CCAl,
-   0x09176062l, 0x6EE762F2l, 0x698F3CFAl, 0x77075292l, 0x8117F12Al,
-   0x18F728C2l, 0x6D6F295Al, 0x89ABCDEFl, 0x89ABCDEFl, 0x89ABCDEFl,
-   0xFFFFFFFFl, 0x00000000l, 0x00000000l, 0xFFFFFFFFl, 0x76543210l,
-   0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l,
-   0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l,
-   0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l,
-   0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l,
-   0x76543210l, 0x76543210l, 0x76543210l };
-
-/* key bytes for variable key tests */
-static const uint8_t variable_key[NUM_VARIABLE_KEY_TESTS][8] = {
-   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-   { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
-   { 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-   { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 },
-   { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
-   { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 },
-   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-   { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 },
-   { 0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57 },
-   { 0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E },
-   { 0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86 },
-   { 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E },
-   { 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6 },
-   { 0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE },
-   { 0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6 },
-   { 0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE },
-   { 0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16 },
-   { 0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F },
-   { 0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46 },
-   { 0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E },
-   { 0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76 },
-   { 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07 },
-   { 0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F },
-   { 0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7 },
-   { 0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF },
-   { 0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6 },
-   { 0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF },
-   { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
-   { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E },
-   { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE },
-   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-   { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
-   { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
-   { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }};
-
-/* key bytes for set key tests */
-static const uint8_t set_key[24] = {
-   0xF0, 0xE1, 0xD2, 0xC3, 0xB4, 0xA5, 0x96, 0x87,
-   0x78, 0x69, 0x5A, 0x4B, 0x3C, 0x2D, 0x1E, 0x0F,
-   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };
-
-/* ciphertext bytes -- left halves */
-static const uint32_t ciphertext_l[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = {
-   0x4EF99745l, 0x51866FD5l, 0x7D856F9Al, 0x2466DD87l, 0x61F9C380l,
-   0x7D0CC630l, 0x4EF99745l, 0x0ACEAB0Fl, 0x59C68245l, 0xB1B8CC0Bl,
-   0x1730E577l, 0xA25E7856l, 0x353882B1l, 0x48F4D088l, 0x432193B7l,
-   0x13F04154l, 0x2EEDDA93l, 0xD887E039l, 0x5F99D04Fl, 0x4A057A3Bl,
-   0x452031C1l, 0x7555AE39l, 0x53C55F9Cl, 0x7A8E7BFAl, 0xCF9C5D7Al,
-   0xD1ABB290l, 0x55CB3774l, 0xFA34EC48l, 0xA7907951l, 0xC39E072Dl,
-   0x014933E0l, 0xF21E9A77l, 0x24594688l, 0x6B5C5A9Cl, 0xF9AD597Cl,
-   0xE91D21C1l, 0xE9C2B70Al, 0xBE1E6394l, 0xB39E4448l, 0x9457AA83l,
-   0x8BB77032l, 0xE87A244El, 0x15750E7Al, 0x122BA70Bl, 0x3A833C9Al,
-   0x9409DA87l, 0x884F8062l, 0x1F85031Cl, 0x79D9373Al, 0x93142887l,
-   0x03429E83l, 0xA4299E27l, 0xAFD5AED1l, 0x10851C0El, 0xE6F51ED7l,
-   0x64A6E14Al, 0x80C7D7D4l, 0x05044B62l };
-
-/* ciphertext bytes -- right halves */
-static const uint32_t ciphertext_r[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = {
-   0x6198DD78l, 0xB85ECB8Al, 0x613063F2l, 0x8B963C9Dl, 0x2281B096l,
-   0xAFDA1EC7l, 0x6198DD78l, 0xC6A0A28Dl, 0xEB05282Bl, 0x250F09A0l,
-   0x8BEA1DA4l, 0xCF2651EBl, 0x09CE8F1Al, 0x4C379918l, 0x8951FC98l,
-   0xD69D1AE5l, 0xFFD39C79l, 0x3C2DA6E3l, 0x5B163969l, 0x24D3977Bl,
-   0xE4FADA8El, 0xF59B87BDl, 0xB49FC019l, 0x937E89A3l, 0x4986ADB5l,
-   0x658BC778l, 0xD13EF201l, 0x47B268B2l, 0x08EA3CAEl, 0x9FAC631Dl,
-   0xCDAFF6E4l, 0xB71C49BCl, 0x5754369Al, 0x5D9E0A5Al, 0x49DB005El,
-   0xD961A6D6l, 0x1BC65CF3l, 0x08640F05l, 0x1BDB1E6El, 0xB1928C0Dl,
-   0xF960629Dl, 0x2CC85E82l, 0x4F4EC577l, 0x3AB64AE0l, 0xFFC537F6l,
-   0xA90F6BF2l, 0x5060B8B4l, 0x19E11968l, 0x714CA34Fl, 0xEE3BE15Cl,
-   0x8CE2D14Bl, 0x469FF67Bl, 0xC1BC96A8l, 0x3858DA9Fl, 0x9B9DB21Fl,
-   0xFD36B46Fl, 0x5A5479ADl, 0xFA52D080l };
-
-
-
-int blowfish_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int blowfish_testTearDown(void)
-{
-       return 0;
-}
-
-int blowfish_testRun(void)
-{
-       // NOTE: we use a static variable here to avoid stack overflows due to the huge
-       // context structure of blowfish.
-       static BlowfishContext ctx;
-       blowfish_init(&ctx);
-       BlockCipher *c = &ctx.c;
-
-       for (int i=0; i<NUM_VARIABLE_KEY_TESTS; ++i)
-       {
-               uint32_t data[2] = { cpu_to_be32(plaintext_l[i]), cpu_to_be32(plaintext_r[i]) };
-
-               cipher_set_vkey(c, variable_key[i], 8);
-
-               cipher_ecb_encrypt(c, data);
-               ASSERT(data[0] == cpu_to_be32(ciphertext_l[i]));
-               ASSERT(data[1] == cpu_to_be32(ciphertext_r[i]));
-
-               cipher_ecb_decrypt(c, data);
-               ASSERT(data[0] == cpu_to_be32(plaintext_l[i]));
-               ASSERT(data[1] == cpu_to_be32(plaintext_r[i]));
-       }
-
-       for (int j=0; j<NUM_SET_KEY_TESTS; ++j)
-       {
-               int i = j + NUM_VARIABLE_KEY_TESTS;
-               uint32_t data[2] = { cpu_to_be32(plaintext_l[i]), cpu_to_be32(plaintext_r[i]) };
-
-               cipher_set_vkey(c, &set_key[0], j+1);
-
-               cipher_ecb_encrypt(c, data);
-               ASSERT(data[0] == cpu_to_be32(ciphertext_l[i]));
-               ASSERT(data[1] == cpu_to_be32(ciphertext_r[i]));
-
-               cipher_ecb_decrypt(c, data);
-               ASSERT(data[0] == cpu_to_be32(plaintext_l[i]));
-               ASSERT(data[1] == cpu_to_be32(plaintext_r[i]));
-       }
-
-       uint8_t data[8];
-       memset(data, 0, 8);
-       cipher_set_vkey(c, "0123456789", 10);
-       for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data);
-       for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data);
-       ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00", 8) == 0);
-
-       return 0;
-}
-
-TEST_MAIN(blowfish);
diff --git a/bertos/sec/entropy.h b/bertos/sec/entropy.h
deleted file mode 100644 (file)
index 02d0613..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Entropy pool generic interface
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_ENTROPY_H
-#define SEC_ENTROPY_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-/**
- * Maximum number of different sources of entropy available in BeRTOS.
- *
- * Increasing this value will likely make entropy pools use more RAM for their operations,
- * so it should be kept to the minimum necessary for a given project.
- */
-#define CONFIG_ENTROPY_NUM_SOURCES   8
-
-typedef struct EntropyPool
-{
-    void (*add_entropy)(struct EntropyPool *ctx, int source_idx,
-                        const uint8_t *data, size_t len,
-                        int entropy);
-    bool (*seeding_ready)(struct EntropyPool *ctx);
-    void (*make_seed)(struct EntropyPool *ctx, uint8_t *out, size_t len);
-
-} EntropyPool;
-
-
-/**
- * Add some data samples containing entropy into the pool.
- * the samples are in the buffer pointed by \a data for a total of \a len
- * bytes. \a entropy is the number of bits of estimated entropy in the
- * samples. \a source_idx is the index of the entropy source.
- */
-INLINE void entropy_add(EntropyPool *e, int source_idx,
-                 const uint8_t *data, size_t len,
-                 int entropy)
-{
-    ASSERT(e->add_entropy);
-    e->add_entropy(e, source_idx, data, len, entropy);
-}
-
-/**
- * Check if the generator is ready to produce a new seed.
- */
-INLINE bool entropy_seeding_ready(EntropyPool *ctx)
-{
-    ASSERT(ctx->seeding_ready);
-    return ctx->seeding_ready(ctx);
-}
-
-/**
- * Generate a new seed of the specified length.
- *
- * \note This should not be abused to generate a very long seed, since the pool
- * cannot hold lots of entropy.
- */
-INLINE void entropy_make_seed(EntropyPool *ctx, uint8_t *out, size_t len)
-{
-    ASSERT(ctx->make_seed);
-    ctx->make_seed(ctx, out, len);
-}
-
-#endif /* SEC_ENTROPY_H */
diff --git a/bertos/sec/entropy/yarrow_pool.c b/bertos/sec/entropy/yarrow_pool.c
deleted file mode 100644 (file)
index d921470..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Yarrow entropy pool
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "yarrow_pool.h"
-#include <cfg/macros.h>
-#include <sec/hash/sha1.h>
-#include <sec/util.h>
-#include <string.h>
-
-#define CONFIG_YARROW_POOL_FAST_RESEEDING_THRESHOLD   100
-#define CONFIG_YARROW_POOL_SLOW_RESEEDING_THRESHOLD   160
-#define CONFIG_YARROW_POOL_MAX_ENTROPY_DENSITY        50   // percent
-#define CONFIG_YARROW_POOL_RESEED_ITERATIONS          80
-
-static void yarrow_fast_reseed(YarrowPoolContext *ctx, uint8_t *out, size_t len)
-{
-       Hash *h = &ctx->pools[0].hash.h;
-       size_t hlen = hash_digest_len(h);
-
-       uint8_t v0[hlen];
-       memcpy(v0, hash_final(h), hlen);
-
-       uint8_t vcur[hlen];
-       memcpy(vcur, v0, hlen);
-
-       for (uint32_t i=1;i<=CONFIG_YARROW_POOL_RESEED_ITERATIONS; ++i) {
-               hash_begin(h);
-               hash_update(h, vcur, hlen);
-               hash_update(h, v0, hlen);
-               hash_update(h, &i, 4);
-               memcpy(vcur, hash_final(h), hlen);
-       }
-
-
-       // FIXME: yarrow explains how to expand the hash digest if it's
-       // smaller than the output size. This is not the case for now,
-       // so we it's not implemented here.
-       ASSERT(len < hlen);
-       memcpy(out, vcur, len);
-
-       // Reinitialize the fast pool
-       hash_begin(h);
-       for (int i=0; i<CONFIG_ENTROPY_NUM_SOURCES; ++i)
-               ctx->pools[0].entropy[i] = 0;
-
-       PURGE(v0);
-       PURGE(vcur);
-}
-
-static void yarrow_slow_reseed(YarrowPoolContext *ctx, uint8_t *out, size_t len)
-{
-       uint8_t *data = hash_final(&ctx->pools[1].hash.h);
-
-       hash_update(&ctx->pools[0].hash.h, data, hash_digest_len(&ctx->pools[1].hash.h));
-       yarrow_fast_reseed(ctx, out, len);
-
-       // Reinitialize the slow pool
-       hash_begin(&ctx->pools[1].hash.h);
-       for (int i=0; i<CONFIG_ENTROPY_NUM_SOURCES; ++i)
-               ctx->pools[1].entropy[i] = 0;
-}
-
-static void yarrow_add_entropy(EntropyPool *ctx_, int source_idx, const uint8_t *data, size_t len, int entropy)
-{
-       YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_;
-
-       ASSERT(source_idx < CONFIG_ENTROPY_NUM_SOURCES);
-
-       int curpool = ctx->sources[source_idx].curpool;
-       ctx->sources[source_idx].curpool = 1 - ctx->sources[source_idx].curpool;
-
-       // TODO: Yarrow also describes a statistical entropy estimator
-       // Currently, we just use the provided entropy and the maximum
-       // density.
-       entropy = MIN((size_t)entropy, len*8*100/CONFIG_YARROW_POOL_MAX_ENTROPY_DENSITY);
-
-       hash_update(&ctx->pools[curpool].hash.h, data, len);
-       ctx->pools[curpool].entropy[source_idx] += entropy;
-}
-
-static bool yarrow_fast_reseeding_ready(YarrowPoolContext *ctx)
-{
-       for (int i=0; i<CONFIG_ENTROPY_NUM_SOURCES; ++i)
-               if (ctx->pools[0].entropy[i] >=
-                       CONFIG_YARROW_POOL_FAST_RESEEDING_THRESHOLD)
-                       return 1;
-       return 0;
-}
-
-static bool yarrow_slow_reseeding_ready(YarrowPoolContext *ctx)
-{
-       int count = 0;
-
-       for (int i=0; i<CONFIG_ENTROPY_NUM_SOURCES; ++i)
-               if (ctx->pools[1].entropy[i] >=
-                       CONFIG_YARROW_POOL_SLOW_RESEEDING_THRESHOLD) {
-                       ++count;
-                       if (count == 2)
-                               return 1;
-               }
-
-       return 0;
-}
-
-static bool yarrow_reseeding_ready(EntropyPool *ctx_)
-{
-       YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_;
-       return yarrow_fast_reseeding_ready(ctx) || yarrow_slow_reseeding_ready(ctx);
-}
-
-static void yarrow_reseed(EntropyPool *ctx_, uint8_t *out, size_t len)
-{
-       YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_;
-
-       if (yarrow_slow_reseeding_ready(ctx))
-               yarrow_slow_reseed(ctx, out, len);
-       else {
-               ASSERT(yarrow_fast_reseeding_ready(ctx));
-               yarrow_fast_reseed(ctx, out, len);
-       }
-}
-
-/**********************************************************************/
-
-void yarrowpool_init(YarrowPoolContext *ctx)
-{
-       ctx->e.add_entropy = yarrow_add_entropy;
-       ctx->e.seeding_ready = yarrow_reseeding_ready;
-       ctx->e.make_seed = yarrow_reseed;
-
-       for (int i=0; i<2; ++i) {
-               memset(ctx->pools[i].entropy, 0, sizeof(ctx->pools[i].entropy));
-               SHA1_init(&ctx->pools[i].hash);
-               hash_begin(&ctx->pools[i].hash.h);
-       }
-
-       memset(ctx->sources, 0, sizeof(ctx->sources));
-}
diff --git a/bertos/sec/entropy/yarrow_pool.h b/bertos/sec/entropy/yarrow_pool.h
deleted file mode 100644 (file)
index d19fb8a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Yarrow pool implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_ENTROPY_YARROW_POOL_H
-#define SEC_ENTROPY_YARROW_POOL_H
-
-#include <sec/entropy.h>
-#include <sec/hash/sha1.h>
-
-typedef struct
-{
-       EntropyPool e;
-
-       struct YarrowPool
-       {
-               SHA1_Context hash;
-               int entropy[CONFIG_ENTROPY_NUM_SOURCES];
-       } pools[2];
-
-       struct YarrowSources
-       {
-               int curpool;
-       } sources[CONFIG_ENTROPY_NUM_SOURCES];
-
-} YarrowPoolContext;
-
-void yarrowpool_init(YarrowPoolContext *ctx);
-
-#endif /* SEC_ENTROPY_YARROW_POOL_H */
diff --git a/bertos/sec/hash.h b/bertos/sec/hash.h
deleted file mode 100644 (file)
index 937111c..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for hashing algorithms.
- * \author Giovanni Bajo <rasky@develer.com>
- * 
- */
-
-#ifndef SEC_HASH_H
-#define SEC_HASH_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-typedef struct Hash
-{
-       void (*begin)(struct Hash *h);
-       void (*update)(struct Hash *h, const void *data, size_t len);
-       uint8_t* (*final)(struct Hash *h);
-       uint8_t digest_len;
-       uint8_t block_len;
-} Hash;
-
-/**
- * Initialize a hash computation.
- */
-INLINE void hash_begin(Hash *h)
-{
-       ASSERT(h->begin);
-       h->begin(h);
-}
-
-/**
- * Add some data to the computation.
- */
-INLINE void hash_update(Hash *h, const void* data, size_t len)
-{
-       ASSERT(h->update);
-       h->update(h, data, len);
-}
-
-/**
- * Finalize the hash computation and return the digest.
- * 
- * \note This function must be called exactly once per each computation.
- * Calling it twice leads to undefined behaviour.
- * 
- * \note The pointer returned is within the hash context structure \a h, so it
- * has the same lifetime as the hash instance. The data will be invalidated 
- * as soon as \a hash_begin is called again on the same instance.
- */
-INLINE uint8_t* hash_final(Hash *h)
-{
-       ASSERT(h->final);
-       return h->final(h);
-}
-
-/**
- * Return the digest length in bytes.
- */
-INLINE int hash_digest_len(Hash *h)
-{
-       return h->digest_len;
-}
-
-/*
- * Return the internal block length in bytes.
- * 
- * Hash functions operate on a fixed-size block. This information is useful
- * for composite functions like HMAC to adjust their internal operations.
- */
-INLINE int hash_block_len(Hash *h)
-{
-       return h->block_len;
-}
-
-#endif /* SEC_HASH_H */
diff --git a/bertos/sec/hash/md5.c b/bertos/sec/hash/md5.c
deleted file mode 100644 (file)
index 306bacc..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-#include "md5.h"
-#include <sec/util.h>
-#include <cpu/byteorder.h>
-#include <string.h>
-
-static void MD5Transform(uint32_t buf[4], uint32_t in[16]);
-
-static void byteReverse(uint32_t *buf, unsigned longs)
-{
-    do {
-               *buf = le32_to_cpu(*buf);
-        ++buf;
-    } while (--longs);
-}
-
-/*
- * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
- * initialization constants.
- */
-static void MD5_begin(Hash *h)
-{
-       MD5_Context *ctx = (MD5_Context *)h;
-
-    ctx->buf[0] = 0x67452301;
-    ctx->buf[1] = 0xefcdab89;
-    ctx->buf[2] = 0x98badcfe;
-    ctx->buf[3] = 0x10325476;
-
-       ctx->bits = 0;
-}
-
-/*
- * Update context to reflect the concatenation of another buffer full
- * of bytes.
- */
-static void MD5_update(Hash *h, const void* vbuf, size_t len)
-{
-       MD5_Context *ctx = (MD5_Context *)h;
-       const char *buf = (const char *)vbuf;
-    uint32_t t;
-
-    /* Update bitcount */
-    t = (ctx->bits >> 3) & 0x3f;        /* Bytes already in shsInfo->data */
-       ctx->bits += len*8;
-
-    /* Handle any leading odd-sized chunks */
-
-    if (t) {
-        uint8_t *p = (uint8_t*) ctx->in + t;
-
-        t = 64 - t;
-        if (len < t) {
-            memcpy(p, buf, len);
-            return;
-        }
-        memcpy(p, buf, t);
-        byteReverse((uint32_t*)ctx->in, 16);
-        MD5Transform(ctx->buf, (uint32_t*)ctx->in);
-        buf += t;
-        len -= t;
-    }
-    /* Process data in 64-byte chunks */
-
-    while (len >= 64) {
-        memcpy(ctx->in, buf, 64);
-        byteReverse((uint32_t*)ctx->in, 16);
-        MD5Transform(ctx->buf, (uint32_t*)ctx->in);
-        buf += 64;
-        len -= 64;
-    }
-
-    /* Handle any remaining bytes of data. */
-    memcpy(ctx->in, buf, len);
-}
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-static uint8_t* MD5_final(struct Hash *h)
-{
-       MD5_Context *ctx = (MD5_Context *)h;
-    unsigned count;
-    unsigned char *p;
-
-    /* Compute number of bytes mod 64 */
-    count = (ctx->bits >> 3) & 0x3F;
-
-    /* Set the first char of padding to 0x80.  This is safe since there is
-       always at least one byte free */
-    p = ctx->in + count;
-    *p++ = 0x80;
-
-    /* Bytes of padding needed to make 64 bytes */
-    count = 64 - 1 - count;
-
-    /* Pad out to 56 mod 64 */
-    if (count < 8) {
-        /* Two lots of padding:  Pad the first block to 64 bytes */
-        memset(p, 0, count);
-        byteReverse((uint32_t*)ctx->in, 16);
-        MD5Transform(ctx->buf, (uint32_t *) ctx->in);
-
-        /* Now fill the next block with 56 bytes */
-        memset(ctx->in, 0, 56);
-    } else {
-        /* Pad block to 56 bytes */
-        memset(p, 0, count - 8);
-    }
-    byteReverse((uint32_t*)ctx->in, 14);
-
-    /* Append length in bits and transform */
-    ((uint32_t*) ctx->in)[14] = (uint32_t)ctx->bits;
-    ((uint32_t*) ctx->in)[15] = (uint32_t)(ctx->bits >> 32);
-
-    MD5Transform(ctx->buf, (uint32_t *) ctx->in);
-    byteReverse((uint32_t*)ctx->buf, 4);
-
-       PURGE(ctx->in);
-       PURGE(ctx->bits);
-
-       return (uint8_t *)ctx->buf;
-}
-
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
-        ( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data.  MD5Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void MD5Transform(uint32_t buf[4], uint32_t in[16])
-{
-    register uint32_t a, b, c, d;
-
-    a = buf[0];
-    b = buf[1];
-    c = buf[2];
-    d = buf[3];
-
-    MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
-    MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
-    MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
-    MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
-    MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
-    MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
-    MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
-    MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
-    MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
-    MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
-    MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
-    MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
-    MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
-    MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
-    MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
-    MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
-    MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
-    MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
-    MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
-    MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
-    MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
-    MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
-    MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
-    MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
-    MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
-    MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
-    MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
-    MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
-    MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
-    MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
-    MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
-    MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
-    MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
-    MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
-    MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
-    MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
-    MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
-    MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
-    MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
-    MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
-    MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
-    MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
-    MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
-    MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
-    MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
-    MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
-    MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
-    MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
-    MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
-    MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
-    MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
-    MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
-    MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
-    MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
-    MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
-    MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
-    MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
-    MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
-    MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
-    MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
-    MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
-    MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
-    MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
-    MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
-    buf[0] += a;
-    buf[1] += b;
-    buf[2] += c;
-    buf[3] += d;
-}
-
-/*******************************************************************/
-
-void MD5_init(MD5_Context *ctx)
-{
-       ctx->h.begin = MD5_begin;
-       ctx->h.update = MD5_update;
-       ctx->h.final = MD5_final;
-       ctx->h.digest_len = 16;
-       ctx->h.block_len = 64;
-}
diff --git a/bertos/sec/hash/md5.h b/bertos/sec/hash/md5.h
deleted file mode 100644 (file)
index a6d886d..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief MD5 Hashing algorithm.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "md5"
- */
-
-#ifndef SEC_HASH_MD5_H
-#define SEC_HASH_MD5_H
-
-#include <sec/hash.h>
-#include <cfg/compiler.h>
-#include <alloca.h>
-
-typedef struct
-{
-       Hash h;
-       uint32_t buf[4];
-       uint8_t in[64];
-       uint64_t bits;
-
-} MD5_Context;
-
-void MD5_init(MD5_Context *ctx);
-
-#define MD5_stackinit(...) \
-       ({ MD5_Context *ctx = alloca(sizeof(MD5_Context)); MD5_init(ctx , ##__VA_ARGS__); &ctx->h; })
-
-int MD5_testSetup(void);
-int MD5_testRun(void);
-int MD5_testTearDown(void);
-
-#endif /* SEC_HASH_MD5_H */
diff --git a/bertos/sec/hash/md5_test.c b/bertos/sec/hash/md5_test.c
deleted file mode 100644 (file)
index c3102d1..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include "md5.h"
-#include <string.h>
-
-int MD5_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int MD5_testTearDown(void)
-{
-       return 0;
-}
-
-int MD5_testRun(void)
-{
-       int i;
-       MD5_Context context;
-       MD5_init(&context);
-
-       hash_begin(&context.h);
-       hash_update(&context.h, "abc", 3);
-       ASSERT(memcmp(hash_final(&context.h), "\x90\x01\x50\x98\x3C\xD2\x4F\xB0\xD6\x96\x3F\x7D\x28\xE1\x7F\x72", 16) == 0);
-
-       hash_begin(&context.h);
-       hash_update(&context.h, "aaa", 3);
-       ASSERT(memcmp(hash_final(&context.h), "\x47\xBC\xE5\xC7\x4F\x58\x9F\x48\x67\xDB\xD5\x7E\x9C\xA9\xF8\x08", 16) == 0);
-
-       hash_begin(&context.h);
-       hash_update(&context.h, "abcdefghijklmnopqrstuvwxyz", 26);
-       ASSERT(memcmp(hash_final(&context.h), "\xC3\xFC\xD3\xD7\x61\x92\xE4\x00\x7D\xFB\x49\x6C\xCA\x67\xE1\x3B", 16) == 0);
-
-       hash_begin(&context.h);
-       hash_update(&context.h, "0123456789", 10);
-       ASSERT(memcmp(hash_final(&context.h), "\x78\x1E\x5E\x24\x5D\x69\xB5\x66\x97\x9B\x86\xE2\x8D\x23\xF2\xC7", 16) == 0);
-
-       hash_begin(&context.h);
-       for (i = 0; i < 1000; i++)
-               hash_update(&context.h, "a", 1);
-       ASSERT(memcmp(hash_final(&context.h), "\xCA\xBE\x45\xDC\xC9\xAE\x5B\x66\xBA\x86\x60\x0C\xCA\x6B\x8B\xA8", 16) == 0);
-
-       hash_begin(&context.h);
-       for (i = 0; i < 1000000; i++)
-               hash_update(&context.h, "a", 1);
-       ASSERT(memcmp(hash_final(&context.h), "\x77\x07\xd6\xae\x4e\x02\x7c\x70\xee\xa2\xa9\x35\xc2\x29\x6f\x21", 16) == 0);
-       
-       return 0;
-}
-
-TEST_MAIN(MD5);
diff --git a/bertos/sec/hash/ripemd.c b/bertos/sec/hash/ripemd.c
deleted file mode 100644 (file)
index ed53d62..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief RIPEMD-160 Hashing algorithm.
- * \author Giovanni Bajo <rasky@develer.com>
- */
-
-/*
- *
- *  RIPEMD160.c : RIPEMD-160 implementation
- *
- * Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
- *
- * ===================================================================
- * The contents of this file are dedicated to the public domain.  To
- * the extent that dedication to the public domain is not available,
- * everyone is granted a worldwide, perpetual, royalty-free,
- * non-exclusive license to exercise all rights associated with the
- * contents of this file for any purpose whatsoever.
- * No rights are reserved.
- * ===================================================================
- */
-
-#include "ripemd.h"
-#include <cfg/debug.h>
-#include <cfg/compiler.h>
-#include <cpu/byteorder.h>
-#include <string.h>
-
-#define RIPEMD160_DIGEST_SIZE   20
-
-
-/* cyclic left-shift the 32-bit word n left by s bits */
-#define ROL(s, n)  ROTL(n, s)
-
-/* Initial values for the chaining variables.
- * This is just 0123456789ABCDEFFEDCBA9876543210F0E1D2C3 in little-endian. */
-static const uint32_t initial_h[5] = { 0x67452301u, 0xEFCDAB89u, 0x98BADCFEu, 0x10325476u, 0xC3D2E1F0u };
-
-/* Ordering of message words.  Based on the permutations rho(i) and pi(i), defined as follows:
- *
- *  rho(i) := { 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 }[i]  0 <= i <= 15
- *
- *  pi(i) := 9*i + 5 (mod 16)
- *
- *  Line  |  Round 1  |  Round 2  |  Round 3  |  Round 4  |  Round 5
- * -------+-----------+-----------+-----------+-----------+-----------
- *  left  |    id     |    rho    |   rho^2   |   rho^3   |   rho^4
- *  right |    pi     |   rho pi  |  rho^2 pi |  rho^3 pi |  rho^4 pi
- */
-
-/* Left line */
-static const uint8_t RL[5][16] = {
-    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },   /* Round 1: id */
-    { 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 },   /* Round 2: rho */
-    { 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 },   /* Round 3: rho^2 */
-    { 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 },   /* Round 4: rho^3 */
-    { 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 }    /* Round 5: rho^4 */
-};
-
-/* Right line */
-static const uint8_t RR[5][16] = {
-    { 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 },   /* Round 1: pi */
-    { 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 },   /* Round 2: rho pi */
-    { 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 },   /* Round 3: rho^2 pi */
-    { 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 },   /* Round 4: rho^3 pi */
-    { 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 }    /* Round 5: rho^4 pi */
-};
-
-/*
- * Shifts - Since we don't actually re-order the message words according to
- * the permutations above (we could, but it would be slower), these tables
- * come with the permutations pre-applied.
- */
-
-/* Shifts, left line */
-static const uint8_t SL[5][16] = {
-    { 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 }, /* Round 1 */
-    { 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 }, /* Round 2 */
-    { 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 }, /* Round 3 */
-    { 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 }, /* Round 4 */
-    { 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 }  /* Round 5 */
-};
-
-/* Shifts, right line */
-static const uint8_t SR[5][16] = {
-    { 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 }, /* Round 1 */
-    { 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 }, /* Round 2 */
-    { 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 }, /* Round 3 */
-    { 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 }, /* Round 4 */
-    { 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 }  /* Round 5 */
-};
-
-/* Boolean functions */
-
-#define F1(x, y, z) ((x) ^ (y) ^ (z))
-#define F2(x, y, z) (((x) & (y)) | (~(x) & (z)))
-#define F3(x, y, z) (((x) | ~(y)) ^ (z))
-#define F4(x, y, z) (((x) & (z)) | ((y) & ~(z)))
-#define F5(x, y, z) ((x) ^ ((y) | ~(z)))
-
-/* Round constants, left line */
-static const uint32_t KL[5] = {
-    0x00000000u,    /* Round 1: 0 */
-    0x5A827999u,    /* Round 2: floor(2**30 * sqrt(2)) */
-    0x6ED9EBA1u,    /* Round 3: floor(2**30 * sqrt(3)) */
-    0x8F1BBCDCu,    /* Round 4: floor(2**30 * sqrt(5)) */
-    0xA953FD4Eu     /* Round 5: floor(2**30 * sqrt(7)) */
-};
-
-/* Round constants, right line */
-static const uint32_t KR[5] = {
-    0x50A28BE6u,    /* Round 1: floor(2**30 * cubert(2)) */
-    0x5C4DD124u,    /* Round 2: floor(2**30 * cubert(3)) */
-    0x6D703EF3u,    /* Round 3: floor(2**30 * cubert(5)) */
-    0x7A6D76E9u,    /* Round 4: floor(2**30 * cubert(7)) */
-    0x00000000u     /* Round 5: 0 */
-};
-
-static void ripemd160_init(Hash *h)
-{
-       RIPEMD_Context *self = (RIPEMD_Context *)h;
-       
-    memcpy(self->h, initial_h, RIPEMD160_DIGEST_SIZE);
-    memset(&self->buf, 0, sizeof(self->buf));
-    self->length = 0;
-    self->bufpos = 0;
-}
-
-static inline void byteswap_digest(uint32_t *p)
-{
-    unsigned int i;
-
-    for (i = 0; i < 4; i++) {
-        p[0] = SWAB32(p[0]);
-        p[1] = SWAB32(p[1]);
-        p[2] = SWAB32(p[2]);
-        p[3] = SWAB32(p[3]);
-               p += 4;
-    }
-}
-
-/* The RIPEMD160 compression function.  Operates on self->buf */
-static void ripemd160_compress(RIPEMD_Context *self)
-{
-    uint8_t w, round;
-    uint32_t T;
-    uint32_t AL, BL, CL, DL, EL;    /* left line */
-    uint32_t AR, BR, CR, DR, ER;    /* right line */
-
-    /* Sanity check */
-    ASSERT(self->bufpos == 64);
-
-    /* Byte-swap the buffer if we're on a big-endian machine */
-#if CPU_BYTE_ORDER == CPU_BIG_ENDIAN
-    byteswap_digest(self->buf.w);
-#endif
-
-    /* Load the left and right lines with the initial state */
-    AL = AR = self->h[0];
-    BL = BR = self->h[1];
-    CL = CR = self->h[2];
-    DL = DR = self->h[3];
-    EL = ER = self->h[4];
-
-    /* Round 1 */
-    round = 0;
-    for (w = 0; w < 16; w++) { /* left line */
-        T = ROL(SL[round][w], AL + F1(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
-        AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
-    }
-    for (w = 0; w < 16; w++) { /* right line */
-        T = ROL(SR[round][w], AR + F5(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
-        AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
-    }
-
-    /* Round 2 */
-    round++;
-    for (w = 0; w < 16; w++) { /* left line */
-        T = ROL(SL[round][w], AL + F2(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
-        AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
-    }
-    for (w = 0; w < 16; w++) { /* right line */
-        T = ROL(SR[round][w], AR + F4(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
-        AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
-    }
-
-    /* Round 3 */
-    round++;
-    for (w = 0; w < 16; w++) { /* left line */
-        T = ROL(SL[round][w], AL + F3(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
-        AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
-    }
-    for (w = 0; w < 16; w++) { /* right line */
-        T = ROL(SR[round][w], AR + F3(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
-        AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
-    }
-
-    /* Round 4 */
-    round++;
-    for (w = 0; w < 16; w++) { /* left line */
-        T = ROL(SL[round][w], AL + F4(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
-        AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
-    }
-    for (w = 0; w < 16; w++) { /* right line */
-        T = ROL(SR[round][w], AR + F2(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
-        AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
-    }
-
-    /* Round 5 */
-    round++;
-    for (w = 0; w < 16; w++) { /* left line */
-        T = ROL(SL[round][w], AL + F5(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
-        AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
-    }
-    for (w = 0; w < 16; w++) { /* right line */
-        T = ROL(SR[round][w], AR + F1(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
-        AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
-    }
-
-    /* Final mixing stage */
-    T = self->h[1] + CL + DR;
-    self->h[1] = self->h[2] + DL + ER;
-    self->h[2] = self->h[3] + EL + AR;
-    self->h[3] = self->h[4] + AL + BR;
-    self->h[4] = self->h[0] + BL + CR;
-    self->h[0] = T;
-
-    /* Clear the buffer and wipe the temporary variables */
-    T = AL = BL = CL = DL = EL = AR = BR = CR = DR = ER = 0;
-    memset(&self->buf, 0, sizeof(self->buf));
-    self->bufpos = 0;
-}
-
-static void ripemd160_update(Hash *h, const void *data, size_t length)
-{
-       RIPEMD_Context *self = (RIPEMD_Context *)h;
-       const uint8_t *p = (const uint8_t *)data;
-    unsigned int bytes_needed;
-
-    /* Some assertions */
-    ASSERT(p != NULL);
-
-    /* We never leave a full buffer */
-    ASSERT(self->bufpos < 64);
-
-    while (length > 0) {
-        /* Figure out how many bytes we need to fill the internal buffer. */
-        bytes_needed = 64 - self->bufpos;
-
-        if (length >= bytes_needed) {
-            /* We have enough bytes, so copy them into the internal buffer and run
-             * the compression function. */
-            memcpy(&self->buf.b[self->bufpos], p, bytes_needed);
-            self->bufpos += bytes_needed;
-            self->length += bytes_needed << 3;    /* length is in bits */
-            p += bytes_needed;
-            ripemd160_compress(self);
-            length -= bytes_needed;
-            continue;
-        }
-
-        /* We do not have enough bytes to fill the internal buffer.
-         * Copy what's there and return. */
-        memcpy(&self->buf.b[self->bufpos], p, length);
-        self->bufpos += length;
-        self->length += length << 3;    /* length is in bits */
-        return;
-    }
-}
-
-static uint8_t* ripemd160_digest(Hash *h)
-{
-       RIPEMD_Context *self = (RIPEMD_Context *)h;
-       
-    /* Append the padding */
-    self->buf.b[self->bufpos++] = 0x80;
-
-    if (self->bufpos > 56) {
-        self->bufpos = 64;
-        ripemd160_compress(self);
-    }
-
-    /* Append the length */
-    self->buf.w[14] = cpu_to_le32((uint32_t)(self->length & 0xFFFFffffu));
-    self->buf.w[15] = cpu_to_le32((uint32_t)((self->length >> 32) & 0xFFFFffffu));
-
-       self->bufpos = 64;
-    ripemd160_compress(self);
-
-    /* Copy the final state into the output buffer */
-#if CPU_BYTE_ORDER == CPU_BIG_ENDIAN
-    byteswap_digest(self->h);
-#endif
-
-       return (uint8_t*)&self->h;
-}
-
-/**************************************************************************************/
-
-
-void RIPEMD_init(RIPEMD_Context *ctx)
-{
-       ctx->hash.begin = ripemd160_init;
-       ctx->hash.update = ripemd160_update;
-       ctx->hash.final = ripemd160_digest;
-       ctx->hash.digest_len = RIPEMD160_DIGEST_SIZE;
-       ctx->hash.block_len = 64;
-}
diff --git a/bertos/sec/hash/ripemd.h b/bertos/sec/hash/ripemd.h
deleted file mode 100644 (file)
index 4f95547..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef SEC_HASH_RIPEMD_H
-#define SEC_HASH_RIPEMD_H
-
-#include <cfg/compiler.h>
-#include <sec/hash.h>
-#include <alloca.h>
-
-typedef struct {
-       Hash hash;
-    uint32_t h[5];      /* The current hash state */
-    uint64_t length;    /* Total number of _bits_ (not bytes) added to the
-                           hash.  This includes bits that have been buffered
-                           but not not fed through the compression function yet. */
-    union {
-        uint32_t w[16];
-        uint8_t b[64];
-    } buf;
-    uint8_t bufpos;     /* number of bytes currently in the buffer */
-
-} RIPEMD_Context;
-
-void RIPEMD_init(RIPEMD_Context *ctx);
-
-#define RIPEMD_stackinit(...) \
-       ({ RIPEMD_Context *ctx = alloca(sizeof(RIPEMD_Context)); RIPEMD_init(ctx , ##__VA_ARGS__); &ctx->hash; })
-
-int RIPEMD_testSetup(void);
-int RIPEMD_testRun(void);
-int RIPEMD_testTearDown(void);
-
-
-#endif /* SEC_HASH_RIPEMD_H */
\ No newline at end of file
diff --git a/bertos/sec/hash/ripemd_test.c b/bertos/sec/hash/ripemd_test.c
deleted file mode 100644 (file)
index 5c3c051..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-
-#include "ripemd.h"
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include <string.h>
-
-int RIPEMD_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int RIPEMD_testTearDown(void)
-{
-       return 0;
-}
-
-int RIPEMD_testRun(void)
-{
-       Hash *h = RIPEMD_stackinit();
-
-       hash_begin(h);
-       ASSERT(memcmp(hash_final(h), "\x9c\x11\x85\xa5\xc5\xe9\xfc\x54\x61\x28\x08\x97\x7e\xe8\xf5\x48\xb2\x25\x8d\x31", 20) == 0);
-
-       hash_begin(h);
-       hash_update(h, "a", 1);
-       ASSERT(memcmp(hash_final(h), "\x0b\xdc\x9d\x2d\x25\x6b\x3e\xe9\xda\xae\x34\x7b\xe6\xf4\xdc\x83\x5a\x46\x7f\xfe", 20) == 0);
-       
-       hash_begin(h);
-       hash_update(h, "abc", 3);
-       ASSERT(memcmp(hash_final(h), "\x8e\xb2\x08\xf7\xe0\x5d\x98\x7a\x9b\x04\x4a\x8e\x98\xc6\xb0\x87\xf1\x5a\x0b\xfc", 20) == 0);
-
-       hash_begin(h);
-       hash_update(h, "message digest", 14);
-       ASSERT(memcmp(hash_final(h), "\x5d\x06\x89\xef\x49\xd2\xfa\xe5\x72\xb8\x81\xb1\x23\xa8\x5f\xfa\x21\x59\x5f\x36", 20) == 0);
-
-       hash_begin(h);
-       hash_update(h, "abcdefghijklmnopqrstuvwxyz", 26);
-       ASSERT(memcmp(hash_final(h), "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb\xdc\xeb\x5b\x9d\x28\x65\xb3\x70\x8d\xbc", 20) == 0);
-
-       hash_begin(h);
-       hash_update(h, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56);
-       ASSERT(memcmp(hash_final(h), "\x12\xa0\x53\x38\x4a\x9c\x0c\x88\xe4\x05\xa0\x6c\x27\xdc\xf4\x9a\xda\x62\xeb\x2b", 20) == 0);
-
-       hash_begin(h);
-       hash_update(h, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62);
-       ASSERT(memcmp(hash_final(h), "\xb0\xe2\x0b\x6e\x31\x16\x64\x02\x86\xed\x3a\x87\xa5\x71\x30\x79\xb2\x1f\x51\x89", 20) == 0);
-
-       hash_begin(h);
-       for (int i=0;i<8;++i)
-               hash_update(h, "1234567890", 10);
-       ASSERT(memcmp(hash_final(h), "\x9b\x75\x2e\x45\x57\x3d\x4b\x39\xf4\xdb\xd3\x32\x3c\xab\x82\xbf\x63\x32\x6b\xfb", 20) == 0);
-
-       hash_begin(h);
-       for (int i=0;i<1000000;++i)
-               hash_update(h, "a", 1);
-       ASSERT(memcmp(hash_final(h), "\x52\x78\x32\x43\xc1\x69\x7b\xdb\xe1\x6d\x37\xf9\x7f\x68\xf0\x83\x25\xdc\x15\x28", 20) == 0);
-
-       return 0;
-}
-
-TEST_MAIN(RIPEMD);
diff --git a/bertos/sec/hash/sha1.c b/bertos/sec/hash/sha1.c
deleted file mode 100644 (file)
index 6f195a5..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief SHA-1 Hashing algorithm.
- * \author Giovanni Bajo <rasky@develer.com>
- */
-
-/*
- * Derived from:
- * SHA-1 in C
- * By Steve Reid <steve@edmweb.com>
- * 100% Public Domain
- */
-
-/* #define LITTLE_ENDIAN * This should be #define'd if true. */
-/* #define SHA1HANDSOFF * Copies data before messing with it. */
-
-#include "sha1.h"
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-#include <cfg/macros.h>
-#include <cpu/byteorder.h>  // CPU_BYTE_ORDER
-#include <string.h>
-#include <stdlib.h>
-#include <sec/util.h>
-
-#define SHA1_BLOCK_LEN          64
-#define SHA1_DIGEST_LEN         20
-
-static void SHA1Transform(uint32_t state[5], const uint8_t buffer[64]);
-
-#define rol(value, bits)  ROTL(value, bits)
-
-/* blk0() and blk() perform the initial expand. */
-/* I got the idea of expanding during the round function from SSLeay */
-#define blk0(i) (block[i] = be32_to_cpu(block[i]))
-#define blk(i) (block[i&15] = rol(block[(i+13)&15]^block[(i+8)&15] \
-                                     ^block[(i+2)&15]^block[i&15],1))
-
-/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
-#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
-#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
-#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
-#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
-#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
-
-
-/* Hash a single 512-bit block. This is the core of the algorithm. */
-static void SHA1Transform(uint32_t state[5], const uint8_t buffer[64])
-{
-       uint32_t a, b, c, d, e;
-       uint32_t block[16];
-
-       memcpy(&block, buffer, 64);
-
-       /* Copy context->state[] to working vars */
-       a = state[0];
-       b = state[1];
-       c = state[2];
-       d = state[3];
-       e = state[4];
-       /* 4 rounds of 20 operations each. Loop unrolled. */
-       R0(a,b,c,d,e, 0);
-       R0(e,a,b,c,d, 1);
-       R0(d,e,a,b,c, 2);
-       R0(c,d,e,a,b, 3);
-       R0(b,c,d,e,a, 4);
-       R0(a,b,c,d,e, 5);
-       R0(e,a,b,c,d, 6);
-       R0(d,e,a,b,c, 7);
-       R0(c,d,e,a,b, 8);
-       R0(b,c,d,e,a, 9);
-       R0(a,b,c,d,e,10);
-       R0(e,a,b,c,d,11);
-       R0(d,e,a,b,c,12);
-       R0(c,d,e,a,b,13);
-       R0(b,c,d,e,a,14);
-       R0(a,b,c,d,e,15);
-       R1(e,a,b,c,d,16);
-       R1(d,e,a,b,c,17);
-       R1(c,d,e,a,b,18);
-       R1(b,c,d,e,a,19);
-       R2(a,b,c,d,e,20);
-       R2(e,a,b,c,d,21);
-       R2(d,e,a,b,c,22);
-       R2(c,d,e,a,b,23);
-       R2(b,c,d,e,a,24);
-       R2(a,b,c,d,e,25);
-       R2(e,a,b,c,d,26);
-       R2(d,e,a,b,c,27);
-       R2(c,d,e,a,b,28);
-       R2(b,c,d,e,a,29);
-       R2(a,b,c,d,e,30);
-       R2(e,a,b,c,d,31);
-       R2(d,e,a,b,c,32);
-       R2(c,d,e,a,b,33);
-       R2(b,c,d,e,a,34);
-       R2(a,b,c,d,e,35);
-       R2(e,a,b,c,d,36);
-       R2(d,e,a,b,c,37);
-       R2(c,d,e,a,b,38);
-       R2(b,c,d,e,a,39);
-       R3(a,b,c,d,e,40);
-       R3(e,a,b,c,d,41);
-       R3(d,e,a,b,c,42);
-       R3(c,d,e,a,b,43);
-       R3(b,c,d,e,a,44);
-       R3(a,b,c,d,e,45);
-       R3(e,a,b,c,d,46);
-       R3(d,e,a,b,c,47);
-       R3(c,d,e,a,b,48);
-       R3(b,c,d,e,a,49);
-       R3(a,b,c,d,e,50);
-       R3(e,a,b,c,d,51);
-       R3(d,e,a,b,c,52);
-       R3(c,d,e,a,b,53);
-       R3(b,c,d,e,a,54);
-       R3(a,b,c,d,e,55);
-       R3(e,a,b,c,d,56);
-       R3(d,e,a,b,c,57);
-       R3(c,d,e,a,b,58);
-       R3(b,c,d,e,a,59);
-       R4(a,b,c,d,e,60);
-       R4(e,a,b,c,d,61);
-       R4(d,e,a,b,c,62);
-       R4(c,d,e,a,b,63);
-       R4(b,c,d,e,a,64);
-       R4(a,b,c,d,e,65);
-       R4(e,a,b,c,d,66);
-       R4(d,e,a,b,c,67);
-       R4(c,d,e,a,b,68);
-       R4(b,c,d,e,a,69);
-       R4(a,b,c,d,e,70);
-       R4(e,a,b,c,d,71);
-       R4(d,e,a,b,c,72);
-       R4(c,d,e,a,b,73);
-       R4(b,c,d,e,a,74);
-       R4(a,b,c,d,e,75);
-       R4(e,a,b,c,d,76);
-       R4(d,e,a,b,c,77);
-       R4(c,d,e,a,b,78);
-       R4(b,c,d,e,a,79);
-       /* Add the working vars back into context.state[] */
-       state[0] += a;
-       state[1] += b;
-       state[2] += c;
-       state[3] += d;
-       state[4] += e;
-       /* Wipe variables */
-       a = b = c = d = e = 0;
-}
-
-static void SHA1_begin(Hash* h)
-{
-       SHA1_Context *context = (SHA1_Context*)h;
-       /* SHA1 initialization constants */
-       context->state[0] = 0x67452301;
-       context->state[1] = 0xEFCDAB89;
-       context->state[2] = 0x98BADCFE;
-       context->state[3] = 0x10325476;
-       context->state[4] = 0xC3D2E1F0;
-       context->count[0] = context->count[1] = 0;
-}
-
-/* Run your data through this. */
-
-static void SHA1_update(Hash* h, const void* vdata, size_t len)
-{
-       SHA1_Context *context = (SHA1_Context*)h;
-       const uint8_t *data = (const uint8_t*)vdata;
-       size_t i, j;
-
-       j = (context->count[0] >> 3) & 63;
-       if ((context->count[0] += len << 3) < (len << 3))
-               context->count[1]++;
-       context->count[1] += (len >> 29);
-       if ((j + len) > 63) {
-               memcpy(&context->buffer[j], data, (i = 64-j));
-               SHA1Transform(context->state, context->buffer);
-               for ( ; i + 63 < len; i += 64) {
-                       SHA1Transform(context->state, &data[i]);
-               }
-               j = 0;
-       } else
-               i = 0;
-       memcpy(&context->buffer[j], &data[i], len - i);
-}
-
-
-/* Add padding and return the message digest. */
-
-static uint8_t *SHA1_final(Hash* h)
-{
-       SHA1_Context *context = (SHA1_Context*)h;
-       uint32_t i;
-       uint8_t finalcount[8];
-
-       for (i = 0; i < 8; i++)
-               finalcount[i] = (uint8_t)((context->count[(i >= 4 ? 0 : 1)]
-                                          >> ((3-(i & 3)) * 8) ) & 255);  /* Endian independent */
-
-       SHA1_update(h, "\200", 1);
-       while ((context->count[0] & 504) != 448)
-               SHA1_update(h, "\0", 1);
-       SHA1_update(h, finalcount, 8);  /* Should cause a SHA1Transform() */
-
-       for (i = 0; i < 20; i++)
-               context->buffer[i] = (uint8_t)
-                                    ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
-
-       PURGE(i);
-       PURGE(finalcount);
-       return context->buffer;
-}
-
-
-/*************************************************************/
-
-void SHA1_init(SHA1_Context* ctx)
-{
-       ctx->h.block_len = SHA1_BLOCK_LEN;
-       ctx->h.digest_len = SHA1_DIGEST_LEN;
-       ctx->h.begin = SHA1_begin;
-       ctx->h.update = SHA1_update;
-       ctx->h.final = SHA1_final;
-}
diff --git a/bertos/sec/hash/sha1.h b/bertos/sec/hash/sha1.h
deleted file mode 100644 (file)
index eff7fa7..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief SHA-1 Hashing algorithm.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "sha1"
- */
-
-#ifndef SEC_HASH_SHA1
-#define SEC_HASH_SHA1
-
-#include <cfg/compiler.h>
-#include <sec/hash.h>
-#include <alloca.h>
-
-/**
- * Context for SHA1 computation.
- */
-typedef struct {
-    Hash h;
-    uint32_t state[5];
-    uint32_t count[2];
-    uint8_t buffer[64];
-} SHA1_Context;
-
-void SHA1_init(SHA1_Context *context);
-
-#define SHA1_stackinit(...) \
-       ({ SHA1_Context *ctx = alloca(sizeof(SHA1_Context)); SHA1_init(ctx, ##__VA_ARGS__); &ctx->h; })
-
-int SHA1_testSetup(void);
-int SHA1_testRun(void);
-int SHA1_testTearDown(void);
-
-#endif
diff --git a/bertos/sec/hash/sha1_test.c b/bertos/sec/hash/sha1_test.c
deleted file mode 100644 (file)
index 9ae38ab..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include "sha1.h"
-#include <string.h>
-
-int SHA1_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int SHA1_testTearDown(void)
-{
-       return 0;
-}
-
-int SHA1_testRun(void)
-{
-       int i;
-       SHA1_Context context;
-       SHA1_init(&context);
-
-       hash_begin(&context.h);
-       hash_update(&context.h, "abc", 3);
-       ASSERT(memcmp(hash_final(&context.h), "\xA9\x99\x3E\x36\x47\x06\x81\x6A\xBA\x3E\x25\x71\x78\x50\xC2\x6C\x9C\xD0\xD8\x9D", 20) == 0);
-
-       hash_begin(&context.h);
-       hash_update(&context.h, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56);
-       ASSERT(memcmp(hash_final(&context.h), "\x84\x98\x3E\x44\x1C\x3B\xD2\x6E\xBA\xAE\x4A\xA1\xF9\x51\x29\xE5\xE5\x46\x70\xF1", 20) == 0);
-
-       hash_begin(&context.h);
-       for (i = 0; i < 1000000; i++)
-               hash_update(&context.h, "a", 1);
-       ASSERT(memcmp(hash_final(&context.h), "\x34\xAA\x97\x3C\xD4\xC4\xDA\xA4\xF6\x1E\xEB\x2B\xDB\xAD\x27\x31\x65\x34\x01\x6F", 20) == 0);
-       
-       return 0;
-}
-
-TEST_MAIN(SHA1);
diff --git a/bertos/sec/kdf.h b/bertos/sec/kdf.h
deleted file mode 100644 (file)
index 48ae1c7..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for key derivation functions.
- * \author Giovanni Bajo <rasky@develer.com>
- * 
- */
-
-#ifndef SEC_KDF_H
-#define SEC_KDF_H
-
-#include <cfg/compiler.h>
-#include <cfg/macros.h>
-#include <cfg/debug.h>
-#include <string.h>
-
-typedef struct Kdf
-{
-       const uint8_t* block;
-       size_t block_len;
-       size_t to_read;
-               
-       void (*begin)(struct Kdf *kdf, const char *pwd, size_t pwd_len,
-                                 const uint8_t *salt, size_t salt_len);
-       void (*next)(struct Kdf *kdf);
-} Kdf;
-
-/**
- * Initialize the key derivation function, with the specified \a password and \a salt.
- */
-INLINE void kdf_begin(Kdf *kdf, const char *pwd, size_t pwd_len,
-                                         const uint8_t *salt, size_t salt_len)
-{
-       ASSERT(kdf->begin);
-       kdf->begin(kdf, pwd, pwd_len, salt, salt_len);
-}
-
-/**
- * Extract \a len derived bytes into the \a out buffer.
- * 
- * After having initialized the derivation function iwth \a kdf_begin, you can call
- * this function multiple times, to produce several batches of derived data.
- * 
- * \note Some algorithms implementing this API might have a maximum length of bytes
- * that can be derived, after which they will simply ASSERT().
- */
-INLINE void kdf_read(Kdf *kdf, uint8_t *out, size_t len)
-{
-       do
-       {
-               if (kdf->to_read == 0)
-               {
-                       kdf->next(kdf);
-                       ASSERT(kdf->to_read != 0);
-               }
-
-               size_t c = MIN(len, kdf->to_read);
-               memcpy(out, kdf->block, c);
-               len -= c;
-               out += c;
-               kdf->block += c;
-               kdf->to_read -= c;
-       } while (len);
-}
-
-#endif /* SEC_KDF_H */
diff --git a/bertos/sec/kdf/pbkdf1.c b/bertos/sec/kdf/pbkdf1.c
deleted file mode 100644 (file)
index bf4980b..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF1 implementation
- * \author Giovanni Bajo <rasky@develer.com>
- * 
- */
-
-#include "pbkdf1.h"
-#include <sec/hash.h>
-#include <sec/util.h>
-
-
-static void PBKDF1_begin(Kdf *ctx_, const char *pwd, size_t pwd_len,
-                                            const uint8_t *salt, size_t salt_len)
-{
-       PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_;
-
-       hash_begin(ctx->hash);
-       hash_update(ctx->hash, pwd, pwd_len);
-       hash_update(ctx->hash, salt, salt_len);
-       
-       ctx->kdf.to_read = 0;
-       ctx->kdf.block = NULL;
-}
-
-static void PBKDF1_next(Kdf *ctx_)
-{
-       PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_;
-       
-       // PBKDF1 will generate only one block of data (whose len depends
-       // on the underlying hash function). After that, the generation stops
-       // with an ASSERT. If you use PKBDF1, you are supposed to be aware
-       // of this limit while designing your algorithm.
-       ASSERT(ctx->kdf.block == NULL);
-
-       int hlen = hash_digest_len(ctx->hash);
-       uint8_t temp[hlen];
-       uint8_t *final = hash_final(ctx->hash);
-       
-       for (uint32_t i=0; i<ctx->iterations-1; i++)
-       {
-               memcpy(temp, final, hlen);
-               hash_begin(ctx->hash);
-               hash_update(ctx->hash, temp, hlen);
-               final = hash_final(ctx->hash);
-       }
-
-       PURGE(temp);
-
-       ctx->kdf.to_read = ctx->kdf.block_len;
-       ctx->kdf.block = final;
-}
-
-/**********************************************************************/
-
-// Default iteration count. The RFC does not specify a "good" default
-// value; it just says that this should be a high value to slow down
-// computations. Since slowing down is not much of a concern for an
-// embedded system, we settle for a value which is not too big.
-#define PBKDF1_DEFAULT_ITERATIONS      100
-
-
-void PBKDF1_init(PBKDF1_Context *ctx, Hash *h)
-{
-       ctx->hash = h;
-       ctx->iterations = PBKDF1_DEFAULT_ITERATIONS;
-       ctx->kdf.begin = PBKDF1_begin;
-       ctx->kdf.next = PBKDF1_next;
-       ctx->kdf.block_len = hash_digest_len(h);
-}
-
-void PBKDF1_set_iterations(Kdf *ctx_, uint32_t iterations)
-{
-       PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_;
-       ctx->iterations = iterations;
-}
diff --git a/bertos/sec/kdf/pbkdf1.h b/bertos/sec/kdf/pbkdf1.h
deleted file mode 100644 (file)
index f64d0d8..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF1 implementation
- * \author Giovanni Bajo <rasky@develer.com>
- * 
- */
-
-#ifndef SEC_KDF_PBKDF1_H
-#define SEC_KDF_PBKDF1_H
-
-#include <sec/kdf.h>
-#include <sec/hash.h>
-
-typedef struct 
-{
-       Kdf kdf;
-       Hash *hash;
-       uint32_t iterations;
-} PBKDF1_Context;
-
-void PBKDF1_init(PBKDF1_Context *ctx, Hash *h);
-void PBKDF1_set_iterations(Kdf *kdf, uint32_t iterations);
-
-#define PBKDF1_stackinit(...) \
-       ({ PBKDF1_Context *ctx = alloca(sizeof(PBKDF1_Context)); PBKDF1_init(ctx , ##__VA_ARGS__); &ctx->kdf; })
-
-int PBKDF1_testSetup(void);
-int PBKDF1_testRun(void);
-int PBKDF1_testTearDown(void);
-
-#endif /* SEC_KDF_PBKDF1_H */
diff --git a/bertos/sec/kdf/pbkdf1_test.c b/bertos/sec/kdf/pbkdf1_test.c
deleted file mode 100644 (file)
index 6cbe7fb..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF1 testsuite
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "pbkdf1.h"
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include <cpu/detect.h>
-
-#include <sec/mac/hmac.h>
-#include <sec/hash/sha1.h>
-
-#include <string.h>
-
-int PBKDF1_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int PBKDF1_testTearDown(void)
-{
-       return 0;
-}
-
-int PBKDF1_testRun(void)
-{
-       Kdf *kdf = PBKDF1_stackinit(SHA1_stackinit());
-
-       uint8_t res[16];
-
-       PBKDF1_set_iterations(kdf, 1000);
-       kdf_begin(kdf, "password", 8, (const uint8_t*)"\x78\x57\x8E\x5A\x5D\x63\xCB\x06", 8);
-       kdf_read(kdf, res, 16);
-       ASSERT(memcmp(res, "\xDC\x19\x84\x7E\x05\xC6\x4D\x2F\xAF\x10\xEB\xFB\x4A\x3D\x2A\x20", 16) == 0);
-
-       return 0;
-}
-
-TEST_MAIN(PBKDF1);
diff --git a/bertos/sec/kdf/pbkdf2.c b/bertos/sec/kdf/pbkdf2.c
deleted file mode 100644 (file)
index e3d1f5f..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF2 implementation
- * \author Giovanni Bajo <rasky@develer.com>
- * 
- */
-
-#include "pbkdf2.h"
-#include <cpu/byteorder.h>
-#include <sec/util.h>
-#include <cfg/debug.h>
-
-static void PBKDF2_begin(Kdf *ctx_, const char *pwd, size_t pwd_len,
-                                            const uint8_t *salt, size_t salt_len)
-{
-       PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_;
-       
-       ASSERT(sizeof(ctx->salt) >= salt_len);
-       
-       mac_set_key(ctx->mac, (const uint8_t*)pwd, pwd_len);
-       ctx->salt_len = salt_len;
-       memcpy(ctx->salt, salt, salt_len);
-       ctx->c = 0;
-       ctx->kdf.to_read = 0;
-       ctx->kdf.block = NULL;
-}
-
-static void PBKDF2_next(Kdf *ctx_)
-{
-       PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_;
-       int dlen = mac_digest_len(ctx->mac);
-       uint8_t last[dlen];
-       
-       ++ctx->c;
-       uint32_t bec = cpu_to_be32(ctx->c);
-       
-       mac_begin(ctx->mac);
-       mac_update(ctx->mac, ctx->salt, ctx->salt_len);
-       mac_update(ctx->mac, &bec, 4);
-       memcpy(last, mac_final(ctx->mac), dlen);
-       memcpy(ctx->block, last, dlen);
-       
-       for (uint32_t i=0; i<ctx->iterations-1; ++i)
-       {
-               mac_begin(ctx->mac);
-               mac_update(ctx->mac, last, dlen);
-               memcpy(last, mac_final(ctx->mac), dlen);
-               xor_block(ctx->block, ctx->block, last, dlen);
-       }
-
-       ctx->kdf.to_read = dlen;
-       ctx->kdf.block = ctx->block;
-       
-       PURGE(last);
-}
-
-
-/**********************************************************************/
-
-// Default iteration count. The RFC does not specify a "good" default
-// value; it just says that this should be a high value to slow down
-// computations. Since slowing down is not much of a concern for an
-// embedded system, we settle for a value which is not too big.
-#define PBKDF2_DEFAULT_ITERATIONS      100
-
-
-void PBKDF2_init(PBKDF2_Context *ctx, Mac *mac)
-{
-       ctx->salt_len = 0;
-       ctx->mac = mac;
-       ctx->iterations = PBKDF2_DEFAULT_ITERATIONS;
-       ctx->kdf.begin = PBKDF2_begin;
-       ctx->kdf.next = PBKDF2_next;
-       ctx->kdf.block_len = mac_digest_len(mac);
-       ASSERT(ctx->kdf.block_len <= sizeof(ctx->block));
-}
-
-void PBKDF2_set_iterations(Kdf *ctx_, uint32_t iterations)
-{
-       PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_;
-       ctx->iterations = iterations;
-}
-
diff --git a/bertos/sec/kdf/pbkdf2.h b/bertos/sec/kdf/pbkdf2.h
deleted file mode 100644 (file)
index 3a31371..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF2 implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_KDF_PBKDF2_H
-#define SEC_KDF_PBKDF2_H
-
-#include <sec/kdf.h>
-#include <sec/mac.h>
-
-typedef struct
-{
-       Kdf kdf;
-       Mac *mac;
-       uint8_t block[20];
-       uint32_t c;
-       uint32_t iterations;
-       uint8_t salt_len;
-       uint8_t salt[48];
-} PBKDF2_Context;
-
-void PBKDF2_init(PBKDF2_Context *ctx, Mac *mac);
-void PBKDF2_set_iterations(Kdf *kdf, uint32_t iterations);
-
-#define PBKDF2_stackinit(...) \
-       ({ PBKDF2_Context *ctx = alloca(sizeof(PBKDF2_Context)); PBKDF2_init(ctx , ##__VA_ARGS__); &ctx->kdf; })
-
-int PBKDF2_testSetup(void);
-int PBKDF2_testRun(void);
-int PBKDF2_testTearDown(void);
-
-#endif /* SEC_KDF_PBKDF2_H */
diff --git a/bertos/sec/kdf/pbkdf2_test.c b/bertos/sec/kdf/pbkdf2_test.c
deleted file mode 100644 (file)
index f5f726f..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF2 testsuite
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-
-#include "pbkdf2.h"
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include <sec/mac/hmac.h>
-#include <sec/hash/sha1.h>
-
-#include <cpu/detect.h>
-
-#include <string.h>
-
-
-int PBKDF2_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int PBKDF2_testTearDown(void)
-{
-       return 0;
-}
-
-int PBKDF2_testRun(void)
-{
-       Kdf *kdf = PBKDF2_stackinit(hmac_stackinit(SHA1_stackinit()));
-
-       uint8_t res[32];
-
-       PBKDF2_set_iterations(kdf, 1);
-       kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4);
-       kdf_read(kdf, res, 20);
-       ASSERT(memcmp(res, "\x0c\x60\xc8\x0f\x96\x1f\x0e\x71\xf3\xa9\xb5\x24\xaf\x60\x12\x06\x2f\xe0\x37\xa6", 20) == 0);
-
-       PBKDF2_set_iterations(kdf, 2);
-       kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4);
-       kdf_read(kdf, res, 20);
-       ASSERT(memcmp(res, "\xea\x6c\x01\x4d\xc7\x2d\x6f\x8c\xcd\x1e\xd9\x2a\xce\x1d\x41\xf0\xd8\xde\x89\x57", 20) == 0);
-
-       PBKDF2_set_iterations(kdf, 4096);
-       kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4);
-       kdf_read(kdf, res, 20);
-       ASSERT(memcmp(res, "\x4b\x00\x79\x01\xb7\x65\x48\x9a\xbe\xad\x49\xd9\x26\xf7\x21\xd0\x65\xa4\x29\xc1", 20) == 0);
-
-#if CPU_X86
-       // Too slow for an embedded system...
-       PBKDF2_set_iterations(kdf, 16777216);
-       kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4);
-       kdf_read(kdf, res, 20);
-       ASSERT(memcmp(res, "\xee\xfe\x3d\x61\xcd\x4d\xa4\xe4\xe9\x94\x5b\x3d\x6b\xa2\x15\x8c\x26\x34\xe9\x84", 20) == 0);
-#endif
-
-       PBKDF2_set_iterations(kdf, 4096);
-       kdf_begin(kdf, "pass\0word", 9, (const uint8_t*)"sa\0lt", 5);
-       kdf_read(kdf, res, 16);
-       ASSERT(memcmp(res, "\x56\xfa\x6a\xa7\x55\x48\x09\x9d\xcc\x37\xd7\xf0\x34\x25\xe0\xc3", 16) == 0);
-
-       PBKDF2_set_iterations(kdf, 4096);
-       kdf_begin(kdf, "passwordPASSWORDpassword", 24, (const uint8_t*)"saltSALTsaltSALTsaltSALTsaltSALTsalt", 36);
-       kdf_read(kdf, res, 25);
-       ASSERT(memcmp(res, "\x3d\x2e\xec\x4f\xe4\x1c\x84\x9b\x80\xc8\xd8\x36\x62\xc0\xe4\x4a\x8b\x29\x1a\x96\x4c\xf2\xf0\x70\x38", 25) == 0);
-
-       return 0;
-}
-
-TEST_MAIN(PBKDF2);
diff --git a/bertos/sec/mac.h b/bertos/sec/mac.h
deleted file mode 100644 (file)
index a9fc9eb..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for message authentication algorithms.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_MAC_H
-#define SEC_MAC_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-typedef struct Mac {
-       uint8_t digest_len;
-       uint8_t key_len;
-
-       void (*set_key)(struct Mac *m, const void *key, size_t len);
-       void (*begin)(struct Mac *m);
-       void (*update)(struct Mac *m, const void *data, size_t len);
-       uint8_t* (*final)(struct Mac *m);
-} Mac;
-
-INLINE void mac_set_key(Mac *m, const uint8_t* key, size_t len)
-{
-       ASSERT(m->set_key);
-       m->set_key(m, key, len);
-}
-
-INLINE void mac_begin(Mac *m)
-{
-       ASSERT(m->begin);
-       m->begin(m);
-}
-
-INLINE void mac_update(Mac *m, const void *data, size_t len)
-{
-       ASSERT(m->update);
-       m->update(m, data, len);
-}
-
-INLINE uint8_t* mac_final(Mac *m)
-{
-       ASSERT(m->final);
-       return m->final(m);
-}
-
-INLINE size_t mac_digest_len(Mac *m)
-{
-       return m->digest_len;
-}
-
-INLINE size_t mac_key_len(Mac *m)
-{
-       return m->key_len;
-}
-
-#endif
diff --git a/bertos/sec/mac/hmac.c b/bertos/sec/mac/hmac.c
deleted file mode 100644 (file)
index 7e077e9..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief HMAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "hmac.h"
-#include <sec/util.h>
-#include <string.h>
-
-
-static void hmac_set_key(Mac *m, const void *key, size_t key_len)
-{
-       HmacContext *ctx = (HmacContext *)m;
-
-       memset(ctx->key, 0, ctx->m.key_len);
-       if (key_len <= ctx->m.key_len)
-               memcpy(ctx->key, key, key_len);
-       else
-       {
-               hash_begin(ctx->h);
-               hash_update(ctx->h, key, key_len);
-               memcpy(ctx->key, hash_final(ctx->h), hash_digest_len(ctx->h));
-       }
-
-       xor_block_const(ctx->key, ctx->key, 0x5C, ctx->m.key_len);
-}
-
-static void hmac_begin(Mac *m)
-{
-       HmacContext *ctx = (HmacContext *)m;
-       int klen = ctx->m.key_len;
-
-       xor_block_const(ctx->key, ctx->key, 0x36^0x5C, klen);
-       hash_begin(ctx->h);
-       hash_update(ctx->h, ctx->key, klen);
-}
-
-static void hmac_update(Mac *m, const void *data, size_t len)
-{
-       HmacContext *ctx = (HmacContext *)m;
-       hash_update(ctx->h, data, len);
-}
-
-static uint8_t *hmac_final(Mac *m)
-{
-       HmacContext *ctx = (HmacContext *)m;
-       int hlen = hash_digest_len(ctx->h);
-
-       uint8_t temp[hlen];
-       memcpy(temp, hash_final(ctx->h), hlen);
-
-       xor_block_const(ctx->key, ctx->key, 0x5C^0x36, ctx->m.key_len);
-       hash_begin(ctx->h);
-       hash_update(ctx->h, ctx->key, ctx->m.key_len);
-       hash_update(ctx->h, temp, hlen);
-
-       PURGE(temp);
-       return hash_final(ctx->h);
-}
-
-/*********************************************************************/
-
-void hmac_init(HmacContext *ctx, Hash *h)
-{
-       ctx->h = h;
-       ctx->m.key_len = hash_block_len(h);
-       ctx->m.digest_len = hash_digest_len(h);
-       ctx->m.set_key = hmac_set_key;
-       ctx->m.begin = hmac_begin;
-       ctx->m.update = hmac_update;
-       ctx->m.final = hmac_final;
-       ASSERT(sizeof(ctx->key) >= ctx->m.key_len);
-}
diff --git a/bertos/sec/mac/hmac.h b/bertos/sec/mac/hmac.h
deleted file mode 100644 (file)
index 8e0b357..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief HMAC (RFC 2104) implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_MAC_HMAC_H
-#define SEC_MAC_HMAC_H
-
-#include <sec/mac.h>
-#include <sec/hash.h>
-
-#include <alloca.h>
-
-typedef struct HmacContext
-{
-       Mac m;
-       Hash *h;
-       uint8_t key[64];
-} HmacContext;
-
-void hmac_init(HmacContext* hmac, Hash *h);
-
-#define hmac_stackinit(...) \
-       ({ HmacContext *ctx = alloca(sizeof(HmacContext)); hmac_init(ctx, ##__VA_ARGS__); &ctx->m; })
-
-int hmac_testSetup(void);
-int hmac_testRun(void);
-int hmac_testTearDown(void);
-
-#endif /* SEC_MAC_HMAC_H */
diff --git a/bertos/sec/mac/hmac_test.c b/bertos/sec/mac/hmac_test.c
deleted file mode 100644 (file)
index 1e89aae..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-
-#include "hmac.h"
-#include <cfg/test.h>
-#include <cfg/debug.h>
-#include <sec/hash/sha1.h>
-#include <sec/hash/md5.h>
-#include <string.h>
-
-int hmac_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int hmac_testTearDown(void)
-{
-       return 0;
-}
-
-struct Test_HMAC
-{
-       const char *key;
-       size_t key_len;
-       const char *data;
-       size_t data_len;
-       const char *digest;
-};
-
-const struct Test_HMAC tests_hmac_md5[] =
-{
-       {
-               "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 16,
-               "Hi There", 8,
-               "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
-       },
-       {
-               "Jefe", 4,
-               "what do ya want for nothing?", 28,
-               "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
-       },
-       {
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 16,
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50,
-               "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
-       },
-       {
-               "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
-               "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50,
-               "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea\x3a\x75\x16\x47\x46\xff\xaa\x79",
-       },
-       {
-               "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 16,
-               "Test With Truncation", 20,
-               "\x56\x46\x1e\xf2\x34\x2e\xdc\x00\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
-       },
-       {
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
-               "Test Using Larger Than Block-Size Key - Hash Key First", 54,
-               "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
-       },
-       {
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
-               "Test Using Larger Than Block-Size Key and Larger Than One "
-               "Block-Size Data", 73,
-               "\x6f\x63\x0f\xad\x67\xcd\xa0\xee\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
-       }
-};
-
-const struct Test_HMAC tests_hmac_sha1[] =
-{
-       {
-               "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20,
-               "Hi There", 8,
-               "\xb6\x17\x31\x86\x55\x05\x72\x64\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1\x46\xbe\x00",
-       },
-       {
-               "Jefe", 4,
-               "what do ya want for nothing?", 28,
-               "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
-       },
-       {
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20,
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
-               "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50,
-               "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
-       },
-       {
-               "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
-               "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50,
-               "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
-       },
-       {
-               "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20,
-               "Test With Truncation", 20,
-               "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
-       },
-       {
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
-               "Test Using Larger Than Block-Size Key - Hash Key First", 54,
-               "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
-       },
-       {
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-               "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
-               "Test Using Larger Than Block-Size Key and Larger "
-        "Than One Block-Size Data", 73,
-        "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
-   },
-};
-
-static void algo_run_tests(Mac *mac, const struct Test_HMAC *t, int count)
-{
-       for (int i=0; i<count; ++i, ++t)
-       {
-               mac_set_key(mac, (const uint8_t*)t->key, t->key_len);
-               mac_begin(mac);
-               mac_update(mac, (const uint8_t*)t->data, t->data_len);
-               ASSERT(memcmp(mac_final(mac), t->digest, mac_digest_len(mac)) == 0);
-       }
-}
-
-int hmac_testRun(void)
-{
-       algo_run_tests(hmac_stackinit(MD5_stackinit()),
-                                  tests_hmac_md5, countof(tests_hmac_md5));
-
-       algo_run_tests(hmac_stackinit(SHA1_stackinit()),
-                                  tests_hmac_sha1, countof(tests_hmac_sha1));
-
-       return 0;
-}
-
-TEST_MAIN(hmac);
diff --git a/bertos/sec/mac/omac.c b/bertos/sec/mac/omac.c
deleted file mode 100644 (file)
index 570c04b..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief OMAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- */
-
-#include "omac.h"
-#include <cfg/macros.h>
-#include <sec/util.h>
-
-static void omac_set_key(Mac *ctx_, const void* key, size_t len)
-{
-       OmacContext *ctx = (OmacContext *)ctx_;
-       cipher_set_vkey(ctx->c, key, len);
-}
-
-static void omac_begin(Mac *ctx_)
-{
-       OmacContext *ctx = (OmacContext *)ctx_;
-
-       ctx->acc = 0;
-
-       memset(ctx->Y, 0, cipher_block_len(ctx->c));
-       cipher_cbc_begin(ctx->c, ctx->Y);
-}
-
-static void omac_update(Mac *ctx_, const void *data_, size_t len)
-{
-       OmacContext *ctx = (OmacContext *)ctx_;
-       size_t blen = cipher_block_len(ctx->c);
-       const uint8_t *data = (const uint8_t *)data_;
-
-       while (len)
-       {
-               ASSERT(ctx->acc <= blen);
-               if (ctx->acc == blen)
-               {
-                       cipher_cbc_encrypt(ctx->c, ctx->accum);
-                       ctx->acc = 0;
-               }
-
-               size_t L = MIN(len, blen - ctx->acc);
-               memcpy(ctx->accum + ctx->acc, data, L);
-               data += L;
-               len -= L;
-               ctx->acc += L;
-       }
-}
-
-static void omac_shift_left(uint8_t *L, size_t len)
-{
-       int firstbit = L[0] >> 7;
-       size_t i;
-
-       for (i=0; i<len-1; ++i)
-               L[i] = (L[i] << 1) | (L[i+1] >> 7);
-       L[i] <<= 1;
-
-       if (firstbit)
-       {
-               if (len == 16)
-                       L[i] ^= 0x87;
-               else if (len == 8)
-                       L[i] ^= 0x1B;
-               else
-                       ASSERT(0);
-       }
-}
-
-static void omac_shift_right(uint8_t *L, size_t len)
-{
-       int firstbit = L[len-1] & 1;
-       size_t i;
-
-       for (i=len-1; i>0; --i)
-               L[i] = (L[i] >> 1) | (L[i-1] << 7);
-       L[i] >>= 1;
-
-       if (firstbit)
-       {
-               L[i] |= 0x80;
-               if (len == 16)
-                       L[len-1] ^= 0x43;
-               else if (len == 8)
-                       L[len-1] ^= 0x0D;
-               else
-                       ASSERT(0);
-       }
-}
-
-static uint8_t *omac1_final(Mac *ctx_)
-{
-       OmacContext *ctx = (OmacContext *)ctx_;
-       size_t blen = cipher_block_len(ctx->c);
-
-       uint8_t L[blen];
-       memset(L, 0, blen);
-       cipher_ecb_encrypt(ctx->c, L);
-
-       omac_shift_left(L, blen);
-       if (ctx->acc < blen)
-       {
-               ctx->accum[ctx->acc++] = 0x80;
-               memset(ctx->accum + ctx->acc, 0, blen - ctx->acc);
-               omac_shift_left(L, blen);
-       }
-
-       xor_block(ctx->accum, ctx->accum, L, blen);
-       cipher_cbc_encrypt(ctx->c, ctx->accum);
-       return ctx->accum;
-}
-
-static uint8_t *omac2_final(Mac *ctx_)
-{
-       OmacContext *ctx = (OmacContext *)ctx_;
-       size_t blen = cipher_block_len(ctx->c);
-
-       uint8_t L[blen];
-       memset(L, 0, blen);
-       cipher_ecb_encrypt(ctx->c, L);
-
-       if (ctx->acc < blen)
-       {
-               ctx->accum[ctx->acc++] = 0x80;
-               memset(ctx->accum + ctx->acc, 0, blen - ctx->acc);
-               omac_shift_right(L, blen);
-       }
-       else
-               omac_shift_left(L, blen);
-
-       xor_block(ctx->accum, ctx->accum, L, blen);
-       cipher_cbc_encrypt(ctx->c, ctx->accum);
-       return ctx->accum;
-}
-
-
-/****************************************************************************/
-
-static void omac_init(OmacContext *ctx, BlockCipher *c)
-{
-       ctx->mac.set_key = omac_set_key;
-       ctx->mac.begin = omac_begin;
-       ctx->mac.update = omac_update;
-       ctx->mac.key_len = cipher_key_len(c);
-       ctx->mac.digest_len = cipher_block_len(c);
-       ctx->c = c;
-
-       ASSERT(cipher_block_len(c) == 8 || cipher_block_len(c) == 16);
-       ASSERT(sizeof(ctx->Y) >= cipher_block_len(c));
-       ASSERT(sizeof(ctx->accum) >= cipher_block_len(c));
-}
-
-void omac1_init(OmacContext *ctx, BlockCipher *c)
-{
-       omac_init(ctx, c);
-       ctx->mac.final = omac1_final;
-}
-
-void omac2_init(OmacContext *ctx, BlockCipher *c)
-{
-       omac_init(ctx, c);
-       ctx->mac.final = omac2_final;
-}
diff --git a/bertos/sec/mac/omac.h b/bertos/sec/mac/omac.h
deleted file mode 100644 (file)
index a09d91a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief OMAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- */
-
-#ifndef SEC_MAC_OMAC_H
-#define SEC_MAC_OMAC_H
-
-#include <sec/mac.h>
-#include <sec/cipher.h>
-
-typedef struct OmacContext
-{
-       Mac mac;
-       BlockCipher *c;
-       uint8_t Y[16];
-       uint8_t accum[16];
-       uint8_t acc;
-} OmacContext;
-
-void omac1_init(OmacContext *ctx, BlockCipher *c);
-void omac2_init(OmacContext *ctx, BlockCipher *c);
-
-#define omac1_stackinit(...) \
-       ({ OmacContext *ctx = alloca(sizeof(OmacContext)); omac1_init(ctx, ##__VA_ARGS__); &ctx->mac; })
-#define omac2_stackinit(...) \
-       ({ OmacContext *ctx = alloca(sizeof(OmacContext)); omac2_init(ctx, ##__VA_ARGS__); &ctx->mac; })
-
-int omac_testSetup(void);
-int omac_testTearDown(void);
-int omac_testRun(void);
-
-#endif /* SEC_MAC_OMAC_H */
diff --git a/bertos/sec/mac/omac_test.c b/bertos/sec/mac/omac_test.c
deleted file mode 100644 (file)
index 40b81d7..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-
-#include <sec/mac/omac.h>
-#include <sec/cipher/aes.h>
-#include <cfg/test.h>
-#include <cfg/debug.h>
-#include <string.h>
-
-int omac_testSetup(void)
-{
-       kdbg_init();
-       return 0;
-}
-
-int omac_testTearDown(void)
-{
-       return 0;
-}
-
-struct OmacTest
-{
-       void *key;
-       size_t klen;
-       uint8_t *msg;
-       size_t mlen;
-       uint8_t digest[16*2];
-};
-
-static const struct OmacTest tests1_aes128[] =
-{
-       {
-               "2b7e151628aed2a6abf7158809cf4f3c", 16,
-               "", 0,
-               "bb1d6929e95937287fa37d129b756746",
-       },
-       {
-               "2b7e151628aed2a6abf7158809cf4f3c", 16,
-               "6bc1bee22e409f96e93d7e117393172a", 16,
-               "070a16b46b4d4144f79bdd9dd04a287c",
-       },
-       {
-               "2b7e151628aed2a6abf7158809cf4f3c", 16,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411e5fbc1191a0a52ef"
-               "f69f2445df4f9b17ad2b417be66c3710", 64,
-               "51f0bebf7e3b9d92fc49741779363cfe",
-       },
-};
-
-static const struct OmacTest tests1_aes192[] =
-{
-       {
-               "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
-               "", 0,
-               "d17ddf46adaacde531cac483de7a9367",
-       },
-       {
-               "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
-               "6bc1bee22e409f96e93d7e117393172a", 16,
-               "9e99a7bf31e710900662f65e617c5184",
-       },
-       {
-               "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411", 40,
-               "8a1de5be2eb31aad089a82e6ee908b0e",
-       },
-       {
-               "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411e5fbc1191a0a52ef"
-               "f69f2445df4f9b17ad2b417be66c3710", 64,
-               "a1d5df0eed790f794d77589659f39a11",
-       },
-};
-
-static const struct OmacTest tests1_aes256[] =
-{
-       {
-               "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
-               "", 0,
-               "028962f61b7bf89efc6b551f4667d983",
-       },
-       {
-               "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
-               "6bc1bee22e409f96e93d7e117393172a", 16,
-               "28a7023f452e8f82bd4bf28d8c37c35c",
-       },
-       {
-               "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411", 40,
-               "aaf3d8f1de5640c232f5b169b9c911e6",
-       },
-       {
-               "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411e5fbc1191a0a52ef"
-               "f69f2445df4f9b17ad2b417be66c3710", 64,
-               "e1992190549f6ed5696a2c056c315410",
-       },
-};
-
-static const struct OmacTest tests2_aes128[] =
-{
-       {
-               "2b7e151628aed2a6abf7158809cf4f3c", 16,
-               "", 0,
-               "f6bc6a41f4f84593809e59b719299cfe",
-       },
-       {
-               "2b7e151628aed2a6abf7158809cf4f3c", 16,
-               "6bc1bee22e409f96e93d7e117393172a", 16,
-               "070a16b46b4d4144f79bdd9dd04a287c",
-       },
-       {
-               "2b7e151628aed2a6abf7158809cf4f3c", 16,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411", 40,
-               "23fdaa0831cd314491ce4b25acb6023b",
-       },
-       {
-               "2b7e151628aed2a6abf7158809cf4f3c", 16,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411e5fbc1191a0a52ef"
-               "f69f2445df4f9b17ad2b417be66c3710", 64,
-               "51f0bebf7e3b9d92fc49741779363cfe",
-       },
-};
-
-static const struct OmacTest tests2_aes192[] =
-{
-       {
-               "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
-               "", 0,
-               "149f579df2129d45a69266898f55aeb2",
-       },
-       {
-               "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
-               "6bc1bee22e409f96e93d7e117393172a", 16,
-               "9e99a7bf31e710900662f65e617c5184",
-       },
-       {
-               "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411", 40,
-               "b35e2d1b73aed49b78bdbdfe61f646df",
-       },
-       {
-               "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411e5fbc1191a0a52ef"
-               "f69f2445df4f9b17ad2b417be66c3710", 64,
-               "a1d5df0eed790f794d77589659f39a11",
-       },
-};
-
-static const struct OmacTest tests2_aes256[] =
-{
-       {
-               "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
-               "", 0,
-               "47fbde71866eae6080355b5fc7ff704c",
-       },
-       {
-               "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
-               "6bc1bee22e409f96e93d7e117393172a", 16,
-               "28a7023f452e8f82bd4bf28d8c37c35c",
-       },
-       {
-               "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411", 40,
-               "f018e6053611b34bc872d6b7ff24749f",
-       },
-       {
-               "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
-               "6bc1bee22e409f96e93d7e117393172a"
-               "ae2d8a571e03ac9c9eb76fac45af8e51"
-               "30c81c46a35ce411e5fbc1191a0a52ef"
-               "f69f2445df4f9b17ad2b417be66c3710", 64,
-               "e1992190549f6ed5696a2c056c315410",
-       },
-};
-
-static void hexunlify(uint8_t *out, const uint8_t *in, size_t len)
-{
-       #define TO_DEC(x) ((x >= '0' && x <= '9') ? x-'0' : \
-                                          (x >= 'a' && x <= 'f') ? x-'a'+10 : \
-                                          (x >= 'A' && x <= 'F') ? x-'A'+10 : 0)
-       while (len--)
-       {
-               *out++ = TO_DEC(in[0])*16 + TO_DEC(in[1]);
-               in += 2;
-       }
-}
-
-static void runTest(Mac *m, const struct OmacTest *t, size_t num)
-{
-       for (size_t i=0; i<num; ++i, ++t)
-       {
-               uint8_t key[t->klen];
-               hexunlify(key, t->key, t->klen);
-
-               uint8_t msg[t->mlen];
-               hexunlify(msg, t->msg, t->mlen);
-
-               uint8_t digest[16];
-               hexunlify(digest, t->digest, 16);
-
-               mac_set_key(m, key, t->klen);
-               mac_begin(m);
-               mac_update(m, msg, t->mlen);
-               uint8_t *result = mac_final(m);
-
-               ASSERT(memcmp(result, digest, 16) == 0);
-       }
-}
-
-int omac_testRun(void)
-{
-       if (1)
-       {
-               Mac *m = omac1_stackinit(AES128_stackinit());
-               runTest(m, tests1_aes128, countof(tests1_aes128));
-       }
-
-       if (1)
-       {
-               Mac *m = omac1_stackinit(AES192_stackinit());
-               runTest(m, tests1_aes192, countof(tests1_aes192));
-       }
-
-       if (1)
-       {
-               Mac *m = omac1_stackinit(AES256_stackinit());
-               runTest(m, tests1_aes256, countof(tests1_aes256));
-       }
-
-       if (1)
-       {
-               Mac *m = omac2_stackinit(AES128_stackinit());
-               runTest(m, tests2_aes128, countof(tests2_aes128));
-       }
-
-       if (1)
-       {
-               Mac *m = omac2_stackinit(AES192_stackinit());
-               runTest(m, tests2_aes192, countof(tests2_aes192));
-       }
-
-       if (1)
-       {
-               Mac *m = omac2_stackinit(AES256_stackinit());
-               runTest(m, tests2_aes256, countof(tests2_aes256));
-       }
-
-       return 0;
-}
-
-TEST_MAIN(omac);
diff --git a/bertos/sec/prng.h b/bertos/sec/prng.h
deleted file mode 100644 (file)
index d0d21b4..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for cryptographically-secure pseudo-RNG
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_PRNG_H
-#define SEC_PRNG_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-typedef struct PRNG
-{
-    void (*reseed)(struct PRNG *ctx, const uint8_t *seed);
-    void (*generate)(struct PRNG *ctx, uint8_t *data, size_t len);
-    uint8_t seed_len;
-       uint8_t seeded;
-} PRNG;
-
-/**
- * Feed a new seed into the PRNG.
- *
- * \note: Being a cryptographically-secure PRNG, the seed will be
- * mixed to the current state of the generator, so it is NOT possible
- * to generate the same sequence simply by using the same seed. If you
- * need such a property, use a normale PRGN like \a rand().
- */
-INLINE void prng_reseed(PRNG *ctx, const uint8_t *seed)
-{
-    ASSERT(ctx->reseed);
-    ctx->reseed(ctx, seed);
-       ctx->seeded = 1;
-}
-
-/**
- * Get the length of the seed in bytes required by this generator.
- */
-INLINE size_t prng_seed_len(PRNG *ctx)
-{
-    return ctx->seed_len;
-}
-
-/**
- * Generate some cryptographically-secure random bytes into the specified
- * buffer.
- */
-INLINE void prng_generate(PRNG *ctx, uint8_t *data, size_t len)
-{
-    ASSERT(ctx->generate);
-       ASSERT(ctx->seeded);
-    ctx->generate(ctx, data, len);
-}
-
-
-#endif /* SEC_PRNG_H */
diff --git a/bertos/sec/prng/isaac.c b/bertos/sec/prng/isaac.c
deleted file mode 100644 (file)
index 86c1627..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ISAAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-/*
-------------------------------------------------------------------------------
-rand.c: By Bob Jenkins.  My random number generator, ISAAC.  Public Domain.
-MODIFIED:
-  960327: Creation (addition of randinit, really)
-  970719: use context, not global variables, for internal state
-  980324: added main (ifdef'ed out), also rearranged randinit()
-  010626: Note that this is public domain
-------------------------------------------------------------------------------
-*/
-
-#include "isaac.h"
-#include <sec/prng.h>
-#include <sec/util.h>
-#include <cfg/compiler.h>
-#include <cfg/macros.h>
-#include <string.h>
-
-typedef uint32_t ub4;
-typedef uint16_t ub2;
-typedef uint8_t ub1;
-
-#define ind(mm,x)  (*(ub4 *)((size_t)(mm) + ((x) & ((CONFIG_ISAAC_RANDSIZ-1)<<2))))
-#define rngstep(mix,a,b,mm,m,m2,r,x) \
-{ \
-  x = *m;  \
-  a = (a^(mix)) + *(m2++); \
-  *(m++) = y = ind(mm,x) + a + b; \
-  *(r++) = b = ind(mm,y>>CONFIG_ISAAC_RANDSIZL) + x; \
-}
-
-static void isaac(IsaacContext *ctx)
-{
-       register ub4 a,b,x,y,*m,*mm,*m2,*r,*mend;
-       mm=ctx->randmem; r=ctx->randrsl;
-       a = ctx->randa; b = ctx->randb + (++ctx->randc);
-       for (m = mm, mend = m2 = m+(CONFIG_ISAAC_RANDSIZ/2); m<mend; )
-       {
-               rngstep( a<<13, a, b, mm, m, m2, r, x);
-               rngstep( a>>6 , a, b, mm, m, m2, r, x);
-               rngstep( a<<2 , a, b, mm, m, m2, r, x);
-               rngstep( a>>16, a, b, mm, m, m2, r, x);
-       }
-       for (m2 = mm; m2<mend; )
-       {
-               rngstep( a<<13, a, b, mm, m, m2, r, x);
-               rngstep( a>>6 , a, b, mm, m, m2, r, x);
-               rngstep( a<<2 , a, b, mm, m, m2, r, x);
-               rngstep( a>>16, a, b, mm, m, m2, r, x);
-       }
-       ctx->randb = b; ctx->randa = a;
-}
-
-
-#define mix(a,b,c,d,e,f,g,h) \
-{ \
-   a^=b<<11; d+=a; b+=c; \
-   b^=c>>2;  e+=b; c+=d; \
-   c^=d<<8;  f+=c; d+=e; \
-   d^=e>>16; g+=d; e+=f; \
-   e^=f<<10; h+=e; f+=g; \
-   f^=g>>4;  a+=f; g+=h; \
-   g^=h<<8;  b+=g; h+=a; \
-   h^=a>>9;  c+=h; a+=b; \
-}
-
-static void isaac_reseed(PRNG *ctx_, const uint8_t *seed)
-{
-       IsaacContext *ctx = (IsaacContext *)ctx_;
-       int i;
-       ub4 a,b,c,d,e,f,g,h;
-       ub4 *m,*r;
-
-       // XOR the new seed over the current state, so to depend on
-       // the previously-generated output.
-       xor_block(ctx->randrsl, ctx->randrsl, seed, sizeof(ctx->randrsl));
-
-       ctx->randa = ctx->randb = ctx->randc = 0;
-       m=ctx->randmem;
-       r=ctx->randrsl;
-       a=b=c=d=e=f=g=h=0x9e3779b9;  /* the golden ratio */
-
-       for (i=0; i<4; ++i)          /* scramble it */
-       {
-               mix(a,b,c,d,e,f,g,h);
-       }
-
-       /* initialize using the contents of r[] as the seed */
-       for (i=0; i<CONFIG_ISAAC_RANDSIZ; i+=8)
-       {
-               a+=r[i  ]; b+=r[i+1]; c+=r[i+2]; d+=r[i+3];
-               e+=r[i+4]; f+=r[i+5]; g+=r[i+6]; h+=r[i+7];
-               mix(a,b,c,d,e,f,g,h);
-               m[i  ]=a; m[i+1]=b; m[i+2]=c; m[i+3]=d;
-               m[i+4]=e; m[i+5]=f; m[i+6]=g; m[i+7]=h;
-       }
-       /* do a second pass to make all of the seed affect all of m */
-       for (i=0; i<CONFIG_ISAAC_RANDSIZ; i+=8)
-       {
-               a+=m[i  ]; b+=m[i+1]; c+=m[i+2]; d+=m[i+3];
-               e+=m[i+4]; f+=m[i+5]; g+=m[i+6]; h+=m[i+7];
-               mix(a,b,c,d,e,f,g,h);
-               m[i  ]=a; m[i+1]=b; m[i+2]=c; m[i+3]=d;
-               m[i+4]=e; m[i+5]=f; m[i+6]=g; m[i+7]=h;
-       }
-}
-
-static void isaac_generate(PRNG *ctx_, uint8_t *data, size_t len)
-{
-       IsaacContext *ctx = (IsaacContext *)ctx_;
-
-       STATIC_ASSERT(sizeof(ctx->randrsl) == CONFIG_ISAAC_RANDSIZ*4);
-
-       while (len)
-       {
-               ASSERT(ctx->randcnt <= CONFIG_ISAAC_RANDSIZ*4);
-
-               if (ctx->randcnt == CONFIG_ISAAC_RANDSIZ*4)
-               {
-                       isaac(ctx);
-                       ctx->randcnt = 0;
-               }
-
-               size_t L = MIN(len, CONFIG_ISAAC_RANDSIZ*4 - (size_t)ctx->randcnt);
-               memcpy(data, (uint8_t*)ctx->randrsl + ctx->randcnt, L);
-               data += L;
-               ctx->randcnt += L;
-               len -= L;
-       }
-}
-
-
-/**********************************************************************/
-
-void isaac_init(IsaacContext *ctx)
-{
-       ctx->prng.reseed = isaac_reseed;
-       ctx->prng.generate = isaac_generate;
-       ctx->prng.seed_len = sizeof(ctx->randrsl);
-       ctx->prng.seeded = 0;
-
-       ctx->randcnt = CONFIG_ISAAC_RANDSIZ*4;
-       memset(ctx->randrsl, 0, sizeof(ctx->randrsl));
-}
-
-
-
-
-#ifdef NEVER
-int main()
-{
-  ub4 i,j;
-  randctx ctx;
-  ctx.randa=ctx.randb=ctx.randc=(ub4)0;
-  for (i=0; i<256; ++i) ctx.randrsl[i]=(ub4)0;
-  randinit(&ctx, TRUE);
-  for (i=0; i<2; ++i)
-  {
-    isaac(&ctx);
-    for (j=0; j<256; ++j)
-    {
-      printf("%.8lx",ctx.randrsl[j]);
-      if ((j&7)==7) printf("\n");
-    }
-  }
-}
-#endif
diff --git a/bertos/sec/prng/isaac.h b/bertos/sec/prng/isaac.h
deleted file mode 100644 (file)
index 8be03c1..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ISAAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_PRNG_ISAAC_H
-#define SEC_PRNG_ISAAC_H
-
-#include <sec/prng.h>
-
-/**
- * Size of the internal ISAAC state (in 32-bit words).
- *
- * ISAAC is known to generate unbiased data as follows:
- *   * 3 words: 2^37 unbiased values
- *   * 4 words: 2^45 unbiased values
- *   * 5 words: 2^53 unbiased values
- *   * 6 words: 2^61 unbiased values
- *   * 7 words: 2^69 unbiased values
- *   * 8 words: 2^77 unbiased values
- *
- * The period of the generator is usually much longer, but it is
- * obviously uninteresting for a CSPRNG.
- */
-#define CONFIG_ISAAC_RANDSIZL   (3)
-#define CONFIG_ISAAC_RANDSIZ    (1<<(CONFIG_ISAAC_RANDSIZL))
-
-typedef struct IsaacContext
-{
-       PRNG prng;
-       uint32_t randcnt;
-       uint32_t randrsl[CONFIG_ISAAC_RANDSIZ];
-       uint32_t randmem[CONFIG_ISAAC_RANDSIZ];
-       uint32_t randa;
-       uint32_t randb;
-       uint32_t randc;
-} IsaacContext;
-
-void isaac_init(IsaacContext *ctx);
-
-#define isaac_stackinit(...) \
-       ({ IsaacContext *ctx = alloca(sizeof(IsaacContext)); isaac_init(ctx , ##__VA_ARGS__); &ctx->prng; })
-
-
-#endif /* SEC_PRNG_ISAAC_H */
diff --git a/bertos/sec/prng/x917.c b/bertos/sec/prng/x917.c
deleted file mode 100644 (file)
index 4111aa2..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ANSI X9.17 PRNG implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * notest:avr
- */
-
-#include "x917.h"
-#include <sec/util.h>
-#include <drv/timer.h>
-#include "hw/hw_timer.h"
-
-static void x917_next(X917Context *ctx, BlockCipher *cipher, uint8_t *out)
-{
-       const size_t blen = cipher_block_len(cipher);
-
-       struct
-       {
-               time_t t0;
-               hptime_t t1;
-               uint8_t padding[blen - sizeof(time_t) - sizeof(hptime_t)];
-       } DT;
-
-       ASSERT(sizeof(DT) == blen);
-
-       memset(&DT, 0, sizeof(DT));
-       DT.t0 = timer_clock();
-       DT.t1 = timer_hw_hpread();
-
-       cipher_ecb_encrypt(cipher, &DT);
-
-       xor_block(out, (uint8_t*)&DT, ctx->state, blen);
-       cipher_ecb_encrypt(cipher, out);
-
-       xor_block(ctx->state, (uint8_t*)&DT, out, blen);
-       cipher_ecb_encrypt(cipher, ctx->state);
-
-       PURGE(DT);
-}
-
-
-static void x917_generate(PRNG *ctx_, uint8_t *data, size_t len)
-{
-       X917Context *ctx = (X917Context *)ctx_;
-       BlockCipher *cipher = AES128_stackinit();
-
-       const size_t blen = cipher_block_len(cipher);
-       uint8_t temp[blen];
-
-       ASSERT(len);
-       ASSERT(sizeof(ctx->state) >= blen);
-       ASSERT(sizeof(ctx->key) >= cipher_key_len(cipher));
-
-       cipher_set_key(cipher, ctx->key);
-
-       while (len)
-       {
-               size_t L = MIN(blen, len);
-               x917_next(ctx, cipher, temp);
-               memcpy(data, temp, L);
-               len -= L;
-               data += L;
-       }
-}
-
-static void x917_reseed(PRNG *ctx_, const uint8_t *seed)
-{
-       // The X9.17 standard does not specify reseeding. To avoid external
-       // dependencies, we implement it this way:
-       //   * Generate a new random block, xor it with the first part
-       //     of the seed, and use the result as new seed.
-       //   * Generate and throw away a block to update the state.
-       X917Context *ctx = (X917Context *)ctx_;
-       const size_t klen = sizeof(ctx->key);
-       const size_t blen = sizeof(ctx->state);
-
-       if (!ctx->rng.seeded)
-       {
-               memcpy(ctx->key, seed, klen);
-               memcpy(ctx->state, seed+klen, blen);
-       }
-       else
-       {
-               uint8_t buf[klen];
-               x917_generate(ctx_, buf, klen);
-
-               xor_block(ctx->key, buf, seed, klen);
-               xor_block(ctx->state, ctx->state, seed+klen, blen);
-
-               PURGE(buf);
-       }
-}
-
-/*********************************************************************/
-
-void x917_init(X917Context *ctx)
-{
-       ctx->rng.reseed = x917_reseed;
-       ctx->rng.generate = x917_generate;
-       ctx->rng.seed_len = sizeof(ctx->key) + sizeof(ctx->state);
-       ctx->rng.seeded = 0;
-}
diff --git a/bertos/sec/prng/x917.h b/bertos/sec/prng/x917.h
deleted file mode 100644 (file)
index a5cc94d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ANSI X9.17 PRNG implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_PRNG_X917_H
-#define SEC_PRNG_X917_H
-
-#include <sec/prng.h>
-#include <sec/cipher/aes.h>
-
-typedef struct X917Context
-{
-       PRNG rng;
-       uint8_t key[16];
-       uint8_t state[16];
-
-} X917Context;
-
-void x917_init(X917Context *ctx);
-
-#define x917_stackinit(...) \
-       ({ X917Context *ctx = alloca(sizeof(X917Context)); x917_init(ctx, ##__VA_ARGS__); &ctx->rng; })
-
-
-#endif /* SEC_CSPRNG_X917_H */
diff --git a/bertos/sec/prng/yarrow.c b/bertos/sec/prng/yarrow.c
deleted file mode 100644 (file)
index 3d9469f..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Yarrow implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "yarrow.h"
-#include <sec/hash/sha1.h>
-#include <cfg/macros.h>
-#include <string.h>
-
-#define CONFIG_YARROW_GENERATOR_GATE             10
-
-static void yarrow_generate(PRNG *ctx_, uint8_t *data, size_t len)
-{
-       YarrowContext *ctx = (YarrowContext *)ctx_;
-       BlockCipher *cipher = 0;
-
-       ASSERT(len != 0);
-
-       do
-       {
-               if (ctx->lastidx == sizeof(ctx->last))
-               {
-                       if (!cipher)
-                       {
-                               cipher = AES128_stackinit();
-                               ASSERT(sizeof(ctx->counter) == cipher_block_len(cipher));
-                               ASSERT(sizeof(ctx->curkey) == cipher_key_len(cipher));
-
-                               cipher_set_key(cipher, ctx->curkey);
-                               cipher_ctr_begin(cipher, ctx->counter);
-                       }
-
-                       cipher_ctr_step(cipher, ctx->last);
-
-                       if (ctx->curkey_gencount == CONFIG_YARROW_GENERATOR_GATE)
-                       {
-                               ASSERT(cipher_block_len(cipher) == cipher_key_len(cipher));
-                               cipher_set_key(cipher, ctx->last);
-                               ctx->curkey_gencount = 0;
-                               continue;
-                       }
-
-                       ctx->lastidx = 0;
-                       ctx->curkey_gencount++;
-               }
-
-               int n = MIN(len, 16U-ctx->lastidx);
-               memcpy(data, ctx->last+ctx->lastidx, n);
-               data += n;
-               len -= n;
-               ctx->lastidx += n;
-       } while (len);
-}
-
-static void yarrow_reseed(PRNG *ctx_, const uint8_t *seed)
-{
-       YarrowContext *ctx = (YarrowContext *)ctx_;
-       Hash *h = SHA1_stackinit();
-
-       hash_begin(h);
-       hash_update(h, seed, ctx->prng.seed_len);
-       hash_update(h, ctx->curkey, sizeof(ctx->curkey));
-       memcpy(ctx->curkey, hash_final(h), sizeof(ctx->curkey));
-
-       // Reset the counter for the sequence
-       memset(ctx->counter, 0, sizeof(ctx->counter));
-}
-
-
-/*********************************************************************/
-
-void yarrow_init(YarrowContext *ctx)
-{
-       ctx->prng.reseed = yarrow_reseed;
-       ctx->prng.generate = yarrow_generate;
-       ctx->prng.seed_len = 16;
-       ctx->prng.seeded = 0;
-
-       ctx->lastidx = sizeof(ctx->last);
-       ctx->curkey_gencount = 0;
-       memset(ctx->curkey, 0, sizeof(ctx->curkey));
-
-       ASSERT(sizeof(ctx->counter) == sizeof(ctx->last));
-}
diff --git a/bertos/sec/prng/yarrow.h b/bertos/sec/prng/yarrow.h
deleted file mode 100644 (file)
index 556d573..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Yarrow implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_PRNG_YARROW_H
-#define SEC_PRNG_YARROW_H
-
-#include <sec/prng.h>
-#include <sec/cipher/aes.h>
-
-typedef struct YarrowContext
-{
-       PRNG prng;
-
-       uint8_t counter[16];
-       uint8_t curkey[16];
-       uint8_t last[16];
-       uint8_t curkey_gencount;
-       uint8_t lastidx;
-} YarrowContext;
-
-void yarrow_init(YarrowContext *ctx);
-
-#define yarrow_stackinit(...) \
-       ({ YarrowContext *ctx = alloca(sizeof(YarrowContext)); yarrow_init(ctx, ##__VA_ARGS__); &ctx->prng; })
-
-#endif /* SEC_PRNG_YARROW_H */
diff --git a/bertos/sec/random.c b/bertos/sec/random.c
deleted file mode 100644 (file)
index 67c2485..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief High-level random number generation functions.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "random.h"
-#include "random_p.h"
-
-#include <cfg/macros.h>
-#include <drv/timer.h>
-#include <sec/random.h>
-#include <sec/prng.h>
-#include <sec/entropy.h>
-#include <sec/util.h>
-#include <sec/hash/sha1.h>
-#include <sec/prng/isaac.h>
-#include <sec/prng/x917.h>
-#include <sec/prng/yarrow.h>
-#include <sec/entropy/yarrow_pool.h>
-
-/********************************************************************************/
-/* Configuration of the random module                                           */
-/********************************************************************************/
-
-#define POOL_CONTEXT          PP_CAT(PP_CAT(POOL_NAMEU, CONFIG_RANDOM_POOL), Context)
-#define POOL_INIT             PP_CAT(PP_CAT(POOL_NAMEL, CONFIG_RANDOM_POOL), _init)
-
-#define EXTRACTOR_STACKINIT   PP_CAT(PP_CAT(EXTRACTOR_NAME, CONFIG_RANDOM_EXTRACTOR), _stackinit)
-
-#define PRNG_CONTEXT          PP_CAT(PP_CAT(PRNG_NAMEU, CONFIG_RANDOM_PRNG), Context)
-#define PRNG_INIT             PP_CAT(PP_CAT(PRNG_NAMEL, CONFIG_RANDOM_PRNG), _init)
-
-
-/********************************************************************************/
-/* Global state                                                                 */
-/********************************************************************************/
-
-#if CONFIG_RANDOM_POOL != POOL_NONE
-static POOL_CONTEXT epool_ctx;
-static EntropyPool * const epool = (EntropyPool *)&epool_ctx;
-#endif
-
-static PRNG_CONTEXT prng_ctx;
-static PRNG * const prng = (PRNG*)&prng_ctx;
-
-static bool initialized = 0;
-
-
-/********************************************************************************/
-/* Code                                                                         */
-/********************************************************************************/
-
-/*
- * Reseed the PRNG if there is enough entropy available at this time.
- *
- * Some designs (eg: fortuna) suggest to artificially limit the frequency of
- * this operation to something like 0.1s, to avoid attacks that try to exhaust
- * the entropy pool.
- *
- * We don't believe such attacks are available in an embedded system (as an attacker
- * does not have a way to ask random numbers from the pool) but we will play safe
- * here in case eg. the user does something wrong.
- */
-static void optional_reseeding(void)
-{
-#if CONFIG_RANDOM_POOL != POOL_NONE
-       static ticks_t last_reseed = -1000;
-
-       // We don't allow more than 10 reseedings per second
-       // (as suggested by Fortuna)
-       ticks_t current = timer_clock();
-       if (ticks_to_ms(current - last_reseed) < 100)
-               return;
-
-       if (entropy_seeding_ready(epool))
-       {
-               uint8_t seed[prng_seed_len(prng)];
-
-               entropy_make_seed(epool, seed, sizeof(seed));
-               prng_reseed(prng, seed);
-
-               last_reseed = current;
-               PURGE(seed);
-       }
-#endif
-}
-
-
-/*
- * Perform the initial seeding of the PRNG.
- *
- * At startup, we want to immediately seed the PRNG to a point where it can
- * generate safe-enough random numbers. To do this, we rely on a hw-dependent
- * function to pull entropy from available hw sources, and then feed it
- * through an extractor (if any is configured).
- */
-static void initial_seeding(void)
-{
-#if CONFIG_RANDOM_POOL != POOL_NONE
-
-       // We feed entropy into the pool, until it is ready to perform a seeding.
-       do
-       {
-               uint8_t buf[16];
-               random_pull_entropy(buf, sizeof(buf));
-               entropy_add(epool, 0, buf, sizeof(buf), sizeof(buf)*8);
-       } while (!entropy_seeding_ready(epool));
-
-       optional_reseeding();
-
-#elif CONFIG_RANDOM_EXTRACTOR != EXTRACTOR_NONE
-
-       uint8_t seed[prng_seed_len(prng)];
-       Hash *h = EXTRACTOR_STACKINIT();
-
-       // "Randomness Extraction and Key Derivation Using the CBC, Cascade and
-       // HMAC Modes" by Yevgeniy Dodis et al. suggests that an padded cascaded hash
-       // function with N bits of output must have at least 2n bits of min-entropy as input
-       // to be a randomness extractor (it generates an output that is computationally
-       // indistiguishable from an uniform distribution).
-       size_t hlen = hash_digest_len(h);
-       uint8_t buf[hlen*2];
-       size_t sidx = 0;
-
-       while (sidx < sizeof(seed))
-       {
-               size_t cnt = MIN(sizeof(seed) - sidx, hlen);
-
-               random_pull_entropy(buf, sizeof(buf));
-
-               hash_begin(h);
-               hash_update(h, buf, sizeof(buf));
-               memcpy(seed+sidx, hash_final(h), cnt);
-               sidx += cnt;
-       }
-
-       prng_reseed(prng, seed);
-       PURGE(buf);
-       PURGE(seed);
-
-#else
-
-       // If we have been configured without a proper randomness extractor, we do not
-       // have many solutions but feeding the entropy bits directly to the PRNG, and
-       // hoping for the best.
-       uint8_t seed[prng_seed_len(prng)];
-       random_pull_entropy(seed, sizeof(seed));
-       prng_reseed(prng, seed);
-       PURGE(seed);
-
-#endif
-}
-
-void random_init(void)
-{
-#if CONFIG_RANDOM_POOL != POOL_NONE
-       POOL_INIT(&epool_ctx);
-#endif
-       PRNG_INIT(&prng_ctx);
-
-       initialized = 1;
-       initial_seeding();
-}
-
-void random_gen(uint8_t *out, size_t len)
-{
-       ASSERT(initialized);
-
-       optional_reseeding();
-       prng_generate(prng, out, len);
-}
-
-#if CONFIG_RANDOM_POOL != POOL_NONE
-
-void random_add_entropy(enum EntropySource source_idx,
-                        const uint8_t *data, size_t len,
-                        int entropy)
-{
-       entropy_add(epool, source_idx, data, len, entropy);
-}
-
-#endif
diff --git a/bertos/sec/random.h b/bertos/sec/random.h
deleted file mode 100644 (file)
index 3ccc17b..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief High-level random number generation functions.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "random"
- * $WIZ$ module_configuration = "bertos/cfg/cfg_random.h"
- * $WIZ$ module_depends = "isaac", "cipher", "sha1", "yarrow", "yarrow_pool", "x917", "aes"
- * $WIZ$ module_supports = "stm32 or lm3s"
- */
-
-#ifndef SEC_RANDOM_H
-#define SEC_RANDOM_H
-
-#include "cfg/cfg_random.h"
-#include <cfg/compiler.h>
-
-/**
- * \name Security level definition
- *
- *
- * Configure the security level required by the application.
- *
- * Application developers are suggested to keep the strongest
- * setting (default) unless there are memory or code size issues.
- *
- * Available settings are:
- *
- *   * \a RANDOM_SECURITY_STRONG: The random library will use
- *     an entropy pool, automatically feeded by drivers, to gather
- *     entropy from hardware sources. Data from the pool will
- *     be used to reseed a secure random number generator. Moreover,
- *     the generator will be automatically initialised
- *     with enough entropy to generate safe random numbers even
- *     immediately after hw reset.
- *     The overall structure is the same as used by modern
- *        desktop PCs for generating secure random numbers.
- *
- *  * \a RANDOM_SECURITY_MEDIUM: This intermediate settings will
- *     avoid usage of an entropy pool, to reduce memory and code
- *     usage. The security of this settings relies only on the
- *     good behaviour of the random number generator (even though
- *     it will be well-seeded at startup).
- *
- *  * \a RANDOM_SECURITY_MINIMUM: This is the lighter setting that
- *     allows minimal memory and code usage, and it suggested only
- *     for extremely constrained systems, that only generates few
- *     random numbers. Even if the generator is still secure on
- *     paper, its seeding will not be safe (though still entropic
- *     to allow different sequences to be generated after each reset).
- *
- * $WIZ$ random_level = "RANDOM_SECURITY_MINIMUM", "RANDOM_SECURITY_MEDIUM", "RANDOM_SECURITY_STRONG"
- * \{
- */
-#define RANDOM_SECURITY_MINIMUM        0
-#define RANDOM_SECURITY_MEDIUM         1
-#define RANDOM_SECURITY_STRONG         2
-/** \} */
-
-void random_init(void);
-
-void random_gen(uint8_t *out, size_t len);
-
-INLINE uint8_t random_gen8(void)
-{
-       uint8_t x;
-       random_gen(&x, 1);
-       return x;
-}
-
-INLINE uint16_t random_gen16(void)
-{
-       uint8_t x;
-       random_gen(&x, 2);
-       return x;
-}
-
-INLINE uint32_t random_gen32(void)
-{
-       uint8_t x;
-       random_gen(&x, 4);
-       return x;
-}
-
-#endif /* SEC_RANDOM_H */
diff --git a/bertos/sec/random_p.h b/bertos/sec/random_p.h
deleted file mode 100644 (file)
index 990925f..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Internal function definitions for random
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_RANDOM_P_H
-#define SEC_RANDOM_P_H
-
-#include <cfg/compiler.h>
-#include <sec/random.h>
-
-/********************************************************************************/
-/* Configuration of the random module                                           */
-/********************************************************************************/
-
-#define POOL_NONE       0
-#define POOL_YARROW     1
-#define POOL_NAMEU1     YarrowPool
-#define POOL_NAMEL1     yarrowpool
-
-#define PRNG_ISAAC      1
-#define PRNG_X917       2
-#define PRNG_YARROW     3
-#define PRNG_NAMEU1     Isaac
-#define PRNG_NAMEL1     isaac
-#define PRNG_NAMEU2     X917
-#define PRNG_NAMEL2     x917
-#define PRNG_NAMEU3     Yarrow
-#define PRNG_NAMEL3     yarrow
-
-#define EXTRACTOR_NONE  0
-#define EXTRACTOR_SHA1  1
-#define EXTRACTOR_NAME1 SHA1
-
-#if RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_STRONG
-       #define CONFIG_RANDOM_POOL          POOL_YARROW
-       #define CONFIG_RANDOM_EXTRACTOR     EXTRACTOR_NONE   // not required with a pool
-       #define CONFIG_RANDOM_PRNG          PRNG_YARROW
-#elif RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_MEDIUM
-       #define CONFIG_RANDOM_POOL          POOL_NONE
-       #define CONFIG_RANDOM_EXTRACTOR     EXTRACTOR_SHA1
-       #define CONFIG_RANDOM_PRNG          PRNG_X917
-#elif RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_MINIMUM
-       #define CONFIG_RANDOM_POOL          POOL_NONE
-       #define CONFIG_RANDOM_EXTRACTOR     EXTRACTOR_NONE
-       #define CONFIG_RANDOM_PRNG          PRNG_ISAAC
-#else
-       #error Unsupported random security level value
-#endif
-
-/***************************************************************************/
-/* Internal functions used by BeRTOS drivers to push data into             */
-/* the entropy pool                                                        */
-/***************************************************************************/
-
-#if CONFIG_RANDOM_POOL != POOL_NONE
-
-enum EntropySource
-{
-       ENTROPY_SOURCE_IRQ,
-       ENTROPY_SOURCE_ADC,
-};
-
-/*
- * Add entropy to the global entropy pool.
- */
-void random_add_entropy(enum EntropySource source_idx,
-                                           const uint8_t *data, size_t len,
-                                               int entropy);
-
-
-/*
- * Add entropy to the global interrupt pool based on the IRQ
- * call time.
- *
- * This function can be called from interrupt handlers that are
- * triggered at unpredictable intervals (so it should not be
- * called from clock-driven interrupts like ADC, PWM, etc.).
- *
- */
-void random_add_entropy_irq(int irq);
-
-#endif
-
-/*
- * This hardware-dependent function can be used to pull raw
- * entropy from a hardware source at startup only. It is used
- * for initial seeding of the random generator and should not
- * be used in different situations.
- */
-void random_pull_entropy(uint8_t *entropy, size_t len);
-
-#endif /* SEC_RANDOM_P_H */
diff --git a/bertos/sec/util.c b/bertos/sec/util.c
deleted file mode 100644 (file)
index 7af6cdb..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic utilities.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "util.h"
-#include <sec/kdf/pbkdf2.h>
-#include <sec/mac/hmac.h>
-#include <sec/hash/sha1.h>
-
-// FIXME: this macros should be generated by the wizard
-#define BERTOS_PROJECT_NAME   "bertos_project"
-
-#define SALT   (BERTOS_PROJECT_NAME "P2K_SALT")
-
-void password2key(const char *pwd, size_t pwd_len,
-                                 uint8_t *key, size_t key_len)
-{
-       Kdf *kdf = PBKDF2_stackinit(hmac_stackinit(SHA1_stackinit()));
-
-       kdf_begin(kdf, pwd, pwd_len, (uint8_t*)SALT, sizeof(SALT));
-       kdf_read(kdf, key, key_len);
-
-       // FIXME: how to purge the stack?
-}
diff --git a/bertos/sec/util.h b/bertos/sec/util.h
deleted file mode 100644 (file)
index 2fcf1b8..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-#ifndef SEC_UTIL_H
-#define SEC_UTIL_H
-
-#include <cfg/macros.h>
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-#include <string.h>
-
-/**
- * Purge local variables, by zeroing them.
- *
- * This can be used to clear stack from intermediate results in crypto
- * calculations that might somehow be leaked.
- */
-#define PURGE(x) \
-       memset(&x, 0, sizeof(x))
-
-/**
- * Convert a generic "password" (low-diffused) to a generic "key"
- * (high-diffused).
- *
- * In common terminology, a "password" is a key with weak cryptographic
- * characteristics, such as commonly used password input by an user,
- * which are usually short and use only a few different characters from
- * the 0-255 byte range.
- *
- * This function derives a strong key from the password using a one-way
- * process.
- *
- * \note Uses PBKDF2 as key-derivation function, with a fixed salt that
- * changes for each Bertos project.
- */
-void password2key(const char *pwd, size_t pwd_len,
-                                 uint8_t *key, size_t key_len);
-
-INLINE void xor_block_8(uint8_t *out,
-               const uint8_t *in1, const uint8_t *in2, size_t len)
-{
-       while (len--)
-                *out++ = *in1++ ^ *in2++;
-}
-
-INLINE void xor_block_const_8(uint8_t *out,
-                       const uint8_t *in, uint8_t k, size_t len)
-{
-       while (len--)
-                *out++ = *in++ ^ k;
-}
-
-INLINE void xor_block_32(uint32_t *out, const uint32_t *in1,
-                               const uint32_t *in2, size_t len)
-{
-       size_t rem = (len & (sizeof(uint32_t) - 1));
-
-       len /= sizeof(uint32_t);
-       while (len--)
-               *out++ = *in1++ ^ *in2++;
-       xor_block_8((uint8_t *)out,
-               (const uint8_t *)in1, (const uint8_t *)in2, rem);
-}
-
-INLINE void xor_block_const_32(uint32_t *out, const uint32_t *in,
-                                       uint8_t k, size_t len)
-{
-       uint32_t k32 = k | ((uint32_t)k << 8) |
-                       ((uint32_t)k << 16) | ((uint32_t)k << 24);
-       size_t rem = (len & (sizeof(uint32_t) - 1));
-
-       len /= sizeof(uint32_t);
-       while (len--)
-               *out++ = *in++ ^ k32;
-       xor_block_const_8((uint8_t *)out, (const uint8_t *)in, k, rem);
-}
-
-/**
- * Perform a bitwise xor between \a in and \a inout, and store
- * the result into \a inout.
- */
-INLINE void xor_block(void *out, const void *in1, const void *in2, size_t len)
-{
-       if (is_aligned(out, sizeof(uint32_t)) &&
-                       is_aligned(in1, sizeof(uint32_t)) &&
-                       is_aligned(in2, sizeof(uint32_t)))
-       {
-               uint32_t *obuf = (uint32_t *)((size_t)out);
-               const uint32_t *ibuf1 = (const uint32_t *)((size_t)in1);
-               const uint32_t *ibuf2 = (const uint32_t *)((size_t)in2);
-
-               xor_block_32(obuf, ibuf1, ibuf2, len);
-       }
-       else
-       {
-               uint8_t *obuf = (uint8_t *)((size_t)out);
-               const uint8_t *ibuf1 = (const uint8_t *)((size_t)in1);
-               const uint8_t *ibuf2 = (const uint8_t *)((size_t)in2);
-
-               xor_block_8(obuf, ibuf1, ibuf2, len);
-       }
-}
-
-/**
- * Perform a bitwise xor over \a inout with constant \a k.
- */
-INLINE void xor_block_const(uint8_t *out, const uint8_t *in, uint8_t k, size_t len)
-{
-       if (is_aligned(out, sizeof(uint32_t)) &&
-                       is_aligned(in, sizeof(uint32_t)))
-       {
-               uint32_t *obuf = (uint32_t *)((size_t)out);
-               const uint32_t *ibuf = (const uint32_t *)((size_t)in);
-
-               xor_block_const_32(obuf, ibuf, k, len);
-       }
-       else
-       {
-               uint8_t *obuf = (uint8_t *)((size_t)out);
-               const uint8_t *ibuf = (const uint8_t *)((size_t)in);
-
-               xor_block_const_8(obuf, ibuf, k, len);
-       }
-}
-
-#endif /* SEC_UTIL_H */