Libav 0.7.1
|
00001 /* 00002 * Real Audio 1.0 (14.4K) 00003 * Copyright (c) 2003 the ffmpeg project 00004 * 00005 * This file is part of Libav. 00006 * 00007 * Libav is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * Libav is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with Libav; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00020 */ 00021 00022 #include <stdint.h> 00023 #include "avcodec.h" 00024 #include "celp_filters.h" 00025 #include "ra144.h" 00026 00027 const int16_t ff_gain_val_tab[256][3] = { 00028 { 541, 956, 768}, { 877, 581, 568}, { 675,1574, 635}, {1248,1464, 668}, 00029 {1246, 839, 1394}, {2560,1386, 991}, { 925, 687, 608}, {2208, 797, 1144}, 00030 { 535, 832, 799}, { 762, 605, 1154}, { 832,1122, 1003}, {1180, 687, 1176}, 00031 {1292, 901, 732}, {1656, 689, 896}, {1750,1248, 848}, {2284, 942, 1022}, 00032 { 824,1472, 643}, { 517, 765, 512}, { 562,1816, 1522}, { 694,1826, 2700}, 00033 { 704, 524, 672}, {1442, 757, 2232}, { 884, 551, 1266}, {2232,1007, 1692}, 00034 { 932, 746, 777}, {1132, 822, 926}, {1226, 771, 611}, {2948,1342, 1008}, 00035 {1302, 594, 1158}, {1602, 636, 1128}, {3408, 910, 1438}, {1996, 614, 575}, 00036 { 665, 935, 628}, { 631,1192, 829}, { 644, 926, 1052}, { 879, 988, 1226}, 00037 { 941,2768, 2772}, { 565,1344, 2304}, { 547, 628, 740}, { 639, 532, 1074}, 00038 { 955,1208, 598}, {1124,1160, 900}, {1206, 899, 1242}, { 746, 533, 624}, 00039 {1458,1028, 735}, {1706,1102, 692}, {1898,1018, 1004}, {2176, 988, 735}, 00040 {1578, 782, 1642}, { 897, 516, 754}, {2068, 702, 1656}, {2344, 818, 1526}, 00041 { 907, 652, 592}, {1056, 652, 642}, {2124,1416, 780}, {2664,1250, 727}, 00042 {1894, 727, 1108}, {2196, 657, 981}, {4840, 920, 1704}, {4992,1238, 983}, 00043 {2420, 909, 1094}, {2760, 935, 1032}, {2800, 612, 853}, {3068, 832, 574}, 00044 { 523,1796, 923}, { 722,1916, 1382}, {1226,1542, 928}, { 758, 757, 584}, 00045 { 512,1134, 577}, { 615,1276, 698}, { 574,2568, 2356}, { 993,2728, 3512}, 00046 { 539, 890, 913}, { 694, 928, 1088}, { 805, 600, 1360}, {2160, 951, 3128}, 00047 { 816, 950, 590}, { 955, 847, 811}, {1094, 883, 556}, {1304, 888, 604}, 00048 { 863,1170, 855}, {1023, 997, 1032}, { 932,1228, 1280}, { 627, 564, 573}, 00049 { 876, 900, 1448}, {1030, 857, 1792}, {1294, 953, 1758}, {1612, 854, 1714}, 00050 {1090,1166, 631}, {1314,1202, 751}, {1480, 905, 795}, {1682,1016, 568}, 00051 {1494,1178, 983}, { 878, 613, 526}, {1728,1446, 779}, {2136,1348, 774}, 00052 { 950, 649, 939}, {1180, 703, 899}, {1236, 527, 1158}, {1450, 647, 972}, 00053 {1282, 647, 707}, {1460, 663, 644}, {1614, 572, 578}, {3516,1222, 821}, 00054 {2668, 729, 1682}, {3128, 585, 1502}, {3208, 733, 976}, {6800, 871, 1416}, 00055 {3480, 743, 1408}, {3764, 899, 1170}, {3772, 632, 875}, {4092, 732, 638}, 00056 {3112, 753, 2620}, {3372, 945, 1890}, {3768, 969, 2288}, {2016, 559, 854}, 00057 {1736, 729, 787}, {1940, 686, 547}, {2140, 635, 674}, {4480,1272, 828}, 00058 {3976, 592, 1666}, {4384, 621, 1388}, {4400, 801, 955}, {4656, 522, 646}, 00059 {4848, 625, 1636}, {4984, 591, 874}, {5352, 535, 1001}, {11216,938, 1184}, 00060 { 925,3280, 1476}, { 735,1580, 1088}, {1150,1576, 674}, { 655, 783, 528}, 00061 { 527,2052, 1354}, { 782,1704, 1880}, { 578, 910, 1026}, { 692, 882, 1468}, 00062 { 586, 683, 715}, { 739, 609, 717}, { 778, 773, 697}, { 922, 785, 813}, 00063 { 766, 651, 984}, { 978, 596, 1030}, {1070, 757, 1080}, {1324, 687, 1178}, 00064 {1108,2144, 979}, { 723, 982, 690}, { 936, 956, 527}, {1180,1002, 547}, 00065 { 517,1306, 825}, { 832,1184, 974}, {1024, 957, 903}, {1262,1090, 906}, 00066 {1028, 720, 649}, {1192, 679, 694}, {2468,1480, 979}, {2844,1370, 877}, 00067 {1310, 835, 848}, {1508, 839, 698}, {1742,1030, 769}, {1910, 852, 573}, 00068 {1280, 859, 1174}, {1584, 863, 1108}, {1686, 708, 1364}, {1942, 768, 1104}, 00069 { 891, 536, 690}, {1016, 560, 663}, {2172, 870, 1348}, {2404, 999, 1170}, 00070 {1890, 966, 889}, {2116, 912, 777}, {2296,1020, 714}, {4872,1844, 932}, 00071 {2392, 778, 929}, {2604, 772, 744}, {2764, 957, 722}, {5832,1532, 984}, 00072 {2188, 519, 1264}, {2332, 532, 922}, {5064, 995, 2412}, {2708, 571, 874}, 00073 {2408, 545, 666}, {5016,1084, 875}, {5376, 983, 1196}, {5536, 979, 730}, 00074 {5344, 634, 1744}, {5688, 706, 1348}, {5912, 977, 1190}, {6072, 905, 763}, 00075 {6048, 582, 1526}, {11968,1013,1816}, {12864,937, 1900}, {12560,1086, 998}, 00076 {1998, 684, 1884}, {2504, 633, 1992}, {1252, 567, 835}, {1478, 571, 973}, 00077 {2620, 769, 1414}, {2808, 952, 1142}, {2908, 712, 1028}, {2976, 686, 741}, 00078 {1462, 552, 714}, {3296, 991, 1452}, {1590, 615, 544}, {3480,1150, 824}, 00079 {3212, 832, 923}, {3276, 839, 531}, {3548, 786, 852}, {3732, 764, 570}, 00080 {5728, 906, 2616}, {6272, 804, 2252}, {3096, 535, 876}, {3228, 598, 649}, 00081 {6536, 759, 1436}, {6648, 993, 846}, {6864, 567, 1210},{14016,1012, 1302}, 00082 {3408, 548, 1098}, {7160,1008, 1742}, {7136,1000, 1182}, {7480,1032, 836}, 00083 {7448, 612, 1552}, {7744, 614, 816}, {8384, 777, 1438}, {8784, 694, 786}, 00084 { 882,1508, 1068}, { 597, 837, 766}, {1270, 954, 1408}, { 803, 550, 798}, 00085 {1398,1308, 798}, {1848,1534, 738}, { 970, 675, 608}, {1264, 706, 684}, 00086 {1716, 767, 1126}, {2108, 765, 1404}, {2236, 924, 1003}, {2472,1048, 611}, 00087 { 999, 942, 963}, {1094, 857, 935}, {2936, 926, 1138}, {1934, 746, 551}, 00088 {3336, 633, 1762}, {3764, 701, 1454}, {1890, 564, 636}, {4096,1126, 793}, 00089 {3936, 556, 1140}, {3936, 540, 740}, {4216, 764, 874}, {8480,1328, 1014}, 00090 {2184, 515, 1042}, {4432, 934, 1344}, {4784, 945, 1112}, {5016,1062, 733}, 00091 {9216,1020, 2028}, {9968, 924, 1188}, {5424, 909, 1206}, {6512, 744, 1086} 00092 }; 00093 00094 const uint8_t ff_gain_exp_tab[256] = { 00095 15, 15, 15, 15, 15, 16, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 00096 14, 13, 14, 14, 13, 14, 13, 14, 13, 13, 13, 14, 13, 13, 14, 13, 00097 13, 13, 13, 13, 14, 13, 12, 12, 13, 13, 13, 12, 13, 13, 13, 13, 00098 13, 12, 13, 13, 12, 12, 13, 13, 13, 13, 14, 14, 13, 13, 13, 13, 00099 13, 13, 13, 12, 12, 12, 13, 13, 12, 12, 12, 13, 12, 12, 12, 12, 00100 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 00101 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 13, 13, 13, 13, 00102 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 00103 13, 12, 12, 11, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 00104 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 11, 11, 11, 11, 00105 12, 12, 12, 12, 11, 11, 12, 12, 12, 12, 12, 13, 12, 12, 12, 13, 00106 12, 12, 13, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 00107 12, 12, 11, 11, 12, 12, 12, 12, 11, 12, 11, 12, 12, 12, 12, 12, 00108 13, 13, 12, 12, 13, 13, 13, 14, 12, 13, 13, 13, 13, 13, 13, 13, 00109 11, 10, 11, 10, 11, 11, 10, 10, 11, 11, 11, 11, 10, 9, 11, 10, 00110 12, 12, 11, 12, 12, 12, 12, 13, 11, 12, 12, 12, 13, 13, 12, 12 00111 }; 00112 00113 const int8_t ff_cb1_vects[128][40]={ 00114 { 00115 38, -4, 15, -4, 14, -13, 12, -11, -2, -6, 00116 -6, -11, -45, -16, -11, -13, -7, 6, -12, 4, 00117 -20, 3, -16, 12, -1, 12, 46, 24, 0, 33, 00118 -3, 9, -12, -12, -8, -7, 17, -6, 0, -2, 00119 }, { 00120 60, -16, 3, -22, 10, -32, 0, -28, -17, -18, 00121 -3, -25, -37, -23, -10, 3, 2, 3, 0, 3, 00122 -14, 0, -14, -1, 0, 2, 32, 9, -1, 25, 00123 7, 13, -5, 13, 8, 1, 2, 8, -10, 6, 00124 }, { 00125 27, -12, 28, -2, 6, -7, 15, 9, -11, 1, 00126 -13, -11, -40, 4, -29, -14, -19, -5, -23, -8, 00127 -30, -13, -17, 0, -14, 12, 34, 20, -2, 25, 00128 2, -16, -4, -12, 15, 16, 29, 7, 24, 10, 00129 }, { 00130 49, -24, 16, -20, 2, -26, 2, -7, -25, -10, 00131 -11, -25, -32, -3, -27, 2, -8, -8, -11, -9, 00132 -24, -17, -16, -14, -13, 2, 20, 5, -4, 17, 00133 14, -12, 3, 13, 33, 25, 14, 23, 15, 19, 00134 }, { 00135 46, -6, 21, 8, -2, -16, -5, -8, -11, 4, 00136 8, 15, -24, 4, -2, -26, -3, -16, -16, -14, 00137 -9, -2, -1, 4, 19, 7, 36, 17, 9, 13, 00138 0, 31, -5, -12, 7, -8, 11, -15, -13, -4, 00139 }, { 00140 68, -18, 9, -9, -6, -35, -18, -25, -26, -7, 00141 10, 1, -16, -3, -1, -9, 6, -19, -4, -15, 00142 -4, -6, 0, -8, 20, -2, 23, 2, 7, 5, 00143 12, 35, 1, 13, 24, 0, -3, 0, -22, 4, 00144 }, { 00145 35, -14, 34, 10, -10, -10, -1, 12, -20, 12, 00146 0, 15, -18, 24, -20, -27, -14, -28, -27, -27, 00147 -20, -19, -2, -8, 5, 7, 25, 13, 5, 5, 00148 6, 5, 2, -12, 31, 15, 23, -1, 12, 8, 00149 }, { 00150 57, -26, 22, -7, -14, -28, -14, -3, -35, 0, 00151 3, 1, -11, 16, -18, -10, -4, -31, -15, -28, 00152 -14, -23, -1, -21, 7, -2, 11, -1, 3, -1, 00153 18, 9, 10, 13, 49, 24, 8, 14, 2, 16, 00154 }, { 00155 25, 15, 22, 11, 18, 4, 15, -22, 8, -2, 00156 -17, -9, -48, -20, -30, -17, -16, 11, -1, 16, 00157 2, 10, -5, 26, -2, -4, 22, 0, 2, 10, 00158 -6, 13, -14, 10, -23, 0, 10, -2, 1, 0, 00159 }, { 00160 47, 3, 11, -6, 15, -13, 2, -38, -6, -13, 00161 -15, -22, -40, -28, -28, 0, -5, 8, 10, 15, 00162 7, 7, -4, 13, -1, -14, 9, -14, 0, 2, 00163 4, 18, -7, 36, -6, 8, -3, 13, -7, 8, 00164 }, { 00165 14, 7, 36, 13, 10, 10, 18, 0, 0, 5, 00166 -25, -8, -43, 0, -48, -18, -27, 0, -12, 3, 00167 -7, -6, -7, 13, -15, -5, 11, -3, 0, 2, 00168 0, -12, -6, 10, 0, 23, 22, 11, 26, 12, 00169 }, { 00170 36, -5, 24, -4, 7, -7, 6, -17, -14, -5, 00171 -22, -22, -35, -8, -46, -1, -17, -3, 0, 2, 00172 -2, -10, -5, 0, -14, -15, -2, -18, -2, -4, 00173 11, -7, 1, 36, 18, 32, 7, 27, 17, 20, 00174 }, { 00175 33, 13, 29, 24, 1, 1, -2, -18, 0, 9, 00176 -3, 17, -27, 0, -21, -30, -12, -11, -5, -2, 00177 12, 4, 9, 19, 18, -9, 13, -6, 11, -8, 00178 -2, 35, -8, 10, -7, -1, 4, -11, -10, -2, 00179 }, { 00180 55, 1, 17, 6, -1, -16, -15, -35, -15, -2, 00181 0, 4, -19, -8, -20, -13, -1, -14, 7, -3, 00182 18, 0, 10, 5, 19, -19, 0, -21, 8, -16, 00183 9, 39, 0, 36, 10, 7, -9, 4, -20, 5, 00184 }, { 00185 22, 5, 42, 26, -6, 8, 1, 2, -9, 17, 00186 -10, 18, -21, 19, -39, -31, -23, -23, -16, -15, 00187 2, -12, 7, 6, 5, -9, 1, -10, 7, -16, 00188 4, 9, 0, 10, 17, 22, 16, 2, 14, 9, 00189 }, { 00190 44, -6, 30, 8, -9, -10, -11, -14, -23, 5, 00191 -8, 4, -14, 12, -37, -14, -12, -26, -4, -16, 00192 8, -16, 9, -7, 6, -19, -12, -25, 5, -24, 00193 15, 13, 8, 36, 34, 31, 1, 18, 4, 18, 00194 }, { 00195 -3, -5, -9, -7, 15, -1, 5, 13, 2, 12, 00196 5, 2, -21, -23, -2, -16, 0, 5, -6, 13, 00197 -23, 3, -32, 10, -15, 8, 44, 28, 9, 37, 00198 -2, 13, -9, -15, -12, -27, -7, -12, 0, -11, 00199 }, { 00200 18, -17, -21, -25, 11, -19, -6, -3, -11, 0, 00201 7, -11, -13, -31, -1, 0, 9, 1, 5, 12, 00202 -18, 0, -31, -2, -13, -1, 30, 14, 7, 29, 00203 9, 18, -1, 10, 4, -18, -22, 3, -10, -2, 00204 }, { 00205 -13, -13, 3, -5, 7, 4, 9, 34, -5, 20, 00206 -2, 3, -16, -3, -20, -17, -11, -7, -17, 0, 00207 -34, -13, -33, -2, -28, 8, 32, 24, 5, 29, 00208 3, -12, 0, -15, 11, -3, 3, 2, 24, 1, 00209 }, { 00210 8, -25, -8, -23, 3, -13, -3, 17, -20, 8, 00211 0, -10, -8, -11, -18, 0, -1, -10, -5, 0, 00212 -28, -17, -32, -15, -26, -1, 19, 9, 3, 21, 00213 15, -7, 6, 9, 29, 5, -10, 17, 15, 9, 00214 }, { 00215 4, -6, -3, 5, -1, -4, -11, 16, -6, 23, 00216 19, 29, 0, -3, 6, -30, 3, -17, -10, -5, 00217 -13, -2, -17, 3, 5, 3, 35, 21, 17, 17, 00218 2, 35, -2, -15, 3, -28, -13, -21, -13, -13, 00219 }, { 00220 26, -19, -15, -12, -5, -22, -24, 0, -21, 12, 00221 21, 15, 8, -11, 7, -12, 14, -20, 2, -6, 00222 -7, -6, -16, -9, 6, -5, 21, 7, 15, 10, 00223 13, 39, 5, 10, 20, -19, -28, -5, -22, -5, 00224 }, { 00225 -5, -15, 9, 7, -9, 2, -8, 37, -14, 31, 00226 11, 29, 5, 16, -11, -30, -7, -29, -21, -18, 00227 -23, -19, -18, -9, -7, 3, 23, 17, 14, 9, 00228 8, 9, 6, -15, 27, -4, -2, -6, 12, -1, 00229 }, { 00230 16, -27, -2, -10, -13, -16, -20, 20, -29, 20, 00231 14, 16, 13, 8, -9, -13, 2, -33, -9, -19, 00232 -17, -23, -17, -22, -6, -6, 9, 2, 12, 2, 00233 20, 13, 13, 10, 45, 4, -16, 8, 2, 7, 00234 }, { 00235 -16, 14, -2, 8, 20, 17, 9, 2, 14, 16, 00236 -6, 5, -24, -28, -21, -20, -8, 9, 4, 25, 00237 -1, 11, -22, 24, -15, -8, 21, 5, 11, 14, 00238 -5, 18, -11, 7, -27, -20, -14, -7, 1, -9, 00239 }, { 00240 6, 2, -14, -9, 16, -1, -3, -14, 0, 5, 00241 -3, -8, -16, -36, -19, -3, 1, 6, 17, 24, 00242 4, 7, -21, 11, -14, -18, 7, -9, 9, 7, 00243 6, 22, -3, 33, -10, -11, -28, 7, -7, 0, 00244 }, { 00245 -26, 6, 11, 10, 12, 23, 12, 23, 5, 24, 00246 -13, 5, -19, -8, -38, -21, -20, -2, -6, 12, 00247 -11, -5, -23, 11, -29, -9, 9, 0, 7, 6, 00248 1, -7, -2, 7, -3, 3, -2, 6, 27, 3, 00249 }, { 00250 -4, -6, 0, -7, 8, 4, 0, 6, -9, 13, 00251 -11, -7, -11, -15, -37, -4, -9, -5, 5, 11, 00252 -5, -9, -22, -1, -27, -18, -4, -14, 5, 0, 00253 12, -3, 4, 32, 14, 12, -17, 22, 17, 11, 00254 }, { 00255 -8, 12, 3, 21, 3, 14, -8, 5, 4, 28, 00256 7, 32, -2, -8, -12, -34, -4, -12, 1, 6, 00257 9, 4, -7, 17, 4, -13, 11, -1, 19, -4, 00258 0, 39, -4, 7, -11, -21, -20, -16, -10, -11, 00259 }, { 00260 13, 0, -8, 3, 0, -4, -21, -11, -9, 16, 00261 10, 18, 5, -16, -10, -16, 5, -15, 13, 5, 00262 15, 1, -6, 4, 6, -23, -2, -16, 17, -12, 00263 10, 44, 3, 33, 6, -12, -34, -1, -20, -3, 00264 }, { 00265 -18, 4, 17, 23, -4, 20, -4, 26, -3, 36, 00266 0, 32, 2, 12, -29, -34, -16, -24, -10, -6, 00267 0, -12, -8, 4, -8, -13, 0, -6, 16, -12, 00268 5, 13, 3, 7, 13, 3, -8, -2, 14, 0, 00269 }, { 00270 3, -7, 5, 5, -8, 2, -17, 9, -18, 24, 00271 2, 19, 10, 4, -28, -17, -5, -28, 2, -7, 00272 4, -15, -7, -8, -6, -23, -13, -21, 14, -20, 00273 17, 18, 11, 33, 30, 11, -23, 13, 5, 9, 00274 }, { 00275 60, 10, 7, -1, 9, -8, 6, -13, 2, -15, 00276 -1, -10, -13, -11, 15, 0, 6, 9, -1, 0, 00277 -13, 1, -11, -3, -13, 21, 13, 26, -7, 31, 00278 -10, -7, -16, -33, -31, -10, 22, -8, 1, -2, 00279 }, { 00280 82, -1, -4, -19, 6, -27, -6, -29, -12, -26, 00281 1, -24, -5, -18, 17, 17, 17, 6, 10, 0, 00282 -7, -2, -9, -16, -12, 11, 0, 11, -9, 23, 00283 0, -3, -8, -8, -13, -1, 8, 7, -7, 6, 00284 }, { 00285 49, 2, 21, 0, 1, -2, 9, 8, -6, -6, 00286 -8, -10, -8, 9, -2, 0, -4, -2, -13, -12, 00287 -23, -15, -12, -16, -26, 21, 2, 21, -11, 23, 00288 -4, -33, -7, -33, -6, 13, 34, 5, 27, 10, 00289 }, { 00290 71, -10, 9, -17, -1, -20, -3, -8, -21, -18, 00291 -6, -24, 0, 1, 0, 16, 6, -5, 0, -13, 00292 -17, -19, -11, -29, -25, 11, -11, 6, -13, 15, 00293 7, -29, 0, -8, 11, 22, 20, 21, 17, 18, 00294 }, { 00295 67, 8, 14, 11, -7, -11, -11, -9, -7, -3, 00296 13, 16, 8, 9, 24, -12, 10, -13, -5, -17, 00297 -2, -4, 3, -10, 6, 17, 4, 19, 0, 11, 00298 -6, 13, -9, -33, -14, -10, 16, -17, -10, -4, 00299 }, { 00300 90, -3, 2, -6, -10, -29, -24, -26, -21, -15, 00301 15, 2, 16, 1, 25, 4, 21, -16, 6, -18, 00302 3, -8, 5, -24, 8, 7, -9, 4, -1, 3, 00303 5, 18, -1, -7, 2, -1, 2, -1, -19, 3, 00304 }, { 00305 57, 0, 27, 13, -14, -5, -7, 11, -15, 4, 00306 5, 16, 13, 29, 6, -13, 0, -25, -16, -31, 00307 -12, -22, 2, -23, -6, 16, -7, 14, -2, 3, 00308 0, -12, 0, -33, 9, 13, 28, -3, 14, 7, 00309 }, { 00310 79, -11, 15, -4, -18, -23, -20, -5, -30, -7, 00311 7, 2, 21, 21, 8, 3, 10, -28, -4, -31, 00312 -6, -25, 3, -37, -4, 7, -20, 0, -4, -4, 00313 11, -7, 6, -8, 27, 22, 14, 12, 5, 16, 00314 }, { 00315 47, 30, 15, 14, 14, 9, 9, -23, 13, -10, 00316 -12, -7, -16, -15, -3, -3, -1, 14, 9, 12, 00317 9, 8, 0, 10, -14, 4, -9, 2, -5, 8, 00318 -13, -3, -18, -10, -45, -3, 16, -4, 4, 0, 00319 }, { 00320 69, 17, 3, -3, 10, -8, -3, -40, -1, -21, 00321 -10, -21, -8, -23, -1, 13, 8, 11, 21, 11, 00322 15, 4, 0, -2, -13, -5, -23, -12, -7, 0, 00323 -1, 0, -10, 14, -28, 5, 1, 11, -5, 7, 00324 }, { 00325 36, 21, 28, 16, 6, 16, 12, -2, 4, -2, 00326 -20, -7, -11, 4, -20, -4, -12, 2, -1, 0, 00327 0, -8, -2, -2, -27, 4, -21, -2, -9, 0, 00328 -6, -29, -9, -10, -21, 21, 28, 10, 29, 11, 00329 }, { 00330 58, 9, 16, -1, 2, -2, 0, -19, -10, -13, 00331 -17, -21, -3, -3, -19, 12, -2, 0, 10, -1, 00332 5, -12, 0, -15, -26, -5, -34, -16, -11, -7, 00333 4, -25, -2, 14, -3, 29, 13, 25, 20, 20, 00334 }, { 00335 55, 28, 21, 27, -2, 7, -8, -20, 4, 1, 00336 1, 18, 5, 4, 5, -16, 2, -8, 5, -5, 00337 19, 2, 14, 3, 6, 0, -18, -4, 2, -11, 00338 -8, 18, -11, -10, -29, -3, 10, -13, -8, -3, 00339 }, { 00340 77, 16, 9, 9, -6, -11, -21, -37, -10, -10, 00341 4, 5, 13, -3, 7, 0, 13, -11, 17, -6, 00342 25, -1, 15, -9, 7, -9, -32, -19, 0, -18, 00343 2, 22, -3, 15, -12, 5, -4, 2, -17, 5, 00344 }, { 00345 44, 20, 34, 29, -10, 13, -4, 0, -4, 9, 00346 -5, 19, 10, 24, -11, -17, -8, -20, -5, -19, 00347 9, -14, 12, -9, -6, 0, -30, -9, 0, -19, 00348 -2, -7, -2, -10, -5, 20, 21, 1, 17, 9, 00349 }, { 00350 66, 8, 23, 11, -14, -5, -17, -16, -19, -2, 00351 -3, 5, 18, 17, -10, 0, 1, -23, 6, -20, 00352 15, -18, 14, -22, -5, -10, -44, -23, -2, -26, 00353 9, -3, 4, 14, 12, 29, 7, 16, 7, 18, 00354 }, { 00355 18, 9, -17, -4, 11, 3, 0, 11, 7, 4, 00356 10, 3, 10, -18, 24, -3, 14, 7, 4, 10, 00357 -16, 1, -27, -4, -27, 17, 12, 30, 0, 35, 00358 -9, -3, -12, -36, -35, -30, -2, -13, 2, -11, 00359 }, { 00360 40, -2, -29, -22, 7, -14, -12, -5, -7, -7, 00361 12, -9, 18, -26, 26, 14, 24, 4, 16, 9, 00362 -10, -2, -26, -18, -26, 7, -1, 15, -1, 27, 00363 2, 0, -4, -11, -17, -21, -16, 1, -7, -3, 00364 }, { 00365 8, 1, -3, -2, 3, 10, 3, 32, -1, 12, 00366 2, 4, 15, 1, 7, -3, 2, -4, -6, -3, 00367 -26, -15, -29, -17, -40, 17, 0, 26, -2, 27, 00368 -2, -29, -4, -36, -10, -6, 9, 0, 27, 0, 00369 }, { 00370 30, -11, -15, -20, 0, -8, -9, 15, -15, 0, 00371 5, -9, 23, -6, 8, 13, 13, -7, 5, -3, 00372 -20, -19, -27, -31, -39, 7, -13, 11, -4, 19, 00373 8, -25, 3, -11, 7, 2, -4, 16, 18, 9, 00374 }, { 00375 26, 7, -11, 8, -5, 1, -17, 14, -1, 15, 00376 24, 30, 32, 1, 33, -16, 18, -14, 0, -8, 00377 -6, -4, -12, -12, -6, 13, 2, 23, 8, 15, 00378 -4, 17, -5, -36, -18, -30, -8, -22, -10, -14, 00379 }, { 00380 48, -4, -23, -9, -9, -17, -30, -2, -16, 3, 00381 26, 16, 40, -6, 35, 1, 28, -17, 12, -9, 00382 0, -8, -11, -25, -5, 3, -10, 8, 6, 7, 00383 6, 22, 1, -11, -1, -21, -22, -7, -19, -5, 00384 }, { 00385 15, 0, 2, 10, -13, 7, -14, 35, -10, 23, 00386 16, 31, 37, 21, 16, -17, 6, -26, -10, -21, 00387 -16, -21, -13, -25, -19, 13, -8, 19, 5, 7, 00388 1, -8, 2, -36, 5, -6, 3, -8, 15, -1, 00389 }, { 00390 37, -12, -9, -7, -17, -11, -26, 18, -25, 12, 00391 19, 17, 45, 14, 17, 0, 17, -30, 1, -22, 00392 -10, -25, -12, -38, -18, 3, -22, 4, 3, 0, 00393 13, -3, 10, -11, 23, 2, -10, 7, 5, 7, 00394 }, { 00395 5, 29, -9, 11, 15, 22, 3, 0, 18, 8, 00396 -1, 6, 7, -23, 6, -6, 5, 12, 15, 21, 00397 5, 8, -17, 9, -28, 0, -11, 6, 2, 12, 00398 -11, 0, -14, -13, -49, -22, -8, -9, 4, -9, 00399 }, { 00400 27, 16, -21, -6, 12, 3, -9, -16, 3, -2, 00401 1, -7, 15, -31, 7, 10, 16, 9, 27, 21, 00402 11, 5, -16, -3, -26, -9, -24, -7, 0, 4, 00403 0, 4, -6, 11, -32, -14, -23, 6, -5, -1, 00404 }, { 00405 -4, 20, 3, 13, 8, 28, 6, 21, 10, 16, 00406 -8, 7, 12, -3, -11, -7, -5, 0, 4, 8, 00407 -4, -8, -18, -3, -41, 0, -22, 2, 0, 4, 00408 -5, -25, -6, -14, -25, 1, 2, 4, 29, 2, 00409 }, { 00410 17, 8, -8, -4, 4, 10, -6, 5, -4, 5, 00411 -6, -6, 20, -10, -9, 9, 4, -2, 16, 7, 00412 1, -12, -17, -16, -39, -9, -36, -12, -2, -3, 00413 6, -21, 1, 11, -7, 10, -11, 20, 20, 11, 00414 }, { 00415 13, 27, -3, 24, -1, 19, -14, 3, 9, 20, 00416 12, 33, 29, -3, 15, -20, 9, -9, 11, 3, 00417 16, 2, -2, 2, -7, -3, -20, 0, 10, -7, 00418 -7, 22, -7, -13, -33, -23, -14, -18, -7, -12, 00419 }, { 00420 35, 15, -15, 6, -4, 1, -27, -12, -5, 8, 00421 15, 19, 37, -11, 16, -2, 20, -12, 23, 2, 00422 22, -1, -1, -11, -5, -13, -34, -14, 8, -14, 00423 4, 26, 0, 11, -16, -14, -29, -2, -17, -3, 00424 }, { 00425 3, 19, 9, 26, -8, 26, -10, 24, 0, 28, 00426 5, 33, 34, 17, -2, -20, -1, -22, 0, -10, 00427 6, -14, -3, -10, -20, -4, -32, -4, 7, -15, 00428 0, -3, 0, -13, -9, 0, -3, -4, 17, 0, 00429 }, { 00430 25, 7, -2, 8, -12, 7, -23, 8, -13, 16, 00431 7, 20, 42, 9, 0, -3, 9, -25, 12, -10, 00432 12, -18, -2, -24, -19, -13, -46, -19, 5, -22, 00433 10, 0, 8, 11, 8, 9, -17, 11, 7, 8, 00434 }, { 00435 -25, -7, 2, -8, 12, -7, 23, -8, 13, -16, 00436 -7, -20, -42, -9, 0, 3, -9, 25, -12, 10, 00437 -12, 18, 2, 24, 19, 13, 46, 19, -5, 22, 00438 -10, 0, -8, -11, -8, -9, 17, -11, -7, -8, 00439 }, { 00440 -3, -19, -9, -26, 8, -26, 10, -24, 0, -28, 00441 -5, -33, -34, -17, 2, 20, 1, 22, 0, 10, 00442 -6, 14, 3, 10, 20, 4, 32, 4, -7, 15, 00443 0, 3, 0, 13, 9, 0, 3, 4, -17, 0, 00444 }, { 00445 -35, -15, 15, -6, 4, -1, 27, 12, 5, -8, 00446 -15, -19, -37, 11, -16, 2, -20, 12, -23, -2, 00447 -22, 1, 1, 11, 5, 13, 34, 14, -8, 14, 00448 -4, -26, 0, -11, 16, 14, 29, 2, 17, 3, 00449 }, { 00450 -13, -27, 3, -24, 1, -19, 14, -3, -9, -20, 00451 -12, -33, -29, 3, -15, 20, -9, 9, -11, -3, 00452 -16, -2, 2, -2, 7, 3, 20, 0, -10, 7, 00453 7, -22, 7, 13, 33, 23, 14, 18, 7, 12, 00454 }, { 00455 -17, -8, 8, 4, -4, -10, 6, -5, 4, -5, 00456 6, 6, -20, 10, 9, -9, -4, 2, -16, -7, 00457 -1, 12, 17, 16, 39, 9, 36, 12, 2, 3, 00458 -6, 21, -1, -11, 7, -10, 11, -20, -20, -11, 00459 }, { 00460 4, -20, -3, -13, -8, -28, -6, -21, -10, -16, 00461 8, -7, -12, 3, 11, 7, 5, 0, -4, -8, 00462 4, 8, 18, 3, 41, 0, 22, -2, 0, -4, 00463 5, 25, 6, 14, 25, -1, -2, -4, -29, -2, 00464 }, { 00465 -27, -16, 21, 6, -12, -3, 9, 16, -3, 2, 00466 -1, 7, -15, 31, -7, -10, -16, -9, -27, -21, 00467 -11, -5, 16, 3, 26, 9, 24, 7, 0, -4, 00468 0, -4, 6, -11, 32, 14, 23, -6, 5, 1, 00469 }, { 00470 -5, -29, 9, -11, -15, -22, -3, 0, -18, -8, 00471 1, -6, -7, 23, -6, 6, -5, -12, -15, -21, 00472 -5, -8, 17, -9, 28, 0, 11, -6, -2, -12, 00473 11, 0, 14, 13, 49, 22, 8, 9, -4, 9, 00474 }, { 00475 -37, 12, 9, 7, 17, 11, 26, -18, 25, -12, 00476 -19, -17, -45, -14, -17, 0, -17, 30, -1, 22, 00477 10, 25, 12, 38, 18, -3, 22, -4, -3, 0, 00478 -13, 3, -10, 11, -23, -2, 10, -7, -5, -7, 00479 }, { 00480 -15, 0, -2, -10, 13, -7, 14, -35, 10, -23, 00481 -16, -31, -37, -21, -16, 17, -6, 26, 10, 21, 00482 16, 21, 13, 25, 19, -13, 8, -19, -5, -7, 00483 -1, 8, -2, 36, -5, 6, -3, 8, -15, 1, 00484 }, { 00485 -48, 4, 23, 9, 9, 17, 30, 2, 16, -3, 00486 -26, -16, -40, 6, -35, -1, -28, 17, -12, 9, 00487 0, 8, 11, 25, 5, -3, 10, -8, -6, -7, 00488 -6, -22, -1, 11, 1, 21, 22, 7, 19, 5, 00489 }, { 00490 -26, -7, 11, -8, 5, -1, 17, -14, 1, -15, 00491 -24, -30, -32, -1, -33, 16, -18, 14, 0, 8, 00492 6, 4, 12, 12, 6, -13, -2, -23, -8, -15, 00493 4, -17, 5, 36, 18, 30, 8, 22, 10, 14, 00494 }, { 00495 -30, 11, 15, 20, 0, 8, 9, -15, 15, 0, 00496 -5, 9, -23, 6, -8, -13, -13, 7, -5, 3, 00497 20, 19, 27, 31, 39, -7, 13, -11, 4, -19, 00498 -8, 25, -3, 11, -7, -2, 4, -16, -18, -9, 00499 }, { 00500 -8, -1, 3, 2, -3, -10, -3, -32, 1, -12, 00501 -2, -4, -15, -1, -7, 3, -2, 4, 6, 3, 00502 26, 15, 29, 17, 40, -17, 0, -26, 2, -27, 00503 2, 29, 4, 36, 10, 6, -9, 0, -27, 0, 00504 }, { 00505 -40, 2, 29, 22, -7, 14, 12, 5, 7, 7, 00506 -12, 9, -18, 26, -26, -14, -24, -4, -16, -9, 00507 10, 2, 26, 18, 26, -7, 1, -15, 1, -27, 00508 -2, 0, 4, 11, 17, 21, 16, -1, 7, 3, 00509 }, { 00510 -18, -9, 17, 4, -11, -3, 0, -11, -7, -4, 00511 -10, -3, -10, 18, -24, 3, -14, -7, -4, -10, 00512 16, -1, 27, 4, 27, -17, -12, -30, 0, -35, 00513 9, 3, 12, 36, 35, 30, 2, 13, -2, 11, 00514 }, { 00515 -66, -8, -23, -11, 14, 5, 17, 16, 19, 2, 00516 3, -5, -18, -17, 10, 0, -1, 23, -6, 20, 00517 -15, 18, -14, 22, 5, 10, 44, 23, 2, 26, 00518 -9, 3, -4, -14, -12, -29, -7, -16, -7, -18, 00519 }, { 00520 -44, -20, -34, -29, 10, -13, 4, 0, 4, -9, 00521 5, -19, -10, -24, 11, 17, 8, 20, 5, 19, 00522 -9, 14, -12, 9, 6, 0, 30, 9, 0, 19, 00523 2, 7, 2, 10, 5, -20, -21, -1, -17, -9, 00524 }, { 00525 -77, -16, -9, -9, 6, 11, 21, 37, 10, 10, 00526 -4, -5, -13, 3, -7, 0, -13, 11, -17, 6, 00527 -25, 1, -15, 9, -7, 9, 32, 19, 0, 18, 00528 -2, -22, 3, -15, 12, -5, 4, -2, 17, -5, 00529 }, { 00530 -55, -28, -21, -27, 2, -7, 8, 20, -4, -1, 00531 -1, -18, -5, -4, -5, 16, -2, 8, -5, 5, 00532 -19, -2, -14, -3, -6, 0, 18, 4, -2, 11, 00533 8, -18, 11, 10, 29, 3, -10, 13, 8, 3, 00534 }, { 00535 -58, -9, -16, 1, -2, 2, 0, 19, 10, 13, 00536 17, 21, 3, 3, 19, -12, 2, 0, -10, 1, 00537 -5, 12, 0, 15, 26, 5, 34, 16, 11, 7, 00538 -4, 25, 2, -14, 3, -29, -13, -25, -20, -20, 00539 }, { 00540 -36, -21, -28, -16, -6, -16, -12, 2, -4, 2, 00541 20, 7, 11, -4, 20, 4, 12, -2, 1, 0, 00542 0, 8, 2, 2, 27, -4, 21, 2, 9, 0, 00543 6, 29, 9, 10, 21, -21, -28, -10, -29, -11, 00544 }, { 00545 -69, -17, -3, 3, -10, 8, 3, 40, 1, 21, 00546 10, 21, 8, 23, 1, -13, -8, -11, -21, -11, 00547 -15, -4, 0, 2, 13, 5, 23, 12, 7, 0, 00548 1, 0, 10, -14, 28, -5, -1, -11, 5, -7, 00549 }, { 00550 -47, -30, -15, -14, -14, -9, -9, 23, -13, 10, 00551 12, 7, 16, 15, 3, 3, 1, -14, -9, -12, 00552 -9, -8, 0, -10, 14, -4, 9, -2, 5, -8, 00553 13, 3, 18, 10, 45, 3, -16, 4, -4, 0, 00554 }, { 00555 -79, 11, -15, 4, 18, 23, 20, 5, 30, 7, 00556 -7, -2, -21, -21, -8, -3, -10, 28, 4, 31, 00557 6, 25, -3, 37, 4, -7, 20, 0, 4, 4, 00558 -11, 7, -6, 8, -27, -22, -14, -12, -5, -16, 00559 }, { 00560 -57, 0, -27, -13, 14, 5, 7, -11, 15, -4, 00561 -5, -16, -13, -29, -6, 13, 0, 25, 16, 31, 00562 12, 22, -2, 23, 6, -16, 7, -14, 2, -3, 00563 0, 12, 0, 33, -9, -13, -28, 3, -14, -7, 00564 }, { 00565 -90, 3, -2, 6, 10, 29, 24, 26, 21, 15, 00566 -15, -2, -16, -1, -25, -4, -21, 16, -6, 18, 00567 -3, 8, -5, 24, -8, -7, 9, -4, 1, -3, 00568 -5, -18, 1, 7, -2, 1, -2, 1, 19, -3, 00569 }, { 00570 -67, -8, -14, -11, 7, 11, 11, 9, 7, 3, 00571 -13, -16, -8, -9, -24, 12, -10, 13, 5, 17, 00572 2, 4, -3, 10, -6, -17, -4, -19, 0, -11, 00573 6, -13, 9, 33, 14, 10, -16, 17, 10, 4, 00574 }, { 00575 -71, 10, -9, 17, 1, 20, 3, 8, 21, 18, 00576 6, 24, 0, -1, 0, -16, -6, 5, 0, 13, 00577 17, 19, 11, 29, 25, -11, 11, -6, 13, -15, 00578 -7, 29, 0, 8, -11, -22, -20, -21, -17, -18, 00579 }, { 00580 -49, -2, -21, 0, -1, 2, -9, -8, 6, 6, 00581 8, 10, 8, -9, 2, 0, 4, 2, 13, 12, 00582 23, 15, 12, 16, 26, -21, -2, -21, 11, -23, 00583 4, 33, 7, 33, 6, -13, -34, -5, -27, -10, 00584 }, { 00585 -82, 1, 4, 19, -6, 27, 6, 29, 12, 26, 00586 -1, 24, 5, 18, -17, -17, -17, -6, -10, 0, 00587 7, 2, 9, 16, 12, -11, 0, -11, 9, -23, 00588 0, 3, 8, 8, 13, 1, -8, -7, 7, -6, 00589 }, { 00590 -60, -10, -7, 1, -9, 8, -6, 13, -2, 15, 00591 1, 10, 13, 11, -15, 0, -6, -9, 1, 0, 00592 13, -1, 11, 3, 13, -21, -13, -26, 7, -31, 00593 10, 7, 16, 33, 31, 10, -22, 8, -1, 2, 00594 }, { 00595 -3, 7, -5, -5, 8, -2, 17, -9, 18, -24, 00596 -2, -19, -10, -4, 28, 17, 5, 28, -2, 7, 00597 -4, 15, 7, 8, 6, 23, 13, 21, -14, 20, 00598 -17, -18, -11, -33, -30, -11, 23, -13, -5, -9, 00599 }, { 00600 18, -4, -17, -23, 4, -20, 4, -26, 3, -36, 00601 0, -32, -2, -12, 29, 34, 16, 24, 10, 6, 00602 0, 12, 8, -4, 8, 13, 0, 6, -16, 12, 00603 -5, -13, -3, -7, -13, -3, 8, 2, -14, 0, 00604 }, { 00605 -13, 0, 8, -3, 0, 4, 21, 11, 9, -16, 00606 -10, -18, -5, 16, 10, 16, -5, 15, -13, -5, 00607 -15, -1, 6, -4, -6, 23, 2, 16, -17, 12, 00608 -10, -44, -3, -33, -6, 12, 34, 1, 20, 3, 00609 }, { 00610 8, -12, -3, -21, -3, -14, 8, -5, -4, -28, 00611 -7, -32, 2, 8, 12, 34, 4, 12, -1, -6, 00612 -9, -4, 7, -17, -4, 13, -11, 1, -19, 4, 00613 0, -39, 4, -7, 11, 21, 20, 16, 10, 11, 00614 }, { 00615 4, 6, 0, 7, -8, -4, 0, -6, 9, -13, 00616 11, 7, 11, 15, 37, 4, 9, 5, -5, -11, 00617 5, 9, 22, 1, 27, 18, 4, 14, -5, 0, 00618 -12, 3, -4, -32, -14, -12, 17, -22, -17, -11, 00619 }, { 00620 26, -6, -11, -10, -12, -23, -12, -23, -5, -24, 00621 13, -5, 19, 8, 38, 21, 20, 2, 6, -12, 00622 11, 5, 23, -11, 29, 9, -9, 0, -7, -6, 00623 -1, 7, 2, -7, 3, -3, 2, -6, -27, -3, 00624 }, { 00625 -6, -2, 14, 9, -16, 1, 3, 14, 0, -5, 00626 3, 8, 16, 36, 19, 3, -1, -6, -17, -24, 00627 -4, -7, 21, -11, 14, 18, -7, 9, -9, -7, 00628 -6, -22, 3, -33, 10, 11, 28, -7, 7, 0, 00629 }, { 00630 16, -14, 2, -8, -20, -17, -9, -2, -14, -16, 00631 6, -5, 24, 28, 21, 20, 8, -9, -4, -25, 00632 1, -11, 22, -24, 15, 8, -21, -5, -11, -14, 00633 5, -18, 11, -7, 27, 20, 14, 7, -1, 9, 00634 }, { 00635 -16, 27, 2, 10, 13, 16, 20, -20, 29, -20, 00636 -14, -16, -13, -8, 9, 13, -2, 33, 9, 19, 00637 17, 23, 17, 22, 6, 6, -9, -2, -12, -2, 00638 -20, -13, -13, -10, -45, -4, 16, -8, -2, -7, 00639 }, { 00640 5, 15, -9, -7, 9, -2, 8, -37, 14, -31, 00641 -11, -29, -5, -16, 11, 30, 7, 29, 21, 18, 00642 23, 19, 18, 9, 7, -3, -23, -17, -14, -9, 00643 -8, -9, -6, 15, -27, 4, 2, 6, -12, 1, 00644 }, { 00645 -26, 19, 15, 12, 5, 22, 24, 0, 21, -12, 00646 -21, -15, -8, 11, -7, 12, -14, 20, -2, 6, 00647 7, 6, 16, 9, -6, 5, -21, -7, -15, -10, 00648 -13, -39, -5, -10, -20, 19, 28, 5, 22, 5, 00649 }, { 00650 -4, 6, 3, -5, 1, 4, 11, -16, 6, -23, 00651 -19, -29, 0, 3, -6, 30, -3, 17, 10, 5, 00652 13, 2, 17, -3, -5, -3, -35, -21, -17, -17, 00653 -2, -35, 2, 15, -3, 28, 13, 21, 13, 13, 00654 }, { 00655 -8, 25, 8, 23, -3, 13, 3, -17, 20, -8, 00656 0, 10, 8, 11, 18, 0, 1, 10, 5, 0, 00657 28, 17, 32, 15, 26, 1, -19, -9, -3, -21, 00658 -15, 7, -6, -9, -29, -5, 10, -17, -15, -9, 00659 }, { 00660 13, 13, -3, 5, -7, -4, -9, -34, 5, -20, 00661 2, -3, 16, 3, 20, 17, 11, 7, 17, 0, 00662 34, 13, 33, 2, 28, -8, -32, -24, -5, -29, 00663 -3, 12, 0, 15, -11, 3, -3, -2, -24, -1, 00664 }, { 00665 -18, 17, 21, 25, -11, 19, 6, 3, 11, 0, 00666 -7, 11, 13, 31, 1, 0, -9, -1, -5, -12, 00667 18, 0, 31, 2, 13, 1, -30, -14, -7, -29, 00668 -9, -18, 1, -10, -4, 18, 22, -3, 10, 2, 00669 }, { 00670 3, 5, 9, 7, -15, 1, -5, -13, -2, -12, 00671 -5, -2, 21, 23, 2, 16, 0, -5, 6, -13, 00672 23, -3, 32, -10, 15, -8, -44, -28, -9, -37, 00673 2, -13, 9, 15, 12, 27, 7, 12, 0, 11, 00674 }, { 00675 -44, 6, -30, -8, 9, 10, 11, 14, 23, -5, 00676 8, -4, 14, -12, 37, 14, 12, 26, 4, 16, 00677 -8, 16, -9, 7, -6, 19, 12, 25, -5, 24, 00678 -15, -13, -8, -36, -34, -31, -1, -18, -4, -18, 00679 }, { 00680 -22, -5, -42, -26, 6, -8, -1, -2, 9, -17, 00681 10, -18, 21, -19, 39, 31, 23, 23, 16, 15, 00682 -2, 12, -7, -6, -5, 9, -1, 10, -7, 16, 00683 -4, -9, 0, -10, -17, -22, -16, -2, -14, -9, 00684 }, { 00685 -55, -1, -17, -6, 1, 16, 15, 35, 15, 2, 00686 0, -4, 19, 8, 20, 13, 1, 14, -7, 3, 00687 -18, 0, -10, -5, -19, 19, 0, 21, -8, 16, 00688 -9, -39, 0, -36, -10, -7, 9, -4, 20, -5, 00689 }, { 00690 -33, -13, -29, -24, -1, -1, 2, 18, 0, -9, 00691 3, -17, 27, 0, 21, 30, 12, 11, 5, 2, 00692 -12, -4, -9, -19, -18, 9, -13, 6, -11, 8, 00693 2, -35, 8, -10, 7, 1, -4, 11, 10, 2, 00694 }, { 00695 -36, 5, -24, 4, -7, 7, -6, 17, 14, 5, 00696 22, 22, 35, 8, 46, 1, 17, 3, 0, -2, 00697 2, 10, 5, 0, 14, 15, 2, 18, 2, 4, 00698 -11, 7, -1, -36, -18, -32, -7, -27, -17, -20, 00699 }, { 00700 -14, -7, -36, -13, -10, -10, -18, 0, 0, -5, 00701 25, 8, 43, 0, 48, 18, 27, 0, 12, -3, 00702 7, 6, 7, -13, 15, 5, -11, 3, 0, -2, 00703 0, 12, 6, -10, 0, -23, -22, -11, -26, -12, 00704 }, { 00705 -47, -3, -11, 6, -15, 13, -2, 38, 6, 13, 00706 15, 22, 40, 28, 28, 0, 5, -8, -10, -15, 00707 -7, -7, 4, -13, 1, 14, -9, 14, 0, -2, 00708 -4, -18, 7, -36, 6, -8, 3, -13, 7, -8, 00709 }, { 00710 -25, -15, -22, -11, -18, -4, -15, 22, -8, 2, 00711 17, 9, 48, 20, 30, 17, 16, -11, 1, -16, 00712 -2, -10, 5, -26, 2, 4, -22, 0, -2, -10, 00713 6, -13, 14, -10, 23, 0, -10, 2, -1, 0, 00714 }, { 00715 -57, 26, -22, 7, 14, 28, 14, 3, 35, 0, 00716 -3, -1, 11, -16, 18, 10, 4, 31, 15, 28, 00717 14, 23, 1, 21, -7, 2, -11, 1, -3, 1, 00718 -18, -9, -10, -13, -49, -24, -8, -14, -2, -16, 00719 }, { 00720 -35, 14, -34, -10, 10, 10, 1, -12, 20, -12, 00721 0, -15, 18, -24, 20, 27, 14, 28, 27, 27, 00722 20, 19, 2, 8, -5, -7, -25, -13, -5, -5, 00723 -6, -5, -2, 12, -31, -15, -23, 1, -12, -8, 00724 }, { 00725 -68, 18, -9, 9, 6, 35, 18, 25, 26, 7, 00726 -10, -1, 16, 3, 1, 9, -6, 19, 4, 15, 00727 4, 6, 0, 8, -20, 2, -23, -2, -7, -5, 00728 -12, -35, -1, -13, -24, 0, 3, 0, 22, -4, 00729 }, { 00730 -46, 6, -21, -8, 2, 16, 5, 8, 11, -4, 00731 -8, -15, 24, -4, 2, 26, 3, 16, 16, 14, 00732 9, 2, 1, -4, -19, -7, -36, -17, -9, -13, 00733 0, -31, 5, 12, -7, 8, -11, 15, 13, 4, 00734 }, { 00735 -49, 24, -16, 20, -2, 26, -2, 7, 25, 10, 00736 11, 25, 32, 3, 27, -2, 8, 8, 11, 9, 00737 24, 17, 16, 14, 13, -2, -20, -5, 4, -17, 00738 -14, 12, -3, -13, -33, -25, -14, -23, -15, -19, 00739 }, { 00740 -27, 12, -28, 2, -6, 7, -15, -9, 11, -1, 00741 13, 11, 40, -4, 29, 14, 19, 5, 23, 8, 00742 30, 13, 17, 0, 14, -12, -34, -20, 2, -25, 00743 -2, 16, 4, 12, -15, -16, -29, -7, -24, -10, 00744 }, { 00745 -60, 16, -3, 22, -10, 32, 0, 28, 17, 18, 00746 3, 25, 37, 23, 10, -3, -2, -3, 0, -3, 00747 14, 0, 14, 1, 0, -2, -32, -9, 1, -25, 00748 -7, -13, 5, -13, -8, -1, -2, -8, 10, -6, 00749 }, { 00750 -38, 4, -15, 4, -14, 13, -12, 11, 2, 6, 00751 6, 11, 45, 16, 11, 13, 7, -6, 12, -4, 00752 20, -3, 16, -12, 1, -12, -46, -24, 0, -33, 00753 3, -9, 12, 12, 8, 7, -17, 6, 0, 2 00754 } 00755 }; 00756 00757 const int8_t ff_cb2_vects[128][40]={ 00758 { 00759 73, -32, -60, -15, -26, 59, 2, -33, 30, -10, 00760 -3, -17, 8, 30, -1, -26, -4, -22, 10, 16, 00761 -36, -5, -11, 56, 37, 6, -10, -5, -13, -3, 00762 6, -5, 11, 4, -19, -5, -16, 41, 24, 13, 00763 }, { 00764 4, -11, -37, 23, -5, 46, -2, -29, -5, -39, 00765 -21, -9, 0, 49, 12, -9, -16, -26, 22, 15, 00766 -45, -20, -5, 40, 22, 17, -26, 31, -14, 2, 00767 -14, 10, 30, 20, -27, -9, -39, 39, 18, 5, 00768 }, { 00769 34, -25, -48, -28, -11, 34, -2, -41, 9, -7, 00770 -17, 21, 20, 24, -17, -33, 0, -24, 10, 42, 00771 3, -5, 10, 42, 11, 8, -3, 3, 16, 9, 00772 22, -2, 0, -33, -10, 18, 7, 58, 10, 28, 00773 }, { 00774 -34, -4, -25, 10, 9, 21, -7, -36, -26, -36, 00775 -35, 28, 12, 42, -3, -16, -12, -28, 21, 42, 00776 -5, -21, 16, 26, -4, 19, -19, 39, 15, 15, 00777 1, 13, 19, -17, -17, 14, -15, 55, 4, 19, 00778 }, { 00779 28, -20, -51, -14, -6, 7, 0, -26, 27, -4, 00780 18, -40, -6, 16, -1, -15, 0, -55, -5, -16, 00781 -19, 14, -3, 49, 14, 1, -22, -30, -12, 0, 00782 24, 15, 9, -17, -45, -29, 4, 28, 51, 35, 00783 }, { 00784 -40, 0, -28, 24, 14, -5, -4, -21, -7, -33, 00785 0, -32, -15, 35, 12, 1, -11, -58, 5, -16, 00786 -28, 0, 1, 33, 0, 11, -39, 5, -14, 6, 00787 3, 31, 28, -1, -53, -33, -19, 25, 46, 26, 00788 }, { 00789 -11, -14, -39, -27, 9, -17, -4, -33, 6, 0, 00790 4, -1, 5, 10, -17, -22, 5, -57, -5, 9, 00791 20, 13, 18, 35, -11, 3, -16, -22, 17, 13, 00792 40, 19, -1, -55, -35, -5, 27, 44, 37, 49, 00793 }, { 00794 -80, 6, -16, 11, 30, -30, -9, -28, -28, -29, 00795 -13, 6, -2, 28, -3, -5, -7, -60, 5, 9, 00796 11, -1, 24, 19, -27, 13, -32, 13, 15, 19, 00797 19, 35, 17, -39, -43, -9, 4, 42, 32, 41, 00798 }, { 00799 78, -21, -43, 4, -38, 17, 17, -5, 55, 24, 00800 -15, -36, 14, 4, 24, -24, 12, 5, 17, 31, 00801 -54, -5, -2, 27, 43, -12, 2, 9, -9, -15, 00802 22, -3, 28, 21, -20, 3, 20, 28, 9, -5, 00803 }, { 00804 9, -1, -20, 43, -17, 3, 12, 0, 20, -4, 00805 -33, -29, 6, 22, 38, -7, 0, 1, 29, 30, 00806 -63, -21, 3, 11, 27, -1, -14, 45, -10, -9, 00807 1, 12, 47, 37, -28, 0, -2, 26, 4, -13, 00808 }, { 00809 39, -14, -30, -8, -22, -8, 12, -12, 34, 27, 00810 -29, 2, 26, -2, 8, -31, 16, 3, 17, 57, 00811 -14, -6, 19, 13, 16, -10, 8, 17, 20, -2, 00812 38, 0, 17, -16, -11, 27, 44, 45, -4, 8, 00813 }, { 00814 -29, 5, -7, 30, -1, -21, 7, -7, 0, 0, 00815 -47, 9, 18, 15, 22, -14, 4, 0, 28, 57, 00816 -23, -21, 25, -2, 1, 0, -7, 53, 19, 3, 00817 17, 15, 36, 0, -19, 24, 21, 43, -9, 0, 00818 }, { 00819 33, -10, -34, 5, -17, -35, 15, 1, 53, 30, 00820 6, -59, 0, -10, 24, -13, 17, -27, 1, -1, 00821 -37, 13, 4, 20, 20, -18, -10, -16, -8, -11, 00822 39, 18, 26, 0, -46, -20, 41, 15, 37, 15, 00823 }, { 00824 -35, 10, -11, 44, 3, -48, 10, 6, 17, 2, 00825 -11, -51, -8, 8, 38, 3, 4, -31, 12, -2, 00826 -46, -1, 10, 4, 5, -7, -26, 19, -10, -5, 00827 18, 34, 45, 15, -54, -24, 18, 13, 31, 7, 00828 }, { 00829 -5, -3, -21, -7, -2, -60, 10, -5, 32, 34, 00830 -7, -20, 11, -16, 8, -20, 21, -29, 1, 24, 00831 2, 13, 27, 6, -5, -15, -3, -8, 21, 1, 00832 55, 21, 15, -38, -37, 3, 65, 32, 23, 30, 00833 }, { 00834 -74, 17, 0, 31, 18, -73, 5, 0, -3, 5, 00835 -25, -12, 3, 1, 22, -3, 9, -33, 12, 24, 00836 -6, -2, 33, -9, -21, -5, -20, 27, 19, 7, 00837 34, 37, 34, -22, -44, 0, 41, 29, 17, 21, 00838 }, { 00839 76, -35, -31, -28, -49, 43, -40, 0, 29, -14, 00840 8, 5, 10, 18, -26, -46, 0, 7, 6, 3, 00841 -25, -7, -2, 40, 28, 14, 18, -3, -27, -28, 00842 -8, -45, -13, 34, -13, -27, -15, 31, 12, 3, 00843 }, { 00844 7, -15, -9, 9, -28, 29, -45, 5, -6, -43, 00845 -9, 12, 2, 36, -12, -30, -11, 3, 17, 3, 00846 -34, -22, 3, 24, 12, 24, 2, 32, -28, -22, 00847 -29, -29, 5, 50, -21, -31, -38, 29, 7, -5, 00848 }, { 00849 36, -29, -19, -41, -34, 18, -45, -6, 8, -10, 00850 -5, 43, 23, 11, -42, -53, 5, 5, 6, 30, 00851 14, -8, 20, 26, 1, 16, 25, 4, 3, -15, 00852 7, -41, -23, -3, -4, -3, 8, 48, -1, 17, 00853 }, { 00854 -32, -8, 3, -2, -13, 4, -50, -1, -27, -39, 00855 -23, 51, 15, 30, -27, -37, -7, 1, 17, 29, 00856 5, -23, 25, 10, -14, 26, 8, 41, 1, -9, 00857 -13, -26, -5, 12, -12, -7, -14, 45, -6, 9, 00858 }, { 00859 31, -24, -23, -27, -29, -9, -43, 8, 26, -7, 00860 30, -17, -4, 3, -26, -35, 5, -24, -10, -28, 00861 -9, 12, 5, 33, 5, 8, 5, -29, -26, -24, 00862 9, -23, -14, 12, -39, -52, 5, 18, 39, 24, 00863 }, { 00864 -37, -3, 0, 10, -7, -22, -48, 12, -8, -36, 00865 12, -9, -12, 22, -12, -19, -6, -28, 0, -29, 00866 -18, -3, 11, 17, -10, 18, -10, 7, -27, -18, 00867 -11, -7, 3, 28, -47, -55, -18, 15, 34, 16, 00868 }, { 00869 -8, -17, -10, -40, -13, -34, -47, 0, 5, -4, 00870 16, 21, 8, -2, -42, -43, 10, -26, -10, -2, 00871 31, 11, 27, 19, -21, 10, 12, -20, 3, -11, 00872 25, -20, -25, -25, -29, -28, 28, 34, 25, 38, 00873 }, { 00874 -77, 2, 11, -1, 7, -47, -52, 5, -29, -33, 00875 -1, 28, 0, 15, -28, -26, -2, -30, 0, -2, 00876 22, -4, 33, 3, -36, 21, -3, 15, 2, -5, 00877 4, -4, -6, -9, -37, -31, 5, 32, 20, 30, 00878 }, { 00879 81, -25, -14, -8, -61, 0, -25, 28, 54, 20, 00880 -3, -14, 17, -8, 0, -44, 16, 35, 13, 18, 00881 -43, -7, 6, 11, 33, -4, 30, 11, -22, -40, 00882 6, -43, 3, 50, -14, -18, 22, 18, -1, -16, 00883 }, { 00884 12, -4, 8, 29, -39, -12, -30, 33, 19, -8, 00885 -21, -6, 8, 9, 13, -28, 4, 31, 24, 18, 00886 -52, -23, 12, -4, 18, 5, 14, 47, -24, -34, 00887 -14, -27, 22, 66, -22, -22, -1, 16, -6, -24, 00888 }, { 00889 41, -18, -2, -21, -45, -24, -30, 21, 33, 24, 00890 -17, 24, 29, -15, -16, -51, 21, 33, 13, 45, 00891 -3, -8, 28, -2, 7, -2, 37, 19, 7, -27, 00892 22, -39, -7, 12, -5, 5, 45, 35, -15, -1, 00893 }, { 00894 -27, 1, 20, 17, -24, -38, -35, 26, -1, -4, 00895 -35, 32, 21, 3, -2, -35, 8, 29, 24, 44, 00896 -12, -24, 34, -18, -8, 7, 21, 55, 5, -21, 00897 2, -23, 11, 28, -13, 1, 22, 33, -21, -10, 00898 }, { 00899 36, -13, -5, -7, -40, -51, -28, 36, 52, 27, 00900 18, -36, 2, -22, 0, -33, 21, 2, -3, -13, 00901 -26, 11, 14, 4, 10, -10, 18, -14, -22, -36, 00902 24, -21, 1, 28, -40, -42, 42, 5, 25, 5, 00903 }, { 00904 -32, 6, 17, 31, -19, -65, -33, 41, 16, -1, 00905 0, -29, -6, -4, 13, -17, 9, -1, 8, -14, 00906 -35, -3, 19, -11, -4, 0, 1, 21, -23, -30, 00907 3, -5, 20, 44, -48, -46, 19, 3, 20, -3, 00908 }, { 00909 -3, -7, 6, -20, -25, -77, -32, 29, 31, 30, 00910 4, 2, 14, -29, -16, -40, 26, 0, -3, 12, 00911 13, 10, 36, -9, -15, -8, 24, -6, 7, -22, 00912 40, -17, -8, -9, -31, -18, 66, 22, 11, 19, 00913 }, { 00914 -72, 13, 29, 18, -4, -90, -37, 34, -4, 1, 00915 -13, 9, 6, -11, -2, -24, 13, -3, 7, 11, 00916 4, -4, 42, -25, -31, 1, 8, 29, 6, -17, 00917 19, -2, 10, 6, -38, -22, 42, 19, 6, 11, 00918 }, { 00919 116, -20, -68, -30, -28, 83, 28, -18, 32, -22, 00920 -13, -21, 5, 28, 5, -7, -24, -8, -22, 17, 00921 -23, 30, -25, 45, 15, -9, -11, -18, 22, -10, 00922 4, -2, 19, -12, 23, 3, -43, 2, 12, -4, 00923 }, { 00924 47, 0, -45, 7, -7, 69, 23, -13, -2, -51, 00925 -32, -14, -3, 47, 19, 8, -37, -11, -10, 16, 00926 -32, 15, -19, 29, 0, 1, -28, 18, 20, -4, 00927 -16, 13, 38, 3, 15, 0, -66, 0, 7, -13, 00928 }, { 00929 77, -13, -56, -43, -13, 57, 23, -26, 11, -19, 00930 -27, 16, 17, 22, -10, -15, -19, -10, -22, 43, 00931 16, 30, -2, 31, -11, -6, -5, -9, 52, 2, 00932 20, 0, 8, -50, 33, 27, -19, 19, -1, 9, 00933 }, { 00934 8, 6, -33, -4, 7, 44, 18, -21, -23, -48, 00935 -46, 24, 9, 40, 3, 1, -32, -13, -11, 43, 00936 7, 14, 3, 15, -26, 3, -21, 26, 50, 8, 00937 0, 16, 27, -34, 25, 23, -43, 17, -6, 1, 00938 }, { 00939 71, -9, -59, -29, -8, 30, 26, -11, 30, -16, 00940 8, -44, -9, 14, 5, 2, -19, -40, -38, -15, 00941 -7, 50, -17, 38, -7, -14, -24, -43, 22, -6, 00942 22, 19, 17, -34, -2, -20, -23, -10, 39, 16, 00943 }, { 00944 2, 11, -36, 9, 13, 17, 21, -6, -5, -45, 00945 -10, -36, -18, 33, 19, 19, -31, -44, -27, -15, 00946 -16, 34, -11, 22, -22, -4, -40, -7, 21, 0, 00947 1, 35, 36, -18, -10, -24, -46, -12, 34, 8, 00948 }, { 00949 32, -2, -47, -42, 7, 5, 21, -18, 9, -12, 00950 -5, -5, 2, 8, -10, -4, -14, -42, -38, 10, 00951 33, 49, 5, 24, -33, -12, -17, -35, 52, 6, 00952 38, 22, 7, -72, 7, 3, 0, 6, 25, 30, 00953 }, { 00954 -36, 18, -24, -3, 28, -7, 16, -13, -26, -41, 00955 -24, 1, -5, 26, 3, 12, -27, -46, -27, 10, 00956 24, 34, 10, 8, -49, -2, -34, 0, 51, 12, 00957 17, 38, 25, -56, 0, 0, -22, 3, 20, 22, 00958 }, { 00959 121, -9, -50, -10, -40, 40, 43, 9, 58, 12, 00960 -25, -41, 11, 2, 31, -5, -8, 19, -15, 32, 00961 -41, 30, -16, 16, 20, -28, 0, -3, 26, -22, 00962 19, 0, 36, 4, 22, 12, -6, -9, -1, -24, 00963 }, { 00964 52, 10, -27, 27, -18, 26, 38, 14, 23, -16, 00965 -44, -33, 3, 20, 45, 10, -20, 15, -3, 31, 00966 -50, 14, -10, 0, 5, -17, -15, 32, 24, -16, 00967 -1, 15, 55, 20, 14, 8, -29, -12, -7, -32, 00968 }, { 00969 82, -3, -38, -23, -24, 15, 38, 2, 37, 15, 00970 -39, -2, 23, -4, 15, -12, -3, 17, -15, 58, 00971 -1, 29, 6, 2, -5, -26, 7, 4, 56, -9, 00972 35, 3, 25, -33, 32, 36, 17, 7, -15, -9, 00973 }, { 00974 13, 17, -15, 15, -3, 1, 33, 7, 1, -12, 00975 -58, 5, 15, 13, 29, 3, -16, 13, -4, 57, 00976 -10, 13, 11, -13, -21, -15, -9, 40, 55, -3, 00977 14, 19, 44, -17, 24, 32, -5, 4, -21, -18, 00978 }, { 00979 76, 1, -41, -9, -19, -12, 41, 17, 55, 18, 00980 -3, -63, -3, -12, 30, 5, -3, -12, -31, 0, 00981 -24, 49, -8, 9, -1, -33, -12, -29, 27, -18, 00982 37, 21, 34, -17, -3, -11, 14, -23, 25, -2, 00983 }, { 00984 7, 22, -18, 29, 1, -25, 36, 21, 20, -9, 00985 -22, -56, -11, 6, 45, 21, -15, -16, -20, -1, 00986 -33, 34, -2, -6, -17, -23, -28, 6, 25, -12, 00987 16, 37, 53, -1, -11, -15, -8, -25, 20, -11, 00988 }, { 00989 37, 8, -29, -22, -4, -37, 36, 9, 34, 22, 00990 -17, -24, 8, -18, 15, -2, 1, -14, -31, 25, 00991 15, 48, 13, -4, -28, -31, -5, -21, 57, -4, 00992 53, 24, 23, -55, 6, 12, 37, -6, 11, 11, 00993 }, { 00994 -31, 28, -6, 16, 16, -50, 31, 14, 0, -6, 00995 -36, -17, 0, 0, 29, 14, -11, -18, -20, 25, 00996 6, 33, 19, -20, -43, -21, -21, 14, 55, 0, 00997 32, 40, 42, -39, -1, 8, 14, -8, 6, 3, 00998 }, { 00999 119, -24, -39, -44, -51, 66, -14, 15, 31, -26, 01000 -1, 0, 7, 16, -19, -28, -19, 22, -26, 4, 01001 -13, 28, -16, 29, 5, -1, 16, -16, 8, -35, 01002 -10, -42, -4, 17, 29, -19, -42, -7, 0, -15, 01003 }, { 01004 50, -3, -16, -5, -30, 53, -19, 20, -3, -55, 01005 -19, 8, 0, 34, -5, -11, -32, 18, -15, 4, 01006 -22, 13, -10, 13, -9, 8, 0, 19, 7, -29, 01007 -31, -26, 13, 33, 21, -22, -65, -9, -4, -23, 01008 }, { 01009 79, -17, -27, -56, -36, 41, -19, 8, 10, -22, 01010 -15, 39, 20, 9, -35, -35, -15, 20, -26, 31, 01011 26, 27, 6, 15, -20, 0, 23, -8, 38, -22, 01012 5, -38, -15, -20, 39, 4, -18, 9, -13, -1, 01013 }, { 01014 10, 3, -4, -18, -15, 27, -24, 13, -24, -51, 01015 -34, 47, 12, 28, -21, -19, -27, 16, -15, 30, 01016 17, 12, 12, 0, -36, 10, 7, 27, 37, -16, 01017 -15, -22, 3, -4, 31, 1, -42, 7, -18, -9, 01018 }, { 01019 74, -12, -30, -42, -30, 14, -16, 23, 29, -19, 01020 20, -21, -7, 1, -19, -17, -14, -10, -43, -27, 01021 3, 48, -8, 22, -16, -7, 4, -42, 9, -31, 01022 6, -20, -6, -4, 3, -43, -22, -20, 28, 5, 01023 }, { 01024 5, 7, -7, -4, -9, 0, -21, 28, -6, -48, 01025 2, -14, -15, 20, -5, 0, -27, -14, -32, -28, 01026 -5, 32, -2, 6, -32, 3, -12, -5, 8, -25, 01027 -14, -4, 12, 11, -4, -47, -45, -22, 22, -2, 01028 }, { 01029 34, -6, -18, -55, -15, -11, -21, 16, 8, -16, 01030 6, 16, 5, -4, -35, -24, -10, -12, -43, -1, 01031 43, 47, 14, 8, -43, -5, 10, -34, 39, -18, 01032 22, -16, -17, -42, 13, -19, 1, -3, 14, 20, 01033 }, { 01034 -34, 14, 4, -17, 5, -24, -26, 20, -27, -45, 01035 -12, 24, -2, 13, -21, -8, -22, -16, -32, -2, 01036 34, 31, 20, -7, -58, 5, -5, 2, 38, -12, 01037 2, -1, 1, -26, 5, -23, -21, -6, 8, 11, 01038 }, { 01039 124, -13, -21, -23, -62, 23, 0, 43, 57, 8, 01040 -13, -18, 14, -10, 6, -26, -3, 49, -19, 19, 01041 -31, 27, -7, 0, 11, -20, 29, -1, 12, -47, 01042 4, -39, 11, 34, 28, -9, -5, -19, -13, -34, 01043 }, { 01044 55, 6, 1, 14, -41, 10, -4, 48, 22, -20, 01045 -31, -10, 5, 7, 20, -9, -16, 45, -8, 19, 01046 -40, 12, -1, -15, -4, -10, 12, 34, 11, -41, 01047 -16, -24, 30, 49, 20, -13, -28, -22, -18, -43, 01048 }, { 01049 84, -6, -9, -36, -47, -1, -4, 36, 36, 12, 01050 -27, 20, 26, -17, -9, -33, 1, 47, -19, 46, 01051 9, 27, 15, -13, -15, -18, 35, 6, 42, -33, 01052 20, -36, 1, -4, 38, 14, 18, -2, -27, -20, 01053 }, { 01054 15, 13, 13, 1, -26, -14, -9, 41, 1, -16, 01055 -46, 27, 18, 1, 4, -16, -11, 43, -8, 45, 01056 0, 11, 21, -29, -30, -8, 19, 42, 41, -28, 01057 0, -20, 20, 11, 30, 10, -4, -5, -32, -28, 01058 }, { 01059 79, -2, -12, -22, -42, -28, -1, 51, 54, 15, 01060 8, -41, 0, -24, 6, -15, 1, 17, -36, -12, 01061 -14, 47, 0, -6, -11, -26, 16, -27, 13, -43, 01062 22, -18, 10, 12, 2, -34, 15, -33, 13, -13, 01063 }, { 01064 10, 18, 10, 15, -21, -41, -6, 56, 19, -13, 01065 -9, -33, -9, -6, 20, 1, -11, 13, -24, -13, 01066 -23, 32, 6, -22, -26, -15, 0, 8, 12, -37, 01067 1, -2, 28, 27, -5, -37, -7, -35, 8, -21, 01068 }, { 01069 39, 4, 0, -35, -27, -53, -6, 44, 33, 18, 01070 -5, -2, 11, -31, -9, -22, 6, 15, -36, 13, 01071 25, 46, 23, -20, -37, -24, 23, -19, 43, -29, 01072 38, -14, 0, -26, 12, -10, 38, -16, 0, 0, 01073 }, { 01074 -29, 25, 22, 2, -6, -67, -11, 49, -1, -10, 01075 -24, 5, 3, -13, 4, -5, -6, 11, -25, 12, 01076 16, 31, 28, -36, -53, -13, 6, 16, 42, -24, 01077 17, 1, 18, -10, 4, -13, 15, -18, -5, -7, 01078 }, { 01079 29, -25, -22, -2, 6, 67, 11, -49, 1, 10, 01080 24, -5, -3, 13, -4, 5, 6, -11, 25, -12, 01081 -16, -31, -28, 36, 53, 13, -6, -16, -42, 24, 01082 -17, -1, -18, 10, -4, 13, -15, 18, 5, 7, 01083 }, { 01084 -39, -4, 0, 35, 27, 53, 6, -44, -33, -18, 01085 5, 2, -11, 31, 9, 22, -6, -15, 36, -13, 01086 -25, -46, -23, 20, 37, 24, -23, 19, -43, 29, 01087 -38, 14, 0, 26, -12, 10, -38, 16, 0, 0, 01088 }, { 01089 -10, -18, -10, -15, 21, 41, 6, -56, -19, 13, 01090 9, 33, 9, 6, -20, -1, 11, -13, 24, 13, 01091 23, -32, -6, 22, 26, 15, 0, -8, -12, 37, 01092 -1, 2, -28, -27, 5, 37, 7, 35, -8, 21, 01093 }, { 01094 -79, 2, 12, 22, 42, 28, 1, -51, -54, -15, 01095 -8, 41, 0, 24, -6, 15, -1, -17, 36, 12, 01096 14, -47, 0, 6, 11, 26, -16, 27, -13, 43, 01097 -22, 18, -10, -12, -2, 34, -15, 33, -13, 13, 01098 }, { 01099 -15, -13, -13, -1, 26, 14, 9, -41, -1, 16, 01100 46, -27, -18, -1, -4, 16, 11, -43, 8, -45, 01101 0, -11, -21, 29, 30, 8, -19, -42, -41, 28, 01102 0, 20, -20, -11, -30, -10, 4, 5, 32, 28, 01103 }, { 01104 -84, 6, 9, 36, 47, 1, 4, -36, -36, -12, 01105 27, -20, -26, 17, 9, 33, -1, -47, 19, -46, 01106 -9, -27, -15, 13, 15, 18, -35, -6, -42, 33, 01107 -20, 36, -1, 4, -38, -14, -18, 2, 27, 20, 01108 }, { 01109 -55, -6, -1, -14, 41, -10, 4, -48, -22, 20, 01110 31, 10, -5, -7, -20, 9, 16, -45, 8, -19, 01111 40, -12, 1, 15, 4, 10, -12, -34, -11, 41, 01112 16, 24, -30, -49, -20, 13, 28, 22, 18, 43, 01113 }, { 01114 -124, 13, 21, 23, 62, -23, 0, -43, -57, -8, 01115 13, 18, -14, 10, -6, 26, 3, -49, 19, -19, 01116 31, -27, 7, 0, -11, 20, -29, 1, -12, 47, 01117 -4, 39, -11, -34, -28, 9, 5, 19, 13, 34, 01118 }, { 01119 34, -14, -4, 17, -5, 24, 26, -20, 27, 45, 01120 12, -24, 2, -13, 21, 8, 22, 16, 32, 2, 01121 -34, -31, -20, 7, 58, -5, 5, -2, -38, 12, 01122 -2, 1, -1, 26, -5, 23, 21, 6, -8, -11, 01123 }, { 01124 -34, 6, 18, 55, 15, 11, 21, -16, -8, 16, 01125 -6, -16, -5, 4, 35, 24, 10, 12, 43, 1, 01126 -43, -47, -14, -8, 43, 5, -10, 34, -39, 18, 01127 -22, 16, 17, 42, -13, 19, -1, 3, -14, -20, 01128 }, { 01129 -5, -7, 7, 4, 9, 0, 21, -28, 6, 48, 01130 -2, 14, 15, -20, 5, 0, 27, 14, 32, 28, 01131 5, -32, 2, -6, 32, -3, 12, 5, -8, 25, 01132 14, 4, -12, -11, 4, 47, 45, 22, -22, 2, 01133 }, { 01134 -74, 12, 30, 42, 30, -14, 16, -23, -29, 19, 01135 -20, 21, 7, -1, 19, 17, 14, 10, 43, 27, 01136 -3, -48, 8, -22, 16, 7, -4, 42, -9, 31, 01137 -6, 20, 6, 4, -3, 43, 22, 20, -28, -5, 01138 }, { 01139 -10, -3, 4, 18, 15, -27, 24, -13, 24, 51, 01140 34, -47, -12, -28, 21, 19, 27, -16, 15, -30, 01141 -17, -12, -12, 0, 36, -10, -7, -27, -37, 16, 01142 15, 22, -3, 4, -31, -1, 42, -7, 18, 9, 01143 }, { 01144 -79, 17, 27, 56, 36, -41, 19, -8, -10, 22, 01145 15, -39, -20, -9, 35, 35, 15, -20, 26, -31, 01146 -26, -27, -6, -15, 20, 0, -23, 8, -38, 22, 01147 -5, 38, 15, 20, -39, -4, 18, -9, 13, 1, 01148 }, { 01149 -50, 3, 16, 5, 30, -53, 19, -20, 3, 55, 01150 19, -8, 0, -34, 5, 11, 32, -18, 15, -4, 01151 22, -13, 10, -13, 9, -8, 0, -19, -7, 29, 01152 31, 26, -13, -33, -21, 22, 65, 9, 4, 23, 01153 }, { 01154 -119, 24, 39, 44, 51, -66, 14, -15, -31, 26, 01155 1, 0, -7, -16, 19, 28, 19, -22, 26, -4, 01156 13, -28, 16, -29, -5, 1, -16, 16, -8, 35, 01157 10, 42, 4, -17, -29, 19, 42, 7, 0, 15, 01158 }, { 01159 31, -28, 6, -16, -16, 50, -31, -14, 0, 6, 01160 36, 17, 0, 0, -29, -14, 11, 18, 20, -25, 01161 -6, -33, -19, 20, 43, 21, 21, -14, -55, 0, 01162 -32, -40, -42, 39, 1, -8, -14, 8, -6, -3, 01163 }, { 01164 -37, -8, 29, 22, 4, 37, -36, -9, -34, -22, 01165 17, 24, -8, 18, -15, 2, -1, 14, 31, -25, 01166 -15, -48, -13, 4, 28, 31, 5, 21, -57, 4, 01167 -53, -24, -23, 55, -6, -12, -37, 6, -11, -11, 01168 }, { 01169 -7, -22, 18, -29, -1, 25, -36, -21, -20, 9, 01170 22, 56, 11, -6, -45, -21, 15, 16, 20, 1, 01171 33, -34, 2, 6, 17, 23, 28, -6, -25, 12, 01172 -16, -37, -53, 1, 11, 15, 8, 25, -20, 11, 01173 }, { 01174 -76, -1, 41, 9, 19, 12, -41, -17, -55, -18, 01175 3, 63, 3, 12, -30, -5, 3, 12, 31, 0, 01176 24, -49, 8, -9, 1, 33, 12, 29, -27, 18, 01177 -37, -21, -34, 17, 3, 11, -14, 23, -25, 2, 01178 }, { 01179 -13, -17, 15, -15, 3, -1, -33, -7, -1, 12, 01180 58, -5, -15, -13, -29, -3, 16, -13, 4, -57, 01181 10, -13, -11, 13, 21, 15, 9, -40, -55, 3, 01182 -14, -19, -44, 17, -24, -32, 5, -4, 21, 18, 01183 }, { 01184 -82, 3, 38, 23, 24, -15, -38, -2, -37, -15, 01185 39, 2, -23, 4, -15, 12, 3, -17, 15, -58, 01186 1, -29, -6, -2, 5, 26, -7, -4, -56, 9, 01187 -35, -3, -25, 33, -32, -36, -17, -7, 15, 9, 01188 }, { 01189 -52, -10, 27, -27, 18, -26, -38, -14, -23, 16, 01190 44, 33, -3, -20, -45, -10, 20, -15, 3, -31, 01191 50, -14, 10, 0, -5, 17, 15, -32, -24, 16, 01192 1, -15, -55, -20, -14, -8, 29, 12, 7, 32, 01193 }, { 01194 -121, 9, 50, 10, 40, -40, -43, -9, -58, -12, 01195 25, 41, -11, -2, -31, 5, 8, -19, 15, -32, 01196 41, -30, 16, -16, -20, 28, 0, 3, -26, 22, 01197 -19, 0, -36, -4, -22, -12, 6, 9, 1, 24, 01198 }, { 01199 36, -18, 24, 3, -28, 7, -16, 13, 26, 41, 01200 24, -1, 5, -26, -3, -12, 27, 46, 27, -10, 01201 -24, -34, -10, -8, 49, 2, 34, 0, -51, -12, 01202 -17, -38, -25, 56, 0, 0, 22, -3, -20, -22, 01203 }, { 01204 -32, 2, 47, 42, -7, -5, -21, 18, -9, 12, 01205 5, 5, -2, -8, 10, 4, 14, 42, 38, -10, 01206 -33, -49, -5, -24, 33, 12, 17, 35, -52, -6, 01207 -38, -22, -7, 72, -7, -3, 0, -6, -25, -30, 01208 }, { 01209 -2, -11, 36, -9, -13, -17, -21, 6, 5, 45, 01210 10, 36, 18, -33, -19, -19, 31, 44, 27, 15, 01211 16, -34, 11, -22, 22, 4, 40, 7, -21, 0, 01212 -1, -35, -36, 18, 10, 24, 46, 12, -34, -8, 01213 }, { 01214 -71, 9, 59, 29, 8, -30, -26, 11, -30, 16, 01215 -8, 44, 9, -14, -5, -2, 19, 40, 38, 15, 01216 7, -50, 17, -38, 7, 14, 24, 43, -22, 6, 01217 -22, -19, -17, 34, 2, 20, 23, 10, -39, -16, 01218 }, { 01219 -8, -6, 33, 4, -7, -44, -18, 21, 23, 48, 01220 46, -24, -9, -40, -3, -1, 32, 13, 11, -43, 01221 -7, -14, -3, -15, 26, -3, 21, -26, -50, -8, 01222 0, -16, -27, 34, -25, -23, 43, -17, 6, -1, 01223 }, { 01224 -77, 13, 56, 43, 13, -57, -23, 26, -11, 19, 01225 27, -16, -17, -22, 10, 15, 19, 10, 22, -43, 01226 -16, -30, 2, -31, 11, 6, 5, 9, -52, -2, 01227 -20, 0, -8, 50, -33, -27, 19, -19, 1, -9, 01228 }, { 01229 -47, 0, 45, -7, 7, -69, -23, 13, 2, 51, 01230 32, 14, 3, -47, -19, -8, 37, 11, 10, -16, 01231 32, -15, 19, -29, 0, -1, 28, -18, -20, 4, 01232 16, -13, -38, -3, -15, 0, 66, 0, -7, 13, 01233 }, { 01234 -116, 20, 68, 30, 28, -83, -28, 18, -32, 22, 01235 13, 21, -5, -28, -5, 7, 24, 8, 22, -17, 01236 23, -30, 25, -45, -15, 9, 11, 18, -22, 10, 01237 -4, 2, -19, 12, -23, -3, 43, -2, -12, 4, 01238 }, { 01239 72, -13, -29, -18, 4, 90, 37, -34, 4, -1, 01240 13, -9, -6, 11, 2, 24, -13, 3, -7, -11, 01241 -4, 4, -42, 25, 31, -1, -8, -29, -6, 17, 01242 -19, 2, -10, -6, 38, 22, -42, -19, -6, -11, 01243 }, { 01244 3, 7, -6, 20, 25, 77, 32, -29, -31, -30, 01245 -4, -2, -14, 29, 16, 40, -26, 0, 3, -12, 01246 -13, -10, -36, 9, 15, 8, -24, 6, -7, 22, 01247 -40, 17, 8, 9, 31, 18, -66, -22, -11, -19, 01248 }, { 01249 32, -6, -17, -31, 19, 65, 33, -41, -16, 1, 01250 0, 29, 6, 4, -13, 17, -9, 1, -8, 14, 01251 35, 3, -19, 11, 4, 0, -1, -21, 23, 30, 01252 -3, 5, -20, -44, 48, 46, -19, -3, -20, 3, 01253 }, { 01254 -36, 13, 5, 7, 40, 51, 28, -36, -52, -27, 01255 -18, 36, -2, 22, 0, 33, -21, -2, 3, 13, 01256 26, -11, -14, -4, -10, 10, -18, 14, 22, 36, 01257 -24, 21, -1, -28, 40, 42, -42, -5, -25, -5, 01258 }, { 01259 27, -1, -20, -17, 24, 38, 35, -26, 1, 4, 01260 35, -32, -21, -3, 2, 35, -8, -29, -24, -44, 01261 12, 24, -34, 18, 8, -7, -21, -55, -5, 21, 01262 -2, 23, -11, -28, 13, -1, -22, -33, 21, 10, 01263 }, { 01264 -41, 18, 2, 21, 45, 24, 30, -21, -33, -24, 01265 17, -24, -29, 15, 16, 51, -21, -33, -13, -45, 01266 3, 8, -28, 2, -7, 2, -37, -19, -7, 27, 01267 -22, 39, 7, -12, 5, -5, -45, -35, 15, 1, 01268 }, { 01269 -12, 4, -8, -29, 39, 12, 30, -33, -19, 8, 01270 21, 6, -8, -9, -13, 28, -4, -31, -24, -18, 01271 52, 23, -12, 4, -18, -5, -14, -47, 24, 34, 01272 14, 27, -22, -66, 22, 22, 1, -16, 6, 24, 01273 }, { 01274 -81, 25, 14, 8, 61, 0, 25, -28, -54, -20, 01275 3, 14, -17, 8, 0, 44, -16, -35, -13, -18, 01276 43, 7, -6, -11, -33, 4, -30, -11, 22, 40, 01277 -6, 43, -3, -50, 14, 18, -22, -18, 1, 16, 01278 }, { 01279 77, -2, -11, 1, -7, 47, 52, -5, 29, 33, 01280 1, -28, 0, -15, 28, 26, 2, 30, 0, 2, 01281 -22, 4, -33, -3, 36, -21, 3, -15, -2, 5, 01282 -4, 4, 6, 9, 37, 31, -5, -32, -20, -30, 01283 }, { 01284 8, 17, 10, 40, 13, 34, 47, 0, -5, 4, 01285 -16, -21, -8, 2, 42, 43, -10, 26, 10, 2, 01286 -31, -11, -27, -19, 21, -10, -12, 20, -3, 11, 01287 -25, 20, 25, 25, 29, 28, -28, -34, -25, -38, 01288 }, { 01289 37, 3, 0, -10, 7, 22, 48, -12, 8, 36, 01290 -12, 9, 12, -22, 12, 19, 6, 28, 0, 29, 01291 18, 3, -11, -17, 10, -18, 10, -7, 27, 18, 01292 11, 7, -3, -28, 47, 55, 18, -15, -34, -16, 01293 }, { 01294 -31, 24, 23, 27, 29, 9, 43, -8, -26, 7, 01295 -30, 17, 4, -3, 26, 35, -5, 24, 10, 28, 01296 9, -12, -5, -33, -5, -8, -5, 29, 26, 24, 01297 -9, 23, 14, -12, 39, 52, -5, -18, -39, -24, 01298 }, { 01299 32, 8, -3, 2, 13, -4, 50, 1, 27, 39, 01300 23, -51, -15, -30, 27, 37, 7, -1, -17, -29, 01301 -5, 23, -25, -10, 14, -26, -8, -41, -1, 9, 01302 13, 26, 5, -12, 12, 7, 14, -45, 6, -9, 01303 }, { 01304 -36, 29, 19, 41, 34, -18, 45, 6, -8, 10, 01305 5, -43, -23, -11, 42, 53, -5, -5, -6, -30, 01306 -14, 8, -20, -26, -1, -16, -25, -4, -3, 15, 01307 -7, 41, 23, 3, 4, 3, -8, -48, 1, -17, 01308 }, { 01309 -7, 15, 9, -9, 28, -29, 45, -5, 6, 43, 01310 9, -12, -2, -36, 12, 30, 11, -3, -17, -3, 01311 34, 22, -3, -24, -12, -24, -2, -32, 28, 22, 01312 29, 29, -5, -50, 21, 31, 38, -29, -7, 5, 01313 }, { 01314 -76, 35, 31, 28, 49, -43, 40, 0, -29, 14, 01315 -8, -5, -10, -18, 26, 46, 0, -7, -6, -3, 01316 25, 7, 2, -40, -28, -14, -18, 3, 27, 28, 01317 8, 45, 13, -34, 13, 27, 15, -31, -12, -3, 01318 }, { 01319 74, -17, 0, -31, -18, 73, -5, 0, 3, -5, 01320 25, 12, -3, -1, -22, 3, -9, 33, -12, -24, 01321 6, 2, -33, 9, 21, 5, 20, -27, -19, -7, 01322 -34, -37, -34, 22, 44, 0, -41, -29, -17, -21, 01323 }, { 01324 5, 3, 21, 7, 2, 60, -10, 5, -32, -34, 01325 7, 20, -11, 16, -8, 20, -21, 29, -1, -24, 01326 -2, -13, -27, -6, 5, 15, 3, 8, -21, -1, 01327 -55, -21, -15, 38, 37, -3, -65, -32, -23, -30, 01328 }, { 01329 35, -10, 11, -44, -3, 48, -10, -6, -17, -2, 01330 11, 51, 8, -8, -38, -3, -4, 31, -12, 2, 01331 46, 1, -10, -4, -5, 7, 26, -19, 10, 5, 01332 -18, -34, -45, -15, 54, 24, -18, -13, -31, -7, 01333 }, { 01334 -33, 10, 34, -5, 17, 35, -15, -1, -53, -30, 01335 -6, 59, 0, 10, -24, 13, -17, 27, -1, 1, 01336 37, -13, -4, -20, -20, 18, 10, 16, 8, 11, 01337 -39, -18, -26, 0, 46, 20, -41, -15, -37, -15, 01338 }, { 01339 29, -5, 7, -30, 1, 21, -7, 7, 0, 0, 01340 47, -9, -18, -15, -22, 14, -4, 0, -28, -57, 01341 23, 21, -25, 2, -1, 0, 7, -53, -19, -3, 01342 -17, -15, -36, 0, 19, -24, -21, -43, 9, 0, 01343 }, { 01344 -39, 14, 30, 8, 22, 8, -12, 12, -34, -27, 01345 29, -2, -26, 2, -8, 31, -16, -3, -17, -57, 01346 14, 6, -19, -13, -16, 10, -8, -17, -20, 2, 01347 -38, 0, -17, 16, 11, -27, -44, -45, 4, -8, 01348 }, { 01349 -9, 1, 20, -43, 17, -3, -12, 0, -20, 4, 01350 33, 29, -6, -22, -38, 7, 0, -1, -29, -30, 01351 63, 21, -3, -11, -27, 1, 14, -45, 10, 9, 01352 -1, -12, -47, -37, 28, 0, 2, -26, -4, 13, 01353 }, { 01354 -78, 21, 43, -4, 38, -17, -17, 5, -55, -24, 01355 15, 36, -14, -4, -24, 24, -12, -5, -17, -31, 01356 54, 5, 2, -27, -43, 12, -2, -9, 9, 15, 01357 -22, 3, -28, -21, 20, -3, -20, -28, -9, 5, 01358 }, { 01359 80, -6, 16, -11, -30, 30, 9, 28, 28, 29, 01360 13, -6, 2, -28, 3, 5, 7, 60, -5, -9, 01361 -11, 1, -24, -19, 27, -13, 32, -13, -15, -19, 01362 -19, -35, -17, 39, 43, 9, -4, -42, -32, -41, 01363 }, { 01364 11, 14, 39, 27, -9, 17, 4, 33, -6, 0, 01365 -4, 1, -5, -10, 17, 22, -5, 57, 5, -9, 01366 -20, -13, -18, -35, 11, -3, 16, 22, -17, -13, 01367 -40, -19, 1, 55, 35, 5, -27, -44, -37, -49, 01368 }, { 01369 40, 0, 28, -24, -14, 5, 4, 21, 7, 33, 01370 0, 32, 15, -35, -12, -1, 11, 58, -5, 16, 01371 28, 0, -1, -33, 0, -11, 39, -5, 14, -6, 01372 -3, -31, -28, 1, 53, 33, 19, -25, -46, -26, 01373 }, { 01374 -28, 20, 51, 14, 6, -7, 0, 26, -27, 4, 01375 -18, 40, 6, -16, 1, 15, 0, 55, 5, 16, 01376 19, -14, 3, -49, -14, -1, 22, 30, 12, 0, 01377 -24, -15, -9, 17, 45, 29, -4, -28, -51, -35, 01378 }, { 01379 34, 4, 25, -10, -9, -21, 7, 36, 26, 36, 01380 35, -28, -12, -42, 3, 16, 12, 28, -21, -42, 01381 5, 21, -16, -26, 4, -19, 19, -39, -15, -15, 01382 -1, -13, -19, 17, 17, -14, 15, -55, -4, -19, 01383 }, { 01384 -34, 25, 48, 28, 11, -34, 2, 41, -9, 7, 01385 17, -21, -20, -24, 17, 33, 0, 24, -10, -42, 01386 -3, 5, -10, -42, -11, -8, 3, -3, -16, -9, 01387 -22, 2, 0, 33, 10, -18, -7, -58, -10, -28, 01388 }, { 01389 -4, 11, 37, -23, 5, -46, 2, 29, 5, 39, 01390 21, 9, 0, -49, -12, 9, 16, 26, -22, -15, 01391 45, 20, 5, -40, -22, -17, 26, -31, 14, -2, 01392 14, -10, -30, -20, 27, 9, 39, -39, -18, -5, 01393 }, { 01394 -73, 32, 60, 15, 26, -59, -2, 33, -30, 10, 01395 3, 17, -8, -30, 1, 26, 4, 22, -10, -16, 01396 36, 5, 11, -56, -37, -6, 10, 5, 13, 3, 01397 -6, 5, -11, -4, 19, 5, 16, -41, -24, -13 01398 } 01399 }; 01400 01401 const uint16_t ff_cb1_base[128]={ 01402 19657, 18474, 18365, 17520, 21048, 18231, 18584, 16671, 01403 20363, 19069, 19409, 18430, 21844, 18753, 19613, 17411, 01404 20389, 21772, 20129, 21702, 20978, 20472, 19627, 19387, 01405 21477, 23134, 21841, 23919, 22089, 21519, 21134, 20852, 01406 19675, 17821, 19044, 17477, 19986, 16955, 18446, 16086, 01407 21138, 18899, 20952, 18929, 21452, 17833, 20104, 17159, 01408 19770, 20056, 20336, 20866, 19329, 18217, 18908, 18004, 01409 21556, 21948, 23079, 23889, 20922, 19544, 20984, 19781, 01410 19781, 20984, 19544, 20922, 23889, 23079, 21948, 21556, 01411 18004, 18908, 18217, 19329, 20866, 20336, 20056, 19770, 01412 17159, 20104, 17833, 21452, 18929, 20952, 18899, 21138, 01413 16086, 18446, 16955, 19986, 17477, 19044, 17821, 19675, 01414 20852, 21134, 21519, 22089, 23919, 21841, 23134, 21477, 01415 19387, 19627, 20472, 20978, 21702, 20129, 21772, 20389, 01416 17411, 19613, 18753, 21844, 18430, 19409, 19069, 20363, 01417 16671, 18584, 18231, 21048, 17520, 18365, 18474, 19657, 01418 }; 01419 01420 const uint16_t ff_cb2_base[128]={ 01421 12174, 13380, 13879, 13832, 13170, 13227, 13204, 12053, 01422 12410, 13988, 14348, 14631, 13100, 13415, 13224, 12268, 01423 11982, 13825, 13499, 14210, 13877, 14788, 13811, 13109, 01424 11449, 13275, 12833, 13717, 12728, 13696, 12759, 12405, 01425 10230, 12185, 11628, 13161, 11762, 13458, 12312, 12818, 01426 10443, 12773, 12011, 14020, 11818, 13825, 12453, 13226, 01427 10446, 13162, 11881, 14300, 12859, 16288, 13490, 15053, 01428 10155, 12820, 11519, 13973, 12041, 15081, 12635, 14198, 01429 14198, 12635, 15081, 12041, 13973, 11519, 12820, 10155, 01430 15053, 13490, 16288, 12859, 14300, 11881, 13162, 10446, 01431 13226, 12453, 13825, 11818, 14020, 12011, 12773, 10443, 01432 12818, 12312, 13458, 11762, 13161, 11628, 12185, 10230, 01433 12405, 12759, 13696, 12728, 13717, 12833, 13275, 11449, 01434 13109, 13811, 14788, 13877, 14210, 13499, 13825, 11982, 01435 12268, 13224, 13415, 13100, 14631, 14348, 13988, 12410, 01436 12053, 13204, 13227, 13170, 13832, 13879, 13380, 12174, 01437 }; 01438 01439 const int16_t ff_energy_tab[32]={ 01440 0, 16, 20, 25, 32, 41, 51, 65, 01441 81, 103, 129, 163, 205, 259, 326, 410, 01442 516, 650, 819, 1031, 1298, 1634, 2057, 2590, 01443 3261, 4105, 5168, 6507, 8192, 10313, 12983, 16345 01444 }; 01445 01446 static const int16_t lpc_refl_cb1[64]={ 01447 -4041, -4018, -3998, -3977, -3954, -3930, -3906, -3879, 01448 -3852, -3825, -3795, -3764, -3731, -3699, -3666, -3631, 01449 -3594, -3555, -3513, -3468, -3420, -3372, -3321, -3268, 01450 -3212, -3153, -3090, -3021, -2944, -2863, -2772, -2676, 01451 -2565, -2445, -2328, -2202, -2072, -1941, -1808, -1660, 01452 -1508, -1348, -1185, -994, -798, -600, -374, -110, 01453 152, 447, 720, 982, 1229, 1456, 1682, 1916, 01454 2130, 2353, 2595, 2853, 3118, 3363, 3588, 3814 01455 }; 01456 01457 static const int16_t lpc_refl_cb2[32]={ 01458 -3091, -2386, -1871, -1425, -1021, -649, -316, -20, 01459 267, 544, 810, 1065, 1305, 1534, 1756, 1970, 01460 2171, 2359, 2536, 2700, 2854, 2996, 3133, 3263, 01461 3386, 3499, 3603, 3701, 3789, 3870, 3947, 4020 01462 }; 01463 01464 static const int16_t lpc_refl_cb3[32]={ 01465 -3525, -3295, -3081, -2890, -2696, -2511, -2328, -2149, 01466 -1979, -1817, -1658, -1498, -1341, -1188, -1032, -876, 01467 -721, -561, -394, -228, -54, 119, 296, 484, 01468 683, 895, 1123, 1373, 1651, 1965, 2360, 2854 01469 }; 01470 01471 static const int16_t lpc_refl_cb4[16]={ 01472 -1845, -1057, -522, -77, 301, 647, 975, 1285, 01473 1582, 1873, 2163, 2452, 2735, 3017, 3299, 3569 01474 }; 01475 01476 static const int16_t lpc_refl_cb5[16]={ 01477 -2691, -2187, -1788, -1435, -1118, -837, -571, -316, 01478 -59, 201, 470, 759, 1077, 1457, 1908, 2495 01479 }; 01480 01481 static const int16_t lpc_refl_cb6[8]={ 01482 -1372, -474, 133, 632, 1100, 1571, 2075, 2672 01483 }; 01484 01485 static const int16_t lpc_refl_cb7[8]={ 01486 -2389, -1787, -1231, -717, -239, 234, 770, 1474 01487 }; 01488 01489 static const int16_t lpc_refl_cb8[8]={ 01490 -1569, -864, -296, 200, 670, 1151, 1709, 2385 01491 }; 01492 01493 static const int16_t lpc_refl_cb9[8]={ 01494 -2200, -1608, -1062, -569, -120, 338, 863, 1621 01495 }; 01496 01497 static const int16_t lpc_refl_cb10[4]={ 01498 -617, 190, 802, 1483 01499 }; 01500 01501 const int16_t * const ff_lpc_refl_cb[10]={ 01502 lpc_refl_cb1, lpc_refl_cb2, lpc_refl_cb3, lpc_refl_cb4, lpc_refl_cb5, 01503 lpc_refl_cb6, lpc_refl_cb7, lpc_refl_cb8, lpc_refl_cb9, lpc_refl_cb10 01504 }; 01505 01506 static void ff_add_wav(int16_t *dest, int n, int skip_first, int *m, const int16_t *s1, 01507 const int8_t *s2, const int8_t *s3) 01508 { 01509 int i; 01510 int v[3]; 01511 01512 v[0] = 0; 01513 for (i=!skip_first; i<3; i++) 01514 v[i] = (ff_gain_val_tab[n][i] * m[i]) >> ff_gain_exp_tab[n]; 01515 01516 if (v[0]) { 01517 for (i=0; i < BLOCKSIZE; i++) 01518 dest[i] = (s1[i]*v[0] + s2[i]*v[1] + s3[i]*v[2]) >> 12; 01519 } else { 01520 for (i=0; i < BLOCKSIZE; i++) 01521 dest[i] = ( s2[i]*v[1] + s3[i]*v[2]) >> 12; 01522 } 01523 } 01524 01529 void ff_copy_and_dup(int16_t *target, const int16_t *source, int offset) 01530 { 01531 source += BUFFERSIZE - offset; 01532 01533 memcpy(target, source, FFMIN(BLOCKSIZE, offset)*sizeof(*target)); 01534 if (offset < BLOCKSIZE) 01535 memcpy(target + offset, source, (BLOCKSIZE - offset)*sizeof(*target)); 01536 } 01537 01544 int ff_eval_refl(int *refl, const int16_t *coefs, AVCodecContext *avctx) 01545 { 01546 int b, i, j; 01547 int buffer1[10]; 01548 int buffer2[10]; 01549 int *bp1 = buffer1; 01550 int *bp2 = buffer2; 01551 01552 for (i=0; i < 10; i++) 01553 buffer2[i] = coefs[i]; 01554 01555 refl[9] = bp2[9]; 01556 01557 if ((unsigned) bp2[9] + 0x1000 > 0x1fff) { 01558 av_log(avctx, AV_LOG_ERROR, "Overflow. Broken sample?\n"); 01559 return 1; 01560 } 01561 01562 for (i=8; i >= 0; i--) { 01563 b = 0x1000-((bp2[i+1] * bp2[i+1]) >> 12); 01564 01565 if (!b) 01566 b = -2; 01567 01568 for (j=0; j <= i; j++) 01569 bp1[j] = ((bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12)) * (0x1000000 / b)) >> 12; 01570 01571 if ((unsigned) bp1[i] + 0x1000 > 0x1fff) 01572 return 1; 01573 01574 refl[i] = bp1[i]; 01575 01576 FFSWAP(int *, bp1, bp2); 01577 } 01578 return 0; 01579 } 01580 01585 void ff_eval_coefs(int *coefs, const int *refl) 01586 { 01587 int buffer[10]; 01588 int *b1 = buffer; 01589 int *b2 = coefs; 01590 int i, j; 01591 01592 for (i=0; i < 10; i++) { 01593 b1[i] = refl[i] << 4; 01594 01595 for (j=0; j < i; j++) 01596 b1[j] = ((refl[i] * b2[i-j-1]) >> 12) + b2[j]; 01597 01598 FFSWAP(int *, b1, b2); 01599 } 01600 01601 for (i=0; i < 10; i++) 01602 coefs[i] >>= 4; 01603 } 01604 01605 void ff_int_to_int16(int16_t *out, const int *inp) 01606 { 01607 int i; 01608 01609 for (i=0; i < 10; i++) 01610 *out++ = *inp++; 01611 } 01612 01617 int ff_t_sqrt(unsigned int x) 01618 { 01619 int s = 2; 01620 while (x > 0xfff) { 01621 s++; 01622 x >>= 2; 01623 } 01624 01625 return ff_sqrt(x << 20) << s; 01626 } 01627 01628 unsigned int ff_rms(const int *data) 01629 { 01630 int i; 01631 unsigned int res = 0x10000; 01632 int b = 10; 01633 01634 for (i=0; i < 10; i++) { 01635 res = (((0x1000000 - data[i]*data[i]) >> 12) * res) >> 12; 01636 01637 if (res == 0) 01638 return 0; 01639 01640 while (res <= 0x3fff) { 01641 b++; 01642 res <<= 2; 01643 } 01644 } 01645 01646 return ff_t_sqrt(res) >> b; 01647 } 01648 01649 int ff_interp(RA144Context *ractx, int16_t *out, int a, int copyold, int energy) 01650 { 01651 int work[10]; 01652 int b = NBLOCKS - a; 01653 int i; 01654 01655 // Interpolate block coefficients from the this frame's forth block and 01656 // last frame's forth block. 01657 for (i=0; i<10; i++) 01658 out[i] = (a * ractx->lpc_coef[0][i] + b * ractx->lpc_coef[1][i])>> 2; 01659 01660 if (ff_eval_refl(work, out, ractx->avctx)) { 01661 // The interpolated coefficients are unstable, copy either new or old 01662 // coefficients. 01663 ff_int_to_int16(out, ractx->lpc_coef[copyold]); 01664 return ff_rescale_rms(ractx->lpc_refl_rms[copyold], energy); 01665 } else { 01666 return ff_rescale_rms(ff_rms(work), energy); 01667 } 01668 } 01669 01670 unsigned int ff_rescale_rms(unsigned int rms, unsigned int energy) 01671 { 01672 return (rms * energy) >> 10; 01673 } 01674 01676 int ff_irms(const int16_t *data) 01677 { 01678 unsigned int i, sum = 0; 01679 01680 for (i=0; i < BLOCKSIZE; i++) 01681 sum += data[i] * data[i]; 01682 01683 if (sum == 0) 01684 return 0; /* OOPS - division by zero */ 01685 01686 return 0x20000000 / (ff_t_sqrt(sum) >> 8); 01687 } 01688 01689 void ff_subblock_synthesis(RA144Context *ractx, const uint16_t *lpc_coefs, 01690 int cba_idx, int cb1_idx, int cb2_idx, 01691 int gval, int gain) 01692 { 01693 uint16_t buffer_a[40]; 01694 uint16_t *block; 01695 int m[3]; 01696 01697 if (cba_idx) { 01698 cba_idx += BLOCKSIZE/2 - 1; 01699 ff_copy_and_dup(buffer_a, ractx->adapt_cb, cba_idx); 01700 m[0] = (ff_irms(buffer_a) * gval) >> 12; 01701 } else { 01702 m[0] = 0; 01703 } 01704 m[1] = (ff_cb1_base[cb1_idx] * gval) >> 8; 01705 m[2] = (ff_cb2_base[cb2_idx] * gval) >> 8; 01706 memmove(ractx->adapt_cb, ractx->adapt_cb + BLOCKSIZE, 01707 (BUFFERSIZE - BLOCKSIZE) * sizeof(*ractx->adapt_cb)); 01708 01709 block = ractx->adapt_cb + BUFFERSIZE - BLOCKSIZE; 01710 01711 ff_add_wav(block, gain, cba_idx, m, cba_idx? buffer_a: NULL, 01712 ff_cb1_vects[cb1_idx], ff_cb2_vects[cb2_idx]); 01713 01714 memcpy(ractx->curr_sblock, ractx->curr_sblock + 40, 01715 10*sizeof(*ractx->curr_sblock)); 01716 01717 if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + 10, lpc_coefs, 01718 block, BLOCKSIZE, 10, 1, 0xfff)) 01719 memset(ractx->curr_sblock, 0, 50*sizeof(*ractx->curr_sblock)); 01720 }