rav2d 0.3.0

AV2 video decoder in Rust
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
use crate::headers::{PixelLayout, WarpedMotionParams, WarpedMotionType};
use crate::levels::{N_BS_SIZES, N_RECT_TX_SIZES, N_UV_INTRA_PRED_MODES};

pub static DEFAULT_WM_PARAMS: WarpedMotionParams = WarpedMotionParams {
    wm_type: WarpedMotionType::Identity,
    matrix: [0, 0, 1 << 16, 0, 0, 1 << 16],
    abcd: [0; 4],
    affine: 0,
};

#[derive(Debug, Clone, Copy, Default)]
pub struct TxfmInfo {
    pub w: u8,
    pub h: u8,
    pub lw: u8,
    pub lh: u8,
    pub min: u8,
    pub max: u8,
    pub sub: u8,
    pub ctx: u8,
}

pub static LAYOUTS: [PixelLayout; 4] = [
    PixelLayout::I420,
    PixelLayout::I400,
    PixelLayout::I444,
    PixelLayout::I422,
];

// [w_4px, h_4px, log2_w, log2_h]
pub static BLOCK_DIMENSIONS: [[u8; 4]; N_BS_SIZES] = [
    /* BS_256x256 */ [64, 64, 6, 6],
    /* BS_256x128 */ [64, 32, 6, 5],
    /* BS_128x256 */ [32, 64, 5, 6],
    /* BS_128x128 */ [32, 32, 5, 5],
    /* BS_128x64  */ [32, 16, 5, 4],
    /* BS_64x128  */ [16, 32, 4, 5],
    /* BS_64x64   */ [16, 16, 4, 4],
    /* BS_64x32   */ [16, 8, 4, 3],
    /* BS_64x16   */ [16, 4, 4, 2],
    /* BS_64x8    */ [16, 2, 4, 1],
    /* BS_64x4    */ [16, 1, 4, 0],
    /* BS_32x64   */ [8, 16, 3, 4],
    /* BS_32x32   */ [8, 8, 3, 3],
    /* BS_32x16   */ [8, 4, 3, 2],
    /* BS_32x8    */ [8, 2, 3, 1],
    /* BS_32x4    */ [8, 1, 3, 0],
    /* BS_16x64   */ [4, 16, 2, 4],
    /* BS_16x32   */ [4, 8, 2, 3],
    /* BS_16x16   */ [4, 4, 2, 2],
    /* BS_16x8    */ [4, 2, 2, 1],
    /* BS_16x4    */ [4, 1, 2, 0],
    /* BS_8x64    */ [2, 16, 1, 4],
    /* BS_8x32    */ [2, 8, 1, 3],
    /* BS_8x16    */ [2, 4, 1, 2],
    /* BS_8x8     */ [2, 2, 1, 1],
    /* BS_8x4     */ [2, 1, 1, 0],
    /* BS_4x64    */ [1, 16, 0, 4],
    /* BS_4x32    */ [1, 8, 0, 3],
    /* BS_4x16    */ [1, 4, 0, 2],
    /* BS_4x8     */ [1, 2, 0, 1],
    /* BS_4x4     */ [1, 1, 0, 0],
];

pub static TXFM_DIMENSIONS: [TxfmInfo; N_RECT_TX_SIZES] = [
    /* TX_4X4   */
    TxfmInfo {
        w: 1,
        h: 1,
        lw: 0,
        lh: 0,
        min: 0,
        max: 0,
        sub: 0,
        ctx: 0,
    },
    /* TX_8X8   */
    TxfmInfo {
        w: 2,
        h: 2,
        lw: 1,
        lh: 1,
        min: 1,
        max: 1,
        sub: 0,
        ctx: 1,
    },
    /* TX_16X16 */
    TxfmInfo {
        w: 4,
        h: 4,
        lw: 2,
        lh: 2,
        min: 2,
        max: 2,
        sub: 1,
        ctx: 2,
    },
    /* TX_32X32 */
    TxfmInfo {
        w: 8,
        h: 8,
        lw: 3,
        lh: 3,
        min: 3,
        max: 3,
        sub: 2,
        ctx: 3,
    },
    /* TX_64X64 */
    TxfmInfo {
        w: 16,
        h: 16,
        lw: 4,
        lh: 4,
        min: 4,
        max: 4,
        sub: 3,
        ctx: 4,
    },
    /* RTX_4X8  */
    TxfmInfo {
        w: 1,
        h: 2,
        lw: 0,
        lh: 1,
        min: 0,
        max: 1,
        sub: 0,
        ctx: 1,
    },
    /* RTX_8X4  */
    TxfmInfo {
        w: 2,
        h: 1,
        lw: 1,
        lh: 0,
        min: 0,
        max: 1,
        sub: 0,
        ctx: 1,
    },
    /* RTX_8X16 */
    TxfmInfo {
        w: 2,
        h: 4,
        lw: 1,
        lh: 2,
        min: 1,
        max: 2,
        sub: 1,
        ctx: 2,
    },
    /* RTX_16X8 */
    TxfmInfo {
        w: 4,
        h: 2,
        lw: 2,
        lh: 1,
        min: 1,
        max: 2,
        sub: 1,
        ctx: 2,
    },
    /* RTX_16X32*/
    TxfmInfo {
        w: 4,
        h: 8,
        lw: 2,
        lh: 3,
        min: 2,
        max: 3,
        sub: 2,
        ctx: 3,
    },
    /* RTX_32X16*/
    TxfmInfo {
        w: 8,
        h: 4,
        lw: 3,
        lh: 2,
        min: 2,
        max: 3,
        sub: 2,
        ctx: 3,
    },
    /* RTX_32X64*/
    TxfmInfo {
        w: 8,
        h: 16,
        lw: 3,
        lh: 4,
        min: 3,
        max: 4,
        sub: 3,
        ctx: 4,
    },
    /* RTX_64X32*/
    TxfmInfo {
        w: 16,
        h: 8,
        lw: 4,
        lh: 3,
        min: 3,
        max: 4,
        sub: 3,
        ctx: 4,
    },
    /* RTX_4X16 */
    TxfmInfo {
        w: 1,
        h: 4,
        lw: 0,
        lh: 2,
        min: 0,
        max: 2,
        sub: 5,
        ctx: 1,
    },
    /* RTX_16X4 */
    TxfmInfo {
        w: 4,
        h: 1,
        lw: 2,
        lh: 0,
        min: 0,
        max: 2,
        sub: 6,
        ctx: 1,
    },
    /* RTX_8X32 */
    TxfmInfo {
        w: 2,
        h: 8,
        lw: 1,
        lh: 3,
        min: 1,
        max: 3,
        sub: 7,
        ctx: 2,
    },
    /* RTX_32X8 */
    TxfmInfo {
        w: 8,
        h: 2,
        lw: 3,
        lh: 1,
        min: 1,
        max: 3,
        sub: 8,
        ctx: 2,
    },
    /* RTX_16X64*/
    TxfmInfo {
        w: 4,
        h: 16,
        lw: 2,
        lh: 4,
        min: 2,
        max: 4,
        sub: 9,
        ctx: 3,
    },
    /* RTX_64X16*/
    TxfmInfo {
        w: 16,
        h: 4,
        lw: 4,
        lh: 2,
        min: 2,
        max: 4,
        sub: 10,
        ctx: 3,
    },
    /* RTX_4X32 */
    TxfmInfo {
        w: 1,
        h: 8,
        lw: 0,
        lh: 3,
        min: 0,
        max: 3,
        sub: 13,
        ctx: 2,
    },
    /* RTX_32X4 */
    TxfmInfo {
        w: 8,
        h: 1,
        lw: 3,
        lh: 0,
        min: 0,
        max: 3,
        sub: 14,
        ctx: 2,
    },
    /* RTX_8X64 */
    TxfmInfo {
        w: 2,
        h: 16,
        lw: 1,
        lh: 4,
        min: 1,
        max: 4,
        sub: 15,
        ctx: 3,
    },
    /* RTX_64X8 */
    TxfmInfo {
        w: 16,
        h: 2,
        lw: 4,
        lh: 1,
        min: 1,
        max: 4,
        sub: 16,
        ctx: 3,
    },
    /* RTX_4X64 */
    TxfmInfo {
        w: 1,
        h: 16,
        lw: 0,
        lh: 4,
        min: 0,
        max: 4,
        sub: 19,
        ctx: 2,
    },
    /* RTX_64X4 */
    TxfmInfo {
        w: 16,
        h: 1,
        lw: 4,
        lh: 0,
        min: 0,
        max: 4,
        sub: 20,
        ctx: 2,
    },
];

pub static TX_SHIFT: [[u8; 2]; N_RECT_TX_SIZES] = [
    /* TX_4X4   */ [7, 10],
    /* TX_8X8   */ [7, 11],
    /* TX_16X16 */ [6, 13],
    /* TX_32X32 */ [6, 13],
    /* TX_64X64 */ [6, 13],
    /* RTX_4X8  */ [7, 10],
    /* RTX_8X4  */ [7, 10],
    /* RTX_8X16 */ [7, 11],
    /* RTX_16X8 */ [7, 11],
    /* RTX_16X32*/ [6, 12],
    /* RTX_32X16*/ [6, 12],
    /* RTX_32X64*/ [6, 12],
    /* RTX_64X32*/ [6, 12],
    /* RTX_4X16 */ [6, 12],
    /* RTX_16X4 */ [6, 12],
    /* RTX_8X32 */ [6, 13],
    /* RTX_32X8 */ [6, 13],
    /* RTX_16X64*/ [6, 13],
    /* RTX_64X16*/ [6, 13],
    /* RTX_4X32 */ [7, 11],
    /* RTX_32X4 */ [7, 11],
    /* RTX_8X64 */ [6, 12],
    /* RTX_64X8 */ [6, 12],
    /* RTX_4X64 */ [6, 13],
    /* RTX_64X4 */ [6, 13],
];

pub static TX_DDT_MASK: [u8; N_RECT_TX_SIZES] = [
    /* TX_4X4   */ 0x00, /* TX_8X8   */ 0x42, /* TX_16X16 */ 0x42,
    /* TX_32X32 */ 0x00, /* TX_64X64 */ 0x00, /* RTX_4X8  */ 0x40,
    /* RTX_8X4  */ 0x02, /* RTX_8X16 */ 0x42, /* RTX_16X8 */ 0x42,
    /* RTX_16X32*/ 0x02, /* RTX_32X16*/ 0x40, /* RTX_32X64*/ 0x00,
    /* RTX_64X32*/ 0x00, /* RTX_4X16 */ 0x40, /* RTX_16X4 */ 0x02,
    /* RTX_8X32 */ 0x02, /* RTX_32X8 */ 0x40, /* RTX_16X64*/ 0x02,
    /* RTX_64X16*/ 0x40, /* RTX_4X32 */ 0x00, /* RTX_32X4 */ 0x00,
    /* RTX_8X64 */ 0x02, /* RTX_64X8 */ 0x40, /* RTX_4X64 */ 0x00,
    /* RTX_64X4 */ 0x00,
];

// CDEF direction filter offsets: [direction][pass]
// Values are stride*row + col offsets (stride=12 for CDEF)
pub static CDEF_DIRECTIONS: [[i8; 2]; 12] = [
    [12, 24],   // dir 6
    [12, 23],   // dir 7
    [-11, -22], // dir 0
    [1, -10],   // dir 1
    [1, 2],     // dir 2
    [1, 14],    // dir 3
    [13, 26],   // dir 4
    [12, 25],   // dir 5
    [12, 24],   // dir 6
    [12, 23],   // dir 7
    [-11, -22], // dir 0
    [1, -10],   // dir 1
];

pub static MODE_TO_ANGLE_MAP: [u8; 8] = [90, 180, 45, 135, 113, 157, 203, 67];

pub static SM_WEIGHTS: [[u8; 64]; 3] = [
    // scale 0: 32 >> min(6, (i<<2) >> 0)
    [
        32, 8, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0,
    ],
    // scale 1
    [
        32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0,
    ],
    // scale 2
    [
        32, 32, 16, 16, 8, 8, 4, 4, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0,
    ],
];

pub static TIP_WTS: [i8; 8] = [8, 12, 16, 18, 20, 4, 6, -4];

// sin(t), cos(t), -sin(t)
pub static CCTX_ANGLE: [[i16; 3]; 6] = [
    [181, 181, -181], //  45 degrees
    [128, 222, -128], //  30 degrees
    [222, 128, -222], //  60 degrees
    [-181, 181, 181], // -45 degrees
    [-128, 222, 128], // -30 degrees
    [-222, 128, 222], // -60 degrees
];

pub static CCSO_QUANT_SZ: [[u16; 4]; 4] = [
    [16, 8, 32, 0],
    [56, 40, 64, 128],
    [48, 24, 96, 192],
    [80, 112, 160, 256],
];

pub static CCSO_OFFSET: [[i8; 8]; 4] = [
    [0, 1, -1, 3, -3, 7, -7, -10],
    [0, 2, -2, 6, -6, 14, -14, -20],
    [0, 3, -3, 9, -9, 21, -21, -30],
    [0, 4, -4, 12, -12, 28, -28, -40],
];

pub static SUBSET_MASKS_Y: [u32; 4] = [0x3f, 0xfc3, 0xfff, 0xffff];
pub static SUBSET_MASKS_UV: [u32; 3] = [0x3f, 0x3ff, 0x3ffff];

// txtp_from_uvmode: TxfmType values for each UV intra pred mode
// DCT_DCT=0, ADST_DCT=64, DCT_ADST=2, ADST_ADST=66
pub static TXTP_FROM_UVMODE: [u8; N_UV_INTRA_PRED_MODES] = [
    0,  // DC_PRED      -> DCT_DCT
    64, // VERT_PRED    -> ADST_DCT
    2,  // HOR_PRED     -> DCT_ADST
    0,  // DIAG_DL_PRED -> DCT_DCT
    66, // DIAG_DR_PRED -> ADST_ADST
    64, // VERT_R_PRED  -> ADST_DCT
    2,  // HOR_D_PRED   -> DCT_ADST
    2,  // HOR_U_PRED   -> DCT_ADST
    64, // VERT_L_PRED  -> ADST_DCT
    66, // SMOOTH_PRED  -> ADST_ADST
    64, // SMOOTH_V     -> ADST_DCT
    2,  // SMOOTH_H     -> DCT_ADST
    66, // PAETH_PRED   -> ADST_ADST
    0,  // CFL_PRED     (placeholder)
];

pub static NS_WIENER_COEF_RANGE_Y: [[i8; 2]; 16] = [
    [6, -24],
    [6, -24],
    [5, -14],
    [5, -14],
    [5, -16],
    [5, -16],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
];

pub static NS_WIENER_COEF_RANGE_UV: [[i8; 2]; 18] = [
    [6, -24],
    [6, -24],
    [5, -14],
    [5, -14],
    [5, -16],
    [5, -16],
    [5, -16],
    [5, -16],
    [5, -16],
    [5, -16],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
    [4, -8],
];

pub static DR_INTRA_DERIVATIVE: [u16; 90] = [
    0, 4096, 2048, 1365, 1024, 819, 682, 585, 512, 455, 409, 409, 409, 372, 341, 292, 273, 256,
    227, 215, 204, 186, 178, 170, 157, 151, 146, 136, 132, 128, 117, 110, 107, 99, 97, 97, 93, 87,
    83, 81, 77, 74, 73, 69, 66, 64, 62, 59, 56, 55, 53, 50, 49, 47, 44, 42, 42, 41, 38, 37, 35, 32,
    31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 18, 16, 15, 14, 12, 11, 10, 10, 10, 9, 8, 7, 6, 5, 4,
    3, 2, 1,
];

pub static DC_IBP_WEIGHTS: [u8; 32] = [
    /* Unused */ 0, /* len  1 */ 96, /* len  2 */ 86, 107, /* len  4 */ 77, 90,
    102, 115, /* len  8 */ 71, 78, 86, 92, 100, 107, 114, 121, /* len 16 */ 68, 72, 76,
    79, 83, 87, 90, 94, 98, 102, 106, 109, 113, 117, 121, 124,
];

pub static DIV_RECIP: [u16; 129] = [
    512, 508, 504, 500, 496, 493, 489, 485, 482, 478, 475, 471, 468, 465, 462, 458, 455, 452, 449,
    446, 443, 440, 437, 434, 431, 428, 426, 423, 420, 417, 415, 412, 410, 407, 405, 402, 400, 397,
    395, 392, 390, 388, 386, 383, 381, 379, 377, 374, 372, 370, 368, 366, 364, 362, 360, 358, 356,
    354, 352, 350, 349, 347, 345, 343, 341, 340, 338, 336, 334, 333, 331, 329, 328, 326, 324, 323,
    321, 320, 318, 317, 315, 314, 312, 311, 309, 308, 306, 305, 303, 302, 301, 299, 298, 297, 295,
    294, 293, 291, 290, 289, 287, 286, 285, 284, 282, 281, 280, 279, 278, 277, 275, 274, 273, 272,
    271, 270, 269, 267, 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, 256,
];

pub static DIV_SCALE_SH_OFFSET: [u16; 8] = [4822, 5952, 6624, 6792, 6408, 5424, 3792, 1466];

pub static DIV_SCALE_SH_BIAS: [u16; 8] = [12784, 12054, 11670, 11583, 11764, 12195, 12870, 13782];

pub static DIV_SCALE_SH_COEFW: [u8; 8] = [214, 153, 113, 86, 67, 53, 43, 35];

pub static MC_SUBPEL_FILTERS: [[[i8; 8]; 15]; 6] = [
    // DAV2D_FILTER_8TAP_REGULAR [0]
    [
        [0, 1, -3, 63, 4, -1, 0, 0],
        [0, 1, -5, 61, 9, -2, 0, 0],
        [0, 1, -6, 58, 14, -4, 1, 0],
        [0, 1, -7, 55, 19, -5, 1, 0],
        [0, 1, -7, 51, 24, -6, 1, 0],
        [0, 1, -8, 47, 29, -6, 1, 0],
        [0, 1, -7, 42, 33, -6, 1, 0],
        [0, 1, -7, 38, 38, -7, 1, 0],
        [0, 1, -6, 33, 42, -7, 1, 0],
        [0, 1, -6, 29, 47, -8, 1, 0],
        [0, 1, -6, 24, 51, -7, 1, 0],
        [0, 1, -5, 19, 55, -7, 1, 0],
        [0, 1, -4, 14, 58, -6, 1, 0],
        [0, 0, -2, 9, 61, -5, 1, 0],
        [0, 0, -1, 4, 63, -3, 1, 0],
    ],
    // DAV2D_FILTER_8TAP_SMOOTH [1]
    [
        [0, 1, 14, 31, 17, 1, 0, 0],
        [0, 0, 13, 31, 18, 2, 0, 0],
        [0, 0, 11, 31, 20, 2, 0, 0],
        [0, 0, 10, 30, 21, 3, 0, 0],
        [0, 0, 9, 29, 22, 4, 0, 0],
        [0, 0, 8, 28, 23, 5, 0, 0],
        [0, -1, 8, 27, 24, 6, 0, 0],
        [0, -1, 7, 26, 26, 7, -1, 0],
        [0, 0, 6, 24, 27, 8, -1, 0],
        [0, 0, 5, 23, 28, 8, 0, 0],
        [0, 0, 4, 22, 29, 9, 0, 0],
        [0, 0, 3, 21, 30, 10, 0, 0],
        [0, 0, 2, 20, 31, 11, 0, 0],
        [0, 0, 2, 18, 31, 13, 0, 0],
        [0, 0, 1, 17, 31, 14, 1, 0],
    ],
    // DAV2D_FILTER_8TAP_SHARP [2]
    [
        [-1, 1, -3, 63, 4, -1, 1, 0],
        [-1, 3, -6, 62, 8, -3, 2, -1],
        [-1, 4, -9, 60, 13, -5, 3, -1],
        [-2, 5, -11, 58, 19, -7, 3, -1],
        [-2, 5, -11, 54, 24, -9, 4, -1],
        [-2, 5, -12, 50, 30, -10, 4, -1],
        [-2, 5, -12, 45, 35, -11, 5, -1],
        [-2, 6, -12, 40, 40, -12, 6, -2],
        [-1, 5, -11, 35, 45, -12, 5, -2],
        [-1, 4, -10, 30, 50, -12, 5, -2],
        [-1, 4, -9, 24, 54, -11, 5, -2],
        [-1, 3, -7, 19, 58, -11, 5, -2],
        [-1, 3, -5, 13, 60, -9, 4, -1],
        [-1, 2, -3, 8, 62, -6, 3, -1],
        [0, 1, -1, 4, 63, -3, 1, -1],
    ],
    // width <= 4: DAV2D_FILTER_8TAP_REGULAR [3]
    [
        [0, 0, -2, 63, 4, -1, 0, 0],
        [0, 0, -4, 61, 9, -2, 0, 0],
        [0, 0, -5, 58, 14, -3, 0, 0],
        [0, 0, -6, 55, 19, -4, 0, 0],
        [0, 0, -6, 51, 24, -5, 0, 0],
        [0, 0, -7, 47, 29, -5, 0, 0],
        [0, 0, -6, 42, 33, -5, 0, 0],
        [0, 0, -6, 38, 38, -6, 0, 0],
        [0, 0, -5, 33, 42, -6, 0, 0],
        [0, 0, -5, 29, 47, -7, 0, 0],
        [0, 0, -5, 24, 51, -6, 0, 0],
        [0, 0, -4, 19, 55, -6, 0, 0],
        [0, 0, -3, 14, 58, -5, 0, 0],
        [0, 0, -2, 9, 61, -4, 0, 0],
        [0, 0, -1, 4, 63, -2, 0, 0],
    ],
    // width <= 4: DAV2D_FILTER_8TAP_SMOOTH [4]
    [
        [0, 0, 15, 31, 17, 1, 0, 0],
        [0, 0, 13, 31, 18, 2, 0, 0],
        [0, 0, 11, 31, 20, 2, 0, 0],
        [0, 0, 10, 30, 21, 3, 0, 0],
        [0, 0, 9, 29, 22, 4, 0, 0],
        [0, 0, 8, 28, 23, 5, 0, 0],
        [0, 0, 7, 27, 24, 6, 0, 0],
        [0, 0, 6, 26, 26, 6, 0, 0],
        [0, 0, 6, 24, 27, 7, 0, 0],
        [0, 0, 5, 23, 28, 8, 0, 0],
        [0, 0, 4, 22, 29, 9, 0, 0],
        [0, 0, 3, 21, 30, 10, 0, 0],
        [0, 0, 2, 20, 31, 11, 0, 0],
        [0, 0, 2, 18, 31, 13, 0, 0],
        [0, 0, 1, 17, 31, 15, 0, 0],
    ],
    // Bilinear scaled [5]
    [
        [0, 0, 0, 60, 4, 0, 0, 0],
        [0, 0, 0, 56, 8, 0, 0, 0],
        [0, 0, 0, 52, 12, 0, 0, 0],
        [0, 0, 0, 48, 16, 0, 0, 0],
        [0, 0, 0, 44, 20, 0, 0, 0],
        [0, 0, 0, 40, 24, 0, 0, 0],
        [0, 0, 0, 36, 28, 0, 0, 0],
        [0, 0, 0, 32, 32, 0, 0, 0],
        [0, 0, 0, 28, 36, 0, 0, 0],
        [0, 0, 0, 24, 40, 0, 0, 0],
        [0, 0, 0, 20, 44, 0, 0, 0],
        [0, 0, 0, 16, 48, 0, 0, 0],
        [0, 0, 0, 12, 52, 0, 0, 0],
        [0, 0, 0, 8, 56, 0, 0, 0],
        [0, 0, 0, 4, 60, 0, 0, 0],
    ],
];

