Перейти к содержанию
    

 

3 часа назад, _pv сказал:

не совсем верилог, но тут не принципиально, если памяти особо не жалко и не требуется очень уж большая точность, то урезать разрядность и запихать всё в таблицу вполне себе вариант:

при округлении аргументов до 6 бит, ошибка по углу вроде уже лучше 8бит получается.

 


#include <stdint.h>
/*
static const uint8_t atan_table[32][32] = {
  {0x20, 0x1f, 0x1d, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10, 0x0e, 0x0c, 0x09, 0x07, 0x04, 0x01, 0xff, 0xfc, 0xf9, 0xf7, 0xf4, 0xf2, 0xf0, 0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe3, 0xe1, 0xe0},
  {0x21, 0x20, 0x1f, 0x1d, 0x1b, 0x1a, 0x18, 0x16, 0x13, 0x11, 0x0f, 0x0c, 0x0a, 0x07, 0x04, 0x01, 0xff, 0xfc, 0xf9, 0xf6, 0xf4, 0xf1, 0xef, 0xed, 0xea, 0xe8, 0xe6, 0xe5, 0xe3, 0xe1, 0xe0, 0xdf},
  {0x23, 0x21, 0x20, 0x1e, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x12, 0x10, 0x0d, 0x0a, 0x07, 0x05, 0x02, 0xfe, 0xfb, 0xf9, 0xf6, 0xf3, 0xf0, 0xee, 0xeb, 0xe9, 0xe7, 0xe5, 0xe3, 0xe2, 0xe0, 0xdf, 0xdd},
  {0x24, 0x23, 0x22, 0x20, 0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x11, 0x0e, 0x0b, 0x08, 0x05, 0x02, 0xfe, 0xfb, 0xf8, 0xf5, 0xf2, 0xef, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, 0xde, 0xdd, 0xdc},
  {0x26, 0x25, 0x23, 0x22, 0x20, 0x1e, 0x1c, 0x1a, 0x18, 0x15, 0x12, 0x0f, 0x0c, 0x09, 0x05, 0x02, 0xfe, 0xfb, 0xf7, 0xf4, 0xf1, 0xee, 0xeb, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, 0xde, 0xdd, 0xdb, 0xda},
  {0x28, 0x26, 0x25, 0x24, 0x22, 0x20, 0x1e, 0x1c, 0x19, 0x17, 0x14, 0x10, 0x0d, 0x0a, 0x06, 0x02, 0xfe, 0xfa, 0xf6, 0xf3, 0xf0, 0xec, 0xe9, 0xe7, 0xe4, 0xe2, 0xe0, 0xde, 0xdc, 0xdb, 0xda, 0xd8},
  {0x2a, 0x28, 0x27, 0x26, 0x24, 0x22, 0x20, 0x1e, 0x1b, 0x18, 0x15, 0x12, 0x0e, 0x0a, 0x06, 0x02, 0xfe, 0xfa, 0xf6, 0xf2, 0xee, 0xeb, 0xe8, 0xe5, 0xe2, 0xe0, 0xde, 0xdc, 0xda, 0xd9, 0xd8, 0xd6},
  {0x2c, 0x2a, 0x29, 0x28, 0x26, 0x24, 0x22, 0x20, 0x1d, 0x1b, 0x17, 0x14, 0x10, 0x0c, 0x07, 0x02, 0xfe, 0xf9, 0xf4, 0xf0, 0xec, 0xe9, 0xe5, 0xe3, 0xe0, 0xde, 0xdc, 0xda, 0xd8, 0xd7, 0xd6, 0xd4},
  {0x2e, 0x2d, 0x2b, 0x2a, 0x28, 0x27, 0x25, 0x23, 0x20, 0x1d, 0x1a, 0x16, 0x12, 0x0d, 0x08, 0x03, 0xfd, 0xf8, 0xf3, 0xee, 0xea, 0xe6, 0xe3, 0xe0, 0xdd, 0xdb, 0xd9, 0xd8, 0xd6, 0xd5, 0xd3, 0xd2},
  {0x30, 0x2f, 0x2e, 0x2c, 0x2b, 0x29, 0x28, 0x25, 0x23, 0x20, 0x1d, 0x19, 0x14, 0x0f, 0x09, 0x03, 0xfd, 0xf7, 0xf1, 0xec, 0xe7, 0xe3, 0xe0, 0xdd, 0xdb, 0xd8, 0xd7, 0xd5, 0xd4, 0xd2, 0xd1, 0xd0},
  {0x32, 0x31, 0x30, 0x2f, 0x2e, 0x2c, 0x2b, 0x29, 0x26, 0x23, 0x20, 0x1c, 0x17, 0x11, 0x0b, 0x04, 0xfc, 0xf5, 0xef, 0xe9, 0xe4, 0xe0, 0xdd, 0xda, 0xd7, 0xd5, 0xd4, 0xd2, 0xd1, 0xd0, 0xcf, 0xce},
  {0x34, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2e, 0x2c, 0x2a, 0x27, 0x24, 0x20, 0x1b, 0x15, 0x0d, 0x05, 0xfb, 0xf3, 0xeb, 0xe5, 0xe0, 0xdc, 0xd9, 0xd6, 0xd4, 0xd2, 0xd0, 0xcf, 0xce, 0xcd, 0xcc, 0xcc},
  {0x37, 0x36, 0x36, 0x35, 0x34, 0x33, 0x32, 0x30, 0x2e, 0x2c, 0x29, 0x25, 0x20, 0x19, 0x10, 0x06, 0xfa, 0xf0, 0xe7, 0xe0, 0xdb, 0xd7, 0xd4, 0xd2, 0xd0, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xca, 0xc9},
  {0x39, 0x39, 0x39, 0x38, 0x37, 0x36, 0x36, 0x34, 0x33, 0x31, 0x2f, 0x2b, 0x27, 0x20, 0x16, 0x08, 0xf8, 0xea, 0xe0, 0xd9, 0xd5, 0xd1, 0xcf, 0xcd, 0xcc, 0xca, 0xca, 0xc9, 0xc8, 0xc7, 0xc7, 0xc7},
  {0x3c, 0x3c, 0x3b, 0x3b, 0x3b, 0x3a, 0x3a, 0x39, 0x38, 0x37, 0x35, 0x33, 0x30, 0x2a, 0x20, 0x0d, 0xf3, 0xe0, 0xd6, 0xd0, 0xcd, 0xcb, 0xc9, 0xc8, 0xc7, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4},
  {0x3f, 0x3f, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3d, 0x3d, 0x3c, 0x3b, 0x3a, 0x38, 0x33, 0x20, 0xe0, 0xcd, 0xc8, 0xc6, 0xc5, 0xc4, 0xc3, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1},
  {0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, 0x48, 0x4d, 0x60, 0xa0, 0xb3, 0xb8, 0xba, 0xbb, 0xbc, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf},
  {0x44, 0x44, 0x45, 0x45, 0x45, 0x46, 0x46, 0x47, 0x48, 0x49, 0x4b, 0x4d, 0x50, 0x56, 0x60, 0x73, 0x8d, 0xa0, 0xaa, 0xb0, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbc, 0xbc},
  {0x47, 0x47, 0x47, 0x48, 0x49, 0x4a, 0x4a, 0x4c, 0x4d, 0x4f, 0x51, 0x55, 0x59, 0x60, 0x6a, 0x78, 0x88, 0x96, 0xa0, 0xa7, 0xab, 0xaf, 0xb1, 0xb3, 0xb4, 0xb6, 0xb6, 0xb7, 0xb8, 0xb9, 0xb9, 0xb9},
  {0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x50, 0x52, 0x54, 0x57, 0x5b, 0x60, 0x67, 0x70, 0x7a, 0x86, 0x90, 0x99, 0xa0, 0xa5, 0xa9, 0xac, 0xae, 0xb0, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7},
  {0x4c, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x52, 0x54, 0x56, 0x59, 0x5c, 0x60, 0x65, 0x6b, 0x73, 0x7b, 0x85, 0x8d, 0x95, 0x9b, 0xa0, 0xa4, 0xa7, 0xaa, 0xac, 0xae, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb4},
  {0x4e, 0x4f, 0x50, 0x51, 0x52, 0x54, 0x55, 0x57, 0x5a, 0x5d, 0x60, 0x64, 0x69, 0x6f, 0x75, 0x7c, 0x84, 0x8b, 0x91, 0x97, 0x9c, 0xa0, 0xa3, 0xa6, 0xa9, 0xab, 0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2},
  {0x50, 0x51, 0x52, 0x54, 0x55, 0x57, 0x58, 0x5b, 0x5d, 0x60, 0x63, 0x67, 0x6c, 0x71, 0x77, 0x7d, 0x83, 0x89, 0x8f, 0x94, 0x99, 0x9d, 0xa0, 0xa3, 0xa5, 0xa8, 0xa9, 0xab, 0xac, 0xae, 0xaf, 0xb0},
  {0x52, 0x53, 0x55, 0x56, 0x58, 0x59, 0x5b, 0x5d, 0x60, 0x63, 0x66, 0x6a, 0x6e, 0x73, 0x78, 0x7d, 0x83, 0x88, 0x8d, 0x92, 0x96, 0x9a, 0x9d, 0xa0, 0xa3, 0xa5, 0xa7, 0xa8, 0xaa, 0xab, 0xad, 0xae},
  {0x54, 0x56, 0x57, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x63, 0x65, 0x69, 0x6c, 0x70, 0x74, 0x79, 0x7e, 0x82, 0x87, 0x8c, 0x90, 0x94, 0x97, 0x9b, 0x9d, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xa9, 0xaa, 0xac},
  {0x56, 0x58, 0x59, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x65, 0x68, 0x6b, 0x6e, 0x72, 0x76, 0x7a, 0x7e, 0x82, 0x86, 0x8a, 0x8e, 0x92, 0x95, 0x98, 0x9b, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa7, 0xa8, 0xaa},
  {0x58, 0x5a, 0x5b, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x67, 0x69, 0x6c, 0x70, 0x73, 0x76, 0x7a, 0x7e, 0x82, 0x86, 0x8a, 0x8d, 0x90, 0x94, 0x97, 0x99, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa5, 0xa6, 0xa8},
  {0x5a, 0x5b, 0x5d, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6b, 0x6e, 0x71, 0x74, 0x77, 0x7b, 0x7e, 0x82, 0x85, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa3, 0xa5, 0xa6},
  {0x5c, 0x5d, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6f, 0x72, 0x75, 0x78, 0x7b, 0x7e, 0x82, 0x85, 0x88, 0x8b, 0x8e, 0x91, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa3, 0xa4},
  {0x5d, 0x5f, 0x60, 0x62, 0x63, 0x65, 0x67, 0x69, 0x6b, 0x6e, 0x70, 0x73, 0x76, 0x79, 0x7b, 0x7e, 0x82, 0x85, 0x87, 0x8a, 0x8d, 0x90, 0x92, 0x95, 0x97, 0x99, 0x9b, 0x9d, 0x9e, 0xa0, 0xa1, 0xa3},
  {0x5f, 0x60, 0x61, 0x63, 0x65, 0x66, 0x68, 0x6a, 0x6d, 0x6f, 0x71, 0x74, 0x76, 0x79, 0x7c, 0x7f, 0x81, 0x84, 0x87, 0x8a, 0x8c, 0x8f, 0x91, 0x93, 0x96, 0x98, 0x9a, 0x9b, 0x9d, 0x9f, 0xa0, 0xa1},
  {0x60, 0x61, 0x63, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x77, 0x79, 0x7c, 0x7f, 0x81, 0x84, 0x87, 0x89, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9d, 0x9f, 0xa0}
};
*/
/*
static const uint16_t atan_table[64][64] = {
  {0x2000, 0x20ab, 0x215b, 0x2212, 0x22ce, 0x2390, 0x2459, 0x2528, 0x25fe, 0x26da, 0x27bd, 0x28a8, 0x2999, 0x2a91, 0x2b90, 0x2c96, 0x2da3, 0x2eb7, 0x2fd2, 0x30f4, 0x321b, 0x3349, 0x347d, 0x35b6, 0x36f3, 0x3836, 0x397c, 0x3ac5, 0x3c12, 0x3d60, 0x3eaf, 0x4000, 0x4150, 0x42a0, 0x43ee, 0x453a, 0x4684, 0x47ca, 0x490c, 0x4a4a, 0x4b83, 0x4cb6, 0x4de4, 0x4f0c, 0x502d, 0x5148, 0x525c, 0x5369, 0x5470, 0x556f, 0x5667, 0x5758, 0x5842, 0x5925, 0x5a02, 0x5ad7, 0x5ba6, 0x5c6f, 0x5d31, 0x5dee, 0x5ea4, 0x5f55, 0x6000, 0x60a5},
  {0x1f55, 0x2000, 0x20b1, 0x2167, 0x2224, 0x22e8, 0x23b1, 0x2482, 0x255a, 0x2638, 0x271e, 0x280b, 0x28ff, 0x29fb, 0x2afe, 0x2c09, 0x2d1c, 0x2e36, 0x2f57, 0x307f, 0x31ae, 0x32e4, 0x3420, 0x3562, 0x36a9, 0x37f5, 0x3945, 0x3a99, 0x3bf0, 0x3d49, 0x3ea4, 0x4000, 0x415b, 0x42b6, 0x440f, 0x4566, 0x46ba, 0x480b, 0x4957, 0x4a9e, 0x4be0, 0x4d1c, 0x4e51, 0x4f81, 0x50a9, 0x51ca, 0x52e4, 0x53f6, 0x5501, 0x5604, 0x5700, 0x57f5, 0x58e2, 0x59c7, 0x5aa6, 0x5b7d, 0x5c4e, 0x5d18, 0x5ddb, 0x5e98, 0x5f4f, 0x6000, 0x60ab, 0x6150},
  {0x1ea4, 0x1f4f, 0x2000, 0x20b7, 0x2174, 0x2238, 0x2303, 0x23d5, 0x24ae, 0x258f, 0x2677, 0x2767, 0x285e, 0x295e, 0x2a65, 0x2b75, 0x2c8d, 0x2dad, 0x2ed4, 0x3004, 0x313a, 0x3278, 0x33bd, 0x3508, 0x3659, 0x37b0, 0x390b, 0x3a6a, 0x3bcd, 0x3d32, 0x3e98, 0x4000, 0x4167, 0x42ce, 0x4433, 0x4595, 0x46f5, 0x4850, 0x49a6, 0x4af7, 0x4c42, 0x4d87, 0x4ec5, 0x4ffc, 0x512b, 0x5253, 0x5373, 0x548a, 0x559a, 0x56a2, 0x57a1, 0x5899, 0x5989, 0x5a71, 0x5b51, 0x5c2b, 0x5cfc, 0x5dc7, 0x5e8b, 0x5f49, 0x6000, 0x60b0, 0x615b, 0x6200},
  {0x1dee, 0x1e98, 0x1f49, 0x2000, 0x20bd, 0x2182, 0x224e, 0x2321, 0x23fb, 0x24de, 0x25c8, 0x26ba, 0x27b5, 0x28b9, 0x29c4, 0x2ad9, 0x2bf6, 0x2d1c, 0x2e4a, 0x2f81, 0x30bf, 0x3206, 0x3354, 0x34a9, 0x3605, 0x3766, 0x38cd, 0x3a38, 0x3ba6, 0x3d18, 0x3e8b, 0x4000, 0x4174, 0x42e8, 0x4459, 0x45c8, 0x4733, 0x4899, 0x49fb, 0x4b56, 0x4cac, 0x4dfa, 0x4f40, 0x507f, 0x51b5, 0x52e4, 0x5409, 0x5527, 0x563b, 0x5747, 0x584a, 0x5945, 0x5a38, 0x5b22, 0x5c04, 0x5cdf, 0x5db2, 0x5e7d, 0x5f42, 0x6000, 0x60b7, 0x6167, 0x6212, 0x62b6},
  {0x1d32, 0x1ddb, 0x1e8c, 0x1f42, 0x2000, 0x20c5, 0x2191, 0x2265, 0x2341, 0x2425, 0x2511, 0x2606, 0x2704, 0x280b, 0x291b, 0x2a34, 0x2b57, 0x2c82, 0x2db7, 0x2ef6, 0x303d, 0x318c, 0x32e4, 0x3443, 0x35aa, 0x3717, 0x388a, 0x3a02, 0x3b7e, 0x3cfd, 0x3e7e, 0x4000, 0x4182, 0x4303, 0x4482, 0x45fe, 0x4776, 0x48e9, 0x4a56, 0x4bbc, 0x4d1c, 0x4e73, 0x4fc3, 0x510a, 0x5248, 0x537d, 0x54a9, 0x55cb, 0x56e5, 0x57f5, 0x58fc, 0x59fa, 0x5aef, 0x5bdb, 0x5cbf, 0x5d9b, 0x5e6f, 0x5f3b, 0x6000, 0x60bd, 0x6174, 0x6224, 0x62ce, 0x6371},
  {0x1c6f, 0x1d18, 0x1dc8, 0x1e7e, 0x1f3b, 0x2000, 0x20cc, 0x21a1, 0x227e, 0x2363, 0x2451, 0x2549, 0x2649, 0x2754, 0x2868, 0x2986, 0x2aae, 0x2be0, 0x2d1c, 0x2e62, 0x2fb1, 0x310a, 0x326c, 0x33d6, 0x3549, 0x36c2, 0x3842, 0x39c8, 0x3b52, 0x3cdf, 0x3e6f, 0x4000, 0x4191, 0x4320, 0x44ae, 0x4638, 0x47bd, 0x493d, 0x4ab7, 0x4c29, 0x4d94, 0x4ef5, 0x504e, 0x519e, 0x52e4, 0x5420, 0x5552, 0x567a, 0x5798, 0x58ac, 0x59b6, 0x5ab7, 0x5bae, 0x5c9c, 0x5d82, 0x5e5f, 0x5f33, 0x6000, 0x60c4, 0x6182, 0x6238, 0x62e7, 0x6390, 0x6433},
  {0x1ba7, 0x1c4e, 0x1cfd, 0x1db2, 0x1e6f, 0x1f33, 0x2000, 0x20d5, 0x21b2, 0x2299, 0x2389, 0x2482, 0x2585, 0x2693, 0x27ab, 0x28ce, 0x29fb, 0x2b33, 0x2c76, 0x2dc4, 0x2f1c, 0x307f, 0x31ec, 0x3361, 0x34e0, 0x3667, 0x37f5, 0x3989, 0x3b22, 0x3cbf, 0x3e5f, 0x4000, 0x41a1, 0x4340, 0x44dd, 0x4677, 0x480b, 0x4999, 0x4b1f, 0x4c9e, 0x4e14, 0x4f81, 0x50e3, 0x523b, 0x5389, 0x54cc, 0x5604, 0x5732, 0x5854, 0x596c, 0x5a7a, 0x5b7d, 0x5c77, 0x5d67, 0x5e4d, 0x5f2b, 0x6000, 0x60cc, 0x6191, 0x624d, 0x6303, 0x63b1, 0x6459, 0x64fa},
  {0x1ad7, 0x1b7e, 0x1c2b, 0x1cdf, 0x1d9b, 0x1e5f, 0x1f2b, 0x2000, 0x20de, 0x21c5, 0x22b6, 0x23b1, 0x24b7, 0x25c8, 0x26e4, 0x280b, 0x293d, 0x2a7c, 0x2bc6, 0x2d1c, 0x2e7d, 0x2fea, 0x3162, 0x32e4, 0x3470, 0x3605, 0x37a1, 0x3945, 0x3aef, 0x3c9d, 0x3e4d, 0x4000, 0x41b2, 0x4363, 0x4511, 0x46ba, 0x485e, 0x49fb, 0x4b90, 0x4d1c, 0x4e9e, 0x5016, 0x5182, 0x52e4, 0x543a, 0x5584, 0x56c2, 0x57f5, 0x591c, 0x5a38, 0x5b48, 0x5c4e, 0x5d49, 0x5e3a, 0x5f22, 0x6000, 0x60d4, 0x61a1, 0x6264, 0x6320, 0x63d5, 0x6482, 0x6528, 0x65c8},
  {0x1a02, 0x1aa6, 0x1b52, 0x1c05, 0x1cbf, 0x1d82, 0x1e4e, 0x1f22, 0x2000, 0x20e8, 0x21da, 0x22d6, 0x23de, 0x24f2, 0x2611, 0x273c, 0x2874, 0x29b9, 0x2b0a, 0x2c68, 0x2dd3, 0x2f4a, 0x30cd, 0x325c, 0x33f6, 0x359a, 0x3747, 0x38fc, 0x3ab7, 0x3c77, 0x3e3b, 0x4000, 0x41c5, 0x4388, 0x4549, 0x4704, 0x48b8, 0x4a65, 0x4c09, 0x4da3, 0x4f32, 0x50b5, 0x522d, 0x5398, 0x54f6, 0x5647, 0x578b, 0x58c3, 0x59ef, 0x5b0e, 0x5c21, 0x5d29, 0x5e26, 0x5f18, 0x6000, 0x60de, 0x61b2, 0x627d, 0x6340, 0x63fb, 0x64ae, 0x6559, 0x65fe, 0x669b},
  {0x1925, 0x19c8, 0x1a71, 0x1b22, 0x1bdb, 0x1c9d, 0x1d67, 0x1e3b, 0x1f18, 0x2000, 0x20f2, 0x21f0, 0x22fa, 0x240f, 0x2532, 0x2661, 0x279e, 0x28e9, 0x2a41, 0x2ba7, 0x2d1c, 0x2e9e, 0x302e, 0x31ca, 0x3373, 0x3527, 0x36e5, 0x38ac, 0x3a7a, 0x3c4e, 0x3e26, 0x4000, 0x41da, 0x43b1, 0x4585, 0x4754, 0x491b, 0x4ad9, 0x4c8d, 0x4e36, 0x4fd2, 0x5162, 0x52e4, 0x5458, 0x55be, 0x5717, 0x5861, 0x599e, 0x5ace, 0x5bf0, 0x5d06, 0x5e0f, 0x5f0d, 0x6000, 0x60e7, 0x61c5, 0x6298, 0x6363, 0x6424, 0x64dd, 0x658e, 0x6638, 0x66da, 0x6776},
  {0x1842, 0x18e2, 0x1989, 0x1a38, 0x1aef, 0x1bae, 0x1c77, 0x1d4a, 0x1e26, 0x1f0d, 0x2000, 0x20fe, 0x2209, 0x2321, 0x2446, 0x2579, 0x26ba, 0x280b, 0x296a, 0x2ad9, 0x2c57, 0x2de4, 0x2f81, 0x312b, 0x32e4, 0x34a9, 0x367a, 0x3855, 0x3a38, 0x3c21, 0x3e0f, 0x4000, 0x41f0, 0x43de, 0x45c8, 0x47ab, 0x4986, 0x4b56, 0x4d1c, 0x4ed4, 0x507f, 0x521b, 0x53a8, 0x5527, 0x5695, 0x57f5, 0x5945, 0x5a87, 0x5bba, 0x5cdf, 0x5df7, 0x5f01, 0x6000, 0x60f2, 0x61d9, 0x62b6, 0x6388, 0x6451, 0x6511, 0x65c8, 0x6676, 0x671d, 0x67bd, 0x6856},
  {0x1758, 0x17f5, 0x1899, 0x1945, 0x19fa, 0x1ab7, 0x1b7e, 0x1c4e, 0x1d29, 0x1e10, 0x1f02, 0x2000, 0x210b, 0x2224, 0x234c, 0x2482, 0x25c8, 0x271e, 0x2884, 0x29fb, 0x2b83, 0x2d1c, 0x2ec5, 0x307f, 0x3248, 0x3420, 0x3605, 0x37f5, 0x39ef, 0x3bf0, 0x3df7, 0x4000, 0x4209, 0x440f, 0x4611, 0x480b, 0x49fb, 0x4be0, 0x4db7, 0x4f81, 0x513a, 0x52e4, 0x547d, 0x5604, 0x577b, 0x58e2, 0x5a38, 0x5b7d, 0x5cb4, 0x5ddb, 0x5ef4, 0x6000, 0x60fe, 0x61f0, 0x62d6, 0x63b1, 0x6482, 0x6548, 0x6606, 0x66ba, 0x6766, 0x680b, 0x68a7, 0x693d},
  {0x1667, 0x1701, 0x17a2, 0x184a, 0x18fc, 0x19b6, 0x1a7a, 0x1b48, 0x1c22, 0x1d06, 0x1df7, 0x1ef4, 0x2000, 0x211a, 0x2243, 0x237c, 0x24c5, 0x2620, 0x278d, 0x290c, 0x2a9e, 0x2c43, 0x2dfa, 0x2fc3, 0x319e, 0x3389, 0x3584, 0x378c, 0x399e, 0x3bba, 0x3ddb, 0x4000, 0x4224, 0x4446, 0x4661, 0x4874, 0x4a7c, 0x4c76, 0x4e62, 0x503c, 0x5206, 0x53bd, 0x5561, 0x56f3, 0x5872, 0x59df, 0x5b3a, 0x5c84, 0x5dbd, 0x5ee6, 0x6000, 0x610b, 0x6209, 0x62f9, 0x63de, 0x64b7, 0x6585, 0x6649, 0x6704, 0x67b5, 0x685e, 0x68ff, 0x6998, 0x6a2b},
  {0x156f, 0x1605, 0x16a2, 0x1747, 0x17f5, 0x18ac, 0x196d, 0x1a38, 0x1b0e, 0x1bf0, 0x1cdf, 0x1ddb, 0x1ee6, 0x2000, 0x212a, 0x2265, 0x23b1, 0x2511, 0x2684, 0x280b, 0x29a6, 0x2b57, 0x2d1c, 0x2ef6, 0x30e3, 0x32e4, 0x34f6, 0x3717, 0x3945, 0x3b7e, 0x3dbd, 0x4000, 0x4243, 0x4482, 0x46ba, 0x48e9, 0x4b0a, 0x4d1c, 0x4f1c, 0x510a, 0x52e4, 0x54a9, 0x5659, 0x57f5, 0x597c, 0x5aef, 0x5c4e, 0x5d9b, 0x5ed6, 0x6000, 0x6119, 0x6224, 0x6320, 0x640f, 0x64f1, 0x65c8, 0x6693, 0x6754, 0x680b, 0x68b8, 0x695e, 0x69fb, 0x6a91, 0x6b1f},
  {0x1470, 0x1501, 0x159a, 0x163b, 0x16e5, 0x1798, 0x1855, 0x191c, 0x19ef, 0x1ace, 0x1bba, 0x1cb4, 0x1dbd, 0x1ed6, 0x2000, 0x213c, 0x228b, 0x23ee, 0x2566, 0x26f5, 0x289a, 0x2a56, 0x2c29, 0x2e14, 0x3016, 0x322d, 0x3458, 0x3695, 0x38e2, 0x3b3a, 0x3d9b, 0x4000, 0x4265, 0x44c5, 0x471e, 0x496a, 0x4ba7, 0x4dd3, 0x4fea, 0x51eb, 0x53d6, 0x55aa, 0x5766, 0x590b, 0x5a99, 0x5c11, 0x5d75, 0x5ec4, 0x6000, 0x612a, 0x6242, 0x634b, 0x6446, 0x6532, 0x6611, 0x66e3, 0x67ab, 0x6868, 0x691b, 0x69c4, 0x6a65, 0x6afe, 0x6b90, 0x6c1a},
  {0x136a, 0x13f6, 0x148b, 0x1527, 0x15cc, 0x167a, 0x1732, 0x17f5, 0x18c4, 0x199e, 0x1a87, 0x1b7e, 0x1c84, 0x1d9b, 0x1ec4, 0x2000, 0x2150, 0x22b6, 0x2433, 0x25c8, 0x2776, 0x293d, 0x2b1f, 0x2d1c, 0x2f32, 0x3162, 0x33a9, 0x3605, 0x3873, 0x3aef, 0x3d75, 0x4000, 0x428b, 0x4511, 0x478d, 0x49fb, 0x4c57, 0x4e9e, 0x50cd, 0x52e4, 0x54e0, 0x56c2, 0x588a, 0x5a38, 0x5bcc, 0x5d49, 0x5eaf, 0x6000, 0x613c, 0x6264, 0x637b, 0x6482, 0x6579, 0x6661, 0x673c, 0x680b, 0x68cd, 0x6986, 0x6a34, 0x6ad9, 0x6b75, 0x6c09, 0x6c96, 0x6d1c},
  {0x125c, 0x12e4, 0x1373, 0x140a, 0x14a9, 0x1552, 0x1605, 0x16c2, 0x178c, 0x1862, 0x1945, 0x1a38, 0x1b3a, 0x1c4e, 0x1d75, 0x1eb0, 0x2000, 0x2167, 0x22e8, 0x2482, 0x2638, 0x280b, 0x29fb, 0x2c09, 0x2e36, 0x307f, 0x32e4, 0x3562, 0x37f5, 0x3a99, 0x3d49, 0x4000, 0x42b6, 0x4566, 0x480b, 0x4a9e, 0x4d1c, 0x4f81, 0x51ca, 0x53f6, 0x5604, 0x57f5, 0x59c7, 0x5b7d, 0x5d18, 0x5e98, 0x6000, 0x6150, 0x628b, 0x63b1, 0x64c5, 0x65c8, 0x66ba, 0x679e, 0x6874, 0x693d, 0x69fb, 0x6aae, 0x6b56, 0x6bf6, 0x6c8d, 0x6d1c, 0x6da3, 0x6e24},
  {0x1148, 0x11ca, 0x1253, 0x12e4, 0x137d, 0x1420, 0x14cd, 0x1584, 0x1647, 0x1717, 0x17f5, 0x18e2, 0x19df, 0x1aef, 0x1c12, 0x1d4a, 0x1e98, 0x2000, 0x2182, 0x2321, 0x24de, 0x26ba, 0x28b9, 0x2ad9, 0x2d1c, 0x2f81, 0x3206, 0x34a9, 0x3766, 0x3a38, 0x3d18, 0x4000, 0x42e8, 0x45c8, 0x4899, 0x4b56, 0x4dfa, 0x507f, 0x52e4, 0x5527, 0x5747, 0x5945, 0x5b22, 0x5cdf, 0x5e7d, 0x6000, 0x6167, 0x62b6, 0x63ee, 0x6511, 0x6620, 0x671d, 0x680b, 0x68e8, 0x69b8, 0x6a7c, 0x6b33, 0x6be0, 0x6c82, 0x6d1c, 0x6dac, 0x6e35, 0x6eb7, 0x6f32},
  {0x102e, 0x10a9, 0x112b, 0x11b6, 0x1248, 0x12e4, 0x1389, 0x143a, 0x14f6, 0x15bf, 0x1696, 0x177c, 0x1873, 0x197c, 0x1a99, 0x1bcd, 0x1d18, 0x1e7e, 0x2000, 0x21a1, 0x2363, 0x2549, 0x2754, 0x2986, 0x2be0, 0x2e62, 0x310a, 0x33d6, 0x36c2, 0x39c8, 0x3cdf, 0x4000, 0x4320, 0x4638, 0x493d, 0x4c29, 0x4ef5, 0x519e, 0x5420, 0x567a, 0x58ac, 0x5ab7, 0x5c9c, 0x5e5f, 0x6000, 0x6182, 0x62e7, 0x6433, 0x6566, 0x6684, 0x678d, 0x6884, 0x696a, 0x6a41, 0x6b0a, 0x6bc6, 0x6c76, 0x6d1c, 0x6db7, 0x6e4a, 0x6ed4, 0x6f57, 0x6fd2, 0x7047},
  {0x0f0c, 0x0f81, 0x0ffc, 0x107f, 0x110a, 0x119e, 0x123c, 0x12e4, 0x1398, 0x1458, 0x1527, 0x1605, 0x16f4, 0x17f5, 0x190b, 0x1a38, 0x1b7e, 0x1cdf, 0x1e5f, 0x2000, 0x21c5, 0x23b1, 0x25c8, 0x280b, 0x2a7c, 0x2d1c, 0x2fea, 0x32e4, 0x3605, 0x3945, 0x3c9d, 0x4000, 0x4363, 0x46ba, 0x49fb, 0x4d1c, 0x5016, 0x52e4, 0x5584, 0x57f5, 0x5a38, 0x5c4e, 0x5e3a, 0x6000, 0x61a1, 0x6320, 0x6482, 0x65c8, 0x66f4, 0x680b, 0x690c, 0x69fb, 0x6ad9, 0x6ba7, 0x6c68, 0x6d1c, 0x6dc4, 0x6e61, 0x6ef5, 0x6f80, 0x7003, 0x707f, 0x70f3, 0x7161},
  {0x0de4, 0x0e52, 0x0ec5, 0x0f40, 0x0fc3, 0x104f, 0x10e3, 0x1183, 0x122d, 0x12e4, 0x13a9, 0x147d, 0x1562, 0x1659, 0x1766, 0x188a, 0x19c8, 0x1b22, 0x1c9d, 0x1e3b, 0x2000, 0x21f0, 0x240f, 0x2661, 0x28e9, 0x2ba7, 0x2e9e, 0x31ca, 0x3527, 0x38ac, 0x3c4e, 0x4000, 0x43b1, 0x4754, 0x4ad9, 0x4e36, 0x5162, 0x5458, 0x5717, 0x599e, 0x5bf0, 0x5e0f, 0x6000, 0x61c5, 0x6363, 0x64dd, 0x6638, 0x6776, 0x6899, 0x69a6, 0x6a9e, 0x6b83, 0x6c57, 0x6d1c, 0x6dd3, 0x6e7d, 0x6f1c, 0x6fb1, 0x703c, 0x70bf, 0x713a, 0x71ae, 0x721b, 0x7282},
  {0x0cb7, 0x0d1c, 0x0d87, 0x0dfa, 0x0e74, 0x0ef6, 0x0f81, 0x1016, 0x10b6, 0x1162, 0x121b, 0x12e4, 0x13bd, 0x14a9, 0x15aa, 0x16c2, 0x17f5, 0x1945, 0x1ab7, 0x1c4e, 0x1e10, 0x2000, 0x2224, 0x2482, 0x271e, 0x29fb, 0x2d1c, 0x307f, 0x3420, 0x37f5, 0x3bf0, 0x4000, 0x440f, 0x480b, 0x4be0, 0x4f81, 0x52e4, 0x5604, 0x58e2, 0x5b7d, 0x5ddb, 0x6000, 0x61f0, 0x63b1, 0x6548, 0x66ba, 0x680b, 0x693d, 0x6a56, 0x6b56, 0x6c42, 0x6d1c, 0x6de4, 0x6e9e, 0x6f4a, 0x6fea, 0x707f, 0x710a, 0x718c, 0x7206, 0x7278, 0x72e4, 0x7349, 0x73a8},
  {0x0b83, 0x0be0, 0x0c43, 0x0cac, 0x0d1c, 0x0d94, 0x0e14, 0x0e9e, 0x0f32, 0x0fd2, 0x107f, 0x113a, 0x1206, 0x12e4, 0x13d6, 0x14e0, 0x1605, 0x1747, 0x18ac, 0x1a38, 0x1bf0, 0x1ddb, 0x2000, 0x2265, 0x2511, 0x280b, 0x2b57, 0x2ef6, 0x32e4, 0x3717, 0x3b7e, 0x4000, 0x4482, 0x48e9, 0x4d1c, 0x510a, 0x54a9, 0x57f5, 0x5aef, 0x5d9b, 0x6000, 0x6224, 0x640f, 0x65c8, 0x6754, 0x68b8, 0x69fb, 0x6b1f, 0x6c29, 0x6d1c, 0x6df9, 0x6ec5, 0x6f80, 0x702d, 0x70cd, 0x7161, 0x71eb, 0x726c, 0x72e4, 0x7354, 0x73bd, 0x7420, 0x747c, 0x74d4},
  {0x0a4a, 0x0a9e, 0x0af7, 0x0b57, 0x0bbc, 0x0c29, 0x0c9e, 0x0d1c, 0x0da3, 0x0e36, 0x0ed4, 0x0f81, 0x103d, 0x110a, 0x11ec, 0x12e4, 0x13f6, 0x1527, 0x167a, 0x17f5, 0x199e, 0x1b7e, 0x1d9b, 0x2000, 0x22b6, 0x25c8, 0x293d, 0x2d1c, 0x3162, 0x3605, 0x3aef, 0x4000, 0x4511, 0x49fb, 0x4e9e, 0x52e4, 0x56c2, 0x5a38, 0x5d49, 0x6000, 0x6264, 0x6482, 0x6661, 0x680b, 0x6986, 0x6ad9, 0x6c09, 0x6d1c, 0x6e14, 0x6ef5, 0x6fc3, 0x707f, 0x712b, 0x71ca, 0x725c, 0x72e4, 0x7361, 0x73d6, 0x7443, 0x74a9, 0x7508, 0x7561, 0x75b5, 0x7604},
  {0x090c, 0x0957, 0x09a6, 0x09fb, 0x0a56, 0x0ab7, 0x0b20, 0x0b90, 0x0c0a, 0x0c8d, 0x0d1c, 0x0db8, 0x0e62, 0x0f1c, 0x0fea, 0x10ce, 0x11ca, 0x12e4, 0x1420, 0x1584, 0x1717, 0x18e2, 0x1aef, 0x1d4a, 0x2000, 0x2321, 0x26ba, 0x2ad9, 0x2f81, 0x34a9, 0x3a38, 0x4000, 0x45c8, 0x4b56, 0x507f, 0x5527, 0x5945, 0x5cdf, 0x6000, 0x62b6, 0x6511, 0x671d, 0x68e8, 0x6a7c, 0x6be0, 0x6d1c, 0x6e35, 0x6f32, 0x7015, 0x70e3, 0x719e, 0x7248, 0x72e4, 0x7372, 0x73f6, 0x746f, 0x74e0, 0x7548, 0x75aa, 0x7604, 0x7659, 0x76a9, 0x76f3, 0x7739},
  {0x07ca, 0x080b, 0x0850, 0x089a, 0x08e9, 0x093e, 0x0999, 0x09fb, 0x0a66, 0x0ad9, 0x0b57, 0x0be0, 0x0c76, 0x0d1c, 0x0dd3, 0x0e9e, 0x0f81, 0x107f, 0x119e, 0x12e4, 0x1458, 0x1605, 0x17f5, 0x1a38, 0x1cdf, 0x2000, 0x23b1, 0x280b, 0x2d1c, 0x32e4, 0x3945, 0x4000, 0x46ba, 0x4d1c, 0x52e4, 0x57f5, 0x5c4e, 0x6000, 0x6320, 0x65c8, 0x680b, 0x69fb, 0x6ba7, 0x6d1c, 0x6e61, 0x6f80, 0x707f, 0x7161, 0x722d, 0x72e4, 0x7389, 0x7420, 0x74a9, 0x7526, 0x759a, 0x7604, 0x7667, 0x76c2, 0x7717, 0x7766, 0x77b0, 0x77f5, 0x7835, 0x7872},
  {0x0684, 0x06bb, 0x06f5, 0x0733, 0x0776, 0x07be, 0x080b, 0x085e, 0x08b9, 0x091b, 0x0986, 0x09fb, 0x0a7c, 0x0b0a, 0x0ba8, 0x0c57, 0x0d1c, 0x0dfa, 0x0ef6, 0x1016, 0x1162, 0x12e4, 0x14a9, 0x16c2, 0x1945, 0x1c4e, 0x2000, 0x2482, 0x29fb, 0x307f, 0x37f5, 0x4000, 0x480b, 0x4f81, 0x5604, 0x5b7d, 0x6000, 0x63b1, 0x66ba, 0x693d, 0x6b56, 0x6d1c, 0x6e9e, 0x6fea, 0x710a, 0x7206, 0x72e4, 0x73a8, 0x7458, 0x74f5, 0x7584, 0x7604, 0x767a, 0x76e5, 0x7747, 0x77a1, 0x77f5, 0x7842, 0x788a, 0x78cc, 0x790b, 0x7945, 0x797c, 0x79af},
  {0x053a, 0x0567, 0x0596, 0x05c8, 0x05fe, 0x0638, 0x0677, 0x06bb, 0x0704, 0x0754, 0x07ab, 0x080b, 0x0874, 0x08e9, 0x096a, 0x09fb, 0x0a9e, 0x0b57, 0x0c29, 0x0d1c, 0x0e36, 0x0f81, 0x110a, 0x12e4, 0x1527, 0x17f5, 0x1b7e, 0x2000, 0x25c8, 0x2d1c, 0x3605, 0x4000, 0x49fb, 0x52e4, 0x5a38, 0x6000, 0x6482, 0x680b, 0x6ad9, 0x6d1c, 0x6ef5, 0x707f, 0x71ca, 0x72e4, 0x73d6, 0x74a9, 0x7561, 0x7604, 0x7695, 0x7717, 0x778b, 0x77f5, 0x7854, 0x78ac, 0x78fc, 0x7945, 0x7989, 0x79c7, 0x7a01, 0x7a37, 0x7a6a, 0x7a99, 0x7ac5, 0x7aee},
  {0x03ee, 0x0410, 0x0433, 0x0459, 0x0482, 0x04ae, 0x04de, 0x0511, 0x0549, 0x0586, 0x05c8, 0x0611, 0x0661, 0x06bb, 0x071e, 0x078d, 0x080b, 0x089a, 0x093e, 0x09fb, 0x0ad9, 0x0be0, 0x0d1c, 0x0e9e, 0x107f, 0x12e4, 0x1605, 0x1a38, 0x2000, 0x280b, 0x32e4, 0x4000, 0x4d1c, 0x57f5, 0x6000, 0x65c8, 0x69fb, 0x6d1c, 0x6f80, 0x7161, 0x72e4, 0x7420, 0x7526, 0x7604, 0x76c2, 0x7766, 0x77f5, 0x7872, 0x78e2, 0x7945, 0x799e, 0x79ef, 0x7a37, 0x7a7a, 0x7ab7, 0x7aee, 0x7b22, 0x7b51, 0x7b7d, 0x7ba6, 0x7bcc, 0x7bf0, 0x7c11, 0x7c31},
  {0x02a0, 0x02b6, 0x02ce, 0x02e8, 0x0303, 0x0321, 0x0341, 0x0363, 0x0389, 0x03b2, 0x03de, 0x0410, 0x0446, 0x0482, 0x04c5, 0x0511, 0x0567, 0x05c8, 0x0638, 0x06bb, 0x0754, 0x080b, 0x08e9, 0x09fb, 0x0b57, 0x0d1c, 0x0f81, 0x12e4, 0x17f5, 0x2000, 0x2d1c, 0x4000, 0x52e4, 0x6000, 0x680b, 0x6d1c, 0x707f, 0x72e4, 0x74a9, 0x7604, 0x7717, 0x77f5, 0x78ac, 0x7945, 0x79c7, 0x7a37, 0x7a99, 0x7aee, 0x7b3a, 0x7b7d, 0x7bba, 0x7bf0, 0x7c21, 0x7c4e, 0x7c77, 0x7c9c, 0x7cbf, 0x7cdf, 0x7cfc, 0x7d18, 0x7d31, 0x7d49, 0x7d60, 0x7d74},
  {0x0150, 0x015c, 0x0168, 0x0174, 0x0182, 0x0191, 0x01a1, 0x01b2, 0x01c5, 0x01da, 0x01f0, 0x0209, 0x0224, 0x0243, 0x0265, 0x028b, 0x02b6, 0x02e8, 0x0321, 0x0363, 0x03b2, 0x0410, 0x0482, 0x0511, 0x05c8, 0x06bb, 0x080b, 0x09fb, 0x0d1c, 0x12e4, 0x2000, 0x4000, 0x6000, 0x6d1c, 0x72e4, 0x7604, 0x77f5, 0x7945, 0x7a37, 0x7aee, 0x7b7d, 0x7bf0, 0x7c4e, 0x7c9c, 0x7cdf, 0x7d18, 0x7d49, 0x7d74, 0x7d9b, 0x7dbd, 0x7ddb, 0x7df6, 0x7e0f, 0x7e26, 0x7e3a, 0x7e4d, 0x7e5f, 0x7e6f, 0x7e7d, 0x7e8b, 0x7e98, 0x7ea4, 0x7eaf, 0x7eba},
  {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000},
  {0xfeaf, 0xfea3, 0xfe97, 0xfe8b, 0xfe7d, 0xfe6e, 0xfe5e, 0xfe4d, 0xfe3a, 0xfe25, 0xfe0f, 0xfdf6, 0xfddb, 0xfdbc, 0xfd9a, 0xfd74, 0xfd49, 0xfd17, 0xfcde, 0xfc9c, 0xfc4d, 0xfbef, 0xfb7d, 0xfaee, 0xfa37, 0xf944, 0xf7f4, 0xf604, 0xf2e3, 0xed1b, 0xdfff, 0xbfff, 0x9fff, 0x92e3, 0x8d1b, 0x89fb, 0x880a, 0x86ba, 0x85c8, 0x8511, 0x8482, 0x840f, 0x83b1, 0x8363, 0x8320, 0x82e7, 0x82b6, 0x828b, 0x8264, 0x8242, 0x8224, 0x8209, 0x81f0, 0x81d9, 0x81c5, 0x81b2, 0x81a0, 0x8190, 0x8182, 0x8174, 0x8167, 0x815b, 0x8150, 0x8145},
  {0xfd5f, 0xfd49, 0xfd31, 0xfd17, 0xfcfc, 0xfcde, 0xfcbe, 0xfc9c, 0xfc76, 0xfc4d, 0xfc21, 0xfbef, 0xfbb9, 0xfb7d, 0xfb3a, 0xfaee, 0xfa98, 0xfa37, 0xf9c7, 0xf944, 0xf8ab, 0xf7f4, 0xf716, 0xf604, 0xf4a8, 0xf2e3, 0xf07e, 0xed1b, 0xe80a, 0xdfff, 0xd2e3, 0xbfff, 0xad1b, 0x9fff, 0x97f4, 0x92e3, 0x8f80, 0x8d1b, 0x8b56, 0x89fb, 0x88e8, 0x880a, 0x8753, 0x86ba, 0x8638, 0x85c8, 0x8566, 0x8511, 0x84c5, 0x8482, 0x8445, 0x840f, 0x83de, 0x83b1, 0x8388, 0x8363, 0x8340, 0x8320, 0x8303, 0x82e7, 0x82ce, 0x82b6, 0x829f, 0x828b},
  {0xfc11, 0xfbef, 0xfbcc, 0xfba6, 0xfb7d, 0xfb51, 0xfb21, 0xfaee, 0xfab6, 0xfa79, 0xfa37, 0xf9ee, 0xf99e, 0xf944, 0xf8e1, 0xf872, 0xf7f4, 0xf765, 0xf6c1, 0xf604, 0xf526, 0xf41f, 0xf2e3, 0xf161, 0xef80, 0xed1b, 0xe9fa, 0xe5c7, 0xdfff, 0xd7f4, 0xcd1b, 0xbfff, 0xb2e3, 0xa80a, 0x9fff, 0x9a37, 0x9604, 0x92e3, 0x907f, 0x8e9e, 0x8d1b, 0x8bdf, 0x8ad9, 0x89fb, 0x893d, 0x8899, 0x880a, 0x878d, 0x871d, 0x86ba, 0x8661, 0x8610, 0x85c8, 0x8585, 0x8548, 0x8511, 0x84dd, 0x84ae, 0x8482, 0x8459, 0x8433, 0x840f, 0x83ee, 0x83ce},
  {0xfac5, 0xfa98, 0xfa69, 0xfa37, 0xfa01, 0xf9c7, 0xf988, 0xf944, 0xf8fb, 0xf8ab, 0xf854, 0xf7f4, 0xf78b, 0xf716, 0xf695, 0xf604, 0xf561, 0xf4a8, 0xf3d6, 0xf2e3, 0xf1c9, 0xf07e, 0xeef5, 0xed1b, 0xead8, 0xe80a, 0xe481, 0xdfff, 0xda37, 0xd2e3, 0xc9fa, 0xbfff, 0xb604, 0xad1b, 0xa5c7, 0x9fff, 0x9b7d, 0x97f4, 0x9526, 0x92e3, 0x910a, 0x8f80, 0x8e35, 0x8d1b, 0x8c29, 0x8b56, 0x8a9e, 0x89fb, 0x896a, 0x88e8, 0x8874, 0x880a, 0x87ab, 0x8753, 0x8703, 0x86ba, 0x8676, 0x8638, 0x85fe, 0x85c8, 0x8595, 0x8566, 0x853a, 0x8511},
  {0xf97b, 0xf944, 0xf90a, 0xf8cc, 0xf889, 0xf841, 0xf7f4, 0xf7a1, 0xf746, 0xf6e4, 0xf679, 0xf604, 0xf583, 0xf4f5, 0xf457, 0xf3a8, 0xf2e3, 0xf205, 0xf109, 0xefe9, 0xee9d, 0xed1b, 0xeb56, 0xe93d, 0xe6ba, 0xe3b1, 0xdfff, 0xdb7d, 0xd604, 0xcf80, 0xc80a, 0xbfff, 0xb7f4, 0xb07e, 0xa9fb, 0xa482, 0x9fff, 0x9c4e, 0x9945, 0x96c2, 0x94a9, 0x92e3, 0x9161, 0x9015, 0x8ef5, 0x8df9, 0x8d1b, 0x8c57, 0x8ba7, 0x8b0a, 0x8a7b, 0x89fb, 0x8985, 0x891a, 0x88b8, 0x885e, 0x880a, 0x87bd, 0x8775, 0x8733, 0x86f4, 0x86ba, 0x8683, 0x8650},
  {0xf835, 0xf7f4, 0xf7af, 0xf765, 0xf716, 0xf6c1, 0xf666, 0xf604, 0xf599, 0xf526, 0xf4a8, 0xf41f, 0xf389, 0xf2e3, 0xf22c, 0xf161, 0xf07e, 0xef80, 0xee61, 0xed1b, 0xeba7, 0xe9fa, 0xe80a, 0xe5c7, 0xe320, 0xdfff, 0xdc4e, 0xd7f4, 0xd2e3, 0xcd1b, 0xc6ba, 0xbfff, 0xb945, 0xb2e3, 0xad1b, 0xa80a, 0xa3b1, 0x9fff, 0x9cdf, 0x9a37, 0x97f4, 0x9604, 0x9458, 0x92e3, 0x919e, 0x907f, 0x8f80, 0x8e9e, 0x8dd2, 0x8d1b, 0x8c76, 0x8bdf, 0x8b56, 0x8ad9, 0x8a65, 0x89fb, 0x8998, 0x893d, 0x88e8, 0x8899, 0x884f, 0x880a, 0x87ca, 0x878d},
  {0xf6f3, 0xf6a8, 0xf659, 0xf604, 0xf5a9, 0xf548, 0xf4df, 0xf46f, 0xf3f5, 0xf372, 0xf2e3, 0xf247, 0xf19d, 0xf0e3, 0xf015, 0xef31, 0xee35, 0xed1b, 0xebdf, 0xea7b, 0xe8e8, 0xe71d, 0xe510, 0xe2b5, 0xdfff, 0xdcde, 0xd945, 0xd526, 0xd07e, 0xcb56, 0xc5c7, 0xbfff, 0xba37, 0xb4a9, 0xaf80, 0xaad8, 0xa6ba, 0xa320, 0x9fff, 0x9d49, 0x9aee, 0x98e2, 0x9717, 0x9583, 0x941f, 0x92e3, 0x91ca, 0x90cd, 0x8fea, 0x8f1c, 0x8e61, 0x8db7, 0x8d1b, 0x8c8d, 0x8c09, 0x8b90, 0x8b1f, 0x8ab7, 0x8a55, 0x89fb, 0x89a6, 0x8956, 0x890c, 0x88c6},
  {0xf5b5, 0xf561, 0xf508, 0xf4a8, 0xf443, 0xf3d6, 0xf361, 0xf2e3, 0xf25c, 0xf1c9, 0xf12b, 0xf07e, 0xefc2, 0xeef5, 0xee13, 0xed1b, 0xec09, 0xead8, 0xe985, 0xe80a, 0xe661, 0xe481, 0xe264, 0xdfff, 0xdd49, 0xda37, 0xd6c2, 0xd2e3, 0xce9d, 0xc9fa, 0xc510, 0xbfff, 0xbaee, 0xb604, 0xb161, 0xad1b, 0xa93d, 0xa5c7, 0xa2b6, 0x9fff, 0x9d9b, 0x9b7d, 0x999e, 0x97f4, 0x9679, 0x9526, 0x93f6, 0x92e3, 0x91eb, 0x910a, 0x903c, 0x8f80, 0x8ed4, 0x8e35, 0x8da3, 0x8d1b, 0x8c9e, 0x8c29, 0x8bbc, 0x8b56, 0x8af7, 0x8a9e, 0x8a4a, 0x89fb},
  {0xf47c, 0xf41f, 0xf3bc, 0xf353, 0xf2e3, 0xf26b, 0xf1eb, 0xf161, 0xf0cd, 0xf02d, 0xef80, 0xeec5, 0xedf9, 0xed1b, 0xec29, 0xeb1f, 0xe9fa, 0xe8b8, 0xe753, 0xe5c7, 0xe40f, 0xe224, 0xdfff, 0xdd9a, 0xdaee, 0xd7f4, 0xd4a8, 0xd109, 0xcd1b, 0xc8e8, 0xc481, 0xbfff, 0xbb7d, 0xb716, 0xb2e3, 0xaef5, 0xab56, 0xa80a, 0xa510, 0xa264, 0x9fff, 0x9ddb, 0x9bf0, 0x9a37, 0x98ab, 0x9747, 0x9604, 0x94e0, 0x93d6, 0x92e3, 0x9206, 0x913a, 0x907f, 0x8fd2, 0x8f32, 0x8e9e, 0x8e14, 0x8d93, 0x8d1b, 0x8cab, 0x8c42, 0x8bdf, 0x8b83, 0x8b2b},
  {0xf348, 0xf2e3, 0xf278, 0xf205, 0xf18b, 0xf109, 0xf07e, 0xefe9, 0xef49, 0xee9d, 0xede4, 0xed1b, 0xec42, 0xeb56, 0xea55, 0xe93d, 0xe80a, 0xe6ba, 0xe548, 0xe3b1, 0xe1ef, 0xdfff, 0xdddb, 0xdb7d, 0xd8e1, 0xd604, 0xd2e3, 0xcf80, 0xcbdf, 0xc80a, 0xc40f, 0xbfff, 0xbbf0, 0xb7f4, 0xb41f, 0xb07e, 0xad1b, 0xa9fb, 0xa71d, 0xa482, 0xa224, 0x9fff, 0x9e0f, 0x9c4e, 0x9ab7, 0x9945, 0x97f4, 0x96c2, 0x95a9, 0x94a9, 0x93bd, 0x92e3, 0x921b, 0x9161, 0x90b5, 0x9015, 0x8f80, 0x8ef5, 0x8e73, 0x8df9, 0x8d87, 0x8d1b, 0x8cb6, 0x8c57},
  {0xf21b, 0xf1ad, 0xf13a, 0xf0bf, 0xf03c, 0xefb0, 0xef1c, 0xee7c, 0xedd2, 0xed1b, 0xec56, 0xeb82, 0xea9d, 0xe9a6, 0xe899, 0xe775, 0xe637, 0xe4dd, 0xe362, 0xe1c4, 0xdfff, 0xde0f, 0xdbf0, 0xd99e, 0xd716, 0xd458, 0xd161, 0xce35, 0xcad8, 0xc753, 0xc3b1, 0xbfff, 0xbc4e, 0xb8ab, 0xb526, 0xb1c9, 0xae9d, 0xaba7, 0xa8e8, 0xa661, 0xa40f, 0xa1f0, 0x9fff, 0x9e3a, 0x9c9c, 0x9b22, 0x99c7, 0x9889, 0x9766, 0x9659, 0x9561, 0x947c, 0x93a8, 0x92e3, 0x922c, 0x9182, 0x90e3, 0x904e, 0x8fc3, 0x8f40, 0x8ec5, 0x8e51, 0x8de4, 0x8d7d},
  {0xf0f3, 0xf07e, 0xf003, 0xef80, 0xeef5, 0xee61, 0xedc3, 0xed1b, 0xec67, 0xeba7, 0xead8, 0xe9fa, 0xe90b, 0xe80a, 0xe6f4, 0xe5c7, 0xe481, 0xe320, 0xe1a0, 0xdfff, 0xde3a, 0xdc4e, 0xda37, 0xd7f4, 0xd583, 0xd2e3, 0xd015, 0xcd1b, 0xc9fa, 0xc6ba, 0xc362, 0xbfff, 0xbc9c, 0xb945, 0xb604, 0xb2e3, 0xafe9, 0xad1b, 0xaa7b, 0xa80a, 0xa5c7, 0xa3b1, 0xa1c5, 0x9fff, 0x9e5e, 0x9cdf, 0x9b7d, 0x9a37, 0x990b, 0x97f4, 0x96f3, 0x9604, 0x9526, 0x9458, 0x9397, 0x92e3, 0x923b, 0x919e, 0x910a, 0x907f, 0x8ffc, 0x8f80, 0x8f0c, 0x8e9e},
  {0xefd1, 0xef56, 0xeed4, 0xee49, 0xedb7, 0xed1b, 0xec76, 0xebc5, 0xeb09, 0xea40, 0xe969, 0xe883, 0xe78c, 0xe683, 0xe566, 0xe432, 0xe2e7, 0xe181, 0xdfff, 0xde5e, 0xdc9c, 0xdab6, 0xd8ab, 0xd679, 0xd41f, 0xd19d, 0xcef5, 0xcc29, 0xc93d, 0xc637, 0xc320, 0xbfff, 0xbcdf, 0xb9c7, 0xb6c2, 0xb3d6, 0xb10a, 0xae61, 0xabdf, 0xa985, 0xa753, 0xa548, 0xa363, 0xa1a0, 0x9fff, 0x9e7d, 0x9d18, 0x9bcc, 0x9a99, 0x997b, 0x9872, 0x977b, 0x9695, 0x95be, 0x94f5, 0x9439, 0x9389, 0x92e3, 0x9248, 0x91b5, 0x912b, 0x90a8, 0x902d, 0x8fb8},
  {0xeeb7, 0xee35, 0xedac, 0xed1b, 0xec82, 0xebdf, 0xeb32, 0xea7b, 0xe9b8, 0xe8e8, 0xe80a, 0xe71d, 0xe620, 0xe510, 0xe3ed, 0xe2b5, 0xe167, 0xdfff, 0xde7d, 0xdcde, 0xdb21, 0xd945, 0xd746, 0xd526, 0xd2e3, 0xd07e, 0xcdf9, 0xcb56, 0xc899, 0xc5c7, 0xc2e7, 0xbfff, 0xbd17, 0xba37, 0xb766, 0xb4a9, 0xb205, 0xaf80, 0xad1b, 0xaad8, 0xa8b8, 0xa6ba, 0xa4dd, 0xa320, 0xa182, 0x9fff, 0x9e98, 0x9d49, 0x9c11, 0x9aee, 0x99df, 0x98e2, 0x97f4, 0x9717, 0x9647, 0x9583, 0x94cc, 0x941f, 0x937d, 0x92e3, 0x9253, 0x91ca, 0x9148, 0x90cd},
  {0xeda3, 0xed1b, 0xec8c, 0xebf5, 0xeb56, 0xeaad, 0xe9fa, 0xe93d, 0xe873, 0xe79d, 0xe6ba, 0xe5c7, 0xe4c5, 0xe3b1, 0xe28a, 0xe14f, 0xdfff, 0xde98, 0xdd17, 0xdb7d, 0xd9c7, 0xd7f4, 0xd604, 0xd3f6, 0xd1c9, 0xcf80, 0xcd1b, 0xca9d, 0xc80a, 0xc566, 0xc2b6, 0xbfff, 0xbd49, 0xba99, 0xb7f4, 0xb561, 0xb2e3, 0xb07e, 0xae35, 0xac09, 0xa9fb, 0xa80a, 0xa638, 0xa482, 0xa2e7, 0xa167, 0x9fff, 0x9eaf, 0x9d74, 0x9c4e, 0x9b3a, 0x9a37, 0x9945, 0x9861, 0x978b, 0x96c2, 0x9604, 0x9551, 0x94a9, 0x9409, 0x9372, 0x92e3, 0x925c, 0x91db},
  {0xec95, 0xec09, 0xeb74, 0xead8, 0xea33, 0xe985, 0xe8cd, 0xe80a, 0xe73b, 0xe661, 0xe578, 0xe481, 0xe37b, 0xe264, 0xe13b, 0xdfff, 0xdeaf, 0xdd49, 0xdbcc, 0xda37, 0xd889, 0xd6c2, 0xd4e0, 0xd2e3, 0xd0cd, 0xce9d, 0xcc56, 0xc9fa, 0xc78c, 0xc510, 0xc28a, 0xbfff, 0xbd74, 0xbaee, 0xb872, 0xb604, 0xb3a8, 0xb161, 0xaf32, 0xad1b, 0xab1f, 0xa93d, 0xa775, 0xa5c7, 0xa433, 0xa2b6, 0xa150, 0x9fff, 0x9ec3, 0x9d9b, 0x9c84, 0x9b7d, 0x9a86, 0x999e, 0x98c3, 0x97f4, 0x9732, 0x9679, 0x95cb, 0x9526, 0x948a, 0x93f6, 0x9369, 0x92e3},
  {0xeb8f, 0xeafe, 0xea65, 0xe9c4, 0xe91a, 0xe867, 0xe7aa, 0xe6e3, 0xe610, 0xe531, 0xe445, 0xe34b, 0xe242, 0xe129, 0xdfff, 0xdec3, 0xdd74, 0xdc11, 0xda99, 0xd90a, 0xd765, 0xd5a9, 0xd3d6, 0xd1eb, 0xcfe9, 0xcdd2, 0xcba7, 0xc96a, 0xc71d, 0xc4c5, 0xc264, 0xbfff, 0xbd9a, 0xbb3a, 0xb8e1, 0xb695, 0xb458, 0xb22c, 0xb015, 0xae14, 0xac29, 0xaa55, 0xa899, 0xa6f4, 0xa566, 0xa3ee, 0xa28a, 0xa13b, 0x9fff, 0x9ed5, 0x9dbd, 0x9cb4, 0x9bb9, 0x9acd, 0x99ee, 0x991c, 0x9854, 0x9797, 0x96e4, 0x963b, 0x959a, 0x9501, 0x946f, 0x93e5},
  {0xea90, 0xe9fa, 0xe95d, 0xe8b8, 0xe80a, 0xe753, 0xe692, 0xe5c7, 0xe4f1, 0xe40f, 0xe320, 0xe224, 0xe119, 0xdfff, 0xded5, 0xdd9a, 0xdc4e, 0xdaee, 0xd97b, 0xd7f4, 0xd659, 0xd4a8, 0xd2e3, 0xd109, 0xcf1c, 0xcd1b, 0xcb09, 0xc8e8, 0xc6ba, 0xc481, 0xc242, 0xbfff, 0xbdbc, 0xbb7d, 0xb945, 0xb716, 0xb4f5, 0xb2e3, 0xb0e3, 0xaef5, 0xad1b, 0xab56, 0xa9a6, 0xa80a, 0xa683, 0xa510, 0xa3b1, 0xa264, 0xa129, 0x9fff, 0x9ee6, 0x9ddb, 0x9cdf, 0x9bf0, 0x9b0e, 0x9a37, 0x996c, 0x98ab, 0x97f4, 0x9747, 0x96a1, 0x9604, 0x956e, 0x94e0},
  {0xe998, 0xe8fe, 0xe85d, 0xe7b5, 0xe703, 0xe649, 0xe585, 0xe4b7, 0xe3dd, 0xe2f9, 0xe208, 0xe10b, 0xdfff, 0xdee5, 0xddbc, 0xdc83, 0xdb3a, 0xd9df, 0xd872, 0xd6f3, 0xd561, 0xd3bc, 0xd205, 0xd03c, 0xce61, 0xcc76, 0xca7b, 0xc873, 0xc661, 0xc445, 0xc224, 0xbfff, 0xbddb, 0xbbb9, 0xb99e, 0xb78b, 0xb583, 0xb389, 0xb19d, 0xafc3, 0xadf9, 0xac42, 0xaa9e, 0xa90c, 0xa78d, 0xa620, 0xa4c5, 0xa37b, 0xa242, 0xa119, 0x9fff, 0x9ef4, 0x9df6, 0x9d06, 0x9c21, 0x9b48, 0x9a7a, 0x99b6, 0x98fb, 0x984a, 0x97a1, 0x9700, 0x9667, 0x95d4},
  {0xe8a7, 0xe80a, 0xe766, 0xe6ba, 0xe605, 0xe548, 0xe481, 0xe3b1, 0xe2d6, 0xe1ef, 0xe0fd, 0xdfff, 0xdef4, 0xdddb, 0xdcb3, 0xdb7d, 0xda37, 0xd8e1, 0xd77b, 0xd604, 0xd47c, 0xd2e3, 0xd13a, 0xcf80, 0xcdb7, 0xcbdf, 0xc9fa, 0xc80a, 0xc610, 0xc40f, 0xc208, 0xbfff, 0xbdf6, 0xbbf0, 0xb9ee, 0xb7f4, 0xb604, 0xb41f, 0xb248, 0xb07e, 0xaec5, 0xad1b, 0xab82, 0xa9fb, 0xa884, 0xa71d, 0xa5c7, 0xa482, 0xa34b, 0xa224, 0xa10b, 0x9fff, 0x9f01, 0x9e0f, 0x9d29, 0x9c4e, 0x9b7d, 0x9ab7, 0x99f9, 0x9945, 0x9899, 0x97f4, 0x9758, 0x96c2},
  {0xe7bd, 0xe71d, 0xe676, 0xe5c7, 0xe510, 0xe451, 0xe388, 0xe2b5, 0xe1d9, 0xe0f2, 0xdfff, 0xdf01, 0xddf6, 0xdcde, 0xdbb9, 0xda86, 0xd945, 0xd7f4, 0xd695, 0xd526, 0xd3a8, 0xd21b, 0xd07e, 0xced4, 0xcd1b, 0xcb56, 0xc985, 0xc7aa, 0xc5c7, 0xc3de, 0xc1f0, 0xbfff, 0xbe0f, 0xbc21, 0xba37, 0xb854, 0xb679, 0xb4a9, 0xb2e3, 0xb12b, 0xaf80, 0xade4, 0xac57, 0xaad8, 0xa96a, 0xa80a, 0xa6ba, 0xa578, 0xa445, 0xa320, 0xa208, 0xa0fe, 0x9fff, 0x9f0d, 0x9e26, 0x9d49, 0x9c77, 0x9bae, 0x9aee, 0x9a37, 0x9989, 0x98e2, 0x9842, 0x97a9},
  {0xe6da, 0xe637, 0xe58e, 0xe4dd, 0xe424, 0xe362, 0xe298, 0xe1c4, 0xe0e7, 0xdfff, 0xdf0d, 0xde0f, 0xdd05, 0xdbf0, 0xdacd, 0xd99e, 0xd861, 0xd716, 0xd5be, 0xd458, 0xd2e3, 0xd161, 0xcfd1, 0xce35, 0xcc8c, 0xcad8, 0xc91a, 0xc753, 0xc585, 0xc3b1, 0xc1d9, 0xbfff, 0xbe25, 0xbc4e, 0xba7a, 0xb8ab, 0xb6e4, 0xb526, 0xb372, 0xb1c9, 0xb02d, 0xae9d, 0xad1b, 0xaba7, 0xaa41, 0xa8e8, 0xa79e, 0xa661, 0xa531, 0xa40f, 0xa2f9, 0xa1f0, 0xa0f2, 0x9fff, 0x9f18, 0x9e3a, 0x9d67, 0x9c9c, 0x9bdb, 0x9b22, 0x9a71, 0x99c7, 0x9925, 0x9889},
  {0xe5fd, 0xe559, 0xe4ad, 0xe3fa, 0xe340, 0xe27d, 0xe1b1, 0xe0dd, 0xdfff, 0xdf17, 0xde25, 0xdd29, 0xdc21, 0xdb0d, 0xd9ee, 0xd8c3, 0xd78b, 0xd646, 0xd4f5, 0xd397, 0xd22c, 0xd0b5, 0xcf32, 0xcda3, 0xcc09, 0xca65, 0xc8b8, 0xc703, 0xc548, 0xc388, 0xc1c4, 0xbfff, 0xbe3a, 0xbc77, 0xbab6, 0xb8fb, 0xb747, 0xb59a, 0xb3f6, 0xb25c, 0xb0cd, 0xaf4a, 0xadd2, 0xac67, 0xab09, 0xa9b8, 0xa874, 0xa73c, 0xa610, 0xa4f1, 0xa3de, 0xa2d6, 0xa1d9, 0xa0e7, 0x9fff, 0x9f21, 0x9e4d, 0x9d82, 0x9cbf, 0x9c04, 0x9b51, 0x9aa6, 0x9a01, 0x9964},
  {0xe528, 0xe481, 0xe3d4, 0xe320, 0xe264, 0xe1a0, 0xe0d4, 0xdfff, 0xdf21, 0xde3a, 0xdd49, 0xdc4e, 0xdb48, 0xda37, 0xd91b, 0xd7f4, 0xd6c2, 0xd583, 0xd439, 0xd2e3, 0xd182, 0xd015, 0xce9d, 0xcd1b, 0xcb8f, 0xc9fa, 0xc85e, 0xc6ba, 0xc510, 0xc362, 0xc1b2, 0xbfff, 0xbe4d, 0xbc9c, 0xbaee, 0xb945, 0xb7a1, 0xb604, 0xb46f, 0xb2e3, 0xb161, 0xafe9, 0xae7d, 0xad1b, 0xabc5, 0xaa7b, 0xa93d, 0xa80a, 0xa6e3, 0xa5c7, 0xa4b7, 0xa3b1, 0xa2b6, 0xa1c5, 0xa0dd, 0x9fff, 0x9f2b, 0x9e5e, 0x9d9b, 0x9cdf, 0x9c2a, 0x9b7d, 0x9ad7, 0x9a37},
  {0xe458, 0xe3b1, 0xe302, 0xe24d, 0xe190, 0xe0cc, 0xdfff, 0xdf2a, 0xde4d, 0xdd66, 0xdc76, 0xdb7d, 0xda7a, 0xd96c, 0xd854, 0xd731, 0xd604, 0xd4cc, 0xd389, 0xd23b, 0xd0e3, 0xcf80, 0xce13, 0xcc9e, 0xcb1f, 0xc998, 0xc80a, 0xc676, 0xc4dd, 0xc340, 0xc1a0, 0xbfff, 0xbe5e, 0xbcbf, 0xbb22, 0xb988, 0xb7f4, 0xb666, 0xb4e0, 0xb361, 0xb1eb, 0xb07e, 0xaf1c, 0xadc4, 0xac76, 0xab33, 0xa9fb, 0xa8cd, 0xa7ab, 0xa693, 0xa585, 0xa482, 0xa388, 0xa298, 0xa1b2, 0xa0d4, 0x9fff, 0x9f33, 0x9e6e, 0x9db2, 0x9cfc, 0x9c4e, 0x9ba6, 0x9b05},
  {0xe390, 0xe2e7, 0xe237, 0xe181, 0xe0c4, 0xdfff, 0xdf33, 0xde5e, 0xdd81, 0xdc9c, 0xdbae, 0xdab6, 0xd9b6, 0xd8ab, 0xd797, 0xd679, 0xd551, 0xd41f, 0xd2e3, 0xd19d, 0xd04e, 0xcef5, 0xcd93, 0xcc29, 0xcab6, 0xc93d, 0xc7bd, 0xc637, 0xc4ad, 0xc320, 0xc190, 0xbfff, 0xbe6e, 0xbcdf, 0xbb51, 0xb9c7, 0xb842, 0xb6c2, 0xb548, 0xb3d6, 0xb26b, 0xb10a, 0xafb1, 0xae61, 0xad1b, 0xabdf, 0xaaad, 0xa985, 0xa867, 0xa753, 0xa649, 0xa548, 0xa451, 0xa363, 0xa27d, 0xa1a0, 0xa0cc, 0x9fff, 0x9f3b, 0x9e7d, 0x9dc7, 0x9d18, 0x9c6f, 0x9bcc},
  {0xe2cd, 0xe224, 0xe173, 0xe0bd, 0xdfff, 0xdf3a, 0xde6e, 0xdd9a, 0xdcbe, 0xdbda, 0xdaee, 0xd9f9, 0xd8fb, 0xd7f4, 0xd6e4, 0xd5cb, 0xd4a8, 0xd37d, 0xd248, 0xd109, 0xcfc2, 0xce73, 0xcd1b, 0xcbbc, 0xca55, 0xc8e8, 0xc775, 0xc5fd, 0xc481, 0xc302, 0xc181, 0xbfff, 0xbe7d, 0xbcfc, 0xbb7d, 0xba01, 0xb889, 0xb716, 0xb5a9, 0xb443, 0xb2e3, 0xb18c, 0xb03c, 0xaef5, 0xadb7, 0xac82, 0xab56, 0xaa34, 0xa91a, 0xa80a, 0xa703, 0xa605, 0xa510, 0xa424, 0xa340, 0xa264, 0xa190, 0xa0c4, 0x9fff, 0x9f42, 0x9e8b, 0x9ddb, 0x9d31, 0x9c8e},
  {0xe211, 0xe167, 0xe0b6, 0xdfff, 0xdf42, 0xde7d, 0xddb1, 0xdcde, 0xdc04, 0xdb21, 0xda37, 0xd945, 0xd84a, 0xd746, 0xd63b, 0xd526, 0xd409, 0xd2e3, 0xd1b5, 0xd07e, 0xcf40, 0xcdf9, 0xccab, 0xcb56, 0xc9fa, 0xc899, 0xc732, 0xc5c7, 0xc459, 0xc2e7, 0xc174, 0xbfff, 0xbe8b, 0xbd17, 0xbba6, 0xba37, 0xb8cc, 0xb766, 0xb604, 0xb4a9, 0xb353, 0xb205, 0xb0bf, 0xaf80, 0xae4a, 0xad1b, 0xabf6, 0xaad8, 0xa9c4, 0xa8b8, 0xa7b5, 0xa6ba, 0xa5c7, 0xa4dd, 0xa3fb, 0xa320, 0xa24d, 0xa182, 0xa0bd, 0x9fff, 0x9f48, 0x9e98, 0x9ded, 0x9d49},
  {0xe15b, 0xe0b0, 0xdfff, 0xdf48, 0xde8b, 0xddc7, 0xdcfc, 0xdc2a, 0xdb51, 0xda70, 0xd988, 0xd898, 0xd7a1, 0xd6a1, 0xd59a, 0xd48a, 0xd372, 0xd252, 0xd12b, 0xcffb, 0xcec5, 0xcd87, 0xcc42, 0xcaf7, 0xc9a6, 0xc84f, 0xc6f4, 0xc595, 0xc432, 0xc2cd, 0xc167, 0xbfff, 0xbe98, 0xbd31, 0xbbcc, 0xba6a, 0xb90a, 0xb7af, 0xb659, 0xb508, 0xb3bd, 0xb278, 0xb13a, 0xb003, 0xaed4, 0xadac, 0xac8c, 0xab75, 0xaa65, 0xa95d, 0xa85e, 0xa766, 0xa676, 0xa58e, 0xa4ae, 0xa3d4, 0xa303, 0xa238, 0xa174, 0xa0b6, 0x9fff, 0x9f4f, 0x9ea4, 0x9dff},
  {0xe0aa, 0xdfff, 0xdf4e, 0xde98, 0xdddb, 0xdd17, 0xdc4e, 0xdb7d, 0xdaa5, 0xd9c7, 0xd8e1, 0xd7f4, 0xd700, 0xd604, 0xd501, 0xd3f6, 0xd2e3, 0xd1c9, 0xd0a8, 0xcf80, 0xce51, 0xcd1b, 0xcbdf, 0xca9d, 0xc956, 0xc80a, 0xc6ba, 0xc566, 0xc40f, 0xc2b6, 0xc15b, 0xbfff, 0xbea4, 0xbd49, 0xbbf0, 0xba99, 0xb945, 0xb7f4, 0xb6a8, 0xb561, 0xb41f, 0xb2e3, 0xb1ae, 0xb07e, 0xaf56, 0xae35, 0xad1b, 0xac09, 0xaafe, 0xa9fb, 0xa8ff, 0xa80a, 0xa71d, 0xa638, 0xa559, 0xa482, 0xa3b1, 0xa2e7, 0xa224, 0xa167, 0xa0b0, 0x9fff, 0x9f54, 0x9eaf},
  {0xdfff, 0xdf54, 0xdea4, 0xdded, 0xdd31, 0xdc6f, 0xdba6, 0xdad7, 0xda01, 0xd925, 0xd842, 0xd757, 0xd666, 0xd56e, 0xd46f, 0xd369, 0xd25c, 0xd148, 0xd02d, 0xcf0b, 0xcde4, 0xccb6, 0xcb82, 0xca49, 0xc90c, 0xc7c9, 0xc683, 0xc53a, 0xc3ed, 0xc29f, 0xc150, 0xbfff, 0xbeaf, 0xbd5f, 0xbc11, 0xbac5, 0xb97b, 0xb835, 0xb6f3, 0xb5b5, 0xb47c, 0xb349, 0xb21b, 0xb0f3, 0xafd2, 0xaeb7, 0xada3, 0xac96, 0xab8f, 0xaa90, 0xa998, 0xa8a7, 0xa7bd, 0xa6da, 0xa5fd, 0xa528, 0xa459, 0xa390, 0xa2ce, 0xa211, 0xa15b, 0xa0aa, 0x9fff, 0x9f5a},
  {0xdf5a, 0xdeaf, 0xddff, 0xdd49, 0xdc8d, 0xdbcc, 0xdb05, 0xda37, 0xd963, 0xd889, 0xd7a9, 0xd6c2, 0xd5d4, 0xd4e0, 0xd3e5, 0xd2e3, 0xd1db, 0xd0cd, 0xcfb8, 0xce9d, 0xcd7d, 0xcc56, 0xcb2b, 0xc9fa, 0xc8c5, 0xc78c, 0xc650, 0xc510, 0xc3ce, 0xc28a, 0xc145, 0xbfff, 0xbeb9, 0xbd74, 0xbc30, 0xbaee, 0xb9af, 0xb872, 0xb739, 0xb604, 0xb4d4, 0xb3a8, 0xb282, 0xb161, 0xb046, 0xaf32, 0xae23, 0xad1b, 0xac1a, 0xab1f, 0xaa2b, 0xa93d, 0xa856, 0xa775, 0xa69b, 0xa5c7, 0xa4fa, 0xa433, 0xa371, 0xa2b6, 0xa200, 0xa150, 0xa0a5, 0x9fff}
};

uint16_t atan2(uint8_t x, uint8_t y){
  return atan_table[(x>>2) & 0x3F][(y>>2) & 0x3F];
}
*/

