LCOV - code coverage report
Current view: top level - libavcodec - ra144.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 95 100 95.0 %
Date: 2017-12-17 04:34:43 Functions: 11 11 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Real Audio 1.0 (14.4K)
       3             :  * Copyright (c) 2003 The FFmpeg project
       4             :  *
       5             :  * This file is part of FFmpeg.
       6             :  *
       7             :  * FFmpeg is free software; you can redistribute it and/or
       8             :  * modify it under the terms of the GNU Lesser General Public
       9             :  * License as published by the Free Software Foundation; either
      10             :  * version 2.1 of the License, or (at your option) any later version.
      11             :  *
      12             :  * FFmpeg is distributed in the hope that it will be useful,
      13             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             :  * Lesser General Public License for more details.
      16             :  *
      17             :  * You should have received a copy of the GNU Lesser General Public
      18             :  * License along with FFmpeg; if not, write to the Free Software
      19             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      20             :  */
      21             : 
      22             : #include <stdint.h>
      23             : #include "avcodec.h"
      24             : #include "celp_filters.h"
      25             : #include "mathops.h"
      26             : #include "ra144.h"
      27             : 
      28             : const int16_t ff_gain_val_tab[256][3] = {
      29             :     { 541, 956,  768}, { 877, 581,  568}, { 675,1574,  635}, {1248,1464,  668},
      30             :     {1246, 839, 1394}, {2560,1386,  991}, { 925, 687,  608}, {2208, 797, 1144},
      31             :     { 535, 832,  799}, { 762, 605, 1154}, { 832,1122, 1003}, {1180, 687, 1176},
      32             :     {1292, 901,  732}, {1656, 689,  896}, {1750,1248,  848}, {2284, 942, 1022},
      33             :     { 824,1472,  643}, { 517, 765,  512}, { 562,1816, 1522}, { 694,1826, 2700},
      34             :     { 704, 524,  672}, {1442, 757, 2232}, { 884, 551, 1266}, {2232,1007, 1692},
      35             :     { 932, 746,  777}, {1132, 822,  926}, {1226, 771,  611}, {2948,1342, 1008},
      36             :     {1302, 594, 1158}, {1602, 636, 1128}, {3408, 910, 1438}, {1996, 614,  575},
      37             :     { 665, 935,  628}, { 631,1192,  829}, { 644, 926, 1052}, { 879, 988, 1226},
      38             :     { 941,2768, 2772}, { 565,1344, 2304}, { 547, 628,  740}, { 639, 532, 1074},
      39             :     { 955,1208,  598}, {1124,1160,  900}, {1206, 899, 1242}, { 746, 533,  624},
      40             :     {1458,1028,  735}, {1706,1102,  692}, {1898,1018, 1004}, {2176, 988,  735},
      41             :     {1578, 782, 1642}, { 897, 516,  754}, {2068, 702, 1656}, {2344, 818, 1526},
      42             :     { 907, 652,  592}, {1056, 652,  642}, {2124,1416,  780}, {2664,1250,  727},
      43             :     {1894, 727, 1108}, {2196, 657,  981}, {4840, 920, 1704}, {4992,1238,  983},
      44             :     {2420, 909, 1094}, {2760, 935, 1032}, {2800, 612,  853}, {3068, 832,  574},
      45             :     { 523,1796,  923}, { 722,1916, 1382}, {1226,1542,  928}, { 758, 757,  584},
      46             :     { 512,1134,  577}, { 615,1276,  698}, { 574,2568, 2356}, { 993,2728, 3512},
      47             :     { 539, 890,  913}, { 694, 928, 1088}, { 805, 600, 1360}, {2160, 951, 3128},
      48             :     { 816, 950,  590}, { 955, 847,  811}, {1094, 883,  556}, {1304, 888,  604},
      49             :     { 863,1170,  855}, {1023, 997, 1032}, { 932,1228, 1280}, { 627, 564,  573},
      50             :     { 876, 900, 1448}, {1030, 857, 1792}, {1294, 953, 1758}, {1612, 854, 1714},
      51             :     {1090,1166,  631}, {1314,1202,  751}, {1480, 905,  795}, {1682,1016,  568},
      52             :     {1494,1178,  983}, { 878, 613,  526}, {1728,1446,  779}, {2136,1348,  774},
      53             :     { 950, 649,  939}, {1180, 703,  899}, {1236, 527, 1158}, {1450, 647,  972},
      54             :     {1282, 647,  707}, {1460, 663,  644}, {1614, 572,  578}, {3516,1222,  821},
      55             :     {2668, 729, 1682}, {3128, 585, 1502}, {3208, 733,  976}, {6800, 871, 1416},
      56             :     {3480, 743, 1408}, {3764, 899, 1170}, {3772, 632,  875}, {4092, 732,  638},
      57             :     {3112, 753, 2620}, {3372, 945, 1890}, {3768, 969, 2288}, {2016, 559,  854},
      58             :     {1736, 729,  787}, {1940, 686,  547}, {2140, 635,  674}, {4480,1272,  828},
      59             :     {3976, 592, 1666}, {4384, 621, 1388}, {4400, 801,  955}, {4656, 522,  646},
      60             :     {4848, 625, 1636}, {4984, 591,  874}, {5352, 535, 1001}, {11216,938, 1184},
      61             :     { 925,3280, 1476}, { 735,1580, 1088}, {1150,1576,  674}, { 655, 783,  528},
      62             :     { 527,2052, 1354}, { 782,1704, 1880}, { 578, 910, 1026}, { 692, 882, 1468},
      63             :     { 586, 683,  715}, { 739, 609,  717}, { 778, 773,  697}, { 922, 785,  813},
      64             :     { 766, 651,  984}, { 978, 596, 1030}, {1070, 757, 1080}, {1324, 687, 1178},
      65             :     {1108,2144,  979}, { 723, 982,  690}, { 936, 956,  527}, {1180,1002,  547},
      66             :     { 517,1306,  825}, { 832,1184,  974}, {1024, 957,  903}, {1262,1090,  906},
      67             :     {1028, 720,  649}, {1192, 679,  694}, {2468,1480,  979}, {2844,1370,  877},
      68             :     {1310, 835,  848}, {1508, 839,  698}, {1742,1030,  769}, {1910, 852,  573},
      69             :     {1280, 859, 1174}, {1584, 863, 1108}, {1686, 708, 1364}, {1942, 768, 1104},
      70             :     { 891, 536,  690}, {1016, 560,  663}, {2172, 870, 1348}, {2404, 999, 1170},
      71             :     {1890, 966,  889}, {2116, 912,  777}, {2296,1020,  714}, {4872,1844,  932},
      72             :     {2392, 778,  929}, {2604, 772,  744}, {2764, 957,  722}, {5832,1532,  984},
      73             :     {2188, 519, 1264}, {2332, 532,  922}, {5064, 995, 2412}, {2708, 571,  874},
      74             :     {2408, 545,  666}, {5016,1084,  875}, {5376, 983, 1196}, {5536, 979,  730},
      75             :     {5344, 634, 1744}, {5688, 706, 1348}, {5912, 977, 1190}, {6072, 905,  763},
      76             :     {6048, 582, 1526}, {11968,1013,1816}, {12864,937, 1900}, {12560,1086, 998},
      77             :     {1998, 684, 1884}, {2504, 633, 1992}, {1252, 567,  835}, {1478, 571,  973},
      78             :     {2620, 769, 1414}, {2808, 952, 1142}, {2908, 712, 1028}, {2976, 686,  741},
      79             :     {1462, 552,  714}, {3296, 991, 1452}, {1590, 615,  544}, {3480,1150,  824},
      80             :     {3212, 832,  923}, {3276, 839,  531}, {3548, 786,  852}, {3732, 764,  570},
      81             :     {5728, 906, 2616}, {6272, 804, 2252}, {3096, 535,  876}, {3228, 598,  649},
      82             :     {6536, 759, 1436}, {6648, 993,  846}, {6864, 567, 1210},{14016,1012, 1302},
      83             :     {3408, 548, 1098}, {7160,1008, 1742}, {7136,1000, 1182}, {7480,1032,  836},
      84             :     {7448, 612, 1552}, {7744, 614,  816}, {8384, 777, 1438}, {8784, 694,  786},
      85             :     { 882,1508, 1068}, { 597, 837,  766}, {1270, 954, 1408}, { 803, 550,  798},
      86             :     {1398,1308,  798}, {1848,1534,  738}, { 970, 675,  608}, {1264, 706,  684},
      87             :     {1716, 767, 1126}, {2108, 765, 1404}, {2236, 924, 1003}, {2472,1048,  611},
      88             :     { 999, 942,  963}, {1094, 857,  935}, {2936, 926, 1138}, {1934, 746,  551},
      89             :     {3336, 633, 1762}, {3764, 701, 1454}, {1890, 564,  636}, {4096,1126,  793},
      90             :     {3936, 556, 1140}, {3936, 540,  740}, {4216, 764,  874}, {8480,1328, 1014},
      91             :     {2184, 515, 1042}, {4432, 934, 1344}, {4784, 945, 1112}, {5016,1062,  733},
      92             :     {9216,1020, 2028}, {9968, 924, 1188}, {5424, 909, 1206}, {6512, 744, 1086}
      93             : };
      94             : 
      95             : const uint8_t ff_gain_exp_tab[256] = {
      96             :    15, 15, 15, 15, 15, 16, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14,
      97             :    14, 13, 14, 14, 13, 14, 13, 14, 13, 13, 13, 14, 13, 13, 14, 13,
      98             :    13, 13, 13, 13, 14, 13, 12, 12, 13, 13, 13, 12, 13, 13, 13, 13,
      99             :    13, 12, 13, 13, 12, 12, 13, 13, 13, 13, 14, 14, 13, 13, 13, 13,
     100             :    13, 13, 13, 12, 12, 12, 13, 13, 12, 12, 12, 13, 12, 12, 12, 12,
     101             :    12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12,
     102             :    12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 13, 13, 13, 13,
     103             :    13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14,
     104             :    13, 12, 12, 11, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
     105             :    12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 11, 11, 11, 11,
     106             :    12, 12, 12, 12, 11, 11, 12, 12, 12, 12, 12, 13, 12, 12, 12, 13,
     107             :    12, 12, 13, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
     108             :    12, 12, 11, 11, 12, 12, 12, 12, 11, 12, 11, 12, 12, 12, 12, 12,
     109             :    13, 13, 12, 12, 13, 13, 13, 14, 12, 13, 13, 13, 13, 13, 13, 13,
     110             :    11, 10, 11, 10, 11, 11, 10, 10, 11, 11, 11, 11, 10,  9, 11, 10,
     111             :    12, 12, 11, 12, 12, 12, 12, 13, 11, 12, 12, 12, 13, 13, 12, 12
     112             : };
     113             : 
     114             : const int8_t ff_cb1_vects[128][40]={
     115             :     {
     116             :      38,  -4,  15,  -4,  14, -13,  12, -11,  -2,  -6,
     117             :      -6, -11, -45, -16, -11, -13,  -7,   6, -12,   4,
     118             :     -20,   3, -16,  12,  -1,  12,  46,  24,   0,  33,
     119             :      -3,   9, -12, -12,  -8,  -7,  17,  -6,   0,  -2,
     120             :     }, {
     121             :      60, -16,   3, -22,  10, -32,   0, -28, -17, -18,
     122             :      -3, -25, -37, -23, -10,   3,   2,   3,   0,   3,
     123             :     -14,   0, -14,  -1,   0,   2,  32,   9,  -1,  25,
     124             :       7,  13,  -5,  13,   8,   1,   2,   8, -10,   6,
     125             :     }, {
     126             :      27, -12,  28,  -2,   6,  -7,  15,   9, -11,   1,
     127             :     -13, -11, -40,   4, -29, -14, -19,  -5, -23,  -8,
     128             :     -30, -13, -17,   0, -14,  12,  34,  20,  -2,  25,
     129             :       2, -16,  -4, -12,  15,  16,  29,   7,  24,  10,
     130             :     }, {
     131             :      49, -24,  16, -20,   2, -26,   2,  -7, -25, -10,
     132             :     -11, -25, -32,  -3, -27,   2,  -8,  -8, -11,  -9,
     133             :     -24, -17, -16, -14, -13,   2,  20,   5,  -4,  17,
     134             :      14, -12,   3,  13,  33,  25,  14,  23,  15,  19,
     135             :     }, {
     136             :      46,  -6,  21,   8,  -2, -16,  -5,  -8, -11,   4,
     137             :       8,  15, -24,   4,  -2, -26,  -3, -16, -16, -14,
     138             :      -9,  -2,  -1,   4,  19,   7,  36,  17,   9,  13,
     139             :       0,  31,  -5, -12,   7,  -8,  11, -15, -13,  -4,
     140             :     }, {
     141             :      68, -18,   9,  -9,  -6, -35, -18, -25, -26,  -7,
     142             :      10,   1, -16,  -3,  -1,  -9,   6, -19,  -4, -15,
     143             :      -4,  -6,   0,  -8,  20,  -2,  23,   2,   7,   5,
     144             :      12,  35,   1,  13,  24,   0,  -3,   0, -22,   4,
     145             :     }, {
     146             :      35, -14,  34,  10, -10, -10,  -1,  12, -20,  12,
     147             :       0,  15, -18,  24, -20, -27, -14, -28, -27, -27,
     148             :     -20, -19,  -2,  -8,   5,   7,  25,  13,   5,   5,
     149             :       6,   5,   2, -12,  31,  15,  23,  -1,  12,   8,
     150             :     }, {
     151             :      57, -26,  22,  -7, -14, -28, -14,  -3, -35,   0,
     152             :       3,   1, -11,  16, -18, -10,  -4, -31, -15, -28,
     153             :     -14, -23,  -1, -21,   7,  -2,  11,  -1,   3,  -1,
     154             :      18,   9,  10,  13,  49,  24,   8,  14,   2,  16,
     155             :     }, {
     156             :      25,  15,  22,  11,  18,   4,  15, -22,   8,  -2,
     157             :     -17,  -9, -48, -20, -30, -17, -16,  11,  -1,  16,
     158             :       2,  10,  -5,  26,  -2,  -4,  22,   0,   2,  10,
     159             :      -6,  13, -14,  10, -23,   0,  10,  -2,   1,   0,
     160             :     }, {
     161             :      47,   3,  11,  -6,  15, -13,   2, -38,  -6, -13,
     162             :     -15, -22, -40, -28, -28,   0,  -5,   8,  10,  15,
     163             :       7,   7,  -4,  13,  -1, -14,   9, -14,   0,   2,
     164             :       4,  18,  -7,  36,  -6,   8,  -3,  13,  -7,   8,
     165             :     }, {
     166             :      14,   7,  36,  13,  10,  10,  18,   0,   0,   5,
     167             :     -25,  -8, -43,   0, -48, -18, -27,   0, -12,   3,
     168             :      -7,  -6,  -7,  13, -15,  -5,  11,  -3,   0,   2,
     169             :       0, -12,  -6,  10,   0,  23,  22,  11,  26,  12,
     170             :     }, {
     171             :      36,  -5,  24,  -4,   7,  -7,   6, -17, -14,  -5,
     172             :     -22, -22, -35,  -8, -46,  -1, -17,  -3,   0,   2,
     173             :      -2, -10,  -5,   0, -14, -15,  -2, -18,  -2,  -4,
     174             :      11,  -7,   1,  36,  18,  32,   7,  27,  17,  20,
     175             :     }, {
     176             :      33,  13,  29,  24,   1,   1,  -2, -18,   0,   9,
     177             :      -3,  17, -27,   0, -21, -30, -12, -11,  -5,  -2,
     178             :      12,   4,   9,  19,  18,  -9,  13,  -6,  11,  -8,
     179             :      -2,  35,  -8,  10,  -7,  -1,   4, -11, -10,  -2,
     180             :     }, {
     181             :      55,   1,  17,   6,  -1, -16, -15, -35, -15,  -2,
     182             :       0,   4, -19,  -8, -20, -13,  -1, -14,   7,  -3,
     183             :      18,   0,  10,   5,  19, -19,   0, -21,   8, -16,
     184             :       9,  39,   0,  36,  10,   7,  -9,   4, -20,   5,
     185             :     }, {
     186             :      22,   5,  42,  26,  -6,   8,   1,   2,  -9,  17,
     187             :     -10,  18, -21,  19, -39, -31, -23, -23, -16, -15,
     188             :       2, -12,   7,   6,   5,  -9,   1, -10,   7, -16,
     189             :       4,   9,   0,  10,  17,  22,  16,   2,  14,   9,
     190             :     }, {
     191             :      44,  -6,  30,   8,  -9, -10, -11, -14, -23,   5,
     192             :      -8,   4, -14,  12, -37, -14, -12, -26,  -4, -16,
     193             :       8, -16,   9,  -7,   6, -19, -12, -25,   5, -24,
     194             :      15,  13,   8,  36,  34,  31,   1,  18,   4,  18,
     195             :     }, {
     196             :      -3,  -5,  -9,  -7,  15,  -1,   5,  13,   2,  12,
     197             :       5,   2, -21, -23,  -2, -16,   0,   5,  -6,  13,
     198             :     -23,   3, -32,  10, -15,   8,  44,  28,   9,  37,
     199             :      -2,  13,  -9, -15, -12, -27,  -7, -12,   0, -11,
     200             :     }, {
     201             :      18, -17, -21, -25,  11, -19,  -6,  -3, -11,   0,
     202             :       7, -11, -13, -31,  -1,   0,   9,   1,   5,  12,
     203             :     -18,   0, -31,  -2, -13,  -1,  30,  14,   7,  29,
     204             :       9,  18,  -1,  10,   4, -18, -22,   3, -10,  -2,
     205             :     }, {
     206             :     -13, -13,   3,  -5,   7,   4,   9,  34,  -5,  20,
     207             :      -2,   3, -16,  -3, -20, -17, -11,  -7, -17,   0,
     208             :     -34, -13, -33,  -2, -28,   8,  32,  24,   5,  29,
     209             :       3, -12,   0, -15,  11,  -3,   3,   2,  24,   1,
     210             :     }, {
     211             :       8, -25,  -8, -23,   3, -13,  -3,  17, -20,   8,
     212             :       0, -10,  -8, -11, -18,   0,  -1, -10,  -5,   0,
     213             :     -28, -17, -32, -15, -26,  -1,  19,   9,   3,  21,
     214             :      15,  -7,   6,   9,  29,   5, -10,  17,  15,   9,
     215             :     }, {
     216             :       4,  -6,  -3,   5,  -1,  -4, -11,  16,  -6,  23,
     217             :      19,  29,   0,  -3,   6, -30,   3, -17, -10,  -5,
     218             :     -13,  -2, -17,   3,   5,   3,  35,  21,  17,  17,
     219             :       2,  35,  -2, -15,   3, -28, -13, -21, -13, -13,
     220             :     }, {
     221             :      26, -19, -15, -12,  -5, -22, -24,   0, -21,  12,
     222             :      21,  15,   8, -11,   7, -12,  14, -20,   2,  -6,
     223             :      -7,  -6, -16,  -9,   6,  -5,  21,   7,  15,  10,
     224             :      13,  39,   5,  10,  20, -19, -28,  -5, -22,  -5,
     225             :     }, {
     226             :      -5, -15,   9,   7,  -9,   2,  -8,  37, -14,  31,
     227             :      11,  29,   5,  16, -11, -30,  -7, -29, -21, -18,
     228             :     -23, -19, -18,  -9,  -7,   3,  23,  17,  14,   9,
     229             :       8,   9,   6, -15,  27,  -4,  -2,  -6,  12,  -1,
     230             :     }, {
     231             :      16, -27,  -2, -10, -13, -16, -20,  20, -29,  20,
     232             :      14,  16,  13,   8,  -9, -13,   2, -33,  -9, -19,
     233             :     -17, -23, -17, -22,  -6,  -6,   9,   2,  12,   2,
     234             :      20,  13,  13,  10,  45,   4, -16,   8,   2,   7,
     235             :     }, {
     236             :     -16,  14,  -2,   8,  20,  17,   9,   2,  14,  16,
     237             :      -6,   5, -24, -28, -21, -20,  -8,   9,   4,  25,
     238             :      -1,  11, -22,  24, -15,  -8,  21,   5,  11,  14,
     239             :      -5,  18, -11,   7, -27, -20, -14,  -7,   1,  -9,
     240             :     }, {
     241             :       6,   2, -14,  -9,  16,  -1,  -3, -14,   0,   5,
     242             :      -3,  -8, -16, -36, -19,  -3,   1,   6,  17,  24,
     243             :       4,   7, -21,  11, -14, -18,   7,  -9,   9,   7,
     244             :       6,  22,  -3,  33, -10, -11, -28,   7,  -7,   0,
     245             :     }, {
     246             :     -26,   6,  11,  10,  12,  23,  12,  23,   5,  24,
     247             :     -13,   5, -19,  -8, -38, -21, -20,  -2,  -6,  12,
     248             :     -11,  -5, -23,  11, -29,  -9,   9,   0,   7,   6,
     249             :       1,  -7,  -2,   7,  -3,   3,  -2,   6,  27,   3,
     250             :     }, {
     251             :      -4,  -6,   0,  -7,   8,   4,   0,   6,  -9,  13,
     252             :     -11,  -7, -11, -15, -37,  -4,  -9,  -5,   5,  11,
     253             :      -5,  -9, -22,  -1, -27, -18,  -4, -14,   5,   0,
     254             :      12,  -3,   4,  32,  14,  12, -17,  22,  17,  11,
     255             :     }, {
     256             :      -8,  12,   3,  21,   3,  14,  -8,   5,   4,  28,
     257             :       7,  32,  -2,  -8, -12, -34,  -4, -12,   1,   6,
     258             :       9,   4,  -7,  17,   4, -13,  11,  -1,  19,  -4,
     259             :       0,  39,  -4,   7, -11, -21, -20, -16, -10, -11,
     260             :     }, {
     261             :      13,   0,  -8,   3,   0,  -4, -21, -11,  -9,  16,
     262             :      10,  18,   5, -16, -10, -16,   5, -15,  13,   5,
     263             :      15,   1,  -6,   4,   6, -23,  -2, -16,  17, -12,
     264             :      10,  44,   3,  33,   6, -12, -34,  -1, -20,  -3,
     265             :     }, {
     266             :     -18,   4,  17,  23,  -4,  20,  -4,  26,  -3,  36,
     267             :       0,  32,   2,  12, -29, -34, -16, -24, -10,  -6,
     268             :       0, -12,  -8,   4,  -8, -13,   0,  -6,  16, -12,
     269             :       5,  13,   3,   7,  13,   3,  -8,  -2,  14,   0,
     270             :     }, {
     271             :       3,  -7,   5,   5,  -8,   2, -17,   9, -18,  24,
     272             :       2,  19,  10,   4, -28, -17,  -5, -28,   2,  -7,
     273             :       4, -15,  -7,  -8,  -6, -23, -13, -21,  14, -20,
     274             :      17,  18,  11,  33,  30,  11, -23,  13,   5,   9,
     275             :     }, {
     276             :      60,  10,   7,  -1,   9,  -8,   6, -13,   2, -15,
     277             :      -1, -10, -13, -11,  15,   0,   6,   9,  -1,   0,
     278             :     -13,   1, -11,  -3, -13,  21,  13,  26,  -7,  31,
     279             :     -10,  -7, -16, -33, -31, -10,  22,  -8,   1,  -2,
     280             :     }, {
     281             :      82,  -1,  -4, -19,   6, -27,  -6, -29, -12, -26,
     282             :       1, -24,  -5, -18,  17,  17,  17,   6,  10,   0,
     283             :      -7,  -2,  -9, -16, -12,  11,   0,  11,  -9,  23,
     284             :       0,  -3,  -8,  -8, -13,  -1,   8,   7,  -7,   6,
     285             :     }, {
     286             :      49,   2,  21,   0,   1,  -2,   9,   8,  -6,  -6,
     287             :      -8, -10,  -8,   9,  -2,   0,  -4,  -2, -13, -12,
     288             :     -23, -15, -12, -16, -26,  21,   2,  21, -11,  23,
     289             :      -4, -33,  -7, -33,  -6,  13,  34,   5,  27,  10,
     290             :     }, {
     291             :      71, -10,   9, -17,  -1, -20,  -3,  -8, -21, -18,
     292             :      -6, -24,   0,   1,   0,  16,   6,  -5,   0, -13,
     293             :     -17, -19, -11, -29, -25,  11, -11,   6, -13,  15,
     294             :       7, -29,   0,  -8,  11,  22,  20,  21,  17,  18,
     295             :     }, {
     296             :      67,   8,  14,  11,  -7, -11, -11,  -9,  -7,  -3,
     297             :      13,  16,   8,   9,  24, -12,  10, -13,  -5, -17,
     298             :      -2,  -4,   3, -10,   6,  17,   4,  19,   0,  11,
     299             :      -6,  13,  -9, -33, -14, -10,  16, -17, -10,  -4,
     300             :     }, {
     301             :      90,  -3,   2,  -6, -10, -29, -24, -26, -21, -15,
     302             :      15,   2,  16,   1,  25,   4,  21, -16,   6, -18,
     303             :       3,  -8,   5, -24,   8,   7,  -9,   4,  -1,   3,
     304             :       5,  18,  -1,  -7,   2,  -1,   2,  -1, -19,   3,
     305             :     }, {
     306             :      57,   0,  27,  13, -14,  -5,  -7,  11, -15,   4,
     307             :       5,  16,  13,  29,   6, -13,   0, -25, -16, -31,
     308             :     -12, -22,   2, -23,  -6,  16,  -7,  14,  -2,   3,
     309             :       0, -12,   0, -33,   9,  13,  28,  -3,  14,   7,
     310             :     }, {
     311             :      79, -11,  15,  -4, -18, -23, -20,  -5, -30,  -7,
     312             :       7,   2,  21,  21,   8,   3,  10, -28,  -4, -31,
     313             :      -6, -25,   3, -37,  -4,   7, -20,   0,  -4,  -4,
     314             :      11,  -7,   6,  -8,  27,  22,  14,  12,   5,  16,
     315             :     }, {
     316             :      47,  30,  15,  14,  14,   9,   9, -23,  13, -10,
     317             :     -12,  -7, -16, -15,  -3,  -3,  -1,  14,   9,  12,
     318             :       9,   8,   0,  10, -14,   4,  -9,   2,  -5,   8,
     319             :     -13,  -3, -18, -10, -45,  -3,  16,  -4,   4,   0,
     320             :     }, {
     321             :      69,  17,   3,  -3,  10,  -8,  -3, -40,  -1, -21,
     322             :     -10, -21,  -8, -23,  -1,  13,   8,  11,  21,  11,
     323             :      15,   4,   0,  -2, -13,  -5, -23, -12,  -7,   0,
     324             :      -1,   0, -10,  14, -28,   5,   1,  11,  -5,   7,
     325             :     }, {
     326             :      36,  21,  28,  16,   6,  16,  12,  -2,   4,  -2,
     327             :     -20,  -7, -11,   4, -20,  -4, -12,   2,  -1,   0,
     328             :       0,  -8,  -2,  -2, -27,   4, -21,  -2,  -9,   0,
     329             :      -6, -29,  -9, -10, -21,  21,  28,  10,  29,  11,
     330             :     }, {
     331             :      58,   9,  16,  -1,   2,  -2,   0, -19, -10, -13,
     332             :     -17, -21,  -3,  -3, -19,  12,  -2,   0,  10,  -1,
     333             :       5, -12,   0, -15, -26,  -5, -34, -16, -11,  -7,
     334             :       4, -25,  -2,  14,  -3,  29,  13,  25,  20,  20,
     335             :     }, {
     336             :      55,  28,  21,  27,  -2,   7,  -8, -20,   4,   1,
     337             :       1,  18,   5,   4,   5, -16,   2,  -8,   5,  -5,
     338             :      19,   2,  14,   3,   6,   0, -18,  -4,   2, -11,
     339             :      -8,  18, -11, -10, -29,  -3,  10, -13,  -8,  -3,
     340             :     }, {
     341             :      77,  16,   9,   9,  -6, -11, -21, -37, -10, -10,
     342             :       4,   5,  13,  -3,   7,   0,  13, -11,  17,  -6,
     343             :      25,  -1,  15,  -9,   7,  -9, -32, -19,   0, -18,
     344             :       2,  22,  -3,  15, -12,   5,  -4,   2, -17,   5,
     345             :     }, {
     346             :      44,  20,  34,  29, -10,  13,  -4,   0,  -4,   9,
     347             :      -5,  19,  10,  24, -11, -17,  -8, -20,  -5, -19,
     348             :       9, -14,  12,  -9,  -6,   0, -30,  -9,   0, -19,
     349             :      -2,  -7,  -2, -10,  -5,  20,  21,   1,  17,   9,
     350             :     }, {
     351             :      66,   8,  23,  11, -14,  -5, -17, -16, -19,  -2,
     352             :      -3,   5,  18,  17, -10,   0,   1, -23,   6, -20,
     353             :      15, -18,  14, -22,  -5, -10, -44, -23,  -2, -26,
     354             :       9,  -3,   4,  14,  12,  29,   7,  16,   7,  18,
     355             :     }, {
     356             :      18,   9, -17,  -4,  11,   3,   0,  11,   7,   4,
     357             :      10,   3,  10, -18,  24,  -3,  14,   7,   4,  10,
     358             :     -16,   1, -27,  -4, -27,  17,  12,  30,   0,  35,
     359             :      -9,  -3, -12, -36, -35, -30,  -2, -13,   2, -11,
     360             :     }, {
     361             :      40,  -2, -29, -22,   7, -14, -12,  -5,  -7,  -7,
     362             :      12,  -9,  18, -26,  26,  14,  24,   4,  16,   9,
     363             :     -10,  -2, -26, -18, -26,   7,  -1,  15,  -1,  27,
     364             :       2,   0,  -4, -11, -17, -21, -16,   1,  -7,  -3,
     365             :     }, {
     366             :       8,   1,  -3,  -2,   3,  10,   3,  32,  -1,  12,
     367             :       2,   4,  15,   1,   7,  -3,   2,  -4,  -6,  -3,
     368             :     -26, -15, -29, -17, -40,  17,   0,  26,  -2,  27,
     369             :      -2, -29,  -4, -36, -10,  -6,   9,   0,  27,   0,
     370             :     }, {
     371             :      30, -11, -15, -20,   0,  -8,  -9,  15, -15,   0,
     372             :       5,  -9,  23,  -6,   8,  13,  13,  -7,   5,  -3,
     373             :     -20, -19, -27, -31, -39,   7, -13,  11,  -4,  19,
     374             :       8, -25,   3, -11,   7,   2,  -4,  16,  18,   9,
     375             :     }, {
     376             :      26,   7, -11,   8,  -5,   1, -17,  14,  -1,  15,
     377             :      24,  30,  32,   1,  33, -16,  18, -14,   0,  -8,
     378             :      -6,  -4, -12, -12,  -6,  13,   2,  23,   8,  15,
     379             :      -4,  17,  -5, -36, -18, -30,  -8, -22, -10, -14,
     380             :     }, {
     381             :      48,  -4, -23,  -9,  -9, -17, -30,  -2, -16,   3,
     382             :      26,  16,  40,  -6,  35,   1,  28, -17,  12,  -9,
     383             :       0,  -8, -11, -25,  -5,   3, -10,   8,   6,   7,
     384             :       6,  22,   1, -11,  -1, -21, -22,  -7, -19,  -5,
     385             :     }, {
     386             :      15,   0,   2,  10, -13,   7, -14,  35, -10,  23,
     387             :      16,  31,  37,  21,  16, -17,   6, -26, -10, -21,
     388             :     -16, -21, -13, -25, -19,  13,  -8,  19,   5,   7,
     389             :       1,  -8,   2, -36,   5,  -6,   3,  -8,  15,  -1,
     390             :     }, {
     391             :      37, -12,  -9,  -7, -17, -11, -26,  18, -25,  12,
     392             :      19,  17,  45,  14,  17,   0,  17, -30,   1, -22,
     393             :     -10, -25, -12, -38, -18,   3, -22,   4,   3,   0,
     394             :      13,  -3,  10, -11,  23,   2, -10,   7,   5,   7,
     395             :     }, {
     396             :       5,  29,  -9,  11,  15,  22,   3,   0,  18,   8,
     397             :      -1,   6,   7, -23,   6,  -6,   5,  12,  15,  21,
     398             :       5,   8, -17,   9, -28,   0, -11,   6,   2,  12,
     399             :     -11,   0, -14, -13, -49, -22,  -8,  -9,   4,  -9,
     400             :     }, {
     401             :      27,  16, -21,  -6,  12,   3,  -9, -16,   3,  -2,
     402             :       1,  -7,  15, -31,   7,  10,  16,   9,  27,  21,
     403             :      11,   5, -16,  -3, -26,  -9, -24,  -7,   0,   4,
     404             :       0,   4,  -6,  11, -32, -14, -23,   6,  -5,  -1,
     405             :     }, {
     406             :      -4,  20,   3,  13,   8,  28,   6,  21,  10,  16,
     407             :      -8,   7,  12,  -3, -11,  -7,  -5,   0,   4,   8,
     408             :      -4,  -8, -18,  -3, -41,   0, -22,   2,   0,   4,
     409             :      -5, -25,  -6, -14, -25,   1,   2,   4,  29,   2,
     410             :     }, {
     411             :      17,   8,  -8,  -4,   4,  10,  -6,   5,  -4,   5,
     412             :      -6,  -6,  20, -10,  -9,   9,   4,  -2,  16,   7,
     413             :       1, -12, -17, -16, -39,  -9, -36, -12,  -2,  -3,
     414             :       6, -21,   1,  11,  -7,  10, -11,  20,  20,  11,
     415             :     }, {
     416             :      13,  27,  -3,  24,  -1,  19, -14,   3,   9,  20,
     417             :      12,  33,  29,  -3,  15, -20,   9,  -9,  11,   3,
     418             :      16,   2,  -2,   2,  -7,  -3, -20,   0,  10,  -7,
     419             :      -7,  22,  -7, -13, -33, -23, -14, -18,  -7, -12,
     420             :     }, {
     421             :      35,  15, -15,   6,  -4,   1, -27, -12,  -5,   8,
     422             :      15,  19,  37, -11,  16,  -2,  20, -12,  23,   2,
     423             :      22,  -1,  -1, -11,  -5, -13, -34, -14,   8, -14,
     424             :       4,  26,   0,  11, -16, -14, -29,  -2, -17,  -3,
     425             :     }, {
     426             :       3,  19,   9,  26,  -8,  26, -10,  24,   0,  28,
     427             :       5,  33,  34,  17,  -2, -20,  -1, -22,   0, -10,
     428             :       6, -14,  -3, -10, -20,  -4, -32,  -4,   7, -15,
     429             :       0,  -3,   0, -13,  -9,   0,  -3,  -4,  17,   0,
     430             :     }, {
     431             :      25,   7,  -2,   8, -12,   7, -23,   8, -13,  16,
     432             :       7,  20,  42,   9,   0,  -3,   9, -25,  12, -10,
     433             :      12, -18,  -2, -24, -19, -13, -46, -19,   5, -22,
     434             :      10,   0,   8,  11,   8,   9, -17,  11,   7,   8,
     435             :     }, {
     436             :     -25,  -7,   2,  -8,  12,  -7,  23,  -8,  13, -16,
     437             :      -7, -20, -42,  -9,   0,   3,  -9,  25, -12,  10,
     438             :     -12,  18,   2,  24,  19,  13,  46,  19,  -5,  22,
     439             :     -10,   0,  -8, -11,  -8,  -9,  17, -11,  -7,  -8,
     440             :     }, {
     441             :      -3, -19,  -9, -26,   8, -26,  10, -24,   0, -28,
     442             :      -5, -33, -34, -17,   2,  20,   1,  22,   0,  10,
     443             :      -6,  14,   3,  10,  20,   4,  32,   4,  -7,  15,
     444             :       0,   3,   0,  13,   9,   0,   3,   4, -17,   0,
     445             :     }, {
     446             :     -35, -15,  15,  -6,   4,  -1,  27,  12,   5,  -8,
     447             :     -15, -19, -37,  11, -16,   2, -20,  12, -23,  -2,
     448             :     -22,   1,   1,  11,   5,  13,  34,  14,  -8,  14,
     449             :      -4, -26,   0, -11,  16,  14,  29,   2,  17,   3,
     450             :     }, {
     451             :     -13, -27,   3, -24,   1, -19,  14,  -3,  -9, -20,
     452             :     -12, -33, -29,   3, -15,  20,  -9,   9, -11,  -3,
     453             :     -16,  -2,   2,  -2,   7,   3,  20,   0, -10,   7,
     454             :       7, -22,   7,  13,  33,  23,  14,  18,   7,  12,
     455             :     }, {
     456             :     -17,  -8,   8,   4,  -4, -10,   6,  -5,   4,  -5,
     457             :       6,   6, -20,  10,   9,  -9,  -4,   2, -16,  -7,
     458             :      -1,  12,  17,  16,  39,   9,  36,  12,   2,   3,
     459             :      -6,  21,  -1, -11,   7, -10,  11, -20, -20, -11,
     460             :     }, {
     461             :       4, -20,  -3, -13,  -8, -28,  -6, -21, -10, -16,
     462             :       8,  -7, -12,   3,  11,   7,   5,   0,  -4,  -8,
     463             :       4,   8,  18,   3,  41,   0,  22,  -2,   0,  -4,
     464             :       5,  25,   6,  14,  25,  -1,  -2,  -4, -29,  -2,
     465             :     }, {
     466             :     -27, -16,  21,   6, -12,  -3,   9,  16,  -3,   2,
     467             :      -1,   7, -15,  31,  -7, -10, -16,  -9, -27, -21,
     468             :     -11,  -5,  16,   3,  26,   9,  24,   7,   0,  -4,
     469             :       0,  -4,   6, -11,  32,  14,  23,  -6,   5,   1,
     470             :     }, {
     471             :      -5, -29,   9, -11, -15, -22,  -3,   0, -18,  -8,
     472             :       1,  -6,  -7,  23,  -6,   6,  -5, -12, -15, -21,
     473             :      -5,  -8,  17,  -9,  28,   0,  11,  -6,  -2, -12,
     474             :      11,   0,  14,  13,  49,  22,   8,   9,  -4,   9,
     475             :     }, {
     476             :     -37,  12,   9,   7,  17,  11,  26, -18,  25, -12,
     477             :     -19, -17, -45, -14, -17,   0, -17,  30,  -1,  22,
     478             :      10,  25,  12,  38,  18,  -3,  22,  -4,  -3,   0,
     479             :     -13,   3, -10,  11, -23,  -2,  10,  -7,  -5,  -7,
     480             :     }, {
     481             :     -15,   0,  -2, -10,  13,  -7,  14, -35,  10, -23,
     482             :     -16, -31, -37, -21, -16,  17,  -6,  26,  10,  21,
     483             :      16,  21,  13,  25,  19, -13,   8, -19,  -5,  -7,
     484             :      -1,   8,  -2,  36,  -5,   6,  -3,   8, -15,   1,
     485             :     }, {
     486             :     -48,   4,  23,   9,   9,  17,  30,   2,  16,  -3,
     487             :     -26, -16, -40,   6, -35,  -1, -28,  17, -12,   9,
     488             :       0,   8,  11,  25,   5,  -3,  10,  -8,  -6,  -7,
     489             :      -6, -22,  -1,  11,   1,  21,  22,   7,  19,   5,
     490             :     }, {
     491             :     -26,  -7,  11,  -8,   5,  -1,  17, -14,   1, -15,
     492             :     -24, -30, -32,  -1, -33,  16, -18,  14,   0,   8,
     493             :       6,   4,  12,  12,   6, -13,  -2, -23,  -8, -15,
     494             :       4, -17,   5,  36,  18,  30,   8,  22,  10,  14,
     495             :     }, {
     496             :     -30,  11,  15,  20,   0,   8,   9, -15,  15,   0,
     497             :      -5,   9, -23,   6,  -8, -13, -13,   7,  -5,   3,
     498             :      20,  19,  27,  31,  39,  -7,  13, -11,   4, -19,
     499             :      -8,  25,  -3,  11,  -7,  -2,   4, -16, -18,  -9,
     500             :     }, {
     501             :      -8,  -1,   3,   2,  -3, -10,  -3, -32,   1, -12,
     502             :      -2,  -4, -15,  -1,  -7,   3,  -2,   4,   6,   3,
     503             :      26,  15,  29,  17,  40, -17,   0, -26,   2, -27,
     504             :       2,  29,   4,  36,  10,   6,  -9,   0, -27,   0,
     505             :     }, {
     506             :     -40,   2,  29,  22,  -7,  14,  12,   5,   7,   7,
     507             :     -12,   9, -18,  26, -26, -14, -24,  -4, -16,  -9,
     508             :      10,   2,  26,  18,  26,  -7,   1, -15,   1, -27,
     509             :      -2,   0,   4,  11,  17,  21,  16,  -1,   7,   3,
     510             :     }, {
     511             :     -18,  -9,  17,   4, -11,  -3,   0, -11,  -7,  -4,
     512             :     -10,  -3, -10,  18, -24,   3, -14,  -7,  -4, -10,
     513             :      16,  -1,  27,   4,  27, -17, -12, -30,   0, -35,
     514             :       9,   3,  12,  36,  35,  30,   2,  13,  -2,  11,
     515             :     }, {
     516             :     -66,  -8, -23, -11,  14,   5,  17,  16,  19,   2,
     517             :       3,  -5, -18, -17,  10,   0,  -1,  23,  -6,  20,
     518             :     -15,  18, -14,  22,   5,  10,  44,  23,   2,  26,
     519             :      -9,   3,  -4, -14, -12, -29,  -7, -16,  -7, -18,
     520             :     }, {
     521             :     -44, -20, -34, -29,  10, -13,   4,   0,   4,  -9,
     522             :       5, -19, -10, -24,  11,  17,   8,  20,   5,  19,
     523             :      -9,  14, -12,   9,   6,   0,  30,   9,   0,  19,
     524             :       2,   7,   2,  10,   5, -20, -21,  -1, -17,  -9,
     525             :     }, {
     526             :     -77, -16,  -9,  -9,   6,  11,  21,  37,  10,  10,
     527             :      -4,  -5, -13,   3,  -7,   0, -13,  11, -17,   6,
     528             :     -25,   1, -15,   9,  -7,   9,  32,  19,   0,  18,
     529             :      -2, -22,   3, -15,  12,  -5,   4,  -2,  17,  -5,
     530             :     }, {
     531             :     -55, -28, -21, -27,   2,  -7,   8,  20,  -4,  -1,
     532             :      -1, -18,  -5,  -4,  -5,  16,  -2,   8,  -5,   5,
     533             :     -19,  -2, -14,  -3,  -6,   0,  18,   4,  -2,  11,
     534             :       8, -18,  11,  10,  29,   3, -10,  13,   8,   3,
     535             :     }, {
     536             :     -58,  -9, -16,   1,  -2,   2,   0,  19,  10,  13,
     537             :      17,  21,   3,   3,  19, -12,   2,   0, -10,   1,
     538             :      -5,  12,   0,  15,  26,   5,  34,  16,  11,   7,
     539             :      -4,  25,   2, -14,   3, -29, -13, -25, -20, -20,
     540             :     }, {
     541             :     -36, -21, -28, -16,  -6, -16, -12,   2,  -4,   2,
     542             :      20,   7,  11,  -4,  20,   4,  12,  -2,   1,   0,
     543             :       0,   8,   2,   2,  27,  -4,  21,   2,   9,   0,
     544             :       6,  29,   9,  10,  21, -21, -28, -10, -29, -11,
     545             :     }, {
     546             :     -69, -17,  -3,   3, -10,   8,   3,  40,   1,  21,
     547             :      10,  21,   8,  23,   1, -13,  -8, -11, -21, -11,
     548             :     -15,  -4,   0,   2,  13,   5,  23,  12,   7,   0,
     549             :       1,   0,  10, -14,  28,  -5,  -1, -11,   5,  -7,
     550             :     }, {
     551             :     -47, -30, -15, -14, -14,  -9,  -9,  23, -13,  10,
     552             :      12,   7,  16,  15,   3,   3,   1, -14,  -9, -12,
     553             :      -9,  -8,   0, -10,  14,  -4,   9,  -2,   5,  -8,
     554             :      13,   3,  18,  10,  45,   3, -16,   4,  -4,   0,
     555             :     }, {
     556             :     -79,  11, -15,   4,  18,  23,  20,   5,  30,   7,
     557             :      -7,  -2, -21, -21,  -8,  -3, -10,  28,   4,  31,
     558             :       6,  25,  -3,  37,   4,  -7,  20,   0,   4,   4,
     559             :     -11,   7,  -6,   8, -27, -22, -14, -12,  -5, -16,
     560             :     }, {
     561             :     -57,   0, -27, -13,  14,   5,   7, -11,  15,  -4,
     562             :      -5, -16, -13, -29,  -6,  13,   0,  25,  16,  31,
     563             :      12,  22,  -2,  23,   6, -16,   7, -14,   2,  -3,
     564             :       0,  12,   0,  33,  -9, -13, -28,   3, -14,  -7,
     565             :     }, {
     566             :     -90,   3,  -2,   6,  10,  29,  24,  26,  21,  15,
     567             :     -15,  -2, -16,  -1, -25,  -4, -21,  16,  -6,  18,
     568             :      -3,   8,  -5,  24,  -8,  -7,   9,  -4,   1,  -3,
     569             :      -5, -18,   1,   7,  -2,   1,  -2,   1,  19,  -3,
     570             :     }, {
     571             :     -67,  -8, -14, -11,   7,  11,  11,   9,   7,   3,
     572             :     -13, -16,  -8,  -9, -24,  12, -10,  13,   5,  17,
     573             :       2,   4,  -3,  10,  -6, -17,  -4, -19,   0, -11,
     574             :       6, -13,   9,  33,  14,  10, -16,  17,  10,   4,
     575             :     }, {
     576             :     -71,  10,  -9,  17,   1,  20,   3,   8,  21,  18,
     577             :       6,  24,   0,  -1,   0, -16,  -6,   5,   0,  13,
     578             :      17,  19,  11,  29,  25, -11,  11,  -6,  13, -15,
     579             :      -7,  29,   0,   8, -11, -22, -20, -21, -17, -18,
     580             :     }, {
     581             :     -49,  -2, -21,   0,  -1,   2,  -9,  -8,   6,   6,
     582             :       8,  10,   8,  -9,   2,   0,   4,   2,  13,  12,
     583             :      23,  15,  12,  16,  26, -21,  -2, -21,  11, -23,
     584             :       4,  33,   7,  33,   6, -13, -34,  -5, -27, -10,
     585             :     }, {
     586             :     -82,   1,   4,  19,  -6,  27,   6,  29,  12,  26,
     587             :      -1,  24,   5,  18, -17, -17, -17,  -6, -10,   0,
     588             :       7,   2,   9,  16,  12, -11,   0, -11,   9, -23,
     589             :       0,   3,   8,   8,  13,   1,  -8,  -7,   7,  -6,
     590             :     }, {
     591             :     -60, -10,  -7,   1,  -9,   8,  -6,  13,  -2,  15,
     592             :       1,  10,  13,  11, -15,   0,  -6,  -9,   1,   0,
     593             :      13,  -1,  11,   3,  13, -21, -13, -26,   7, -31,
     594             :      10,   7,  16,  33,  31,  10, -22,   8,  -1,   2,
     595             :     }, {
     596             :      -3,   7,  -5,  -5,   8,  -2,  17,  -9,  18, -24,
     597             :      -2, -19, -10,  -4,  28,  17,   5,  28,  -2,   7,
     598             :      -4,  15,   7,   8,   6,  23,  13,  21, -14,  20,
     599             :     -17, -18, -11, -33, -30, -11,  23, -13,  -5,  -9,
     600             :     }, {
     601             :      18,  -4, -17, -23,   4, -20,   4, -26,   3, -36,
     602             :       0, -32,  -2, -12,  29,  34,  16,  24,  10,   6,
     603             :       0,  12,   8,  -4,   8,  13,   0,   6, -16,  12,
     604             :      -5, -13,  -3,  -7, -13,  -3,   8,   2, -14,   0,
     605             :     }, {
     606             :     -13,   0,   8,  -3,   0,   4,  21,  11,   9, -16,
     607             :     -10, -18,  -5,  16,  10,  16,  -5,  15, -13,  -5,
     608             :     -15,  -1,   6,  -4,  -6,  23,   2,  16, -17,  12,
     609             :     -10, -44,  -3, -33,  -6,  12,  34,   1,  20,   3,
     610             :     }, {
     611             :       8, -12,  -3, -21,  -3, -14,   8,  -5,  -4, -28,
     612             :      -7, -32,   2,   8,  12,  34,   4,  12,  -1,  -6,
     613             :      -9,  -4,   7, -17,  -4,  13, -11,   1, -19,   4,
     614             :       0, -39,   4,  -7,  11,  21,  20,  16,  10,  11,
     615             :     }, {
     616             :       4,   6,   0,   7,  -8,  -4,   0,  -6,   9, -13,
     617             :      11,   7,  11,  15,  37,   4,   9,   5,  -5, -11,
     618             :       5,   9,  22,   1,  27,  18,   4,  14,  -5,   0,
     619             :     -12,   3,  -4, -32, -14, -12,  17, -22, -17, -11,
     620             :     }, {
     621             :      26,  -6, -11, -10, -12, -23, -12, -23,  -5, -24,
     622             :      13,  -5,  19,   8,  38,  21,  20,   2,   6, -12,
     623             :      11,   5,  23, -11,  29,   9,  -9,   0,  -7,  -6,
     624             :      -1,   7,   2,  -7,   3,  -3,   2,  -6, -27,  -3,
     625             :     }, {
     626             :      -6,  -2,  14,   9, -16,   1,   3,  14,   0,  -5,
     627             :       3,   8,  16,  36,  19,   3,  -1,  -6, -17, -24,
     628             :      -4,  -7,  21, -11,  14,  18,  -7,   9,  -9,  -7,
     629             :      -6, -22,   3, -33,  10,  11,  28,  -7,   7,   0,
     630             :     }, {
     631             :      16, -14,   2,  -8, -20, -17,  -9,  -2, -14, -16,
     632             :       6,  -5,  24,  28,  21,  20,   8,  -9,  -4, -25,
     633             :       1, -11,  22, -24,  15,   8, -21,  -5, -11, -14,
     634             :       5, -18,  11,  -7,  27,  20,  14,   7,  -1,   9,
     635             :     }, {
     636             :     -16,  27,   2,  10,  13,  16,  20, -20,  29, -20,
     637             :     -14, -16, -13,  -8,   9,  13,  -2,  33,   9,  19,
     638             :      17,  23,  17,  22,   6,   6,  -9,  -2, -12,  -2,
     639             :     -20, -13, -13, -10, -45,  -4,  16,  -8,  -2,  -7,
     640             :     }, {
     641             :       5,  15,  -9,  -7,   9,  -2,   8, -37,  14, -31,
     642             :     -11, -29,  -5, -16,  11,  30,   7,  29,  21,  18,
     643             :      23,  19,  18,   9,   7,  -3, -23, -17, -14,  -9,
     644             :      -8,  -9,  -6,  15, -27,   4,   2,   6, -12,   1,
     645             :     }, {
     646             :     -26,  19,  15,  12,   5,  22,  24,   0,  21, -12,
     647             :     -21, -15,  -8,  11,  -7,  12, -14,  20,  -2,   6,
     648             :       7,   6,  16,   9,  -6,   5, -21,  -7, -15, -10,
     649             :     -13, -39,  -5, -10, -20,  19,  28,   5,  22,   5,
     650             :     }, {
     651             :      -4,   6,   3,  -5,   1,   4,  11, -16,   6, -23,
     652             :     -19, -29,   0,   3,  -6,  30,  -3,  17,  10,   5,
     653             :      13,   2,  17,  -3,  -5,  -3, -35, -21, -17, -17,
     654             :      -2, -35,   2,  15,  -3,  28,  13,  21,  13,  13,
     655             :     }, {
     656             :      -8,  25,   8,  23,  -3,  13,   3, -17,  20,  -8,
     657             :       0,  10,   8,  11,  18,   0,   1,  10,   5,   0,
     658             :      28,  17,  32,  15,  26,   1, -19,  -9,  -3, -21,
     659             :     -15,   7,  -6,  -9, -29,  -5,  10, -17, -15,  -9,
     660             :     }, {
     661             :      13,  13,  -3,   5,  -7,  -4,  -9, -34,   5, -20,
     662             :       2,  -3,  16,   3,  20,  17,  11,   7,  17,   0,
     663             :      34,  13,  33,   2,  28,  -8, -32, -24,  -5, -29,
     664             :      -3,  12,   0,  15, -11,   3,  -3,  -2, -24,  -1,
     665             :     }, {
     666             :     -18,  17,  21,  25, -11,  19,   6,   3,  11,   0,
     667             :      -7,  11,  13,  31,   1,   0,  -9,  -1,  -5, -12,
     668             :      18,   0,  31,   2,  13,   1, -30, -14,  -7, -29,
     669             :      -9, -18,   1, -10,  -4,  18,  22,  -3,  10,   2,
     670             :     }, {
     671             :       3,   5,   9,   7, -15,   1,  -5, -13,  -2, -12,
     672             :      -5,  -2,  21,  23,   2,  16,   0,  -5,   6, -13,
     673             :      23,  -3,  32, -10,  15,  -8, -44, -28,  -9, -37,
     674             :       2, -13,   9,  15,  12,  27,   7,  12,   0,  11,
     675             :     }, {
     676             :     -44,   6, -30,  -8,   9,  10,  11,  14,  23,  -5,
     677             :       8,  -4,  14, -12,  37,  14,  12,  26,   4,  16,
     678             :      -8,  16,  -9,   7,  -6,  19,  12,  25,  -5,  24,
     679             :     -15, -13,  -8, -36, -34, -31,  -1, -18,  -4, -18,
     680             :     }, {
     681             :     -22,  -5, -42, -26,   6,  -8,  -1,  -2,   9, -17,
     682             :      10, -18,  21, -19,  39,  31,  23,  23,  16,  15,
     683             :      -2,  12,  -7,  -6,  -5,   9,  -1,  10,  -7,  16,
     684             :      -4,  -9,   0, -10, -17, -22, -16,  -2, -14,  -9,
     685             :     }, {
     686             :     -55,  -1, -17,  -6,   1,  16,  15,  35,  15,   2,
     687             :       0,  -4,  19,   8,  20,  13,   1,  14,  -7,   3,
     688             :     -18,   0, -10,  -5, -19,  19,   0,  21,  -8,  16,
     689             :      -9, -39,   0, -36, -10,  -7,   9,  -4,  20,  -5,
     690             :     }, {
     691             :     -33, -13, -29, -24,  -1,  -1,   2,  18,   0,  -9,
     692             :       3, -17,  27,   0,  21,  30,  12,  11,   5,   2,
     693             :     -12,  -4,  -9, -19, -18,   9, -13,   6, -11,   8,
     694             :       2, -35,   8, -10,   7,   1,  -4,  11,  10,   2,
     695             :     }, {
     696             :     -36,   5, -24,   4,  -7,   7,  -6,  17,  14,   5,
     697             :      22,  22,  35,   8,  46,   1,  17,   3,   0,  -2,
     698             :       2,  10,   5,   0,  14,  15,   2,  18,   2,   4,
     699             :     -11,   7,  -1, -36, -18, -32,  -7, -27, -17, -20,
     700             :     }, {
     701             :     -14,  -7, -36, -13, -10, -10, -18,   0,   0,  -5,
     702             :      25,   8,  43,   0,  48,  18,  27,   0,  12,  -3,
     703             :       7,   6,   7, -13,  15,   5, -11,   3,   0,  -2,
     704             :       0,  12,   6, -10,   0, -23, -22, -11, -26, -12,
     705             :     }, {
     706             :     -47,  -3, -11,   6, -15,  13,  -2,  38,   6,  13,
     707             :      15,  22,  40,  28,  28,   0,   5,  -8, -10, -15,
     708             :      -7,  -7,   4, -13,   1,  14,  -9,  14,   0,  -2,
     709             :      -4, -18,   7, -36,   6,  -8,   3, -13,   7,  -8,
     710             :     }, {
     711             :     -25, -15, -22, -11, -18,  -4, -15,  22,  -8,   2,
     712             :      17,   9,  48,  20,  30,  17,  16, -11,   1, -16,
     713             :      -2, -10,   5, -26,   2,   4, -22,   0,  -2, -10,
     714             :       6, -13,  14, -10,  23,   0, -10,   2,  -1,   0,
     715             :     }, {
     716             :     -57,  26, -22,   7,  14,  28,  14,   3,  35,   0,
     717             :      -3,  -1,  11, -16,  18,  10,   4,  31,  15,  28,
     718             :      14,  23,   1,  21,  -7,   2, -11,   1,  -3,   1,
     719             :     -18,  -9, -10, -13, -49, -24,  -8, -14,  -2, -16,
     720             :     }, {
     721             :     -35,  14, -34, -10,  10,  10,   1, -12,  20, -12,
     722             :       0, -15,  18, -24,  20,  27,  14,  28,  27,  27,
     723             :      20,  19,   2,   8,  -5,  -7, -25, -13,  -5,  -5,
     724             :      -6,  -5,  -2,  12, -31, -15, -23,   1, -12,  -8,
     725             :     }, {
     726             :     -68,  18,  -9,   9,   6,  35,  18,  25,  26,   7,
     727             :     -10,  -1,  16,   3,   1,   9,  -6,  19,   4,  15,
     728             :       4,   6,   0,   8, -20,   2, -23,  -2,  -7,  -5,
     729             :     -12, -35,  -1, -13, -24,   0,   3,   0,  22,  -4,
     730             :     }, {
     731             :     -46,   6, -21,  -8,   2,  16,   5,   8,  11,  -4,
     732             :      -8, -15,  24,  -4,   2,  26,   3,  16,  16,  14,
     733             :       9,   2,   1,  -4, -19,  -7, -36, -17,  -9, -13,
     734             :       0, -31,   5,  12,  -7,   8, -11,  15,  13,   4,
     735             :     }, {
     736             :     -49,  24, -16,  20,  -2,  26,  -2,   7,  25,  10,
     737             :      11,  25,  32,   3,  27,  -2,   8,   8,  11,   9,
     738             :      24,  17,  16,  14,  13,  -2, -20,  -5,   4, -17,
     739             :     -14,  12,  -3, -13, -33, -25, -14, -23, -15, -19,
     740             :     }, {
     741             :     -27,  12, -28,   2,  -6,   7, -15,  -9,  11,  -1,
     742             :      13,  11,  40,  -4,  29,  14,  19,   5,  23,   8,
     743             :      30,  13,  17,   0,  14, -12, -34, -20,   2, -25,
     744             :      -2,  16,   4,  12, -15, -16, -29,  -7, -24, -10,
     745             :     }, {
     746             :     -60,  16,  -3,  22, -10,  32,   0,  28,  17,  18,
     747             :       3,  25,  37,  23,  10,  -3,  -2,  -3,   0,  -3,
     748             :      14,   0,  14,   1,   0,  -2, -32,  -9,   1, -25,
     749             :      -7, -13,   5, -13,  -8,  -1,  -2,  -8,  10,  -6,
     750             :     }, {
     751             :     -38,   4, -15,   4, -14,  13, -12,  11,   2,   6,
     752             :       6,  11,  45,  16,  11,  13,   7,  -6,  12,  -4,
     753             :      20,  -3,  16, -12,   1, -12, -46, -24,   0, -33,
     754             :       3,  -9,  12,  12,   8,   7, -17,   6,   0,   2
     755             :     }
     756             : };
     757             : 
     758             : const int8_t ff_cb2_vects[128][40]={
     759             :     {
     760             :      73, -32, -60, -15, -26,  59,   2, -33,  30, -10,
     761             :      -3, -17,   8,  30,  -1, -26,  -4, -22,  10,  16,
     762             :     -36,  -5, -11,  56,  37,   6, -10,  -5, -13,  -3,
     763             :       6,  -5,  11,   4, -19,  -5, -16,  41,  24,  13,
     764             :     }, {
     765             :       4, -11, -37,  23,  -5,  46,  -2, -29,  -5, -39,
     766             :     -21,  -9,   0,  49,  12,  -9, -16, -26,  22,  15,
     767             :     -45, -20,  -5,  40,  22,  17, -26,  31, -14,   2,
     768             :     -14,  10,  30,  20, -27,  -9, -39,  39,  18,   5,
     769             :     }, {
     770             :      34, -25, -48, -28, -11,  34,  -2, -41,   9,  -7,
     771             :     -17,  21,  20,  24, -17, -33,   0, -24,  10,  42,
     772             :       3,  -5,  10,  42,  11,   8,  -3,   3,  16,   9,
     773             :      22,  -2,   0, -33, -10,  18,   7,  58,  10,  28,
     774             :     }, {
     775             :     -34,  -4, -25,  10,   9,  21,  -7, -36, -26, -36,
     776             :     -35,  28,  12,  42,  -3, -16, -12, -28,  21,  42,
     777             :      -5, -21,  16,  26,  -4,  19, -19,  39,  15,  15,
     778             :       1,  13,  19, -17, -17,  14, -15,  55,   4,  19,
     779             :     }, {
     780             :      28, -20, -51, -14,  -6,   7,   0, -26,  27,  -4,
     781             :      18, -40,  -6,  16,  -1, -15,   0, -55,  -5, -16,
     782             :     -19,  14,  -3,  49,  14,   1, -22, -30, -12,   0,
     783             :      24,  15,   9, -17, -45, -29,   4,  28,  51,  35,
     784             :     }, {
     785             :     -40,   0, -28,  24,  14,  -5,  -4, -21,  -7, -33,
     786             :       0, -32, -15,  35,  12,   1, -11, -58,   5, -16,
     787             :     -28,   0,   1,  33,   0,  11, -39,   5, -14,   6,
     788             :       3,  31,  28,  -1, -53, -33, -19,  25,  46,  26,
     789             :     }, {
     790             :     -11, -14, -39, -27,   9, -17,  -4, -33,   6,   0,
     791             :       4,  -1,   5,  10, -17, -22,   5, -57,  -5,   9,
     792             :      20,  13,  18,  35, -11,   3, -16, -22,  17,  13,
     793             :      40,  19,  -1, -55, -35,  -5,  27,  44,  37,  49,
     794             :     }, {
     795             :     -80,   6, -16,  11,  30, -30,  -9, -28, -28, -29,
     796             :     -13,   6,  -2,  28,  -3,  -5,  -7, -60,   5,   9,
     797             :      11,  -1,  24,  19, -27,  13, -32,  13,  15,  19,
     798             :      19,  35,  17, -39, -43,  -9,   4,  42,  32,  41,
     799             :     }, {
     800             :      78, -21, -43,   4, -38,  17,  17,  -5,  55,  24,
     801             :     -15, -36,  14,   4,  24, -24,  12,   5,  17,  31,
     802             :     -54,  -5,  -2,  27,  43, -12,   2,   9,  -9, -15,
     803             :      22,  -3,  28,  21, -20,   3,  20,  28,   9,  -5,
     804             :     }, {
     805             :       9,  -1, -20,  43, -17,   3,  12,   0,  20,  -4,
     806             :     -33, -29,   6,  22,  38,  -7,   0,   1,  29,  30,
     807             :     -63, -21,   3,  11,  27,  -1, -14,  45, -10,  -9,
     808             :       1,  12,  47,  37, -28,   0,  -2,  26,   4, -13,
     809             :     }, {
     810             :      39, -14, -30,  -8, -22,  -8,  12, -12,  34,  27,
     811             :     -29,   2,  26,  -2,   8, -31,  16,   3,  17,  57,
     812             :     -14,  -6,  19,  13,  16, -10,   8,  17,  20,  -2,
     813             :      38,   0,  17, -16, -11,  27,  44,  45,  -4,   8,
     814             :     }, {
     815             :     -29,   5,  -7,  30,  -1, -21,   7,  -7,   0,   0,
     816             :     -47,   9,  18,  15,  22, -14,   4,   0,  28,  57,
     817             :     -23, -21,  25,  -2,   1,   0,  -7,  53,  19,   3,
     818             :      17,  15,  36,   0, -19,  24,  21,  43,  -9,   0,
     819             :     }, {
     820             :      33, -10, -34,   5, -17, -35,  15,   1,  53,  30,
     821             :       6, -59,   0, -10,  24, -13,  17, -27,   1,  -1,
     822             :     -37,  13,   4,  20,  20, -18, -10, -16,  -8, -11,
     823             :      39,  18,  26,   0, -46, -20,  41,  15,  37,  15,
     824             :     }, {
     825             :     -35,  10, -11,  44,   3, -48,  10,   6,  17,   2,
     826             :     -11, -51,  -8,   8,  38,   3,   4, -31,  12,  -2,
     827             :     -46,  -1,  10,   4,   5,  -7, -26,  19, -10,  -5,
     828             :      18,  34,  45,  15, -54, -24,  18,  13,  31,   7,
     829             :     }, {
     830             :      -5,  -3, -21,  -7,  -2, -60,  10,  -5,  32,  34,
     831             :      -7, -20,  11, -16,   8, -20,  21, -29,   1,  24,
     832             :       2,  13,  27,   6,  -5, -15,  -3,  -8,  21,   1,
     833             :      55,  21,  15, -38, -37,   3,  65,  32,  23,  30,
     834             :     }, {
     835             :     -74,  17,   0,  31,  18, -73,   5,   0,  -3,   5,
     836             :     -25, -12,   3,   1,  22,  -3,   9, -33,  12,  24,
     837             :      -6,  -2,  33,  -9, -21,  -5, -20,  27,  19,   7,
     838             :      34,  37,  34, -22, -44,   0,  41,  29,  17,  21,
     839             :     }, {
     840             :      76, -35, -31, -28, -49,  43, -40,   0,  29, -14,
     841             :       8,   5,  10,  18, -26, -46,   0,   7,   6,   3,
     842             :     -25,  -7,  -2,  40,  28,  14,  18,  -3, -27, -28,
     843             :      -8, -45, -13,  34, -13, -27, -15,  31,  12,   3,
     844             :     }, {
     845             :       7, -15,  -9,   9, -28,  29, -45,   5,  -6, -43,
     846             :      -9,  12,   2,  36, -12, -30, -11,   3,  17,   3,
     847             :     -34, -22,   3,  24,  12,  24,   2,  32, -28, -22,
     848             :     -29, -29,   5,  50, -21, -31, -38,  29,   7,  -5,
     849             :     }, {
     850             :      36, -29, -19, -41, -34,  18, -45,  -6,   8, -10,
     851             :      -5,  43,  23,  11, -42, -53,   5,   5,   6,  30,
     852             :      14,  -8,  20,  26,   1,  16,  25,   4,   3, -15,
     853             :       7, -41, -23,  -3,  -4,  -3,   8,  48,  -1,  17,
     854             :     }, {
     855             :     -32,  -8,   3,  -2, -13,   4, -50,  -1, -27, -39,
     856             :     -23,  51,  15,  30, -27, -37,  -7,   1,  17,  29,
     857             :       5, -23,  25,  10, -14,  26,   8,  41,   1,  -9,
     858             :     -13, -26,  -5,  12, -12,  -7, -14,  45,  -6,   9,
     859             :     }, {
     860             :      31, -24, -23, -27, -29,  -9, -43,   8,  26,  -7,
     861             :      30, -17,  -4,   3, -26, -35,   5, -24, -10, -28,
     862             :      -9,  12,   5,  33,   5,   8,   5, -29, -26, -24,
     863             :       9, -23, -14,  12, -39, -52,   5,  18,  39,  24,
     864             :     }, {
     865             :     -37,  -3,   0,  10,  -7, -22, -48,  12,  -8, -36,
     866             :      12,  -9, -12,  22, -12, -19,  -6, -28,   0, -29,
     867             :     -18,  -3,  11,  17, -10,  18, -10,   7, -27, -18,
     868             :     -11,  -7,   3,  28, -47, -55, -18,  15,  34,  16,
     869             :     }, {
     870             :      -8, -17, -10, -40, -13, -34, -47,   0,   5,  -4,
     871             :      16,  21,   8,  -2, -42, -43,  10, -26, -10,  -2,
     872             :      31,  11,  27,  19, -21,  10,  12, -20,   3, -11,
     873             :      25, -20, -25, -25, -29, -28,  28,  34,  25,  38,
     874             :     }, {
     875             :     -77,   2,  11,  -1,   7, -47, -52,   5, -29, -33,
     876             :      -1,  28,   0,  15, -28, -26,  -2, -30,   0,  -2,
     877             :      22,  -4,  33,   3, -36,  21,  -3,  15,   2,  -5,
     878             :       4,  -4,  -6,  -9, -37, -31,   5,  32,  20,  30,
     879             :     }, {
     880             :      81, -25, -14,  -8, -61,   0, -25,  28,  54,  20,
     881             :      -3, -14,  17,  -8,   0, -44,  16,  35,  13,  18,
     882             :     -43,  -7,   6,  11,  33,  -4,  30,  11, -22, -40,
     883             :       6, -43,   3,  50, -14, -18,  22,  18,  -1, -16,
     884             :     }, {
     885             :      12,  -4,   8,  29, -39, -12, -30,  33,  19,  -8,
     886             :     -21,  -6,   8,   9,  13, -28,   4,  31,  24,  18,
     887             :     -52, -23,  12,  -4,  18,   5,  14,  47, -24, -34,
     888             :     -14, -27,  22,  66, -22, -22,  -1,  16,  -6, -24,
     889             :     }, {
     890             :      41, -18,  -2, -21, -45, -24, -30,  21,  33,  24,
     891             :     -17,  24,  29, -15, -16, -51,  21,  33,  13,  45,
     892             :      -3,  -8,  28,  -2,   7,  -2,  37,  19,   7, -27,
     893             :      22, -39,  -7,  12,  -5,   5,  45,  35, -15,  -1,
     894             :     }, {
     895             :     -27,   1,  20,  17, -24, -38, -35,  26,  -1,  -4,
     896             :     -35,  32,  21,   3,  -2, -35,   8,  29,  24,  44,
     897             :     -12, -24,  34, -18,  -8,   7,  21,  55,   5, -21,
     898             :       2, -23,  11,  28, -13,   1,  22,  33, -21, -10,
     899             :     }, {
     900             :      36, -13,  -5,  -7, -40, -51, -28,  36,  52,  27,
     901             :      18, -36,   2, -22,   0, -33,  21,   2,  -3, -13,
     902             :     -26,  11,  14,   4,  10, -10,  18, -14, -22, -36,
     903             :      24, -21,   1,  28, -40, -42,  42,   5,  25,   5,
     904             :     }, {
     905             :     -32,   6,  17,  31, -19, -65, -33,  41,  16,  -1,
     906             :       0, -29,  -6,  -4,  13, -17,   9,  -1,   8, -14,
     907             :     -35,  -3,  19, -11,  -4,   0,   1,  21, -23, -30,
     908             :       3,  -5,  20,  44, -48, -46,  19,   3,  20,  -3,
     909             :     }, {
     910             :      -3,  -7,   6, -20, -25, -77, -32,  29,  31,  30,
     911             :       4,   2,  14, -29, -16, -40,  26,   0,  -3,  12,
     912             :      13,  10,  36,  -9, -15,  -8,  24,  -6,   7, -22,
     913             :      40, -17,  -8,  -9, -31, -18,  66,  22,  11,  19,
     914             :     }, {
     915             :     -72,  13,  29,  18,  -4, -90, -37,  34,  -4,   1,
     916             :     -13,   9,   6, -11,  -2, -24,  13,  -3,   7,  11,
     917             :       4,  -4,  42, -25, -31,   1,   8,  29,   6, -17,
     918             :      19,  -2,  10,   6, -38, -22,  42,  19,   6,  11,
     919             :     }, {
     920             :     116, -20, -68, -30, -28,  83,  28, -18,  32, -22,
     921             :     -13, -21,   5,  28,   5,  -7, -24,  -8, -22,  17,
     922             :     -23,  30, -25,  45,  15,  -9, -11, -18,  22, -10,
     923             :       4,  -2,  19, -12,  23,   3, -43,   2,  12,  -4,
     924             :     }, {
     925             :      47,   0, -45,   7,  -7,  69,  23, -13,  -2, -51,
     926             :     -32, -14,  -3,  47,  19,   8, -37, -11, -10,  16,
     927             :     -32,  15, -19,  29,   0,   1, -28,  18,  20,  -4,
     928             :     -16,  13,  38,   3,  15,   0, -66,   0,   7, -13,
     929             :     }, {
     930             :      77, -13, -56, -43, -13,  57,  23, -26,  11, -19,
     931             :     -27,  16,  17,  22, -10, -15, -19, -10, -22,  43,
     932             :      16,  30,  -2,  31, -11,  -6,  -5,  -9,  52,   2,
     933             :      20,   0,   8, -50,  33,  27, -19,  19,  -1,   9,
     934             :     }, {
     935             :       8,   6, -33,  -4,   7,  44,  18, -21, -23, -48,
     936             :     -46,  24,   9,  40,   3,   1, -32, -13, -11,  43,
     937             :       7,  14,   3,  15, -26,   3, -21,  26,  50,   8,
     938             :       0,  16,  27, -34,  25,  23, -43,  17,  -6,   1,
     939             :     }, {
     940             :      71,  -9, -59, -29,  -8,  30,  26, -11,  30, -16,
     941             :       8, -44,  -9,  14,   5,   2, -19, -40, -38, -15,
     942             :      -7,  50, -17,  38,  -7, -14, -24, -43,  22,  -6,
     943             :      22,  19,  17, -34,  -2, -20, -23, -10,  39,  16,
     944             :     }, {
     945             :       2,  11, -36,   9,  13,  17,  21,  -6,  -5, -45,
     946             :     -10, -36, -18,  33,  19,  19, -31, -44, -27, -15,
     947             :     -16,  34, -11,  22, -22,  -4, -40,  -7,  21,   0,
     948             :       1,  35,  36, -18, -10, -24, -46, -12,  34,   8,
     949             :     }, {
     950             :      32,  -2, -47, -42,   7,   5,  21, -18,   9, -12,
     951             :      -5,  -5,   2,   8, -10,  -4, -14, -42, -38,  10,
     952             :      33,  49,   5,  24, -33, -12, -17, -35,  52,   6,
     953             :      38,  22,   7, -72,   7,   3,   0,   6,  25,  30,
     954             :     }, {
     955             :     -36,  18, -24,  -3,  28,  -7,  16, -13, -26, -41,
     956             :     -24,   1,  -5,  26,   3,  12, -27, -46, -27,  10,
     957             :      24,  34,  10,   8, -49,  -2, -34,   0,  51,  12,
     958             :      17,  38,  25, -56,   0,   0, -22,   3,  20,  22,
     959             :     }, {
     960             :     121,  -9, -50, -10, -40,  40,  43,   9,  58,  12,
     961             :     -25, -41,  11,   2,  31,  -5,  -8,  19, -15,  32,
     962             :     -41,  30, -16,  16,  20, -28,   0,  -3,  26, -22,
     963             :      19,   0,  36,   4,  22,  12,  -6,  -9,  -1, -24,
     964             :     }, {
     965             :      52,  10, -27,  27, -18,  26,  38,  14,  23, -16,
     966             :     -44, -33,   3,  20,  45,  10, -20,  15,  -3,  31,
     967             :     -50,  14, -10,   0,   5, -17, -15,  32,  24, -16,
     968             :      -1,  15,  55,  20,  14,   8, -29, -12,  -7, -32,
     969             :     }, {
     970             :      82,  -3, -38, -23, -24,  15,  38,   2,  37,  15,
     971             :     -39,  -2,  23,  -4,  15, -12,  -3,  17, -15,  58,
     972             :      -1,  29,   6,   2,  -5, -26,   7,   4,  56,  -9,
     973             :      35,   3,  25, -33,  32,  36,  17,   7, -15,  -9,
     974             :     }, {
     975             :      13,  17, -15,  15,  -3,   1,  33,   7,   1, -12,
     976             :     -58,   5,  15,  13,  29,   3, -16,  13,  -4,  57,
     977             :     -10,  13,  11, -13, -21, -15,  -9,  40,  55,  -3,
     978             :      14,  19,  44, -17,  24,  32,  -5,   4, -21, -18,
     979             :     }, {
     980             :      76,   1, -41,  -9, -19, -12,  41,  17,  55,  18,
     981             :      -3, -63,  -3, -12,  30,   5,  -3, -12, -31,   0,
     982             :     -24,  49,  -8,   9,  -1, -33, -12, -29,  27, -18,
     983             :      37,  21,  34, -17,  -3, -11,  14, -23,  25,  -2,
     984             :     }, {
     985             :       7,  22, -18,  29,   1, -25,  36,  21,  20,  -9,
     986             :     -22, -56, -11,   6,  45,  21, -15, -16, -20,  -1,
     987             :     -33,  34,  -2,  -6, -17, -23, -28,   6,  25, -12,
     988             :      16,  37,  53,  -1, -11, -15,  -8, -25,  20, -11,
     989             :     }, {
     990             :      37,   8, -29, -22,  -4, -37,  36,   9,  34,  22,
     991             :     -17, -24,   8, -18,  15,  -2,   1, -14, -31,  25,
     992             :      15,  48,  13,  -4, -28, -31,  -5, -21,  57,  -4,
     993             :      53,  24,  23, -55,   6,  12,  37,  -6,  11,  11,
     994             :     }, {
     995             :     -31,  28,  -6,  16,  16, -50,  31,  14,   0,  -6,
     996             :     -36, -17,   0,   0,  29,  14, -11, -18, -20,  25,
     997             :       6,  33,  19, -20, -43, -21, -21,  14,  55,   0,
     998             :      32,  40,  42, -39,  -1,   8,  14,  -8,   6,   3,
     999             :     }, {
    1000             :     119, -24, -39, -44, -51,  66, -14,  15,  31, -26,
    1001             :      -1,   0,   7,  16, -19, -28, -19,  22, -26,   4,
    1002             :     -13,  28, -16,  29,   5,  -1,  16, -16,   8, -35,
    1003             :     -10, -42,  -4,  17,  29, -19, -42,  -7,   0, -15,
    1004             :     }, {
    1005             :      50,  -3, -16,  -5, -30,  53, -19,  20,  -3, -55,
    1006             :     -19,   8,   0,  34,  -5, -11, -32,  18, -15,   4,
    1007             :     -22,  13, -10,  13,  -9,   8,   0,  19,   7, -29,
    1008             :     -31, -26,  13,  33,  21, -22, -65,  -9,  -4, -23,
    1009             :     }, {
    1010             :      79, -17, -27, -56, -36,  41, -19,   8,  10, -22,
    1011             :     -15,  39,  20,   9, -35, -35, -15,  20, -26,  31,
    1012             :      26,  27,   6,  15, -20,   0,  23,  -8,  38, -22,
    1013             :       5, -38, -15, -20,  39,   4, -18,   9, -13,  -1,
    1014             :     }, {
    1015             :      10,   3,  -4, -18, -15,  27, -24,  13, -24, -51,
    1016             :     -34,  47,  12,  28, -21, -19, -27,  16, -15,  30,
    1017             :      17,  12,  12,   0, -36,  10,   7,  27,  37, -16,
    1018             :     -15, -22,   3,  -4,  31,   1, -42,   7, -18,  -9,
    1019             :     }, {
    1020             :      74, -12, -30, -42, -30,  14, -16,  23,  29, -19,
    1021             :      20, -21,  -7,   1, -19, -17, -14, -10, -43, -27,
    1022             :       3,  48,  -8,  22, -16,  -7,   4, -42,   9, -31,
    1023             :       6, -20,  -6,  -4,   3, -43, -22, -20,  28,   5,
    1024             :     }, {
    1025             :       5,   7,  -7,  -4,  -9,   0, -21,  28,  -6, -48,
    1026             :       2, -14, -15,  20,  -5,   0, -27, -14, -32, -28,
    1027             :      -5,  32,  -2,   6, -32,   3, -12,  -5,   8, -25,
    1028             :     -14,  -4,  12,  11,  -4, -47, -45, -22,  22,  -2,
    1029             :     }, {
    1030             :      34,  -6, -18, -55, -15, -11, -21,  16,   8, -16,
    1031             :       6,  16,   5,  -4, -35, -24, -10, -12, -43,  -1,
    1032             :      43,  47,  14,   8, -43,  -5,  10, -34,  39, -18,
    1033             :      22, -16, -17, -42,  13, -19,   1,  -3,  14,  20,
    1034             :     }, {
    1035             :     -34,  14,   4, -17,   5, -24, -26,  20, -27, -45,
    1036             :     -12,  24,  -2,  13, -21,  -8, -22, -16, -32,  -2,
    1037             :      34,  31,  20,  -7, -58,   5,  -5,   2,  38, -12,
    1038             :       2,  -1,   1, -26,   5, -23, -21,  -6,   8,  11,
    1039             :     }, {
    1040             :     124, -13, -21, -23, -62,  23,   0,  43,  57,   8,
    1041             :     -13, -18,  14, -10,   6, -26,  -3,  49, -19,  19,
    1042             :     -31,  27,  -7,   0,  11, -20,  29,  -1,  12, -47,
    1043             :       4, -39,  11,  34,  28,  -9,  -5, -19, -13, -34,
    1044             :     }, {
    1045             :      55,   6,   1,  14, -41,  10,  -4,  48,  22, -20,
    1046             :     -31, -10,   5,   7,  20,  -9, -16,  45,  -8,  19,
    1047             :     -40,  12,  -1, -15,  -4, -10,  12,  34,  11, -41,
    1048             :     -16, -24,  30,  49,  20, -13, -28, -22, -18, -43,
    1049             :     }, {
    1050             :      84,  -6,  -9, -36, -47,  -1,  -4,  36,  36,  12,
    1051             :     -27,  20,  26, -17,  -9, -33,   1,  47, -19,  46,
    1052             :       9,  27,  15, -13, -15, -18,  35,   6,  42, -33,
    1053             :      20, -36,   1,  -4,  38,  14,  18,  -2, -27, -20,
    1054             :     }, {
    1055             :      15,  13,  13,   1, -26, -14,  -9,  41,   1, -16,
    1056             :     -46,  27,  18,   1,   4, -16, -11,  43,  -8,  45,
    1057             :       0,  11,  21, -29, -30,  -8,  19,  42,  41, -28,
    1058             :       0, -20,  20,  11,  30,  10,  -4,  -5, -32, -28,
    1059             :     }, {
    1060             :      79,  -2, -12, -22, -42, -28,  -1,  51,  54,  15,
    1061             :       8, -41,   0, -24,   6, -15,   1,  17, -36, -12,
    1062             :     -14,  47,   0,  -6, -11, -26,  16, -27,  13, -43,
    1063             :      22, -18,  10,  12,   2, -34,  15, -33,  13, -13,
    1064             :     }, {
    1065             :      10,  18,  10,  15, -21, -41,  -6,  56,  19, -13,
    1066             :      -9, -33,  -9,  -6,  20,   1, -11,  13, -24, -13,
    1067             :     -23,  32,   6, -22, -26, -15,   0,   8,  12, -37,
    1068             :       1,  -2,  28,  27,  -5, -37,  -7, -35,   8, -21,
    1069             :     }, {
    1070             :      39,   4,   0, -35, -27, -53,  -6,  44,  33,  18,
    1071             :      -5,  -2,  11, -31,  -9, -22,   6,  15, -36,  13,
    1072             :      25,  46,  23, -20, -37, -24,  23, -19,  43, -29,
    1073             :      38, -14,   0, -26,  12, -10,  38, -16,   0,   0,
    1074             :     }, {
    1075             :     -29,  25,  22,   2,  -6, -67, -11,  49,  -1, -10,
    1076             :     -24,   5,   3, -13,   4,  -5,  -6,  11, -25,  12,
    1077             :      16,  31,  28, -36, -53, -13,   6,  16,  42, -24,
    1078             :      17,   1,  18, -10,   4, -13,  15, -18,  -5,  -7,
    1079             :     }, {
    1080             :      29, -25, -22,  -2,   6,  67,  11, -49,   1,  10,
    1081             :      24,  -5,  -3,  13,  -4,   5,   6, -11,  25, -12,
    1082             :     -16, -31, -28,  36,  53,  13,  -6, -16, -42,  24,
    1083             :     -17,  -1, -18,  10,  -4,  13, -15,  18,   5,   7,
    1084             :     }, {
    1085             :     -39,  -4,   0,  35,  27,  53,   6, -44, -33, -18,
    1086             :       5,   2, -11,  31,   9,  22,  -6, -15,  36, -13,
    1087             :     -25, -46, -23,  20,  37,  24, -23,  19, -43,  29,
    1088             :     -38,  14,   0,  26, -12,  10, -38,  16,   0,   0,
    1089             :     }, {
    1090             :     -10, -18, -10, -15,  21,  41,   6, -56, -19,  13,
    1091             :       9,  33,   9,   6, -20,  -1,  11, -13,  24,  13,
    1092             :      23, -32,  -6,  22,  26,  15,   0,  -8, -12,  37,
    1093             :      -1,   2, -28, -27,   5,  37,   7,  35,  -8,  21,
    1094             :     }, {
    1095             :     -79,   2,  12,  22,  42,  28,   1, -51, -54, -15,
    1096             :      -8,  41,   0,  24,  -6,  15,  -1, -17,  36,  12,
    1097             :      14, -47,   0,   6,  11,  26, -16,  27, -13,  43,
    1098             :     -22,  18, -10, -12,  -2,  34, -15,  33, -13,  13,
    1099             :     }, {
    1100             :     -15, -13, -13,  -1,  26,  14,   9, -41,  -1,  16,
    1101             :      46, -27, -18,  -1,  -4,  16,  11, -43,   8, -45,
    1102             :       0, -11, -21,  29,  30,   8, -19, -42, -41,  28,
    1103             :       0,  20, -20, -11, -30, -10,   4,   5,  32,  28,
    1104             :     }, {
    1105             :     -84,   6,   9,  36,  47,   1,   4, -36, -36, -12,
    1106             :      27, -20, -26,  17,   9,  33,  -1, -47,  19, -46,
    1107             :      -9, -27, -15,  13,  15,  18, -35,  -6, -42,  33,
    1108             :     -20,  36,  -1,   4, -38, -14, -18,   2,  27,  20,
    1109             :     }, {
    1110             :     -55,  -6,  -1, -14,  41, -10,   4, -48, -22,  20,
    1111             :      31,  10,  -5,  -7, -20,   9,  16, -45,   8, -19,
    1112             :      40, -12,   1,  15,   4,  10, -12, -34, -11,  41,
    1113             :      16,  24, -30, -49, -20,  13,  28,  22,  18,  43,
    1114             :     }, {
    1115             :    -124,  13,  21,  23,  62, -23,   0, -43, -57,  -8,
    1116             :      13,  18, -14,  10,  -6,  26,   3, -49,  19, -19,
    1117             :      31, -27,   7,   0, -11,  20, -29,   1, -12,  47,
    1118             :      -4,  39, -11, -34, -28,   9,   5,  19,  13,  34,
    1119             :     }, {
    1120             :      34, -14,  -4,  17,  -5,  24,  26, -20,  27,  45,
    1121             :      12, -24,   2, -13,  21,   8,  22,  16,  32,   2,
    1122             :     -34, -31, -20,   7,  58,  -5,   5,  -2, -38,  12,
    1123             :      -2,   1,  -1,  26,  -5,  23,  21,   6,  -8, -11,
    1124             :     }, {
    1125             :     -34,   6,  18,  55,  15,  11,  21, -16,  -8,  16,
    1126             :      -6, -16,  -5,   4,  35,  24,  10,  12,  43,   1,
    1127             :     -43, -47, -14,  -8,  43,   5, -10,  34, -39,  18,
    1128             :     -22,  16,  17,  42, -13,  19,  -1,   3, -14, -20,
    1129             :     }, {
    1130             :      -5,  -7,   7,   4,   9,   0,  21, -28,   6,  48,
    1131             :      -2,  14,  15, -20,   5,   0,  27,  14,  32,  28,
    1132             :       5, -32,   2,  -6,  32,  -3,  12,   5,  -8,  25,
    1133             :      14,   4, -12, -11,   4,  47,  45,  22, -22,   2,
    1134             :     }, {
    1135             :     -74,  12,  30,  42,  30, -14,  16, -23, -29,  19,
    1136             :     -20,  21,   7,  -1,  19,  17,  14,  10,  43,  27,
    1137             :      -3, -48,   8, -22,  16,   7,  -4,  42,  -9,  31,
    1138             :      -6,  20,   6,   4,  -3,  43,  22,  20, -28,  -5,
    1139             :     }, {
    1140             :     -10,  -3,   4,  18,  15, -27,  24, -13,  24,  51,
    1141             :      34, -47, -12, -28,  21,  19,  27, -16,  15, -30,
    1142             :     -17, -12, -12,   0,  36, -10,  -7, -27, -37,  16,
    1143             :      15,  22,  -3,   4, -31,  -1,  42,  -7,  18,   9,
    1144             :     }, {
    1145             :     -79,  17,  27,  56,  36, -41,  19,  -8, -10,  22,
    1146             :      15, -39, -20,  -9,  35,  35,  15, -20,  26, -31,
    1147             :     -26, -27,  -6, -15,  20,   0, -23,   8, -38,  22,
    1148             :      -5,  38,  15,  20, -39,  -4,  18,  -9,  13,   1,
    1149             :     }, {
    1150             :     -50,   3,  16,   5,  30, -53,  19, -20,   3,  55,
    1151             :      19,  -8,   0, -34,   5,  11,  32, -18,  15,  -4,
    1152             :      22, -13,  10, -13,   9,  -8,   0, -19,  -7,  29,
    1153             :      31,  26, -13, -33, -21,  22,  65,   9,   4,  23,
    1154             :     }, {
    1155             :    -119,  24,  39,  44,  51, -66,  14, -15, -31,  26,
    1156             :       1,   0,  -7, -16,  19,  28,  19, -22,  26,  -4,
    1157             :      13, -28,  16, -29,  -5,   1, -16,  16,  -8,  35,
    1158             :      10,  42,   4, -17, -29,  19,  42,   7,   0,  15,
    1159             :     }, {
    1160             :      31, -28,   6, -16, -16,  50, -31, -14,   0,   6,
    1161             :      36,  17,   0,   0, -29, -14,  11,  18,  20, -25,
    1162             :      -6, -33, -19,  20,  43,  21,  21, -14, -55,   0,
    1163             :     -32, -40, -42,  39,   1,  -8, -14,   8,  -6,  -3,
    1164             :     }, {
    1165             :     -37,  -8,  29,  22,   4,  37, -36,  -9, -34, -22,
    1166             :      17,  24,  -8,  18, -15,   2,  -1,  14,  31, -25,
    1167             :     -15, -48, -13,   4,  28,  31,   5,  21, -57,   4,
    1168             :     -53, -24, -23,  55,  -6, -12, -37,   6, -11, -11,
    1169             :     }, {
    1170             :      -7, -22,  18, -29,  -1,  25, -36, -21, -20,   9,
    1171             :      22,  56,  11,  -6, -45, -21,  15,  16,  20,   1,
    1172             :      33, -34,   2,   6,  17,  23,  28,  -6, -25,  12,
    1173             :     -16, -37, -53,   1,  11,  15,   8,  25, -20,  11,
    1174             :     }, {
    1175             :     -76,  -1,  41,   9,  19,  12, -41, -17, -55, -18,
    1176             :       3,  63,   3,  12, -30,  -5,   3,  12,  31,   0,
    1177             :      24, -49,   8,  -9,   1,  33,  12,  29, -27,  18,
    1178             :     -37, -21, -34,  17,   3,  11, -14,  23, -25,   2,
    1179             :     }, {
    1180             :     -13, -17,  15, -15,   3,  -1, -33,  -7,  -1,  12,
    1181             :      58,  -5, -15, -13, -29,  -3,  16, -13,   4, -57,
    1182             :      10, -13, -11,  13,  21,  15,   9, -40, -55,   3,
    1183             :     -14, -19, -44,  17, -24, -32,   5,  -4,  21,  18,
    1184             :     }, {
    1185             :     -82,   3,  38,  23,  24, -15, -38,  -2, -37, -15,
    1186             :      39,   2, -23,   4, -15,  12,   3, -17,  15, -58,
    1187             :       1, -29,  -6,  -2,   5,  26,  -7,  -4, -56,   9,
    1188             :     -35,  -3, -25,  33, -32, -36, -17,  -7,  15,   9,
    1189             :     }, {
    1190             :     -52, -10,  27, -27,  18, -26, -38, -14, -23,  16,
    1191             :      44,  33,  -3, -20, -45, -10,  20, -15,   3, -31,
    1192             :      50, -14,  10,   0,  -5,  17,  15, -32, -24,  16,
    1193             :       1, -15, -55, -20, -14,  -8,  29,  12,   7,  32,
    1194             :     }, {
    1195             :    -121,   9,  50,  10,  40, -40, -43,  -9, -58, -12,
    1196             :      25,  41, -11,  -2, -31,   5,   8, -19,  15, -32,
    1197             :      41, -30,  16, -16, -20,  28,   0,   3, -26,  22,
    1198             :     -19,   0, -36,  -4, -22, -12,   6,   9,   1,  24,
    1199             :     }, {
    1200             :      36, -18,  24,   3, -28,   7, -16,  13,  26,  41,
    1201             :      24,  -1,   5, -26,  -3, -12,  27,  46,  27, -10,
    1202             :     -24, -34, -10,  -8,  49,   2,  34,   0, -51, -12,
    1203             :     -17, -38, -25,  56,   0,   0,  22,  -3, -20, -22,
    1204             :     }, {
    1205             :     -32,   2,  47,  42,  -7,  -5, -21,  18,  -9,  12,
    1206             :       5,   5,  -2,  -8,  10,   4,  14,  42,  38, -10,
    1207             :     -33, -49,  -5, -24,  33,  12,  17,  35, -52,  -6,
    1208             :     -38, -22,  -7,  72,  -7,  -3,   0,  -6, -25, -30,
    1209             :     }, {
    1210             :      -2, -11,  36,  -9, -13, -17, -21,   6,   5,  45,
    1211             :      10,  36,  18, -33, -19, -19,  31,  44,  27,  15,
    1212             :      16, -34,  11, -22,  22,   4,  40,   7, -21,   0,
    1213             :      -1, -35, -36,  18,  10,  24,  46,  12, -34,  -8,
    1214             :     }, {
    1215             :     -71,   9,  59,  29,   8, -30, -26,  11, -30,  16,
    1216             :      -8,  44,   9, -14,  -5,  -2,  19,  40,  38,  15,
    1217             :       7, -50,  17, -38,   7,  14,  24,  43, -22,   6,
    1218             :     -22, -19, -17,  34,   2,  20,  23,  10, -39, -16,
    1219             :     }, {
    1220             :      -8,  -6,  33,   4,  -7, -44, -18,  21,  23,  48,
    1221             :      46, -24,  -9, -40,  -3,  -1,  32,  13,  11, -43,
    1222             :      -7, -14,  -3, -15,  26,  -3,  21, -26, -50,  -8,
    1223             :       0, -16, -27,  34, -25, -23,  43, -17,   6,  -1,
    1224             :     }, {
    1225             :     -77,  13,  56,  43,  13, -57, -23,  26, -11,  19,
    1226             :      27, -16, -17, -22,  10,  15,  19,  10,  22, -43,
    1227             :     -16, -30,   2, -31,  11,   6,   5,   9, -52,  -2,
    1228             :     -20,   0,  -8,  50, -33, -27,  19, -19,   1,  -9,
    1229             :     }, {
    1230             :     -47,   0,  45,  -7,   7, -69, -23,  13,   2,  51,
    1231             :      32,  14,   3, -47, -19,  -8,  37,  11,  10, -16,
    1232             :      32, -15,  19, -29,   0,  -1,  28, -18, -20,   4,
    1233             :      16, -13, -38,  -3, -15,   0,  66,   0,  -7,  13,
    1234             :     }, {
    1235             :    -116,  20,  68,  30,  28, -83, -28,  18, -32,  22,
    1236             :      13,  21,  -5, -28,  -5,   7,  24,   8,  22, -17,
    1237             :      23, -30,  25, -45, -15,   9,  11,  18, -22,  10,
    1238             :      -4,   2, -19,  12, -23,  -3,  43,  -2, -12,   4,
    1239             :     }, {
    1240             :      72, -13, -29, -18,   4,  90,  37, -34,   4,  -1,
    1241             :      13,  -9,  -6,  11,   2,  24, -13,   3,  -7, -11,
    1242             :      -4,   4, -42,  25,  31,  -1,  -8, -29,  -6,  17,
    1243             :     -19,   2, -10,  -6,  38,  22, -42, -19,  -6, -11,
    1244             :     }, {
    1245             :       3,   7,  -6,  20,  25,  77,  32, -29, -31, -30,
    1246             :      -4,  -2, -14,  29,  16,  40, -26,   0,   3, -12,
    1247             :     -13, -10, -36,   9,  15,   8, -24,   6,  -7,  22,
    1248             :     -40,  17,   8,   9,  31,  18, -66, -22, -11, -19,
    1249             :     }, {
    1250             :      32,  -6, -17, -31,  19,  65,  33, -41, -16,   1,
    1251             :       0,  29,   6,   4, -13,  17,  -9,   1,  -8,  14,
    1252             :      35,   3, -19,  11,   4,   0,  -1, -21,  23,  30,
    1253             :      -3,   5, -20, -44,  48,  46, -19,  -3, -20,   3,
    1254             :     }, {
    1255             :     -36,  13,   5,   7,  40,  51,  28, -36, -52, -27,
    1256             :     -18,  36,  -2,  22,   0,  33, -21,  -2,   3,  13,
    1257             :      26, -11, -14,  -4, -10,  10, -18,  14,  22,  36,
    1258             :     -24,  21,  -1, -28,  40,  42, -42,  -5, -25,  -5,
    1259             :     }, {
    1260             :      27,  -1, -20, -17,  24,  38,  35, -26,   1,   4,
    1261             :      35, -32, -21,  -3,   2,  35,  -8, -29, -24, -44,
    1262             :      12,  24, -34,  18,   8,  -7, -21, -55,  -5,  21,
    1263             :      -2,  23, -11, -28,  13,  -1, -22, -33,  21,  10,
    1264             :     }, {
    1265             :     -41,  18,   2,  21,  45,  24,  30, -21, -33, -24,
    1266             :      17, -24, -29,  15,  16,  51, -21, -33, -13, -45,
    1267             :       3,   8, -28,   2,  -7,   2, -37, -19,  -7,  27,
    1268             :     -22,  39,   7, -12,   5,  -5, -45, -35,  15,   1,
    1269             :     }, {
    1270             :     -12,   4,  -8, -29,  39,  12,  30, -33, -19,   8,
    1271             :      21,   6,  -8,  -9, -13,  28,  -4, -31, -24, -18,
    1272             :      52,  23, -12,   4, -18,  -5, -14, -47,  24,  34,
    1273             :      14,  27, -22, -66,  22,  22,   1, -16,   6,  24,
    1274             :     }, {
    1275             :     -81,  25,  14,   8,  61,   0,  25, -28, -54, -20,
    1276             :       3,  14, -17,   8,   0,  44, -16, -35, -13, -18,
    1277             :      43,   7,  -6, -11, -33,   4, -30, -11,  22,  40,
    1278             :      -6,  43,  -3, -50,  14,  18, -22, -18,   1,  16,
    1279             :     }, {
    1280             :      77,  -2, -11,   1,  -7,  47,  52,  -5,  29,  33,
    1281             :       1, -28,   0, -15,  28,  26,   2,  30,   0,   2,
    1282             :     -22,   4, -33,  -3,  36, -21,   3, -15,  -2,   5,
    1283             :      -4,   4,   6,   9,  37,  31,  -5, -32, -20, -30,
    1284             :     }, {
    1285             :       8,  17,  10,  40,  13,  34,  47,   0,  -5,   4,
    1286             :     -16, -21,  -8,   2,  42,  43, -10,  26,  10,   2,
    1287             :     -31, -11, -27, -19,  21, -10, -12,  20,  -3,  11,
    1288             :     -25,  20,  25,  25,  29,  28, -28, -34, -25, -38,
    1289             :     }, {
    1290             :      37,   3,   0, -10,   7,  22,  48, -12,   8,  36,
    1291             :     -12,   9,  12, -22,  12,  19,   6,  28,   0,  29,
    1292             :      18,   3, -11, -17,  10, -18,  10,  -7,  27,  18,
    1293             :      11,   7,  -3, -28,  47,  55,  18, -15, -34, -16,
    1294             :     }, {
    1295             :     -31,  24,  23,  27,  29,   9,  43,  -8, -26,   7,
    1296             :     -30,  17,   4,  -3,  26,  35,  -5,  24,  10,  28,
    1297             :       9, -12,  -5, -33,  -5,  -8,  -5,  29,  26,  24,
    1298             :      -9,  23,  14, -12,  39,  52,  -5, -18, -39, -24,
    1299             :     }, {
    1300             :      32,   8,  -3,   2,  13,  -4,  50,   1,  27,  39,
    1301             :      23, -51, -15, -30,  27,  37,   7,  -1, -17, -29,
    1302             :      -5,  23, -25, -10,  14, -26,  -8, -41,  -1,   9,
    1303             :      13,  26,   5, -12,  12,   7,  14, -45,   6,  -9,
    1304             :     }, {
    1305             :     -36,  29,  19,  41,  34, -18,  45,   6,  -8,  10,
    1306             :       5, -43, -23, -11,  42,  53,  -5,  -5,  -6, -30,
    1307             :     -14,   8, -20, -26,  -1, -16, -25,  -4,  -3,  15,
    1308             :      -7,  41,  23,   3,   4,   3,  -8, -48,   1, -17,
    1309             :     }, {
    1310             :      -7,  15,   9,  -9,  28, -29,  45,  -5,   6,  43,
    1311             :       9, -12,  -2, -36,  12,  30,  11,  -3, -17,  -3,
    1312             :      34,  22,  -3, -24, -12, -24,  -2, -32,  28,  22,
    1313             :      29,  29,  -5, -50,  21,  31,  38, -29,  -7,   5,
    1314             :     }, {
    1315             :     -76,  35,  31,  28,  49, -43,  40,   0, -29,  14,
    1316             :      -8,  -5, -10, -18,  26,  46,   0,  -7,  -6,  -3,
    1317             :      25,   7,   2, -40, -28, -14, -18,   3,  27,  28,
    1318             :       8,  45,  13, -34,  13,  27,  15, -31, -12,  -3,
    1319             :     }, {
    1320             :      74, -17,   0, -31, -18,  73,  -5,   0,   3,  -5,
    1321             :      25,  12,  -3,  -1, -22,   3,  -9,  33, -12, -24,
    1322             :       6,   2, -33,   9,  21,   5,  20, -27, -19,  -7,
    1323             :     -34, -37, -34,  22,  44,   0, -41, -29, -17, -21,
    1324             :     }, {
    1325             :       5,   3,  21,   7,   2,  60, -10,   5, -32, -34,
    1326             :       7,  20, -11,  16,  -8,  20, -21,  29,  -1, -24,
    1327             :      -2, -13, -27,  -6,   5,  15,   3,   8, -21,  -1,
    1328             :     -55, -21, -15,  38,  37,  -3, -65, -32, -23, -30,
    1329             :     }, {
    1330             :      35, -10,  11, -44,  -3,  48, -10,  -6, -17,  -2,
    1331             :      11,  51,   8,  -8, -38,  -3,  -4,  31, -12,   2,
    1332             :      46,   1, -10,  -4,  -5,   7,  26, -19,  10,   5,
    1333             :     -18, -34, -45, -15,  54,  24, -18, -13, -31,  -7,
    1334             :     }, {
    1335             :     -33,  10,  34,  -5,  17,  35, -15,  -1, -53, -30,
    1336             :      -6,  59,   0,  10, -24,  13, -17,  27,  -1,   1,
    1337             :      37, -13,  -4, -20, -20,  18,  10,  16,   8,  11,
    1338             :     -39, -18, -26,   0,  46,  20, -41, -15, -37, -15,
    1339             :     }, {
    1340             :      29,  -5,   7, -30,   1,  21,  -7,   7,   0,   0,
    1341             :      47,  -9, -18, -15, -22,  14,  -4,   0, -28, -57,
    1342             :      23,  21, -25,   2,  -1,   0,   7, -53, -19,  -3,
    1343             :     -17, -15, -36,   0,  19, -24, -21, -43,   9,   0,
    1344             :     }, {
    1345             :     -39,  14,  30,   8,  22,   8, -12,  12, -34, -27,
    1346             :      29,  -2, -26,   2,  -8,  31, -16,  -3, -17, -57,
    1347             :      14,   6, -19, -13, -16,  10,  -8, -17, -20,   2,
    1348             :     -38,   0, -17,  16,  11, -27, -44, -45,   4,  -8,
    1349             :     }, {
    1350             :      -9,   1,  20, -43,  17,  -3, -12,   0, -20,   4,
    1351             :      33,  29,  -6, -22, -38,   7,   0,  -1, -29, -30,
    1352             :      63,  21,  -3, -11, -27,   1,  14, -45,  10,   9,
    1353             :      -1, -12, -47, -37,  28,   0,   2, -26,  -4,  13,
    1354             :     }, {
    1355             :     -78,  21,  43,  -4,  38, -17, -17,   5, -55, -24,
    1356             :      15,  36, -14,  -4, -24,  24, -12,  -5, -17, -31,
    1357             :      54,   5,   2, -27, -43,  12,  -2,  -9,   9,  15,
    1358             :     -22,   3, -28, -21,  20,  -3, -20, -28,  -9,   5,
    1359             :     }, {
    1360             :      80,  -6,  16, -11, -30,  30,   9,  28,  28,  29,
    1361             :      13,  -6,   2, -28,   3,   5,   7,  60,  -5,  -9,
    1362             :     -11,   1, -24, -19,  27, -13,  32, -13, -15, -19,
    1363             :     -19, -35, -17,  39,  43,   9,  -4, -42, -32, -41,
    1364             :     }, {
    1365             :      11,  14,  39,  27,  -9,  17,   4,  33,  -6,   0,
    1366             :      -4,   1,  -5, -10,  17,  22,  -5,  57,   5,  -9,
    1367             :     -20, -13, -18, -35,  11,  -3,  16,  22, -17, -13,
    1368             :     -40, -19,   1,  55,  35,   5, -27, -44, -37, -49,
    1369             :     }, {
    1370             :      40,   0,  28, -24, -14,   5,   4,  21,   7,  33,
    1371             :       0,  32,  15, -35, -12,  -1,  11,  58,  -5,  16,
    1372             :      28,   0,  -1, -33,   0, -11,  39,  -5,  14,  -6,
    1373             :      -3, -31, -28,   1,  53,  33,  19, -25, -46, -26,
    1374             :     }, {
    1375             :     -28,  20,  51,  14,   6,  -7,   0,  26, -27,   4,
    1376             :     -18,  40,   6, -16,   1,  15,   0,  55,   5,  16,
    1377             :      19, -14,   3, -49, -14,  -1,  22,  30,  12,   0,
    1378             :     -24, -15,  -9,  17,  45,  29,  -4, -28, -51, -35,
    1379             :     }, {
    1380             :      34,   4,  25, -10,  -9, -21,   7,  36,  26,  36,
    1381             :      35, -28, -12, -42,   3,  16,  12,  28, -21, -42,
    1382             :       5,  21, -16, -26,   4, -19,  19, -39, -15, -15,
    1383             :      -1, -13, -19,  17,  17, -14,  15, -55,  -4, -19,
    1384             :     }, {
    1385             :     -34,  25,  48,  28,  11, -34,   2,  41,  -9,   7,
    1386             :      17, -21, -20, -24,  17,  33,   0,  24, -10, -42,
    1387             :      -3,   5, -10, -42, -11,  -8,   3,  -3, -16,  -9,
    1388             :     -22,   2,   0,  33,  10, -18,  -7, -58, -10, -28,
    1389             :     }, {
    1390             :      -4,  11,  37, -23,   5, -46,   2,  29,   5,  39,
    1391             :      21,   9,   0, -49, -12,   9,  16,  26, -22, -15,
    1392             :      45,  20,   5, -40, -22, -17,  26, -31,  14,  -2,
    1393             :      14, -10, -30, -20,  27,   9,  39, -39, -18,  -5,
    1394             :     }, {
    1395             :     -73,  32,  60,  15,  26, -59,  -2,  33, -30,  10,
    1396             :       3,  17,  -8, -30,   1,  26,   4,  22, -10, -16,
    1397             :      36,   5,  11, -56, -37,  -6,  10,   5,  13,   3,
    1398             :      -6,   5, -11,  -4,  19,   5,  16, -41, -24, -13
    1399             :     }
    1400             : };
    1401             : 
    1402             : const uint16_t ff_cb1_base[128]={
    1403             :     19657, 18474, 18365, 17520, 21048, 18231, 18584, 16671,
    1404             :     20363, 19069, 19409, 18430, 21844, 18753, 19613, 17411,
    1405             :     20389, 21772, 20129, 21702, 20978, 20472, 19627, 19387,
    1406             :     21477, 23134, 21841, 23919, 22089, 21519, 21134, 20852,
    1407             :     19675, 17821, 19044, 17477, 19986, 16955, 18446, 16086,
    1408             :     21138, 18899, 20952, 18929, 21452, 17833, 20104, 17159,
    1409             :     19770, 20056, 20336, 20866, 19329, 18217, 18908, 18004,
    1410             :     21556, 21948, 23079, 23889, 20922, 19544, 20984, 19781,
    1411             :     19781, 20984, 19544, 20922, 23889, 23079, 21948, 21556,
    1412             :     18004, 18908, 18217, 19329, 20866, 20336, 20056, 19770,
    1413             :     17159, 20104, 17833, 21452, 18929, 20952, 18899, 21138,
    1414             :     16086, 18446, 16955, 19986, 17477, 19044, 17821, 19675,
    1415             :     20852, 21134, 21519, 22089, 23919, 21841, 23134, 21477,
    1416             :     19387, 19627, 20472, 20978, 21702, 20129, 21772, 20389,
    1417             :     17411, 19613, 18753, 21844, 18430, 19409, 19069, 20363,
    1418             :     16671, 18584, 18231, 21048, 17520, 18365, 18474, 19657,
    1419             : };
    1420             : 
    1421             : const uint16_t ff_cb2_base[128]={
    1422             :     12174, 13380, 13879, 13832, 13170, 13227, 13204, 12053,
    1423             :     12410, 13988, 14348, 14631, 13100, 13415, 13224, 12268,
    1424             :     11982, 13825, 13499, 14210, 13877, 14788, 13811, 13109,
    1425             :     11449, 13275, 12833, 13717, 12728, 13696, 12759, 12405,
    1426             :     10230, 12185, 11628, 13161, 11762, 13458, 12312, 12818,
    1427             :     10443, 12773, 12011, 14020, 11818, 13825, 12453, 13226,
    1428             :     10446, 13162, 11881, 14300, 12859, 16288, 13490, 15053,
    1429             :     10155, 12820, 11519, 13973, 12041, 15081, 12635, 14198,
    1430             :     14198, 12635, 15081, 12041, 13973, 11519, 12820, 10155,
    1431             :     15053, 13490, 16288, 12859, 14300, 11881, 13162, 10446,
    1432             :     13226, 12453, 13825, 11818, 14020, 12011, 12773, 10443,
    1433             :     12818, 12312, 13458, 11762, 13161, 11628, 12185, 10230,
    1434             :     12405, 12759, 13696, 12728, 13717, 12833, 13275, 11449,
    1435             :     13109, 13811, 14788, 13877, 14210, 13499, 13825, 11982,
    1436             :     12268, 13224, 13415, 13100, 14631, 14348, 13988, 12410,
    1437             :     12053, 13204, 13227, 13170, 13832, 13879, 13380, 12174,
    1438             : };
    1439             : 
    1440             : const int16_t ff_energy_tab[32]={
    1441             :         0,    16,    20,    25,    32,    41,    51,    65,
    1442             :        81,   103,   129,   163,   205,   259,   326,   410,
    1443             :       516,   650,   819,  1031,  1298,  1634,  2057,  2590,
    1444             :      3261,  4105,  5168,  6507,  8192, 10313, 12983, 16345
    1445             : };
    1446             : 
    1447             : static const int16_t lpc_refl_cb1[64]={
    1448             :     -4041, -4018, -3998, -3977, -3954, -3930, -3906, -3879,
    1449             :     -3852, -3825, -3795, -3764, -3731, -3699, -3666, -3631,
    1450             :     -3594, -3555, -3513, -3468, -3420, -3372, -3321, -3268,
    1451             :     -3212, -3153, -3090, -3021, -2944, -2863, -2772, -2676,
    1452             :     -2565, -2445, -2328, -2202, -2072, -1941, -1808, -1660,
    1453             :     -1508, -1348, -1185,  -994,  -798,  -600,  -374,  -110,
    1454             :       152,   447,   720,   982,  1229,  1456,  1682,  1916,
    1455             :      2130,  2353,  2595,  2853,  3118,  3363,  3588,  3814
    1456             : };
    1457             : 
    1458             : static const int16_t lpc_refl_cb2[32]={
    1459             :     -3091, -2386, -1871, -1425, -1021,  -649,  -316,   -20,
    1460             :       267,   544,   810,  1065,  1305,  1534,  1756,  1970,
    1461             :      2171,  2359,  2536,  2700,  2854,  2996,  3133,  3263,
    1462             :      3386,  3499,  3603,  3701,  3789,  3870,  3947,  4020
    1463             : };
    1464             : 
    1465             : static const int16_t lpc_refl_cb3[32]={
    1466             :     -3525, -3295, -3081, -2890, -2696, -2511, -2328, -2149,
    1467             :     -1979, -1817, -1658, -1498, -1341, -1188, -1032,  -876,
    1468             :      -721,  -561,  -394,  -228,   -54,   119,   296,   484,
    1469             :       683,   895,  1123,  1373,  1651,  1965,  2360,  2854
    1470             : };
    1471             : 
    1472             : static const int16_t lpc_refl_cb4[16]={
    1473             :     -1845, -1057,  -522,   -77,   301,   647,   975,  1285,
    1474             :      1582,  1873,  2163,  2452,  2735,  3017,  3299,  3569
    1475             : };
    1476             : 
    1477             : static const int16_t lpc_refl_cb5[16]={
    1478             :     -2691, -2187, -1788, -1435, -1118,  -837,  -571,  -316,
    1479             :       -59,   201,   470,   759,  1077,  1457,  1908,  2495
    1480             : };
    1481             : 
    1482             : static const int16_t lpc_refl_cb6[8]={
    1483             :     -1372,  -474,   133,   632,  1100,  1571,  2075,  2672
    1484             : };
    1485             : 
    1486             : static const int16_t lpc_refl_cb7[8]={
    1487             :     -2389, -1787, -1231,  -717,  -239,   234,   770,  1474
    1488             : };
    1489             : 
    1490             : static const int16_t lpc_refl_cb8[8]={
    1491             :     -1569,  -864,  -296,   200,   670,  1151,  1709,  2385
    1492             : };
    1493             : 
    1494             : static const int16_t lpc_refl_cb9[8]={
    1495             :     -2200, -1608, -1062,  -569,  -120,   338,   863,  1621
    1496             : };
    1497             : 
    1498             : static const int16_t lpc_refl_cb10[4]={
    1499             :      -617,   190,   802,  1483
    1500             : };
    1501             : 
    1502             : const int16_t * const ff_lpc_refl_cb[10]={
    1503             :     lpc_refl_cb1, lpc_refl_cb2, lpc_refl_cb3, lpc_refl_cb4, lpc_refl_cb5,
    1504             :     lpc_refl_cb6, lpc_refl_cb7, lpc_refl_cb8, lpc_refl_cb9, lpc_refl_cb10
    1505             : };
    1506             : 
    1507       24376 : static void add_wav(int16_t *dest, int n, int skip_first, int *m,
    1508             :                     const int16_t *s1, const int8_t *s2, const int8_t *s3)
    1509             : {
    1510             :     int i;
    1511             :     int v[3];
    1512             : 
    1513       24376 :     v[0] = 0;
    1514       96970 :     for (i=!skip_first; i<3; i++)
    1515       72594 :         v[i] = (ff_gain_val_tab[n][i] * (unsigned)m[i]) >> ff_gain_exp_tab[n];
    1516             : 
    1517       24376 :     if (v[0]) {
    1518      964525 :         for (i=0; i < BLOCKSIZE; i++)
    1519      941000 :             dest[i] = (s1[i]*v[0] + s2[i]*v[1] + s3[i]*v[2]) >> 12;
    1520             :     } else {
    1521       34891 :         for (i=0; i < BLOCKSIZE; i++)
    1522       34040 :             dest[i] = (             s2[i]*v[1] + s3[i]*v[2]) >> 12;
    1523             :     }
    1524       24376 : }
    1525             : 
    1526             : /**
    1527             :  * Copy the last offset values of *source to *target. If those values are not
    1528             :  * enough to fill the target buffer, fill it with another copy of those values.
    1529             :  */
    1530       25039 : void ff_copy_and_dup(int16_t *target, const int16_t *source, int offset)
    1531             : {
    1532       25039 :     source += BUFFERSIZE - offset;
    1533             : 
    1534       25039 :     memcpy(target, source, FFMIN(BLOCKSIZE, offset)*sizeof(*target));
    1535       25039 :     if (offset < BLOCKSIZE)
    1536        2697 :         memcpy(target + offset, source, (BLOCKSIZE - offset)*sizeof(*target));
    1537       25039 : }
    1538             : 
    1539             : /**
    1540             :  * Evaluate the reflection coefficients from the filter coefficients.
    1541             :  *
    1542             :  * @return 1 if one of the reflection coefficients is greater than
    1543             :  *         4095, 0 if not.
    1544             :  */
    1545       18656 : int ff_eval_refl(int *refl, const int16_t *coefs, AVCodecContext *avctx)
    1546             : {
    1547             :     int b, i, j;
    1548             :     int buffer1[LPC_ORDER];
    1549             :     int buffer2[LPC_ORDER];
    1550       18656 :     int *bp1 = buffer1;
    1551       18656 :     int *bp2 = buffer2;
    1552             : 
    1553      205216 :     for (i=0; i < LPC_ORDER; i++)
    1554      186560 :         buffer2[i] = coefs[i];
    1555             : 
    1556       18656 :     refl[LPC_ORDER-1] = bp2[LPC_ORDER-1];
    1557             : 
    1558       18656 :     if ((unsigned) bp2[LPC_ORDER-1] + 0x1000 > 0x1fff) {
    1559           0 :         av_log(avctx, AV_LOG_ERROR, "Overflow. Broken sample?\n");
    1560           0 :         return 1;
    1561             :     }
    1562             : 
    1563      186179 :     for (i = LPC_ORDER-2; i >= 0; i--) {
    1564      167701 :         b = 0x1000-((bp2[i+1] * bp2[i+1]) >> 12);
    1565             : 
    1566      167701 :         if (!b)
    1567           0 :             b = -2;
    1568             : 
    1569      167701 :         b = 0x1000000 / b;
    1570     1006983 :         for (j=0; j <= i; j++) {
    1571             : #if CONFIG_FTRAPV
    1572             :             int a = bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12);
    1573             :             if((int)(a*(unsigned)b) != a*(int64_t)b)
    1574             :                 return 1;
    1575             : #endif
    1576      839282 :             bp1[j] = (int)((bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12)) * (unsigned)b) >> 12;
    1577             :         }
    1578             : 
    1579      167701 :         if ((unsigned) bp1[i] + 0x1000 > 0x1fff)
    1580         178 :             return 1;
    1581             : 
    1582      167523 :         refl[i] = bp1[i];
    1583             : 
    1584      167523 :         FFSWAP(int *, bp1, bp2);
    1585             :     }
    1586       18478 :     return 0;
    1587             : }
    1588             : 
    1589             : /**
    1590             :  * Evaluate the LPC filter coefficients from the reflection coefficients.
    1591             :  * Does the inverse of the ff_eval_refl() function.
    1592             :  */
    1593        6094 : void ff_eval_coefs(int *coefs, const int *refl)
    1594             : {
    1595             :     int buffer[LPC_ORDER];
    1596        6094 :     int *b1 = buffer;
    1597        6094 :     int *b2 = coefs;
    1598             :     int i, j;
    1599             : 
    1600       67034 :     for (i=0; i < LPC_ORDER; i++) {
    1601       60940 :         b1[i] = refl[i] * 16;
    1602             : 
    1603      335170 :         for (j=0; j < i; j++)
    1604      274230 :             b1[j] = ((int)(refl[i] * (unsigned)b2[i-j-1]) >> 12) + b2[j];
    1605             : 
    1606       60940 :         FFSWAP(int *, b1, b2);
    1607             :     }
    1608             : 
    1609       67034 :     for (i=0; i < LPC_ORDER; i++)
    1610       60940 :         coefs[i] >>= 4;
    1611        6094 : }
    1612             : 
    1613        6272 : void ff_int_to_int16(int16_t *out, const int *inp)
    1614             : {
    1615             :     int i;
    1616             : 
    1617       68992 :     for (i = 0; i < LPC_ORDER; i++)
    1618       62720 :         *out++ = *inp++;
    1619        6272 : }
    1620             : 
    1621             : /**
    1622             :  * Evaluate sqrt(x << 24). x must fit in 20 bits. This value is evaluated in an
    1623             :  * odd way to make the output identical to the binary decoder.
    1624             :  */
    1625       55701 : int ff_t_sqrt(unsigned int x)
    1626             : {
    1627       55701 :     int s = 2;
    1628      241034 :     while (x > 0xfff) {
    1629      129632 :         s++;
    1630      129632 :         x >>= 2;
    1631             :     }
    1632             : 
    1633       55701 :     return ff_sqrt(x << 20) << s;
    1634             : }
    1635             : 
    1636       24271 : unsigned int ff_rms(const int *data)
    1637             : {
    1638             :     int i;
    1639       24271 :     unsigned int res = 0x10000;
    1640       24271 :     int b = LPC_ORDER;
    1641             : 
    1642      266981 :     for (i = 0; i < LPC_ORDER; i++) {
    1643      242710 :         res = (((0x1000000 - data[i]*data[i]) >> 12) * res) >> 12;
    1644             : 
    1645      242710 :         if (res == 0)
    1646           0 :             return 0;
    1647             : 
    1648      524807 :         while (res <= 0x3fff) {
    1649       39387 :             b++;
    1650       39387 :             res <<= 2;
    1651             :         }
    1652             :     }
    1653             : 
    1654       24271 :     return ff_t_sqrt(res) >> b;
    1655             : }
    1656             : 
    1657       18282 : int ff_interp(RA144Context *ractx, int16_t *out, int a, int copyold, int energy)
    1658             : {
    1659             :     int work[LPC_ORDER];
    1660       18282 :     int b = NBLOCKS - a;
    1661             :     int i;
    1662             : 
    1663             :     // Interpolate block coefficients from the this frame's forth block and
    1664             :     // last frame's forth block.
    1665      201102 :     for (i = 0; i < LPC_ORDER; i++)
    1666      182820 :         out[i] = (a * ractx->lpc_coef[0][i] + b * ractx->lpc_coef[1][i])>> 2;
    1667             : 
    1668       18282 :     if (ff_eval_refl(work, out, ractx->avctx)) {
    1669             :         // The interpolated coefficients are unstable, copy either new or old
    1670             :         // coefficients.
    1671         105 :         ff_int_to_int16(out, ractx->lpc_coef[copyold]);
    1672         105 :         return ff_rescale_rms(ractx->lpc_refl_rms[copyold], energy);
    1673             :     } else {
    1674       18177 :         return ff_rescale_rms(ff_rms(work), energy);
    1675             :     }
    1676             : }
    1677             : 
    1678       24376 : unsigned int ff_rescale_rms(unsigned int rms, unsigned int energy)
    1679             : {
    1680       24376 :     return (rms * energy) >> 10;
    1681             : }
    1682             : 
    1683             : /** inverse root mean square */
    1684       25039 : int ff_irms(AudioDSPContext *adsp, const int16_t *data)
    1685             : {
    1686       25039 :     unsigned int sum = adsp->scalarproduct_int16(data, data, BLOCKSIZE);
    1687             : 
    1688       25039 :     if (sum == 0)
    1689           4 :         return 0; /* OOPS - division by zero */
    1690             : 
    1691       25035 :     return 0x20000000 / (ff_t_sqrt(sum) >> 8);
    1692             : }
    1693             : 
    1694       24376 : void ff_subblock_synthesis(RA144Context *ractx, const int16_t *lpc_coefs,
    1695             :                            int cba_idx, int cb1_idx, int cb2_idx,
    1696             :                            int gval, int gain)
    1697             : {
    1698             :     int16_t *block;
    1699             :     int m[3];
    1700             : 
    1701       24376 :     if (cba_idx) {
    1702       23842 :         cba_idx += BLOCKSIZE/2 - 1;
    1703       23842 :         ff_copy_and_dup(ractx->buffer_a, ractx->adapt_cb, cba_idx);
    1704       23842 :         m[0] = (ff_irms(&ractx->adsp, ractx->buffer_a) * (unsigned)gval) >> 12;
    1705             :     } else {
    1706         534 :         m[0] = 0;
    1707             :     }
    1708       24376 :     m[1] = (ff_cb1_base[cb1_idx] * gval) >> 8;
    1709       24376 :     m[2] = (ff_cb2_base[cb2_idx] * gval) >> 8;
    1710       24376 :     memmove(ractx->adapt_cb, ractx->adapt_cb + BLOCKSIZE,
    1711             :             (BUFFERSIZE - BLOCKSIZE) * sizeof(*ractx->adapt_cb));
    1712             : 
    1713       24376 :     block = ractx->adapt_cb + BUFFERSIZE - BLOCKSIZE;
    1714             : 
    1715       24376 :     add_wav(block, gain, cba_idx, m, cba_idx? ractx->buffer_a: NULL,
    1716       24376 :             ff_cb1_vects[cb1_idx], ff_cb2_vects[cb2_idx]);
    1717             : 
    1718       24376 :     memcpy(ractx->curr_sblock, ractx->curr_sblock + BLOCKSIZE,
    1719             :            LPC_ORDER*sizeof(*ractx->curr_sblock));
    1720             : 
    1721       24376 :     if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + LPC_ORDER, lpc_coefs,
    1722             :                                     block, BLOCKSIZE, LPC_ORDER, 1, 0, 0xfff))
    1723           0 :         memset(ractx->curr_sblock, 0, (LPC_ORDER+BLOCKSIZE)*sizeof(*ractx->curr_sblock));
    1724       24376 : }

Generated by: LCOV version 1.13