pub static EXT_WARP_FILTER: [[i8; 8]; 63] = [
    [0, 0, -1, 127, 2, 0, 0, 0],
    [0, 0, -2, 127, 4, -1, 0, 0],
    [0, 0, -3, 126, 6, -1, 0, 0],
    [0, 1, -4, 125, 8, -2, 0, 0],
    [0, 1, -5, 124, 11, -3, 0, 0],
    [0, 1, -6, 123, 13, -3, 0, 0],
    [0, 1, -6, 122, 15, -4, 0, 0],
    [0, 1, -7, 120, 17, -4, 1, 0],
    [0, 1, -8, 119, 20, -5, 1, 0],
    [0, 1, -9, 118, 22, -5, 1, 0],
    [0, 1, -9, 117, 24, -6, 1, 0],
    [0, 1, -10, 115, 27, -6, 1, 0],
    [0, 1, -10, 114, 29, -7, 1, 0],
    [0, 1, -11, 112, 32, -7, 1, 0],
    [0, 1, -11, 111, 34, -8, 1, 0],
    [0, 1, -11, 109, 36, -8, 1, 0],
    [0, 2, -12, 107, 39, -9, 1, 0],
    [0, 2, -12, 105, 41, -9, 1, 0],
    [0, 2, -12, 103, 44, -10, 1, 0],
    [0, 2, -13, 102, 46, -10, 1, 0],
    [0, 2, -13, 99, 49, -10, 1, 0],
    [0, 2, -13, 98, 51, -11, 1, 0],
    [0, 2, -13, 95, 54, -11, 1, 0],
    [0, 2, -14, 93, 56, -11, 2, 0],
    [0, 2, -14, 91, 59, -12, 2, 0],
    [0, 2, -14, 89, 61, -12, 2, 0],
    [0, 2, -14, 87, 63, -12, 2, 0],
    [0, 2, -14, 85, 66, -13, 2, 0],
    [0, 2, -14, 83, 68, -13, 2, 0],
    [0, 2, -14, 80, 71, -13, 2, 0],
    [0, 2, -14, 78, 73, -13, 2, 0],
    [0, 2, -13, 75, 75, -13, 2, 0],
    [0, 2, -13, 73, 78, -14, 2, 0],
    [0, 2, -13, 71, 80, -14, 2, 0],
    [0, 2, -13, 68, 83, -14, 2, 0],
    [0, 2, -13, 66, 85, -14, 2, 0],
    [0, 2, -12, 63, 87, -14, 2, 0],
    [0, 2, -12, 61, 89, -14, 2, 0],
    [0, 2, -12, 59, 91, -14, 2, 0],
    [0, 2, -11, 56, 93, -14, 2, 0],
    [0, 1, -11, 54, 95, -13, 2, 0],
    [0, 1, -11, 51, 98, -13, 2, 0],
    [0, 1, -10, 49, 99, -13, 2, 0],
    [0, 1, -10, 46, 102, -13, 2, 0],
    [0, 1, -10, 44, 103, -12, 2, 0],
    [0, 1, -9, 41, 105, -12, 2, 0],
    [0, 1, -9, 39, 107, -12, 2, 0],
    [0, 1, -8, 36, 109, -11, 1, 0],
    [0, 1, -8, 34, 111, -11, 1, 0],
    [0, 1, -7, 32, 112, -11, 1, 0],
    [0, 1, -7, 29, 114, -10, 1, 0],
    [0, 1, -6, 27, 115, -10, 1, 0],
    [0, 1, -6, 24, 117, -9, 1, 0],
    [0, 1, -5, 22, 118, -9, 1, 0],
    [0, 1, -5, 20, 119, -8, 1, 0],
    [0, 1, -4, 17, 120, -7, 1, 0],
    [0, 0, -4, 15, 122, -6, 1, 0],
    [0, 0, -3, 13, 123, -6, 1, 0],
    [0, 0, -3, 11, 124, -5, 1, 0],
    [0, 0, -2, 8, 125, -4, 1, 0],
    [0, 0, -1, 6, 126, -3, 0, 0],
    [0, 0, -1, 4, 127, -2, 0, 0],
    [0, 0, 0, 2, 127, -1, 0, 0],
];

pub static DEBLOCK_SIDE_THRESHOLDS: [i16; 296] = [
    -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
    -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
    -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
    -14, -13, -11, -10, -9, -7, -6, -4, -3, -2, 0, 0, 2, 3, 5, 6, 7, 9, 10, 12, 13, 15, 16, 17, 19,
    20, 22, 23, 24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 39, 40, 42, 43, 44, 46, 47, 49, 50, 51, 53,
    54, 56, 57, 59, 60, 61, 63, 64, 66, 67, 69, 70, 71, 73, 74, 76, 77, 78, 80, 81, 83, 84, 86, 87,
    88, 90, 91, 93, 94, 96, 101, 111, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230,
    240, 249, 259, 269, 279, 289, 299, 309, 319, 329, 339, 349, 359, 368, 378, 388, 398, 408, 418,
    428, 438, 448, 458, 468, 478, 488, 497, 507, 517, 527, 537, 547, 557, 567, 577, 587, 597, 607,
    616, 626, 636, 646, 656, 666, 676, 686, 696, 706, 716, 726, 736, 745, 755, 765, 775, 785, 795,
    805, 815, 825, 835, 845, 855, 864, 874, 884, 894, 904, 914, 924, 934, 944, 954, 964, 974, 984,
    993, 1003, 1013, 1023, 1033, 1043, 1053, 1063, 1073, 1083, 1093, 1103, 1112, 1122, 1132, 1142,
    1152, 1162, 1172, 1182, 1192, 1202, 1212, 1222, 1232, 1241, 1251, 1261, 1271, 1281, 1291, 1301,
    1311, 1321, 1331, 1341, 1351, 1360, 1370, 1380, 1390, 1400, 1410, 1420, 1430, 1440, 1450, 1460,
    1470, 1480, 1489, 1499, 1509, 1519, 1529, 1539, 1549, 1559, 1569, 1579, 1589, 1599, 1608, 1618,
    1628, 1638, 1648, 1658, 1668, 1678,
];

pub const COMP_INTER_PRED_MODES: [[u8; 2]; 11] = [
    [13, 13],
    [13, 15],
    [15, 13],
    [14, 14],
    [15, 15],
    [15, 15],
    [13, 13],
    [13, 15],
    [15, 13],
    [15, 15],
    [15, 15],
];

pub const MAX_TXFM_SIZE_FOR_BS: [[u8; 4]; N_BS_SIZES] = [
    [4, 4, 4, 3],
    [4, 4, 4, 3],
    [4, 4, 4, 3],
    [4, 4, 4, 3],
    [4, 4, 12, 3],
    [4, 11, 11, 3],
    [4, 11, 3, 3],
    [12, 3, 10, 3],
    [18, 10, 16, 10],
    [22, 16, 20, 16],
    [24, 20, 20, 20],
    [11, 17, 9, 3],
    [3, 9, 2, 3],
    [10, 2, 8, 10],
    [16, 8, 14, 16],
    [20, 14, 14, 20],
    [17, 21, 15, 9],
    [9, 15, 7, 9],
    [2, 7, 1, 2],
    [8, 1, 6, 8],
    [14, 6, 6, 14],
    [21, 23, 19, 15],
    [15, 19, 13, 15],
    [7, 13, 5, 7],
    [1, 5, 0, 1],
    [6, 0, 0, 6],
    [23, 23, 19, 19],
    [19, 19, 13, 19],
    [13, 13, 5, 13],
    [5, 5, 0, 5],
    [0, 0, 0, 0],
];

pub const SS_BS: [[u8; 3]; N_BS_SIZES] = [
    [3, 2, 0],
    [4, 3, 1],
    [5, 255, 2],
    [6, 5, 3],
    [7, 6, 4],
    [11, 255, 5],
    [12, 11, 6],
    [13, 12, 7],
    [14, 13, 8],
    [15, 14, 9],
    [255, 15, 10],
    [17, 16, 11],
    [18, 17, 12],
    [19, 18, 13],
    [20, 19, 14],
    [255, 20, 15],
    [22, 21, 16],
    [23, 22, 17],
    [24, 23, 18],
    [25, 24, 19],
    [255, 25, 20],
    [27, 26, 21],
    [28, 27, 22],
    [29, 28, 23],
    [30, 29, 24],
    [255, 30, 25],
    [255, 255, 26],
    [255, 255, 27],
    [255, 255, 28],
    [255, 255, 29],
    [255, 255, 30],
];

pub const TX_PART_TBL: [[i8; 8]; N_BS_SIZES] = [
    [4, -1, -1, -1, -1, -1, -1, -1],
    [4, -1, -1, -1, -1, -1, -1, -1],
    [4, -1, -1, -1, -1, -1, -1, -1],
    [4, -1, -1, -1, -1, -1, -1, -1],
    [4, -1, -1, -1, -1, -1, -1, -1],
    [4, -1, -1, -1, -1, -1, -1, -1],
    [4, 3, 12, 11, 18, 17, 10, 9],
    [12, 10, 18, 3, 22, 9, 16, 2],
    [18, 16, 22, 10, 24, 2, 20, 8],
    [22, 20, 24, 16, -1, 8, -1, 14],
    [24, -1, -1, 20, -1, 14, -1, -1],
    [11, 9, 3, 17, 10, 21, 2, 15],
    [3, 2, 10, 9, 16, 15, 8, 7],
    [10, 8, 16, 2, 20, 7, 14, 1],
    [16, 14, 20, 8, -1, 1, -1, 6],
    [20, -1, -1, 14, -1, 6, -1, -1],
    [17, 15, 9, 21, 2, 23, 7, 19],
    [9, 7, 2, 15, 8, 19, 1, 13],
    [2, 1, 8, 7, 14, 13, 6, 5],
    [8, 6, 14, 1, -1, 5, -1, 0],
    [14, -1, -1, 6, -1, 0, -1, -1],
    [21, 19, 15, 23, 7, -1, 13, -1],
    [15, 13, 7, 19, 1, -1, 5, -1],
    [7, 5, 1, 13, 6, -1, 0, -1],
    [1, 0, 6, 5, -1, -1, -1, -1],
    [6, -1, -1, 0, -1, -1, -1, -1],
    [23, -1, 19, -1, 13, -1, -1, -1],
    [19, -1, 13, -1, 5, -1, -1, -1],
    [13, -1, 5, -1, 0, -1, -1, -1],
    [5, -1, 0, -1, -1, -1, -1, -1],
    [0, -1, -1, -1, -1, -1, -1, -1],
];