/*
uint8_t atan2(uint8_t x, uint8_t y){
  return atan_table[(x>>3) & 0x1F][(y>>3) & 0x1F];
}
*/

Спасибо, буду иметь ввиду

Изменено пользователем Zalman_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Мур сказал:

Посмотрели?  Что не понравилось?...

Пока что просто глазом пробежался
Даже не запускал
В ближайшее время отпишусь, как запущу

Спасибо за помощь и предоставленные исходники кода и модели

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26.01.2021 в 13:02, Мур сказал:

Даю с бенчем...    Критикуйте!!!   Вроде шустренко....  Извините, тут в VHDL  (((

ATAN2.ZIP 17 kB · 7 скачиваний

Доброго времени суток

Добрался до того, что вы скинули

В архиве два файла

atan2.vhd
Trigonometric_Function1.vhd

1) Открыв оба файла в описании atan2.vhd написано, что "atan2 не корректен по предварительной подготовке входных данных" и лучше брать Trigonometric_Function1.vhd. Немного поковырявшись понял, что видимо генерируемый код из Simulink в файле atan2.vhd криво данные подтягивает, поэтому Вы делали свои файлы с входными данным *.dat и писали тестбенч, который все это оптимально загружает.
Верна ли моя догадка?

P.S.
В самом низу писал про enport. Связано ли "atan2 не корректен по предварительной подготовке входных данных" с портом enport?
Исходя из этого и просмотра кода, файл atan2.vhd является посредником перед основным модулем Trigonometric_Function1.vhd, который просто подготавливает данные для отправки в Trigonometric_Function1.vhd. Правильно ли я понимаю, что atan2.vhd не является необходимым и им можно пренебречь, тем самым использовать в качестве основного ядра atan2 файл Trigonometric_Function1.vhd ?

2) Запустил параллельно модель и решил посмотреть, что сделает Simulink в плане генерации кода
Он сгенерил такие же два файла, то есть понял откуда ноги растут

Попытался смоделировать Ваш код
ModelSim сначала ругался, однако, для корректной компиляции нужно было скомпилировать два файла тестбенча, а файлы atan2.vhd и Trigonometric_Function1.vhd поместить в папку, которую создает ModelSim, то есть work.
Поместил, компиляция прошла успешно, однако, при попытке симуляции вылезла ошибка следующего вида "Error: (vsim-3173) Entity '*ATAN2/work.atan2' has no architecture."
Как ее можно исправить? В VHDL не силен, лишь могу прочитать и то довольно примерно. 
Почему не смоделировать код на Verilog и пользоваться? - Потому что как понял, в Вашем коде задержка составляет 3 такта, вместо 14 тактов, которые есть в коде, который создает Simulink.

3) И есть немного вопросов по модели и коду одновременно.
Порт enport. Какую функцию он выполняет? В модели он выполняет функцию тактирующего сигнала для задержек, а вот что делает в коде? Исходя из кода он является разрешающим и судя по коду на порт clk и enport должен приходить один и тот же тактовый сигнал, так как если enport будет тактироваться иначе, то передача данных в Trigonometric_Function1.vhd будет некорректной
Правильно ли понимаю данный момент?

Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, Zalman_ said:

