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