pub const WIENER_NS_FILTERS: [[i8; 16]; 64] = [
    [39, 39, -14, -14, -16, -16, 7, 7, -1, -3, 1, 7, 0, 0, 0, 0],
    [-1, 3, 1, -1, -2, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
    [12, 14, -5, -6, -6, 2, 1, -1, 2, -1, 1, 1, 0, 0, 0, 0],
    [39, 23, -7, -6, -12, -7, -2, -3, 3, 2, 2, 1, 0, 0, 0, 0],
    [5, 12, -1, -2, -4, 15, 1, -5, -1, -7, 1, 2, 0, 0, 0, 0],
    [8, 8, -3, -3, -2, -4, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0],
    [5, 7, -2, -3, -2, -3, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0],
    [16, 16, -7, -6, 11, -6, -3, 1, -3, 2, 2, 1, 0, 0, 0, 0],
    [18, 39, -3, -14, 3, -16, -2, 5, -4, 1, 0, 4, 0, 0, 0, 0],
    [16, 4, -6, -1, -1, -6, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0],
    [-7, 11, 7, -3, -2, 11, 0, -5, 0, -3, -1, 1, 0, 0, 0, 0],
    [21, 26, -6, -8, -10, 7, 1, -4, 1, -3, 2, 2, 0, 0, 0, 0],
    [5, 7, -2, -4, -3, -1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0],
    [14, 15, -6, -5, -4, -4, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],
    [9, 10, -4, -4, -6, 0, 1, 0, 2, -1, 1, 1, 0, 0, 0, 0],
    [25, 17, -6, -4, -12, -9, 1, 0, 3, 2, 1, 0, 0, 0, 0, 0],
    [13, 13, -4, -5, 3, -7, -2, 1, -1, 2, 1, 1, 0, 0, 0, 0],
    [4, 7, -1, -3, -5, -4, 1, 1, 2, 1, 0, 0, 0, 0, 0, 0],
    [8, 33, 0, -13, -10, 1, 2, -2, 2, -1, 0, 3, 0, 0, 0, 0],
    [-2, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [11, 11, -5, -5, -4, -5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
    [-2, 17, 4, -3, 7, -6, -3, 2, -3, 0, -1, 1, 0, 0, 0, 0],
    [30, 15, -7, 0, -5, -13, 0, 1, -1, 2, 1, 0, 0, 0, 0, 0],
    [33, 26, -8, -4, 7, -12, -4, 0, -5, 0, 2, 2, 0, 0, 0, 0],
    [8, 10, -4, -5, -4, -4, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
    [23, 24, -8, -8, -1, -9, -1, 1, -1, 1, 2, 2, 0, 0, 0, 0],
    [18, 39, -5, -10, -11, -9, 5, 3, -2, -1, -1, 3, 0, 0, 0, 0],
    [7, 15, -3, -6, -5, -5, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0],
    [12, 9, -5, -3, -8, -5, 2, 1, 2, 1, 1, 0, 0, 0, 0, 0],
    [11, 8, -4, -1, -5, -6, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0],
    [3, 3, 0, 1, -2, 13, 0, -4, -1, -4, 1, 1, 0, 0, 0, 0],
    [4, 3, 2, 2, -4, 15, 0, -6, 1, -6, 0, 0, 0, 0, 0, 0],
    [13, 16, -7, -5, 15, -3, -3, 2, -6, 1, 1, 1, 0, 0, 0, 0],
    [32, 20, 1, 9, 15, 15, -7, -7, -7, -7, -2, -2, 0, 0, 0, 0],
    [16, 18, -6, -7, -9, -9, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0],
    [10, 11, -3, -3, -7, 8, 1, -3, 2, -4, 1, 1, 0, 0, 0, 0],
    [36, -1, -12, 4, 15, 15, -8, -8, -5, -6, 7, 1, 0, 0, 0, 0],
    [36, 12, -12, -3, -11, 5, 1, -1, 3, -3, 2, 1, 0, 0, 0, 0],
    [1, 1, 0, -1, -2, -3, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
    [11, 11, -5, -5, -1, -4, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0],
    [5, 7, -3, -4, -3, -1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0],
    [8, 14, -3, -4, -4, -8, 1, 3, 0, 1, 0, 1, 0, 0, 0, 0],
    [28, 39, -9, -13, -13, -16, 3, 6, 1, 2, 0, 3, 0, 0, 0, 0],
    [1, 1, 0, -1, -3, -2, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0],
    [17, 17, -5, -1, 2, 5, -1, -2, -3, -4, 1, 1, 0, 0, 0, 0],
    [8, 12, -1, -4, 3, -5, -2, -1, -2, 2, 1, 1, 0, 0, 0, 0],
    [4, 8, -2, -2, -5, -3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0],
    [-3, 6, 2, -2, 1, -2, 0, 1, -1, 0, -1, 1, 0, 0, 0, 0],
    [5, 6, -1, -2, -4, 4, 0, -2, 1, -2, 1, 1, 0, 0, 0, 0],
    [14, 12, -4, -5, -8, -7, 1, 0, 3, 3, 1, 0, 0, 0, 0, 0],
    [17, 18, -7, -8, -8, -3, 1, 0, 2, 0, 2, 2, 0, 0, 0, 0],
    [39, 18, -14, -3, -5, -14, 1, 1, -1, 4, 3, 0, 0, 0, 0, 0],
    [17, 0, -4, 2, 15, -5, -5, 0, -5, 2, 1, 0, 0, 0, 0, 0],
    [16, 14, -6, -5, -2, -8, 0, 2, -1, 1, 1, 2, 0, 0, 0, 0],
    [39, 2, -10, 8, 15, 15, -8, -8, -7, -8, 6, 1, 0, 0, 0, 0],
    [18, 7, -4, 1, -10, 2, 1, -2, 2, -2, 1, 0, 0, 0, 0, 0],
    [39, 39, -13, -14, -16, -16, 6, 5, 6, 4, 1, 3, 0, 0, 0, 0],
    [24, 22, -7, -5, 15, -6, -5, -2, -6, 0, 2, 2, 0, 0, 0, 0],
    [28, 0, -9, 9, -10, 14, 2, -1, -1, -8, 2, 0, 0, 0, 0, 0],
    [2, 2, -1, -1, -2, -1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0],
    [-5, 11, 6, -3, 15, -3, -6, 1, -3, 0, -1, 1, 0, 0, 0, 0],
    [39, 32, -9, 3, -6, 12, -1, -5, -6, -8, 2, 1, 0, 0, 0, 0],
    [5, 4, -2, -1, -4, -4, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
    [25, 25, -8, -8, -7, -5, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0],
];

pub const PC_WIENER_FILTERS: [[[i16; 13]; 64]; 4] = [
    [
        [73, 127, -20, -30, -38, -29, 10, 7, -1, -3, 1, 7, -80],
        [-1, 3, 1, -1, -2, -1, 0, 0, 1, 0, 0, 0, 128],
        [12, 14, -5, -6, -6, 2, 1, -1, 2, -1, 1, 1, 100],
        [43, 23, -7, -6, -12, -7, -2, -3, 3, 2, 2, 1, 54],
        [5, 12, -1, -2, -4, 19, 1, -5, -1, -7, 1, 2, 88],
        [8, 8, -3, -3, -2, -4, 0, 2, 0, 0, 0, 1, 114],
        [5, 7, -2, -3, -2, -3, 1, 1, 0, 0, 0, 1, 118],
        [16, 16, -7, -6, 11, -6, -3, 1, -3, 2, 2, 1, 80],
        [18, 50, -3, -14, 3, -18, -2, 5, -4, 1, 0, 4, 48],
        [16, 4, -6, -1, -1, -6, 0, 1, 0, 2, 1, 0, 108],
        [-7, 11, 7, -3, -2, 11, 0, -5, 0, -3, -1, 1, 110],
        [21, 26, -6, -8, -10, 7, 1, -4, 1, -3, 2, 2, 70],
        [5, 7, -2, -4, -3, -1, 1, 0, 1, 0, 0, 1, 118],
        [14, 15, -6, -5, -4, -4, 1, 1, 0, 0, 1, 1, 100],
        [9, 10, -4, -4, -6, 0, 1, 0, 2, -1, 1, 1, 110],
        [25, 17, -6, -4, -12, -9, 1, 0, 3, 2, 1, 0, 92],
        [13, 13, -4, -5, 3, -7, -2, 1, -1, 2, 1, 1, 98],
        [4, 7, -1, -3, -5, -4, 1, 1, 2, 1, 0, 0, 122],
        [8, 33, 0, -13, -10, 1, 2, -2, 2, -1, 0, 3, 82],
        [-2, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132],
        [11, 11, -5, -5, -4, -5, 1, 1, 1, 1, 1, 1, 110],
        [-2, 17, 4, -3, 7, -6, -3, 2, -3, 0, -1, 1, 102],
        [30, 15, -7, 0, -5, -13, 0, 1, -1, 2, 1, 0, 82],
        [33, 26, -8, -4, 7, -12, -4, 0, -5, 0, 2, 2, 54],
        [8, 10, -4, -5, -4, -4, 1, 1, 1, 1, 1, 1, 114],
        [23, 24, -8, -8, -1, -9, -1, 1, -1, 1, 2, 2, 78],
        [18, 39, -5, -10, -11, -9, 5, 3, -2, -1, -1, 3, 70],
        [7, 15, -3, -6, -5, -5, 2, 2, 0, 0, 0, 2, 110],
        [12, 9, -5, -3, -8, -5, 2, 1, 2, 1, 1, 0, 114],
        [11, 8, -4, -1, -5, -6, 1, 1, 0, 1, 1, 0, 114],
        [3, 3, 0, 1, -2, 13, 0, -4, -1, -4, 1, 1, 106],
        [4, 3, 2, 2, -4, 26, 0, -6, 1, -6, 0, 0, 84],
        [13, 16, -7, -5, 15, -3, -3, 2, -6, 1, 1, 1, 78],
        [32, 20, 1, 9, 16, 15, -7, -7, -7, -7, -2, -2, 6],
        [16, 18, -6, -7, -9, -9, 2, 2, 2, 2, 1, 1, 102],
        [10, 11, -3, -3, -7, 8, 1, -3, 2, -4, 1, 1, 100],
        [36, -1, -12, 4, 17, 19, -10, -11, -5, -6, 8, 1, 48],
        [36, 12, -12, -3, -11, 5, 1, -1, 3, -3, 2, 1, 68],
        [1, 1, 0, -1, -2, -3, 0, 1, 1, 1, 0, 0, 130],
        [11, 11, -5, -5, -1, -4, 0, 1, 0, 1, 1, 1, 106],
        [5, 7, -3, -4, -3, -1, 1, 0, 1, 0, 1, 1, 118],
        [8, 14, -3, -4, -4, -8, 1, 3, 0, 1, 0, 1, 110],
        [28, 42, -9, -13, -13, -19, 3, 6, 1, 2, 0, 3, 66],
        [1, 1, 0, -1, -3, -2, 1, 0, 1, 1, 0, 0, 130],
        [17, 17, -5, -1, 2, 5, -1, -2, -3, -4, 1, 1, 74],
        [8, 12, -1, -4, 3, -5, -2, -1, -2, 2, 1, 1, 104],
        [4, 8, -2, -2, -5, -3, 2, 1, 1, 0, 0, 0, 120],
        [-3, 6, 2, -2, 1, -2, 0, 1, -1, 0, -1, 1, 124],
        [5, 6, -1, -2, -4, 4, 0, -2, 1, -2, 1, 1, 114],
        [14, 12, -4, -5, -8, -7, 1, 0, 3, 3, 1, 0, 108],
        [17, 18, -7, -8, -8, -3, 1, 0, 2, 0, 2, 2, 96],
        [41, 18, -14, -3, -5, -14, 1, 1, -1, 4, 3, 0, 66],
        [17, 0, -4, 2, 15, -5, -5, 0, -5, 2, 1, 0, 92],
        [16, 14, -6, -5, -2, -8, 0, 2, -1, 1, 1, 2, 100],
        [39, 2, -10, 8, 17, 20, -10, -9, -7, -9, 6, 1, 32],
        [18, 7, -4, 1, -10, 2, 1, -2, 2, -2, 1, 0, 100],
        [49, 64, -13, -20, -31, -27, 6, 5, 6, 4, 1, 3, 34],
        [24, 22, -7, -5, 24, -6, -5, -2, -6, 0, 2, 2, 42],
        [28, 0, -9, 9, -10, 14, 2, -1, -1, -8, 2, 0, 76],
        [2, 2, -1, -1, -2, -1, 1, 0, 1, 0, 0, 0, 126],
        [-5, 11, 6, -3, 16, -3, -6, 1, -3, 0, -1, 1, 100],
        [41, 32, -9, 3, -6, 12, -1, -5, -6, -9, 2, 1, 18],
        [5, 4, -2, -1, -4, -4, 1, 1, 1, 1, 0, 0, 124],
        [25, 25, -8, -8, -7, -5, 1, 0, 0, 0, 1, 2, 76],
    ],
    [
        [21, 23, -6, -7, -7, 6, 0, -4, 0, -3, 2, 2, 74],
        [22, 23, -5, -5, -12, 15, 2, -6, 1, -5, 1, 1, 64],
        [7, 6, -3, -2, -5, -4, 2, 1, 1, 1, 0, 0, 120],
        [4, 7, -1, -3, -4, -5, 1, 1, 1, 2, 0, 0, 122],
        [16, 5, -6, 0, -8, 0, 3, -1, 1, -1, 1, 0, 108],
        [34, 5, -8, 8, 13, 17, -8, -8, -7, -9, 5, 1, 42],
        [24, 20, -3, -4, -11, -9, -1, -1, 3, 2, 1, 0, 86],
        [24, 20, -8, -5, 19, -6, -4, -1, -5, 1, 2, 1, 52],
        [37, 5, -12, 3, 12, -7, 2, 1, -8, 1, 1, 1, 56],
        [32, 17, -3, -3, -9, -1, -4, -4, 3, -1, 2, 1, 68],
        [3, 6, 0, -2, -4, -5, 1, 2, 1, 1, -1, 0, 124],
        [4, 11, -1, -4, -6, -2, 2, 0, 1, 0, 0, 1, 116],
        [33, 26, -8, -7, 5, -13, -4, 0, -3, 2, 2, 2, 58],
        [2, 3, -1, -1, -3, -2, 1, 1, 1, 0, 0, 0, 126],
        [14, 14, -6, -5, -7, -4, 2, 1, 1, 0, 1, 1, 104],
        [30, 2, -9, 9, -11, 14, 1, 1, 0, -9, 2, 0, 68],
        [5, 28, 1, -5, 7, -10, -4, 5, -3, -1, -1, 2, 80],
        [17, 17, -7, -6, -7, 4, 1, -2, 1, -3, 2, 2, 90],
        [13, 12, -6, -4, 11, -4, -3, 2, -4, 1, 1, 1, 88],
        [41, 0, -10, 5, 18, 23, -9, -10, -7, -8, 5, 2, 28],
        [10, 12, -3, -4, -7, -6, 2, 1, 1, 1, 0, 1, 112],
        [31, 41, -11, -10, -9, -18, 3, 5, -1, 1, 1, 2, 58],
        [28, 6, -9, 2, -10, 6, 1, -2, 2, -4, 2, 0, 84],
        [24, 22, -10, -7, 24, -2, -2, -4, -2, -1, 4, 2, 32],
        [11, 8, -2, -1, -7, 15, 1, -5, 1, -5, 1, 1, 92],
        [-8, 16, 7, -3, -4, 15, 0, -5, 1, -5, -1, 1, 100],
        [16, 13, -5, -4, -8, -8, 1, 1, 2, 2, 1, 0, 106],
        [29, 2, -10, 4, 5, -10, -2, 3, -3, 0, 2, 0, 88],
        [21, 13, -5, 10, 3, 9, -1, -4, -9, -10, 3, 1, 66],
        [30, 26, -5, -3, 13, -6, -5, -3, -5, -2, 1, 1, 44],
        [16, 11, -6, -2, -8, -6, 2, 1, 1, 1, 1, 0, 106],
        [0, 11, 2, -3, 2, -5, -1, 2, -1, 0, -1, 1, 114],
        [19, 39, -7, -11, -12, -8, 5, 3, -1, -1, 0, 3, 70],
        [21, 23, -7, -8, -9, -5, 2, 0, 1, 0, 1, 2, 86],
        [10, 16, -4, -4, -8, -7, 4, 3, 0, 0, -1, 1, 108],
        [29, 33, -11, -10, -15, -12, 5, 3, 1, 1, 1, 2, 74],
        [37, 16, -14, -4, -10, 11, 1, -2, 2, -6, 3, 2, 56],
        [0, 18, 4, -4, 8, -8, -3, 2, -3, 0, -1, 2, 98],
        [32, 18, 4, 11, 18, 18, -8, -8, -8, -8, -3, -2, 0],
        [5, 6, -3, -3, -2, -3, 1, 2, 0, 0, 0, 1, 120],
        [49, 25, -5, -9, -8, -8, -5, -5, 4, 4, 2, 1, 38],
        [43, 16, -7, 13, 13, 18, -7, -8, -11, -13, 3, 1, 6],
        [-2, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132],
        [-2, 13, 5, -4, 19, -4, -6, 1, -3, 0, -1, 2, 88],
        [12, 1, -5, 4, -2, 25, 0, -5, 0, -8, 2, 0, 80],
        [19, 17, -8, -4, 15, -7, -4, 2, -5, 1, 2, 1, 70],
        [16, 15, -7, -6, 2, -6, -1, 1, -2, 1, 2, 2, 94],
        [14, 21, -5, -5, -7, -10, 2, 4, 0, 0, 0, 1, 98],
        [35, 22, -9, -7, -10, -10, -1, 0, 3, 2, 2, 1, 72],
        [26, 26, -1, -3, -1, 10, -3, -7, -3, -5, 0, 1, 48],
        [10, 9, -5, -4, -4, -3, 1, 1, 1, 0, 1, 1, 112],
        [25, 10, -4, 7, 7, 11, -5, -6, -7, -8, 3, 1, 60],
        [-3, 7, 3, -2, -3, 4, 1, -1, 0, -2, -1, 1, 120],
        [3, 12, 4, -2, -4, 31, 0, -10, 1, -7, 0, 1, 70],
        [2, 2, 0, -1, -2, -2, 0, 0, 1, 1, 0, 0, 126],
        [16, 19, -6, -9, -7, -4, 1, 0, 2, 1, 1, 2, 96],
        [22, 25, -7, -8, -7, -5, 1, 0, 0, 0, 1, 2, 80],
        [12, 14, -5, -6, -2, -6, 0, 1, 0, 2, 1, 1, 104],
        [12, 13, -5, -5, -7, -3, 1, 1, 2, 0, 1, 1, 106],
        [25, 22, -8, -7, 1, -11, -2, 1, -2, 2, 2, 2, 78],
        [33, 15, -7, -1, -2, -12, -2, -1, -1, 3, 2, 0, 74],
        [19, 8, -9, -1, -4, -7, 1, 2, 0, 1, 2, 0, 104],
        [-1, -2, 1, 1, -2, -1, 1, 0, 1, 1, -1, -1, 134],
        [10, 32, 0, -12, -11, 3, 2, -3, 2, -2, 0, 3, 80],
    ],
    [
        [38, 18, -10, -5, -10, 20, -1, 2, 4, -9, 1, 2, 28],
        [11, 15, -4, -5, -8, -7, 3, 2, 1, 1, 0, 1, 108],
        [20, 9, -10, -3, 18, -4, -2, 1, -4, 1, 3, 1, 68],
        [18, 12, -7, -4, -7, -8, 1, 2, 2, 2, 1, 0, 104],
        [10, 15, -4, -6, -6, -9, 2, 3, 1, 2, 0, 1, 110],
        [61, 30, -8, -10, 5, -13, -8, -6, 0, 5, 4, 2, 4],
        [26, 27, -5, -5, 22, -4, -3, -4, -2, -3, 1, 1, 26],
        [8, 19, -3, -8, -8, -3, 3, 1, 1, 0, 0, 2, 104],
        [38, 16, 3, -3, -3, 10, -9, -7, 3, -5, 1, 2, 36],
        [8, 7, -3, -2, -5, -5, 1, 1, 1, 1, 1, 0, 118],
        [22, 25, -8, -8, -9, -5, 2, 1, 1, -1, 1, 2, 82],
        [28, 24, -8, -6, 6, -10, -3, 0, -4, 1, 2, 2, 64],
        [5, 7, 2, -1, 24, -7, -3, 3, 1, -4, 0, 4, 66],
        [30, 20, -11, -8, -11, -9, 1, 0, 3, 3, 3, 1, 84],
        [2, 13, 1, -5, 0, -5, -1, 1, 0, 1, 0, 1, 112],
        [25, 21, -8, -5, -1, -1, -1, -1, -2, -2, 2, 2, 70],
        [8, 8, -3, -5, -3, -4, 0, 0, 1, 2, 1, 1, 116],
        [15, 16, -6, -6, -8, -5, 2, 1, 1, 0, 1, 2, 102],
        [33, 14, -7, 0, -1, -12, -2, 0, -2, 2, 2, 0, 74],
        [-2, 16, 3, -3, -4, 13, 1, -4, -1, -5, 0, 2, 96],
        [31, 21, -6, -9, -5, -6, -3, -2, 2, 2, 2, 2, 70],
        [24, 22, 5, 4, 4, 5, -5, -7, -4, -7, -1, 0, 48],
        [23, 22, 1, 1, -5, 19, -3, -7, -4, -6, 0, 1, 44],
        [76, 103, -23, -32, -40, -48, 9, 12, 5, 7, 1, 6, -24],
        [29, 2, -2, 8, 15, 18, -8, -7, -5, -7, 1, -1, 42],
        [9, 10, -4, -5, -8, -7, 3, 2, 2, 2, 0, 1, 118],
        [33, 19, -5, -3, -9, -9, -2, -2, 2, 2, 2, 0, 72],
        [19, 19, -7, -7, -7, -5, 1, 1, 1, 0, 1, 2, 92],
        [8, 33, 4, -8, -10, 21, 1, -11, 0, -2, 1, 2, 50],
        [27, 14, 3, 10, 16, 15, -6, -5, -5, -6, -4, -3, 16],
        [37, 33, 2, 3, -15, -18, -1, 1, -3, 0, 1, 0, 48],
        [18, 20, -4, -4, -10, 16, 0, -6, 2, -6, 2, 1, 70],
        [21, -1, -5, 5, -8, 12, 0, -5, 0, -4, 3, 0, 92],
        [-3, 8, 3, -3, -2, 4, 0, -2, 0, -1, 0, 1, 118],
        [21, 38, -7, -2, -5, -3, 4, 1, -8, -5, 1, 4, 50],
        [2, 13, 6, -6, -4, 32, -1, -10, 2, -2, 0, 1, 62],
        [31, 5, -10, 3, 9, -9, -1, 2, -5, 1, 1, 0, 74],
        [7, 17, 3, -2, 19, -6, -10, 0, 3, -1, 2, 0, 64],
        [53, 80, -16, -4, -13, -2, 4, 0, -10, -11, 3, 5, -50],
        [25, 11, -9, -2, -9, -1, 1, 0, 2, -2, 2, 1, 90],
        [40, 9, 3, 7, 7, -10, -4, -3, -7, 1, -1, 0, 44],
        [22, 20, -8, -7, 0, -9, -1, 1, -2, 2, 2, 2, 84],
        [16, 32, -4, -1, 3, -10, -3, 5, -3, -5, 1, 3, 60],
        [36, 7, -8, 10, 12, 17, -6, -8, -9, -10, 4, 1, 36],
        [38, 23, 5, -6, -7, 1, -10, -7, 6, -1, 2, 1, 38],
        [15, 21, -6, -5, -8, -10, 3, 4, 0, 0, 0, 1, 98],
        [1, 18, 2, -4, 6, -8, -2, 3, -3, 0, -1, 2, 100],
        [-2, -2, 1, 1, 1, 0, 0, 0, -1, 0, 0, 0, 132],
        [-1, 3, 0, -2, -1, -1, 0, 1, 1, 0, 0, 0, 128],
        [0, 3, 0, -2, 0, -2, 0, 1, 0, 0, 0, 1, 126],
        [24, 7, -10, 0, -1, -9, 0, 3, -1, 1, 2, 0, 96],
        [35, 7, -13, 2, -9, 13, 1, -2, 1, -7, 3, 1, 64],
        [8, 5, -2, -5, -3, 39, 0, -5, 3, -4, 1, 1, 52],
        [16, 12, -8, -2, 0, -7, 0, 4, -1, -1, 1, 1, 98],
        [31, 31, -10, -4, 8, -9, -3, 2, -5, -3, 2, 2, 44],
        [18, 31, -7, -8, -10, -8, 5, 3, -2, -1, 0, 3, 80],
        [16, 13, -5, -4, -8, -9, 1, 1, 2, 3, 1, 0, 106],
        [15, 15, -6, -6, -6, 7, 1, -3, 1, -3, 2, 2, 90],
        [22, 21, -9, -7, 17, -6, -4, 0, -3, 1, 3, 1, 56],
        [15, 13, -7, -3, 12, -5, -3, 1, -5, 1, 2, 1, 84],
        [24, 10, -13, -3, 22, -5, 5, 3, -5, 0, 2, 2, 44],
        [36, 10, -5, 0, 15, -5, 6, 0, -10, 1, -2, 2, 32],
        [5, 14, 2, -2, 11, -7, -5, 2, -2, -1, 0, 2, 90],
        [14, 14, -7, -6, -4, -6, 1, 1, 0, 2, 2, 1, 104],
    ],
    [
        [21, 15, -11, 0, -6, -5, 5, 3, -5, -3, 2, 3, 90],
        [18, 12, -7, -4, 0, -10, 0, 3, -1, 2, 1, 1, 98],
        [16, 18, -7, -5, -10, -7, 4, 3, 0, -1, 1, 2, 100],
        [23, 29, 2, -5, 5, 10, -4, -7, -3, -5, -2, 9, 24],
        [10, 17, -6, -7, -9, -4, 4, 2, 1, 0, 1, 2, 106],
        [-3, 18, 2, -6, -3, 13, 0, -3, 0, -4, 1, 3, 92],
        [13, 23, -2, -5, -9, 6, 2, -4, 0, -1, 1, 1, 78],
        [18, 17, -8, -8, -6, 5, 2, -2, 1, -1, 2, 2, 84],
        [30, 13, 6, 4, 6, 14, -10, -14, -4, -8, 11, 2, 28],
        [23, 18, -9, -4, -5, 1, 1, 0, 0, -2, 2, 1, 76],
        [15, 18, -6, -4, -8, -2, 3, 1, -1, -2, 1, 2, 94],
        [20, 14, -10, -8, 20, -7, 0, 2, 2, 2, 3, 1, 50],
        [21, 16, -6, -2, 3, -1, -1, 0, 2, -4, 1, 2, 66],
        [19, 17, -6, -7, -8, -9, 1, 1, 2, 3, 1, 1, 98],
        [2, 21, 5, -6, -4, 12, 1, -6, -6, 10, 0, 5, 60],
        [10, 13, -5, -3, -3, -7, 2, 4, -2, -1, 0, 2, 108],
        [36, 8, -6, 10, 13, 17, -7, -8, -9, -10, 3, 1, 32],
        [13, 9, -9, -2, -3, 24, 1, -3, 1, -7, 3, 1, 72],
        [21, 23, -1, -2, 22, -1, -1, -4, 2, -2, -1, -2, 20],
        [11, 17, -3, -4, 17, -9, -2, 3, 0, -5, 1, 7, 62],
        [39, 6, 1, 13, 9, -11, 3, -3, -12, -2, 1, 1, 38],
        [28, 17, -5, -4, -5, -9, -2, -1, 1, 3, 2, 0, 78],
        [60, 1, -47, 11, -7, 38, 16, 18, -16, -22, 9, 0, 6],
        [23, 6, -3, -5, 2, 11, -4, 23, 3, -7, -3, 3, 30],
        [10, 26, 3, -5, 5, 11, -7, -8, -12, 5, 4, 18, 28],
        [11, 13, -3, -2, 1, -8, -1, 2, -1, 0, 1, 1, 100],
        [19, 21, 14, 13, 19, 14, -10, -9, -10, -11, -3, -2, 18],
        [14, 6, -10, -9, -2, 29, 0, 8, 5, 2, 1, 0, 40],
        [20, 17, 4, -3, -6, 5, -6, -8, 0, 0, 3, 1, 74],
        [18, 27, -2, -3, 4, -3, -4, -1, -6, -8, 3, 10, 58],
        [6, 5, 1, -3, 24, -6, -1, 4, 3, -8, 0, 8, 62],
        [31, 9, -12, 1, -9, 12, 0, -1, 2, -7, 3, 1, 68],
        [23, 18, -8, -1, 16, -6, -3, 1, -4, -3, 1, 2, 56],
        [-1, 8, -8, -9, -2, 12, 23, -3, -9, 28, -13, 16, 44],
        [38, 12, -3, 6, 8, -7, -2, -8, -10, 5, 7, -2, 40],
        [9, 4, 7, 6, 14, 10, 5, 6, 6, 3, -13, -9, 32],
        [20, 17, -7, -2, 1, -9, -1, 2, -3, 0, 2, 1, 86],
        [25, 22, -2, -7, -8, -3, -4, -3, 4, 0, 2, 1, 74],
        [34, 11, 5, 7, 15, 6, -6, -7, -7, -13, 6, 3, 20],
        [29, 9, -9, -1, 11, -12, -3, 3, -3, 1, 2, 1, 72],
        [14, 0, 9, 6, 9, 10, 2, 0, 1, -1, -10, -6, 60],
        [-26, 24, -15, 12, -20, 25, -12, 38, 28, 4, 0, -15, 42],
        [30, 6, -2, 4, 1, 15, -7, 7, -2, -4, 1, 0, 30],
        [20, 19, 5, 5, 5, 10, -6, -8, -5, -8, 1, 0, 52],
        [20, 21, -7, -8, -8, -3, 1, 0, 2, -1, 1, 2, 88],
        [16, 25, 2, -4, 7, 1, -7, -7, 3, -9, 4, 9, 48],
        [19, 26, -7, -8, -1, 1, -1, -1, -6, -1, 3, 10, 60],
        [5, 3, -1, -1, -3, -4, 0, 1, 1, 1, 0, 0, 124],
        [27, 12, -11, -4, -8, -2, 1, 1, 2, -1, 3, 1, 86],
        [2, 0, 0, -3, 0, 35, -4, -7, 3, 0, 3, 1, 68],
        [10, 16, -4, -5, 0, -8, 1, 3, -1, 0, 0, 2, 100],
        [19, 17, 0, 1, 0, 13, -4, -4, -6, -1, 1, 1, 54],
        [18, 7, -10, -9, 0, 24, 0, -1, 1, 10, 3, -1, 44],
        [23, 16, -4, 2, -12, -3, -1, 4, 3, -8, 1, 1, 84],
        [12, 23, -1, 5, 13, 24, -19, 9, -8, -24, -1, 14, 34],
        [14, 15, -7, -6, -6, -6, 1, 2, 1, 0, 2, 2, 104],
        [15, 22, -5, -2, -1, -1, 0, 2, -7, -6, 2, 7, 76],
        [19, 14, -8, -5, -6, -9, 1, 3, 1, 2, 1, 1, 100],
        [14, 19, -4, -1, 1, -6, -2, 4, -3, -5, 1, 3, 86],
        [17, 17, -1, 2, -3, 4, 0, -4, -5, -4, 2, 0, 78],
        [30, 5, -6, -5, 17, -5, 10, 0, -4, 1, 2, 3, 32],
        [15, 12, -7, -5, -5, -6, 1, 1, 0, 1, 2, 2, 106],
        [34, 11, 5, 2, -3, 12, -11, -9, 3, -7, 6, 1, 40],
        [8, 6, -4, 0, -5, -3, 3, 2, -1, -2, 0, 1, 118],
    ],
];

pub const PC_WIENER_SUB_CLASSIFY: [[u8; 256]; 4] = [
    [
        7, 54, 38, 45, 57, 51, 11, 57, 52, 51, 16, 52, 60, 6, 45, 32, 63, 27, 29, 23, 22, 23, 55,
        57, 58, 32, 25, 23, 22, 31, 35, 57, 9, 22, 16, 23, 41, 53, 44, 7, 53, 9, 9, 45, 23, 13, 52,
        52, 8, 7, 31, 23, 50, 32, 41, 23, 10, 16, 21, 41, 42, 21, 29, 20, 35, 23, 34, 23, 43, 30,
        18, 63, 27, 53, 36, 33, 32, 25, 15, 17, 4, 29, 49, 44, 7, 18, 2, 14, 1, 10, 61, 33, 37, 12,
        61, 11, 6, 39, 39, 51, 24, 20, 20, 50, 17, 27, 5, 41, 11, 7, 10, 3, 8, 42, 56, 25, 15, 63,
        63, 25, 41, 42, 54, 36, 4, 4, 11, 18, 23, 15, 3, 22, 11, 22, 63, 46, 3, 3, 3, 54, 15, 9,
        42, 15, 33, 53, 62, 37, 28, 60, 29, 33, 3, 8, 11, 63, 47, 18, 10, 4, 57, 15, 26, 22, 12,
        51, 18, 4, 21, 52, 47, 21, 57, 51, 3, 16, 21, 0, 14, 19, 50, 39, 37, 25, 59, 8, 58, 8, 33,
        60, 49, 33, 15, 62, 55, 20, 14, 28, 55, 52, 13, 26, 40, 8, 56, 27, 55, 2, 47, 13, 37, 54,
        37, 37, 43, 35, 58, 0, 30, 0, 58, 62, 11, 11, 43, 34, 49, 34, 28, 14, 28, 48, 43, 27, 38,
        58, 46, 10, 1, 30, 42, 56, 27, 36, 58, 11, 50, 34, 6, 26, 35, 23, 58, 31, 4, 30,
    ],
    [
        21, 62, 54, 46, 23, 8, 0, 7, 27, 60, 46, 18, 31, 60, 18, 18, 56, 34, 3, 29, 60, 8, 4, 23,
        44, 45, 59, 29, 60, 44, 58, 29, 61, 27, 46, 12, 34, 27, 28, 45, 61, 27, 61, 46, 12, 12, 27,
        27, 16, 45, 44, 12, 33, 45, 3, 12, 52, 46, 37, 31, 21, 37, 61, 57, 24, 12, 20, 12, 62, 44,
        63, 56, 34, 57, 51, 49, 18, 21, 48, 10, 24, 30, 2, 5, 45, 63, 17, 58, 13, 25, 41, 38, 36,
        22, 49, 1, 39, 57, 57, 59, 20, 50, 57, 55, 10, 10, 39, 31, 1, 43, 25, 40, 16, 47, 56, 59,
        6, 33, 56, 59, 47, 21, 19, 49, 53, 24, 49, 63, 29, 61, 9, 60, 1, 60, 17, 11, 9, 40, 40, 9,
        30, 6, 16, 4, 23, 46, 54, 22, 26, 43, 39, 41, 9, 21, 0, 51, 3, 63, 25, 24, 7, 48, 32, 61,
        2, 8, 63, 63, 37, 27, 31, 37, 7, 27, 48, 45, 43, 28, 11, 42, 58, 45, 36, 59, 54, 16, 15,
        16, 38, 43, 6, 34, 26, 2, 9, 35, 4, 20, 4, 18, 14, 32, 50, 54, 27, 34, 22, 58, 58, 35, 22,
        5, 58, 36, 58, 24, 15, 28, 7, 28, 22, 35, 1, 63, 13, 14, 30, 26, 2, 50, 4, 11, 54, 34, 42,
        15, 11, 52, 52, 52, 47, 35, 34, 28, 22, 0, 58, 14, 15, 32, 17, 49, 15, 53, 24, 44,
    ],
    [
        59, 6, 47, 15, 6, 36, 31, 58, 36, 40, 59, 59, 49, 40, 59, 59, 10, 1, 63, 11, 18, 61, 9, 58,
        51, 2, 11, 54, 40, 32, 57, 6, 50, 50, 41, 11, 45, 36, 28, 59, 63, 50, 9, 41, 11, 36, 36,
        50, 42, 58, 52, 11, 27, 2, 14, 11, 19, 41, 46, 46, 23, 46, 3, 53, 57, 11, 16, 5, 25, 52,
        28, 10, 1, 63, 43, 22, 41, 53, 13, 4, 31, 3, 56, 43, 58, 19, 10, 17, 48, 35, 43, 29, 0, 32,
        22, 31, 9, 27, 63, 41, 16, 16, 63, 27, 49, 48, 4, 14, 28, 58, 19, 8, 42, 45, 10, 11, 3, 15,
        10, 41, 45, 23, 24, 21, 35, 57, 22, 57, 54, 26, 26, 26, 31, 18, 31, 7, 44, 5, 44, 21, 56,
        30, 42, 17, 37, 41, 9, 51, 56, 49, 16, 6, 8, 54, 57, 15, 49, 7, 33, 31, 11, 20, 55, 50, 9,
        60, 28, 31, 62, 36, 49, 46, 58, 60, 20, 2, 12, 23, 7, 47, 17, 60, 51, 41, 48, 62, 0, 37,
        29, 14, 56, 24, 17, 9, 32, 10, 17, 17, 17, 59, 27, 55, 16, 34, 24, 55, 39, 57, 57, 15, 39,
        43, 39, 51, 57, 57, 51, 34, 5, 38, 51, 54, 31, 31, 48, 17, 56, 13, 9, 17, 9, 33, 48, 4, 47,
        52, 48, 33, 33, 33, 63, 10, 1, 24, 32, 57, 57, 17, 51, 34, 57, 21, 51, 33, 31, 32,
    ],
    [
        33, 38, 54, 36, 18, 39, 6, 59, 39, 34, 25, 50, 50, 20, 1, 39, 44, 15, 1, 58, 39, 60, 22,
        32, 17, 11, 59, 32, 21, 49, 7, 32, 1, 1, 33, 59, 15, 39, 24, 59, 1, 1, 1, 50, 59, 39, 0, 1,
        45, 12, 27, 59, 44, 39, 50, 59, 5, 33, 25, 25, 36, 25, 1, 25, 7, 59, 61, 38, 63, 49, 14,
        44, 2, 33, 16, 40, 33, 33, 48, 15, 17, 57, 22, 16, 25, 6, 44, 41, 55, 5, 16, 16, 42, 53,
        51, 7, 47, 13, 41, 59, 22, 41, 1, 44, 55, 55, 47, 50, 51, 11, 5, 8, 29, 25, 0, 59, 57, 37,
        44, 33, 22, 33, 40, 26, 52, 7, 51, 7, 59, 48, 28, 57, 28, 21, 9, 4, 62, 8, 62, 46, 22, 37,
        58, 48, 35, 33, 47, 31, 61, 50, 47, 18, 62, 12, 7, 59, 47, 41, 5, 17, 59, 21, 10, 1, 22,
        60, 14, 6, 15, 39, 50, 50, 32, 32, 48, 19, 30, 33, 10, 54, 44, 11, 7, 33, 47, 25, 23, 19,
        35, 33, 57, 51, 57, 22, 48, 10, 22, 61, 22, 50, 44, 10, 41, 35, 12, 2, 48, 10, 53, 9, 48,
        16, 48, 31, 31, 7, 31, 46, 18, 3, 31, 3, 7, 5, 55, 41, 22, 13, 22, 41, 22, 22, 54, 55, 54,
        27, 55, 55, 54, 55, 33, 57, 55, 16, 48, 28, 7, 41, 31, 56, 7, 43, 48, 54, 17, 7,
    ],
];

pub const PC_WIENER_SUB_CLASSIFY_NS: [[[u8; 256]; 7]; 4] = [
    [
        [
            1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0,
            0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1,
            1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
            0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1,
            0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1,
            1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1,
            0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
            1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
        ],
        [
            2, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 2, 0, 2, 0, 2, 0, 2, 2, 2, 0,
            0, 0, 2, 0, 0, 2, 2, 0, 2, 1, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 0, 2,
            2, 0, 2, 2, 0, 0, 0, 2, 0, 2, 0, 0, 2, 2, 0, 2, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 2, 2, 2,
            0, 0, 0, 1, 1, 2, 0, 1, 2, 0, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2,
            0, 2, 2, 2, 0, 2, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1,
            2, 0, 2, 0, 0, 0, 1, 0, 2, 2, 2, 0, 2, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 2, 2, 2,
            0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0,
            2, 2, 0, 0, 2, 0, 2, 2, 1, 2, 2, 0, 0, 0, 2, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 1, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0,
        ],
        [
            1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 3, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0,
            0, 0, 1, 0, 0, 1, 1, 3, 1, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 3, 1, 0, 1,
            1, 3, 1, 1, 0, 0, 0, 1, 0, 1, 3, 0, 1, 1, 3, 1, 2, 2, 1, 1, 0, 3, 0, 0, 0, 2, 1, 1, 1,
            0, 3, 0, 2, 2, 1, 3, 2, 1, 0, 1, 1, 1, 0, 0, 0, 1, 3, 3, 0, 3, 1, 1, 0, 0, 1, 1, 1, 1,
            0, 1, 1, 1, 3, 1, 2, 2, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 2, 0, 0, 1, 0, 2,
            1, 3, 1, 0, 0, 0, 2, 0, 1, 1, 1, 3, 1, 0, 0, 1, 0, 3, 0, 3, 1, 1, 0, 1, 1, 3, 1, 1, 1,
            0, 1, 1, 1, 0, 3, 1, 1, 1, 1, 3, 1, 0, 1, 2, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 1, 1, 3, 0,
            1, 1, 3, 0, 1, 3, 1, 1, 2, 1, 1, 3, 0, 0, 1, 0, 1, 0, 3, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0,
            3, 3, 3, 0, 0, 0, 3, 0, 1, 1, 3, 2, 0, 1, 1, 0, 0, 3, 0, 1, 0, 0, 0, 0,
        ],
        [
            4, 2, 3, 1, 4, 4, 1, 4, 1, 4, 1, 1, 5, 5, 1, 1, 1, 3, 5, 4, 5, 4, 0, 4, 0, 1, 4, 4, 5,
            0, 0, 4, 5, 5, 1, 4, 3, 1, 2, 4, 1, 5, 5, 1, 4, 1, 1, 1, 4, 4, 0, 4, 1, 1, 3, 4, 0, 1,
            1, 3, 4, 1, 5, 5, 0, 4, 5, 4, 3, 0, 1, 1, 3, 1, 2, 2, 1, 4, 0, 3, 0, 5, 5, 2, 4, 1, 1,
            0, 3, 0, 2, 2, 1, 3, 2, 1, 5, 1, 1, 4, 5, 5, 5, 1, 3, 3, 5, 3, 1, 4, 0, 0, 4, 4, 4, 4,
            0, 1, 1, 4, 3, 4, 2, 2, 0, 0, 1, 1, 4, 0, 0, 5, 1, 5, 1, 0, 0, 0, 0, 2, 0, 5, 4, 0, 2,
            1, 3, 1, 5, 5, 5, 2, 0, 4, 1, 1, 3, 1, 0, 0, 4, 0, 3, 5, 3, 4, 1, 0, 1, 1, 3, 1, 4, 4,
            0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 3, 4, 0, 4, 2, 5, 5, 2, 0, 3, 0, 5, 0, 5, 0, 1, 1, 3, 5,
            4, 4, 3, 0, 1, 3, 1, 1, 2, 1, 1, 3, 0, 0, 1, 0, 1, 0, 3, 1, 1, 3, 5, 5, 5, 5, 0, 5, 0,
            3, 3, 3, 0, 0, 0, 3, 0, 4, 4, 3, 2, 0, 1, 1, 5, 5, 3, 0, 4, 0, 0, 0, 0,
        ],
        [
            0, 2, 6, 5, 0, 0, 7, 0, 5, 0, 5, 5, 1, 1, 5, 5, 7, 4, 1, 0, 1, 0, 3, 0, 3, 5, 0, 0, 1,
            3, 3, 0, 1, 1, 5, 0, 4, 5, 2, 0, 5, 1, 1, 5, 0, 7, 5, 5, 0, 0, 3, 0, 7, 5, 4, 0, 3, 5,
            5, 4, 0, 5, 1, 1, 3, 0, 1, 0, 6, 3, 7, 7, 4, 5, 2, 2, 5, 0, 3, 6, 3, 1, 1, 2, 0, 7, 7,
            3, 6, 3, 2, 2, 7, 4, 2, 7, 1, 5, 5, 0, 1, 1, 1, 7, 6, 4, 1, 4, 7, 0, 3, 3, 0, 0, 0, 0,
            3, 7, 7, 0, 4, 0, 2, 2, 3, 3, 7, 7, 0, 3, 3, 1, 7, 1, 7, 3, 3, 3, 3, 2, 3, 1, 0, 3, 2,
            5, 4, 7, 1, 1, 1, 2, 3, 0, 7, 7, 6, 7, 3, 3, 0, 3, 4, 1, 4, 0, 7, 3, 5, 5, 6, 5, 0, 0,
            3, 5, 5, 7, 3, 6, 7, 5, 7, 0, 4, 0, 3, 0, 2, 1, 1, 2, 3, 4, 3, 1, 3, 1, 3, 5, 7, 4, 1,
            0, 0, 4, 3, 7, 6, 7, 7, 2, 7, 7, 6, 3, 3, 7, 3, 7, 3, 4, 7, 7, 6, 1, 1, 1, 1, 3, 1, 3,
            6, 4, 6, 3, 3, 3, 6, 3, 0, 0, 4, 2, 3, 7, 7, 1, 1, 4, 3, 0, 3, 3, 3, 3,
        ],
        [
            9, 2, 6, 5, 9, 9, 11, 9, 5, 9, 5, 5, 10, 1, 5, 5, 7, 4, 1, 9, 10, 9, 8, 9, 3, 5, 9, 9,
            10, 3, 3, 9, 10, 10, 5, 9, 4, 5, 2, 9, 5, 10, 10, 5, 9, 7, 5, 5, 0, 9, 3, 9, 7, 5, 4,
            9, 8, 5, 5, 4, 0, 5, 1, 1, 3, 9, 1, 9, 6, 3, 7, 7, 4, 5, 2, 2, 5, 9, 8, 6, 3, 1, 10, 2,
            9, 7, 7, 8, 6, 8, 2, 2, 11, 4, 2, 11, 1, 5, 5, 9, 1, 1, 1, 7, 6, 4, 10, 4, 11, 9, 8, 8,
            0, 0, 0, 9, 8, 7, 7, 9, 4, 0, 2, 2, 3, 3, 11, 7, 9, 8, 8, 10, 11, 10, 7, 8, 8, 8, 8, 2,
            8, 10, 0, 8, 2, 5, 4, 11, 1, 10, 1, 2, 8, 0, 11, 7, 6, 7, 8, 3, 9, 8, 4, 10, 4, 9, 7,
            3, 5, 5, 6, 5, 9, 9, 8, 5, 5, 11, 8, 6, 7, 5, 11, 9, 4, 0, 3, 0, 2, 10, 10, 2, 8, 4, 8,
            1, 8, 1, 8, 5, 7, 4, 1, 0, 0, 4, 8, 7, 6, 7, 11, 2, 11, 11, 6, 3, 3, 11, 3, 11, 3, 4,
            11, 11, 6, 1, 10, 1, 1, 8, 1, 8, 6, 4, 6, 3, 8, 8, 6, 3, 0, 0, 4, 2, 3, 11, 7, 1, 1, 4,
            3, 9, 3, 3, 3, 3,
        ],
        [
            14, 1, 11, 12, 14, 14, 0, 14, 12, 14, 12, 12, 10, 3, 12, 12, 7, 13, 3, 14, 10, 14, 5,
            14, 2, 12, 14, 14, 10, 2, 2, 14, 10, 10, 12, 14, 13, 12, 1, 14, 12, 10, 10, 12, 14, 7,
            12, 12, 15, 14, 2, 14, 7, 12, 13, 14, 5, 12, 12, 13, 15, 12, 3, 4, 2, 14, 4, 14, 11, 2,
            7, 7, 13, 12, 1, 6, 12, 14, 5, 11, 2, 3, 10, 1, 14, 7, 7, 5, 9, 5, 6, 6, 0, 8, 6, 0, 3,
            12, 12, 14, 3, 4, 4, 7, 11, 13, 10, 13, 0, 14, 5, 5, 15, 15, 15, 14, 5, 7, 7, 14, 13,
            15, 1, 1, 2, 2, 0, 7, 14, 5, 5, 10, 0, 10, 7, 5, 5, 5, 5, 1, 5, 10, 15, 5, 6, 12, 8, 0,
            3, 10, 3, 6, 5, 15, 0, 7, 11, 7, 5, 2, 14, 5, 13, 10, 8, 14, 7, 2, 12, 12, 11, 12, 14,
            14, 5, 12, 12, 0, 5, 9, 7, 12, 0, 14, 8, 15, 2, 15, 6, 10, 10, 6, 5, 8, 5, 4, 5, 3, 5,
            12, 7, 13, 3, 15, 15, 13, 5, 7, 11, 7, 0, 1, 0, 0, 11, 2, 2, 0, 2, 0, 2, 8, 0, 0, 11,
            4, 10, 4, 3, 5, 3, 5, 11, 13, 11, 2, 5, 5, 9, 2, 15, 15, 13, 1, 2, 0, 7, 4, 3, 13, 2,
            14, 2, 2, 2, 2,
        ],
    ],
    [
        [
            1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,
            0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1,
            1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1,
            0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
            1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1,
            0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
            0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
        ],
        [
            1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 2, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,
            0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 1, 0, 1,
            1, 2, 1, 1, 0, 1, 0, 1, 0, 1, 2, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 0, 1, 1, 0, 1,
            0, 2, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 2, 2, 0, 2, 1, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
            1, 2, 0, 0, 1, 0, 1, 0, 1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 2, 1, 1, 1,
            0, 1, 1, 1, 0, 2, 0, 1, 0, 1, 2, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
            2, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
            2, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
        ],
        [
            1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 2, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,
            0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 1, 0, 1,
            1, 2, 1, 1, 0, 1, 0, 1, 0, 1, 2, 0, 0, 1, 0, 1, 3, 1, 1, 1, 0, 2, 0, 0, 0, 3, 1, 0, 1,
            0, 2, 0, 3, 3, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 2, 2, 0, 2, 1, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 1, 1, 0, 1, 3, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
            1, 2, 0, 0, 1, 0, 3, 0, 1, 1, 3, 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 2, 1, 1, 1,
            0, 1, 1, 1, 0, 2, 0, 1, 0, 1, 2, 1, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
            2, 1, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
            2, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
        ],
        [
            5, 2, 2, 5, 1, 5, 1, 1, 5, 5, 5, 5, 2, 5, 5, 5, 1, 4, 2, 1, 5, 5, 0, 1, 0, 5, 5, 1, 5,
            0, 4, 1, 0, 5, 5, 1, 4, 5, 1, 5, 0, 5, 0, 5, 1, 1, 5, 5, 5, 5, 0, 1, 1, 5, 2, 1, 4, 5,
            5, 2, 5, 5, 0, 5, 0, 1, 4, 1, 2, 0, 4, 1, 4, 5, 3, 1, 5, 5, 4, 2, 0, 0, 0, 3, 5, 4, 1,
            4, 2, 4, 3, 3, 0, 0, 1, 1, 0, 5, 5, 5, 4, 0, 5, 4, 2, 2, 0, 2, 1, 5, 4, 0, 5, 4, 1, 5,
            0, 1, 1, 5, 4, 5, 3, 1, 4, 0, 1, 4, 1, 0, 0, 5, 1, 5, 1, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1,
            5, 2, 0, 0, 5, 0, 3, 0, 5, 1, 3, 2, 4, 4, 0, 1, 4, 4, 0, 0, 5, 4, 4, 5, 5, 2, 5, 1, 5,
            4, 5, 5, 1, 4, 2, 4, 5, 0, 5, 2, 5, 0, 5, 3, 5, 0, 4, 0, 0, 0, 1, 0, 4, 0, 5, 4, 4, 0,
            2, 5, 4, 0, 4, 4, 1, 0, 3, 4, 0, 4, 0, 0, 1, 1, 1, 0, 1, 1, 4, 2, 4, 0, 0, 0, 0, 0, 4,
            2, 4, 2, 0, 4, 4, 4, 4, 4, 1, 4, 1, 0, 1, 4, 4, 0, 4, 1, 1, 0, 4, 0, 0,
        ],
        [
            0, 2, 2, 0, 1, 0, 5, 1, 0, 0, 0, 0, 2, 0, 0, 0, 5, 3, 2, 1, 0, 0, 6, 1, 7, 0, 0, 1, 0,
            7, 3, 1, 6, 0, 0, 1, 3, 0, 5, 0, 6, 0, 6, 0, 1, 1, 0, 0, 0, 0, 7, 1, 5, 0, 2, 1, 3, 0,
            0, 2, 0, 0, 6, 0, 7, 1, 3, 1, 2, 7, 3, 5, 3, 0, 4, 5, 0, 0, 3, 2, 7, 6, 6, 4, 0, 3, 5,
            3, 2, 3, 4, 4, 7, 7, 5, 5, 6, 0, 0, 0, 3, 6, 0, 3, 2, 2, 6, 2, 5, 0, 3, 7, 0, 3, 5, 0,
            6, 5, 5, 0, 3, 0, 4, 5, 3, 7, 5, 3, 1, 6, 7, 0, 5, 0, 5, 3, 7, 7, 7, 7, 6, 6, 0, 6, 1,
            0, 2, 7, 6, 0, 6, 4, 7, 0, 5, 4, 2, 3, 3, 7, 1, 3, 3, 6, 6, 0, 3, 3, 0, 0, 2, 0, 1, 0,
            3, 0, 0, 5, 3, 2, 3, 0, 7, 0, 2, 0, 7, 0, 4, 0, 6, 3, 6, 6, 7, 5, 6, 3, 6, 0, 3, 3, 6,
            2, 0, 3, 7, 3, 3, 5, 7, 4, 3, 7, 3, 7, 7, 5, 1, 5, 7, 5, 5, 3, 2, 3, 6, 6, 6, 6, 6, 3,
            2, 3, 2, 7, 3, 3, 3, 3, 3, 5, 3, 5, 7, 5, 3, 3, 7, 3, 5, 5, 7, 3, 7, 7,
        ],
        [
            8, 2, 2, 9, 1, 11, 5, 1, 11, 11, 9, 9, 2, 11, 9, 9, 5, 10, 2, 1, 11, 11, 6, 1, 7, 11,
            8, 1, 11, 7, 3, 1, 6, 11, 9, 1, 10, 11, 5, 11, 6, 11, 6, 9, 1, 1, 11, 11, 0, 11, 7, 1,
            5, 11, 2, 1, 10, 9, 0, 2, 8, 0, 6, 9, 7, 1, 10, 1, 2, 7, 3, 5, 10, 9, 4, 5, 9, 8, 3, 2,
            7, 6, 6, 4, 11, 3, 5, 3, 2, 3, 4, 4, 7, 7, 5, 5, 6, 9, 9, 8, 10, 6, 9, 3, 2, 2, 6, 2,
            5, 0, 3, 7, 0, 3, 5, 8, 6, 5, 5, 8, 3, 8, 4, 5, 3, 7, 5, 3, 1, 6, 7, 11, 5, 11, 5, 10,
            7, 7, 7, 7, 6, 6, 0, 6, 1, 9, 2, 7, 6, 0, 6, 4, 7, 8, 5, 4, 2, 3, 3, 7, 1, 3, 3, 6, 6,
            11, 3, 3, 0, 11, 2, 0, 1, 11, 3, 11, 0, 5, 10, 2, 3, 11, 7, 8, 2, 0, 7, 0, 4, 0, 6, 10,
            6, 6, 7, 5, 6, 10, 6, 9, 3, 3, 6, 2, 11, 10, 7, 3, 3, 5, 7, 4, 3, 7, 3, 7, 7, 5, 1, 5,
            7, 5, 5, 3, 2, 3, 6, 6, 6, 6, 6, 10, 2, 10, 2, 7, 10, 10, 10, 10, 3, 5, 10, 5, 7, 5, 3,
            3, 7, 3, 5, 5, 7, 3, 7, 7,
        ],
        [
            7, 4, 4, 13, 15, 2, 3, 15, 2, 2, 13, 13, 12, 2, 13, 13, 5, 14, 12, 15, 2, 2, 10, 15, 0,
            2, 7, 15, 2, 0, 9, 15, 10, 2, 13, 15, 14, 2, 5, 2, 10, 2, 10, 13, 15, 15, 2, 2, 6, 2,
            0, 15, 5, 2, 12, 15, 14, 13, 6, 12, 7, 6, 10, 13, 0, 15, 14, 15, 4, 0, 1, 5, 14, 13, 8,
            3, 13, 7, 9, 12, 0, 10, 10, 8, 2, 1, 5, 9, 4, 1, 8, 8, 0, 0, 3, 3, 10, 13, 13, 7, 14,
            10, 13, 9, 12, 12, 10, 12, 3, 6, 1, 0, 6, 11, 5, 7, 10, 5, 5, 7, 11, 7, 8, 3, 1, 0, 3,
            1, 15, 10, 0, 2, 3, 2, 5, 14, 0, 0, 0, 0, 10, 10, 6, 10, 15, 13, 4, 0, 10, 6, 10, 8, 0,
            7, 3, 8, 12, 1, 1, 0, 15, 9, 11, 10, 10, 2, 1, 1, 6, 2, 12, 6, 15, 2, 9, 2, 6, 5, 14,
            4, 9, 2, 0, 7, 4, 6, 0, 6, 8, 6, 10, 14, 10, 10, 0, 5, 10, 14, 10, 13, 9, 11, 10, 4, 2,
            14, 0, 9, 9, 5, 0, 8, 9, 0, 9, 0, 0, 5, 15, 5, 0, 5, 3, 1, 4, 9, 10, 10, 10, 10, 10,
            14, 4, 14, 4, 0, 14, 14, 14, 14, 11, 5, 14, 5, 0, 3, 9, 9, 0, 11, 5, 3, 0, 1, 0, 0,
        ],
    ],
    [
        [
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        ],
        [
            2, 2, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2,
            1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1,
            2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
            1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2,
            1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2,
            1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,
            1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        ],
        [
            2, 2, 3, 1, 2, 2, 1, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 3, 3, 1, 2, 2, 3, 2, 3, 2, 1, 1, 2,
            3, 1, 2, 3, 3, 1, 1, 3, 2, 1, 2, 3, 3, 3, 1, 1, 2, 2, 3, 1, 2, 3, 1, 1, 2, 3, 1, 1, 1,
            2, 2, 1, 2, 3, 1, 1, 1, 3, 2, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 3, 1, 3, 3, 1, 2, 1, 1,
            3, 3, 1, 1, 0, 3, 3, 1, 1, 3, 1, 3, 1, 3, 3, 3, 1, 3, 3, 3, 3, 1, 2, 1, 3, 1, 3, 1, 1,
            3, 1, 1, 1, 3, 1, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 3, 2, 3, 1, 3, 2, 1, 3, 2,
            1, 3, 3, 3, 3, 3, 2, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 3, 3, 2, 1, 1, 2, 2, 3, 2, 2, 2,
            1, 2, 2, 1, 1, 3, 3, 2, 3, 1, 3, 2, 3, 2, 0, 3, 3, 0, 3, 3, 3, 1, 3, 3, 3, 2, 1, 1, 3,
            1, 0, 1, 3, 1, 1, 1, 3, 1, 3, 3, 1, 1, 3, 1, 2, 1, 3, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3,
            3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 0, 3, 1, 1, 3, 3, 1, 1, 1, 3, 3, 1, 3,
        ],
        [
            2, 2, 4, 5, 2, 2, 1, 2, 2, 2, 2, 2, 4, 2, 2, 2, 1, 4, 4, 5, 2, 2, 4, 2, 3, 2, 5, 5, 2,
            4, 1, 2, 4, 4, 1, 5, 4, 2, 1, 2, 4, 4, 4, 1, 5, 2, 2, 4, 1, 2, 3, 5, 1, 2, 4, 5, 1, 1,
            2, 2, 5, 2, 4, 5, 1, 5, 4, 2, 4, 3, 1, 1, 4, 4, 5, 5, 1, 5, 1, 4, 1, 4, 4, 5, 2, 1, 1,
            4, 4, 1, 5, 0, 3, 4, 5, 1, 4, 1, 4, 1, 4, 4, 4, 1, 4, 4, 4, 4, 1, 2, 1, 3, 1, 4, 1, 5,
            4, 5, 1, 1, 4, 5, 0, 5, 1, 1, 5, 1, 5, 2, 2, 2, 1, 2, 1, 1, 3, 2, 3, 5, 4, 2, 1, 4, 2,
            1, 4, 3, 4, 4, 4, 2, 3, 5, 1, 5, 4, 1, 4, 1, 5, 1, 1, 4, 4, 2, 1, 1, 2, 2, 4, 2, 2, 2,
            1, 2, 2, 5, 1, 4, 4, 2, 3, 1, 4, 2, 3, 2, 0, 4, 4, 0, 4, 4, 4, 1, 4, 4, 4, 2, 1, 1, 4,
            1, 0, 1, 4, 1, 1, 5, 4, 5, 4, 3, 1, 1, 3, 1, 2, 1, 3, 5, 1, 1, 4, 4, 4, 1, 4, 4, 4, 4,
            4, 4, 4, 3, 4, 4, 4, 4, 4, 1, 4, 0, 4, 1, 1, 4, 3, 1, 1, 5, 3, 4, 1, 4,
        ],
        [
            3, 3, 6, 7, 3, 3, 2, 3, 3, 3, 3, 3, 6, 3, 3, 3, 1, 6, 6, 7, 3, 3, 6, 3, 4, 3, 7, 7, 3,
            6, 2, 3, 6, 6, 1, 7, 6, 3, 2, 3, 6, 6, 6, 1, 7, 3, 3, 6, 0, 3, 4, 7, 1, 3, 6, 7, 2, 1,
            3, 3, 7, 3, 6, 7, 2, 7, 6, 3, 6, 4, 2, 1, 6, 6, 7, 7, 1, 7, 1, 6, 2, 6, 6, 7, 3, 2, 1,
            6, 6, 2, 7, 5, 4, 6, 7, 2, 6, 1, 6, 1, 6, 6, 6, 1, 6, 6, 6, 6, 2, 3, 2, 4, 0, 6, 1, 7,
            6, 7, 1, 1, 6, 7, 5, 7, 2, 2, 7, 2, 7, 3, 3, 3, 2, 3, 2, 2, 4, 3, 4, 7, 6, 3, 0, 6, 3,
            1, 6, 4, 6, 6, 6, 3, 4, 7, 2, 7, 6, 2, 6, 2, 7, 1, 2, 6, 6, 3, 2, 2, 3, 3, 6, 3, 3, 3,
            1, 3, 3, 7, 2, 6, 6, 3, 4, 1, 6, 3, 4, 3, 5, 6, 6, 5, 6, 6, 6, 1, 6, 6, 6, 3, 1, 2, 6,
            0, 5, 2, 6, 2, 2, 7, 6, 7, 6, 4, 2, 2, 4, 0, 3, 0, 4, 7, 2, 2, 6, 6, 6, 1, 6, 6, 6, 6,
            6, 6, 6, 4, 6, 6, 6, 6, 6, 1, 6, 5, 6, 2, 2, 6, 4, 0, 2, 7, 4, 6, 2, 6,
        ],
        [
            10, 3, 8, 7, 3, 3, 11, 3, 3, 3, 10, 10, 8, 3, 10, 10, 1, 9, 9, 7, 3, 3, 8, 3, 4, 3, 7,
            7, 3, 6, 11, 3, 6, 6, 1, 7, 9, 3, 2, 10, 9, 6, 8, 1, 7, 3, 3, 6, 0, 3, 4, 7, 1, 3, 9,
            7, 11, 1, 10, 10, 7, 10, 6, 7, 11, 7, 6, 3, 8, 4, 2, 1, 9, 9, 7, 7, 1, 7, 1, 9, 11, 6,
            6, 7, 3, 11, 1, 6, 8, 2, 7, 5, 4, 6, 7, 11, 8, 1, 9, 1, 6, 6, 9, 1, 8, 8, 9, 9, 2, 3,
            11, 4, 0, 9, 1, 7, 6, 7, 1, 1, 9, 7, 5, 7, 2, 11, 7, 11, 7, 10, 10, 10, 11, 3, 11, 11,
            4, 3, 4, 7, 6, 10, 0, 6, 10, 1, 8, 4, 6, 8, 6, 3, 4, 7, 11, 7, 8, 11, 8, 11, 7, 1, 11,
            6, 8, 3, 2, 11, 10, 3, 8, 10, 3, 3, 1, 3, 10, 7, 11, 8, 6, 3, 4, 1, 8, 10, 4, 10, 5, 9,
            6, 5, 6, 8, 6, 1, 6, 6, 6, 10, 1, 11, 6, 0, 5, 11, 6, 11, 11, 7, 6, 7, 6, 4, 11, 11, 4,
            0, 3, 0, 4, 7, 11, 11, 8, 6, 6, 1, 8, 6, 8, 8, 8, 9, 8, 4, 8, 8, 8, 8, 9, 1, 9, 5, 6,
            11, 11, 6, 4, 0, 11, 7, 4, 8, 11, 6,
        ],
        [
            6, 0, 9, 1, 0, 7, 10, 0, 7, 7, 6, 6, 9, 7, 6, 6, 12, 14, 14, 1, 7, 7, 9, 0, 15, 0, 1,
            1, 7, 13, 10, 0, 13, 13, 12, 1, 14, 7, 8, 6, 14, 13, 9, 12, 1, 7, 7, 13, 5, 0, 15, 1,
            12, 0, 14, 1, 10, 12, 6, 6, 1, 6, 13, 1, 10, 1, 13, 7, 9, 15, 8, 12, 14, 14, 11, 11,
            12, 1, 12, 14, 10, 13, 13, 11, 0, 10, 12, 13, 9, 8, 11, 4, 15, 13, 11, 10, 9, 12, 14,
            12, 13, 13, 14, 12, 9, 9, 14, 14, 8, 0, 10, 2, 5, 14, 12, 1, 13, 1, 12, 12, 14, 1, 3,
            11, 8, 10, 11, 10, 1, 6, 6, 6, 10, 7, 10, 10, 2, 7, 2, 11, 13, 6, 5, 13, 6, 12, 9, 15,
            13, 9, 13, 0, 2, 1, 10, 1, 9, 10, 9, 10, 1, 12, 10, 13, 9, 0, 8, 10, 6, 7, 9, 6, 0, 0,
            12, 0, 6, 1, 10, 9, 13, 0, 15, 12, 9, 6, 15, 6, 4, 14, 13, 3, 13, 9, 13, 12, 13, 13,
            13, 6, 12, 10, 13, 5, 3, 10, 13, 10, 10, 1, 13, 11, 13, 15, 10, 10, 15, 5, 7, 5, 15, 1,
            10, 10, 9, 13, 13, 12, 9, 13, 9, 9, 9, 14, 9, 15, 9, 9, 9, 9, 14, 12, 14, 3, 13, 10,
            10, 13, 15, 5, 10, 11, 15, 9, 10, 13,
        ],
    ],
    [
        [
            1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
            1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0,
            1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
        ],
        [
            1, 2, 1, 1, 0, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
            1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 2, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 0, 1, 1, 1, 1, 0,
            1, 1, 1, 1, 1, 1, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            0, 2, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
        ],
        [
            1, 2, 1, 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1,
            1, 1, 1, 3, 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 2, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 3, 3, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 2, 0, 1, 1, 1, 1, 0,
            1, 1, 1, 1, 1, 1, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            0, 2, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 0, 3, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1,
        ],
        [
            4, 5, 1, 1, 3, 1, 4, 4, 1, 2, 1, 1, 1, 5, 1, 1, 4, 1, 1, 4, 1, 5, 1, 4, 1, 5, 4, 4, 1,
            1, 1, 4, 1, 1, 4, 4, 1, 1, 0, 4, 1, 1, 1, 1, 4, 1, 4, 1, 5, 5, 0, 4, 4, 1, 1, 4, 4, 4,
            1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1, 1, 0, 4, 1, 4, 3, 3, 4, 4, 1, 1, 1, 1, 1, 3, 1, 4, 4,
            1, 1, 4, 3, 3, 3, 1, 0, 1, 1, 1, 1, 4, 1, 1, 1, 4, 1, 1, 1, 1, 0, 5, 4, 2, 4, 1, 4, 4,
            1, 1, 4, 4, 1, 4, 3, 3, 0, 1, 0, 1, 4, 1, 4, 1, 4, 1, 3, 1, 2, 2, 2, 0, 1, 1, 4, 1, 0,
            4, 1, 1, 1, 1, 1, 3, 2, 5, 1, 4, 1, 1, 4, 1, 4, 1, 1, 1, 1, 5, 0, 4, 1, 1, 1, 1, 4, 4,
            1, 4, 1, 4, 1, 1, 4, 5, 1, 4, 1, 1, 3, 4, 0, 4, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1,
            0, 5, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 0, 3, 0, 1, 0, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1,
            1, 1, 1, 0, 1, 1, 1, 1, 4, 1, 1, 3, 1, 4, 1, 1, 1, 4, 1, 3, 1, 1, 1, 1,
        ],
        [
            1, 5, 7, 7, 6, 7, 1, 1, 7, 2, 7, 7, 7, 5, 7, 7, 1, 7, 7, 1, 7, 5, 7, 1, 7, 5, 1, 1, 7,
            7, 7, 1, 7, 7, 1, 1, 7, 7, 3, 1, 7, 7, 7, 7, 1, 7, 1, 7, 5, 5, 3, 1, 1, 7, 7, 1, 1, 1,
            7, 7, 7, 7, 7, 7, 7, 1, 7, 5, 7, 7, 3, 1, 7, 1, 6, 4, 1, 1, 7, 7, 7, 7, 7, 6, 7, 1, 1,
            7, 7, 1, 6, 6, 6, 7, 3, 7, 7, 7, 7, 1, 7, 7, 7, 1, 7, 7, 7, 7, 3, 5, 1, 2, 1, 7, 1, 1,
            7, 7, 1, 1, 7, 1, 4, 6, 3, 7, 3, 7, 1, 7, 1, 7, 1, 7, 6, 7, 2, 2, 2, 3, 7, 7, 1, 7, 0,
            1, 7, 7, 7, 7, 7, 6, 2, 5, 7, 1, 7, 7, 1, 7, 1, 7, 7, 7, 7, 5, 3, 1, 7, 7, 7, 7, 1, 1,
            7, 1, 7, 1, 7, 7, 1, 5, 7, 1, 7, 7, 6, 1, 0, 1, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 1, 7, 7,
            0, 5, 7, 7, 7, 7, 6, 7, 6, 7, 7, 7, 7, 7, 3, 6, 0, 7, 0, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7,
            7, 7, 7, 3, 7, 7, 7, 7, 1, 7, 7, 6, 7, 1, 7, 7, 7, 1, 7, 6, 7, 7, 7, 7,
        ],
        [
            10, 5, 8, 9, 6, 9, 1, 10, 9, 2, 9, 9, 9, 5, 9, 9, 10, 11, 9, 1, 9, 5, 8, 1, 7, 5, 10,
            1, 9, 7, 7, 1, 9, 9, 10, 10, 11, 9, 3, 10, 9, 9, 9, 9, 10, 9, 10, 9, 5, 5, 3, 10, 10,
            9, 9, 10, 1, 10, 9, 9, 9, 9, 9, 9, 7, 10, 11, 5, 11, 7, 3, 10, 11, 10, 6, 4, 10, 10, 7,
            11, 7, 9, 8, 6, 9, 1, 10, 8, 8, 1, 6, 6, 6, 8, 3, 7, 8, 11, 8, 10, 8, 8, 9, 10, 8, 8,
            8, 9, 3, 5, 1, 2, 1, 9, 10, 10, 9, 7, 10, 10, 8, 10, 4, 6, 3, 7, 3, 7, 10, 7, 10, 9,
            10, 9, 6, 11, 2, 2, 2, 3, 8, 7, 1, 7, 0, 10, 8, 7, 11, 9, 8, 6, 2, 5, 7, 10, 8, 8, 1,
            7, 10, 9, 11, 9, 8, 5, 3, 1, 11, 9, 9, 9, 1, 1, 7, 1, 8, 10, 11, 8, 10, 5, 7, 10, 8, 9,
            6, 1, 0, 10, 9, 3, 9, 8, 7, 11, 8, 11, 8, 9, 10, 11, 8, 0, 5, 11, 7, 11, 8, 6, 7, 6, 7,
            7, 7, 7, 7, 3, 6, 0, 7, 0, 7, 1, 8, 8, 8, 11, 8, 8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 10,
            9, 8, 6, 7, 10, 7, 8, 7, 1, 7, 6, 7, 8, 7, 7,
        ],
        [
            9, 2, 13, 8, 1, 8, 4, 9, 8, 6, 8, 8, 8, 2, 8, 8, 9, 14, 8, 10, 8, 2, 13, 10, 7, 12, 9,
            10, 8, 7, 7, 10, 8, 8, 9, 9, 14, 8, 11, 9, 8, 8, 8, 8, 9, 8, 9, 8, 12, 12, 5, 9, 9, 8,
            8, 9, 4, 9, 8, 8, 8, 8, 8, 8, 7, 9, 14, 2, 14, 7, 5, 9, 14, 9, 1, 3, 9, 9, 7, 14, 7, 8,
            13, 1, 8, 4, 9, 13, 13, 4, 1, 1, 0, 13, 11, 7, 13, 14, 13, 9, 13, 13, 8, 9, 13, 13, 13,
            8, 11, 12, 4, 6, 10, 8, 9, 9, 8, 7, 9, 9, 13, 9, 3, 1, 5, 7, 11, 7, 9, 7, 9, 8, 9, 8,
            1, 14, 6, 6, 6, 11, 13, 7, 10, 7, 15, 9, 13, 7, 14, 8, 13, 1, 6, 12, 7, 9, 13, 13, 4,
            7, 9, 8, 14, 8, 13, 2, 5, 4, 14, 8, 8, 8, 10, 10, 7, 10, 13, 9, 14, 13, 9, 12, 7, 9,
            13, 8, 0, 10, 15, 9, 8, 11, 8, 13, 7, 14, 13, 14, 13, 8, 9, 14, 13, 15, 12, 14, 7, 14,
            13, 1, 7, 1, 7, 7, 7, 7, 7, 11, 1, 15, 7, 15, 7, 4, 13, 13, 13, 14, 13, 13, 13, 13, 13,
            13, 13, 5, 13, 13, 13, 13, 9, 8, 13, 1, 7, 9, 7, 13, 7, 4, 7, 1, 7, 13, 7, 7,
        ],
    ],
];

pub const MC_WARP_FILTER: [[i8; 8]; 449] = [
    [127, 1, 0, 0, 0, 0, 0, 0],
    [126, 2, 0, 0, 0, 0, 0, 0],
    [124, 4, 0, 0, 0, 0, 0, 0],
    [122, 6, 0, 0, 0, 0, 0, 0],
    [120, 8, 0, 0, 0, 0, 0, 0],
    [118, 10, 0, 0, 0, 0, 0, 0],
    [116, 12, 0, 0, 0, 0, 0, 0],
    [114, 14, 0, 0, 0, 0, 0, 0],
    [112, 16, 0, 0, 0, 0, 0, 0],
    [110, 18, 0, 0, 0, 0, 0, 0],
    [108, 20, 0, 0, 0, 0, 0, 0],
    [106, 22, 0, 0, 0, 0, 0, 0],
    [104, 24, 0, 0, 0, 0, 0, 0],
    [102, 26, 0, 0, 0, 0, 0, 0],
    [100, 28, 0, 0, 0, 0, 0, 0],
    [98, 30, 0, 0, 0, 0, 0, 0],
    [96, 32, 0, 0, 0, 0, 0, 0],
    [94, 34, 0, 0, 0, 0, 0, 0],
    [92, 36, 0, 0, 0, 0, 0, 0],
    [90, 38, 0, 0, 0, 0, 0, 0],
    [88, 40, 0, 0, 0, 0, 0, 0],
    [86, 42, 0, 0, 0, 0, 0, 0],
    [84, 44, 0, 0, 0, 0, 0, 0],
    [82, 46, 0, 0, 0, 0, 0, 0],
    [80, 48, 0, 0, 0, 0, 0, 0],
    [78, 50, 0, 0, 0, 0, 0, 0],
    [76, 52, 0, 0, 0, 0, 0, 0],
    [74, 54, 0, 0, 0, 0, 0, 0],
    [72, 56, 0, 0, 0, 0, 0, 0],
    [70, 58, 0, 0, 0, 0, 0, 0],
    [68, 60, 0, 0, 0, 0, 0, 0],
    [66, 62, 0, 0, 0, 0, 0, 0],
    [64, 64, 0, 0, 0, 0, 0, 0],
    [62, 66, 0, 0, 0, 0, 0, 0],
    [60, 68, 0, 0, 0, 0, 0, 0],
    [58, 70, 0, 0, 0, 0, 0, 0],
    [56, 72, 0, 0, 0, 0, 0, 0],
    [54, 74, 0, 0, 0, 0, 0, 0],
    [52, 76, 0, 0, 0, 0, 0, 0],
    [50, 78, 0, 0, 0, 0, 0, 0],
    [48, 80, 0, 0, 0, 0, 0, 0],
    [46, 82, 0, 0, 0, 0, 0, 0],
    [44, 84, 0, 0, 0, 0, 0, 0],
    [42, 86, 0, 0, 0, 0, 0, 0],
    [40, 88, 0, 0, 0, 0, 0, 0],
    [38, 90, 0, 0, 0, 0, 0, 0],
    [36, 92, 0, 0, 0, 0, 0, 0],
    [34, 94, 0, 0, 0, 0, 0, 0],
    [32, 96, 0, 0, 0, 0, 0, 0],
    [30, 98, 0, 0, 0, 0, 0, 0],
    [28, 100, 0, 0, 0, 0, 0, 0],
    [26, 102, 0, 0, 0, 0, 0, 0],
    [24, 104, 0, 0, 0, 0, 0, 0],
    [22, 106, 0, 0, 0, 0, 0, 0],
    [20, 108, 0, 0, 0, 0, 0, 0],
    [18, 110, 0, 0, 0, 0, 0, 0],
    [16, 112, 0, 0, 0, 0, 0, 0],
    [14, 114, 0, 0, 0, 0, 0, 0],
    [12, 116, 0, 0, 0, 0, 0, 0],
    [10, 118, 0, 0, 0, 0, 0, 0],
    [8, 120, 0, 0, 0, 0, 0, 0],
    [6, 122, 0, 0, 0, 0, 0, 0],
    [4, 124, 0, 0, 0, 0, 0, 0],
    [2, 126, 0, 0, 0, 0, 0, 0],
    [0, 127, 1, 0, 0, 0, 0, 0],
    [-1, 127, 2, 0, 0, 0, 0, 0],
    [-2, 127, 4, -1, 0, 0, 0, 0],
    [-3, 126, 6, -1, 0, 0, 0, 0],
    [-3, 125, 8, -2, 0, 0, 0, 0],
    [-4, 124, 11, -3, 0, 0, 0, 0],
    [-5, 123, 13, -3, 0, 0, 0, 0],
    [-5, 121, 15, -3, 0, 0, 0, 0],
    [-6, 120, 18, -4, 0, 0, 0, 0],
    [-7, 119, 20, -4, 0, 0, 0, 0],
    [-7, 118, 22, -5, 0, 0, 0, 0],
    [-8, 116, 25, -5, 0, 0, 0, 0],
    [-8, 115, 27, -6, 0, 0, 0, 0],
    [-9, 113, 30, -6, 0, 0, 0, 0],
    [-9, 112, 32, -7, 0, 0, 0, 0],
    [-9, 110, 34, -7, 0, 0, 0, 0],
    [-10, 108, 37, -7, 0, 0, 0, 0],
    [-10, 107, 39, -8, 0, 0, 0, 0],
    [-10, 105, 41, -8, 0, 0, 0, 0],
    [-11, 103, 44, -8, 0, 0, 0, 0],
    [-11, 101, 47, -9, 0, 0, 0, 0],
    [-11, 99, 49, -9, 0, 0, 0, 0],
    [-11, 97, 51, -9, 0, 0, 0, 0],
    [-11, 95, 54, -10, 0, 0, 0, 0],
    [-11, 93, 56, -10, 0, 0, 0, 0],
    [-12, 91, 59, -10, 0, 0, 0, 0],
    [-12, 89, 61, -10, 0, 0, 0, 0],
    [-12, 87, 64, -11, 0, 0, 0, 0],
    [-12, 85, 66, -11, 0, 0, 0, 0],
    [-12, 82, 69, -11, 0, 0, 0, 0],
    [-12, 80, 71, -11, 0, 0, 0, 0],
    [-12, 78, 73, -11, 0, 0, 0, 0],
    [-11, 75, 75, -11, 0, 0, 0, 0],
    [-11, 73, 78, -12, 0, 0, 0, 0],
    [-11, 71, 80, -12, 0, 0, 0, 0],
    [-11, 69, 82, -12, 0, 0, 0, 0],
    [-11, 66, 85, -12, 0, 0, 0, 0],
    [-11, 64, 87, -12, 0, 0, 0, 0],
    [-10, 61, 89, -12, 0, 0, 0, 0],
    [-10, 59, 91, -12, 0, 0, 0, 0],
    [-10, 56, 93, -11, 0, 0, 0, 0],
    [-10, 54, 95, -11, 0, 0, 0, 0],
    [-9, 51, 97, -11, 0, 0, 0, 0],
    [-9, 49, 99, -11, 0, 0, 0, 0],
    [-9, 47, 101, -11, 0, 0, 0, 0],
    [-8, 44, 103, -11, 0, 0, 0, 0],
    [-8, 41, 105, -10, 0, 0, 0, 0],
    [-8, 39, 107, -10, 0, 0, 0, 0],
    [-7, 37, 108, -10, 0, 0, 0, 0],
    [-7, 34, 110, -9, 0, 0, 0, 0],
    [-7, 32, 112, -9, 0, 0, 0, 0],
    [-6, 30, 113, -9, 0, 0, 0, 0],
    [-6, 27, 115, -8, 0, 0, 0, 0],
    [-5, 25, 116, -8, 0, 0, 0, 0],
    [-5, 22, 118, -7, 0, 0, 0, 0],
    [-4, 20, 119, -7, 0, 0, 0, 0],
    [-4, 18, 120, -6, 0, 0, 0, 0],
    [-3, 15, 121, -5, 0, 0, 0, 0],
    [-3, 13, 123, -5, 0, 0, 0, 0],
    [-3, 11, 124, -4, 0, 0, 0, 0],
    [-2, 8, 125, -3, 0, 0, 0, 0],
    [-1, 6, 126, -3, 0, 0, 0, 0],
    [-1, 4, 127, -2, 0, 0, 0, 0],
    [0, 2, 127, -1, 0, 0, 0, 0],
    [0, 0, 127, 1, 0, 0, 0, 0],
    [0, -1, 127, 2, 0, 0, 0, 0],
    [1, -3, 127, 4, -1, 0, 0, 0],
    [1, -4, 126, 6, -2, 1, 0, 0],
    [1, -5, 126, 8, -3, 1, 0, 0],
    [1, -6, 125, 11, -4, 1, 0, 0],
    [1, -7, 124, 13, -4, 1, 0, 0],
    [2, -8, 123, 15, -5, 1, 0, 0],
    [2, -9, 122, 18, -6, 1, 0, 0],
    [2, -10, 121, 20, -6, 1, 0, 0],
    [2, -11, 120, 22, -7, 2, 0, 0],
    [2, -12, 119, 25, -8, 2, 0, 0],
    [3, -13, 117, 27, -8, 2, 0, 0],
    [3, -13, 116, 29, -9, 2, 0, 0],
    [3, -14, 114, 32, -10, 3, 0, 0],
    [3, -15, 113, 35, -10, 2, 0, 0],
    [3, -15, 111, 37, -11, 3, 0, 0],
    [3, -16, 109, 40, -11, 3, 0, 0],
    [3, -16, 108, 42, -12, 3, 0, 0],
    [4, -17, 106, 45, -13, 3, 0, 0],
    [4, -17, 104, 47, -13, 3, 0, 0],
    [4, -17, 102, 50, -14, 3, 0, 0],
    [4, -17, 100, 52, -14, 3, 0, 0],
    [4, -18, 98, 55, -15, 4, 0, 0],
    [4, -18, 96, 58, -15, 3, 0, 0],
    [4, -18, 94, 60, -16, 4, 0, 0],
    [4, -18, 91, 63, -16, 4, 0, 0],
    [4, -18, 89, 65, -16, 4, 0, 0],
    [4, -18, 87, 68, -17, 4, 0, 0],
    [4, -18, 85, 70, -17, 4, 0, 0],
    [4, -18, 82, 73, -17, 4, 0, 0],
    [4, -18, 80, 75, -17, 4, 0, 0],
    [4, -18, 78, 78, -18, 4, 0, 0],
    [4, -17, 75, 80, -18, 4, 0, 0],
    [4, -17, 73, 82, -18, 4, 0, 0],
    [4, -17, 70, 85, -18, 4, 0, 0],
    [4, -17, 68, 87, -18, 4, 0, 0],
    [4, -16, 65, 89, -18, 4, 0, 0],
    [4, -16, 63, 91, -18, 4, 0, 0],
    [4, -16, 60, 94, -18, 4, 0, 0],
    [3, -15, 58, 96, -18, 4, 0, 0],
    [4, -15, 55, 98, -18, 4, 0, 0],
    [3, -14, 52, 100, -17, 4, 0, 0],
    [3, -14, 50, 102, -17, 4, 0, 0],
    [3, -13, 47, 104, -17, 4, 0, 0],
    [3, -13, 45, 106, -17, 4, 0, 0],
    [3, -12, 42, 108, -16, 3, 0, 0],
    [3, -11, 40, 109, -16, 3, 0, 0],
    [3, -11, 37, 111, -15, 3, 0, 0],
    [2, -10, 35, 113, -15, 3, 0, 0],
    [3, -10, 32, 114, -14, 3, 0, 0],
    [2, -9, 29, 116, -13, 3, 0, 0],
    [2, -8, 27, 117, -13, 3, 0, 0],
    [2, -8, 25, 119, -12, 2, 0, 0],
    [2, -7, 22, 120, -11, 2, 0, 0],
    [1, -6, 20, 121, -10, 2, 0, 0],
    [1, -6, 18, 122, -9, 2, 0, 0],
    [1, -5, 15, 123, -8, 2, 0, 0],
    [1, -4, 13, 124, -7, 1, 0, 0],
    [1, -4, 11, 125, -6, 1, 0, 0],
    [1, -3, 8, 126, -5, 1, 0, 0],
    [1, -2, 6, 126, -4, 1, 0, 0],
    [0, -1, 4, 127, -3, 1, 0, 0],
    [0, 0, 2, 127, -1, 0, 0, 0],
    [0, 0, 0, 127, 1, 0, 0, 0],
    [0, 0, -1, 127, 2, 0, 0, 0],
    [0, 1, -3, 127, 4, -2, 1, 0],
    [0, 1, -5, 127, 6, -2, 1, 0],
    [0, 2, -6, 126, 8, -3, 1, 0],
    [-1, 2, -7, 126, 11, -4, 2, -1],
    [-1, 3, -8, 125, 13, -5, 2, -1],
    [-1, 3, -10, 124, 16, -6, 3, -1],
    [-1, 4, -11, 123, 18, -7, 3, -1],
    [-1, 4, -12, 122, 20, -7, 3, -1],
    [-1, 4, -13, 121, 23, -8, 3, -1],
    [-2, 5, -14, 120, 25, -9, 4, -1],
    [-1, 5, -15, 119, 27, -10, 4, -1],
    [-1, 5, -16, 118, 30, -11, 4, -1],
    [-2, 6, -17, 116, 33, -12, 5, -1],
    [-2, 6, -17, 114, 35, -12, 5, -1],
    [-2, 6, -18, 113, 38, -13, 5, -1],
    [-2, 7, -19, 111, 41, -14, 6, -2],
    [-2, 7, -19, 110, 43, -15, 6, -2],
    [-2, 7, -20, 108, 46, -15, 6, -2],
    [-2, 7, -20, 106, 49, -16, 6, -2],
    [-2, 7, -21, 104, 51, -16, 7, -2],
    [-2, 7, -21, 102, 54, -17, 7, -2],
    [-2, 8, -21, 100, 56, -18, 7, -2],
    [-2, 8, -22, 98, 59, -18, 7, -2],
    [-2, 8, -22, 96, 62, -19, 7, -2],
    [-2, 8, -22, 94, 64, -19, 7, -2],
    [-2, 8, -22, 91, 67, -20, 8, -2],
    [-2, 8, -22, 89, 69, -20, 8, -2],
    [-2, 8, -22, 87, 72, -21, 8, -2],
    [-2, 8, -21, 84, 74, -21, 8, -2],
    [-2, 8, -22, 82, 77, -21, 8, -2],
    [-2, 8, -21, 79, 79, -21, 8, -2],
    [-2, 8, -21, 77, 82, -22, 8, -2],
    [-2, 8, -21, 74, 84, -21, 8, -2],
    [-2, 8, -21, 72, 87, -22, 8, -2],
    [-2, 8, -20, 69, 89, -22, 8, -2],
    [-2, 8, -20, 67, 91, -22, 8, -2],
    [-2, 7, -19, 64, 94, -22, 8, -2],
    [-2, 7, -19, 62, 96, -22, 8, -2],
    [-2, 7, -18, 59, 98, -22, 8, -2],
    [-2, 7, -18, 56, 100, -21, 8, -2],
    [-2, 7, -17, 54, 102, -21, 7, -2],
    [-2, 7, -16, 51, 104, -21, 7, -2],
    [-2, 6, -16, 49, 106, -20, 7, -2],
    [-2, 6, -15, 46, 108, -20, 7, -2],
    [-2, 6, -15, 43, 110, -19, 7, -2],
    [-2, 6, -14, 41, 111, -19, 7, -2],
    [-1, 5, -13, 38, 113, -18, 6, -2],
    [-1, 5, -12, 35, 114, -17, 6, -2],
    [-1, 5, -12, 33, 116, -17, 6, -2],
    [-1, 4, -11, 30, 118, -16, 5, -1],
    [-1, 4, -10, 27, 119, -15, 5, -1],
    [-1, 4, -9, 25, 120, -14, 5, -2],
    [-1, 3, -8, 23, 121, -13, 4, -1],
    [-1, 3, -7, 20, 122, -12, 4, -1],
    [-1, 3, -7, 18, 123, -11, 4, -1],
    [-1, 3, -6, 16, 124, -10, 3, -1],
    [-1, 2, -5, 13, 125, -8, 3, -1],
    [-1, 2, -4, 11, 126, -7, 2, -1],
    [0, 1, -3, 8, 126, -6, 2, 0],
    [0, 1, -2, 6, 127, -5, 1, 0],
    [0, 1, -2, 4, 127, -3, 1, 0],
    [0, 0, 0, 2, 127, -1, 0, 0],
    [0, 0, 0, 1, 127, 0, 0, 0],
    [0, 0, 0, -1, 127, 2, 0, 0],
    [0, 0, 1, -3, 127, 4, -1, 0],
    [0, 0, 1, -4, 126, 6, -2, 1],
    [0, 0, 1, -5, 126, 8, -3, 1],
    [0, 0, 1, -6, 125, 11, -4, 1],
    [0, 0, 1, -7, 124, 13, -4, 1],
    [0, 0, 2, -8, 123, 15, -5, 1],
    [0, 0, 2, -9, 122, 18, -6, 1],
    [0, 0, 2, -10, 121, 20, -6, 1],
    [0, 0, 2, -11, 120, 22, -7, 2],
    [0, 0, 2, -12, 119, 25, -8, 2],
    [0, 0, 3, -13, 117, 27, -8, 2],
    [0, 0, 3, -13, 116, 29, -9, 2],
    [0, 0, 3, -14, 114, 32, -10, 3],
    [0, 0, 3, -15, 113, 35, -10, 2],
    [0, 0, 3, -15, 111, 37, -11, 3],
    [0, 0, 3, -16, 109, 40, -11, 3],
    [0, 0, 3, -16, 108, 42, -12, 3],
    [0, 0, 4, -17, 106, 45, -13, 3],
    [0, 0, 4, -17, 104, 47, -13, 3],
    [0, 0, 4, -17, 102, 50, -14, 3],
    [0, 0, 4, -17, 100, 52, -14, 3],
    [0, 0, 4, -18, 98, 55, -15, 4],
    [0, 0, 4, -18, 96, 58, -15, 3],
    [0, 0, 4, -18, 94, 60, -16, 4],
    [0, 0, 4, -18, 91, 63, -16, 4],
    [0, 0, 4, -18, 89, 65, -16, 4],
    [0, 0, 4, -18, 87, 68, -17, 4],
    [0, 0, 4, -18, 85, 70, -17, 4],
    [0, 0, 4, -18, 82, 73, -17, 4],
    [0, 0, 4, -18, 80, 75, -17, 4],
    [0, 0, 4, -18, 78, 78, -18, 4],
    [0, 0, 4, -17, 75, 80, -18, 4],
    [0, 0, 4, -17, 73, 82, -18, 4],
    [0, 0, 4, -17, 70, 85, -18, 4],
    [0, 0, 4, -17, 68, 87, -18, 4],
    [0, 0, 4, -16, 65, 89, -18, 4],
    [0, 0, 4, -16, 63, 91, -18, 4],
    [0, 0, 4, -16, 60, 94, -18, 4],
    [0, 0, 3, -15, 58, 96, -18, 4],
    [0, 0, 4, -15, 55, 98, -18, 4],
    [0, 0, 3, -14, 52, 100, -17, 4],
    [0, 0, 3, -14, 50, 102, -17, 4],
    [0, 0, 3, -13, 47, 104, -17, 4],
    [0, 0, 3, -13, 45, 106, -17, 4],
    [0, 0, 3, -12, 42, 108, -16, 3],
    [0, 0, 3, -11, 40, 109, -16, 3],
    [0, 0, 3, -11, 37, 111, -15, 3],
    [0, 0, 2, -10, 35, 113, -15, 3],
    [0, 0, 3, -10, 32, 114, -14, 3],
    [0, 0, 2, -9, 29, 116, -13, 3],
    [0, 0, 2, -8, 27, 117, -13, 3],
    [0, 0, 2, -8, 25, 119, -12, 2],
    [0, 0, 2, -7, 22, 120, -11, 2],
    [0, 0, 1, -6, 20, 121, -10, 2],
    [0, 0, 1, -6, 18, 122, -9, 2],
    [0, 0, 1, -5, 15, 123, -8, 2],
    [0, 0, 1, -4, 13, 124, -7, 1],
    [0, 0, 1, -4, 11, 125, -6, 1],
    [0, 0, 1, -3, 8, 126, -5, 1],
    [0, 0, 1, -2, 6, 126, -4, 1],
    [0, 0, 0, -1, 4, 127, -3, 1],
    [0, 0, 0, 0, 2, 127, -1, 0],
    [0, 0, 0, 0, 0, 127, 1, 0],
    [0, 0, 0, 0, -1, 127, 2, 0],
    [0, 0, 0, 0, -2, 127, 4, -1],
    [0, 0, 0, 0, -3, 126, 6, -1],
    [0, 0, 0, 0, -3, 125, 8, -2],
    [0, 0, 0, 0, -4, 124, 11, -3],
    [0, 0, 0, 0, -5, 123, 13, -3],
    [0, 0, 0, 0, -5, 121, 15, -3],
    [0, 0, 0, 0, -6, 120, 18, -4],
    [0, 0, 0, 0, -7, 119, 20, -4],
    [0, 0, 0, 0, -7, 118, 22, -5],
    [0, 0, 0, 0, -8, 116, 25, -5],
    [0, 0, 0, 0, -8, 115, 27, -6],
    [0, 0, 0, 0, -9, 113, 30, -6],
    [0, 0, 0, 0, -9, 112, 32, -7],
    [0, 0, 0, 0, -9, 110, 34, -7],
    [0, 0, 0, 0, -10, 108, 37, -7],
    [0, 0, 0, 0, -10, 107, 39, -8],
    [0, 0, 0, 0, -10, 105, 41, -8],
    [0, 0, 0, 0, -11, 103, 44, -8],
    [0, 0, 0, 0, -11, 101, 47, -9],
    [0, 0, 0, 0, -11, 99, 49, -9],
    [0, 0, 0, 0, -11, 97, 51, -9],
    [0, 0, 0, 0, -11, 95, 54, -10],
    [0, 0, 0, 0, -11, 93, 56, -10],
    [0, 0, 0, 0, -12, 91, 59, -10],
    [0, 0, 0, 0, -12, 89, 61, -10],
    [0, 0, 0, 0, -12, 87, 64, -11],
    [0, 0, 0, 0, -12, 85, 66, -11],
    [0, 0, 0, 0, -12, 82, 69, -11],
    [0, 0, 0, 0, -12, 80, 71, -11],
    [0, 0, 0, 0, -12, 78, 73, -11],
    [0, 0, 0, 0, -11, 75, 75, -11],
    [0, 0, 0, 0, -11, 73, 78, -12],
    [0, 0, 0, 0, -11, 71, 80, -12],
    [0, 0, 0, 0, -11, 69, 82, -12],
    [0, 0, 0, 0, -11, 66, 85, -12],
    [0, 0, 0, 0, -11, 64, 87, -12],
    [0, 0, 0, 0, -10, 61, 89, -12],
    [0, 0, 0, 0, -10, 59, 91, -12],
    [0, 0, 0, 0, -10, 56, 93, -11],
    [0, 0, 0, 0, -10, 54, 95, -11],
    [0, 0, 0, 0, -9, 51, 97, -11],
    [0, 0, 0, 0, -9, 49, 99, -11],
    [0, 0, 0, 0, -9, 47, 101, -11],
    [0, 0, 0, 0, -8, 44, 103, -11],
    [0, 0, 0, 0, -8, 41, 105, -10],
    [0, 0, 0, 0, -8, 39, 107, -10],
    [0, 0, 0, 0, -7, 37, 108, -10],
    [0, 0, 0, 0, -7, 34, 110, -9],
    [0, 0, 0, 0, -7, 32, 112, -9],
    [0, 0, 0, 0, -6, 30, 113, -9],
    [0, 0, 0, 0, -6, 27, 115, -8],
    [0, 0, 0, 0, -5, 25, 116, -8],
    [0, 0, 0, 0, -5, 22, 118, -7],
    [0, 0, 0, 0, -4, 20, 119, -7],
    [0, 0, 0, 0, -4, 18, 120, -6],
    [0, 0, 0, 0, -3, 15, 121, -5],
    [0, 0, 0, 0, -3, 13, 123, -5],
    [0, 0, 0, 0, -3, 11, 124, -4],
    [0, 0, 0, 0, -2, 8, 125, -3],
    [0, 0, 0, 0, -1, 6, 126, -3],
    [0, 0, 0, 0, -1, 4, 127, -2],
    [0, 0, 0, 0, 0, 2, 127, -1],
    [0, 0, 0, 0, 0, 0, 127, 1],
    [0, 0, 0, 0, 0, 0, 126, 2],
    [0, 0, 0, 0, 0, 0, 124, 4],
    [0, 0, 0, 0, 0, 0, 122, 6],
    [0, 0, 0, 0, 0, 0, 120, 8],
    [0, 0, 0, 0, 0, 0, 118, 10],
    [0, 0, 0, 0, 0, 0, 116, 12],
    [0, 0, 0, 0, 0, 0, 114, 14],
    [0, 0, 0, 0, 0, 0, 112, 16],
    [0, 0, 0, 0, 0, 0, 110, 18],
    [0, 0, 0, 0, 0, 0, 108, 20],
    [0, 0, 0, 0, 0, 0, 106, 22],
    [0, 0, 0, 0, 0, 0, 104, 24],
    [0, 0, 0, 0, 0, 0, 102, 26],
    [0, 0, 0, 0, 0, 0, 100, 28],
    [0, 0, 0, 0, 0, 0, 98, 30],
    [0, 0, 0, 0, 0, 0, 96, 32],
    [0, 0, 0, 0, 0, 0, 94, 34],
    [0, 0, 0, 0, 0, 0, 92, 36],
    [0, 0, 0, 0, 0, 0, 90, 38],
    [0, 0, 0, 0, 0, 0, 88, 40],
    [0, 0, 0, 0, 0, 0, 86, 42],
    [0, 0, 0, 0, 0, 0, 84, 44],
    [0, 0, 0, 0, 0, 0, 82, 46],
    [0, 0, 0, 0, 0, 0, 80, 48],
    [0, 0, 0, 0, 0, 0, 78, 50],
    [0, 0, 0, 0, 0, 0, 76, 52],
    [0, 0, 0, 0, 0, 0, 74, 54],
    [0, 0, 0, 0, 0, 0, 72, 56],
    [0, 0, 0, 0, 0, 0, 70, 58],
    [0, 0, 0, 0, 0, 0, 68, 60],
    [0, 0, 0, 0, 0, 0, 66, 62],
    [0, 0, 0, 0, 0, 0, 64, 64],
    [0, 0, 0, 0, 0, 0, 62, 66],
    [0, 0, 0, 0, 0, 0, 60, 68],
    [0, 0, 0, 0, 0, 0, 58, 70],
    [0, 0, 0, 0, 0, 0, 56, 72],
    [0, 0, 0, 0, 0, 0, 54, 74],
    [0, 0, 0, 0, 0, 0, 52, 76],
    [0, 0, 0, 0, 0, 0, 50, 78],
    [0, 0, 0, 0, 0, 0, 48, 80],
    [0, 0, 0, 0, 0, 0, 46, 82],
    [0, 0, 0, 0, 0, 0, 44, 84],
    [0, 0, 0, 0, 0, 0, 42, 86],
    [0, 0, 0, 0, 0, 0, 40, 88],
    [0, 0, 0, 0, 0, 0, 38, 90],
    [0, 0, 0, 0, 0, 0, 36, 92],
    [0, 0, 0, 0, 0, 0, 34, 94],
    [0, 0, 0, 0, 0, 0, 32, 96],
    [0, 0, 0, 0, 0, 0, 30, 98],
    [0, 0, 0, 0, 0, 0, 28, 100],
    [0, 0, 0, 0, 0, 0, 26, 102],
    [0, 0, 0, 0, 0, 0, 24, 104],
    [0, 0, 0, 0, 0, 0, 22, 106],
    [0, 0, 0, 0, 0, 0, 20, 108],
    [0, 0, 0, 0, 0, 0, 18, 110],
    [0, 0, 0, 0, 0, 0, 16, 112],
    [0, 0, 0, 0, 0, 0, 14, 114],
    [0, 0, 0, 0, 0, 0, 12, 116],
    [0, 0, 0, 0, 0, 0, 10, 118],
    [0, 0, 0, 0, 0, 0, 8, 120],
    [0, 0, 0, 0, 0, 0, 6, 122],
    [0, 0, 0, 0, 0, 0, 4, 124],
    [0, 0, 0, 0, 0, 0, 2, 126],
    [0, 0, 0, 0, 0, 0, 2, 126],
];

pub const FILTER_INTRA_TAPS: [[i8; 64]; 5] = [
    [
        0, -6, 10, 0, 0, 0, 12, 0, 1, -5, 2, 10, 0, 0, 9, 0, 2, -3, 1, 1, 10, 0, 7, 0, 3, -3, 1, 1,
        2, 10, 5, 0, 4, -4, 6, 0, 0, 0, 2, 12, 5, -3, 2, 6, 0, 0, 2, 9, 6, -3, 2, 2, 6, 0, 2, 7, 7,
        -3, 1, 2, 2, 6, 3, 5,
    ],
    [
        0, -10, 16, 0, 0, 0, 10, 0, 1, -6, 0, 16, 0, 0, 6, 0, 2, -4, 0, 0, 16, 0, 4, 0, 3, -2, 0,
        0, 0, 16, 2, 0, 4, -10, 16, 0, 0, 0, 0, 10, 5, -6, 0, 16, 0, 0, 0, 6, 6, -4, 0, 0, 16, 0,
        0, 4, 7, -2, 0, 0, 0, 16, 0, 2,
    ],
    [
        0, -8, 8, 0, 0, 0, 16, 0, 1, -8, 0, 8, 0, 0, 16, 0, 2, -8, 0, 0, 8, 0, 16, 0, 3, -8, 0, 0,
        0, 8, 16, 0, 4, -4, 4, 0, 0, 0, 0, 16, 5, -4, 0, 4, 0, 0, 0, 16, 6, -4, 0, 0, 4, 0, 0, 16,
        7, -4, 0, 0, 0, 4, 0, 16,
    ],
    [
        0, -2, 8, 0, 0, 0, 10, 0, 1, -1, 3, 8, 0, 0, 6, 0, 2, -1, 2, 3, 8, 0, 4, 0, 3, 0, 1, 2, 3,
        8, 2, 0, 4, -1, 4, 0, 0, 0, 3, 10, 5, -1, 3, 4, 0, 0, 4, 6, 6, -1, 2, 3, 4, 0, 4, 4, 7, -1,
        2, 2, 3, 4, 3, 3,
    ],
    [
        0, -12, 14, 0, 0, 0, 14, 0, 1, -10, 0, 14, 0, 0, 12, 0, 2, -9, 0, 0, 14, 0, 11, 0, 3, -8,
        0, 0, 0, 14, 10, 0, 4, -10, 12, 0, 0, 0, 0, 14, 5, -9, 1, 12, 0, 0, 0, 12, 6, -8, 0, 0, 12,
        0, 1, 11, 7, -7, 0, 0, 1, 12, 1, 9,
    ],
];

pub const GAUSSIAN_SEQUENCE: [i16; 2048] = [
    56, 568, -180, 172, 124, -84, 172, -64, -900, 24, 820, 224, 1248, 996, 272, -8, -916, -388,
    -732, -104, -188, 800, 112, -652, -320, -376, 140, -252, 492, -168, 44, -788, 588, -584, 500,
    -228, 12, 680, 272, -476, 972, -100, 652, 368, 432, -196, -720, -192, 1000, -332, 652, -136,
    -552, -604, -4, 192, -220, -136, 1000, -52, 372, -96, -624, 124, -24, 396, 540, -12, -104, 640,
    464, 244, -208, -84, 368, -528, -740, 248, -968, -848, 608, 376, -60, -292, -40, -156, 252,
    -292, 248, 224, -280, 400, -244, 244, -60, 76, -80, 212, 532, 340, 128, -36, 824, -352, -60,
    -264, -96, -612, 416, -704, 220, -204, 640, -160, 1220, -408, 900, 336, 20, -336, -96, -792,
    304, 48, -28, -1232, -1172, -448, 104, -292, -520, 244, 60, -948, 0, -708, 268, 108, 356, -548,
    488, -344, -136, 488, -196, -224, 656, -236, -1128, 60, 4, 140, 276, -676, -376, 168, -108,
    464, 8, 564, 64, 240, 308, -300, -400, -456, -136, 56, 120, -408, -116, 436, 504, -232, 328,
    844, -164, -84, 784, -168, 232, -224, 348, -376, 128, 568, 96, -1244, -288, 276, 848, 832,
    -360, 656, 464, -384, -332, -356, 728, -388, 160, -192, 468, 296, 224, 140, -776, -100, 280, 4,
    196, 44, -36, -648, 932, 16, 1428, 28, 528, 808, 772, 20, 268, 88, -332, -284, 124, -384, -448,
    208, -228, -1044, -328, 660, 380, -148, -300, 588, 240, 540, 28, 136, -88, -436, 256, 296,
    -1000, 1400, 0, -48, 1056, -136, 264, -528, -1108, 632, -484, -592, -344, 796, 124, -668, -768,
    388, 1296, -232, -188, -200, -288, -4, 308, 100, -168, 256, -500, 204, -508, 648, -136, 372,
    -272, -120, -1004, -552, -548, -384, 548, -296, 428, -108, -8, -912, -324, -224, -88, -112,
    -220, -100, 996, -796, 548, 360, -216, 180, 428, -200, -212, 148, 96, 148, 284, 216, -412,
    -320, 120, -300, -384, -604, -572, -332, -8, -180, -176, 696, 116, -88, 628, 76, 44, -516, 240,
    -208, -40, 100, -592, 344, -308, -452, -228, 20, 916, -1752, -136, -340, -804, 140, 40, 512,
    340, 248, 184, -492, 896, -156, 932, -628, 328, -688, -448, -616, -752, -100, 560, -1020, 180,
    -800, -64, 76, 576, 1068, 396, 660, 552, -108, -28, 320, -628, 312, -92, -92, -472, 268, 16,
    560, 516, -672, -52, 492, -100, 260, 384, 284, 292, 304, -148, 88, -152, 1012, 1064, -228, 164,
    -376, -684, 592, -392, 156, 196, -524, -64, -884, 160, -176, 636, 648, 404, -396, -436, 864,
    424, -728, 988, -604, 904, -592, 296, -224, 536, -176, -920, 436, -48, 1176, -884, 416, -776,
    -824, -884, 524, -548, -564, -68, -164, -96, 692, 364, -692, -1012, -68, 260, -480, 876, -1116,
    452, -332, -352, 892, -1088, 1220, -676, 12, -292, 244, 496, 372, -32, 280, 200, 112, -440,
    -96, 24, -644, -184, 56, -432, 224, -980, 272, -260, 144, -436, 420, 356, 364, -528, 76, 172,
    -744, -368, 404, -752, -416, 684, -688, 72, 540, 416, 92, 444, 480, -72, -1416, 164, -1172,
    -68, 24, 424, 264, 1040, 128, -912, -524, -356, 64, 876, -12, 4, -88, 532, 272, -524, 320, 276,
    -508, 940, 24, -400, -120, 756, 60, 236, -412, 100, 376, -484, 400, -100, -740, -108, -260,
    328, -268, 224, -200, -416, 184, -604, -564, -20, 296, 60, 892, -888, 60, 164, 68, -760, 216,
    -296, 904, -336, -28, 404, -356, -568, -208, -1480, -512, 296, 328, -360, -164, -1560, -776,
    1156, -428, 164, -504, -112, 120, -216, -148, -264, 308, 32, 64, -72, 72, 116, 176, -64, -272,
    460, -536, -784, -280, 348, 108, -752, -132, 524, -540, -776, 116, -296, -1196, -288, -560,
    1040, -472, 116, -848, -1116, 116, 636, 696, 284, -176, 1016, 204, -864, -648, -248, 356, 972,
    -584, -204, 264, 880, 528, -24, -184, 116, 448, -144, 828, 524, 212, -212, 52, 12, 200, 268,
    -488, -404, -880, 824, -672, -40, 908, -248, 500, 716, -576, 492, -576, 16, 720, -108, 384,
    124, 344, 280, 576, -500, 252, 104, -308, 196, -188, -8, 1268, 296, 1032, -1196, 436, 316, 372,
    -432, -200, -660, 704, -224, 596, -132, 268, 32, -452, 884, 104, -1008, 424, -1348, -280, 4,
    -1168, 368, 476, 696, 300, -8, 24, 180, -592, -196, 388, 304, 500, 724, -160, 244, -84, 272,
    -256, -420, 320, 208, -144, -156, 156, 364, 452, 28, 540, 316, 220, -644, -248, 464, 72, 360,
    32, -388, 496, -680, -48, 208, -116, -408, 60, -604, -392, 548, -840, 784, -460, 656, -544,
    -388, -264, 908, -800, -628, -612, -568, 572, -220, 164, 288, -16, -308, 308, -112, -636, -760,
    280, -668, 432, 364, 240, -196, 604, 340, 384, 196, 592, -44, -500, 432, -580, -132, 636, -76,
    392, 4, -412, 540, 508, 328, -356, -36, 16, -220, -64, -248, -60, 24, -192, 368, 1040, 92, -24,
    -1044, -32, 40, 104, 148, 192, -136, -520, 56, -816, -224, 732, 392, 356, 212, -80, -424,
    -1008, -324, 588, -1496, 576, 460, -816, -848, 56, -580, -92, -1372, -112, -496, 200, 364, 52,
    -140, 48, -48, -60, 84, 72, 40, 132, -356, -268, -104, -284, -404, 732, -520, 164, -304, -540,
    120, 328, -76, -460, 756, 388, 588, 236, -436, -72, -176, -404, -316, -148, 716, -604, 404,
    -72, -88, -888, -68, 944, 88, -220, -344, 960, 472, 460, -232, 704, 120, 832, -228, 692, -508,
    132, -476, 844, -748, -364, -44, 1116, -1104, -1056, 76, 428, 552, -692, 60, 356, 96, -384,
    -188, -612, -576, 736, 508, 892, 352, -1132, 504, -24, -352, 324, 332, -600, -312, 292, 508,
    -144, -8, 484, 48, 284, -260, -240, 256, -100, -292, -204, -44, 472, -204, 908, -188, -1000,
    -256, 92, 1164, -392, 564, 356, 652, -28, -884, 256, 484, -192, 760, -176, 376, -524, -452,
    -436, 860, -736, 212, 124, 504, -476, 468, 76, -472, 552, -692, -944, -620, 740, -240, 400,
    132, 20, 192, -196, 264, -668, -1012, -60, 296, -316, -828, 76, -156, 284, -768, -448, -832,
    148, 248, 652, 616, 1236, 288, -328, -400, -124, 588, 220, 520, -696, 1032, 768, -740, -92,
    -272, 296, 448, -464, 412, -200, 392, 440, -200, 264, -152, -260, 320, 1032, 216, 320, -8, -64,
    156, -1016, 1084, 1172, 536, 484, -432, 132, 372, -52, -256, 84, 116, -352, 48, 116, 304, -384,
    412, 924, -300, 528, 628, 180, 648, 44, -980, -220, 1320, 48, 332, 748, 524, -268, -720, 540,
    -276, 564, -344, -208, -196, 436, 896, 88, -392, 132, 80, -964, -288, 568, 56, -48, -456, 888,
    8, 552, -156, -292, 948, 288, 128, -716, -292, 1192, -152, 876, 352, -600, -260, -812, -468,
    -28, -120, -32, -44, 1284, 496, 192, 464, 312, -76, -516, -380, -456, -1012, -48, 308, -156,
    36, 492, -156, -808, 188, 1652, 68, -120, -116, 316, 160, -140, 352, 808, -416, 592, 316, -480,
    56, 528, -204, -568, 372, -232, 752, -344, 744, -4, 324, -416, -600, 768, 268, -248, -88, -132,
    -420, -432, 80, -288, 404, -316, -1216, -588, 520, -108, 92, -320, 368, -480, -216, -92, 1688,
    -300, 180, 1020, -176, 820, -68, -228, -260, 436, -904, 20, 40, -508, 440, -736, 312, 332, 204,
    760, -372, 728, 96, -20, -632, -520, -560, 336, 1076, -64, -532, 776, 584, 192, 396, -728,
    -520, 276, -188, 80, -52, -612, -252, -48, 648, 212, -688, 228, -52, -260, 428, -412, -272,
    -404, 180, 816, -796, 48, 152, 484, -88, -216, 988, 696, 188, -528, 648, -116, -180, 316, 476,
    12, -564, 96, 476, -252, -364, -376, -392, 556, -256, -576, 260, -352, 120, -16, -136, -260,
    -492, 72, 556, 660, 580, 616, 772, 436, 424, -32, -324, -1268, 416, -324, -80, 920, 160, 228,
    724, 32, -516, 64, 384, 68, -128, 136, 240, 248, -204, -68, 252, -932, -120, -480, -628, -84,
    192, 852, -404, -288, -132, 204, 100, 168, -68, -196, -868, 460, 1080, 380, -80, 244, 0, 484,
    -888, 64, 184, 352, 600, 460, 164, 604, -196, 320, -64, 588, -184, 228, 12, 372, 48, -848,
    -344, 224, 208, -200, 484, 128, -20, 272, -468, -840, 384, 256, -720, -520, -464, -580, 112,
    -120, 644, -356, -208, -608, -528, 704, 560, -424, 392, 828, 40, 84, 200, -152, 0, -144, 584,
    280, -120, 80, -556, -972, -196, -472, 724, 80, 168, -32, 88, 160, -688, 0, 160, 356, 372,
    -776, 740, -128, 676, -248, -480, 4, -364, 96, 544, 232, -1032, 956, 236, 356, 20, -40, 300,
    24, -676, -596, 132, 1120, -104, 532, -1096, 568, 648, 444, 508, 380, 188, -376, -604, 1488,
    424, 24, 756, -220, -192, 716, 120, 920, 688, 168, 44, -460, 568, 284, 1144, 1160, 600, 424,
    888, 656, -356, -320, 220, 316, -176, -724, -188, -816, -628, -348, -228, -380, 1012, -452,
    -660, 736, 928, 404, -696, -72, -268, -892, 128, 184, -344, -780, 360, 336, 400, 344, 428, 548,
    -112, 136, -228, -216, -820, -516, 340, 92, -136, 116, -300, 376, -244, 100, -316, -520, -284,
    -12, 824, 164, -548, -180, -128, 116, -924, -828, 268, -368, -580, 620, 192, 160, 0, -1676,
    1068, 424, -56, -360, 468, -156, 720, 288, -528, 556, -364, 548, -148, 504, 316, 152, -648,
    -620, -684, -24, -376, -384, -108, -920, -1032, 768, 180, -264, -508, -1268, -260, -60, 300,
    -240, 988, 724, -376, -576, -212, -736, 556, 192, 1092, -620, -880, 376, -56, -4, -216, -32,
    836, 268, 396, 1332, 864, -600, 100, 56, -412, -92, 356, 180, 884, -468, -436, 292, -388, -804,
    -704, -840, 368, -348, 140, -724, 1536, 940, 372, 112, -372, 436, -480, 1136, 296, -32, -228,
    132, -48, -220, 868, -1016, -60, -1044, -464, 328, 916, 244, 12, -736, -296, 360, 468, -376,
    -108, -92, 788, 368, -56, 544, 400, -672, -420, 728, 16, 320, 44, -284, -380, -796, 488, 132,
    204, -596, -372, 88, -152, -908, -636, -572, -624, -116, -692, -200, -56, 276, -88, 484, -324,
    948, 864, 1000, -456, -184, -276, 292, -296, 156, 676, 320, 160, 908, -84, -1236, -288, -116,
    260, -372, -644, 732, -756, -96, 84, 344, -520, 348, -688, 240, -84, 216, -1044, -136, -676,
    -396, -1500, 960, -40, 176, 168, 1516, 420, -504, -344, -364, -360, 1216, -940, -380, -212,
    252, -660, -708, 484, -444, -152, 928, -120, 1112, 476, -260, 560, -148, -344, 108, -196, 228,
    -288, 504, 560, -328, -88, 288, -1008, 460, -228, 468, -836, -196, 76, 388, 232, 412, -1168,
    -716, -644, 756, -172, -356, -504, 116, 432, 528, 48, 476, -168, -608, 448, 160, -532, -272,
    28, -676, -12, 828, 980, 456, 520, 104, -104, 256, -344, -4, -28, -368, -52, -524, -572, -556,
    -200, 768, 1124, -208, -512, 176, 232, 248, -148, -888, 604, -600, -304, 804, -156, -212, 488,
    -192, -804, -256, 368, -360, -916, -328, 228, -240, -448, -472, 856, -556, -364, 572, -12,
    -156, -368, -340, 432, 252, -752, -152, 288, 268, -580, -848, -592, 108, -76, 244, 312, -716,
    592, -80, 436, 360, 4, -248, 160, 516, 584, 732, 44, -468, -280, -292, -156, -588, 28, 308,
    912, 24, 124, 156, 180, -252, 944, -924, -772, -520, -428, -624, 300, -212, -1144, 32, -724,
    800, -1128, -212, -1288, -848, 180, -416, 440, 192, -576, -792, -76, -1080, 80, -532, -352,
    -132, 380, -820, 148, 1112, 128, 164, 456, 700, -924, 144, -668, -384, 648, -832, 508, 552,
    -52, -100, -656, 208, -568, 748, -88, 680, 232, 300, 192, -408, -1012, -152, -252, -268, 272,
    -876, -664, -648, -332, -136, 16, 12, 1152, -28, 332, -536, 320, -672, -460, -316, 532, -260,
    228, -40, 1052, -816, 180, 88, -496, -556, -672, -368, 428, 92, 356, 404, -408, 252, 196, -176,
    -556, 792, 268, 32, 372, 40, 96, -332, 328, 120, 372, -900, -40, 472, -264, -592, 952, 128,
    656, 112, 664, -232, 420, 4, -344, -464, 556, 244, -416, -32, 252, 0, -412, 188, -696, 508,
    -476, 324, -1096, 656, -312, 560, 264, -136, 304, 160, -64, -580, 248, 336, -720, 560, -348,
    -288, -276, -196, -500, 852, -544, -236, -1128, -992, -776, 116, 56, 52, 860, 884, 212, -12,
    168, 1020, 512, -552, 924, -148, 716, 188, 164, -340, -520, -184, 880, -152, -680, -208, -1156,
    -300, -528, -472, 364, 100, -744, -1056, -32, 540, 280, 144, -676, -32, -232, -280, -224, 96,
    568, -76, 172, 148, 148, 104, 32, -296, -32, 788, -80, 32, -16, 280, 288, 944, 428, -484,
];
// Note: C source has typo 'weiner', we use correct 'wiener'
pub const PC_WIENER_LUT_TO_CLASS: [u8; 4096] = [
    83, 154, 254, 125, 125, 125, 253, 253, 77, 200, 207, 30, 30, 239, 239, 239, 0, 98, 101, 229,
    229, 231, 231, 231, 0, 34, 101, 100, 100, 229, 229, 231, 15, 34, 98, 100, 100, 100, 164, 164,
    15, 34, 98, 106, 100, 96, 164, 164, 15, 14, 43, 106, 96, 96, 96, 164, 15, 14, 43, 106, 106, 96,
    96, 184, 83, 154, 64, 110, 125, 239, 253, 253, 119, 225, 87, 231, 64, 64, 239, 239, 120, 101,
    100, 229, 236, 231, 202, 231, 15, 98, 228, 100, 150, 202, 236, 231, 15, 40, 18, 100, 228, 96,
    228, 88, 15, 43, 106, 68, 96, 193, 224, 88, 199, 43, 34, 106, 104, 184, 224, 184, 11, 14, 43,
    96, 96, 184, 96, 184, 243, 212, 244, 22, 239, 239, 253, 253, 99, 192, 198, 230, 22, 22, 231,
    239, 8, 163, 140, 230, 230, 230, 230, 231, 47, 32, 226, 82, 226, 230, 179, 164, 41, 32, 226,
    226, 82, 193, 179, 224, 106, 42, 42, 226, 193, 82, 193, 184, 15, 42, 42, 193, 193, 193, 193,
    184, 11, 43, 42, 106, 193, 193, 193, 184, 241, 157, 64, 255, 255, 255, 255, 255, 240, 66, 228,
    228, 22, 22, 22, 22, 10, 150, 228, 228, 230, 146, 230, 232, 199, 150, 150, 228, 146, 146, 146,
    184, 199, 42, 62, 146, 146, 193, 193, 184, 47, 42, 62, 193, 146, 193, 193, 184, 199, 42, 42,
    146, 146, 146, 193, 179, 199, 42, 42, 146, 193, 146, 193, 184, 138, 237, 158, 237, 239, 253,
    255, 255, 156, 17, 236, 88, 88, 231, 231, 22, 171, 105, 224, 224, 232, 146, 232, 22, 12, 104,
    146, 146, 146, 146, 224, 232, 12, 146, 146, 146, 146, 146, 146, 232, 199, 106, 234, 146, 146,
    146, 146, 146, 199, 42, 234, 146, 146, 146, 146, 146, 199, 42, 146, 146, 146, 146, 146, 184,
    145, 179, 236, 158, 158, 110, 253, 29, 11, 179, 238, 237, 238, 238, 238, 88, 41, 156, 242, 88,
    88, 88, 232, 2, 12, 107, 104, 232, 232, 232, 232, 232, 12, 170, 234, 234, 2, 232, 2, 179, 12,
    156, 234, 234, 2, 2, 234, 179, 12, 156, 234, 234, 234, 2, 2, 179, 199, 156, 234, 234, 234, 234,
    146, 184, 133, 211, 179, 179, 110, 110, 110, 253, 160, 166, 179, 238, 238, 238, 238, 238, 129,
    35, 179, 236, 88, 88, 88, 179, 137, 170, 104, 242, 88, 88, 2, 2, 171, 170, 156, 104, 232, 2, 2,
    232, 12, 170, 156, 234, 2, 2, 2, 2, 189, 170, 156, 234, 2, 2, 2, 2, 12, 156, 234, 179, 234, 2,
    2, 179, 186, 219, 179, 179, 237, 110, 110, 253, 155, 179, 60, 231, 238, 238, 238, 238, 28, 58,
    188, 179, 88, 238, 238, 238, 226, 238, 234, 179, 104, 88, 2, 88, 14, 179, 170, 242, 104, 232,
    2, 2, 39, 2, 170, 156, 232, 232, 232, 2, 179, 170, 170, 234, 232, 232, 2, 2, 170, 170, 156,
    234, 234, 234, 2, 179, 90, 132, 95, 254, 159, 159, 159, 253, 44, 71, 154, 222, 254, 254, 125,
    159, 55, 183, 52, 86, 250, 250, 254, 125, 39, 26, 145, 103, 180, 246, 250, 215, 39, 26, 183,
    73, 103, 180, 180, 30, 39, 39, 183, 145, 73, 247, 247, 87, 76, 39, 26, 145, 73, 102, 247, 87,
    25, 76, 76, 57, 145, 73, 102, 202, 83, 132, 254, 125, 159, 159, 254, 159, 44, 209, 154, 64,
    125, 125, 125, 159, 26, 121, 241, 86, 64, 207, 254, 125, 84, 0, 103, 103, 207, 246, 215, 215,
    39, 0, 57, 227, 52, 52, 196, 30, 39, 15, 57, 145, 52, 102, 207, 87, 76, 53, 10, 77, 103, 97,
    197, 87, 25, 15, 15, 0, 34, 73, 18, 100, 74, 182, 252, 252, 215, 125, 71, 69, 99, 78, 206, 244,
    244, 244, 125, 159, 8, 133, 116, 198, 198, 244, 244, 215, 46, 33, 163, 190, 116, 198, 198, 215,
    47, 33, 163, 116, 190, 140, 190, 230, 47, 46, 33, 163, 190, 190, 190, 230, 156, 47, 33, 33,
    163, 190, 190, 82, 25, 40, 41, 41, 163, 62, 226, 193, 177, 127, 64, 255, 255, 255, 255, 255,
    121, 225, 87, 196, 22, 22, 22, 22, 10, 102, 148, 230, 198, 198, 22, 22, 199, 40, 62, 226, 230,
    198, 198, 22, 47, 40, 62, 62, 226, 226, 198, 230, 47, 41, 32, 62, 226, 226, 140, 230, 47, 47,
    41, 62, 62, 226, 226, 230, 47, 47, 41, 42, 32, 32, 226, 193, 49, 125, 158, 158, 110, 29, 29,
    255, 58, 162, 178, 231, 231, 22, 22, 22, 58, 120, 66, 228, 228, 196, 196, 22, 171, 18, 150,
    228, 228, 228, 230, 22, 149, 18, 150, 150, 228, 228, 62, 230, 11, 42, 150, 62, 228, 146, 226,
    230, 11, 42, 42, 62, 62, 193, 193, 230, 169, 47, 42, 42, 42, 193, 62, 193, 85, 238, 179, 158,
    158, 110, 253, 29, 179, 179, 158, 158, 237, 237, 238, 22, 226, 59, 17, 236, 236, 164, 164, 22,
    189, 59, 105, 224, 224, 228, 228, 230, 189, 107, 104, 146, 146, 224, 146, 228, 189, 107, 150,
    146, 146, 146, 146, 228, 149, 43, 146, 146, 146, 146, 146, 228, 11, 199, 42, 146, 96, 146, 146,
    193, 62, 92, 88, 214, 238, 89, 89, 253, 42, 228, 110, 158, 158, 158, 158, 239, 85, 137, 179,
    237, 237, 237, 238, 231, 156, 170, 233, 17, 236, 88, 88, 228, 109, 171, 107, 105, 224, 232,
    224, 232, 171, 171, 170, 232, 232, 232, 232, 232, 189, 12, 156, 104, 146, 232, 2, 232, 149, 14,
    156, 146, 146, 146, 146, 146, 158, 205, 179, 179, 179, 179, 110, 253, 179, 254, 122, 110, 110,
    158, 158, 110, 81, 122, 179, 238, 2, 158, 158, 238, 10, 179, 42, 179, 237, 238, 238, 238, 238,
    58, 179, 233, 242, 88, 88, 88, 204, 179, 107, 233, 104, 232, 88, 88, 179, 12, 107, 156, 104,
    232, 232, 2, 149, 12, 170, 156, 156, 234, 234, 179, 90, 132, 95, 254, 159, 159, 159, 159, 19,
    155, 222, 222, 254, 254, 125, 159, 55, 115, 71, 245, 222, 222, 250, 254, 39, 55, 115, 71, 86,
    250, 250, 215, 39, 55, 115, 119, 52, 86, 246, 250, 25, 39, 26, 183, 119, 103, 180, 246, 39, 39,
    26, 26, 119, 103, 103, 180, 76, 39, 39, 26, 183, 145, 73, 247, 108, 132, 95, 254, 89, 50, 69,
    239, 128, 209, 245, 154, 254, 134, 102, 80, 39, 60, 241, 161, 127, 157, 250, 125, 0, 177, 243,
    87, 116, 127, 223, 254, 10, 240, 115, 71, 86, 71, 245, 127, 23, 169, 115, 115, 115, 209, 118,
    86, 114, 23, 199, 26, 99, 52, 118, 246, 25, 35, 145, 199, 180, 119, 103, 197, 211, 182, 252,
    252, 244, 213, 95, 17, 65, 78, 210, 244, 244, 244, 206, 80, 5, 133, 116, 194, 244, 244, 244,
    215, 5, 20, 131, 116, 194, 143, 244, 215, 5, 46, 131, 131, 116, 194, 194, 194, 8, 46, 46, 131,
    190, 194, 190, 215, 45, 46, 37, 33, 190, 190, 116, 198, 175, 47, 33, 33, 33, 163, 163, 82, 177,
    223, 80, 255, 24, 24, 24, 24, 121, 241, 180, 212, 244, 244, 252, 244, 84, 73, 192, 192, 198,
    206, 244, 244, 53, 145, 192, 140, 198, 143, 206, 244, 169, 41, 32, 140, 140, 198, 198, 198,
    169, 8, 32, 32, 140, 140, 198, 230, 47, 47, 41, 32, 32, 226, 140, 198, 47, 47, 33, 33, 163,
    163, 163, 82, 203, 223, 158, 158, 253, 253, 29, 24, 105, 162, 157, 157, 64, 239, 255, 255, 185,
    120, 66, 197, 87, 196, 22, 244, 189, 240, 148, 148, 100, 198, 198, 22, 149, 43, 62, 148, 148,
    148, 198, 198, 11, 199, 40, 62, 62, 226, 62, 230, 11, 41, 40, 32, 62, 193, 140, 198, 181, 47,
    41, 32, 32, 42, 32, 226, 155, 210, 85, 238, 158, 89, 253, 50, 1, 179, 85, 158, 158, 158, 239,
    255, 0, 58, 162, 135, 229, 231, 196, 22, 171, 58, 233, 224, 228, 236, 196, 196, 189, 58, 105,
    224, 228, 164, 228, 230, 189, 12, 18, 150, 224, 146, 228, 228, 189, 199, 40, 150, 104, 146,
    150, 62, 53, 199, 42, 42, 62, 62, 193, 226, 166, 168, 144, 222, 179, 239, 89, 50, 117, 179,
    179, 88, 158, 158, 158, 239, 78, 233, 189, 56, 237, 237, 237, 239, 28, 10, 59, 17, 236, 236,
    164, 231, 64, 171, 59, 233, 242, 224, 236, 224, 171, 189, 107, 104, 224, 104, 148, 228, 189,
    171, 18, 105, 150, 224, 179, 228, 149, 199, 43, 150, 96, 232, 146, 193, 219, 233, 220, 238,
    158, 29, 17, 253, 70, 110, 179, 158, 110, 158, 110, 110, 137, 50, 55, 2, 158, 158, 158, 237,
    166, 178, 209, 224, 237, 237, 237, 238, 29, 179, 97, 233, 17, 236, 236, 238, 221, 171, 58, 107,
    242, 242, 88, 88, 61, 189, 171, 107, 233, 104, 232, 88, 149, 12, 12, 170, 156, 104, 232, 2, 91,
    94, 95, 95, 254, 254, 125, 125, 19, 155, 222, 222, 222, 222, 254, 125, 23, 44, 155, 245, 222,
    222, 222, 254, 23, 55, 115, 16, 245, 86, 222, 254, 160, 7, 44, 115, 71, 86, 86, 250, 160, 7,
    55, 115, 119, 71, 86, 86, 160, 7, 55, 35, 115, 119, 52, 86, 160, 160, 160, 35, 35, 115, 119,
    103, 166, 124, 254, 167, 17, 50, 235, 97, 49, 211, 83, 239, 95, 80, 69, 253, 23, 0, 209, 155,
    134, 125, 238, 110, 114, 177, 211, 209, 167, 222, 147, 213, 153, 172, 44, 60, 243, 245, 215,
    250, 47, 7, 55, 35, 243, 99, 118, 86, 5, 25, 55, 83, 83, 243, 51, 127, 23, 160, 7, 7, 76, 51,
    119, 52, 211, 182, 252, 252, 252, 254, 71, 69, 65, 174, 210, 216, 244, 244, 252, 213, 5, 133,
    130, 194, 244, 216, 244, 22, 5, 20, 133, 130, 130, 194, 244, 244, 46, 46, 20, 131, 130, 194,
    194, 194, 46, 46, 33, 131, 131, 116, 194, 194, 233, 46, 37, 131, 131, 131, 194, 194, 25, 46,
    46, 33, 33, 33, 131, 190, 177, 223, 80, 255, 24, 24, 24, 24, 121, 241, 246, 212, 244, 244, 252,
    244, 84, 73, 192, 192, 143, 206, 244, 244, 53, 145, 192, 140, 198, 143, 206, 244, 169, 41, 163,
    140, 140, 140, 143, 244, 169, 8, 41, 163, 140, 140, 140, 143, 169, 47, 8, 32, 140, 140, 140,
    143, 181, 47, 8, 33, 33, 163, 163, 140, 2, 205, 158, 158, 253, 29, 29, 24, 185, 162, 157, 127,
    64, 22, 255, 255, 185, 120, 225, 197, 87, 212, 22, 244, 189, 240, 66, 148, 148, 198, 212, 143,
    149, 10, 102, 148, 148, 192, 192, 143, 11, 10, 40, 62, 148, 226, 226, 198, 11, 41, 40, 40, 81,
    226, 230, 198, 181, 47, 41, 41, 32, 32, 32, 226, 232, 209, 241, 89, 89, 89, 253, 29, 116, 9,
    178, 158, 158, 64, 64, 255, 149, 58, 162, 178, 197, 231, 196, 22, 171, 58, 120, 66, 197, 197,
    196, 196, 189, 58, 18, 66, 228, 228, 100, 230, 189, 10, 18, 150, 150, 193, 228, 230, 189, 10,
    18, 18, 148, 146, 228, 230, 11, 199, 42, 40, 62, 62, 62, 226, 28, 177, 230, 22, 110, 56, 89,
    253, 43, 179, 108, 238, 158, 158, 110, 239, 181, 89, 146, 56, 237, 237, 237, 239, 230, 170, 59,
    17, 17, 197, 231, 196, 73, 58, 59, 233, 242, 236, 164, 236, 58, 58, 107, 105, 66, 224, 224,
    228, 189, 171, 107, 18, 150, 224, 193, 228, 149, 199, 43, 18, 96, 146, 193, 193, 145, 88, 142,
    238, 238, 179, 253, 253, 194, 87, 241, 110, 158, 158, 238, 110, 147, 90, 179, 237, 238, 158,
    158, 237, 50, 29, 162, 238, 237, 237, 237, 237, 45, 91, 96, 233, 17, 242, 236, 238, 126, 40,
    58, 107, 233, 242, 242, 236, 149, 171, 58, 107, 233, 242, 224, 88, 149, 12, 12, 107, 156, 104,
    104, 232, 91, 94, 95, 95, 159, 254, 254, 69, 128, 74, 132, 132, 132, 95, 95, 159, 172, 19, 74,
    6, 132, 132, 95, 95, 172, 128, 51, 155, 6, 132, 132, 95, 23, 55, 44, 51, 155, 245, 6, 222, 39,
    172, 55, 44, 16, 16, 245, 222, 160, 172, 55, 44, 51, 16, 71, 245, 160, 7, 55, 55, 44, 115, 115,
    52, 108, 75, 245, 69, 162, 244, 69, 125, 31, 152, 219, 167, 108, 57, 235, 92, 128, 209, 177, 6,
    95, 82, 143, 159, 23, 172, 51, 132, 245, 129, 223, 254, 23, 232, 128, 83, 210, 132, 86, 147,
    169, 4, 133, 245, 51, 132, 28, 246, 19, 149, 31, 60, 245, 251, 60, 6, 4, 53, 51, 53, 7, 7, 16,
    52, 90, 213, 186, 216, 244, 126, 186, 69, 65, 174, 152, 216, 210, 147, 147, 235, 5, 20, 130,
    130, 194, 136, 216, 92, 5, 13, 131, 130, 194, 194, 148, 208, 5, 46, 131, 131, 194, 194, 194,
    194, 5, 46, 131, 131, 131, 130, 194, 194, 3, 46, 33, 20, 37, 131, 194, 143, 84, 172, 41, 33,
    33, 33, 131, 190, 217, 223, 124, 50, 235, 235, 186, 213, 60, 177, 134, 182, 220, 252, 216, 244,
    84, 241, 52, 206, 206, 147, 252, 252, 25, 45, 161, 78, 206, 147, 93, 244, 181, 45, 145, 78, 81,
    194, 246, 206, 181, 47, 8, 161, 161, 116, 190, 194, 181, 46, 46, 33, 161, 230, 227, 194, 181,
    46, 46, 8, 8, 33, 33, 32, 11, 245, 166, 89, 124, 50, 50, 235, 153, 249, 85, 167, 125, 255, 252,
    252, 185, 113, 195, 246, 246, 212, 182, 252, 185, 121, 227, 227, 196, 86, 206, 147, 109, 84,
    97, 192, 140, 135, 78, 101, 149, 47, 14, 140, 81, 140, 197, 206, 181, 169, 41, 32, 52, 227,
    226, 206, 181, 169, 169, 41, 33, 32, 163, 81, 175, 119, 248, 167, 89, 124, 124, 69, 74, 212,
    166, 85, 167, 167, 80, 29, 218, 112, 201, 201, 157, 30, 215, 255, 177, 185, 36, 72, 135, 180,
    143, 244, 189, 185, 36, 72, 148, 82, 214, 215, 189, 171, 233, 17, 100, 32, 241, 246, 109, 149,
    10, 40, 227, 227, 82, 79, 175, 53, 47, 163, 163, 32, 81, 81, 253, 36, 201, 189, 49, 190, 70,
    69, 88, 140, 38, 179, 166, 166, 167, 80, 178, 206, 112, 201, 85, 56, 215, 80, 3, 148, 142, 201,
    205, 207, 127, 215, 179, 185, 142, 36, 17, 197, 247, 250, 105, 185, 58, 107, 79, 82, 197, 192,
    176, 185, 107, 73, 197, 79, 197, 207, 176, 149, 199, 18, 40, 79, 148, 81, 192, 214, 111, 191,
    1, 158, 50, 89, 227, 86, 158, 158, 238, 158, 70, 89, 250, 167, 232, 4, 170, 166, 166, 110, 157,
    156, 90, 166, 201, 85, 56, 56, 70, 90, 53, 142, 162, 162, 56, 56, 216, 189, 185, 142, 17, 17,
    162, 178, 120, 112, 185, 58, 233, 17, 242, 178, 149, 149, 171, 59, 107, 54, 54, 105, 91, 94,
    94, 95, 95, 92, 95, 215, 31, 211, 94, 95, 95, 95, 95, 95, 23, 19, 74, 94, 132, 132, 95, 95, 23,
    128, 19, 74, 6, 132, 222, 95, 23, 172, 19, 51, 155, 245, 222, 222, 23, 172, 55, 44, 51, 245,
    245, 245, 23, 172, 44, 19, 51, 118, 118, 245, 160, 7, 7, 35, 44, 115, 118, 118, 109, 75, 75,
    210, 95, 38, 86, 208, 31, 161, 201, 143, 208, 6, 126, 95, 151, 251, 155, 79, 251, 69, 78, 110,
    172, 44, 39, 114, 95, 76, 205, 154, 4, 128, 16, 84, 132, 136, 94, 159, 175, 4, 67, 35, 118, 74,
    212, 132, 23, 55, 181, 205, 19, 6, 174, 245, 7, 4, 4, 160, 49, 44, 76, 118, 90, 213, 252, 216,
    248, 186, 117, 158, 65, 174, 152, 216, 216, 206, 216, 254, 5, 20, 130, 194, 194, 216, 244, 206,
    5, 20, 130, 130, 194, 194, 216, 194, 46, 46, 20, 131, 130, 130, 194, 194, 20, 46, 131, 131,
    131, 194, 194, 194, 12, 46, 37, 13, 131, 130, 194, 194, 23, 224, 46, 33, 131, 131, 131, 190,
    217, 223, 80, 29, 24, 24, 216, 235, 60, 241, 214, 147, 244, 252, 252, 216, 84, 97, 52, 212,
    147, 210, 206, 216, 53, 57, 52, 78, 174, 78, 93, 244, 181, 45, 163, 161, 78, 206, 206, 206,
    165, 5, 8, 133, 78, 81, 143, 206, 165, 46, 8, 20, 161, 116, 116, 206, 5, 46, 37, 33, 8, 33,
    133, 116, 239, 217, 166, 89, 124, 29, 29, 24, 58, 249, 162, 127, 64, 125, 22, 252, 185, 113,
    195, 225, 246, 212, 206, 244, 185, 63, 66, 227, 52, 212, 212, 206, 11, 199, 97, 227, 192, 78,
    140, 206, 25, 199, 40, 227, 192, 140, 180, 206, 25, 45, 41, 41, 163, 81, 78, 143, 181, 169, 8,
    41, 163, 133, 140, 140, 143, 104, 223, 166, 89, 167, 89, 50, 178, 131, 249, 166, 158, 167, 80,
    255, 171, 142, 201, 205, 178, 64, 214, 213, 189, 142, 36, 66, 17, 197, 180, 212, 187, 58, 54,
    66, 66, 100, 246, 198, 189, 171, 107, 148, 105, 193, 197, 78, 109, 199, 57, 150, 148, 148, 192,
    78, 25, 53, 57, 32, 62, 81, 81, 140, 162, 196, 28, 131, 69, 70, 223, 253, 198, 135, 221, 76,
    166, 166, 167, 80, 118, 179, 61, 85, 56, 157, 167, 64, 232, 171, 142, 162, 17, 157, 157, 215,
    130, 185, 142, 72, 66, 135, 82, 196, 12, 187, 58, 54, 66, 197, 82, 197, 189, 189, 107, 105,
    225, 148, 224, 197, 149, 15, 57, 98, 79, 148, 148, 148, 113, 82, 172, 50, 174, 2, 205, 89, 171,
    130, 16, 179, 158, 158, 70, 110, 133, 234, 14, 100, 120, 158, 158, 158, 203, 158, 179, 201, 56,
    157, 157, 237, 174, 112, 63, 36, 17, 178, 178, 178, 221, 187, 142, 59, 17, 17, 135, 178, 179,
    189, 58, 59, 54, 242, 242, 236, 176, 171, 171, 107, 54, 54, 79, 224, 91, 126, 75, 95, 95, 208,
    252, 95, 128, 251, 94, 126, 95, 254, 159, 254, 23, 19, 155, 155, 132, 95, 95, 95, 23, 128, 19,
    155, 245, 52, 125, 95, 23, 128, 19, 51, 51, 245, 16, 132, 23, 7, 128, 19, 51, 51, 76, 222, 23,
    7, 128, 19, 44, 51, 114, 64, 160, 7, 7, 7, 35, 44, 44, 16, 219, 218, 235, 126, 247, 28, 108,
    179, 138, 245, 173, 99, 220, 176, 204, 239, 203, 144, 111, 208, 188, 5, 152, 167, 144, 188, 38,
    244, 195, 52, 171, 29, 151, 6, 100, 152, 131, 44, 141, 157, 186, 203, 90, 144, 20, 144, 235,
    238, 124, 13, 126, 29, 175, 251, 86, 14, 48, 31, 169, 179, 46, 126, 55, 223, 74, 182, 93, 216,
    65, 137, 111, 37, 51, 174, 78, 93, 143, 65, 235, 50, 45, 161, 129, 174, 93, 224, 104, 75, 23,
    99, 129, 78, 78, 82, 155, 87, 181, 5, 20, 131, 136, 148, 206, 116, 165, 21, 225, 65, 81, 130,
    226, 208, 21, 21, 119, 9, 137, 136, 141, 136, 31, 21, 9, 9, 9, 163, 78, 116, 249, 223, 127, 80,
    235, 24, 235, 248, 241, 52, 118, 250, 246, 220, 135, 186, 7, 145, 192, 202, 117, 174, 66, 162,
    160, 57, 78, 192, 81, 179, 206, 227, 160, 8, 73, 103, 78, 140, 130, 198, 181, 73, 66, 247, 140,
    225, 230, 132, 165, 99, 79, 202, 32, 161, 20, 250, 21, 21, 20, 20, 115, 131, 99, 78, 171, 115,
    167, 223, 69, 69, 69, 235, 90, 201, 205, 85, 118, 114, 208, 24, 185, 121, 225, 103, 87, 202,
    246, 252, 187, 240, 192, 87, 118, 202, 135, 87, 61, 84, 79, 66, 192, 135, 86, 135, 160, 99, 73,
    192, 150, 190, 236, 147, 25, 65, 163, 102, 42, 148, 62, 205, 181, 46, 240, 41, 115, 81, 226,
    116, 178, 148, 10, 190, 89, 208, 69, 208, 175, 64, 83, 85, 223, 85, 127, 29, 232, 60, 201, 162,
    114, 157, 208, 135, 176, 61, 59, 54, 157, 205, 88, 206, 185, 58, 107, 105, 102, 140, 247, 232,
    187, 42, 240, 120, 150, 135, 104, 224, 176, 0, 73, 236, 79, 200, 117, 163, 39, 57, 65, 17, 16,
    225, 193, 62, 195, 50, 190, 232, 202, 141, 166, 69, 249, 110, 167, 176, 166, 205, 167, 80, 222,
    179, 117, 156, 63, 224, 167, 157, 92, 179, 142, 59, 54, 17, 116, 135, 118, 189, 58, 59, 225,
    202, 97, 208, 185, 189, 58, 54, 236, 2, 157, 208, 187, 171, 105, 10, 79, 183, 59, 105, 160, 0,
    200, 240, 225, 150, 119, 102, 210, 131, 40, 11, 179, 222, 222, 208, 127, 161, 239, 233, 131,
    218, 238, 208, 86, 28, 39, 238, 179, 217, 114, 64, 52, 138, 219, 36, 59, 60, 162, 106, 128, 0,
    204, 249, 59, 162, 56, 118, 128, 103, 142, 61, 59, 233, 36, 195, 78, 170, 48, 170, 241, 34, 54,
    54, 55, 55, 35, 121, 121, 107, 54, 54, 188, 75, 75, 75, 126, 245, 89, 214, 151, 123, 94, 126,
    126, 95, 95, 159, 4, 123, 251, 94, 126, 126, 126, 159, 4, 31, 251, 251, 132, 126, 126, 254, 4,
    31, 27, 251, 251, 6, 6, 222, 4, 31, 31, 27, 251, 251, 245, 114, 23, 31, 27, 27, 27, 251, 51,
    245, 23, 23, 31, 27, 27, 27, 19, 114, 203, 218, 204, 204, 126, 222, 179, 162, 1, 139, 218, 218,
    38, 95, 98, 179, 1, 139, 221, 38, 38, 95, 69, 158, 123, 144, 221, 204, 191, 191, 69, 198, 208,
    144, 144, 218, 218, 191, 221, 95, 109, 208, 144, 168, 6, 218, 218, 89, 130, 46, 172, 112, 185,
    152, 218, 244, 4, 173, 172, 181, 187, 185, 37, 208, 122, 92, 186, 186, 248, 248, 216, 69, 67,
    111, 152, 216, 248, 248, 208, 208, 21, 137, 138, 152, 152, 248, 248, 248, 21, 9, 137, 138, 138,
    136, 136, 248, 21, 13, 9, 138, 136, 136, 136, 136, 165, 13, 13, 9, 130, 136, 136, 136, 165, 13,
    13, 13, 28, 136, 136, 136, 46, 46, 46, 28, 28, 28, 28, 141, 219, 108, 124, 50, 235, 235, 235,
    235, 153, 209, 134, 213, 220, 220, 220, 216, 49, 3, 117, 117, 147, 147, 220, 216, 25, 3, 161,
    161, 174, 174, 210, 216, 181, 45, 133, 161, 161, 174, 210, 93, 165, 5, 20, 133, 161, 161, 174,
    93, 165, 5, 20, 133, 161, 161, 116, 93, 165, 37, 37, 37, 20, 133, 133, 129, 38, 38, 70, 70,
    124, 50, 50, 235, 48, 217, 85, 167, 80, 213, 213, 24, 48, 60, 195, 195, 214, 214, 147, 252,
    187, 63, 97, 227, 241, 246, 212, 210, 109, 199, 97, 227, 227, 78, 143, 206, 109, 15, 43, 81,
    227, 227, 192, 206, 175, 169, 41, 81, 81, 81, 81, 78, 173, 169, 8, 33, 163, 81, 81, 81, 37, 1,
    191, 70, 70, 124, 124, 69, 188, 38, 217, 166, 167, 167, 80, 29, 48, 112, 249, 201, 127, 64,
    214, 255, 48, 142, 113, 72, 17, 207, 246, 212, 187, 185, 63, 66, 227, 197, 192, 212, 187, 84,
    63, 72, 227, 227, 227, 212, 109, 15, 10, 102, 148, 227, 227, 78, 175, 53, 41, 32, 32, 81, 62,
    81, 110, 104, 70, 191, 189, 70, 70, 69, 29, 159, 158, 89, 70, 166, 167, 80, 213, 38, 217, 249,
    85, 85, 223, 80, 151, 48, 112, 201, 162, 178, 246, 212, 93, 112, 142, 36, 72, 17, 197, 207, 48,
    187, 58, 72, 66, 66, 242, 197, 187, 187, 10, 105, 79, 66, 148, 197, 176, 11, 14, 18, 79, 79,
    148, 148, 50, 226, 254, 110, 110, 50, 170, 89, 3, 61, 165, 89, 110, 166, 70, 89, 228, 37, 208,
    89, 166, 166, 166, 110, 73, 179, 56, 249, 249, 85, 56, 56, 5, 179, 112, 249, 201, 205, 205,
    178, 20, 187, 112, 142, 36, 205, 205, 135, 110, 187, 185, 113, 36, 72, 72, 135, 176, 168, 61,
    59, 54, 79, 79, 68,
];

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_block_dimensions_count() {
        assert_eq!(BLOCK_DIMENSIONS.len(), N_BS_SIZES);
    }

    #[test]
    fn test_block_dimensions_4x4() {
        // BS_4x4 = index 30
        assert_eq!(BLOCK_DIMENSIONS[30], [1, 1, 0, 0]);
    }

    #[test]
    fn test_block_dimensions_256x256() {
        assert_eq!(BLOCK_DIMENSIONS[0], [64, 64, 6, 6]);
    }

    #[test]
    fn test_block_dimensions_64x4() {
        // BS_64x4 = index 10 (new in AV2)
        assert_eq!(BLOCK_DIMENSIONS[10], [16, 1, 4, 0]);
    }

    #[test]
    fn test_cdef_directions_count() {
        assert_eq!(CDEF_DIRECTIONS.len(), 12);
    }

    #[test]
    fn test_layouts() {
        assert_eq!(LAYOUTS[0], PixelLayout::I420);
        assert_eq!(LAYOUTS[1], PixelLayout::I400);
        assert_eq!(LAYOUTS[2], PixelLayout::I444);
        assert_eq!(LAYOUTS[3], PixelLayout::I422);
    }

    #[test]
    fn test_txfm_dimensions_count() {
        assert_eq!(TXFM_DIMENSIONS.len(), N_RECT_TX_SIZES);
    }

    #[test]
    fn test_tx_shift_count() {
        assert_eq!(TX_SHIFT.len(), N_RECT_TX_SIZES);
    }

    #[test]
    fn test_mc_subpel_filters_count() {
        assert_eq!(MC_SUBPEL_FILTERS.len(), 6);
        assert_eq!(MC_SUBPEL_FILTERS[0].len(), 15);
    }

    #[test]
    fn test_deblock_side_thresholds_count() {
        assert_eq!(DEBLOCK_SIDE_THRESHOLDS.len(), 296);
    }

    #[test]
    fn test_dr_intra_derivative_count() {
        assert_eq!(DR_INTRA_DERIVATIVE.len(), 90);
    }

    #[test]
    fn test_div_recip_count() {
        assert_eq!(DIV_RECIP.len(), 129);
    }

    #[test]
    fn test_tx_part_tbl_count() {
        assert_eq!(TX_PART_TBL.len(), N_BS_SIZES);
    }

    #[test]
    fn test_tx_part_tbl_4x4() {
        assert_eq!(TX_PART_TBL[30][0], 0); // Bs4x4 -> TX_4X4
        assert_eq!(TX_PART_TBL[30][1], -1);
    }

    #[test]
    fn test_tx_part_tbl_64x64() {
        assert_eq!(TX_PART_TBL[6][0], 4); // Bs64x64 -> TX_64X64
        assert_eq!(TX_PART_TBL[6][1], 3); // TX_32X32
    }

    #[test]
    fn test_tx_part_tbl_large_blocks() {
        for i in 0..=5 {
            assert_eq!(TX_PART_TBL[i][0], 4); // TX_64X64
            assert_eq!(TX_PART_TBL[i][1], -1);
        }
    }
}