Доброго времени суток

Заранее спасибо!

1. Все из Матлаба.  Я только косил избыточность.. Воевал с МоделСим, у которого свои понятия о приемлемости...   atan2.vhd не является необходимым и им можно пренебречь!!!  Верно!

2. Для разгона дизайна внесено дополнительно 11 регистров, чтобы поднять тактовую частоту.(В вашем Verilog исходнике следует сделать аналогично).  У меня этот набор с бенчем должен симулироваться без проблем.

3. enport нужен был для обозначения момента пуска данных на вход.  Тут смело можно брать как хочется! Этот набор исходников интересен для просмотра результатов симуляции. Не более того! Можно видеть соответствие симуляции в Simulik  и в ModelSim во всем диапазоне данных.

4. Посмотрите в RTL вьювере где стоят регистры и сделайте аналогично в версии Verilog.(Подсказка)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Мур сказал:

1. Все из Матлаба.  Я только косил избыточность.. Воевал с МоделСим, у которого свои понятия о приемлемости...   atan2.vhd не является необходимым и им можно пренебречь!!!  Верно!

2. Для разгона дизайна внесено дополнительно 11 регистров, чтобы поднять тактовую частоту.(В вашем Verilog исходнике следует сделать аналогично).  У меня этот набор с бенчем должен симулироваться без проблем.

