1 /*
2 * crc32c.c
3 *
4 * August 26, 2011 Darrick J. Wong <djwong at us.ibm.com>
5 * Reuse Bob Pearson's slice-by-8 implementation for e2fsprogs.
6 *
7 * July 20, 2011 Bob Pearson <rpearson at systemfabricworks.com>
8 * added slice by 8 algorithm to the existing conventional and
9 * slice by 4 algorithms.
10 *
11 * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
12 * Nicer crc32 functions/docs submitted by linux@horizon.com. Thanks!
13 * Code was from the public domain, copyright abandoned. Code was
14 * subsequently included in the kernel, thus was re-licensed under the
15 * GNU GPL v2.
16 *
17 * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
18 * Same crc32 function was used in 5 other places in the kernel.
19 * I made one version, and deleted the others.
20 * There are various incantations of crc32(). Some use a seed of 0 or ~0.
21 * Some xor at the end with ~0. The generic crc32() function takes
22 * seed as an argument, and doesn't xor at the end. Then individual
23 * users can do whatever they need.
24 * drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
25 * fs/jffs2 uses seed 0, doesn't xor with ~0.
26 * fs/partitions/efi.c uses seed ~0, xor's with ~0.
27 *
28 * This source code is licensed under the GNU General Public License,
29 * Version 2. See the file COPYING for more details.
30 */
31 #include "config.h"
32 #include <stdint.h>
33 #include <stdlib.h>
34 #include <stdio.h>
35 #define min(x, y) ((x) > (y) ? (y) : (x))
36 #define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
37 #define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
38 #define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
39 #define PTR_ALIGN(p, a) ((__typeof__(p))ALIGN((unsigned long)(p), (a)))
40 #include "crc32c_defs.h"
41
42 #include "ext2fs.h"
43 #ifdef WORDS_BIGENDIAN
44 #define __constant_cpu_to_le32(x) ___constant_swab32((x))
45 #define __constant_cpu_to_be32(x) (x)
46 #define __be32_to_cpu(x) (x)
47 #define __cpu_to_be32(x) (x)
48 #define __cpu_to_le32(x) (ext2fs_cpu_to_le32((x)))
49 #define __le32_to_cpu(x) (ext2fs_le32_to_cpu((x)))
50 #else
51 #define __constant_cpu_to_le32(x) (x)
52 #define __constant_cpu_to_be32(x) ___constant_swab32((x))
53 #define __be32_to_cpu(x) (ext2fs_be32_to_cpu((x)))
54 #define __cpu_to_be32(x) (ext2fs_cpu_to_be32((x)))
55 #define __cpu_to_le32(x) (x)
56 #define __le32_to_cpu(x) (x)
57 #endif
58
59 #if CRC_LE_BITS > 8
60 # define tole(x) __constant_cpu_to_le32(x)
61 #else
62 # define tole(x) (x)
63 #endif
64
65 #if CRC_BE_BITS > 8
66 # define tobe(x) __constant_cpu_to_be32(x)
67 #else
68 # define tobe(x) (x)
69 #endif
70
71 #include "crc32c_table.h"
72
73 #if CRC_LE_BITS > 8 || CRC_BE_BITS > 8
74
75 /* implements slicing-by-4 or slicing-by-8 algorithm */
76 static inline uint32_t
crc32_body(uint32_t crc,unsigned char const * buf,size_t len,const uint32_t (* tab)[256])77 crc32_body(uint32_t crc, unsigned char const *buf, size_t len,
78 const uint32_t (*tab)[256])
79 {
80 # ifndef WORDS_BIGENDIAN
81 # define DO_CRC(x) (crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8))
82 # define DO_CRC4 (t3[(q) & 255] ^ t2[(q >> 8) & 255] ^ \
83 t1[(q >> 16) & 255] ^ t0[(q >> 24) & 255])
84 # define DO_CRC8 (t7[(q) & 255] ^ t6[(q >> 8) & 255] ^ \
85 t5[(q >> 16) & 255] ^ t4[(q >> 24) & 255])
86 # else
87 # define DO_CRC(x) (crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8))
88 # define DO_CRC4 (t0[(q) & 255] ^ t1[(q >> 8) & 255] ^ \
89 t2[(q >> 16) & 255] ^ t3[(q >> 24) & 255])
90 # define DO_CRC8 (t4[(q) & 255] ^ t5[(q >> 8) & 255] ^ \
91 t6[(q >> 16) & 255] ^ t7[(q >> 24) & 255])
92 # endif
93 const uint32_t *b;
94 size_t rem_len;
95 const uint32_t *t0 = tab[0], *t1 = tab[1], *t2 = tab[2], *t3 = tab[3];
96 const uint32_t *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
97 uint32_t q;
98
99 /* Align it */
100 if (unlikely((uintptr_t)buf & 3 && len)) {
101 do {
102 DO_CRC(*buf++);
103 } while ((--len) && ((uintptr_t)buf)&3);
104 }
105
106 # if CRC_LE_BITS == 32
107 rem_len = len & 3;
108 len = len >> 2;
109 # else
110 rem_len = len & 7;
111 len = len >> 3;
112 # endif
113
114 b = (const uint32_t *)buf;
115 for (--b; len; --len) {
116 q = crc ^ *++b; /* use pre increment for speed */
117 # if CRC_LE_BITS == 32
118 crc = DO_CRC4;
119 # else
120 crc = DO_CRC8;
121 q = *++b;
122 crc ^= DO_CRC4;
123 # endif
124 }
125 len = rem_len;
126 /* And the last few bytes */
127 if (len) {
128 const uint8_t *p = (const uint8_t *)(b + 1) - 1;
129 do {
130 DO_CRC(*++p); /* use pre increment for speed */
131 } while (--len);
132 }
133 return crc;
134 #undef DO_CRC
135 #undef DO_CRC4
136 #undef DO_CRC8
137 }
138 #endif
139
140 /**
141 * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
142 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
143 * other uses, or the previous crc32 value if computing incrementally.
144 * @p: pointer to buffer over which CRC is run
145 * @len: length of buffer @p
146 */
crc32_le_generic(uint32_t crc,unsigned char const * p,size_t len,const uint32_t (* tab)[256],uint32_t polynomial EXT2FS_ATTR ((unused)))147 static inline uint32_t crc32_le_generic(uint32_t crc, unsigned char const *p,
148 size_t len, const uint32_t (*tab)[256],
149 uint32_t polynomial EXT2FS_ATTR((unused)))
150 {
151 #if CRC_LE_BITS == 1
152 int i;
153 while (len--) {
154 crc ^= *p++;
155 for (i = 0; i < 8; i++)
156 crc = (crc >> 1) ^ ((crc & 1) ? polynomial : 0);
157 }
158 # elif CRC_LE_BITS == 2
159 while (len--) {
160 crc ^= *p++;
161 crc = (crc >> 2) ^ tab[0][crc & 3];
162 crc = (crc >> 2) ^ tab[0][crc & 3];
163 crc = (crc >> 2) ^ tab[0][crc & 3];
164 crc = (crc >> 2) ^ tab[0][crc & 3];
165 }
166 # elif CRC_LE_BITS == 4
167 while (len--) {
168 crc ^= *p++;
169 crc = (crc >> 4) ^ tab[0][crc & 15];
170 crc = (crc >> 4) ^ tab[0][crc & 15];
171 }
172 # elif CRC_LE_BITS == 8
173 /* aka Sarwate algorithm */
174 while (len--) {
175 crc ^= *p++;
176 crc = (crc >> 8) ^ tab[0][crc & 255];
177 }
178 # else
179 crc = __cpu_to_le32(crc);
180 crc = crc32_body(crc, p, len, tab);
181 crc = __le32_to_cpu(crc);
182 #endif
183 return crc;
184 }
185
ext2fs_crc32c_le(uint32_t crc,unsigned char const * p,size_t len)186 uint32_t ext2fs_crc32c_le(uint32_t crc, unsigned char const *p, size_t len)
187 {
188 return crc32_le_generic(crc, p, len, crc32ctable_le, CRC32C_POLY_LE);
189 }
190
191 /**
192 * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
193 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
194 * other uses, or the previous crc32 value if computing incrementally.
195 * @p: pointer to buffer over which CRC is run
196 * @len: length of buffer @p
197 */
crc32_be_generic(uint32_t crc,unsigned char const * p,size_t len,const uint32_t (* tab)[256],uint32_t polynomial EXT2FS_ATTR ((unused)))198 static inline uint32_t crc32_be_generic(uint32_t crc, unsigned char const *p,
199 size_t len, const uint32_t (*tab)[256],
200 uint32_t polynomial EXT2FS_ATTR((unused)))
201 {
202 #if CRC_BE_BITS == 1
203 int i;
204 while (len--) {
205 crc ^= *p++ << 24;
206 for (i = 0; i < 8; i++)
207 crc =
208 (crc << 1) ^ ((crc & 0x80000000) ? polynomial :
209 0);
210 }
211 # elif CRC_BE_BITS == 2
212 while (len--) {
213 crc ^= *p++ << 24;
214 crc = (crc << 2) ^ tab[0][crc >> 30];
215 crc = (crc << 2) ^ tab[0][crc >> 30];
216 crc = (crc << 2) ^ tab[0][crc >> 30];
217 crc = (crc << 2) ^ tab[0][crc >> 30];
218 }
219 # elif CRC_BE_BITS == 4
220 while (len--) {
221 crc ^= *p++ << 24;
222 crc = (crc << 4) ^ tab[0][crc >> 28];
223 crc = (crc << 4) ^ tab[0][crc >> 28];
224 }
225 # elif CRC_BE_BITS == 8
226 while (len--) {
227 crc ^= *p++ << 24;
228 crc = (crc << 8) ^ tab[0][crc >> 24];
229 }
230 # else
231 crc = __cpu_to_be32(crc);
232 crc = crc32_body(crc, p, len, tab);
233 crc = __be32_to_cpu(crc);
234 # endif
235 return crc;
236 }
237
ext2fs_crc32_be(uint32_t crc,unsigned char const * p,size_t len)238 uint32_t ext2fs_crc32_be(uint32_t crc, unsigned char const *p, size_t len)
239 {
240 return crc32_be_generic(crc, p, len, crc32table_be, CRCPOLY_BE);
241 }
242
243 #ifdef UNITTEST
244 static uint8_t test_buf[] = {
245 0xd9, 0xd7, 0x6a, 0x13, 0x3a, 0xb1, 0x05, 0x48,
246 0xda, 0xad, 0x14, 0xbd, 0x03, 0x3a, 0x58, 0x5e,
247 0x6e, 0xd1, 0x56, 0xc9, 0x2e, 0xc4, 0xcb, 0x6b,
248 0xe8, 0x77, 0x52, 0x37, 0x4e, 0x0f, 0x55, 0xd2,
249 0x12, 0x65, 0x90, 0xc2, 0x41, 0x49, 0x81, 0x01,
250 0xf5, 0x01, 0xeb, 0x2d, 0x78, 0x74, 0x23, 0x5d,
251 0x84, 0x5c, 0x81, 0x92, 0x21, 0xe9, 0x8d, 0x1d,
252 0x89, 0xf2, 0x4a, 0xac, 0xdd, 0xf9, 0xaf, 0xee,
253 0x44, 0xe7, 0x6e, 0xed, 0xfb, 0xd8, 0x89, 0x0e,
254 0x96, 0x62, 0xcd, 0xa4, 0x4b, 0xa9, 0xe5, 0x45,
255 0xb1, 0x29, 0x9b, 0x0f, 0xfc, 0xbd, 0x83, 0xab,
256 0xa8, 0x54, 0x96, 0x44, 0x2c, 0x7f, 0xbb, 0xe7,
257 0x52, 0x29, 0x08, 0xee, 0x14, 0xc5, 0xc2, 0xec,
258 0x5a, 0xeb, 0x40, 0x40, 0xea, 0xd1, 0x3d, 0x15,
259 0x73, 0xaa, 0x8c, 0x73, 0xfc, 0xf2, 0x2b, 0x49,
260 0x0b, 0x13, 0x96, 0xd9, 0x8e, 0x4b, 0xbc, 0xe0,
261 0xf4, 0xd2, 0xe0, 0x2e, 0x7a, 0xf0, 0x5d, 0x1f,
262 0xd2, 0x92, 0x97, 0xe0, 0xaa, 0x59, 0xab, 0xc9,
263 0x5c, 0xa6, 0x51, 0x1a, 0xe3, 0xd6, 0x06, 0xb9,
264 0xae, 0xb8, 0x76, 0x36, 0x79, 0x37, 0x52, 0xf6,
265 0x34, 0xaf, 0x27, 0x19, 0xe1, 0xc0, 0x2b, 0xdd,
266 0x01, 0x15, 0xcd, 0xce, 0x44, 0xf6, 0x4c, 0x18,
267 0x92, 0x69, 0xbe, 0x8a, 0x76, 0x23, 0x52, 0x13,
268 0x3f, 0xf9, 0xe0, 0xf5, 0x06, 0x28, 0x7c, 0xc7,
269 0xf3, 0x42, 0x0f, 0xdd, 0x40, 0x33, 0xf7, 0x99,
270 0xe2, 0xad, 0x26, 0xd9, 0x53, 0x10, 0x72, 0x0c,
271 0x4e, 0x43, 0x4c, 0x61, 0xfe, 0xd9, 0xc1, 0x16,
272 0xa1, 0x93, 0xca, 0x3c, 0x75, 0x7f, 0x07, 0x7a,
273 0x65, 0xb3, 0x53, 0x2a, 0x52, 0x00, 0xa0, 0x62,
274 0xe0, 0xa3, 0x1f, 0xad, 0xd7, 0xbb, 0xc0, 0x83,
275 0x5d, 0x54, 0x87, 0x5f, 0xc8, 0x2f, 0xc8, 0xbf,
276 0x69, 0x04, 0x91, 0xc8, 0xa6, 0x1d, 0x4d, 0x46,
277 0x91, 0xfc, 0x26, 0xf4, 0x16, 0xd1, 0xa4, 0xbf,
278 0x5c, 0xa2, 0x6c, 0xdd, 0xb4, 0x40, 0xf2, 0x2e,
279 0xa2, 0xad, 0xf7, 0xf4, 0xa5, 0x8a, 0x3e, 0x23,
280 0x64, 0x08, 0xc8, 0xa1, 0xa0, 0xf0, 0x5d, 0x70,
281 0xd2, 0x77, 0xfd, 0xc8, 0x50, 0x83, 0x0f, 0xd6,
282 0x2b, 0xe4, 0x1f, 0x52, 0x34, 0x33, 0x68, 0xfd,
283 0x92, 0xbe, 0x9f, 0x97, 0x6b, 0x8d, 0x81, 0x91,
284 0x0f, 0xef, 0x65, 0xc8, 0x0d, 0x15, 0x01, 0x77,
285 0x58, 0xb2, 0xf4, 0x1b, 0x06, 0x7e, 0xf5, 0xca,
286 0x15, 0x2e, 0x38, 0xd8, 0x81, 0x1c, 0x1c, 0xa0,
287 0xb6, 0x13, 0x6a, 0x2b, 0x71, 0x34, 0x52, 0xd7,
288 0x1d, 0xbd, 0x37, 0x59, 0xbc, 0x86, 0x25, 0x2b,
289 0xa8, 0x93, 0xce, 0x1a, 0x03, 0x16, 0xfe, 0x01,
290 0x57, 0x99, 0x24, 0x25, 0x2c, 0xb3, 0xab, 0x1e,
291 0x2d, 0x65, 0x20, 0x89, 0x17, 0x02, 0x0e, 0x0a,
292 0xf5, 0x1e, 0xc7, 0xff, 0x1f, 0x61, 0xa9, 0x54,
293 0x18, 0xd4, 0xba, 0x50, 0x57, 0x02, 0xa1, 0xab,
294 0x22, 0x2e, 0x07, 0xea, 0xa9, 0xa3, 0x83, 0x4f,
295 0x27, 0xf5, 0xc5, 0xee, 0x3c, 0x3b, 0x10, 0xad,
296 0x32, 0x2b, 0x1c, 0x03, 0xcb, 0xaf, 0x98, 0x83,
297 0x54, 0xc3, 0x68, 0x63, 0xd4, 0xe0, 0x0e, 0x3c,
298 0x1a, 0x4e, 0xc0, 0x81, 0xd0, 0xe8, 0x6a, 0x62,
299 0x6b, 0x3e, 0x6f, 0xc4, 0xc6, 0x33, 0x4e, 0x26,
300 0x21, 0xf5, 0x04, 0xdf, 0xfa, 0xce, 0x45, 0xaf,
301 0xdc, 0x5e, 0x1b, 0xad, 0x93, 0xca, 0xf5, 0xcf,
302 0xd7, 0xee, 0x0c, 0x5c, 0x5e, 0xb4, 0xf0, 0x92,
303 0xd2, 0xf2, 0xf0, 0xa9, 0x1e, 0xab, 0x80, 0x68,
304 0x46, 0xef, 0xcc, 0x26, 0x0c, 0x5c, 0xdd, 0x4e,
305 0x83, 0xb8, 0xb9, 0x53, 0x6e, 0xf8, 0x93, 0x38,
306 0x67, 0xa4, 0x41, 0x87, 0x72, 0xe7, 0x7e, 0x86,
307 0xc9, 0x49, 0x00, 0x33, 0xb1, 0x38, 0x6c, 0x71,
308 0xd7, 0x1d, 0x8e, 0x61, 0x01, 0xb6, 0x57, 0xa9,
309 0xf1, 0xac, 0x15, 0xc2, 0x83, 0x77, 0xca, 0x64,
310 0xca, 0x7b, 0x6c, 0xa1, 0x10, 0x1b, 0x13, 0xd0,
311 0xd3, 0x9e, 0x9e, 0x10, 0x70, 0xc8, 0x1a, 0xbb,
312 0x3f, 0x19, 0x86, 0xab, 0x01, 0x0e, 0xea, 0x34,
313 0x22, 0xea, 0xe2, 0x15, 0xb7, 0xed, 0x21, 0x21,
314 0x75, 0xa5, 0xe7, 0x08, 0xa1, 0x38, 0xe0, 0x91,
315 0x05, 0x60, 0xea, 0xa7, 0x50, 0x27, 0x18, 0x07,
316 0x9d, 0xe0, 0x18, 0x2b, 0xd4, 0x07, 0x59, 0x00,
317 0xe6, 0x45, 0x18, 0x2a, 0x30, 0x6e, 0xf3, 0xb4,
318 0xd0, 0xef, 0xa6, 0x5b, 0x71, 0xa2, 0x5a, 0x3b,
319 0x89, 0x4c, 0xaf, 0x3f, 0xcb, 0x9f, 0x03, 0xfb,
320 0x43, 0x7c, 0x6b, 0xd3, 0x6a, 0xea, 0xce, 0x4a,
321 0x5f, 0x64, 0xb5, 0x62, 0xda, 0x5d, 0x27, 0xb7,
322 0xb8, 0x11, 0xca, 0x33, 0x30, 0xec, 0x70, 0xf0,
323 0x1b, 0x03, 0x50, 0xff, 0x5e, 0xa6, 0x08, 0xde,
324 0x37, 0x70, 0xc0, 0x81, 0x55, 0x60, 0x17, 0xa1,
325 0x85, 0xae, 0x26, 0x44, 0xe4, 0x67, 0x3c, 0x91,
326 0xfd, 0xc4, 0x3d, 0x97, 0x72, 0x23, 0xf3, 0x3c,
327 0x8f, 0xe0, 0xe2, 0xf2, 0x09, 0x96, 0x10, 0x67,
328 0xb5, 0xfe, 0xff, 0x3d, 0x4a, 0xc8, 0x62, 0x11,
329 0xa5, 0x98, 0xc1, 0x2d, 0x40, 0x82, 0x88, 0x8b,
330 0xe5, 0xb0, 0x75, 0xbf, 0x2f, 0xa8, 0x6a, 0x55,
331 0x49, 0x2e, 0x9c, 0x29, 0xd2, 0x7c, 0xbf, 0xf3,
332 0xaa, 0x3a, 0x16, 0x4a, 0xa4, 0x15, 0xf3, 0x48,
333 0xde, 0x38, 0x13, 0x44, 0x26, 0x02, 0xe6, 0xe9,
334 0xa8, 0x24, 0x89, 0xb5, 0x43, 0x95, 0xe4, 0x4c,
335 0xc3, 0xa0, 0xdf, 0xcc, 0x42, 0xf8, 0x8d, 0xb0,
336 0x3b, 0xea, 0x10, 0xb7, 0xe1, 0x40, 0x54, 0xb9,
337 0xa3, 0x2d, 0xfb, 0xb4, 0x91, 0xc0, 0x3e, 0x94,
338 0xf1, 0xa1, 0x3c, 0xbe, 0xef, 0xb8, 0x70, 0x55,
339 0x0a, 0x26, 0x93, 0xbf, 0xe6, 0x21, 0x92, 0x32,
340 0x3c, 0x39, 0x27, 0x6a, 0x23, 0x48, 0x02, 0x35,
341 0x3c, 0xd4, 0xcc, 0x04, 0xc0, 0x4e, 0xa7, 0x02,
342 0x63, 0x37, 0xc2, 0xb8, 0x56, 0x1d, 0x57, 0x57,
343 0x42, 0x04, 0x8d, 0xee, 0xcf, 0x8b, 0xc9, 0xc3,
344 0xba, 0x3b, 0x15, 0xd7, 0xaf, 0xbf, 0x9e, 0xcd,
345 0x44, 0xcf, 0xf0, 0x00, 0xb7, 0x3a, 0xfc, 0xa8,
346 0x12, 0xab, 0x3a, 0x62, 0x01, 0x21, 0x46, 0xe9,
347 0x1e, 0x48, 0x37, 0xfc, 0x13, 0x4d, 0xf6, 0x2a,
348 0x72, 0x40, 0x75, 0x38, 0x71, 0xf2, 0x17, 0x20,
349 0x2c, 0xdd, 0xc0, 0x49, 0xbc, 0x63, 0x33, 0xea,
350 0x06, 0x75, 0x41, 0xe7, 0x5c, 0x1f, 0xfb, 0xf9,
351 0x68, 0x83, 0xc2, 0x5a, 0x4a, 0x1e, 0x61, 0x08,
352 0x57, 0xf3, 0x00, 0xba, 0x77, 0x92, 0x63, 0xa5,
353 0xb7, 0xfe, 0x97, 0x22, 0xda, 0x5e, 0xd3, 0xaf,
354 0xbc, 0x89, 0x0d, 0x4c, 0x37, 0xa9, 0x27, 0x4a,
355 0x7f, 0xdb, 0x81, 0x39, 0x11, 0x86, 0x12, 0xf9,
356 0x10, 0x50, 0xe4, 0xdb, 0x72, 0xf9, 0xae, 0x10,
357 0x7c, 0xed, 0x50, 0x5c, 0x61, 0xeb, 0x42, 0x1e,
358 0xa4, 0xf4, 0xf0, 0xfa, 0x45, 0x4d, 0x95, 0x2b,
359 0xd4, 0x67, 0x4a, 0xe3, 0x8a, 0x15, 0x55, 0x92,
360 0x77, 0x64, 0x8c, 0x51, 0x38, 0xf9, 0x26, 0x3e,
361 0x68, 0xe2, 0xac, 0xbb, 0x64, 0x77, 0xe2, 0x82,
362 0xa4, 0x42, 0x41, 0x38, 0xa0, 0xf0, 0xc9, 0xd8,
363 0x6c, 0xe0, 0xef, 0x4c, 0xda, 0xb4, 0x92, 0xef,
364 0x1b, 0xe3, 0x9b, 0xc1, 0x44, 0x3c, 0xb9, 0xb7,
365 0x39, 0xac, 0x5c, 0x32, 0x39, 0xb4, 0x21, 0x85,
366 0x93, 0xbc, 0xf2, 0x51, 0x43, 0xb7, 0xae, 0x1e,
367 0x61, 0x9c, 0x38, 0x9c, 0xaa, 0xff, 0xde, 0xfc,
368 0xbf, 0x85, 0xef, 0x17, 0x34, 0x36, 0x71, 0x5f,
369 0x04, 0x16, 0xa6, 0x9e, 0xfd, 0x3a, 0x03, 0xd8,
370 0xbf, 0x71, 0x70, 0x20, 0x8f, 0x7c, 0xfb, 0xff,
371 0x61, 0xe0, 0xe2, 0x60, 0xa7, 0xb1, 0xc0, 0xe0,
372 0xd9, 0x3f, 0xdc, 0x8d, 0x4a, 0xa4, 0x52, 0x61,
373 0xaf, 0x9d, 0xdf, 0x8a, 0x0d, 0x41, 0xc0, 0x25,
374 0x68, 0x12, 0x7b, 0xd5, 0xc7, 0xdb, 0x68, 0x70,
375 0x2d, 0x7d, 0x95, 0x12, 0x03, 0x23, 0x0c, 0xe8,
376 0x14, 0x41, 0x11, 0x28, 0xec, 0x9d, 0xd3, 0x28,
377 0x77, 0x7a, 0x3c, 0x93, 0x8e, 0x5c, 0x7e, 0xb3,
378 0x42, 0x9a, 0x18, 0x25, 0x93, 0xc8, 0xea, 0x43,
379 0x1b, 0xbe, 0xd5, 0x27, 0xf1, 0xd4, 0xe0, 0x1e,
380 0xce, 0xc7, 0xc7, 0x2c, 0x25, 0x35, 0x58, 0xb8,
381 0x6c, 0xf3, 0xa2, 0xad, 0xe7, 0x58, 0x49, 0x47,
382 0xf7, 0xca, 0xde, 0x8b, 0x81, 0xb7, 0x75, 0xf4,
383 0x95, 0xa7, 0x5c, 0xc3, 0x2c, 0x0e, 0x1c, 0x52,
384 0x9a, 0xc3, 0x2a, 0x00, 0x21, 0xa7, 0x51, 0x6b,
385 0xf0, 0x05, 0x87, 0x8c, 0x42, 0x1b, 0xc3, 0x2e,
386 0xa3, 0x76, 0x22, 0xd5, 0x7f, 0x56, 0x10, 0xef,
387 0x98, 0x85, 0x65, 0x86, 0x71, 0x87, 0xd2, 0x8c,
388 0xc0, 0x47, 0x20, 0xe8, 0xb5, 0x1c, 0xe3, 0xdd,
389 0x3c, 0x5c, 0x03, 0xbb, 0x0e, 0x97, 0x3b, 0xe1,
390 0x56, 0x9a, 0xd5, 0x0a, 0x63, 0xd5, 0x33, 0xaf,
391 0x36, 0xca, 0xcf, 0x8f, 0x00, 0x28, 0xa3, 0x45,
392 0xb8, 0xcd, 0xde, 0x73, 0xd4, 0xfa, 0x2d, 0x6f,
393 0xdb, 0x93, 0xaa, 0xdd, 0x7f, 0xd2, 0x22, 0x9c,
394 0x96, 0x48, 0x1e, 0xa8, 0x63, 0xbe, 0xbc, 0x0d,
395 0x14, 0x3c, 0x2e, 0x11, 0x1f, 0xd2, 0xf4, 0x57,
396 0xb3, 0x47, 0xf8, 0xa6, 0x1b, 0xc3, 0xa7, 0x95,
397 0x2d, 0xd4, 0xca, 0xb8, 0x0d, 0xfb, 0x06, 0x85,
398 0xda, 0x63, 0xf0, 0x3e, 0x9d, 0x5e, 0xee, 0xce,
399 0xed, 0x74, 0x1d, 0x2c, 0x97, 0x3f, 0x71, 0x95,
400 0x12, 0x03, 0xc5, 0x92, 0x46, 0x84, 0x1b, 0x07,
401 0xe6, 0xb4, 0x1d, 0x3a, 0xf1, 0x89, 0x90, 0x50,
402 0x10, 0x29, 0x34, 0xc0, 0x90, 0xbe, 0x4a, 0xa9,
403 0x0d, 0xb0, 0x7b, 0xfb, 0x35, 0xee, 0x4e, 0x34,
404 0xec, 0x5a, 0x58, 0xbc, 0xb8, 0xda, 0x38, 0x88,
405 0x8c, 0x74, 0x1e, 0xc9, 0xab, 0x78, 0x2e, 0x2a,
406 0x17, 0x8a, 0x43, 0x3d, 0xa1, 0x2a, 0x41, 0xb5,
407 0xd6, 0xe8, 0x5b, 0xc5, 0x4a, 0x1c, 0x3c, 0x9f,
408 0x8d, 0x3a, 0x69, 0x88, 0xf8, 0x80, 0xd2, 0x11,
409 0xfc, 0x7e, 0x80, 0x8e, 0x7f, 0x85, 0x64, 0x9c,
410 0x46, 0x58, 0xc8, 0x48, 0x98, 0x4b, 0xf5, 0x73,
411 0x3f, 0x49, 0xce, 0x53, 0x2c, 0xd5, 0xfc, 0x33,
412 0xf1, 0x6f, 0xd8, 0xe9, 0x2e, 0x70, 0x2e, 0xdc,
413 0xe5, 0x43, 0x80, 0x38, 0xf2, 0x87, 0xed, 0x85,
414 0xe4, 0x3e, 0x45, 0x14, 0x20, 0xcf, 0xa0, 0x61,
415 0x4f, 0xe8, 0xd7, 0x5b, 0xb3, 0x0d, 0x0e, 0x4e,
416 0x4d, 0xce, 0xbe, 0xba, 0xaa, 0x90, 0x09, 0xcb,
417 0x4b, 0x5d, 0x08, 0xff, 0x52, 0xd5, 0x23, 0xbc,
418 0xad, 0x8d, 0xd3, 0x06, 0x4a, 0xa0, 0x51, 0x56,
419 0xa7, 0xd8, 0x33, 0xab, 0xbc, 0xd0, 0xdf, 0x92,
420 0x87, 0x20, 0x2d, 0x7b, 0x5e, 0xfa, 0x30, 0xa7,
421 0x06, 0x06, 0xe5, 0x4f, 0x2c, 0xb5, 0x61, 0xd7,
422 0x54, 0xd3, 0xdf, 0xd0, 0x0a, 0xb0, 0x06, 0xce,
423 0xf6, 0x86, 0xb7, 0x8e, 0xaa, 0x7b, 0x78, 0xd5,
424 0xb9, 0xeb, 0x07, 0xac, 0x5f, 0xc5, 0xd2, 0x8c,
425 0x40, 0xe0, 0x7f, 0x98, 0xd4, 0xe5, 0x4b, 0xca,
426 0xfb, 0x47, 0xef, 0xef, 0xb9, 0x4d, 0x6d, 0x8f,
427 0x82, 0x68, 0x74, 0x84, 0xe0, 0x0a, 0x93, 0x0f,
428 0xb2, 0x01, 0xa9, 0x9f, 0x68, 0x6a, 0xe8, 0xf7,
429 0xfb, 0x0b, 0xde, 0x17, 0xe0, 0x30, 0x38, 0x51,
430 0xbc, 0x07, 0xb8, 0x2c, 0x91, 0x0f, 0xc1, 0x0e,
431 0xa6, 0xf9, 0xf0, 0xd5, 0x48, 0x76, 0x8a, 0xde,
432 0x74, 0xe3, 0x30, 0x65, 0x56, 0xb3, 0x5c, 0xe2,
433 0x89, 0x8d, 0xda, 0x80, 0xad, 0x0f, 0x22, 0xfb,
434 0x24, 0x1d, 0x16, 0xdd, 0x34, 0x4b, 0x90, 0x58,
435 0x4e, 0x0c, 0x13, 0x28, 0xcf, 0x1d, 0xa4, 0xaa,
436 0xb7, 0xf3, 0xb1, 0x66, 0xad, 0x3b, 0xcf, 0x79,
437 0x12, 0x04, 0xd7, 0x79, 0xd9, 0x5f, 0xdf, 0x89,
438 0xb2, 0x5b, 0xa7, 0x9a, 0x26, 0x1e, 0x67, 0x46,
439 0x7c, 0x66, 0x95, 0x67, 0xe6, 0x45, 0x8b, 0x1f,
440 0x65, 0x79, 0x9f, 0x6d, 0x11, 0x81, 0x17, 0x0d,
441 0x11, 0xb0, 0x5c, 0xb4, 0xc7, 0x27, 0x87, 0xab,
442 0x5d, 0x0a, 0x18, 0xae, 0x4e, 0x06, 0xa3, 0x3d,
443 0xc7, 0xb0, 0x22, 0xba, 0x03, 0xa4, 0x0f, 0xe5,
444 0x1c, 0x72, 0x2a, 0x04, 0xce, 0x83, 0xe9, 0xf3,
445 0xd7, 0xc9, 0x67, 0x6c, 0x1e, 0x6b, 0x3c, 0x9b,
446 0x0b, 0x5e, 0x6a, 0xa6, 0x79, 0x0a, 0xf1, 0xbe,
447 0xd7, 0xb4, 0x6f, 0x45, 0x1e, 0xfb, 0x78, 0x97,
448 0xaf, 0x34, 0x76, 0x95, 0x52, 0xf7, 0x3d, 0x5d,
449 0x07, 0x28, 0x57, 0x9c, 0x4a, 0x0f, 0xcf, 0x0b,
450 0x1b, 0xc4, 0xc2, 0x72, 0xd7, 0x72, 0x38, 0x9b,
451 0xea, 0xeb, 0xee, 0xae, 0x34, 0xc8, 0x01, 0xd7,
452 0xa5, 0xe3, 0xce, 0x41, 0xad, 0x02, 0x60, 0x23,
453 0x18, 0x36, 0xba, 0x17, 0xfa, 0xcf, 0xe4, 0xda,
454 0xdc, 0xfc, 0x82, 0xdc, 0x7c, 0x11, 0xf4, 0xb8,
455 0x52, 0x5d, 0xf7, 0x2f, 0xc8, 0xfe, 0x4a, 0xe6,
456 0xb9, 0xaf, 0x4b, 0x17, 0x18, 0x91, 0xc2, 0xfe,
457 0xd7, 0x3a, 0x77, 0x0c, 0xa0, 0x43, 0x9c, 0x6f,
458 0x13, 0x06, 0xbe, 0x6e, 0xe0, 0x1a, 0x3c, 0xf3,
459 0xf5, 0xcc, 0x78, 0xfb, 0x5d, 0xd5, 0xda, 0xb7,
460 0x58, 0xea, 0x86, 0x42, 0x6b, 0x32, 0xff, 0xb2,
461 0xe2, 0xee, 0x03, 0x1f, 0xf4, 0xef, 0xdb, 0x53,
462 0x79, 0xd5, 0x4e, 0xaf, 0x60, 0x8e, 0x02, 0xc2,
463 0xcc, 0x39, 0x97, 0x7b, 0xfd, 0xa1, 0xf8, 0x7a,
464 0x26, 0xe8, 0x55, 0xd6, 0xa4, 0x8b, 0xa0, 0x1b,
465 0x2d, 0x63, 0xaa, 0x73, 0x71, 0x6e, 0xbf, 0x8b,
466 0x3b, 0xe3, 0x1b, 0x0d, 0xbb, 0x2e, 0x44, 0x09,
467 0x64, 0xac, 0xc7, 0x9e, 0xb5, 0xc6, 0x77, 0xb0,
468 0x79, 0xb3, 0xaa, 0xfc, 0x67, 0x57, 0x9a, 0x50,
469 0x81, 0x37, 0x14, 0x7c, 0xd7, 0xa0, 0xd4, 0x6a,
470 0x79, 0x84, 0x51, 0x0e, 0x95, 0x0a, 0x30, 0xa3,
471 0x60, 0x55, 0x48, 0x05, 0x16, 0xae, 0x43, 0x90,
472 0xdc, 0x8e, 0x09, 0xbe, 0x79, 0xf6, 0x90, 0x74,
473 0xf8, 0x20, 0x96, 0x4d, 0xa7, 0xf5, 0x1a, 0x2b,
474 0xc7, 0x15, 0x9d, 0x18, 0xf7, 0x94, 0x87, 0xf7,
475 0xf4, 0xfb, 0x0d, 0x61, 0xb6, 0xd7, 0xbe, 0x10,
476 0x8e, 0x47, 0x3c, 0x10, 0x44, 0x90, 0x52, 0x21,
477 0x83, 0xc0, 0xf5, 0x99, 0xaa, 0xbc, 0xf6, 0x55,
478 0xae, 0xf5, 0xb2, 0xa4, 0xcd, 0x4d, 0xb9, 0x38,
479 0x6c, 0xbc, 0x80, 0xc3, 0xad, 0xf4, 0x46, 0x31,
480 0x01, 0x58, 0x2d, 0x88, 0x57, 0xc3, 0x23, 0xd1,
481 0x64, 0xc9, 0xa3, 0x21, 0x6b, 0x8b, 0x8a, 0x23,
482 0x2c, 0x4f, 0xa9, 0xcd, 0x67, 0xfa, 0x77, 0xad,
483 0xa3, 0x16, 0xa2, 0xe5, 0x19, 0x14, 0x70, 0x41,
484 0x5b, 0xda, 0x14, 0xde, 0xe3, 0xe5, 0xc1, 0x15,
485 0xb4, 0x77, 0xa4, 0x9b, 0xb8, 0xb1, 0x28, 0x51,
486 0x30, 0xb4, 0xf1, 0xf3, 0xf8, 0x6d, 0xd0, 0xc3,
487 0x8c, 0x4c, 0x76, 0xb0, 0x9a, 0xdf, 0xc8, 0xbe,
488 0xf8, 0x4a, 0x61, 0x6e, 0x3e, 0xd6, 0x3c, 0xe8,
489 0xde, 0x56, 0xa0, 0x9c, 0x25, 0xbe, 0xce, 0x93,
490 0x1f, 0x88, 0xfb, 0x9a, 0x1a, 0xe2, 0xff, 0x88,
491 0xad, 0x10, 0xcb, 0x6c, 0xd6, 0xe7, 0x39, 0x0b,
492 0xe5, 0x1a, 0x06, 0x05, 0x64, 0x5b, 0x0a, 0xdf,
493 0x22, 0x58, 0xd7, 0xfb, 0x88, 0x12, 0xdd, 0xb7,
494 0x52, 0x3a, 0xc9, 0xbf, 0x49, 0xdf, 0x8c, 0x87,
495 0x9f, 0x84, 0xb5, 0x0a, 0xf6, 0x00, 0x52, 0xae,
496 0x67, 0x12, 0x1a, 0x8c, 0x71, 0x15, 0xf5, 0xa1,
497 0x13, 0x39, 0xf0, 0x91, 0x7e, 0x88, 0x7c, 0xb3,
498 0x95, 0x50, 0x02, 0xa6, 0x63, 0xb5, 0x64, 0xfb,
499 0x90, 0x87, 0x61, 0xe2, 0x27, 0xaf, 0x11, 0x0c,
500 0x73, 0x83, 0xef, 0xa9, 0x28, 0xfe, 0xc8, 0x85,
501 0x1a, 0x3a, 0xde, 0xf2, 0xe5, 0x25, 0x64, 0x6d,
502 0xaa, 0x41, 0x4c, 0x80, 0x2e, 0x84, 0xff, 0xc1,
503 0xc0, 0x54, 0x0c, 0x29, 0x1b, 0xa3, 0x07, 0x7c,
504 0x33, 0x4c, 0x10, 0xf6, 0x6f, 0x79, 0xdf, 0xd3,
505 0xf0, 0x24, 0x57, 0xf1, 0x60, 0xe1, 0xf0, 0xbd,
506 0xc4, 0x1f, 0xf4, 0x67, 0xd2, 0xd3, 0xcc, 0x6a,
507 0x07, 0x72, 0x44, 0x16, 0x85, 0x46, 0xd0, 0x73,
508 0x87, 0xa9, 0xc7, 0x2f, 0xd1, 0xf5, 0xec, 0xe3,
509 0x28, 0xa3, 0x93, 0x4f, 0xd7, 0x76, 0xc1, 0x3c,
510 0x0d, 0x13, 0x33, 0xcf, 0x5b, 0xbd, 0x6a, 0x52,
511 0x4e, 0xee, 0xc8, 0x5e, 0xa1, 0x58, 0x4a, 0x08,
512 0x81, 0xd9, 0x23, 0xcc, 0xfb, 0x1c, 0xb2, 0xd8,
513 0xa3, 0xe4, 0x53, 0xfe, 0xf4, 0x4b, 0x48, 0xc1,
514 0x20, 0xa4, 0x97, 0xf8, 0x38, 0xa3, 0x69, 0xc1,
515 0x11, 0xf0, 0xa1, 0x3b, 0xa9, 0x9a, 0x12, 0x61,
516 0xe8, 0x8d, 0x99, 0x44, 0x3f, 0x94, 0x72, 0x82,
517 0x19, 0x96, 0x62, 0xb0, 0xa6, 0x64, 0x05, 0x19,
518 0x8f, 0xd6, 0x5d, 0x05, 0xbf, 0x79, 0x9e, 0x9d,
519 0xe4, 0x93, 0x4c, 0xad, 0x61, 0x8c, 0x18, 0xda,
520 0xb6, 0x2e, 0xb3, 0xca, 0x14, 0x4d, 0x53, 0xa4,
521 0x97, 0x27, 0x10, 0x56, 0xa2, 0x67, 0x5a, 0x5a,
522 0x5e, 0x13, 0xc0, 0xdb, 0xa7, 0x9f, 0x45, 0x5b,
523 0xeb, 0x1a, 0x14, 0x0c, 0x8c, 0x38, 0x5e, 0x77,
524 0x9a, 0xec, 0x75, 0x68, 0x93, 0x65, 0x02, 0x9c,
525 0xfb, 0x62, 0x60, 0x49, 0xdd, 0xb2, 0x2a, 0x67,
526 0x86, 0xe3, 0x8a, 0x7d, 0x8c, 0x46, 0x78, 0x81,
527 0x60, 0x69, 0xf2, 0x3f, 0x74, 0x11, 0x35, 0xff,
528 0x77, 0xa3, 0x66, 0x20, 0xfc, 0x98, 0x4a, 0x35,
529 0x7a, 0x52, 0xe4, 0x90, 0x13, 0x80, 0xb9, 0xa6,
530 0x73, 0x7a, 0x7d, 0x66, 0x6e, 0x6b, 0xb6, 0x43,
531 0x10, 0xd5, 0x91, 0x2b, 0x66, 0xdd, 0x89, 0x87,
532 0xe3, 0x8c, 0x58, 0x53, 0x2f, 0x40, 0x74, 0x45,
533 0x1b, 0x77, 0x7a, 0xa4, 0x44, 0x19, 0x78, 0xba,
534 0x87, 0x10, 0x41, 0x31, 0x32, 0x5f, 0x87, 0x68,
535 0xde, 0x43, 0x4a, 0xef, 0x33, 0xb3, 0x11, 0x83,
536 0xa9, 0xc2, 0x6f, 0x8d, 0x34, 0xe2, 0x95, 0x84,
537 0x3a, 0x4f, 0x6f, 0x8c, 0x31, 0x1d, 0xb6, 0xf5,
538 0x95, 0x0d, 0x01, 0x11, 0x20, 0xdf, 0x72, 0xf3,
539 0x3f, 0x9a, 0x33, 0xaa, 0xb1, 0x06, 0x6a, 0x63,
540 0x47, 0x91, 0x01, 0xdf, 0xb3, 0x54, 0x36, 0xfd,
541 0x06, 0x2d, 0xb8, 0x08, 0xe3, 0xd3, 0x65, 0xac,
542 0x66, 0x03, 0xee, 0xa4, 0x63, 0xbd, 0xd4, 0xce,
543 0xbd, 0x79, 0xa7, 0x48, 0x38, 0xc5, 0x7d, 0xb5,
544 0x71, 0x9a, 0x3c, 0x11, 0x7c, 0x6c, 0xe2, 0x54,
545 0x02, 0x5d, 0x42, 0xab, 0x25, 0x93, 0x66, 0x01,
546 0x37, 0x78, 0x35, 0x4a, 0x8c, 0x19, 0x4d, 0x00,
547 0x75, 0x4f, 0xcc, 0xc0, 0x26, 0x82, 0xc1, 0x35,
548 0x8c, 0xc7, 0xc2, 0x59, 0x01, 0x3e, 0x98, 0x22,
549 0x88, 0x9c, 0x90, 0x75, 0x05, 0x33, 0x07, 0xb9,
550 0x39, 0x81, 0x38, 0x58, 0x10, 0x29, 0xcf, 0xc8,
551 0x98, 0xb2, 0x03, 0xd7, 0x5b, 0xb3, 0x18, 0xba,
552 0x34, 0x0c, 0x9f, 0xab, 0xd7, 0xed, 0x29, 0x82,
553 0x41, 0xe0, 0x20, 0x97, 0x57, 0x92, 0xb2, 0xb8,
554 0x10, 0x2d, 0x0b, 0xa2, 0xc5, 0x8f, 0x90, 0x6f,
555 0xed, 0x12, 0x56, 0x25, 0xbe, 0xfd, 0x75, 0xf7,
556 0xb6, 0xf8, 0x40, 0x67, 0x39, 0x11, 0xfa, 0x15,
557 0xae, 0x6a, 0x54, 0x5f, 0x32, 0x2b, 0xf8, 0x48,
558 0x55, 0xbe, 0x86, 0x2f, 0x69, 0x48, 0x5b, 0x5d,
559 0x4d, 0xb7, 0x35, 0xaa, 0xb6, 0x91, 0x88, 0x19,
560 0x96, 0x1c, 0x68, 0xf6, 0x85, 0x9e, 0xb3, 0xb2,
561 0xa3, 0x32, 0xd4, 0x52, 0x70, 0xb7, 0x62, 0xe3,
562 0x14, 0xb6, 0x78, 0x5f, 0x1b, 0x1d, 0x04, 0x9c,
563 0x26, 0x0c, 0x33, 0x94, 0xb1, 0x97, 0x08, 0xdb,
564 0x0b, 0x39, 0x29, 0xd4, 0xbc, 0x6d, 0xdf, 0x02,
565 0xc6, 0x99, 0xab, 0x99, 0x32, 0xe5, 0xce, 0x51,
566 0x4f, 0xae, 0xb8, 0x8b, 0xe0, 0xaf, 0x07, 0xc4,
567 0xf9, 0x41, 0x7c, 0x59, 0xa0, 0xac, 0x74, 0x4d,
568 0x7e, 0x43, 0x77, 0x9c, 0x06, 0x49, 0x79, 0x8a,
569 0x14, 0x73, 0x93, 0xa8, 0x5b, 0x1b, 0x34, 0x29,
570 0x78, 0x04, 0x2f, 0xd7, 0x1f, 0x13, 0x90, 0xe0,
571 0xdd, 0x3b, 0x42, 0x6b, 0x79, 0x6e, 0x52, 0xc7,
572 0x0f, 0x38, 0xda, 0x01, 0x2c, 0x8d, 0xe6, 0x94,
573 0x5d, 0x59, 0x27, 0x1d, 0x10, 0x4e, 0x11, 0x36,
574 0xfb, 0x53, 0x16, 0x05, 0x25, 0xf2, 0x64, 0xd8,
575 0xf9, 0xcd, 0x5c, 0xfe, 0xb4, 0x18, 0x44, 0x80,
576 0x10, 0xbc, 0x3d, 0xf3, 0x1d, 0x5a, 0xf0, 0xc1,
577 0xc3, 0x55, 0xff, 0x41, 0x3e, 0xe3, 0xef, 0x44,
578 0xb2, 0xc0, 0x01, 0x18, 0xa2, 0x49, 0x88, 0x78,
579 0x0d, 0x4c, 0xc8, 0x73, 0xcf, 0x30, 0x85, 0x3a,
580 0x88, 0x90, 0x01, 0xcf, 0x69, 0x53, 0xa3, 0x18,
581 0x3f, 0xd6, 0xe7, 0x94, 0x14, 0xa7, 0xae, 0xcd,
582 0x6f, 0x11, 0x72, 0xfe, 0x2b, 0xb0, 0x81, 0x53,
583 0xea, 0x67, 0xd6, 0xe4, 0xca, 0x42, 0xa0, 0xf9,
584 0xb1, 0xd4, 0xb5, 0x3b, 0xc9, 0xf0, 0x36, 0xc1,
585 0x1c, 0xf4, 0xb1, 0xf6, 0x84, 0xd0, 0x86, 0x6c,
586 0x76, 0x9a, 0x03, 0xc2, 0xb6, 0x2e, 0x9a, 0x46,
587 0xf5, 0x5f, 0x2c, 0x38, 0xac, 0xad, 0x6f, 0x2e,
588 0x7a, 0x18, 0x2d, 0x22, 0x95, 0x5e, 0x5e, 0xc9,
589 0x7a, 0x0a, 0x56, 0xe1, 0xc7, 0x15, 0xfd, 0xbf,
590 0xff, 0xf7, 0x7e, 0x85, 0x20, 0xa9, 0x8a, 0x9c,
591 0xa9, 0x7d, 0xe8, 0xed, 0xfc, 0x7f, 0xbb, 0xf0,
592 0x05, 0x3f, 0xce, 0x4f, 0x4c, 0xee, 0xa4, 0xa0,
593 0xcc, 0x9c, 0x62, 0x1e, 0xd6, 0xd0, 0x30, 0x37,
594 0xb8, 0x98, 0x56, 0x1d, 0xaa, 0xd6, 0x5e, 0x73,
595 0x12, 0xe4, 0x88, 0x82, 0x48, 0x64, 0x06, 0xd7,
596 0x2a, 0x31, 0x50, 0x7b, 0x10, 0x17, 0xb8, 0x4c,
597 0x5a, 0x8d, 0xf1, 0xfc, 0xf1, 0x33, 0x3b, 0x98,
598 0x42, 0x18, 0x5b, 0x35, 0x78, 0xca, 0x8e, 0x41,
599 0x52, 0xae, 0x6d, 0xe1, 0xa2, 0x9d, 0x5b, 0xbd,
600 0xf3, 0x5f, 0x49, 0xc1, 0x27, 0x06, 0xc1, 0xaf,
601 0xc0, 0xa3, 0x9d, 0xf3, 0x1c, 0x8e, 0x90, 0x8a,
602 0xb0, 0x69, 0xb0, 0xc5, 0x11, 0x0c, 0x91, 0x14,
603 0x1f, 0x5e, 0x10, 0xe1, 0x1d, 0x14, 0x30, 0x54,
604 0x1e, 0x17, 0x3d, 0x31, 0x7b, 0xbf, 0x2f, 0x9d,
605 0x6d, 0x63, 0x32, 0xf0, 0x9d, 0x9f, 0x95, 0x3d,
606 0x0b, 0xd2, 0x4d, 0x10, 0xe2, 0x3f, 0x67, 0x69,
607 0x43, 0x9a, 0x4a, 0x2c, 0x54, 0x71, 0xa8, 0xa0,
608 0x9e, 0x9f, 0x10, 0xaf, 0x1b, 0xce, 0x99, 0xe3,
609 0x25, 0x32, 0x10, 0x54, 0x80, 0xfe, 0xda, 0x57,
610 0xd0, 0xb2, 0x92, 0x7f, 0xbb, 0x5f, 0xe7, 0x4d,
611 0x1b, 0x3d, 0x46, 0x4d, 0xe4, 0x4c, 0xd6, 0xaf,
612 0x1a, 0x32, 0x12, 0x40, 0xb8, 0x84, 0x8e, 0xe4,
613 0x80, 0xce, 0x7e, 0xc1, 0x13, 0x8b, 0xb0, 0xb7,
614 0x6f, 0x24, 0xba, 0x85, 0x50, 0x83, 0xc3, 0xcf,
615 0x19, 0xb3, 0xf0, 0xc7, 0xee, 0x68, 0xbe, 0x9e,
616 0x6d, 0xb9, 0xfb, 0xd5, 0x29, 0xce, 0x82, 0xcd,
617 0x69, 0x16, 0x68, 0x6b, 0x6a, 0xf4, 0x02, 0x32,
618 0xce, 0x60, 0x37, 0x0c, 0xb9, 0x38, 0x92, 0x9c,
619 0x42, 0xa9, 0x0b, 0x53, 0x96, 0xfe, 0x39, 0xc1,
620 0x24, 0x65, 0x9b, 0xcd, 0xe7, 0x8d, 0x36, 0x07,
621 0x9f, 0x1d, 0x35, 0x8e, 0xdc, 0x4c, 0xb5, 0x68,
622 0xc5, 0xfd, 0x44, 0x19, 0xf2, 0x6c, 0x59, 0x1c,
623 0xb1, 0x0b, 0x35, 0x48, 0x86, 0x1a, 0x05, 0x22,
624 0x03, 0x0c, 0x0c, 0xa2, 0x92, 0x90, 0x35, 0xfb,
625 0x37, 0x94, 0xc7, 0x15, 0x84, 0xae, 0xe8, 0x05,
626 0xa0, 0xf7, 0x30, 0x11, 0x5c, 0xe4, 0x5d, 0x3e,
627 0x12, 0x54, 0x80, 0x54, 0x6b, 0x09, 0x8c, 0xce,
628 0x80, 0x5e, 0xa7, 0xc8, 0x6a, 0x0c, 0x56, 0xe1,
629 0x18, 0x7d, 0xc9, 0x39, 0xc1, 0xef, 0xe3, 0x25,
630 0xa0, 0x8b, 0x2f, 0x60, 0x3a, 0x43, 0x39, 0xa6,
631 0x28, 0x28, 0x7b, 0x4c, 0x77, 0xd4, 0x49, 0x61,
632 0x46, 0xe9, 0x1b, 0x45, 0xd6, 0xb1, 0x56, 0xe1,
633 0x7d, 0x34, 0xcd, 0x06, 0xb6, 0x67, 0x8d, 0x7d,
634 0x7a, 0xe2, 0xbe, 0x68, 0x35, 0xa6, 0x78, 0xe5,
635 0x47, 0x48, 0xb7, 0xc7, 0xde, 0xcd, 0xc9, 0x05,
636 0xb4, 0xe7, 0x50, 0x48, 0xe1, 0x4b, 0xfe, 0x76,
637 0x77, 0xc6, 0xf7, 0x5f, 0xcb, 0xc2, 0xa8, 0xd7,
638 0xd6, 0x8a, 0xe5, 0x49, 0xd9, 0xca, 0x45, 0xf4,
639 0xda, 0xcd, 0x33, 0xd1, 0x59, 0x2d, 0x9e, 0xc1,
640 0x5c, 0xe6, 0x01, 0x18, 0xb8, 0xf0, 0x5e, 0xb1,
641 0x69, 0x95, 0x2f, 0x02, 0x2a, 0xe7, 0x4a, 0xd7,
642 0xd1, 0xc3, 0xd5, 0x6f, 0x15, 0xc8, 0xdc, 0x29,
643 0xde, 0xb9, 0x3f, 0x8b, 0xa6, 0xbc, 0xdd, 0x25,
644 0x84, 0x35, 0x3c, 0x90, 0x2d, 0xc2, 0x1e, 0x98,
645 0x8a, 0x50, 0x09, 0x77, 0x42, 0xe9, 0x35, 0x8a,
646 0x7c, 0x97, 0xbf, 0xe8, 0xbf, 0x56, 0xd0, 0x8b,
647 0x65, 0xd3, 0xaf, 0x1e, 0x05, 0x94, 0xfa, 0xac,
648 0xa8, 0x2b, 0x28, 0xcb, 0x37, 0x3e, 0xe8, 0xbb,
649 0x66, 0x3a, 0xed, 0xb2, 0x48, 0x10, 0x0f, 0x3a,
650 0x5a, 0xc5, 0xdb, 0x26, 0x0e, 0xaa, 0x5e, 0x69,
651 0x15, 0xd6, 0x81, 0xae, 0xbd, 0xe6, 0x03, 0xf1,
652 0xf6, 0x37, 0xc8, 0xde, 0x70, 0x1f, 0x64, 0xb9,
653 0x5e, 0xbf, 0x2e, 0x4f, 0xb1, 0xea, 0xa0, 0x17,
654 0xe6, 0x7c, 0xf9, 0x2f, 0x1e, 0xd8, 0x58, 0xde,
655 0xa7, 0xf0, 0x46, 0x52, 0x95, 0xdf, 0xa4, 0x96,
656 0xd0, 0xc4, 0x97, 0x2b, 0x95, 0xcd, 0x5e, 0x40,
657 0x23, 0x5c, 0x10, 0xee, 0xba, 0x72, 0x9b, 0xcf,
658 0x0b, 0xe8, 0x18, 0x3a, 0x70, 0xd2, 0x5e, 0x07,
659 0x68, 0x93, 0xef, 0x4a, 0x5b, 0x8d, 0x72, 0x41,
660 0x4e, 0xea, 0x33, 0x6a, 0x0a, 0x5e, 0xfb, 0x02,
661 0x3f, 0xd4, 0xed, 0x5b, 0xe0, 0x42, 0x84, 0xd4,
662 0xaa, 0x85, 0xdc, 0x5b, 0x67, 0xee, 0x71, 0x67,
663 0xba, 0x8e, 0xd2, 0xbe, 0x61, 0xdf, 0x5a, 0x26,
664 0xb9, 0xf0, 0x77, 0x81, 0x53, 0x24, 0x16, 0xcb,
665 0x8c, 0xb8, 0x06, 0x6e, 0x68, 0xda, 0xc8, 0x2d,
666 0x17, 0x54, 0xdb, 0x46, 0xcb, 0xfd, 0x1f, 0x3d,
667 0x94, 0x81, 0x09, 0x4b, 0xfa, 0xb1, 0x46, 0xd9,
668 0x11, 0xa3, 0xb7, 0x31, 0x9c, 0xd2, 0x38, 0xd6,
669 0xba, 0x3d, 0xa3, 0x74, 0xd8, 0xf1, 0x24, 0xe8,
670 0x9c, 0xcb, 0x1d, 0xf9, 0x4a, 0xf7, 0xc8, 0x4b,
671 0xfe, 0x97, 0x7c, 0xa1, 0x02, 0xeb, 0x40, 0xc3,
672 0x89, 0x71, 0x01, 0xcd, 0x33, 0x2a, 0xc2, 0x82,
673 0xce, 0x62, 0x8d, 0x53, 0x7c, 0xdf, 0xce, 0xd7,
674 0xf5, 0xa8, 0x4f, 0xf2, 0xf2, 0x2e, 0xc1, 0xeb,
675 0x97, 0x99, 0x37, 0x3c, 0x53, 0xa6, 0xb4, 0x46,
676 0x05, 0x64, 0x92, 0x87, 0x08, 0x3c, 0x23, 0x4b,
677 0x9d, 0x67, 0x18, 0xf9, 0xe2, 0x0b, 0x1c, 0x39,
678 0xd3, 0x87, 0x70, 0xc0, 0xb9, 0x1e, 0x52, 0x0a,
679 0x0f, 0x48, 0xe2, 0xe7, 0x51, 0x72, 0x94, 0xf7,
680 0xa3, 0xdc, 0xe5, 0x66, 0x33, 0x39, 0x54, 0x06,
681 0x55, 0x93, 0x30, 0xf9, 0x5e, 0x76, 0x8f, 0xe0,
682 0x59, 0x4d, 0x0d, 0xa7, 0xf5, 0xbe, 0xdb, 0x20,
683 0xad, 0x0d, 0x76, 0x88, 0x5f, 0x9c, 0x7c, 0x75,
684 0x2f, 0x2a, 0x0b, 0x79, 0x6e, 0xd3, 0xe2, 0x66,
685 0xf5, 0x4a, 0x2d, 0x87, 0x87, 0x49, 0x84, 0x17,
686 0xa2, 0x62, 0x4c, 0xbb, 0xe4, 0x6e, 0x98, 0x10,
687 0xc9, 0xfb, 0x8a, 0x04, 0x68, 0x8d, 0x22, 0x66,
688 0xad, 0xea, 0x2a, 0xc9, 0x97, 0x2d, 0x3c, 0xbc,
689 0xd0, 0x77, 0x5f, 0xe6, 0xb8, 0x7f, 0xe6, 0xf6,
690 0x39, 0xbf, 0x56, 0x0e, 0x26, 0x6d, 0xc5, 0x3e,
691 0x53, 0x19, 0xd6, 0xb4, 0x57, 0x36, 0xa3, 0xc6,
692 0xd3, 0x3d, 0x66, 0x79, 0x30, 0x5c, 0x14, 0x0c,
693 0x0f, 0x3e, 0x96, 0xae, 0x90, 0x97, 0xab, 0x0d,
694 0x9f, 0xc3, 0xe7, 0x66, 0x3e, 0xe0, 0x31, 0x43,
695 0x4b, 0x01, 0xb3, 0x0e, 0x9e, 0x8c, 0x82, 0x4a,
696 0x8c, 0xc7, 0x79, 0x85, 0xdf, 0x75, 0x0d, 0xb4,
697 0x2b, 0x03, 0x14, 0xef, 0x72, 0x58, 0xfd, 0x64,
698 0xc8, 0xe3, 0x0d, 0x9a, 0x14, 0x6f, 0x76, 0xf9,
699 0x46, 0xd1, 0xd2, 0x81, 0xb3, 0x16, 0x6e, 0xc7,
700 0x76, 0x82, 0xce, 0xf4, 0xee, 0x33, 0x00, 0xe6,
701 0x77, 0xc4, 0xad, 0x4f, 0x06, 0xa7, 0x48, 0x80,
702 0x9e, 0x21, 0x66, 0xca, 0x75, 0x69, 0x57, 0xcb,
703 0xf0, 0x67, 0x6a, 0xaa, 0x8f, 0x88, 0x14, 0xbd,
704 0x65, 0x62, 0xe2, 0xad, 0xcc, 0x22, 0x88, 0x7b,
705 0x94, 0xbd, 0x0e, 0xcd, 0xb6, 0x69, 0xa2, 0xcb,
706 0x7d, 0x57, 0x5c, 0xb4, 0x92, 0x80, 0x13, 0x99,
707 0x84, 0xf3, 0x79, 0x0a, 0x2d, 0x70, 0xa4, 0xe0,
708 0xde, 0xc6, 0x32, 0xb0, 0x8a, 0x62, 0xb5, 0xcf,
709 0xfa, 0x5e, 0x5a, 0x92, 0x32, 0x7d, 0x34, 0x07,
710 0xb5, 0x52, 0x3a, 0xb5, 0x7d, 0x0f, 0xa1, 0xba,
711 0x56, 0xd0, 0x07, 0x76, 0x11, 0xf2, 0xc3, 0x33,
712 0x9d, 0xbd, 0x12, 0x35, 0x5e, 0xf7, 0x05, 0x88,
713 0x76, 0x94, 0xa6, 0xbf, 0xed, 0xb8, 0xa4, 0xa2,
714 0x0c, 0xbe, 0x0f, 0x6a, 0xaf, 0xf3, 0x1b, 0x33,
715 0x4a, 0xb7, 0x68, 0x3f, 0xbe, 0x95, 0x13, 0x97,
716 0x0f, 0x15, 0x17, 0x1b, 0x23, 0xaa, 0x08, 0x78,
717 0xa6, 0x5b, 0x08, 0xa2, 0x9d, 0x03, 0xa8, 0xa7,
718 0x39, 0xdc, 0xbc, 0x9a, 0x85, 0xf5, 0xe5, 0x55,
719 0x59, 0x3c, 0xef, 0xf9, 0x3f, 0x22, 0x8e, 0xf8,
720 0xd8, 0x3e, 0x02, 0x0b, 0xd8, 0x78, 0x4b, 0x15,
721 0x7f, 0xaa, 0x2c, 0xff, 0xbe, 0x77, 0x33, 0xc7,
722 0x6a, 0x12, 0xaa, 0xa4, 0xbe, 0xc0, 0x3b, 0xcb,
723 0x13, 0x9d, 0x9c, 0x5a, 0x9f, 0x8a, 0x57, 0x36,
724 0x4f, 0x02, 0x5a, 0xf8, 0x1d, 0x97, 0x77, 0x43,
725 0xc8, 0xa5, 0xb7, 0x9b, 0x10, 0x98, 0xfd, 0x58,
726 0xbf, 0x42, 0xf6, 0xbf, 0xff, 0x6c, 0x40, 0x18,
727 0x18, 0xdf, 0xac, 0x57, 0x71, 0xea, 0xcc, 0x8e,
728 0xfd, 0xfe, 0x10, 0xfb, 0xb9, 0xfe, 0xbc, 0x9a,
729 0x9c, 0x27, 0xe4, 0x10, 0x15, 0x94, 0x41, 0xa1,
730 0xcc, 0xf6, 0x25, 0x49, 0x4f, 0x96, 0xc1, 0x8c,
731 0x9e, 0x3e, 0x18, 0x29, 0x49, 0x92, 0xe7, 0xfe,
732 0x22, 0xff, 0xed, 0x02, 0x16, 0x90, 0xef, 0xac,
733 0xec, 0x95, 0x1d, 0x5b, 0x94, 0x9c, 0xf6, 0x7c,
734 0x1b, 0x5a, 0x9d, 0xb0, 0x9b, 0x05, 0x36, 0xbf,
735 0xef, 0xec, 0x63, 0x35, 0x40, 0x24, 0x45, 0x40,
736 0x30, 0x1a, 0x9b, 0x90, 0xc3, 0xc2, 0xf7, 0x37,
737 0xfb, 0x08, 0x8e, 0x48, 0x19, 0x48, 0xed, 0xa8,
738 0xa8, 0x04, 0x6f, 0xd0, 0x33, 0xe9, 0xb8, 0x8d,
739 0xe7, 0x1e, 0x5c, 0x47, 0x74, 0xc0, 0x66, 0x30,
740 0x4e, 0xa7, 0x86, 0x73, 0xf1, 0xe5, 0x78, 0xa6,
741 0xe0, 0xc1, 0xda, 0x13, 0x72, 0x07, 0x85, 0x34,
742 0x63, 0x95, 0x49, 0x30, 0x4b, 0x9d, 0x03, 0xf1,
743 0x7a, 0x6b, 0x91, 0xa2, 0x85, 0x41, 0xf9, 0x4a,
744 0xd6, 0xff, 0xff, 0x86, 0xf7, 0xf0, 0xce, 0xb9,
745 0x07, 0xf1, 0x88, 0x04, 0x33, 0xaa, 0xeb, 0x54,
746 0xb2, 0x1c, 0x8e, 0x2e, 0x7b, 0x04, 0xa8, 0xcc,
747 0x2c, 0x7a, 0xb3, 0xad, 0x1a, 0x89, 0x38, 0x89,
748 0xd7, 0x11, 0x3a, 0x8c, 0xcf, 0xe3, 0xc5, 0xba,
749 0xb0, 0xcc, 0xc4, 0xe3, 0x33, 0xf3, 0x18, 0xba,
750 0xec, 0x56, 0xd9, 0x1c, 0x40, 0x70, 0x0d, 0x4e,
751 0x97, 0x01, 0x23, 0xf3, 0x5a, 0xdc, 0xbf, 0x68,
752 0x93, 0xc2, 0x1d, 0x8a, 0x96, 0xb7, 0xac, 0x18,
753 0x6f, 0xf7, 0x84, 0x71, 0x0d, 0x3d, 0xf8, 0xba,
754 0xdf, 0xb6, 0x89, 0x1d, 0x78, 0x19, 0xf2, 0x59,
755 0xe9, 0x15, 0x55, 0x29, 0x73, 0x50, 0x59, 0x14,
756 0x02, 0x21, 0x16, 0x8f, 0x0f, 0xdf, 0xa5, 0xf0,
757 };
758
759 static struct crc_test {
760 uint32_t crc; /* random starting crc */
761 uint32_t start; /* random offset in buf */
762 uint32_t length; /* random length of test */
763 uint32_t crc32c_le; /* expected crc32c_le result */
764 uint32_t crc32_be; /* expected crc32_be result */
765 } test[] = {
766 {0xffffffff, 0x00000000, 0x00001000, 0x13934bef, 0xd8ddcdc3},
767 {0xfe7328ea, 0x00000763, 0x00000717, 0xed2c0d70, 0xc863aef8},
768 {0x4c40684e, 0x00000721, 0x0000011e, 0xd7f46ccc, 0x173a11c4},
769 {0x6b487f90, 0x00000264, 0x000007bc, 0x759e9939, 0xd6307c56},
770 {0x9f5810db, 0x00000afa, 0x00000255, 0x2685197f, 0x2e5c9201},
771 {0xb15c4755, 0x00000d5b, 0x000002a4, 0xd8fadcb5, 0xf682c4be},
772 {0x06518253, 0x00000ffb, 0x00000004, 0xabee2433, 0x3d8abdf9},
773 {0xd9e71c55, 0x00000a2a, 0x00000259, 0x96682af2, 0x47b4d26c},
774 {0x0c1ae843, 0x00000ce4, 0x0000031b, 0x7b637c43, 0x62b47e8b},
775 {0xec3cd517, 0x000002ff, 0x00000566, 0x5d719a77, 0xff5bc5b7},
776 {0x77828e95, 0x0000067f, 0x0000038f, 0x43ee5b6c, 0x1a0cfacd},
777 {0xec87b4e3, 0x00000d1c, 0x000002e3, 0x2ddd2eee, 0x275118a7},
778 {0x412158bb, 0x00000eee, 0x00000111, 0x67b38ba2, 0xa74ecff5},
779 {0x2e52de3e, 0x00000c4a, 0x000003b5, 0xbcc5d61d, 0xbd800707},
780 {0x6ddaae8b, 0x00000d99, 0x00000266, 0x8b535544, 0xecbde1a1},
781 {0x049b6cb1, 0x000009c5, 0x000000b0, 0xfc22cabc, 0xfb78eb9f},
782 {0x77d4b954, 0x0000028a, 0x000007fa, 0x71d00923, 0x8c116f85},
783 {0x5e192355, 0x00000ac1, 0x000001fa, 0xb966b81a, 0x5aa17bbe},
784 {0x7d80b71d, 0x00000213, 0x000001e0, 0x2bba371a, 0xb5906aa6},
785 {0x01f6f1e4, 0x000001d6, 0x00000395, 0xb7e8a647, 0x3ad112b1},
786 {0x1dfabb13, 0x00000e14, 0x000001eb, 0x53917fba, 0xbaee0339},
787 {0xb00a4449, 0x00000bf6, 0x00000409, 0xedecb577, 0x6f3a3979},
788 {0x7ecd3981, 0x0000083f, 0x0000016b, 0xefef62b9, 0xe3e52eed},
789 {0xf8f330d2, 0x000004be, 0x00000757, 0x9357c9f3, 0x0835bc1b},
790 {0x03c38af2, 0x00000d23, 0x000002dc, 0x360fa8c0, 0x2ca885e6},
791 {0x687bb79b, 0x00000f3d, 0x000000c2, 0x448d3be2, 0x79be2f78},
792 {0x6710f550, 0x000009e9, 0x00000603, 0xdbfd1998, 0x1d25f627},
793 {0x873171d1, 0x00000787, 0x000004d5, 0xab7f1b62, 0xa76a5656},
794 {0x373b1314, 0x00000f0f, 0x000000f0, 0x184098ab, 0xba273974},
795 {0x90fad9cd, 0x00000ead, 0x00000152, 0x23ce52ff, 0xb7bc958c},
796 {0x19676fe7, 0x0000007d, 0x0000070d, 0xf8a76f1e, 0xf882b644},
797 {0x89facd45, 0x000005f3, 0x00000473, 0x4331a006, 0xe9dc1396},
798 {0x6f173747, 0x00000fc3, 0x0000003c, 0xb012f08e, 0xc6b888ee},
799 {0x4b44a106, 0x0000075a, 0x0000008b, 0xf6f7ac38, 0x60cd2b74},
800 {0xb620ad06, 0x00000774, 0x0000017e, 0xd34558e6, 0x3a0a615b},
801 {0x976f21e9, 0x000008d7, 0x0000034a, 0xe533aa3a, 0xa99e60be},
802 {0x687628c0, 0x000006c5, 0x0000061b, 0x3a840b15, 0x9bfcaef2},
803 {0xe24ac108, 0x00000cd0, 0x0000032f, 0x51010ae8, 0x20958672},
804 {0x361c44a3, 0x00000304, 0x00000719, 0xfd7bd481, 0xd70ff2b2},
805 {0xd93ff95e, 0x00000db7, 0x0000008e, 0xcfbbc304, 0xad716acd},
806 {0xed752d12, 0x00000883, 0x00000091, 0x65a6c868, 0x95c71c7b},
807 {0xb4ff4b54, 0x000003d3, 0x000001c1, 0xf82597e7, 0x44b7f99b},
808 {0x111b520f, 0x00000708, 0x000000eb, 0xc3e109f3, 0x71bc01ee},
809 {0x62c806f2, 0x00000ba3, 0x0000045c, 0x874d3a72, 0xc539b753},
810 {0x40d97470, 0x000005e1, 0x0000058d, 0x87a9684f, 0xea6073a5},
811 {0x4312179c, 0x00000056, 0x0000070e, 0x809a00f5, 0x209aea3b},
812 {0x13d5f84c, 0x00000a2d, 0x00000104, 0xf3d27578, 0xe087a8b6},
813 {0x1f302cb2, 0x00000151, 0x00000014, 0x1e162693, 0x95e4b90e},
814 {0xe491db24, 0x00000600, 0x000006f6, 0x7ff09615, 0x77611523},
815 {0xf9a98069, 0x000002ba, 0x000002ad, 0x01af7387, 0xea925faa},
816 {0xe9c477ad, 0x0000015f, 0x00000778, 0x6facf9a0, 0x1130f736},
817 {0x353f32b2, 0x0000087c, 0x00000783, 0x6cc964ea, 0x32459994},
818 {0x78e1b24f, 0x00000650, 0x000006a8, 0xb3bb7c27, 0x5a632f78},
819 {0x61aa400e, 0x00000049, 0x00000254, 0xb8cd1681, 0xdf2652d5},
820 {0xb84b10b0, 0x00000f73, 0x0000008c, 0x406a6450, 0x3619d31b},
821 {0x9fa99c9c, 0x00000a7c, 0x000004d7, 0xfb3d21b4, 0xea31c743},
822 {0x3fc9ebe3, 0x00000cd9, 0x000000d6, 0x43803f9c, 0x1f76a809},
823 {0x529879cd, 0x000002f2, 0x00000595, 0x78b4c6a6, 0x63b9b93f},
824 {0x3a933019, 0x00000516, 0x00000266, 0xdcb45436, 0x8f99c98c},
825 {0x887b4977, 0x00000227, 0x0000038d, 0xc5f7c3d9, 0xaf5e3091},
826 {0x770745de, 0x000008c6, 0x00000739, 0xf69145e8, 0x53d0dce1},
827 {0x28be3b47, 0x00000c46, 0x0000032b, 0x764c028f, 0x106d0905},
828 {0x5013a050, 0x00000cf6, 0x00000309, 0xea8fe164, 0x62180b57},
829 {0x2ec4c9ba, 0x000006e8, 0x0000078d, 0xa35557a9, 0xf44430a4},
830 {0xa9f950c9, 0x00000d33, 0x000002cc, 0x41ea8618, 0x587b4eb3},
831 {0x5b520229, 0x000007b2, 0x00000484, 0x44569f1f, 0x92406c32},
832 {0xd8dcbbfc, 0x0000002f, 0x0000048c, 0xdb88ab8b, 0x13bfe70e},
833 {0x25529792, 0x00000d1d, 0x000002e2, 0x20cda404, 0x19d3b4e4},
834 {0x9f3f6d71, 0x00000238, 0x0000079a, 0x0720443e, 0x3c107021},
835 {0x64121215, 0x000007ff, 0x0000038f, 0x6aacff2c, 0xb82fdc3e},
836 {0xfb6cdde0, 0x00000ef8, 0x00000107, 0xbd43a0f1, 0xab0d3c1d},
837 {0x221c9d6f, 0x000007b6, 0x0000014f, 0xb67f834b, 0x1371ad05},
838 {0x030e1de4, 0x00000836, 0x000004b4, 0x0d67d26a, 0xe2e72df1},
839 {0xb56fa6cf, 0x00000c07, 0x000003f8, 0x60601ac1, 0x039de73e},
840 {0xb55c89f5, 0x0000098e, 0x000001d4, 0x2400efbe, 0xfe39a2bb},
841 {0x5e90b6d5, 0x0000070b, 0x000003ea, 0x3bb5d6ea, 0xf0f794a0},
842 {0x2a7045ae, 0x00000961, 0x00000633, 0xfca89e4b, 0xe66ce41c},
843 {0x8b374ea9, 0x000006ba, 0x00000780, 0xbce036ed, 0x4cb28ef7},
844 {0x8bd90bc9, 0x00000562, 0x00000369, 0xcb26a24b, 0x40236d1d},
845 {0x5b1b1762, 0x000000fd, 0x0000051a, 0x33cdda07, 0xc32e420a},
846 {0xa4153555, 0x0000058f, 0x000005c7, 0xbe50eeca, 0x83a67f35},
847 {0x0be1f931, 0x00000651, 0x00000672, 0x95a25753, 0x88f1aac1},
848 {0xb7e78618, 0x00000a7f, 0x000002bb, 0xe06bcc1c, 0x74274f66},
849 {0x4a9bc41b, 0x00000e51, 0x000001ae, 0x709e8d2c, 0x54eff534},
850 {0xfc359d13, 0x00000440, 0x000002f8, 0x0a58451f, 0x55e9363f},
851 {0x5aa48619, 0x000006d1, 0x00000284, 0x928ead83, 0x31041c06},
852 {0xa609afa8, 0x0000053e, 0x00000272, 0xb048c141, 0x4704efba},
853 {0x3f108afb, 0x00000949, 0x00000150, 0x9a6bb5bc, 0x4e4430c8},
854 {0x79bec2d3, 0x000008ed, 0x00000712, 0x32692d57, 0x11d52a7b},
855 {0x9429e067, 0x00000bc3, 0x0000043c, 0x5295ceff, 0x04640f4d},
856 {0xae58b96a, 0x0000082d, 0x000007d2, 0xc2a681ba, 0xf7ca4a2c},
857 {0x95df24be, 0x00000985, 0x000004c1, 0x3a287765, 0x2c4af003},
858 {0x5e94976f, 0x00000596, 0x000004ed, 0xff00c489, 0x5ae11687},
859 {0xf5e5f1de, 0x00000d31, 0x000002ce, 0x35f28e91, 0x30d47957},
860 {0xa2c219cf, 0x00000a3c, 0x00000374, 0x707d21eb, 0x2a14a255},
861 {0xf21b6ceb, 0x00000919, 0x00000135, 0x0847fb8b, 0xcb8d3b93},
862 {0xaa988728, 0x00000787, 0x00000771, 0x885aeaa4, 0x6531b509},
863 {0xaa5dfaac, 0x000003e5, 0x0000051b, 0x52c48ab7, 0xe43cc5e9},
864 {0x0a053968, 0x00000d2a, 0x000002d5, 0x7a90256d, 0x8004765c},
865 {0x1421dc20, 0x00000eef, 0x00000110, 0x97d6da24, 0x1378f6ff},
866 {0xb47c2166, 0x00000a6a, 0x00000209, 0xcfd6cc52, 0x676e14a5},
867 {0x77dd1955, 0x000000de, 0x00000266, 0xba74bcaa, 0xc71b429c},
868 {0x68a03cc2, 0x0000082f, 0x000007b0, 0x752bd5d8, 0x19ed14aa},
869 {0x0226b0a3, 0x00000a5f, 0x000005a0, 0x82de4970, 0xf654d3ed},
870 {0x637bf3b1, 0x00000d93, 0x0000026c, 0x5c7115cb, 0x3cccb57e},
871 {0x3b120edf, 0x00000c13, 0x000003ec, 0x80d7d20f, 0x92132798},
872 {0xe2456780, 0x000002eb, 0x00000641, 0xc0a5d289, 0x6160c87a},
873 {0x9b2e7125, 0x00000c0c, 0x000003f3, 0xcc15f57e, 0x6f00f637},
874 {0x153033ef, 0x00000787, 0x000006b6, 0x3cde443b, 0xb46caa6e},
875 {0x18458b3f, 0x0000066c, 0x00000561, 0x9a2bd8c6, 0xb6c29121},
876 {0x4ff9d4b9, 0x00000c8f, 0x0000033a, 0xd0ee6d6d, 0xc81cf380},
877 {0xdf84b5d9, 0x00000802, 0x0000029a, 0xdab0d74a, 0xb2464559},
878 {0x81ee15df, 0x000003ce, 0x00000725, 0x9942e2de, 0x4ccf571b},
879 {0x5c768e04, 0x00000afd, 0x00000160, 0x36110831, 0xae0b305a},
880 {0xe5e18094, 0x00000b4b, 0x000000a0, 0xffa3e4a7, 0x6c8a4f09},
881 {0xed7263b6, 0x00000d0d, 0x000002f2, 0xb0006a35, 0x7e04af8c},
882 {0x5bfde7d7, 0x000006fb, 0x00000554, 0xa4193b76, 0xb3a91d12},
883 {0x67f4a743, 0x00000b85, 0x0000047a, 0xf05c8d8f, 0xfb472fdf},
884 {0xf13bdf22, 0x00000ff7, 0x00000008, 0x816351eb, 0xf347f235},
885 {0x08ecc608, 0x00000d5d, 0x00000098, 0x90492772, 0x0b7f1521},
886 {0x296f52ba, 0x000004f9, 0x00000788, 0x5e5a4896, 0x1cc67088},
887 {0xbe4624c2, 0x00000427, 0x000004ef, 0xcd267b94, 0x550caefd},
888 {0x906f7c7c, 0x00000a05, 0x0000003f, 0x03fcfc33, 0x9ed82a02},
889 {0x8f7b323e, 0x00000458, 0x000004c7, 0xcd4969c8, 0x633c38a8},
890 {0x88d6593d, 0x00000597, 0x000005b5, 0xf199cd3b, 0x0491452f},
891 {0x978a7768, 0x00000268, 0x000001d3, 0xb28c95bd, 0x1a42fe61},
892 {0x857a621e, 0x000007a7, 0x000003a8, 0xf4bf84ab, 0xcd0694c6},
893 {0xb0e121ef, 0x000005be, 0x00000644, 0x28747c14, 0xf0510c72},
894 {0, 0, 0, 0, 0},
895 };
896
test_crc32c(void)897 static int test_crc32c(void)
898 {
899 struct crc_test *t = test;
900 int failures = 0;
901
902 while (t->length) {
903 uint32_t be, le;
904 le = ext2fs_crc32c_le(t->crc, test_buf + t->start, t->length);
905 be = ext2fs_crc32_be(t->crc, test_buf + t->start, t->length);
906 if (le != t->crc32c_le) {
907 printf("Test %d LE fails, %x != %x\n",
908 (int) (t - test), le, t->crc32c_le);
909 failures++;
910 }
911 if (be != t->crc32_be) {
912 printf("Test %d BE fails, %x != %x\n",
913 (int) (t - test), be, t->crc32_be);
914 failures++;
915 }
916 t++;
917 }
918
919 return failures;
920 }
921
main(int argc,char * argv[])922 int main(int argc, char *argv[])
923 {
924 int ret;
925
926 ret = test_crc32c();
927 if (!ret)
928 printf("No failures.\n");
929
930 return ret;
931 }
932 #endif /* UNITTEST */
933