11 static uchar gpexp[255] =
12 {1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38, 76,
13 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157,
14 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,
15 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222,
16 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60,
17 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163,
18 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52,
19 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59,
20 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218,
21 169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,
22 170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198,
23 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171,
24 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25,
25 50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81,
26 162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,
27 18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11,
28 22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71,
31 static uchar gplog[256] =
32 {0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4, 100,
33 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5,
34 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,
35 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114,
36 166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145,
37 34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92,
38 131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40,
39 84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212,
40 229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103,
41 74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180,
42 124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188,
43 207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171,
44 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216,
45 183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161,
46 59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203,
47 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215,
48 79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80,
51 static uchar *polys[69];
53 static uchar *blocks[160];
55 static uchar side[40] = {
56 21, 25, 29, 33, 37, 41, 45, 49,
57 53, 57, 61, 65, 69, 73, 77, 81,
58 85, 89, 93, 97, 101, 105, 109, 113,
59 117, 121, 125, 129, 133, 137, 141, 145,
60 149, 153, 157, 161, 165, 169, 173, 177
63 static uchar align[40][8] = {
84 {6, 28, 50, 72, 94, 0},
85 {6, 26, 50, 74, 98, 0},
86 {6, 30, 54, 78, 102, 0},
87 {6, 28, 54, 80, 106, 0},
88 {6, 32, 58, 84, 110, 0},
89 {6, 30, 58, 86, 114, 0},
90 {6, 34, 62, 90, 118, 0},
91 {6, 26, 50, 74, 98, 122, 0},
92 {6, 30, 54, 78, 102, 126, 0},
93 {6, 26, 52, 78, 104, 130, 0},
94 {6, 30, 56, 82, 108, 134, 0},
95 {6, 34, 60, 86, 112, 138, 0},
96 {6, 30, 58, 86, 114, 142, 0},
97 {6, 34, 62, 90, 118, 146, 0},
98 {6, 30, 54, 78, 102, 126, 150, 0},
99 {6, 24, 50, 76, 102, 128, 154, 0},
100 {6, 28, 54, 80, 106, 132, 158, 0},
101 {6, 32, 58, 84, 110, 136, 162, 0},
102 {6, 26, 54, 82, 110, 138, 166, 0},
103 {6, 30, 58, 86, 114, 142, 170, 0},
111 extern uchar qrrawpolys[];
112 extern uchar qrsizes[];
115 for(p = qrrawpolys; in || *p != 0; p++){
120 memset(cap, 0, sizeof(cap));
121 for(p = qrsizes; p[0] != 0 || p[1] != 0; p += 4){
122 cap[p[0]] += p[1] * p[3];
123 if(blocks[p[0]] == nil)
129 bits(uchar *b, int *elen, int *bctr, ulong data, int n)
136 s = b[l] << n | data;
139 b[l++] = s >> (bc -= 8);
151 getlbits(int version, int mode)
159 else if(version <= 26)
162 case ANUM: return 11;
163 case BYTE: return 16;
168 case ANUM: return 13;
169 case BYTE: return 16;
171 werrstr("unknown mode %#x", mode);
177 ['0'] 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
178 ['A'] 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
179 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
180 ['a'] 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
181 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
182 [' '] 37, ['$'] 38, ['%'] 39, ['*'] 40, ['+'] 41, ['-'] 42,
183 ['.'] 43, ['/'] 44, [':'] 45
187 formsel(int version, int level, int mode, uchar *data, int dlen, int *nchar)
189 int bits, lbits, i, n;
195 for(i = 0; i < dlen; i++)
199 bits += 10 * (n / 3);
201 case 1: bits += 4; break;
202 case 2: bits += 7; break;
207 for(i = 0; i < dlen; i++)
208 if(atab[data[i]] != 0)
211 bits += 11 * (n >> 1) + 6 * (n & 1);
220 for(i = 0; i < 40; i++){
221 if(i == 0 || i == 10 || i == 27){
222 lbits = getlbits(i + 1, mode);
226 if(cap[i << 2 | level] >= (bits + lbits + 7 >> 3))
227 return i << 2 | level;
230 lbits = getlbits(version, mode);
233 if(cap[version - 1 << 2 | level] >= (bits + lbits + 7 >> 3))
234 return version - 1 << 2 | level;
236 werrstr("too many bits");
241 encode(uchar verlev, uchar *data, int dlen, int mode, int nchar)
252 bits(b, &n, &bc, mode, 4);
253 bits(b, &n, &bc, nchar, getlbits((verlev >> 2) + 1, mode));
258 for(; dlen-- != 0; data++)
260 acc = acc * 10 + *data - '0';
263 bits(b, &n, &bc, acc, 10);
268 bits(b, &n, &bc, acc, 4);
270 bits(b, &n, &bc, acc, 7);
275 for(; dlen-- != 0; data++)
276 if(atab[*data] != 0){
277 acc = acc * 45 + atab[*data] - 1;
280 bits(b, &n, &bc, acc, 11);
285 bits(b, &n, &bc, acc, 6);
289 bits(b, &n, &bc, *data++, 8);
292 werrstr("unknown mode %#x", mode);
295 bits(b, &n, &bc, 0, 4);
307 /* all stored highest coefficient first
308 poly stored as log and highest coefficient implicit 1 */
310 ecc(uchar *data, int dl, uchar *poly, uchar *err, int el, int str)
320 for(i = 0; i < el; i++){
321 q[i] = gpexp[poly[i]];
324 for(dp = data + dl - 1; dp != data - 1; dp--){
327 for(i = 0; i < el; i++){
332 err[i * str] ^= gpexp[x];
339 for(i = 0; i < el; i++){
343 q[i] = (i == el-1 ? 0 : q[i+1]) ^ gpexp[x];
346 for(i = 0; i < el - 1; i++)
356 codewords(uchar verlev, uchar *data, int *ncp)
358 uchar *bp, *p, *dp, *r, *rp;
360 int ne, i, j, el, nc, nb, ncol;
363 el = bp[2] - bp[3]; /* guaranteed constant */
365 for(p = bp, ne = 0, nc = 0, nb = 0; p[0] == verlev; p += 4){
374 for(p = bp, dp = data, ep = r + nc - ne; p[0] == verlev; p += 4)
375 for(j = 0; j < p[1]; j++){
376 if(ecc(dp, p[3], polys[el], ep, el, nb) < 0){
383 for(i = 0, rp = r; i < ncol; i++){
385 for(p = bp; p[0] == verlev; p += 4){
386 for(j = 0; j < p[1]; j++){
397 #define max(i,j) ((i)>(j)?(i):(j))
403 uchar *pat, *p, *ap, *aq;
405 s = side[verlev >> 2];
406 pat = malloc((s + 8) * (s + 8));
410 for(j = -4; j < s + 4; j++)
411 for(i = -4; i < s + 4; i++){
412 if(i < 0 || j < 0 || i >= s || j >= s)
414 else if(i < 8 && j < 8 || i >= s - 8 && j < 8 || i < 8 && j >= s - 8){
415 d = max(abs(i >= 8 ? i - s + 4 : i-3), abs(j >= 8 ? j - s + 4 : j-3));
416 *p++ = d == 2 || d == 4 ? 0xff : 0;
417 }else if(i == 6 || j == 6)
418 *p++ = (i + j & 1) != 0 ? 0xff : 0;
419 else if(i <= 8 && j <= 8 || i <= 8 && j >= s - 8 || i >= s - 8 && j <= 8)
421 else if(verlev >= 24 && (j >= s - 11 && i < 6 || i >= s - 11 && j < 6))
426 for(ap = align[verlev >> 2]; *ap != 0; ap++)
427 for(aq = align[verlev >> 2]; *aq != 0; aq++){
428 if(*ap == 6 && *aq == 6 || *ap >= s - 7 && *aq == 6 || *ap == 6 && *aq >= s - 7)
430 for(i = *ap - 2; i <= *ap + 2; i++)
431 for(j = *aq - 2; j <= *aq + 2; j++)
432 pat[i * (s + 8) + j + 4 + (s + 8) * 4] = max(abs(i - *ap), abs(j - *aq)) == 1 ? 0xff : 0;
438 fill(uchar verlev, uchar *p, uchar *d, int nc)
443 s = side[verlev >> 2] + 8;
448 for(dp = d, i = 0;;){
456 while(p[y * s + x] != 0x80){
458 if((x & 1 ^ (x < 10)) == 0)
470 if((x & 1 ^ (x < 10)) == 0)
485 p[y * s + x] = ~((char)db >> 7) ^ 0x0f;
491 mask(uchar verlev, uchar *p, int m)
496 s = side[verlev >> 2];
497 for(i = -4, q = p; i < s + 4; i++)
498 for(j = -4; j < s + 4; j++, q++)
499 if(((*q ^ *q >> 4) & 15) == 15)
501 case 0: *q ^= (char)((i+j+1) << 7) >> 7; break;
502 case 1: *q ^= (char)((i+1) << 7) >> 7; break;
503 case 2: *q ^= (char)(j % 3 - 1) >> 7; break;
504 case 3: *q ^= (char)((i+j) % 3 - 1) >> 7; break;
505 case 4: *q ^= (char)(((i/2)+(j/3)+1) << 7) >> 7; break;
506 case 5: *q ^= (char)((i*j%2)+(i*j%3) - 1) >> 7; break;
507 case 6: *q ^= (char)((i*j+(i*j%3)+1) << 7) >> 7; break;
508 case 7: *q ^= (char)((i+j+(i*j%3)+1) << 7) >> 7; break;
513 evaluate(uchar verlev, uchar *p)
515 int r, i, j, l, s, sc, cnt;
525 s = side[verlev >> 2];
529 for(i = 0; i < s; i++){
533 for(j = 0; j < s; j++){
534 q = p[i * (s + 8) + j + 4 + (s + 8) * 4] >= 0x80;
543 if((sh & 0x7f) == 0x5d)
549 sc = abs(cnt - s * s / 2) / (s * s / 20) * N4;
551 for(j = 0; j < s; j++){
555 for(i = 0; i < s; i++){
556 q = p[i * (s + 8) + j + 4 + (s + 8) * 4];
564 if((sh & 0x7f) == 0x5d)
572 for(j = 1; j < s; j++)
573 for(i = 1; i < s; i++){
574 pp = p + i * (s + 8) + j + 4 + (s + 8) * 4;
575 if(pp[0] == pp[-1] && pp[0] == pp[-(s+8)] && pp[0] == pp[-1-(s+8)])
582 format(uchar verlev, uchar *p, int m)
584 static ushort format[] =
585 {21522, 20773, 24188, 23371, 17913, 16590, 20375, 19104, 30660,
586 29427, 32170, 30877, 26159, 25368, 27713, 26998, 5769, 5054, 7399,
587 6608, 1890, 597, 3340, 2107, 13663, 12392, 16177, 14854, 9396, 8579,
593 s = side[verlev >> 2];
594 f = ~format[verlev << 3 & 0x18 ^ 8 | m];
595 for(i = 0; i < 15; i++){
596 c = (char)(f << 7) >> 7;
598 p[(i + (i >= 6)) * (s + 8) + 8 + 4 + (s + 8) * 4] = c;
599 p[12 * (s + 8) + (s + 3 - i)] = c;
601 p[(s - 15 + i) * (s + 8) + 8 + 4 + (s + 8) * 4] = c;
602 p[12 * (s + 8) + (18 - i + (i == 8))] = c;
606 p[(s - 8) * (s + 8) + 8 + 4 + (s + 8) * 4] = 0;
610 version(uchar verlev, uchar *p)
614 static int version[] = {
615 0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847,
616 0x0E60D, 0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6,
617 0x15683, 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E,
618 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA,
619 0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69
624 s = side[verlev >> 2] + 8;
625 f = ~version[(verlev >> 2) - 6];
626 for(i = 0; i < 18; i++){
627 c = (char)(f << 7) >> 7;
629 q = (s - 15 + i % 3) * s + (4 + i / 3);
631 p[(q * s) % (s * s - 1)] = c;
636 finalize(uchar verlev, uchar *p)
640 s = side[verlev >> 2] + 8;
643 *((char *)p++) >>= 4;
647 qrcode(int ver, int level, int mode, uchar *data, int dlen, int *sidep)
649 int s, nc, m, mv, mbest, mval, nchar;
654 verlev = formsel(ver, level, mode, data, dlen, &nchar);
657 s = side[verlev >> 2];
658 d = encode(verlev, data, dlen, mode, nchar);
661 w = codewords(verlev, d, &nc);
670 fill(verlev, b, w, nc);
672 SET(mbest); SET(mval);
673 for(m = 0; m < 8; m++){
675 mv = evaluate(verlev, b);
676 if(m == 0 || mv < mval){
680 if(m != 7 || mbest != m)
684 mask(verlev, b, mbest);
685 format(verlev, b, mbest);
695 fprint(2, "usage: %s [-LMQHn] [-v ver]\n", argv0);
700 main(int argc, char **argv)
704 int ver, lev, mode, s;
712 case 'L': lev = 0; break;
713 case 'M': lev = 1; break;
714 case 'Q': lev = 2; break;
715 case 'H': lev = 3; break;
717 ver = strtol(EARGF(usage()), &c, 0);
718 if(*c != 0 || ver < 0 || ver > 40)
721 case 'n': mode = NUM; break;
722 case 'a': mode = ANUM; break;
729 rc = readn(0, buf, sizeof(buf));
731 sysfatal("read: %r");
732 b = qrcode(ver, lev, mode, buf, rc, &s);
735 print("%11s %11d %11d %11d %11d ", "k8", 0, 0, s, s);
739 uchar qrrawpolys[] = {
740 7, 87, 229, 146, 149, 238, 102, 21,
741 0, 10, 251, 67, 46, 61, 118, 70,
742 64, 94, 32, 45, 0, 13, 74, 152,
743 176, 100, 86, 100, 106, 104, 130, 218,
744 206, 140, 78, 0, 15, 8, 183, 61,
745 91, 202, 37, 51, 58, 58, 237, 140,
746 124, 5, 99, 105, 0, 16, 120, 104,
747 107, 109, 102, 161, 76, 3, 91, 191,
748 147, 169, 182, 194, 225, 120, 0, 17,
749 43, 139, 206, 78, 43, 239, 123, 206,
750 214, 147, 24, 99, 150, 39, 243, 163,
751 136, 0, 18, 215, 234, 158, 94, 184,
752 97, 118, 170, 79, 187, 152, 148, 252,
753 179, 5, 98, 96, 153, 0, 20, 17,
754 60, 79, 50, 61, 163, 26, 187, 202,
755 180, 221, 225, 83, 239, 156, 164, 212,
756 212, 188, 190, 0, 22, 210, 171, 247,
757 242, 93, 230, 14, 109, 221, 53, 200,
758 74, 8, 172, 98, 80, 219, 134, 160,
759 105, 165, 231, 0, 24, 229, 121, 135,
760 48, 211, 117, 251, 126, 159, 180, 169,
761 152, 192, 226, 228, 218, 111, 117, 232,
762 87, 96, 227, 21, 0, 26, 173, 125,
763 158, 2, 103, 182, 118, 17, 145, 201,
764 111, 28, 165, 53, 161, 21, 245, 142,
765 13, 102, 48, 227, 153, 145, 218, 70,
766 0, 28, 168, 223, 200, 104, 224, 234,
767 108, 180, 110, 190, 195, 147, 205, 27,
768 232, 201, 21, 43, 245, 87, 42, 195,
769 212, 119, 242, 37, 9, 123, 0, 30,
770 41, 173, 145, 152, 216, 31, 179, 182,
771 50, 48, 110, 86, 239, 96, 222, 125,
772 42, 173, 226, 193, 224, 130, 156, 37,
773 251, 216, 238, 40, 192, 180, 0, 32,
774 10, 6, 106, 190, 249, 167, 4, 67,
775 209, 138, 138, 32, 242, 123, 89, 27,
776 120, 185, 80, 156, 38, 69, 171, 60,
777 28, 222, 80, 52, 254, 185, 220, 241,
778 0, 34, 111, 77, 146, 94, 26, 21,
779 108, 19, 105, 94, 113, 193, 86, 140,
780 163, 125, 58, 158, 229, 239, 218, 103,
781 56, 70, 114, 61, 183, 129, 167, 13,
782 98, 62, 129, 51, 0, 36, 200, 183,
783 98, 16, 172, 31, 246, 234, 60, 152,
784 115, 167, 152, 113, 248, 238, 107, 18,
785 63, 218, 37, 87, 210, 105, 177, 120,
786 74, 121, 196, 117, 251, 113, 233, 30,
787 120, 0, 40, 59, 116, 79, 161, 252,
788 98, 128, 205, 128, 161, 247, 57, 163,
789 56, 235, 106, 53, 26, 187, 174, 226,
790 104, 170, 7, 175, 35, 181, 114, 88,
791 41, 47, 163, 125, 134, 72, 20, 232,
792 53, 35, 15, 0, 42, 250, 103, 221,
793 230, 25, 18, 137, 231, 3, 58, 242,
794 221, 191, 110, 84, 230, 8, 188, 106,
795 96, 147, 15, 131, 139, 34, 101, 223,
796 39, 101, 213, 199, 237, 254, 201, 123,
797 171, 162, 194, 117, 50, 96, 0, 44,
798 190, 7, 61, 121, 71, 246, 69, 55,
799 168, 188, 89, 243, 191, 25, 72, 123,
800 9, 145, 14, 247, 238, 44, 78, 143,
801 62, 224, 126, 118, 114, 68, 163, 52,
802 194, 217, 147, 204, 169, 37, 130, 113,
803 102, 73, 181, 0, 46, 112, 94, 88,
804 112, 253, 224, 202, 115, 187, 99, 89,
805 5, 54, 113, 129, 44, 58, 16, 135,
806 216, 169, 211, 36, 4, 96, 60, 241,
807 73, 104, 234, 8, 249, 245, 119, 174,
808 52, 25, 157, 224, 43, 202, 223, 19,
809 82, 15, 0, 48, 228, 25, 196, 130,
810 211, 146, 60, 24, 251, 90, 39, 102,
811 240, 61, 178, 63, 46, 123, 115, 18,
812 221, 111, 135, 160, 182, 205, 107, 206,
813 95, 150, 120, 184, 91, 21, 247, 156,
814 140, 238, 191, 11, 94, 227, 84, 50,
815 163, 39, 34, 108, 0, 50, 232, 125,
816 157, 161, 164, 9, 118, 46, 209, 99,
817 203, 193, 35, 3, 209, 111, 195, 242,
818 203, 225, 46, 13, 32, 160, 126, 209,
819 130, 160, 242, 215, 242, 75, 77, 42,
820 189, 32, 113, 65, 124, 69, 228, 114,
821 235, 175, 124, 170, 215, 232, 133, 205,
822 0, 52, 116, 50, 86, 186, 50, 220,
823 251, 89, 192, 46, 86, 127, 124, 19,
824 184, 233, 151, 215, 22, 14, 59, 145,
825 37, 242, 203, 134, 254, 89, 190, 94,
826 59, 65, 124, 113, 100, 233, 235, 121,
827 22, 76, 86, 97, 39, 242, 200, 220,
828 101, 33, 239, 254, 116, 51, 0, 54,
829 183, 26, 201, 87, 210, 221, 113, 21,
830 46, 65, 45, 50, 238, 184, 249, 225,
831 102, 58, 209, 218, 109, 165, 26, 95,
832 184, 192, 52, 245, 35, 254, 238, 175,
833 172, 79, 123, 25, 122, 43, 120, 108,
834 215, 80, 128, 201, 235, 8, 153, 59,
835 101, 31, 198, 76, 31, 156, 0, 56,
836 106, 120, 107, 157, 164, 216, 112, 116,
837 2, 91, 248, 163, 36, 201, 202, 229,
838 6, 144, 254, 155, 135, 208, 170, 209,
839 12, 139, 127, 142, 182, 249, 177, 174,
840 190, 28, 10, 85, 239, 184, 101, 124,
841 152, 206, 96, 23, 163, 61, 27, 196,
842 247, 151, 154, 202, 207, 20, 61, 10,
843 0, 58, 82, 116, 26, 247, 66, 27,
844 62, 107, 252, 182, 200, 185, 235, 55,
845 251, 242, 210, 144, 154, 237, 176, 141,
846 192, 248, 152, 249, 206, 85, 253, 142,
847 65, 165, 125, 23, 24, 30, 122, 240,
848 214, 6, 129, 218, 29, 145, 127, 134,
849 206, 245, 117, 29, 41, 63, 159, 142,
850 233, 125, 148, 123, 0, 60, 107, 140,
851 26, 12, 9, 141, 243, 197, 226, 197,
852 219, 45, 211, 101, 219, 120, 28, 181,
853 127, 6, 100, 247, 2, 205, 198, 57,
854 115, 219, 101, 109, 160, 82, 37, 38,
855 238, 49, 160, 209, 121, 86, 11, 124,
856 30, 181, 84, 25, 194, 87, 65, 102,
857 190, 220, 70, 27, 209, 16, 89, 7,
858 33, 240, 0, 62, 65, 202, 113, 98,
859 71, 223, 248, 118, 214, 94, 122, 37,
860 23, 2, 228, 58, 121, 7, 105, 135,
861 78, 243, 118, 70, 76, 223, 89, 72,
862 50, 70, 111, 194, 17, 212, 126, 181,
863 35, 221, 117, 235, 11, 229, 149, 147,
864 123, 213, 40, 115, 6, 200, 100, 26,
865 246, 182, 218, 127, 215, 36, 186, 110,
866 106, 0, 64, 45, 51, 175, 9, 7,
867 158, 159, 49, 68, 119, 92, 123, 177,
868 204, 187, 254, 200, 78, 141, 149, 119,
869 26, 127, 53, 160, 93, 199, 212, 29,
870 24, 145, 156, 208, 150, 218, 209, 4,
871 216, 91, 47, 184, 146, 47, 140, 195,
872 195, 125, 242, 238, 63, 99, 108, 140,
873 230, 242, 31, 204, 11, 178, 243, 217,
874 156, 213, 231, 0, 66, 5, 118, 222,
875 180, 136, 136, 162, 51, 46, 117, 13,
876 215, 81, 17, 139, 247, 197, 171, 95,
877 173, 65, 137, 178, 68, 111, 95, 101,
878 41, 72, 214, 169, 197, 95, 7, 44,
879 154, 77, 111, 236, 40, 121, 143, 63,
880 87, 80, 253, 240, 126, 217, 77, 34,
881 232, 106, 50, 168, 82, 76, 146, 67,
882 106, 171, 25, 132, 93, 45, 105, 0,
883 68, 247, 159, 223, 33, 224, 93, 77,
884 70, 90, 160, 32, 254, 43, 150, 84,
885 101, 190, 205, 133, 52, 60, 202, 165,
886 220, 203, 151, 93, 84, 15, 84, 253,
887 173, 160, 89, 227, 52, 199, 97, 95,
888 231, 52, 177, 41, 125, 137, 241, 166,
889 225, 118, 2, 54, 32, 82, 215, 175,
890 198, 43, 238, 235, 27, 101, 184, 127,
891 3, 5, 8, 163, 238, 0, 0
894 /* (version - 1) * 4 + level, number of blocks, number of bytes in block, number of data bytes */