3. enport нужен был для обозначения момента пуска данных на вход.  Тут смело можно брать как хочется! Этот набор исходников интересен для просмотра результатов симуляции. Не более того! Можно видеть соответствие симуляции в Simulik  и в ModelSim во всем диапазоне данных.

4. Посмотрите в RTL вьювере где стоят регистры и сделайте аналогично в версии Verilog.(Подсказка)

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

реализация будет зависеть от задачи.

скорость, латентность, необходимость поточной непрерывной обработки и т.д.

а так из самых производительных на данный момент - тригонометрия реализуется либо на  (если нужна универсальность) CORDIC, либо на многочленах Чебышева. главное знать какую точность необходимо обеспечивать на выходе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29.01.2021 в 08:53, Мур сказал:

1. Все из Матлаба.  Я только косил избыточность.. Воевал с МоделСим, у которого свои понятия о приемлемости...   atan2.vhd не является необходимым и им можно пренебречь!!!  Верно!

2. Для разгона дизайна внесено дополнительно 11 регистров, чтобы поднять тактовую частоту.(В вашем Verilog исходнике следует сделать аналогично).  У меня этот набор с бенчем должен симулироваться без проблем.

3. enport нужен был для обозначения момента пуска данных на вход.  Тут смело можно брать как хочется! Этот набор исходников интересен для просмотра результатов симуляции. Не более того! Можно видеть соответствие симуляции в Simulik  и в ModelSim во всем диапазоне данных.

