Initial commit
[hashcat.git] / amd / m06100_a0.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _WHIRLPOOL_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #ifdef  VLIW1
12 #define VECT_SIZE1
13 #endif
14
15 #ifdef  VLIW4
16 #define VECT_SIZE2
17 #endif
18
19 #ifdef  VLIW5
20 #define VECT_SIZE2
21 #endif
22
23 #define DGST_R0 0
24 #define DGST_R1 1
25 #define DGST_R2 2
26 #define DGST_R3 3
27
28 #include "include/kernel_functions.c"
29 #include "types_amd.c"
30 #include "common_amd.c"
31 #include "include/rp_gpu.h"
32 #include "rp_amd.c"
33
34 #ifdef  VECT_SIZE1
35 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
36 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
37 #endif
38
39 #ifdef  VECT_SIZE2
40 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
41 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
42 #endif
43
44 #define R 10
45
46 #ifdef VECT_SIZE1
47 #define BOX(S,n,i) u32x ((S)[(n)][(i)])
48 #endif
49
50 #ifdef VECT_SIZE2
51 #define BOX(S,n,i) u32x ((S)[(n)][(i).s0], (S)[(n)][(i).s1])
52 #endif
53
54 __constant u32 Ch[8][256] =
55 {
56   {
57     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
58     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
59     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
60     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
61     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
62     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
63     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
64     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
65     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
66     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
67     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
68     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
69     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
70     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
71     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
72     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
73     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
74     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
75     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
76     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
77     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
78     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
79     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
80     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
81     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
82     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
83     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
84     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
85     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
86     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
87     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
88     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
89     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
90     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
91     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
92     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
93     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
94     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
95     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
96     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
97     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
98     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
99     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
100     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
101     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
102     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
103     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
104     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
105     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
106     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
107     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
108     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
109     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
110     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
111     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
112     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
113     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
114     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
115     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
116     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
117     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
118     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
119     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
120     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
121   },
122   {
123     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
124     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
125     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
126     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
127     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
128     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
129     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
130     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
131     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
132     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
133     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
134     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
135     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
136     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
137     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
138     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
139     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
140     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
141     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
142     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
143     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
144     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
145     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
146     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
147     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
148     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
149     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
150     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
151     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
152     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
153     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
154     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
155     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
156     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
157     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
158     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
159     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
160     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
161     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
162     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
163     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
164     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
165     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
166     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
167     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
168     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
169     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
170     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
171     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
172     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
173     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
174     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
175     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
176     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
177     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
178     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
179     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
180     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
181     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
182     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
183     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
184     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
185     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
186     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
187   },
188   {
189     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
190     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
191     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
192     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
193     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
194     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
195     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
196     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
197     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
198     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
199     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
200     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
201     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
202     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
203     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
204     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
205     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
206     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
207     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
208     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
209     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
210     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
211     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
212     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
213     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
214     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
215     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
216     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
217     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
218     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
219     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
220     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
221     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
222     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
223     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
224     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
225     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
226     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
227     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
228     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
229     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
230     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
231     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
232     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
233     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
234     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
235     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
236     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
237     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
238     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
239     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
240     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
241     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
242     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
243     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
244     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
245     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
246     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
247     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
248     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
249     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
250     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
251     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
252     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
253   },
254   {
255     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
256     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
257     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
258     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
259     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
260     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
261     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
262     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
263     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
264     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
265     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
266     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
267     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
268     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
269     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
270     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
271     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
272     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
273     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
274     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
275     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
276     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
277     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
278     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
279     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
280     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
281     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
282     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
283     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
284     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
285     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
286     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
287     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
288     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
289     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
290     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
291     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
292     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
293     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
294     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
295     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
296     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
297     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
298     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
299     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
300     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
301     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
302     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
303     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
304     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
305     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
306     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
307     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
308     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
309     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
310     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
311     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
312     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
313     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
314     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
315     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
316     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
317     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
318     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
319   },
320   {
321     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
322     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
323     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
324     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
325     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
326     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
327     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
328     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
329     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
330     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
331     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
332     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
333     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
334     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
335     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
336     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
337     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
338     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
339     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
340     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
341     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
342     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
343     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
344     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
345     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
346     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
347     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
348     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
349     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
350     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
351     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
352     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
353     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
354     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
355     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
356     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
357     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
358     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
359     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
360     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
361     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
362     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
363     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
364     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
365     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
366     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
367     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
368     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
369     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
370     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
371     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
372     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
373     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
374     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
375     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
376     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
377     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
378     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
379     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
380     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
381     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
382     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
383     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
384     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
385   },
386   {
387     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
388     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
389     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
390     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
391     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
392     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
393     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
394     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
395     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
396     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
397     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
398     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
399     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
400     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
401     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
402     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
403     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
404     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
405     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
406     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
407     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
408     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
409     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
410     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
411     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
412     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
413     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
414     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
415     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
416     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
417     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
418     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
419     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
420     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
421     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
422     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
423     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
424     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
425     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
426     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
427     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
428     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
429     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
430     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
431     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
432     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
433     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
434     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
435     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
436     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
437     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
438     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
439     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
440     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
441     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
442     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
443     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
444     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
445     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
446     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
447     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
448     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
449     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
450     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
451   },
452   {
453     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
454     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
455     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
456     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
457     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
458     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
459     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
460     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
461     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
462     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
463     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
464     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
465     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
466     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
467     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
468     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
469     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
470     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
471     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
472     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
473     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
474     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
475     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
476     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
477     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
478     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
479     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
480     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
481     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
482     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
483     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
484     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
485     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
486     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
487     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
488     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
489     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
490     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
491     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
492     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
493     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
494     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
495     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
496     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
497     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
498     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
499     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
500     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
501     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
502     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
503     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
504     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
505     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
506     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
507     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
508     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
509     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
510     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
511     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
512     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
513     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
514     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
515     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
516     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
517   },
518   {
519     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
520     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
521     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
522     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
523     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
524     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
525     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
526     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
527     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
528     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
529     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
530     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
531     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
532     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
533     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
534     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
535     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
536     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
537     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
538     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
539     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
540     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
541     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
542     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
543     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
544     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
545     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
546     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
547     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
548     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
549     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
550     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
551     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
552     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
553     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
554     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
555     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
556     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
557     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
558     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
559     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
560     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
561     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
562     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
563     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
564     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
565     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
566     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
567     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
568     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
569     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
570     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
571     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
572     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
573     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
574     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
575     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
576     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
577     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
578     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
579     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
580     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
581     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
582     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
583   }
584 };
585
586 __constant u32 Cl[8][256] =
587 {
588   {
589     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
590     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
591     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
592     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
593     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
594     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
595     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
596     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
597     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
598     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
599     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
600     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
601     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
602     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
603     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
604     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
605     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
606     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
607     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
608     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
609     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
610     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
611     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
612     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
613     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
614     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
615     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
616     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
617     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
618     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
619     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
620     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
621     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
622     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
623     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
624     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
625     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
626     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
627     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
628     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
629     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
630     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
631     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
632     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
633     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
634     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
635     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
636     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
637     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
638     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
639     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
640     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
641     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
642     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
643     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
644     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
645     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
646     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
647     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
648     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
649     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
650     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
651     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
652     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
653   },
654   {
655     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
656     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
657     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
658     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
659     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
660     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
661     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
662     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
663     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
664     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
665     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
666     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
667     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
668     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
669     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
670     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
671     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
672     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
673     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
674     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
675     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
676     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
677     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
678     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
679     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
680     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
681     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
682     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
683     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
684     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
685     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
686     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
687     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
688     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
689     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
690     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
691     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
692     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
693     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
694     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
695     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
696     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
697     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
698     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
699     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
700     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
701     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
702     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
703     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
704     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
705     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
706     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
707     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
708     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
709     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
710     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
711     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
712     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
713     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
714     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
715     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
716     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
717     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
718     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
719   },
720   {
721     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
722     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
723     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
724     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
725     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
726     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
727     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
728     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
729     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
730     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
731     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
732     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
733     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
734     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
735     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
736     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
737     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
738     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
739     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
740     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
741     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
742     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
743     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
744     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
745     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
746     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
747     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
748     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
749     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
750     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
751     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
752     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
753     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
754     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
755     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
756     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
757     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
758     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
759     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
760     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
761     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
762     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
763     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
764     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
765     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
766     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
767     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
768     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
769     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
770     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
771     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
772     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
773     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
774     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
775     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
776     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
777     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
778     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
779     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
780     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
781     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
782     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
783     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
784     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
785   },
786   {
787     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
788     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
789     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
790     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
791     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
792     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
793     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
794     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
795     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
796     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
797     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
798     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
799     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
800     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
801     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
802     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
803     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
804     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
805     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
806     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
807     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
808     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
809     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
810     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
811     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
812     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
813     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
814     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
815     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
816     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
817     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
818     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
819     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
820     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
821     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
822     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
823     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
824     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
825     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
826     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
827     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
828     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
829     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
830     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
831     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
832     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
833     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
834     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
835     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
836     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
837     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
838     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
839     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
840     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
841     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
842     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
843     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
844     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
845     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
846     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
847     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
848     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
849     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
850     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
851   },
852   {
853     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
854     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
855     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
856     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
857     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
858     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
859     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
860     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
861     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
862     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
863     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
864     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
865     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
866     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
867     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
868     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
869     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
870     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
871     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
872     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
873     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
874     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
875     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
876     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
877     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
878     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
879     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
880     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
881     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
882     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
883     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
884     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
885     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
886     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
887     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
888     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
889     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
890     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
891     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
892     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
893     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
894     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
895     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
896     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
897     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
898     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
899     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
900     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
901     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
902     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
903     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
904     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
905     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
906     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
907     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
908     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
909     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
910     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
911     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
912     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
913     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
914     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
915     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
916     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
917   },
918   {
919     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
920     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
921     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
922     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
923     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
924     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
925     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
926     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
927     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
928     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
929     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
930     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
931     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
932     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
933     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
934     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
935     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
936     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
937     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
938     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
939     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
940     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
941     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
942     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
943     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
944     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
945     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
946     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
947     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
948     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
949     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
950     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
951     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
952     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
953     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
954     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
955     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
956     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
957     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
958     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
959     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
960     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
961     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
962     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
963     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
964     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
965     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
966     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
967     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
968     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
969     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
970     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
971     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
972     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
973     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
974     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
975     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
976     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
977     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
978     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
979     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
980     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
981     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
982     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
983   },
984   {
985     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
986     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
987     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
988     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
989     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
990     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
991     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
992     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
993     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
994     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
995     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
996     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
997     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
998     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
999     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
1000     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
1001     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
1002     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
1003     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
1004     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
1005     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
1006     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
1007     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
1008     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
1009     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
1010     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
1011     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
1012     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
1013     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
1014     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
1015     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
1016     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
1017     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
1018     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
1019     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
1020     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
1021     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
1022     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
1023     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
1024     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
1025     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
1026     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
1027     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
1028     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
1029     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
1030     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
1031     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
1032     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
1033     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
1034     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
1035     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
1036     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
1037     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
1038     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
1039     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
1040     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
1041     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
1042     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
1043     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
1044     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
1045     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
1046     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
1047     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
1048     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
1049   },
1050   {
1051     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
1052     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
1053     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
1054     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
1055     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
1056     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
1057     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
1058     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
1059     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
1060     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
1061     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
1062     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
1063     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
1064     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
1065     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
1066     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
1067     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
1068     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
1069     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
1070     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
1071     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
1072     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
1073     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
1074     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
1075     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
1076     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
1077     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
1078     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
1079     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
1080     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
1081     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
1082     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
1083     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
1084     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
1085     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
1086     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
1087     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
1088     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
1089     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
1090     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
1091     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
1092     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
1093     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
1094     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
1095     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
1096     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
1097     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
1098     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
1099     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
1100     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
1101     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
1102     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
1103     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
1104     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
1105     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
1106     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
1107     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
1108     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
1109     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
1110     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
1111     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
1112     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
1113     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
1114     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
1115   },
1116 };
1117
1118 __constant u32 rch[R + 1] =
1119 {
1120   0x00000000,
1121   0x1823c6e8,
1122   0x36a6d2f5,
1123   0x60bc9b8e,
1124   0x1de0d7c2,
1125   0x157737e5,
1126   0x58c9290a,
1127   0xbd5d10f4,
1128   0xe427418b,
1129   0xfbee7c66,
1130   0xca2dbf07,
1131 };
1132
1133 __constant u32 rcl[R + 1] =
1134 {
1135   0x00000000,
1136   0x87b8014f,
1137   0x796f9152,
1138   0xa30c7b35,
1139   0x2e4bfe57,
1140   0x9ff04ada,
1141   0xb1a06b85,
1142   0xcb3e0567,
1143   0xa77d95d8,
1144   0xdd17479e,
1145   0xad5a8333,
1146 };
1147
1148 // this is a highly optimized that assumes dgst[16] = { 0 }; only reuse of no 2nd transform is needed
1149
1150 static void whirlpool_transform (const u32x w[16], u32x dgst[16], __local u32 s_Ch[8][256], __local u32 s_Cl[8][256])
1151 {
1152   u32x Kh[8];
1153   u32x Kl[8];
1154
1155   Kh[0] = 0x300beec0;
1156   Kl[0] = 0xaf902967;
1157   Kh[1] = 0x28282828;
1158   Kl[1] = 0x28282828;
1159   Kh[2] = 0x28282828;
1160   Kl[2] = 0x28282828;
1161   Kh[3] = 0x28282828;
1162   Kl[3] = 0x28282828;
1163   Kh[4] = 0x28282828;
1164   Kl[4] = 0x28282828;
1165   Kh[5] = 0x28282828;
1166   Kl[5] = 0x28282828;
1167   Kh[6] = 0x28282828;
1168   Kl[6] = 0x28282828;
1169   Kh[7] = 0x28282828;
1170   Kl[7] = 0x28282828;
1171
1172   u32x stateh[8];
1173   u32x statel[8];
1174
1175   stateh[0] = w[ 0];
1176   statel[0] = w[ 1];
1177   stateh[1] = w[ 2];
1178   statel[1] = w[ 3];
1179   stateh[2] = w[ 4];
1180   statel[2] = w[ 5];
1181   stateh[3] = w[ 6];
1182   statel[3] = w[ 7];
1183   stateh[4] = w[ 8];
1184   statel[4] = w[ 9];
1185   stateh[5] = w[10];
1186   statel[5] = w[11];
1187   stateh[6] = w[12];
1188   statel[6] = w[13];
1189   stateh[7] = w[14];
1190   statel[7] = w[15];
1191
1192   u32x Lh[8];
1193   u32x Ll[8];
1194
1195   #pragma unroll
1196   for (int i = 0; i < 8; i++)
1197   {
1198     const u32x Lp0 = stateh[(i + 8) & 7] >> 24;
1199     const u32x Lp1 = stateh[(i + 7) & 7] >> 16;
1200     const u32x Lp2 = stateh[(i + 6) & 7] >>  8;
1201     const u32x Lp3 = stateh[(i + 5) & 7] >>  0;
1202     const u32x Lp4 = statel[(i + 4) & 7] >> 24;
1203     const u32x Lp5 = statel[(i + 3) & 7] >> 16;
1204     const u32x Lp6 = statel[(i + 2) & 7] >>  8;
1205     const u32x Lp7 = statel[(i + 1) & 7] >>  0;
1206
1207     Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1208           ^ BOX (s_Ch, 1, Lp1 & 0xff)
1209           ^ BOX (s_Ch, 2, Lp2 & 0xff)
1210           ^ BOX (s_Ch, 3, Lp3 & 0xff)
1211           ^ BOX (s_Ch, 4, Lp4 & 0xff)
1212           ^ BOX (s_Ch, 5, Lp5 & 0xff)
1213           ^ BOX (s_Ch, 6, Lp6 & 0xff)
1214           ^ BOX (s_Ch, 7, Lp7 & 0xff);
1215
1216     Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1217           ^ BOX (s_Cl, 1, Lp1 & 0xff)
1218           ^ BOX (s_Cl, 2, Lp2 & 0xff)
1219           ^ BOX (s_Cl, 3, Lp3 & 0xff)
1220           ^ BOX (s_Cl, 4, Lp4 & 0xff)
1221           ^ BOX (s_Cl, 5, Lp5 & 0xff)
1222           ^ BOX (s_Cl, 6, Lp6 & 0xff)
1223           ^ BOX (s_Cl, 7, Lp7 & 0xff);
1224   }
1225
1226   stateh[0] = Lh[0] ^ Kh[0];
1227   statel[0] = Ll[0] ^ Kl[0];
1228   stateh[1] = Lh[1] ^ Kh[1];
1229   statel[1] = Ll[1] ^ Kl[1];
1230   stateh[2] = Lh[2] ^ Kh[2];
1231   statel[2] = Ll[2] ^ Kl[2];
1232   stateh[3] = Lh[3] ^ Kh[3];
1233   statel[3] = Ll[3] ^ Kl[3];
1234   stateh[4] = Lh[4] ^ Kh[4];
1235   statel[4] = Ll[4] ^ Kl[4];
1236   stateh[5] = Lh[5] ^ Kh[5];
1237   statel[5] = Ll[5] ^ Kl[5];
1238   stateh[6] = Lh[6] ^ Kh[6];
1239   statel[6] = Ll[6] ^ Kl[6];
1240   stateh[7] = Lh[7] ^ Kh[7];
1241   statel[7] = Ll[7] ^ Kl[7];
1242
1243   for (int r = 2; r <= R; r++)
1244   {
1245     u32x Lh[8];
1246     u32x Ll[8];
1247
1248     #pragma unroll
1249     for (int i = 0; i < 8; i++)
1250     {
1251       const u32x Lp0 = Kh[(i + 8) & 7] >> 24;
1252       const u32x Lp1 = Kh[(i + 7) & 7] >> 16;
1253       const u32x Lp2 = Kh[(i + 6) & 7] >>  8;
1254       const u32x Lp3 = Kh[(i + 5) & 7] >>  0;
1255       const u32x Lp4 = Kl[(i + 4) & 7] >> 24;
1256       const u32x Lp5 = Kl[(i + 3) & 7] >> 16;
1257       const u32x Lp6 = Kl[(i + 2) & 7] >>  8;
1258       const u32x Lp7 = Kl[(i + 1) & 7] >>  0;
1259
1260       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1261             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1262             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1263             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1264             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1265             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1266             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1267             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1268
1269       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1270             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1271             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1272             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1273             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1274             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1275             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1276             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1277     }
1278
1279     Kh[0] = Lh[0] ^ rch[r];
1280     Kl[0] = Ll[0] ^ rcl[r];
1281     Kh[1] = Lh[1];
1282     Kl[1] = Ll[1];
1283     Kh[2] = Lh[2];
1284     Kl[2] = Ll[2];
1285     Kh[3] = Lh[3];
1286     Kl[3] = Ll[3];
1287     Kh[4] = Lh[4];
1288     Kl[4] = Ll[4];
1289     Kh[5] = Lh[5];
1290     Kl[5] = Ll[5];
1291     Kh[6] = Lh[6];
1292     Kl[6] = Ll[6];
1293     Kh[7] = Lh[7];
1294     Kl[7] = Ll[7];
1295
1296     #pragma unroll 8
1297     for (int i = 0; i < 8; i++)
1298     {
1299       const u32x Lp0 = stateh[(i + 8) & 7] >> 24;
1300       const u32x Lp1 = stateh[(i + 7) & 7] >> 16;
1301       const u32x Lp2 = stateh[(i + 6) & 7] >>  8;
1302       const u32x Lp3 = stateh[(i + 5) & 7] >>  0;
1303       const u32x Lp4 = statel[(i + 4) & 7] >> 24;
1304       const u32x Lp5 = statel[(i + 3) & 7] >> 16;
1305       const u32x Lp6 = statel[(i + 2) & 7] >>  8;
1306       const u32x Lp7 = statel[(i + 1) & 7] >>  0;
1307
1308       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1309             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1310             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1311             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1312             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1313             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1314             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1315             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1316
1317       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1318             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1319             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1320             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1321             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1322             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1323             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1324             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1325     }
1326
1327     stateh[0] = Lh[0] ^ Kh[0];
1328     statel[0] = Ll[0] ^ Kl[0];
1329     stateh[1] = Lh[1] ^ Kh[1];
1330     statel[1] = Ll[1] ^ Kl[1];
1331     stateh[2] = Lh[2] ^ Kh[2];
1332     statel[2] = Ll[2] ^ Kl[2];
1333     stateh[3] = Lh[3] ^ Kh[3];
1334     statel[3] = Ll[3] ^ Kl[3];
1335     stateh[4] = Lh[4] ^ Kh[4];
1336     statel[4] = Ll[4] ^ Kl[4];
1337     stateh[5] = Lh[5] ^ Kh[5];
1338     statel[5] = Ll[5] ^ Kl[5];
1339     stateh[6] = Lh[6] ^ Kh[6];
1340     statel[6] = Ll[6] ^ Kl[6];
1341     stateh[7] = Lh[7] ^ Kh[7];
1342     statel[7] = Ll[7] ^ Kl[7];
1343   }
1344
1345   dgst[ 0] = stateh[0] ^ w[ 0];
1346   dgst[ 1] = statel[0] ^ w[ 1];
1347   dgst[ 2] = stateh[1] ^ w[ 2];
1348   dgst[ 3] = statel[1] ^ w[ 3];
1349   dgst[ 4] = stateh[2] ^ w[ 4];
1350   dgst[ 5] = statel[2] ^ w[ 5];
1351   dgst[ 6] = stateh[3] ^ w[ 6];
1352   dgst[ 7] = statel[3] ^ w[ 7];
1353   dgst[ 8] = stateh[4] ^ w[ 8];
1354   dgst[ 9] = statel[4] ^ w[ 9];
1355   dgst[10] = stateh[5] ^ w[10];
1356   dgst[11] = statel[5] ^ w[11];
1357   dgst[12] = stateh[6] ^ w[12];
1358   dgst[13] = statel[6] ^ w[13];
1359   dgst[14] = stateh[7] ^ w[14];
1360   dgst[15] = statel[7] ^ w[15];
1361 }
1362
1363 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_m04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global netntlm_t *netntlm_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1364 {
1365   /**
1366    * modifier
1367    */
1368
1369   const u32 lid = get_local_id (0);
1370
1371   /**
1372    * base
1373    */
1374
1375   const u32 gid = get_global_id (0);
1376
1377   u32x pw_buf0[4];
1378
1379   pw_buf0[0] = pws[gid].i[ 0];
1380   pw_buf0[1] = pws[gid].i[ 1];
1381   pw_buf0[2] = pws[gid].i[ 2];
1382   pw_buf0[3] = pws[gid].i[ 3];
1383
1384   u32x pw_buf1[4];
1385
1386   pw_buf1[0] = pws[gid].i[ 4];
1387   pw_buf1[1] = pws[gid].i[ 5];
1388   pw_buf1[2] = pws[gid].i[ 6];
1389   pw_buf1[3] = pws[gid].i[ 7];
1390
1391   const u32 pw_len = pws[gid].pw_len;
1392
1393   /**
1394    * modifier
1395    */
1396
1397   __local u32 s_Ch[8][256];
1398   __local u32 s_Cl[8][256];
1399
1400   const u32 lid4 = lid * 4;
1401
1402   for (u32 i = 0; i < 8; i++)
1403   {
1404     s_Ch[i][lid4 + 0] = Ch[i][lid4 + 0];
1405     s_Ch[i][lid4 + 1] = Ch[i][lid4 + 1];
1406     s_Ch[i][lid4 + 2] = Ch[i][lid4 + 2];
1407     s_Ch[i][lid4 + 3] = Ch[i][lid4 + 3];
1408     s_Cl[i][lid4 + 0] = Cl[i][lid4 + 0];
1409     s_Cl[i][lid4 + 1] = Cl[i][lid4 + 1];
1410     s_Cl[i][lid4 + 2] = Cl[i][lid4 + 2];
1411     s_Cl[i][lid4 + 3] = Cl[i][lid4 + 3];
1412   }
1413
1414   barrier (CLK_LOCAL_MEM_FENCE);
1415
1416   if (gid >= gid_max) return;
1417
1418   /**
1419    * loop
1420    */
1421
1422   for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
1423   {
1424     u32x w0[4];
1425
1426     w0[0] = pw_buf0[0];
1427     w0[1] = pw_buf0[1];
1428     w0[2] = pw_buf0[2];
1429     w0[3] = pw_buf0[3];
1430
1431     u32x w1[4];
1432
1433     w1[0] = pw_buf1[0];
1434     w1[1] = pw_buf1[1];
1435     w1[2] = pw_buf1[2];
1436     w1[3] = pw_buf1[3];
1437
1438     u32x w2[4];
1439
1440     w2[0] = 0;
1441     w2[1] = 0;
1442     w2[2] = 0;
1443     w2[3] = 0;
1444
1445     u32x w3[4];
1446
1447     w3[0] = 0;
1448     w3[1] = 0;
1449     w3[2] = 0;
1450     w3[3] = 0;
1451
1452     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
1453
1454     append_0x80_2 (w0, w1, out_len);
1455
1456     u32x wl[16];
1457
1458     wl[ 0] = swap_workaround (w0[0]);
1459     wl[ 1] = swap_workaround (w0[1]);
1460     wl[ 2] = swap_workaround (w0[2]);
1461     wl[ 3] = swap_workaround (w0[3]);
1462     wl[ 4] = swap_workaround (w1[0]);
1463     wl[ 5] = swap_workaround (w1[1]);
1464     wl[ 6] = swap_workaround (w1[2]);
1465     wl[ 7] = swap_workaround (w1[3]);
1466     wl[ 8] = 0;
1467     wl[ 9] = 0;
1468     wl[10] = 0;
1469     wl[11] = 0;
1470     wl[12] = 0;
1471     wl[13] = 0;
1472     wl[14] = 0;
1473     wl[15] = out_len * 8;
1474
1475     u32x dgst[16];
1476
1477     dgst[ 0] = 0;
1478     dgst[ 1] = 0;
1479     dgst[ 2] = 0;
1480     dgst[ 3] = 0;
1481     dgst[ 4] = 0;
1482     dgst[ 5] = 0;
1483     dgst[ 6] = 0;
1484     dgst[ 7] = 0;
1485     dgst[ 8] = 0;
1486     dgst[ 9] = 0;
1487     dgst[10] = 0;
1488     dgst[11] = 0;
1489     dgst[12] = 0;
1490     dgst[13] = 0;
1491     dgst[14] = 0;
1492     dgst[15] = 0;
1493
1494     whirlpool_transform (wl, dgst, s_Ch, s_Cl);
1495
1496     const u32x r0 = dgst[0];
1497     const u32x r1 = dgst[1];
1498     const u32x r2 = dgst[2];
1499     const u32x r3 = dgst[3];
1500
1501     #include VECT_COMPARE_M
1502   }
1503 }
1504
1505 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_m08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1506 {
1507 }
1508
1509 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_m16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1510 {
1511 }
1512
1513 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_s04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global netntlm_t *netntlm_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1514 {
1515   /**
1516    * modifier
1517    */
1518
1519   const u32 lid = get_local_id (0);
1520
1521   /**
1522    * base
1523    */
1524
1525   const u32 gid = get_global_id (0);
1526
1527   u32x pw_buf0[4];
1528
1529   pw_buf0[0] = pws[gid].i[ 0];
1530   pw_buf0[1] = pws[gid].i[ 1];
1531   pw_buf0[2] = pws[gid].i[ 2];
1532   pw_buf0[3] = pws[gid].i[ 3];
1533
1534   u32x pw_buf1[4];
1535
1536   pw_buf1[0] = pws[gid].i[ 4];
1537   pw_buf1[1] = pws[gid].i[ 5];
1538   pw_buf1[2] = pws[gid].i[ 6];
1539   pw_buf1[3] = pws[gid].i[ 7];
1540
1541   const u32 pw_len = pws[gid].pw_len;
1542
1543   /**
1544    * modifier
1545    */
1546
1547   __local u32 s_Ch[8][256];
1548   __local u32 s_Cl[8][256];
1549
1550   const u32 lid4 = lid * 4;
1551
1552   for (u32 i = 0; i < 8; i++)
1553   {
1554     s_Ch[i][lid4 + 0] = Ch[i][lid4 + 0];
1555     s_Ch[i][lid4 + 1] = Ch[i][lid4 + 1];
1556     s_Ch[i][lid4 + 2] = Ch[i][lid4 + 2];
1557     s_Ch[i][lid4 + 3] = Ch[i][lid4 + 3];
1558     s_Cl[i][lid4 + 0] = Cl[i][lid4 + 0];
1559     s_Cl[i][lid4 + 1] = Cl[i][lid4 + 1];
1560     s_Cl[i][lid4 + 2] = Cl[i][lid4 + 2];
1561     s_Cl[i][lid4 + 3] = Cl[i][lid4 + 3];
1562   }
1563
1564   barrier (CLK_LOCAL_MEM_FENCE);
1565
1566   if (gid >= gid_max) return;
1567
1568   /**
1569    * digest
1570    */
1571
1572   const u32 search[4] =
1573   {
1574     digests_buf[digests_offset].digest_buf[DGST_R0],
1575     digests_buf[digests_offset].digest_buf[DGST_R1],
1576     digests_buf[digests_offset].digest_buf[DGST_R2],
1577     digests_buf[digests_offset].digest_buf[DGST_R3]
1578   };
1579
1580   /**
1581    * loop
1582    */
1583
1584   for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
1585   {
1586     u32x w0[4];
1587
1588     w0[0] = pw_buf0[0];
1589     w0[1] = pw_buf0[1];
1590     w0[2] = pw_buf0[2];
1591     w0[3] = pw_buf0[3];
1592
1593     u32x w1[4];
1594
1595     w1[0] = pw_buf1[0];
1596     w1[1] = pw_buf1[1];
1597     w1[2] = pw_buf1[2];
1598     w1[3] = pw_buf1[3];
1599
1600     u32x w2[4];
1601
1602     w2[0] = 0;
1603     w2[1] = 0;
1604     w2[2] = 0;
1605     w2[3] = 0;
1606
1607     u32x w3[4];
1608
1609     w3[0] = 0;
1610     w3[1] = 0;
1611     w3[2] = 0;
1612     w3[3] = 0;
1613
1614     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
1615
1616     append_0x80_2 (w0, w1, out_len);
1617
1618     u32x wl[16];
1619
1620     wl[ 0] = swap_workaround (w0[0]);
1621     wl[ 1] = swap_workaround (w0[1]);
1622     wl[ 2] = swap_workaround (w0[2]);
1623     wl[ 3] = swap_workaround (w0[3]);
1624     wl[ 4] = swap_workaround (w1[0]);
1625     wl[ 5] = swap_workaround (w1[1]);
1626     wl[ 6] = swap_workaround (w1[2]);
1627     wl[ 7] = swap_workaround (w1[3]);
1628     wl[ 8] = 0;
1629     wl[ 9] = 0;
1630     wl[10] = 0;
1631     wl[11] = 0;
1632     wl[12] = 0;
1633     wl[13] = 0;
1634     wl[14] = 0;
1635     wl[15] = out_len * 8;
1636
1637     u32x dgst[16];
1638
1639     dgst[ 0] = 0;
1640     dgst[ 1] = 0;
1641     dgst[ 2] = 0;
1642     dgst[ 3] = 0;
1643     dgst[ 4] = 0;
1644     dgst[ 5] = 0;
1645     dgst[ 6] = 0;
1646     dgst[ 7] = 0;
1647     dgst[ 8] = 0;
1648     dgst[ 9] = 0;
1649     dgst[10] = 0;
1650     dgst[11] = 0;
1651     dgst[12] = 0;
1652     dgst[13] = 0;
1653     dgst[14] = 0;
1654     dgst[15] = 0;
1655
1656     whirlpool_transform (wl, dgst, s_Ch, s_Cl);
1657
1658     const u32x r0 = dgst[0];
1659     const u32x r1 = dgst[1];
1660     const u32x r2 = dgst[2];
1661     const u32x r3 = dgst[3];
1662
1663     #include VECT_COMPARE_S
1664   }
1665 }
1666
1667 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_s08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1668 {
1669 }
1670
1671 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_s16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1672 {
1673 }