77 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76,
78 0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38,
79 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C,
80 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48,
81 0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23,
82 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82,
83 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C,
84 0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61,
85 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B,
86 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1,
87 0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66,
88 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7,
89 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA,
90 0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71,
91 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8,
92 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7,
93 0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2,
94 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90,
95 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB,
96 0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF,
97 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B,
98 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64,
99 0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A,
100 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A,
101 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02,
102 0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D,
103 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72,
104 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34,
105 0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8,
106 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4,
107 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00,
108 0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0
118 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8,
119 0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B,
120 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1,
121 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F,
122 0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D,
123 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5,
124 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3,
125 0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51,
126 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96,
127 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C,
128 0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70,
129 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8,
130 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC,
131 0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2,
132 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9,
133 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17,
134 0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3,
135 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E,
136 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49,
137 0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9,
138 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01,
139 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48,
140 0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19,
141 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64,
142 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5,
143 0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69,
144 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E,
145 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC,
146 0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB,
147 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9,
148 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2,
149 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91
159 0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, 0xE2E22BFB, 0x9E9EFAC8,
160 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B,
161 0x3C3C57D6, 0x93938A32, 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1,
162 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, 0xB0B0B306, 0x7575DE3F,
163 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D,
164 0xAEAE2C6D, 0x7F7FABC1, 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5,
165 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, 0x3131272C, 0x808065A3,
166 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51,
167 0x2A2A3638, 0xC4C49CB0, 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796,
168 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, 0x6767C027, 0xE9E9AF8C,
169 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70,
170 0x29294CCA, 0xF0F035E3, 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8,
171 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, 0xC8C81DC3, 0x9999FFCC,
172 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2,
173 0xB5B53D79, 0x09090F0C, 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9,
174 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, 0xEDEDD07A, 0x4343FC17,
175 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3,
176 0x5656E70B, 0xE3E3DA72, 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E,
177 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, 0x8181942A, 0x91910149,
178 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9,
179 0x7878AEC5, 0xC5C56D39, 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01,
180 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, 0x55559DF9, 0x7E7E5A48,
181 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519,
182 0x0606F48D, 0x404086E5, 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64,
183 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, 0x2D2D333C, 0x3030D6A5,
184 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969,
185 0xD9D97929, 0x8686912E, 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E,
186 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, 0xC1C112CF, 0x8585EBDC,
187 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB,
188 0xABABA212, 0x6F6F3EA2, 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9,
189 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, 0x04047FF6, 0x272746C2,
190 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91
200 0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, 0xA3658080, 0x76DFE4E4,
201 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A,
202 0x0D54E6E6, 0xC6432020, 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141,
203 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, 0x94B1FBFB, 0x485A7E7E,
204 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060,
205 0x1945FDFD, 0x5BA33A3A, 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757,
206 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, 0x9B53AAAA, 0x7C635D5D,
207 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7,
208 0xC0F09090, 0x8CAFE9E9, 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656,
209 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, 0xB499C3C3, 0xF1975B5B,
210 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8,
211 0xCCFF9999, 0x95EA1414, 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3,
212 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, 0xBF7E9595, 0xBA207D7D,
213 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB,
214 0x81FB0F0F, 0x793DB5B5, 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282,
215 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, 0x86135050, 0xE730F7F7,
216 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B,
217 0x410B9F9F, 0x7B8B0202, 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC,
218 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, 0xB1C72B2B, 0xAB6F8E8E,
219 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9,
220 0x91EF1313, 0x85FE0808, 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272,
221 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, 0x6929A9A9, 0x647D4F4F,
222 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED,
223 0xAC87D1D1, 0x7F8E0505, 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5,
224 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, 0x4C5F7979, 0x02B6B7B7,
225 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2,
226 0x57AC3333, 0xC718CFCF, 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3,
227 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, 0x99E51D1D, 0x34392323,
228 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA,
229 0xC8FA9E9E, 0xA882D6D6, 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF,
230 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, 0x0FE25151, 0x00000000,
231 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8
241 0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, 0xE2FBE22B, 0x9EC89EFA,
242 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7,
243 0x3CD63C57, 0x9332938A, 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783,
244 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, 0xB006B0B3, 0x753F75DE,
245 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0,
246 0xAE6DAE2C, 0x7FC17FAB, 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA,
247 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, 0x312C3127, 0x80A38065,
248 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F,
249 0x2A382A36, 0xC4B0C49C, 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07,
250 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, 0x672767C0, 0xE98CE9AF,
251 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C,
252 0x29CA294C, 0xF0E3F035, 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96,
253 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, 0xC8C3C81D, 0x99CC99FF,
254 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E,
255 0xB579B53D, 0x090C090F, 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD,
256 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, 0xED7AEDD0, 0x431743FC,
257 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71,
258 0x560B56E7, 0xE372E3DA, 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85,
259 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, 0x812A8194, 0x91499101,
260 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5,
261 0x78C578AE, 0xC539C56D, 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B,
262 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, 0x55F9559D, 0x7E487E5A,
263 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45,
264 0x068D06F4, 0x40E54086, 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D,
265 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, 0x2D3C2D33, 0x30A530D6,
266 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929,
267 0xD929D979, 0x862E8691, 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D,
268 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, 0xC1CFC112, 0x85DC85EB,
269 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F,
270 0xAB12ABA2, 0x6FA26F3E, 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9,
271 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, 0x04F6047F, 0x27C22746,
272 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF
282 0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, 0x6580A365, 0xDFE476DF,
283 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836,
284 0x54E60D54, 0x4320C643, 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77,
285 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, 0xB1FB94B1, 0x5A7E485A,
286 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5,
287 0x45FD1945, 0xA33A5BA3, 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216,
288 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, 0x53AA9B53, 0x635D7C63,
289 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123,
290 0xF090C0F0, 0xAFE98CAF, 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7,
291 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, 0x99C3B499, 0x975BF197,
292 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB,
293 0xFF99CCFF, 0xEA1495EA, 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C,
294 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, 0x7E95BF7E, 0x207DBA20,
295 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137,
296 0xFB0F81FB, 0x3DB5793D, 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE,
297 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, 0x13508613, 0x30F7E730,
298 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252,
299 0x0B9F410B, 0x8B027B8B, 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4,
300 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, 0xC72BB1C7, 0x6F8EAB6F,
301 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A,
302 0xEF1391EF, 0xFE0885FE, 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB,
303 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, 0x29A96929, 0x7D4F647D,
304 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0,
305 0x87D1AC87, 0x8E057F8E, 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8,
306 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, 0x5F794C5F, 0xB6B702B6,
307 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38,
308 0xAC3357AC, 0x18CFC718, 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA,
309 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, 0xE51D99E5, 0x39233439,
310 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6,
311 0xFA9EC8FA, 0x82D6A882, 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D,
312 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, 0xE2510FE2, 0x00000000,
313 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8
385 $this->key_length = 16;
388 $this->key_length = 24;
391 $this->key_length = 32;
394 parent::setKeyLength($length);
405 if (isset($this->kl[
'key']) && $this->key === $this->kl[
'key']) {
409 $this->kl = array(
'key' => $this->key);
412 $le_longs = unpack(
'V*', $this->key);
413 $key = unpack(
'C*', $this->key);
421 $K = $S0 = $S1 = $S2 = $S3 = array();
423 switch (strlen($this->key)) {
425 list($s7, $s6, $s5, $s4) = $this->
_mdsrem($le_longs[1], $le_longs[2]);
426 list($s3, $s2, $s1, $s0) = $this->
_mdsrem($le_longs[3], $le_longs[4]);
427 for (
$i = 0, $j = 1;
$i < 40;
$i+= 2, $j+= 2) {
432 $B = $m0[$q0[$q0[$j] ^ $key[13]] ^ $key[5]] ^
433 $m1[$q0[$q1[$j] ^ $key[14]] ^ $key[6]] ^
434 $m2[$q1[$q0[$j] ^ $key[15]] ^ $key[7]] ^
435 $m3[$q1[$q1[$j] ^ $key[16]] ^ $key[8]];
436 $B = ($B << 8) | ($B >> 24 & 0xff);
438 $K[] = (($A+= $B) << 9 | $A >> 23 & 0x1ff);
440 for (
$i = 0;
$i < 256; ++
$i) {
441 $S0[
$i] = $m0[$q0[$q0[
$i] ^ $s4] ^ $s0];
442 $S1[
$i] = $m1[$q0[$q1[
$i] ^ $s5] ^ $s1];
443 $S2[
$i] = $m2[$q1[$q0[
$i] ^ $s6] ^ $s2];
444 $S3[
$i] = $m3[$q1[$q1[
$i] ^ $s7] ^ $s3];
448 list($sb, $sa, $s9, $s8) = $this->
_mdsrem($le_longs[1], $le_longs[2]);
449 list($s7, $s6, $s5, $s4) = $this->
_mdsrem($le_longs[3], $le_longs[4]);
450 list($s3, $s2, $s1, $s0) = $this->
_mdsrem($le_longs[5], $le_longs[6]);
451 for (
$i = 0, $j = 1;
$i < 40;
$i+= 2, $j+= 2) {
456 $B = $m0[$q0[$q0[$q1[$j] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^
457 $m1[$q0[$q1[$q1[$j] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^
458 $m2[$q1[$q0[$q0[$j] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^
459 $m3[$q1[$q1[$q0[$j] ^ $key[24]] ^ $key[16]] ^ $key[8]];
460 $B = ($B << 8) | ($B >> 24 & 0xff);
462 $K[] = (($A+= $B) << 9 | $A >> 23 & 0x1ff);
464 for (
$i = 0;
$i < 256; ++
$i) {
465 $S0[
$i] = $m0[$q0[$q0[$q1[
$i] ^ $s8] ^ $s4] ^ $s0];
466 $S1[
$i] = $m1[$q0[$q1[$q1[
$i] ^ $s9] ^ $s5] ^ $s1];
467 $S2[
$i] = $m2[$q1[$q0[$q0[
$i] ^ $sa] ^ $s6] ^ $s2];
468 $S3[
$i] = $m3[$q1[$q1[$q0[
$i] ^ $sb] ^ $s7] ^ $s3];
472 list($sf, $se, $sd,
$sc) = $this->
_mdsrem($le_longs[1], $le_longs[2]);
473 list($sb, $sa, $s9, $s8) = $this->
_mdsrem($le_longs[3], $le_longs[4]);
474 list($s7, $s6, $s5, $s4) = $this->
_mdsrem($le_longs[5], $le_longs[6]);
475 list($s3, $s2, $s1, $s0) = $this->
_mdsrem($le_longs[7], $le_longs[8]);
476 for (
$i = 0, $j = 1;
$i < 40;
$i+= 2, $j+= 2) {
481 $B = $m0[$q0[$q0[$q1[$q1[$j] ^ $key[29]] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^
482 $m1[$q0[$q1[$q1[$q0[$j] ^ $key[30]] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^
483 $m2[$q1[$q0[$q0[$q0[$j] ^ $key[31]] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^
484 $m3[$q1[$q1[$q0[$q1[$j] ^ $key[32]] ^ $key[24]] ^ $key[16]] ^ $key[8]];
485 $B = ($B << 8) | ($B >> 24 & 0xff);
487 $K[] = (($A+= $B) << 9 | $A >> 23 & 0x1ff);
489 for (
$i = 0;
$i < 256; ++
$i) {
490 $S0[
$i] = $m0[$q0[$q0[$q1[$q1[
$i] ^
$sc] ^ $s8] ^ $s4] ^ $s0];
491 $S1[
$i] = $m1[$q0[$q1[$q1[$q0[
$i] ^ $sd] ^ $s9] ^ $s5] ^ $s1];
492 $S2[
$i] = $m2[$q1[$q0[$q0[$q0[
$i] ^ $se] ^ $sa] ^ $s6] ^ $s2];
493 $S3[
$i] = $m3[$q1[$q1[$q0[$q1[
$i] ^ $sf] ^ $sb] ^ $s7] ^ $s3];
515 for (
$i = 0;
$i < 8; ++
$i) {
517 $t = 0xff & ($B >> 24);
520 $B = ($B << 8) | (0xff & ($A >> 24));
531 $B ^=
$t ^ ($u << 16);
534 $u^= 0x7fffffff & (
$t >> 1);
542 $B^= ($u << 24) | ($u << 8);
568 $R0 = $K[0] ^
$in[1];
569 $R1 = $K[1] ^ $in[2];
570 $R2 = $K[2] ^ $in[3];
571 $R3 = $K[3] ^ $in[4];
575 $t0 = $S0[ $R0 & 0xff] ^
576 $S1[($R0 >> 8) & 0xff] ^
577 $S2[($R0 >> 16) & 0xff] ^
578 $S3[($R0 >> 24) & 0xff];
579 $t1 = $S0[($R1 >> 24) & 0xff] ^
581 $S2[($R1 >> 8) & 0xff] ^
582 $S3[($R1 >> 16) & 0xff];
583 $R2^= $t0 + $t1 + $K[++$ki];
584 $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31);
585 $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ($t0 + ($t1 << 1) + $K[++$ki]);
587 $t0 = $S0[ $R2 & 0xff] ^
588 $S1[($R2 >> 8) & 0xff] ^
589 $S2[($R2 >> 16) & 0xff] ^
590 $S3[($R2 >> 24) & 0xff];
591 $t1 = $S0[($R3 >> 24) & 0xff] ^
593 $S2[($R3 >> 8) & 0xff] ^
594 $S3[($R3 >> 16) & 0xff];
595 $R0^= ($t0 + $t1 + $K[++$ki]);
596 $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31);
597 $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ($t0 + ($t1 << 1) + $K[++$ki]);
601 return pack(
"V4", $K[4] ^ $R2,
624 $R0 = $K[4] ^
$in[1];
625 $R1 = $K[5] ^ $in[2];
626 $R2 = $K[6] ^ $in[3];
627 $R3 = $K[7] ^ $in[4];
631 $t0 = $S0[$R0 & 0xff] ^
632 $S1[$R0 >> 8 & 0xff] ^
633 $S2[$R0 >> 16 & 0xff] ^
634 $S3[$R0 >> 24 & 0xff];
635 $t1 = $S0[$R1 >> 24 & 0xff] ^
637 $S2[$R1 >> 8 & 0xff] ^
638 $S3[$R1 >> 16 & 0xff];
639 $R3^= $t0 + ($t1 << 1) + $K[--$ki];
640 $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31;
641 $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ($t0 + $t1 + $K[--$ki]);
643 $t0 = $S0[$R2 & 0xff] ^
644 $S1[$R2 >> 8 & 0xff] ^
645 $S2[$R2 >> 16 & 0xff] ^
646 $S3[$R2 >> 24 & 0xff];
647 $t1 = $S0[$R3 >> 24 & 0xff] ^
649 $S2[$R3 >> 8 & 0xff] ^
650 $S3[$R3 >> 16 & 0xff];
651 $R1^= $t0 + ($t1 << 1) + $K[--$ki];
652 $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31;
653 $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ($t0 + $t1 + $K[--$ki]);
657 return pack(
"V4", $K[0] ^ $R2,
672 $lambda_functions =& self::_getLambdaFunctions();
676 $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
679 $code_hash =
"Crypt_Twofish, {$this->mode}";
680 if ($gen_hi_opt_code) {
684 if (!isset($lambda_functions[$code_hash])) {
686 case $gen_hi_opt_code:
689 static $S0, $S1, $S2, $S3; 691 for ($i = 0; $i < 256; ++$i) { 692 $S0[] = (int)$self->S0[$i]; 693 $S1[] = (int)$self->S1[$i]; 694 $S2[] = (int)$self->S2[$i]; 695 $S3[] = (int)$self->S3[$i]; 702 for (
$i = 0;
$i < 40; ++
$i) {
710 list(' . implode(
',', $K) .
') = $self->K; 716 $in = unpack("V4", $in); 717 $R0 = '.$K[0].
' ^ $in[1]; 718 $R1 = '.$K[1].
' ^ $in[2]; 719 $R2 = '.$K[2].
' ^ $in[3]; 720 $R3 = '.$K[3].
' ^ $in[4]; 722 for ($ki = 7,
$i = 0;
$i < 8; ++
$i) {
724 $t0 = $S0[ $R0 & 0xff] ^ 725 $S1[($R0 >> 8) & 0xff] ^ 726 $S2[($R0 >> 16) & 0xff] ^ 727 $S3[($R0 >> 24) & 0xff]; 728 $t1 = $S0[($R1 >> 24) & 0xff] ^ 730 $S2[($R1 >> 8) & 0xff] ^ 731 $S3[($R1 >> 16) & 0xff]; 732 $R2^= ($t0 + $t1 + '.$K[++$ki].
'); 733 $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31); 734 $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ($t0 + ($t1 << 1) + '.$K[++$ki].
'); 736 $t0 = $S0[ $R2 & 0xff] ^ 737 $S1[($R2 >> 8) & 0xff] ^ 738 $S2[($R2 >> 16) & 0xff] ^ 739 $S3[($R2 >> 24) & 0xff]; 740 $t1 = $S0[($R3 >> 24) & 0xff] ^ 742 $S2[($R3 >> 8) & 0xff] ^ 743 $S3[($R3 >> 16) & 0xff]; 744 $R0^= ($t0 + $t1 + '.$K[++$ki].
'); 745 $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31); 746 $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ($t0 + ($t1 << 1) + '.$K[++$ki].
'); 750 $in = pack("V4", '.$K[4].
' ^ $R2, 758 $in = unpack("V4", $in); 759 $R0 = '.$K[4].
' ^ $in[1]; 760 $R1 = '.$K[5].
' ^ $in[2]; 761 $R2 = '.$K[6].
' ^ $in[3]; 762 $R3 = '.$K[7].
' ^ $in[4]; 764 for ($ki = 40,
$i = 0;
$i < 8; ++
$i) {
766 $t0 = $S0[$R0 & 0xff] ^ 767 $S1[$R0 >> 8 & 0xff] ^ 768 $S2[$R0 >> 16 & 0xff] ^ 769 $S3[$R0 >> 24 & 0xff]; 770 $t1 = $S0[$R1 >> 24 & 0xff] ^ 772 $S2[$R1 >> 8 & 0xff] ^ 773 $S3[$R1 >> 16 & 0xff]; 774 $R3^= $t0 + ($t1 << 1) + '.$K[--$ki].
'; 775 $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31; 776 $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ($t0 + $t1 + '.$K[--$ki].
'); 778 $t0 = $S0[$R2 & 0xff] ^ 779 $S1[$R2 >> 8 & 0xff] ^ 780 $S2[$R2 >> 16 & 0xff] ^ 781 $S3[$R2 >> 24 & 0xff]; 782 $t1 = $S0[$R3 >> 24 & 0xff] ^ 784 $S2[$R3 >> 8 & 0xff] ^ 785 $S3[$R3 >> 16 & 0xff]; 786 $R1^= $t0 + ($t1 << 1) + '.$K[--$ki].
'; 787 $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31; 788 $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ($t0 + $t1 + '.$K[--$ki].
'); 792 $in = pack("V4", '.$K[0].
' ^ $R2, 800 'init_crypt' => $init_crypt,
801 'init_encrypt' =>
'',
802 'init_decrypt' =>
'',
803 'encrypt_block' => $encrypt_block,
804 'decrypt_block' => $decrypt_block
808 $this->inline_crypt = $lambda_functions[$code_hash];
_mdsrem($A, $B)
_mdsrem function using by the twofish cipher algorithm
Pure-PHP implementation of Twofish.
_hashInlineCryptFunction($bytes)
Generates a digest from $bytes.
setKeyLength($length)
Sets the key length.
Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic...
_decryptBlock($in)
Decrypts a block.
_setupKey()
Setup the key (expansion)
_createInlineCryptFunction($cipher_code)
Creates the performance-optimized function for en/decrypt()
_encryptBlock($in)
Encrypts a block.
if(php_sapi_name() !='cli') $in
Base Class for all * cipher classes.
_setupInlineCrypt()
Setup the performance-optimized function for de/encrypt()