4. Посмотрите в RTL вьювере где стоят регистры и сделайте аналогично в версии Verilog.(Подсказка)

Добрый день! 

Добрался до atan2
Возник вопрос 
В модели, которую Вы кидали ранее, тип данных на входе atan2 - int16. С ним все работает прекрасно
При попытке поменять его на int32, int64, fixdt выдает следующую ошибку

"Data type mismatch. 'Input Port 1' of 'untitled/atan2' expects a signal of data type 'int16'. However, it is driven by a signal of data type 'int32'."

Как я понял atan2 ждет данные в формате int16 и больше никакой тип данных не принимает. Это странно, так как блок Trigonometric Function принимает формат данных выше int16, что сказано в документации. 
Встречались ли вы с данной ошибкой?
Если да, то как удалось ее решить?



UPD: Решение
 

На будущее
Есть блоки Data Type Conversion, в них обычно задается тот тип данных, который нужен на их выходе и обычно все работает и заканчивается на них, но в этой модели есть фокус
Фокус заключается в входах и выходах подсистемы atan2, то есть если обычно (все время до этого на моей практике) входы и выходы подсистемы автоматически принимали тип данных от предыдущих блоков, то здесь тип данных на входах и выходах был четко задан, поэтому и вылезала такая ошибка.
Следовательно, решения два:
1) либо поставить на входах и выходах в Signal Attributes -> Data Type -> "Inherit: Auto"; - на мой взгляд самый универсальный и оптимальный вариант
2) либо в случае жесткой необходимости "прописывать" тип данных как в Data Type Conversion, так и в входах и выходах подсистемы Atan2

Изменено пользователем Zalman_
Нашел решение

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Zalman_ said:

Добрый день! 

Добрался до atan2

Конечно встречался!..  И тут надо много потеть, пока станет понятно как корректно менять разрядность произвольным образом.

Я дрессировал наших специально обученных математиков и теперь пол года как тема ушла в историю. Максимум 32 разряда у них.

Сунуться к ним сейчас не могу в связи с сильной занятостью...  Уж извините!

Да и рутина текущая форсировать узкие места после MatLab требует внимания...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть же CORDIC в симулинке.

https://www.mathworks.com/help/dsp/ref/complextomagnitudeanglehdloptimized.html

Вычисляет от любой входной разрядности типа fixdt().

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11.03.2021 в 19:31, petrov сказал:

Есть же CORDIC в симулинке.

https://www.mathworks.com/help/dsp/ref/complextomagnitudeanglehdloptimized.html

Вычисляет от любой входной разрядности типа fixdt().

Да, спасибо, я его уже чуть позже нашел 

Тоже хороший вариант)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...