[FFmpeg-soc] [soc]: r1396 - in amr: amrnbfloatdata.h amrnbfloatdec.c
superdump
subversion at mplayerhq.hu
Wed Oct 3 20:17:28 CEST 2007
Author: superdump
Date: Wed Oct 3 20:17:27 2007
New Revision: 1396
Log:
- Initial import of floating point code and tables/data
- Bit stream parsing taken from amrnbdec.c
- LSF to LPC coefficient code uses float tables from the reference encoder
Added:
amr/amrnbfloatdata.h
amr/amrnbfloatdec.c
Added: amr/amrnbfloatdata.h
==============================================================================
--- (empty file)
+++ amr/amrnbfloatdata.h Wed Oct 3 20:17:27 2007
@@ -0,0 +1,1778 @@
+/*
+ * AMR narrowband data and definitions
+ * Copyright (c) 2006-2007 Robert Swain
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+/**
+ * @file amrnbfloatdata.h
+ * AMR narrowband data and definitions
+ */
+
+
+#include <math.h>
+
+// general definitions
+#define AMR_BLOCK_SIZE 160
+
+// definition of modes for decoder
+#define NO_DATA 15
+enum Mode {
+ MODE_475 = 0,
+ MODE_515,
+ MODE_59,
+ MODE_67,
+ MODE_74,
+ MODE_795,
+ MODE_102,
+ MODE_122,
+ MODE_DTX, // silent frame
+ N_MODES // number of modes
+};
+
+// number of bits for each mode
+static const uint8_t mode_bits[N_MODES] = {
+ 95, // MODE_475
+ 103, // MODE_515
+ 118, // MODE_59
+ 134, // MODE_67
+ 148, // MODE_74
+ 159, // MODE_795
+ 204, // MODE_102
+ 244, // MODE_122
+ 35 // MODE_DTX
+};
+
+// declaration of received frame types
+enum RXFrameType {
+ RX_SPEECH_GOOD = 0,
+ RX_SPEECH_DEGRADED,
+ RX_ONSET,
+ RX_SPEECH_BAD,
+ RX_SID_FIRST,
+ RX_SID_UPDATE,
+ RX_SID_BAD,
+ RX_NO_DATA,
+ RX_N_FRAMETYPES // number of frame types
+};
+
+// number of parameters
+#define PRMS_MODE_475 17
+#define PRMS_MODE_515 19
+#define PRMS_MODE_59 19
+#define PRMS_MODE_67 19
+#define PRMS_MODE_74 19
+#define PRMS_MODE_795 23
+#define PRMS_MODE_102 39
+#define PRMS_MODE_122 57
+#define PRMS_MODE_DTX 5
+
+#define LP_FILTER_ORDER 10 // linear predictive coding filter order
+
+// typedef for bit order tables
+typedef struct AMROrder {
+ uint8_t array_element;
+ uint8_t bit_mask;
+} AMROrder;
+
+
+/**************************** tables *****************************/
+
+// The following order* tables are used to reorder the bitstream into the bit allocation
+// format as in the specification. The bits are grouped into three classes of importance.
+// See the specification, for more information.
+
+static const AMROrder order_MODE_475[95] = {
+{ 0, 7}, { 0, 6}, { 0, 5}, { 0, 4}, { 0, 3}, { 0, 2}, { 0, 1}, { 0, 0},
+{ 1, 7}, { 1, 6}, { 1, 5}, { 1, 4}, { 1, 3}, { 1, 2}, { 1, 1}, { 1, 0},
+{ 3, 7}, { 3, 6}, { 3, 5}, { 3, 4}, { 3, 3}, { 3, 2}, { 7, 3}, { 7, 2},
+{10, 3}, {10, 2}, {14, 3}, {14, 2}, { 6, 0}, { 6, 1}, { 6, 2}, { 6, 3},
+{13, 0}, {13, 1}, {13, 2}, {13, 3}, { 2, 5}, { 2, 4}, { 2, 2}, { 2, 0},
+{13, 4}, {13, 5}, {13, 6}, {13, 7}, { 3, 1}, { 3, 0}, { 6, 4}, { 6, 5},
+{ 6, 6}, { 6, 7}, { 5, 1}, { 5, 0}, { 2, 6}, { 2, 3}, { 2, 1}, { 7, 1},
+{ 7, 0}, { 9, 1}, { 9, 0}, {10, 1}, {10, 0}, {12, 1}, {12, 0}, {14, 1},
+{14, 0}, {16, 1}, {16, 0}, { 4, 5}, { 4, 4}, { 4, 2}, { 4, 1}, { 8, 5},
+{ 8, 4}, { 8, 2}, { 8, 1}, {11, 5}, {11, 4}, {11, 2}, {11, 1}, {15, 5},
+{15, 4}, {15, 2}, {15, 1}, { 4, 3}, { 8, 3}, {11, 3}, {15, 3}, { 4, 0},
+{ 8, 0}, {11, 0}, {15, 0}, { 4, 6}, { 8, 6}, {11, 6}, {15, 6}
+};
+
+static const AMROrder order_MODE_515[103] = {
+{ 0, 0}, { 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7},
+{ 1, 0}, { 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, { 1, 5}, { 1, 6}, { 1, 7},
+{ 3, 7}, { 3, 6}, { 3, 5}, { 3, 4}, { 3, 3}, { 7, 3}, {11, 3}, {15, 3},
+{ 6, 0}, { 6, 1}, { 6, 2}, {10, 0}, {10, 1}, {10, 2}, {14, 0}, {14, 1},
+{14, 2}, {18, 0}, {18, 1}, {18, 2}, { 6, 3}, {10, 3}, {14, 3}, {18, 3},
+{ 3, 2}, { 7, 2}, {11, 2}, {15, 2}, { 2, 4}, { 6, 4}, {10, 4}, {14, 4},
+{18, 4}, { 3, 1}, { 7, 1}, {11, 1}, { 2, 5}, { 2, 2}, { 2, 0}, { 6, 5},
+{10, 5}, {14, 5}, {18, 5}, { 2, 1}, { 3, 0}, { 7, 0}, {11, 0}, {15, 1},
+{ 2, 3}, { 2, 6}, {15, 0}, { 5, 0}, { 5, 1}, { 9, 0}, { 9, 1}, {13, 0},
+{ 4, 2}, { 8, 2}, {12, 2}, {16, 2}, {13, 1}, {17, 0}, {17, 1}, { 4, 1},
+{ 8, 1}, {12, 1}, {16, 1}, { 4, 5}, { 8, 5}, { 4, 4}, { 8, 4}, {12, 5},
+{12, 4}, {16, 5}, {16, 4}, { 4, 6}, { 8, 6}, {12, 6}, {16, 6}, { 4, 0},
+{ 8, 0}, {12, 0}, {16, 0}, { 4, 3}, { 8, 3}, {12, 3}, {16, 3}
+};
+
+static const AMROrder order_MODE_59[118] = {
+{ 0, 7}, { 0, 6}, { 0, 3}, { 0, 2}, { 0, 4}, { 0, 1}, { 0, 0}, { 0, 5},
+{ 1, 3}, { 1, 1}, { 1, 8}, { 1, 7}, { 1, 5}, { 1, 4}, { 1, 2}, { 1, 6},
+{ 1, 0}, { 3, 5}, {11, 5}, { 3, 4}, {11, 4}, { 3, 6}, {11, 6}, { 3, 7},
+{11, 7}, { 3, 3}, {11, 3}, { 7, 3}, {15, 3}, { 6, 0}, {10, 0}, {14, 0},
+{18, 0}, { 3, 2}, {11, 2}, { 7, 2}, {15, 2}, { 6, 1}, {10, 1}, {14, 1},
+{18, 1}, { 7, 1}, {15, 1}, { 3, 1}, {11, 1}, { 3, 0}, {11, 0}, { 6, 2},
+{10, 2}, {14, 2}, {18, 2}, { 6, 3}, {10, 3}, {14, 3}, {18, 3}, { 6, 4},
+{10, 4}, {14, 4}, {18, 4}, { 2, 6}, { 2, 4}, { 2, 2}, { 2, 3}, { 2, 7},
+{ 2, 8}, { 2, 5}, { 2, 1}, {17, 0}, { 5, 1}, {13, 1}, {17, 1}, { 9, 1},
+{ 9, 0}, { 5, 0}, {13, 0}, { 2, 0}, { 6, 5}, {10, 5}, {14, 5}, {18, 5},
+{ 7, 0}, {15, 0}, { 4, 2}, { 8, 2}, {12, 2}, {16, 2}, { 4, 3}, { 8, 3},
+{12, 3}, {16, 3}, { 4, 6}, { 8, 6}, {12, 6}, {16, 6}, { 4, 7}, { 8, 7},
+{12, 7}, {16, 7}, { 4, 8}, { 8, 8}, {12, 8}, {16, 8}, { 4, 0}, { 8, 0},
+{12, 0}, {16, 0}, { 4, 1}, { 8, 1}, {12, 1}, {16, 1}, { 4, 4}, { 8, 4},
+{12, 4}, {16, 4}, { 4, 5}, { 8, 5}, {12, 5}, {16, 5}
+};
+
+static const AMROrder order_MODE_67[134] = {
+{ 0, 7}, { 0, 6}, { 0, 3}, { 0, 4}, { 0, 2}, { 0, 1}, { 1, 3}, { 0, 0},
+{ 0, 5}, { 1, 8}, { 1, 7}, { 1, 5}, { 1, 1}, { 1, 4}, { 1, 2}, { 1, 6},
+{ 3, 5}, {11, 5}, { 3, 4}, {11, 4}, { 3, 6}, {11, 6}, { 3, 7}, {11, 7},
+{ 3, 3}, {11, 3}, { 1, 0}, { 7, 3}, {15, 3}, { 7, 2}, {15, 2}, { 3, 2},
+{11, 2}, { 7, 1}, {15, 1}, { 6, 6}, {10, 6}, {14, 6}, {18, 6}, { 3, 1},
+{11, 1}, { 6, 3}, {10, 3}, {14, 3}, {18, 3}, { 6, 2}, {10, 2}, {14, 2},
+{18, 2}, { 7, 0}, {15, 0}, { 3, 0}, {11, 0}, { 2, 6}, { 2, 2}, { 6, 1},
+{10, 1}, {14, 1}, {18, 1}, { 2, 4}, { 2, 3}, { 2, 7}, { 2, 8}, { 2, 5},
+{ 2, 1}, { 2, 0}, { 6, 4}, {10, 4}, {14, 4}, {18, 4}, { 5, 0}, { 9, 0},
+{13, 0}, {17, 0}, { 6, 0}, {10, 0}, {14, 0}, {18, 0}, { 5, 1}, { 9, 1},
+{13, 1}, {17, 1}, {18, 5}, {14, 5}, {10, 5}, { 6, 5}, { 5, 2}, { 9, 2},
+{13, 2}, {17, 2}, { 4, 2}, { 8, 2}, {12, 2}, {16, 2}, { 4, 5}, { 8, 5},
+{12, 5}, {16, 5}, { 4, 6}, { 8, 6}, {12, 6}, {16, 6}, { 4, 9}, { 8, 9},
+{12, 9}, {16, 9}, { 4,10}, { 8,10}, {12,10}, {16,10}, { 4, 0}, { 8, 0},
+{12, 0}, {16, 0}, { 4, 1}, { 8, 1}, {12, 1}, {16, 1}, { 4, 3}, { 8, 3},
+{12, 3}, {16, 3}, { 4, 4}, { 8, 4}, {12, 4}, {16, 4}, { 4, 7}, { 8, 7},
+{12, 7}, {16, 7}, { 4, 8}, { 8, 8}, {12, 8}, {16, 8}
+};
+
+static const AMROrder order_MODE_74[148] = {
+{ 0, 7}, { 0, 6}, { 0, 5}, { 0, 4}, { 0, 3}, { 0, 2}, { 0, 1}, { 0, 0},
+{ 1, 8}, { 1, 7}, { 1, 6}, { 1, 5}, { 1, 4}, { 1, 3}, { 1, 2}, { 1, 1},
+{ 1, 0}, { 3, 7}, {11, 7}, { 3, 6}, {11, 6}, { 3, 5}, {11, 5}, { 3, 4},
+{11, 4}, { 3, 3}, {11, 3}, { 6, 6}, {10, 6}, {14, 6}, {18, 6}, { 6, 5},
+{10, 5}, {14, 5}, {18, 5}, { 6, 3}, {10, 3}, {14, 3}, {18, 3}, { 6, 2},
+{10, 2}, {14, 2}, {18, 2}, { 7, 4}, {15, 4}, { 7, 3}, {15, 3}, { 2, 4},
+{ 2, 3}, { 2, 2}, { 2, 8}, { 2, 7}, { 2, 6}, { 3, 2}, { 7, 2}, {11, 2},
+{15, 2}, { 6, 1}, {10, 1}, {14, 1}, {18, 1}, { 2, 5}, { 2, 1}, { 2, 0},
+{ 5, 0}, { 9, 0}, {13, 0}, {17, 0}, { 6, 0}, {10, 0}, {14, 0}, {18, 0},
+{ 5, 1}, { 9, 1}, {13, 1}, {17, 1}, { 5, 2}, { 9, 2}, { 6, 4}, {10, 4},
+{14, 4}, {18, 4}, {13, 2}, {17, 2}, { 5, 3}, { 9, 3}, {13, 3}, {17, 3},
+{ 3, 1}, { 3, 0}, { 7, 1}, { 7, 0}, {11, 1}, {11, 0}, {15, 1}, {15, 0},
+{ 4, 5}, { 4, 4}, { 4, 3}, { 4, 2}, { 4, 1}, { 4, 0}, { 8, 5}, { 8, 4},
+{ 8, 3}, { 8, 2}, { 8, 1}, { 8, 0}, {12, 5}, {12, 4}, {12, 3}, {12, 2},
+{12, 1}, {12, 0}, {16, 5}, {16, 4}, {16, 3}, {16, 2}, {16, 1}, {16, 0},
+{ 4,12}, { 8,12}, {12,12}, {16,12}, { 4,11}, { 8,11}, {12,11}, {16,11},
+{ 4,10}, { 8,10}, {12,10}, {16,10}, { 4, 9}, { 8, 9}, {12, 9}, {16, 9},
+{ 4, 8}, { 8, 8}, {12, 8}, {16, 8}, { 4, 7}, { 8, 7}, {12, 7}, {16, 7},
+{ 4, 6}, { 8, 6}, {12, 6}, {16, 6}
+};
+
+static const AMROrder order_MODE_795[159] = {
+{ 0, 0}, { 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 1, 3},
+{ 1, 1}, { 1, 8}, { 1, 7}, { 1, 5}, { 1, 4}, { 1, 2}, { 1, 6}, { 1, 0},
+{ 2, 6}, { 2, 4}, { 2, 2}, { 2, 3}, { 2, 7}, { 2, 8}, { 2, 5}, { 7, 4},
+{12, 4}, {17, 4}, {22, 4}, { 7, 3}, {12, 3}, {17, 3}, {22, 3}, { 7, 2},
+{12, 2}, {17, 2}, {22, 2}, { 6, 3}, {11, 3}, {16, 3}, {21, 3}, { 6, 2},
+{11, 2}, {16, 2}, {21, 2}, { 3, 7}, {13, 7}, { 3, 6}, {13, 6}, { 3, 5},
+{13, 5}, { 3, 4}, {13, 4}, { 3, 3}, {13, 3}, { 8, 5}, {18, 5}, { 8, 4},
+{18, 4}, { 8, 3}, {18, 3}, { 7, 1}, {12, 1}, {17, 1}, {22, 1}, { 3, 2},
+{13, 2}, { 8, 2}, {18, 2}, { 0, 7}, { 0, 8}, { 2, 1}, { 2, 0}, { 3, 1},
+{13, 1}, { 3, 0}, {13, 0}, { 8, 1}, {18, 1}, { 8, 0}, {18, 0}, { 6, 1},
+{11, 1}, {16, 1}, {21, 1}, { 7, 0}, {12, 0}, {17, 0}, {22, 0}, { 6, 0},
+{11, 0}, {16, 0}, {21, 0}, {15, 0}, {15, 1}, {15, 2}, { 4, 1}, { 9, 1},
+{14, 1}, {19, 1}, { 4, 4}, { 9, 4}, {14, 4}, {19, 4}, { 4, 7}, { 9, 7},
+{14, 7}, {19, 7}, { 4,11}, { 9,11}, {14,11}, {19,11}, {15, 3}, {20, 0},
+{20, 1}, {20, 2}, {20, 3}, {10, 0}, {10, 1}, {10, 2}, {10, 3}, { 5, 0},
+{ 5, 1}, { 5, 2}, { 5, 3}, { 4, 0}, { 4, 2}, { 4, 3}, { 4, 5}, { 4, 8},
+{ 4,12}, { 9, 0}, { 9, 2}, { 9, 3}, { 9, 5}, { 9, 8}, { 9,12}, {14, 0},
+{14, 2}, {14, 3}, {14, 5}, {14, 8}, {14,12}, {19, 0}, {19, 2}, {19, 3},
+{19, 5}, {19, 8}, {19,12}, { 4, 6}, { 9, 6}, {14, 6}, {19, 6}, { 4,10},
+{ 9,10}, {14,10}, {19,10}, { 4, 9}, { 9, 9}, {14, 9}, {19, 9}
+};
+
+static const AMROrder order_MODE_102[204] = {
+{ 0, 0}, { 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7},
+{ 1, 0}, { 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, { 1, 5}, { 1, 6}, { 1, 7},
+{ 1, 8}, { 3, 7}, { 3, 6}, { 3, 5}, { 3, 4}, { 3, 3}, { 3, 2}, {21, 7},
+{21, 6}, {21, 5}, {21, 4}, {21, 3}, {21, 2}, {12, 4}, {12, 3}, {30, 4},
+{30, 3}, {11, 6}, {11, 3}, {11, 2}, {20, 6}, {20, 3}, {20, 2}, {29, 6},
+{29, 3}, {29, 2}, {38, 6}, {38, 3}, {38, 2}, { 3, 1}, { 3, 0}, {21, 1},
+{21, 0}, {12, 2}, {12, 1}, {30, 2}, {30, 1}, {11, 5}, {20, 5}, {29, 5},
+{38, 5}, { 2, 6}, { 2, 2}, { 2, 4}, { 2, 3}, { 2, 7}, { 2, 8}, { 2, 5},
+{ 2, 1}, { 2, 0}, { 7, 0}, { 6, 0}, { 5, 0}, { 4, 0}, {16, 0}, {15, 0},
+{14, 0}, {13, 0}, {25, 0}, {24, 0}, {23, 0}, {22, 0}, {34, 0}, {33, 0},
+{32, 0}, {31, 0}, {11, 1}, {11, 4}, {11, 0}, {20, 1}, {20, 4}, {20, 0},
+{29, 1}, {29, 4}, {29, 0}, {38, 1}, {38, 4}, {38, 0}, {12, 0}, {30, 0},
+{17, 9}, {17, 8}, {18, 8}, {18, 9}, {18, 7}, {17, 7}, {18, 5}, {17, 5},
+{17, 6}, {18, 6}, {19, 6}, {19, 5}, {18, 4}, {19, 3}, {17, 4}, {19, 4},
+{17, 3}, {18, 3}, {26, 9}, {26, 8}, {27, 8}, {27, 9}, {27, 7}, {26, 7},
+{27, 5}, {26, 5}, {26, 6}, {27, 6}, {28, 6}, {28, 5}, {27, 4}, {28, 3},
+{26, 4}, {28, 4}, {26, 3}, {27, 3}, {35, 9}, {35, 8}, {36, 8}, {36, 9},
+{36, 7}, {35, 7}, {36, 5}, {35, 5}, {35, 6}, {36, 6}, {37, 6}, {37, 5},
+{36, 4}, {37, 3}, {35, 4}, {37, 4}, {35, 3}, {36, 3}, { 8, 9}, { 8, 8},
+{ 9, 8}, { 9, 9}, { 9, 7}, { 8, 7}, { 9, 5}, { 8, 5}, { 8, 6}, { 9, 6},
+{10, 6}, {10, 5}, { 9, 4}, {10, 3}, { 8, 4}, {10, 4}, { 8, 3}, { 9, 3},
+{37, 2}, {35, 0}, {36, 0}, {37, 0}, {35, 2}, {37, 1}, {35, 1}, {36, 2},
+{36, 1}, {28, 2}, {26, 0}, {27, 0}, {28, 0}, {26, 2}, {28, 1}, {26, 1},
+{27, 2}, {27, 1}, {19, 2}, {17, 0}, {18, 0}, {19, 0}, {17, 2}, {19, 1},
+{17, 1}, {18, 2}, {18, 1}, {10, 2}, { 8, 0}, { 9, 0}, {10, 0}, { 8, 2},
+{10, 1}, { 8, 1}, { 9, 2}, { 9, 1}
+};
+
+static const AMROrder order_MODE_122[244] = {
+{ 0, 6}, { 0, 5}, { 0, 4}, { 0, 3}, { 0, 2}, { 0, 1}, { 0, 0}, { 1, 7},
+{ 1, 6}, { 1, 5}, { 1, 4}, { 1, 3}, { 1, 2}, { 1, 1}, { 1, 0}, { 2, 0},
+{ 2, 8}, { 2, 7}, { 2, 6}, { 2, 5}, { 2, 4}, { 2, 3}, { 2, 2}, { 2, 1},
+{ 3, 7}, { 3, 6}, { 3, 5}, { 3, 4}, { 3, 3}, { 5, 8}, {31, 8}, { 5, 7},
+{31, 7}, { 5, 6}, {31, 6}, { 5, 5}, {31, 5}, { 5, 4}, {31, 4}, { 5, 3},
+{31, 3}, { 5, 2}, {31, 2}, { 5, 1}, {31, 1}, { 5, 0}, {31, 0}, { 6, 3},
+{19, 3}, {32, 3}, {45, 3}, { 6, 2}, {19, 2}, {32, 2}, {45, 2}, { 6, 1},
+{19, 1}, {32, 1}, {45, 1}, {17, 4}, {30, 4}, {43, 4}, {56, 4}, {17, 3},
+{30, 3}, {43, 3}, {56, 3}, {17, 2}, {30, 2}, {43, 2}, {56, 2}, {18, 5},
+{44, 5}, {18, 4}, {44, 4}, {18, 3}, {44, 3}, {18, 2}, {44, 2}, {18, 1},
+{44, 1}, { 3, 2}, { 3, 1}, { 3, 0}, { 4, 5}, { 4, 4}, { 4, 3}, { 4, 2},
+{ 6, 0}, {19, 0}, {32, 0}, {45, 0}, {17, 1}, {30, 1}, {43, 1}, {56, 1},
+{ 7, 3}, {20, 3}, {33, 3}, {46, 3}, { 8, 3}, {21, 3}, {34, 3}, {47, 3},
+{17, 0}, {30, 0}, {43, 0}, {56, 0}, { 9, 3}, {22, 3}, {35, 3}, {48, 3},
+{10, 3}, {23, 3}, {36, 3}, {49, 3}, {11, 3}, {24, 3}, {37, 3}, {50, 3},
+{ 4, 1}, { 4, 0}, { 7, 0}, { 7, 1}, { 7, 2}, { 8, 0}, { 8, 1}, { 8, 2},
+{ 9, 0}, { 9, 1}, { 9, 2}, {10, 0}, {10, 1}, {10, 2}, {11, 0}, {11, 1},
+{11, 2}, {20, 0}, {20, 1}, {20, 2}, {21, 0}, {21, 1}, {21, 2}, {22, 0},
+{22, 1}, {22, 2}, {23, 0}, {23, 1}, {23, 2}, {24, 0}, {24, 1}, {24, 2},
+{33, 0}, {33, 1}, {33, 2}, {34, 0}, {34, 1}, {34, 2}, {35, 0}, {35, 1},
+{35, 2}, {36, 0}, {36, 1}, {36, 2}, {37, 0}, {37, 1}, {37, 2}, {46, 0},
+{46, 1}, {46, 2}, {47, 0}, {47, 1}, {47, 2}, {48, 0}, {48, 1}, {48, 2},
+{49, 0}, {49, 1}, {49, 2}, {50, 0}, {50, 1}, {50, 2}, {12, 0}, {12, 1},
+{12, 2}, {13, 0}, {13, 1}, {13, 2}, {14, 0}, {14, 1}, {14, 2}, {15, 0},
+{15, 1}, {15, 2}, {16, 0}, {16, 1}, {16, 2}, {25, 0}, {25, 1}, {25, 2},
+{26, 0}, {26, 1}, {26, 2}, {27, 0}, {27, 1}, {27, 2}, {28, 0}, {28, 1},
+{28, 2}, {29, 0}, {29, 1}, {29, 2}, {38, 0}, {38, 1}, {38, 2}, {39, 0},
+{39, 1}, {39, 2}, {40, 0}, {40, 1}, {40, 2}, {41, 0}, {41, 1}, {41, 2},
+{42, 0}, {42, 1}, {42, 2}, {51, 0}, {51, 1}, {51, 2}, {52, 0}, {52, 1},
+{52, 2}, {53, 0}, {53, 1}, {53, 2}, {54, 0}, {54, 1}, {54, 2}, {55, 0},
+{55, 1}, {55, 2}, {18, 0}, {44, 0}
+};
+
+static const AMROrder order_MODE_DTX[35] = {
+{ 0, 2}, { 0, 1}, { 0, 0}, { 1, 7}, { 1, 6}, { 1, 5}, { 1, 4}, { 1, 3},
+{ 1, 2}, { 1, 1}, { 1, 0}, { 2, 8}, { 2, 7}, { 2, 6}, { 2, 5}, { 2, 4},
+{ 2, 3}, { 2, 2}, { 2, 1}, { 2, 0}, { 3, 8}, { 3, 7}, { 3, 6}, { 3, 5},
+{ 3, 4}, { 3, 3}, { 3, 2}, { 3, 1}, { 3, 0}, { 4, 5}, { 4, 4}, { 4, 3},
+{ 4, 2}, { 4, 1}, { 4, 0}
+};
+
+
+// LSF tables
+
+static const float lsf_3_1[256][3] = {
+{ 1.46484 , 20.0195 , -31.9824 }, { 37.5977 , -13.6719 , -179.443 },
+{ 44.6777 , -15.8691 , -64.6973 }, { 2.19727 , -51.2695 , -88.1348 },
+{ 27.5879 , 175.293 , 443.604 }, { 246.582 , 296.387 , 384.033 },
+{ 209.229 , 325.439 , 555.664 }, { 201.904 , 382.813 , 471.924 },
+{ 175.049 , 485.596 , 538.574 }, { 204.590 , 286.133 , 445.068 },
+{ 176.025 , 244.141 , 525.879 }, { 69.8242 , 116.211 , 368.408 },
+{ -60.3027 , -129.639 , 56.1523 }, { 35.8887 , -20.0195 , 138.916 },
+{ 6.34766 , -43.2129 , -230.469 }, { -6.59180 , -66.6504 , 168.945 },
+{ -40.0391 , -64.4531 , -44.6777 }, { 54.6875 , 192.871 , 253.662 },
+{ 219.482 , 230.957 , 146.729 }, { 118.408 , 188.232 , 280.762 },
+{ 127.930 , 165.283 , 220.459 }, { -34.1797 , 91.5527 , 189.941 },
+{ 100.098 , 165.039 , 104.736 }, { 73.4863 , 129.395 , 246.338 },
+{ 175.537 , 157.715 , 9.27734 }, { 55.1758 , 89.5996 , 9.76563 },
+{ 35.4004 , -10.9863 , -123.291 }, { 70.8008 , 29.5410 , -29.5410 },
+{ 73.7305 , 31.0059 , 40.5273 }, { -30.2734 , -93.5059 , -233.398 },
+{ -87.4023 , -111.084 , -238.525 }, { 174.561 , 214.355 , 218.262 },
+{ 238.770 , 225.342 , 51.5137 }, { 116.455 , 66.4063 , 15.6250 },
+{ 45.8984 , -19.0430 , 4.15039 }, { -34.9121 , -15.8691 , 9.27734 },
+{ 156.982 , 143.066 , 151.611 }, { -32.7148 , -104.004 , -158.936 },
+{ 84.7168 , 133.057 , 688.477 }, { 290.039 , 665.527 , 596.191 },
+{ 34.6680 , -19.5313 , 423.584 }, { 69.0918 , 31.7383 , 112.549 },
+{ -63.9648 , -97.4121 , -279.541 }, {-100.342 , 37.8418 , 104.980 },
+{ 80.3223 , 91.5527 , 190.186 }, { 12.9395 , -55.1758 , -33.9355 },
+{ -31.4941 , -57.6172 , 410.645 }, { 69.5801 , 181.641 , 323.975 },
+{ 180.176 , 170.166 , 406.250 }, { 76.1719 , 99.8535 , 64.9414 },
+{ 79.3457 , 175.781 , 32.9590 }, { 0.244141, 53.9551 , 110.596 },
+{ 1.95313 , 49.5605 , 35.4004 }, { 72.9980 , 156.250 , 185.547 },
+{ 7.08008 , 114.258 , 155.762 }, { 25.1465 , 104.736 , 92.5293 },
+{ 102.539 , 232.910 , 227.539 }, { 323.730 , 295.410 , 307.129 },
+{ 171.875 , 247.070 , 281.250 }, { -40.5273 , -108.398 , -64.9414 },
+{ -77.1484 , -31.7383 , -91.7969 }, { 46.6309 , 281.006 , 464.844 },
+{ -58.5938 , -132.568 , -307.617 }, { -27.3438 , 65.4297 , 294.678 },
+{ 17.0898 , 259.277 , 386.475 }, { 67.8711 , 332.031 , 384.277 },
+{ -62.9883 , -66.4063 , -187.500 }, { 4.63867 , 137.451 , 546.875 },
+{ -0.732422, -64.6973 , 32.9590 }, { -72.0215 , -144.287 , -94.7266 },
+{ 34.1797 , 86.4258 , -50.2930 }, { -63.4766 , -123.047 , -194.092 },
+{-105.713 , -175.293 , -322.021 }, { 26.6113 , 80.8105 , 234.863 },
+{-104.736 , -21.2402 , 159.180 }, { -72.2656 , 104.004 , 248.779 },
+{ -58.3496 , 189.209 , 207.764 }, { 119.385 , 325.684 , 261.963 },
+{ -81.5430 , -81.0547 , 6.10352 }, { 132.568 , 294.434 , 441.162 },
+{ 79.5898 , 14.8926 , 177.490 }, { 141.113 , 207.275 , 343.018 },
+{ -50.7813 , -67.6270 , 80.3223 }, { -37.1094 , 15.6250 , 163.330 },
+{-105.957 , -165.527 , -177.490 }, {-110.840 , -17.3340 , 61.2793 },
+{ 147.705 , 117.188 , 62.0117 }, {-117.676 , 2.68555 , 243.164 },
+{ -70.5566 , 96.4355 , 118.652 }, { 176.270 , 256.104 , 351.563 },
+{ -7.32422 , -77.1484 , -191.895 }, { -25.8789 , -28.0762 , -151.123 },
+{ 210.205 , 359.863 , 344.727 }, { 257.568 , 333.496 , 289.063 },
+{ 198.242 , 302.002 , 225.830 }, { 10.2539 , -61.2793 , -140.625 },
+{ 83.4961 , 34.4238 , -110.840 }, { -41.0156 , -19.5313 , 331.787 },
+{ -83.4961 , -160.156 , -430.420 }, { 24.4141 , 200.439 , 177.002 },
+{ 241.699 , 182.373 , 195.313 }, { 81.0547 , 107.422 , 138.672 },
+{ 161.865 , 92.5293 , 208.008 }, { 27.3438 , 40.2832 , -90.0879 },
+{ 145.752 , 222.168 , 68.8477 }, { -1.95313 , 203.613 , 312.744 },
+{ -85.9375 , 139.648 , 169.678 }, { 112.793 , 548.340 , 440.918 },
+{ 84.2285 , 46.3867 , 335.449 }, { 101.563 , 223.389 , 528.809 },
+{ 41.0156 , -20.0195 , 68.3594 }, {-125.977 , -108.887 , 205.078 },
+{ 11.4746 , 130.127 , 10.7422 }, { -88.3789 , -173.584 , -279.053 },
+{ 5.37109 , 47.1191 , 359.375 }, { -20.7520 , 56.8848 , 442.627 },
+{ -15.1367 , 141.357 , 367.188 }, { 134.277 , 230.469 , 427.002 },
+{ 176.514 , 158.691 , 280.273 }, { 237.305 , 215.820 , 340.576 },
+{-103.760 , 156.982 , 0.000000}, { 244.141 , 232.422 , 268.066 },
+{ 60.7910 , 353.027 , 164.063 }, { -81.5430 , -21.2402 , 530.273 },
+{-135.254 , 459.473 , 652.344 }, { 34.1797 , 445.801 , 452.393 },
+{ 224.609 , 427.002 , 632.324 }, { 262.695 , 471.924 , 497.559 },
+{ -33.4473 , -108.154 , -379.639 }, { 309.814 , 286.621 , 114.258 },
+{-120.361 , -29.7852 , 371.338 }, {-110.107 , 252.197 , 296.387 },
+{ 117.676 , 413.818 , 272.949 }, { 198.975 , 158.447 , 93.7500 },
+{-108.887 , -168.945 , 26.1230 }, { -77.8809 , -147.705 , -28.8086 },
+{ -50.5371 , -123.291 , 128.174 }, {-114.258 , -2.92969 , 667.969 },
+{ 18.3105 , 472.168 , 318.604 }, { 214.844 , 575.684 , 553.467 },
+{ 313.721 , 384.521 , 489.258 }, { -11.7188 , -74.2188 , -289.551 },
+{-106.201 , -112.549 , -61.2793 }, { -89.3555 , -98.6328 , -133.545 },
+{ -70.5566 , -147.705 , -145.752 }, {-131.348 , -197.754 , -40.2832 },
+{ -29.2969 , 0.732422, 86.9141 }, { 156.006 , 302.979 , 366.699 },
+{ 23.4375 , 43.2129 , 183.105 }, {-106.201 , -142.822 , -286.621 },
+{ -86.9141 , 26.6113 , -19.2871 }, {-118.408 , 70.3125 , 489.502 },
+{ 2.19727 , 272.461 , 178.467 }, { 214.844 , 520.996 , 230.957 },
+{ -64.6973 , 386.963 , 260.010 }, { 282.471 , 295.410 , 205.811 },
+{-121.582 , -163.086 , 105.225 }, { 91.3086 , 78.3691 , -55.9082 },
+{ 351.563 , 512.939 , 337.158 }, { 109.619 , 112.549 , 281.982 },
+{ -25.6348 , 9.52148 , -93.7500 }, { -64.2090 , 89.5996 , 44.4336 },
+{ -90.5762 , -161.133 , 188.721 }, { -45.8984 , 281.006 , 237.061 },
+{ 325.439 , 398.438 , 350.342 }, { 188.965 , 309.326 , 298.096 },
+{-117.676 , -203.125 , -363.525 }, { -57.8613 , -51.2695 , 209.961 },
+{ 217.285 , 394.287 , 259.766 }, { 115.234 , 259.277 , 291.016 },
+{ 45.1660 , 262.939 , 241.455 }, {-138.672 , -242.188 , -416.016 },
+{-109.619 , -220.215 , -498.779 }, { -34.6680 , -92.0410 , -111.816 },
+{ -51.2695 , -135.254 , -251.221 }, { -2.68555 , 276.611 , 552.979 },
+{ -80.3223 , -164.795 , -218.018 }, { -61.0352 , 160.400 , 289.795 },
+{ 126.709 , 368.652 , 434.326 }, { 126.953 , 131.592 , 342.529 },
+{ 128.662 , 346.924 , 317.871 }, {-137.451 , -212.646 , -304.688 },
+{ -35.8887 , -113.037 , 214.600 }, { -18.5547 , 569.824 , 693.359 },
+{ 137.451 , 628.174 , 582.275 }, { 154.297 , 470.215 , 712.891 },
+{ 175.537 , 493.896 , 449.219 }, {-133.057 , -176.514 , 270.508 },
+{ 31.4941 , -30.5176 , 215.820 }, { 345.947 , 398.438 , 225.830 },
+{ -22.9492 , 382.324 , 427.490 }, { -83.2520 , 374.268 , 378.662 },
+{ 144.287 , 96.4355 , -66.8945 }, { -18.5547 , 239.502 , 691.162 },
+{ 37.3535 , 728.760 , 450.195 }, { 251.953 , 626.221 , 671.143 },
+{ 368.164 , 691.406 , 458.740 }, { 193.115 , 292.725 , 131.348 },
+{ -46.3867 , -110.596 , 363.525 }, { -67.8711 , -133.789 , 282.715 },
+{ -59.8145 , 473.877 , 499.023 }, { 250.000 , 380.859 , 402.832 },
+{ 125.000 , 61.7676 , 113.770 }, { -15.1367 , -78.8574 , 281.006 },
+{-115.479 , -91.7969 , 123.779 }, {-105.713 , 336.914 , 527.832 },
+{ 219.482 , 474.365 , 352.783 }, { 32.7148 , 171.875 , 107.422 },
+{ 112.305 , 128.174 , -6.83594 }, {-109.863 , 68.1152 , 326.660 },
+{ 0.000000, 237.061 , 61.5234 }, {-108.643 , -153.076 , -241.943 },
+{ -84.9609 , -146.973 , -347.656 }, { 97.1680 , 173.828 , 404.297 },
+{ -26.1230 , 76.6602 , -43.4570 }, { 22.7051 , 543.457 , 546.387 },
+{ 126.465 , 207.275 , 160.156 }, {-112.793 , -173.584 , -109.131 },
+{ 42.4805 , -8.30078 , 290.771 }, { -29.0527 , 10.2539 , 245.361 },
+{ -90.8203 , 66.8945 , 185.059 }, { 252.930 , 574.219 , 448.730 },
+{ 164.795 , 420.898 , 365.723 }, { 104.980 , 313.965 , 520.752 },
+{ -31.4941 , -107.178 , 0.000000}, { -91.0645 , 195.313 , 523.438 },
+{ 1.46484 , 387.451 , 604.980 }, { 116.699 , 145.508 , 519.531 },
+{-104.492 , -179.688 , 367.432 }, { 93.9941 , 43.4570 , 239.258 },
+{ 33.9355 , 109.619 , 299.072 }, {-128.418 , -205.566 , -239.746 },
+{ 35.4004 , 379.395 , 303.223 }, { 152.100 , 353.516 , 160.156 },
+{ 85.2051 , 248.047 , 361.816 }, { 7.56836 , -68.3594 , 101.318 },
+{ -77.1484 , 176.758 , 400.635 }, { 87.8906 , 258.301 , 135.742 },
+{-106.445 , -87.4023 , 293.213 }, { -86.6699 , 274.170 , 473.389 },
+{ 97.9004 , 386.719 , 548.828 }, {-128.662 , -247.070 , 86.6699 },
+{ 56.8848 , 58.1055 , 545.166 }, {-134.277 , -218.994 , -156.006 },
+{ -89.1113 , -122.314 , 477.783 }, { 94.9707 , 454.102 , 395.752 },
+{ 39.5508 , 276.367 , 308.594 }, { -57.8613 , 286.621 , 339.355 },
+{-156.250 , -100.342 , 28.3203 }, { -55.6641 , 413.574 , 561.035 },
+{ 400.146 , 533.691 , 553.467 }, { 137.207 , 310.791 , 648.926 },
+{ 78.8574 , 82.5195 , 433.105 }, { 141.113 , 270.264 , 208.008 },
+{ 5.37109 , 145.020 , 228.027 }, { -34.9121 , 175.293 , 108.887 },
+};
+
+static const float lsf_3_2[512][3] = {
+{ 12.2070 , 17.3340 , -2.19727 }, { -82.5195 , -170.410 , -343.506 },
+{ 24.9023 , -33.6914 , -200.195 }, { -75.6836 , -114.502 , -280.029 },
+{ 101.074 , 16.3574 , -65.1855 }, { 258.789 , 198.730 , 351.807 },
+{ 377.930 , 332.031 , 310.547 }, { 428.223 , 462.646 , 405.518 },
+{ 492.920 , 520.752 , 444.336 }, { 441.406 , 565.918 , 450.439 },
+{ 157.227 , -22.7051 , 110.840 }, { 209.473 , 80.3223 , -33.2031 },
+{ 119.385 , -62.9883 , -31.2500 }, { -48.3398 , -181.885 , -10.0098 },
+{ -12.6953 , -64.6973 , -240.479 }, { 84.4727 , 33.4473 , 116.943 },
+{-425.049 , -182.617 , -166.992 }, {-283.936 , -421.143 , -89.5996 },
+{-218.506 , -279.541 , -191.406 }, {-119.141 , -230.957 , -236.328 },
+{ -20.7520 , -95.2148 , -177.002 }, { 52.4902 , -83.0078 , -41.7480 },
+{ 249.023 , 223.633 , 480.713 }, { 137.695 , 43.7012 , 182.129 },
+{ 161.621 , 238.525 , 423.340 }, { 216.553 , 151.855 , 223.145 },
+{ 229.248 , 208.984 , 284.424 }, { 75.4395 , 167.969 , 196.045 },
+{ 223.877 , 39.3066 , 139.160 }, { 28.8086 , -4.88281 , -69.0918 },
+{-199.219 , -10.2539 , 49.8047 }, {-299.805 , -79.3457 , -112.793 },
+{-235.107 , -49.3164 , -34.9121 }, {-241.211 , -118.164 , -88.1348 },
+{-171.387 , -238.770 , -116.455 }, { -73.7305 , -192.871 , -290.039 },
+{ -24.4141 , -191.895 , -265.625 }, {-257.324 , -231.201 , -411.133 },
+{ -49.3164 , -205.811 , -190.918 }, {-253.662 , -336.426 , -219.971 },
+{-152.344 , -26.8555 , -20.7520 }, { 86.9141 , 52.0020 , -2.44141 },
+{-120.361 , 88.8672 , 188.965 }, { 103.760 , 200.684 , 116.943 },
+{ -20.2637 , 135.986 , 126.953 }, {-242.188 , -380.859 , -139.648 },
+{-147.217 , -180.908 , -6.34766 }, {-122.559 , -155.762 , -220.459 },
+{ 51.0254 , 74.7070 , 35.8887 }, { -77.1484 , -144.775 , -145.508 },
+{ -20.7520 , -51.5137 , -54.9316 }, {-224.121 , -129.150 , 28.5645 },
+{ 56.8848 , -107.178 , -180.176 }, { 268.799 , 183.350 , 154.541 },
+{ 355.713 , 418.945 , 368.896 }, { 430.908 , 355.713 , 222.168 },
+{ 273.926 , 282.227 , 207.275 }, { 330.566 , 211.914 , 114.746 },
+{-212.646 , -280.762 , -438.477 }, {-212.646 , -210.205 , -242.188 },
+{ -28.8086 , 37.8418 , 51.7578 }, {-256.592 , -207.275 , -147.949 },
+{-272.705 , -451.416 , -671.387 }, {-248.779 , -348.389 , -456.299 },
+{ 90.3320 , -44.9219 , -101.074 }, { 234.131 , 120.361 , 25.3906 },
+{ 233.887 , 253.662 , 132.568 }, { 37.5977 , 159.424 , 49.0723 },
+{ 304.932 , 123.779 , 36.6211 }, { 161.865 , 122.803 , 56.1523 },
+{ 152.100 , 189.697 , 164.795 }, { 160.889 , 21.4844 , -26.8555 },
+{ 205.811 , 59.5703 , 54.6875 }, { 93.2617 , 132.080 , 73.7305 },
+{ 176.758 , 105.713 , 162.598 }, { 284.668 , 179.199 , 83.2520 },
+{ -33.6914 , 4.88281 , -96.9238 }, {-288.818 , -103.516 , -11.2305 },
+{ -78.3691 , -85.9375 , -30.2734 }, { 325.439 , 249.268 , 263.672 },
+{ 63.9648 , 89.3555 , 176.514 }, { 225.098 , 69.0918 , -134.521 },
+{ 7.56836 , -155.273 , -149.170 }, {-168.213 , -170.166 , -101.318 },
+{-232.422 , -190.186 , -49.0723 }, {-324.463 , -145.996 , -87.6465 },
+{-232.666 , -313.721 , 40.5273 }, { 120.361 , 74.4629 , 53.9551 },
+{ 206.543 , 171.631 , 148.926 }, { 205.078 , 228.516 , 188.965 },
+{-176.514 , -323.242 , -307.861 }, { -87.1582 , -250.244 , -338.867 },
+{-267.578 , -335.938 , -89.1113 }, {-345.703 , -459.229 , -148.438 },
+{-438.965 , -421.631 , -164.551 }, {-133.057 , -286.377 , -171.631 },
+{ 165.527 , 191.895 , 36.1328 }, { -30.0293 , 169.922 , 314.453 },
+{ 157.227 , 85.4492 , -2.44141 }, { 101.074 , 149.902 , 3.66211 },
+{ 33.4473 , 83.9844 , -51.5137 }, {-198.730 , -369.141 , -199.951 },
+{ -95.4590 , -227.051 , -143.555 }, { 11.4746 , -144.287 , -219.238 },
+{-221.924 , -267.822 , -39.7949 }, {-310.547 , -284.912 , -38.3301 },
+{-357.422 , -372.314 , -94.9707 }, {-311.035 , -290.039 , -152.344 },
+{ 163.818 , 52.0020 , 110.840 }, { 30.2734 , -66.8945 , -128.174 },
+{-177.979 , -121.094 , -37.1094 }, {-328.125 , 29.7852 , 32.9590 },
+{-709.229 , -143.799 , -96.1914 }, {-421.875 , 107.666 , -12.2070 },
+{ 360.352 , 220.703 , 192.139 }, { 77.1484 , 57.6172 , -107.422 },
+{ -84.7168 , 52.9785 , 100.830 }, {-222.412 , -223.877 , 29.5410 },
+{-111.084 , -227.539 , 49.3164 }, { -22.4609 , -113.525 , -91.5527 },
+{ 119.141 , 95.2148 , 115.723 }, { 213.867 , 177.979 , 77.1484 },
+{-443.115 , -320.313 , -163.330 }, { 21.2402 , 234.863 , 105.469 },
+{ 137.451 , -60.7910 , -258.301 }, { 61.0352 , 69.5801 , 269.775 },
+{ 278.564 , 104.248 , 169.922 }, {-253.418 , -406.250 , -386.230 },
+{-231.445 , 84.4727 , 39.0625 }, { -75.4395 , -66.4063 , -209.473 },
+{ 163.574 , 152.344 , 305.176 }, {-230.469 , -99.6094 , -162.598 },
+{-147.949 , -78.1250 , -93.7500 }, {-120.117 , 56.1523 , 15.8691 },
+{ 81.5430 , -12.2070 , -3.90625 }, { -3.90625 , -168.457 , -341.064 },
+{ 437.256 , 418.945 , 341.553 }, { 604.980 , 503.662 , 342.773 },
+{ 303.955 , 359.131 , 348.145 }, { -93.2617 , -253.174 , -0.488281},
+{ 42.2363 , -97.1680 , 279.541 }, { 364.014 , 494.141 , 439.697 },
+{ 188.477 , 311.035 , 367.676 }, { 348.877 , 423.584 , 488.525 },
+{ 263.428 , 297.363 , 310.791 }, {-281.738 , -451.904 , -324.463 },
+{-197.266 , -276.611 , -267.578 }, {-110.107 , -252.197 , -420.410 },
+{ 15.8691 , 141.113 , -20.5078 }, {-360.352 , -594.238 , -434.082 },
+{-186.768 , -333.496 , -120.605 }, { -53.2227 , -145.020 , -227.295 },
+{ 82.2754 , -57.6172 , 137.207 }, { 575.439 , 649.902 , 473.145 },
+{ 363.525 , 311.523 , 213.379 }, { 46.1426 , 87.4023 , 91.3086 },
+{-370.850 , -556.885 , -572.754 }, {-236.084 , -310.303 , -511.475 },
+{-153.320 , -290.039 , -376.465 }, { 405.518 , 254.639 , 133.301 },
+{ 137.939 , 259.033 , 178.711 }, { -15.6250 , -204.102 , -105.957 },
+{-106.445 , -23.4375 , 49.5605 }, { 263.184 , 296.875 , 399.414 },
+{ 221.436 , 374.512 , 240.723 }, { 79.5898 , 235.596 , 206.299 },
+{ 34.6680 , -20.5078 , 48.0957 }, { 114.746 , 580.811 , 383.301 },
+{ 276.611 , 114.746 , 296.387 }, { 96.4355 , 335.938 , 292.969 },
+{ 274.658 , 254.395 , 84.9609 }, {-132.568 , -301.270 , -91.7969 },
+{ -52.4902 , -44.1895 , 117.432 }, {-475.342 , -395.752 , -51.2695 },
+{-183.105 , -289.307 , 95.2148 }, { 7.08008 , -97.4121 , 6.59180 },
+{ 200.195 , 301.758 , 184.326 }, { 169.678 , 239.014 , 99.8535 },
+{ -42.4805 , 292.236 , 252.686 }, { 222.656 , 331.055 , 450.684 },
+{-242.188 , -350.830 , 118.164 }, {-362.549 , -415.039 , 50.7813 },
+{-100.586 , 293.945 , 349.609 }, { -66.1621 , 218.750 , 279.297 },
+{-101.563 , 433.838 , 350.098 }, {-414.063 , -645.508 , -49.8047 },
+{-436.768 , -378.662 , 252.197 }, {-404.297 , -380.615 , 318.115 },
+{-305.908 , -387.939 , 263.916 }, {-163.330 , -267.334 , -16.1133 },
+{-166.504 , 78.1250 , -84.2285 }, { 160.889 , 74.4629 , 260.986 },
+{-315.430 , -196.289 , -4.63867 }, {-399.170 , -315.186 , 7.08008 },
+{-410.889 , -121.338 , 17.3340 }, { -70.0684 , -1.70898 , -24.4141 },
+{-120.605 , -234.863 , -57.8613 }, { 208.008 , 459.229 , 424.805 },
+{-297.119 , -338.623 , 55.4199 }, {-161.133 , 73.7305 , 91.0645 },
+{ 23.4375 , 265.381 , 306.885 }, {-262.207 , -407.471 , 39.0625 },
+{ 118.408 , 506.836 , 438.965 }, {-228.027 , -53.7109 , 134.766 },
+{-145.508 , -149.414 , 57.8613 }, { 82.0313 , 419.922 , 214.600 },
+{ 156.982 , 153.564 , 105.957 }, { 309.326 , 127.441 , 398.682 },
+{ 3.66211 , 59.5703 , -107.666 }, { 360.107 , 175.049 , 44.9219 },
+{ 444.092 , 388.184 , 417.236 }, { 241.211 , 63.7207 , 228.760 },
+{ 510.986 , 572.510 , 371.094 }, { 522.217 , 453.613 , 392.090 },
+{-140.869 , -141.357 , -293.701 }, {-233.398 , 32.9590 , -119.141 },
+{-113.281 , 12.4512 , -82.5195 }, {-153.564 , -84.9609 , -176.514 },
+{ 279.785 , 506.104 , 352.051 }, { 535.156 , 357.910 , 222.412 },
+{-352.539 , -383.789 , -556.152 }, { 341.797 , 173.340 , 316.650 },
+{ 325.928 , 154.541 , 226.563 }, { 350.098 , 535.645 , 633.301 },
+{ 591.309 , 538.086 , 459.229 }, { 239.746 , 547.363 , 452.637 },
+{ 92.7734 , 193.359 , 279.541 }, { -15.3809 , -131.592 , 101.074 },
+{ -61.5234 , -235.352 , -76.6602 }, {-307.861 , -166.748 , -190.430 },
+{-202.881 , -128.418 , -245.361 }, {-406.738 , -277.100 , -103.516 },
+{-393.311 , -110.352 , -72.9980 }, { 309.570 , 255.859 , 156.738 },
+{ 280.029 , 208.252 , 208.984 }, {-164.795 , -82.0313 , 33.9355 },
+{ 553.711 , 327.881 , 346.191 }, { 7.08008 , 187.500 , 194.580 },
+{-298.828 , 103.271 , 137.695 }, {-321.777 , -264.160 , 59.8145 },
+{-317.871 , -198.242 , 139.893 }, {-316.895 , -394.775 , 157.715 },
+{-236.328 , 203.613 , 176.514 }, { 242.432 , 403.320 , 494.873 },
+{ -46.6309 , -199.463 , 105.469 }, { 161.621 , 14.6484 , 48.3398 },
+{ 152.832 , 243.408 , 324.707 }, { 402.344 , 479.248 , 314.697 },
+{-389.893 , -22.7051 , -10.9863 }, {-265.625 , 9.03320 , -20.5078 },
+{ 403.564 , 636.475 , 570.557 }, { 260.010 , 498.047 , 580.322 },
+{ 278.076 , 567.871 , 517.090 }, { 209.717 , 87.1582 , 368.652 },
+{ 162.109 , 299.561 , 268.311 }, { 116.943 , 332.031 , 222.656 },
+{ 463.135 , 428.223 , 492.920 }, { 285.156 , 466.064 , 435.547 },
+{ 97.4121 , 8.30078 , 62.5000 }, {-144.775 , -74.2188 , -257.080 },
+{ 133.545 , 413.574 , 343.506 }, { 157.959 , -24.1699 , -83.2520 },
+{ 364.258 , 402.100 , 290.527 }, { 9.27734 , -157.227 , -51.7578 },
+{ 96.4355 , 206.543 , 54.1992 }, {-171.875 , -186.768 , -174.805 },
+{-176.758 , -479.492 , -684.570 }, { -36.6211 , 71.0449 , -20.0195 },
+{ 301.025 , 356.201 , 245.850 }, { -34.1797 , -37.8418 , 37.3535 },
+{ 107.178 , 72.5098 , 382.813 }, {-373.291 , -100.098 , -155.273 },
+{ 375.000 , 111.084 , -57.8613 }, {-324.219 , -33.9355 , -63.4766 },
+{ 129.639 , 135.254 , 211.914 }, { 65.6738 , 308.594 , 147.949 },
+{ -56.8848 , 215.576 , 113.037 }, { 181.152 , 146.484 , -29.2969 },
+{ -17.8223 , 102.783 , 51.7578 }, {-107.178 , -14.1602 , 196.289 },
+{-313.965 , -302.979 , 177.734 }, { 71.7773 , -119.629 , 12.2070 },
+{-144.287 , -220.947 , -306.152 }, { 10.2539 , -167.725 , 35.8887 },
+{ -6.10352 , 66.6504 , 145.508 }, { -75.9277 , 296.143 , 146.729 },
+{-184.082 , 207.275 , 142.578 }, { 104.736 , 148.193 , 143.311 },
+{-146.973 , -40.5273 , 112.549 }, {-194.336 , -200.928 , 189.697 },
+{ 336.914 , 222.168 , 428.467 }, { 29.0527 , 345.947 , 237.305 },
+{ -53.4668 , -214.844 , -389.648 }, {-256.104 , -246.582 , 106.934 },
+{-174.072 , -336.670 , 19.0430 }, { 0.000000, -109.131 , -287.842 },
+{-277.344 , -322.021 , -384.033 }, { 548.828 , 431.396 , 319.580 },
+{ 230.957 , 386.475 , 349.609 }, { 280.762 , 117.676 , 106.445 },
+{-114.502 , -270.508 , 150.879 }, {-109.131 , -235.840 , 265.625 },
+{-305.664 , -369.873 , -27.8320 }, {-269.531 , -490.234 , -141.357 },
+{ 51.2695 , 149.658 , 121.338 }, {-482.178 , -350.830 , 156.738 },
+{-309.814 , -208.984 , 246.826 }, {-401.855 , -289.307 , 259.521 },
+{-379.639 , -164.063 , 293.945 }, {-413.086 , -271.973 , 152.100 },
+{-239.014 , -323.730 , -311.768 }, { 131.592 , -35.8887 , 218.262 },
+{-330.566 , -218.994 , -105.957 }, { 216.797 , 115.967 , 104.492 },
+{ 37.3535 , -93.7500 , 82.5195 }, {-364.258 , -124.756 , 87.6465 },
+{-237.793 , -272.217 , -114.746 }, { 25.6348 , -134.277 , 165.283 },
+{-228.760 , -279.541 , 214.111 }, { 92.7734 , -63.4766 , 51.2695 },
+{ 411.377 , 225.586 , 306.641 }, { 433.350 , 290.527 , 267.334 },
+{ 346.436 , 154.053 , 130.127 }, { 153.076 , 72.9980 , -84.7168 },
+{-100.342 , -130.371 , 157.959 }, {-158.691 , 7.08008 , -145.264 },
+{ -92.2852 , -333.740 , 381.592 }, { 342.285 , 273.682 , 357.666 },
+{ 265.869 , 344.238 , 158.203 }, {-511.719 , -266.113 , -1.46484 },
+{ 75.9277 , -47.3633 , -212.158 }, {-156.006 , -202.881 , 101.563 },
+{-283.691 , -298.828 , 329.346 }, {-304.443 , -229.736 , 442.627 },
+{-535.400 , -485.107 , 110.596 }, {-151.123 , -333.740 , -233.398 },
+{-392.090 , -481.445 , -367.920 }, {-286.865 , -258.057 , -269.531 },
+{ -92.0410 , 146.729 , 49.0723 }, { 458.008 , 201.416 , 91.3086 },
+{-104.980 , -322.998 , 7.08008 }, {-341.064 , -304.932 , -324.951 },
+{-245.850 , -367.188 , 234.375 }, {-342.041 , -490.479 , 48.0957 },
+{-336.670 , -475.830 , -57.6172 }, {-262.939 , 30.0293 , 103.027 },
+{ 150.146 , 309.814 , 133.301 }, { -74.7070 , 372.559 , 220.703 },
+{ 291.504 , 436.523 , 287.354 }, {-152.832 , -215.820 , -372.559 },
+{ 48.5840 , 187.012 , 367.188 }, {-260.010 , 210.449 , 48.0957 },
+{-252.441 , -432.861 , -216.553 }, {-195.313 , 35.4004 , 146.240 },
+{-276.855 , -126.709 , 152.832 }, {-294.189 , -470.215 , 122.070 },
+{-222.168 , -254.150 , -340.576 }, {-360.352 , -382.568 , -236.572 },
+{-127.686 , 205.566 , 8.30078 }, { 437.988 , 157.715 , 210.449 },
+{-294.678 , -460.938 , -244.629 }, { -19.0430 , -2.19727 , -164.063 },
+{ 254.883 , 185.303 , 19.5313 }, {-146.484 , 278.076 , 248.779 },
+{ 13.9160 , 488.281 , 347.168 }, {-203.369 , 345.215 , 273.682 },
+{-293.457 , 397.949 , 307.617 }, {-112.549 , 346.680 , 303.711 },
+{ 375.244 , 238.037 , 61.7676 }, { -69.0918 , 79.1016 , -87.6465 },
+{ 146.240 , -47.6074 , 25.8789 }, { 143.555 , 15.1367 , -143.311 },
+{-184.814 , 157.471 , 50.0488 }, { 12.4512 , 293.213 , 185.059 },
+{-295.166 , 164.307 , -95.2148 }, {-152.344 , 385.986 , 229.736 },
+{ -36.8652 , 249.756 , 179.443 }, { 688.477 , 317.627 , 168.457 },
+{ -73.7305 , 127.930 , -24.1699 }, {-219.727 , -387.695 , -290.283 },
+{ 264.648 , 61.2793 , 58.1055 }, { 491.699 , 437.500 , 246.582 },
+{ 303.955 , 398.682 , 425.049 }, {-299.561 , -375.977 , -294.922 },
+{-151.611 , 111.328 , -26.6113 }, { 9.76563 , -15.8691 , 192.383 },
+{-196.533 , -170.654 , -329.590 }, {-142.334 , 220.703 , 203.125 },
+{-195.557 , 129.883 , 145.020 }, { 481.445 , 343.750 , 329.834 },
+{-287.354 , -458.984 , -516.113 }, {-188.721 , 138.672 , 231.445 },
+{-247.803 , 263.428 , 307.617 }, {-271.240 , 117.676 , -31.7383 },
+{ 434.082 , 254.883 , 190.430 }, {-364.014 , 59.8145 , 222.656 },
+{ -77.1484 , -278.564 , -223.877 }, {-130.859 , -352.051 , -572.754 },
+{-191.650 , -377.441 , -485.352 }, {-489.014 , 62.7441 , 221.924 },
+{-451.416 , -154.541 , -295.166 }, {-375.488 , -468.262 , -257.324 },
+{ 392.090 , 546.631 , 384.766 }, {-138.428 , -366.211 , -376.953 },
+{-312.256 , 47.6074 , 334.229 }, {-199.463 , 71.5332 , 297.607 },
+{-128.174 , 153.809 , 292.236 }, {-414.551 , -592.041 , -449.219 },
+{ -73.9746 , 178.467 , 182.373 }, {-285.400 , -61.2793 , 65.6738 },
+{-231.934 , -18.3105 , 411.133 }, {-288.574 , -110.596 , 245.361 },
+{-390.381 , 142.822 , 92.2852 }, {-506.592 , -139.404 , -104.248 },
+{-129.150 , -282.959 , -285.889 }, { -69.0918 , -50.0488 , -137.695 },
+{-194.336 , 304.199 , 175.049 }, { 555.908 , 226.318 , 131.592 },
+{-110.840 , 136.475 , 107.422 }, {-175.049 , 356.445 , 394.287 },
+{-251.465 , 256.836 , 393.066 }, {-285.400 , -33.6914 , 206.787 },
+{ 55.1758 , 9.52148 , -149.414 }, {-305.420 , -25.8789 , -177.979 },
+{-158.936 , 236.328 , 317.871 }, {-174.316 , -155.273 , 421.631 },
+{ 86.1816 , 260.986 , 100.098 }, {-194.824 , -38.0859 , 268.311 },
+{-140.137 , 224.121 , 108.887 }, {-319.824 , 247.070 , 113.770 },
+{ 343.750 , 388.428 , 186.768 }, { 348.877 , 336.914 , 428.955 },
+{ 475.830 , 477.539 , 580.566 }, { 385.254 , 499.756 , 524.414 },
+{ 223.633 , 23.9258 , -1.70898 }, { 462.158 , 346.191 , 522.705 },
+{ 84.9609 , 343.018 , 385.498 }, { 37.1094 , 276.855 , 439.697 },
+{ -65.1855 , 37.5977 , 340.576 }, {-284.668 , 114.502 , 257.324 },
+{-278.809 , -98.8770 , -261.963 }, {-327.393 , -552.734 , -385.986 },
+{ -88.8672 , 212.158 , 416.504 }, {-283.691 , 134.033 , 378.418 },
+{-299.072 , -471.680 , -406.738 }, {-362.549 , -482.666 , -501.709 },
+{-421.631 , -221.191 , -23.9258 }, {-463.135 , 56.8848 , 364.258 },
+{ 217.773 , 26.3672 , -80.8105 }, {-421.875 , -285.645 , -415.039 },
+{-258.789 , 483.398 , 437.012 }, {-261.230 , -425.049 , -466.064 },
+{ -2.68555 , 375.732 , 321.533 }, {-390.625 , 22.9492 , 121.338 },
+{ 102.783 , 108.154 , -48.0957 }, {-385.254 , -85.2051 , -242.676 },
+{-146.240 , -131.592 , 278.320 }, {-235.596 , -346.436 , -31.4941 },
+{-327.393 , 42.7246 , -109.131 }, { -91.5527 , 320.068 , 501.709 },
+{ -90.5762 , -158.691 , -74.9512 }, {-261.963 , 147.705 , 89.1113 },
+{-502.197 , -27.5879 , 104.980 }, { 159.180 , 223.145 , 236.084 },
+{-247.070 , -387.207 , -567.139 }, { 367.432 , 304.688 , 136.475 },
+{ 63.9648 , -118.652 , -97.9004 }, {-421.631 , 327.637 , 377.441 },
+{ 12.2070 , 13.6719 , 105.469 }, { -80.5664 , 29.0527 , -147.461 },
+{-370.361 , -263.672 , -197.754 }, { 230.957 , 275.146 , 257.568 },
+{-341.797 , -415.771 , -417.969 }, {-310.059 , -171.875 , -321.533 },
+{ 197.021 , 444.580 , 279.053 }, { 673.828 , 392.090 , 530.029 },
+{ 273.438 , 99.8535 , -36.6211 }, { -35.8887 , 98.6328 , 234.131 },
+{ 595.459 , 466.553 , 534.424 }, {-221.191 , -34.4238 , -211.426 },
+{-220.703 , -34.6680 , -111.816 }, {-135.986 , -172.852 , -409.912 },
+{-202.637 , -349.365 , -386.475 }, {-449.707 , -328.613 , -265.137 },
+{-391.602 , -66.4063 , 223.389 }, {-291.992 , 188.477 , 257.813 },
+{-155.762 , -301.270 , -463.135 }, {-122.070 , -19.7754 , -200.684 },
+{-314.697 , -393.799 , -179.443 }, { -28.5645 , 191.650 , 41.0156 },
+{-266.113 , 276.611 , 225.098 }, {-267.578 , -182.129 , 337.891 },
+{ 70.0684 , -133.545 , -259.521 }, {-335.938 , -537.354 , -293.945 },
+{-531.250 , -383.301 , -428.955 }, {-368.896 , -547.119 , -188.232 },
+{-424.072 , 268.311 , 202.637 }, {-387.695 , 176.758 , 303.467 },
+{-376.465 , 169.189 , 196.533 }, {-412.598 , -58.5938 , 406.494 },
+{-415.039 , -0.976563, -163.086 }, { 524.658 , 199.219 , 254.395 },
+{-199.707 , -449.463 , 5.37109 }, {-186.523 , -123.779 , 109.619 },
+{-281.006 , -150.635 , 70.5566 }, {-205.811 , -389.648 , -58.5938 },
+{ 121.582 , -57.1289 , -160.400 }, {-183.594 , 117.188 , 409.668 },
+{ -77.8809 , -117.432 , 47.1191 }, {-197.998 , 41.7480 , -29.0527 },
+{-519.531 , -49.3164 , -207.031 }, { 419.189 , 278.320 , 415.039 },
+};
+
+static const float lsf_3_3[512][4] = {
+{ 16.3574 , -4.15039 , 16.1133 , -2.92969 }, {-412.598 , -141.846 , -25.3906 , -66.4063 },
+{-262.695 , -289.551 , -450.439 , -91.7969 }, {-278.320 , -226.074 , -102.539 , -14.1602 },
+{ -63.2324 , -160.156 , -276.855 , -135.010 }, { 436.523 , 299.561 , 111.084 , 31.4941 },
+{ 112.793 , 107.666 , -58.5938 , -128.906 }, { 205.078 , 125.488 , 31.7383 , -18.3105 },
+{ 271.973 , 152.100 , 37.3535 , 52.7344 }, { 260.742 , 137.695 , -1.46484 , -67.3828 },
+{ 273.193 , 177.490 , 46.3867 , -16.6016 }, { 171.875 , 74.7070 , 29.0527 , -64.4531 },
+{ 80.3223 , 14.8926 , -24.4141 , 38.0859 }, { 88.8672 , 30.0293 , 44.6777 , -50.7813 },
+{ -41.7480 , -30.0293 , 53.7109 , -15.8691 }, { -74.7070 , -15.1367 , 98.1445 , 4.15039 },
+{-161.133 , -229.004 , -64.9414 , 0.000000}, { 93.9941 , 57.3730 , 67.3828 , 69.5801 },
+{ 78.1250 , 65.4297 , -82.0313 , -48.8281 }, {-176.758 , 4.15039 , -20.5078 , 93.0176 },
+{-132.813 , 104.736 , 120.605 , 126.709 }, { -28.5645 , 70.3125 , 74.2188 , 80.3223 },
+{ 156.982 , 38.3301 , 171.143 , 124.023 }, { 292.969 , 152.588 , 194.336 , 148.438 },
+{ 243.652 , 102.783 , 120.117 , 154.297 }, { 293.945 , 190.430 , 108.887 , 32.2266 },
+{ 306.885 , 206.055 , 133.545 , 109.619 }, { 202.393 , 160.645 , 132.080 , 114.746 },
+{ 276.367 , 307.129 , 224.121 , 156.006 }, { 133.545 , 12.4512 , 103.271 , 68.1152 },
+{ 2.19727 , 95.7031 , 20.2637 , 22.9492 }, { 132.324 , 132.568 , 55.9082 , -35.8887 },
+{ -48.3398 , 31.4941 , 47.3633 , -45.1660 }, {-210.693 , -322.510 , -73.7305 , 7.32422 },
+{-145.752 , -153.564 , -4.63867 , 27.8320 }, {-219.727 , -263.916 , 113.770 , 86.1816 },
+{-362.061 , -384.033 , 3.66211 , -34.9121 }, {-416.992 , -502.686 , -183.350 , 47.8516 },
+{-458.008 , -504.639 , -156.738 , -62.9883 }, {-570.068 , -358.887 , -109.863 , -137.695 },
+{-142.578 , -45.4102 , -212.891 , -101.074 }, {-440.674 , -241.211 , -274.658 , -319.824 },
+{-177.246 , -275.635 , 6.83594 , 41.2598 }, {-253.662 , -210.938 , -175.293 , -60.0586 },
+{ 118.164 , 8.78906 , -56.8848 , -11.9629 }, { 64.6973 , 16.3574 , 70.5566 , 114.014 },
+{ 43.4570 , 132.568 , 197.754 , 131.836 }, { 20.5078 , 68.8477 , 164.063 , 171.631 },
+{-238.037 , -189.697 , 31.4941 , 70.0684 }, {-229.004 , -55.4199 , 233.154 , 145.264 },
+{-394.775 , -70.5566 , 204.102 , 158.447 }, {-450.928 , -52.4902 , 270.020 , 175.293 },
+{-496.582 , -264.893 , 158.691 , 107.422 }, {-512.939 , -129.150 , 221.436 , 140.381 },
+{-490.967 , -82.0313 , 163.574 , 49.8047 }, {-583.252 , -168.945 , 87.8906 , 33.4473 },
+{-526.367 , -538.086 , -2.19727 , 68.3594 }, { -64.9414 , 29.0527 , 9.52148 , 47.1191 },
+{ 19.0430 , -14.4043 , -29.2969 , 55.1758 }, {-238.037 , -209.473 , -190.674 , -267.334 },
+{-151.123 , -100.830 , -110.107 , -205.566 }, {-296.875 , -322.510 , -198.486 , -215.576 },
+{-335.938 , -394.287 , -96.1914 , -104.492 }, {-179.932 , -271.729 , -134.033 , -192.871 },
+{-214.844 , -238.037 , -236.084 , -156.738 }, {-240.479 , -216.309 , -310.791 , -332.275 },
+{-115.479 , -196.289 , -342.041 , -343.506 }, { 39.0625 , -64.6973 , -224.365 , -67.1387 },
+{ -60.5469 , -61.0352 , -175.293 , -92.7734 }, { 23.6816 , -25.1465 , -91.5527 , -55.9082 },
+{-101.318 , -47.1191 , -32.9590 , -135.498 }, { 153.320 , 88.1348 , 29.0527 , 52.7344 },
+{ 141.357 , 88.8672 , 95.4590 , 51.0254 }, { 154.785 , 127.441 , -37.5977 , -36.1328 },
+{ 128.418 , 94.9707 , 41.5039 , 8.05664 }, { 25.6348 , 65.1855 , 15.6250 , 92.7734 },
+{-366.943 , -244.141 , -7.32422 , -90.0879 }, {-261.230 , 14.1602 , 157.959 , 54.4434 },
+{-371.094 , -71.0449 , 151.611 , 74.9512 }, {-373.779 , 38.0859 , 186.035 , 98.6328 },
+{-495.361 , 34.4238 , 179.199 , 121.826 }, {-451.416 , -158.691 , 74.7070 , 125.000 },
+{ -45.6543 , -25.3906 , -14.4043 , 106.934 }, { 32.7148 , -56.1523 , 38.0859 , -45.4102 },
+{ -14.8926 , -63.4766 , -3.90625 , 2.44141 }, {-138.916 , -0.732422, -102.783 , -72.5098 },
+{-421.143 , -127.197 , -84.4727 , 43.4570 }, {-332.520 , -14.4043 , -10.7422 , 38.3301 },
+{-523.926 , -112.549 , -114.746 , -85.2051 }, {-529.785 , -0.244141, -90.0879 , -29.5410 },
+{-385.498 , -91.0645 , -219.727 , -247.803 }, {-272.705 , -144.287 , -149.658 , -191.406 },
+{-136.963 , 29.7852 , -18.3105 , -109.619 }, { -0.976563, -41.7480 , -30.0293 , -90.8203 },
+{ 46.8750 , 41.0156 , -18.5547 , -32.2266 }, { 61.5234 , -26.1230 , 83.0078 , 51.2695 },
+{ 95.7031 , 124.268 , 66.4063 , 44.1895 }, { -26.6113 , 35.4004 , 53.2227 , 29.0527 },
+{-101.563 , -64.2090 , 118.408 , 64.6973 }, { -44.1895 , -1.95313 , -69.8242 , 55.1758 },
+{ -59.5703 , -53.2227 , 16.8457 , -70.8008 }, { -38.5742 , 46.6309 , -0.244141, -15.6250 },
+{-144.531 , -21.9727 , 52.0020 , -23.4375 }, { 62.2559 , 106.201 , 43.4570 , -19.5313 },
+{ -90.0879 , -4.39453 , -8.05664 , -19.5313 }, { -10.2539 , 101.318 , 34.1797 , -54.1992 },
+{ 279.053 , 158.936 , 158.447 , 80.3223 }, { 187.256 , 135.742 , 60.7910 , 57.3730 },
+{ 231.445 , 100.830 , 107.910 , 68.1152 }, { 34.4238 , 82.7637 , 86.9141 , 135.986 },
+{-114.746 , -41.5039 , 24.1699 , 57.8613 }, {-138.916 , -195.313 , 85.9375 , 137.939 },
+{ 68.8477 , 115.479 , 114.746 , 81.0547 }, { -48.5840 , -168.457 , -313.477 , -223.877 },
+{ -47.1191 , -104.004 , -195.313 , -273.926 }, { -6.34766 , -90.5762 , -119.629 , -47.1191 },
+{ 155.518 , 145.264 , 126.709 , 80.5664 }, { 99.6094 , -28.0762 , 19.2871 , 2.92969 },
+{ 116.455 , 21.2402 , -25.1465 , -91.7969 }, {-162.598 , -84.7168 , -67.6270 , -71.0449 },
+{-124.512 , -117.432 , 41.2598 , 72.5098 }, {-202.393 , -180.176 , -50.0488 , -41.7480 },
+{ -78.1250 , -131.836 , 80.0781 , 69.0918 }, {-209.717 , -233.887 , 107.910 , -0.488281},
+{ 135.742 , 167.480 , 31.7383 , 13.6719 }, { 337.646 , 247.070 , 184.326 , 104.248 },
+{ 149.414 , 180.908 , 153.320 , 135.010 }, { -82.7637 , -194.336 , 32.7148 , 67.6270 },
+{-154.541 , -264.893 , -0.488281, -60.0586 }, {-214.844 , -252.686 , -392.334 , -259.766 },
+{-242.676 , -115.723 , -277.832 , -119.141 }, {-101.074 , -194.092 , 17.8223 , -50.2930 },
+{ -1.95313 , -33.9355 , 107.178 , 49.8047 }, { -42.9688 , -141.113 , 5.61523 , 31.9824 },
+{ -65.6738 , -184.814 , -46.6309 , 59.8145 }, { -26.6113 , -82.5195 , 27.3438 , 77.1484 },
+{ 29.2969 , -99.1211 , -28.8086 , 149.170 }, { -43.9453 , -45.4102 , -157.471 , 28.0762 },
+{ -42.2363 , 8.30078 , -126.465 , -119.385 }, { -36.8652 , 14.8926 , -142.334 , -206.055 },
+{ 53.7109 , -33.6914 , -166.260 , -249.023 }, { 95.4590 , -4.15039 , -145.996 , -78.3691 },
+{ 38.3301 , -72.0215 , 31.4941 , 37.8418 }, {-226.074 , -213.623 , -240.967 , 69.5801 },
+{ 58.8379 , -20.2637 , -30.5176 , -30.5176 }, { 151.367 , 145.752 , 105.469 , 22.4609 },
+{ 95.9473 , 19.0430 , 99.8535 , 14.8926 }, { -95.9473 , -180.420 , -100.830 , -182.617 },
+{ 20.2637 , 13.1836 , 88.1348 , 6.59180 }, {-264.648 , 31.7383 , -82.2754 , -169.434 },
+{-382.080 , 72.5098 , 77.6367 , -4.63867 }, {-457.275 , 8.78906 , 12.4512 , -77.3926 },
+{-567.139 , -60.0586 , 56.3965 , -20.5078 }, {-562.988 , -191.162 , 9.76563 , -43.7012 },
+{-545.166 , -227.051 , -115.723 , -112.793 }, {-184.082 , -20.9961 , -70.3125 , -152.832 },
+{-588.623 , -111.084 , -15.3809 , 41.7480 }, {-268.311 , -267.090 , -6.34766 , -34.9121 },
+{-291.260 , -111.084 , -99.1211 , -93.0176 }, {-147.705 , -51.2695 , -23.4375 , -12.4512 },
+{-141.602 , -116.211 , -67.3828 , -3.66211 }, {-291.748 , -154.785 , -293.701 , -215.088 },
+{ -92.2852 , -53.9551 , -163.330 , -232.422 }, { 145.020 , 43.4570 , -98.3887 , -165.039 },
+{ 186.279 , 79.8340 , 146.729 , 70.8008 }, { 41.9922 , 73.2422 , 49.5605 , 38.3301 },
+{ -13.6719 , -82.0313 , 86.9141 , 5.85938 }, { -55.6641 , -72.2656 , -63.2324 , -7.08008 },
+{ -45.4102 , 64.2090 , 101.563 , 3.41797 }, { -86.1816 , 91.0645 , -2.92969 , -52.7344 },
+{ 62.7441 , 23.4375 , 42.4805 , 13.9160 }, {-372.559 , -150.391 , -232.910 , -121.826 },
+{-121.338 , -37.1094 , -81.2988 , 30.5176 }, { 25.6348 , 48.8281 , 43.7012 , -23.6816 },
+{ -80.8105 , -54.6875 , 186.768 , 170.166 }, { 185.547 , 62.5000 , 73.4863 , 14.4043 },
+{ 111.084 , -20.7520 , 49.8047 , 70.3125 }, {-125.488 , 58.5938 , 61.2793 , -26.6113 },
+{ 62.5000 , 101.807 , -8.30078 , -100.830 }, { 24.6582 , 104.980 , 93.7500 , 38.0859 },
+{ -7.56836 , -2.44141 , 50.2930 , 104.004 }, { 143.799 , 35.4004 , 34.9121 , 17.3340 },
+{ 197.266 , 221.191 , 81.2988 , 85.2051 }, { 240.723 , 229.004 , 143.799 , 80.8105 },
+{ 317.383 , 201.172 , 45.6543 , 124.268 }, { 259.277 , 159.424 , 92.5293 , 113.770 },
+{ 356.934 , 228.760 , 97.9004 , 66.8945 }, { 192.139 , 210.205 , 64.6973 , 0.488281},
+{ 148.682 , 135.010 , 6.83594 , 74.4629 }, { 226.074 , 83.0078 , 25.8789 , 94.2383 },
+{ 58.8379 , -65.1855 , -35.8887 , 54.9316 }, { -43.4570 , -130.371 , 84.7168 , 122.559 },
+{-156.982 , -93.0176 , 96.9238 , 7.32422 }, {-158.936 , -178.955 , -106.201 , 97.1680 },
+{ -99.3652 , -177.246 , -118.164 , -60.5469 }, {-192.627 , -223.145 , -106.934 , -116.211 },
+{-121.582 , -95.2148 , 18.3105 , -72.0215 }, {-235.352 , -144.043 , -147.949 , 36.6211 },
+{ -29.5410 , -11.9629 , -37.8418 , -19.0430 }, { 228.271 , 134.277 , 94.9707 , 9.27734 },
+{ -78.3691 , 31.0059 , 103.516 , 76.9043 }, { -69.5801 , -27.5879 , 69.0918 , 63.2324 },
+{ 160.645 , 49.5605 , 78.6133 , 118.652 }, { 220.459 , 123.291 , 182.617 , 101.807 },
+{ 149.170 , 103.271 , 135.498 , 125.000 }, { 58.3496 , -20.2637 , -141.113 , -4.63867 },
+{ -82.7637 , -178.467 , 85.2051 , 3.17383 }, {-228.027 , -341.553 , -27.8320 , -87.8906 },
+{ 26.1230 , 168.945 , 44.4336 , 21.9727 }, {-303.467 , -375.488 , -378.662 , -177.002 },
+{-138.672 , -220.459 , -332.764 , -128.174 }, {-126.221 , -208.252 , -210.205 , -245.117 },
+{ -41.0156 , -168.457 , -203.857 , 15.3809 }, { -33.4473 , -135.742 , -133.545 , 35.1563 },
+{ -69.8242 , -199.463 , 118.408 , 77.8809 }, { -35.8887 , -99.6094 , 128.418 , 60.0586 },
+{ -84.7168 , -105.957 , 72.5098 , -6.83594 }, { -70.8008 , -114.990 , -270.996 , -313.721 },
+{-112.305 , -87.6465 , -241.211 , -193.848 }, { 328.857 , 317.139 , 168.457 , 127.686 },
+{ 296.875 , 260.742 , 267.090 , 184.814 }, { 201.416 , 278.320 , 183.594 , 120.605 },
+{ 305.664 , 333.252 , 291.748 , 219.238 }, { 127.197 , 257.080 , 129.883 , 105.469 },
+{ -81.5430 , -52.7344 , -76.4160 , -64.2090 }, { -39.0625 , 12.6953 , -115.234 , -37.8418 },
+{ 31.0059 , 33.2031 , -92.7734 , 10.7422 }, { 207.764 , 100.098 , -39.5508 , -119.385 },
+{ 30.0293 , -62.2559 , -194.336 , -162.842 }, { 266.113 , 223.877 , 192.627 , 120.361 },
+{ 341.064 , 292.236 , 136.230 , 49.3164 }, { -12.4512 , -28.8086 , -83.4961 , -171.143 },
+{ 20.2637 , 26.3672 , -10.2539 , -107.666 }, { 14.8926 , 23.1934 , 70.0684 , 62.5000 },
+{ -6.59180 , 21.7285 , 127.930 , 129.639 }, { 85.6934 , 55.4199 , 144.531 , 133.057 },
+{ 170.166 , 37.8418 , -40.0391 , 74.9512 }, { 155.762 , 66.8945 , -119.385 , -12.2070 },
+{ 184.082 , 58.5938 , -40.5273 , -30.2734 }, { -28.3203 , -141.357 , -295.898 , -15.3809 },
+{ 46.3867 , -72.0215 , -253.906 , -316.406 }, { 35.8887 , -91.7969 , -43.2129 , -27.5879 },
+{ 205.322 , 302.979 , 256.592 , 163.086 }, { 0.488281, 71.5332 , 134.521 , 74.2188 },
+{-267.578 , -232.666 , -60.5469 , 91.7969 }, {-183.105 , -235.596 , 21.2402 , 125.977 },
+{ -67.1387 , -125.977 , 168.213 , 95.4590 }, { -92.5293 , -156.982 , 213.867 , 145.020 },
+{ -95.2148 , -247.314 , -157.471 , 139.893 }, { -26.1230 , -138.672 , -168.213 , -201.660 },
+{-250.244 , -6.59180 , -80.0781 , -49.5605 }, { 210.205 , 182.861 , 133.789 , 56.8848 },
+{-405.273 , -254.639 , 110.107 , 26.3672 }, {-161.133 , -151.367 , 104.980 , 57.6172 },
+{ 5.12695 , -96.6797 , -282.715 , -154.053 }, { 334.961 , 316.895 , 236.084 , 140.869 },
+{ 274.658 , 274.658 , 143.799 , 110.840 }, { -78.8574 , -211.182 , -114.014 , 37.3535 },
+{-114.258 , -170.654 , -196.289 , -124.268 }, { -95.7031 , -175.293 , -49.8047 , -8.54492 },
+{-147.217 , -266.846 , -138.428 , -39.5508 }, {-123.291 , -245.117 , -24.9023 , 85.4492 },
+{ 53.4668 , 54.6875 , 103.271 , 61.5234 }, { 96.4355 , 144.287 , 148.438 , 88.6230 },
+{-182.129 , -23.4375 , 91.0645 , 41.9922 }, { 41.7480 , 72.0215 , 174.316 , 82.7637 },
+{ 56.8848 , 18.7988 , 26.1230 , 67.6270 }, { 38.3301 , 37.3535 , -121.826 , -86.9141 },
+{ 377.686 , 261.963 , 140.625 , 120.605 }, { -71.2891 , -82.7637 , -123.047 , -144.531 },
+{-220.459 , -17.5781 , -151.123 , -117.432 }, {-389.160 , -272.705 , -138.428 , -62.0117 },
+{-193.604 , -123.779 , -137.695 , -71.0449 }, {-120.117 , -129.883 , 122.559 , 136.719 },
+{ -93.2617 , 104.248 , 146.484 , 56.1523 }, { -55.4199 , 116.455 , 61.2793 , 18.3105 },
+{ 69.5801 , 205.566 , 198.486 , 116.211 }, {-319.824 , -325.439 , 45.4102 , 92.0410 },
+{-143.311 , -223.877 , 156.982 , 93.0176 }, {-289.551 , -135.010 , 100.342 , 20.0195 },
+{-275.146 , -200.195 , -42.4805 , -131.836 }, {-147.461 , 29.0527 , 132.568 , 50.0488 },
+{ -92.7734 , 160.400 , 221.924 , 138.428 }, { 27.3438 , -72.7539 , -91.3086 , 27.8320 },
+{-209.229 , -61.2793 , 13.6719 , 38.8184 }, { 97.9004 , 84.2285 , -8.30078 , -34.1797 },
+{ -27.0996 , -148.193 , 10.0098 , 149.902 }, { 86.6699 , -27.8320 , -18.7988 , 115.723 },
+{ 141.113 , 13.6719 , 354.004 , 225.586 }, { 268.066 , 346.680 , 180.908 , 97.6563 },
+{ 60.0586 , 5.37109 , 143.555 , 76.4160 }, { -29.5410 , 79.8340 , 202.881 , 115.234 },
+{-277.832 , -148.438 , 208.984 , 134.766 }, {-302.979 , -261.719 , 155.762 , 146.484 },
+{ -87.4023 , 62.0117 , -81.2988 , -73.9746 }, {-157.715 , 180.420 , 87.4023 , 18.0664 },
+{ 299.316 , 407.959 , 298.096 , 207.275 }, { 547.119 , 396.484 , 239.990 , 155.273 },
+{ 449.463 , 360.596 , 182.861 , 93.7500 }, { 85.4492 , 64.2090 , 21.2402 , 31.2500 },
+{-464.355 , -229.736 , -35.1563 , -15.6250 }, {-423.340 , -62.2559 , 70.3125 , -7.56836 },
+{-645.508 , -302.246 , 89.3555 , 57.3730 }, {-401.123 , -266.602 , -328.125 , -74.2188 },
+{-132.080 , -262.451 , -272.461 , 30.0293 }, {-287.598 , -61.5234 , -199.219 , -43.9453 },
+{-248.047 , 130.127 , 137.939 , 56.8848 }, {-118.896 , -104.980 , -45.8984 , 81.5430 },
+{ 211.670 , 301.758 , 130.371 , 41.7480 }, {-388.184 , -392.334 , 155.029 , 153.809 },
+{-536.133 , 75.6836 , 225.586 , 100.586 }, {-575.684 , -80.0781 , 233.398 , 129.150 },
+{-644.287 , -92.0410 , 153.809 , 67.8711 }, {-635.254 , 77.3926 , 195.068 , 72.9980 },
+{-587.402 , 32.4707 , 83.0078 , 7.56836 }, {-526.367 , -358.398 , 31.9824 , 30.5176 },
+{-289.063 , -119.629 , -33.9355 , 11.2305 }, {-181.641 , 109.131 , 217.529 , 137.695 },
+{ 16.3574 , -110.107 , 157.715 , 147.461 }, {-135.010 , -104.736 , -213.867 , 96.6797 },
+{ 39.5508 , -16.1133 , 318.604 , 223.389 }, { 116.943 , 141.357 , 265.625 , 193.848 },
+{ 109.863 , 67.8711 , 138.184 , 79.1016 }, {-258.057 , -37.5977 , 36.1328 , -43.2129 },
+{-621.338 , 41.0156 , 261.230 , 144.531 }, {-573.975 , -10.2539 , 199.951 , 84.2285 },
+{-572.266 , -172.607 , 176.025 , 61.0352 }, {-531.006 , -365.479 , -75.4395 , 29.7852 },
+{ -19.0430 , -17.8223 , 29.2969 , 42.2363 }, { -0.976563, 63.9648 , -64.2090 , -63.7207 },
+{-105.225 , -15.6250 , -98.8770 , -178.711 }, {-636.963 , 28.3203 , -20.2637 , -47.1191 },
+{-372.314 , -230.469 , -116.455 , -177.002 }, {-124.023 , 74.9512 , 41.5039 , 41.9922 },
+{ 203.125 , 101.807 , 203.125 , 167.480 }, { -54.9316 , 43.2129 , 218.262 , 199.707 },
+{-117.676 , -94.9707 , 312.256 , 253.662 }, { -93.5059 , 49.0723 , -85.4492 , 9.76563 },
+{ 178.223 , 155.029 , 55.1758 , 128.418 }, { 122.803 , 112.793 , 82.5195 , 97.1680 },
+{ 130.615 , 174.316 , 9.76563 , -68.8477 }, { 361.816 , 359.131 , 264.893 , 178.467 },
+{ 381.104 , 261.719 , 221.924 , 169.189 }, { 346.436 , 312.988 , 217.041 , 214.600 },
+{ 281.494 , 177.734 , 289.551 , 205.078 }, { -55.1758 , 275.879 , 231.689 , 168.213 },
+{-120.605 , -240.723 , -379.883 , -31.2500 }, {-138.672 , -176.025 , -174.072 , -6.34766 },
+{ 77.3926 , 127.930 , 17.0898 , 32.9590 }, { -98.8770 , -211.182 , -431.152 , -159.180 },
+{ -42.4805 , -195.557 , 216.064 , 188.721 }, { -37.3535 , -22.2168 , 268.311 , 183.350 },
+{-123.535 , -280.518 , 208.252 , 157.715 }, { 58.8379 , 190.918 , 126.709 , 131.592 },
+{ 452.393 , 415.039 , 268.799 , 166.992 }, {-304.932 , -362.793 , -113.281 , 45.8984 },
+{-218.018 , -343.994 , -320.313 , -83.2520 }, { -32.9590 , 106.934 , -42.7246 , 4.39453 },
+{ 271.240 , 238.281 , 77.8809 , 50.7813 }, {-349.121 , -431.641 , 20.2637 , 111.816 },
+{-129.395 , -244.141 , 74.9512 , 31.4941 }, {-205.078 , -3.66211 , -7.08008 , -86.9141 },
+{-222.412 , -225.586 , -280.029 , -59.0820 }, { -29.0527 , -128.906 , 31.0059 , -32.4707 },
+{-185.791 , -186.768 , 46.3867 , -20.2637 }, { -76.9043 , 218.506 , 127.441 , 56.3965 },
+{ -54.1992 , 24.9023 , -15.3809 , -104.492 }, { 77.1484 , 170.654 , 92.5293 , 17.0898 },
+{ 6.10352 , 174.805 , 76.6602 , -26.3672 }, { 123.779 , 213.379 , 138.184 , 58.1055 },
+{ 26.3672 , 229.736 , 126.709 , 47.6074 }, { 103.760 , -14.6484 , -104.248 , 62.7441 },
+{ 33.9355 , -25.1465 , -153.809 , 108.887 }, { 81.5430 , 90.3320 , 100.586 , 11.7188 },
+{ -41.9922 , -168.457 , -69.0918 , 135.986 }, { 45.6543 , -69.8242 , 38.5742 , 117.920 },
+{ 34.1797 , 65.9180 , -83.9844 , -154.053 }, { 225.586 , 141.357 , -28.3203 , 32.2266 },
+{ 34.6680 , 113.770 , -16.6016 , -15.6250 }, { 56.1523 , -35.4004 , -73.7305 , -132.324 },
+{-196.045 , -222.656 , 248.535 , 179.932 }, {-188.721 , 247.803 , 153.809 , 72.5098 },
+{-633.789 , 23.1934 , 108.643 , 82.0313 }, {-518.066 , 119.873 , 124.512 , 46.6309 },
+{-305.908 , 39.3066 , -0.488281, -79.1016 }, {-354.004 , -154.541 , -173.828 , -25.6348 },
+{-205.566 , -62.0117 , -100.342 , 24.4141 }, {-156.250 , -70.8008 , 246.582 , 186.279 },
+{-158.691 , 76.4160 , 285.400 , 178.223 }, { 34.1797 , 123.291 , 251.465 , 187.012 },
+{ 188.477 , 70.0684 , 260.498 , 200.928 }, { 120.850 , 182.861 , 74.4629 , 78.8574 },
+{ -40.0391 , 112.793 , 19.0430 , 97.4121 }, { -83.4961 , -213.379 , 16.8457 , 145.752 },
+{ -3.90625 , 151.367 , 151.611 , 82.2754 }, { -33.6914 , -108.398 , -64.6973 , 53.2227 },
+{ 20.5078 , -109.863 , 232.666 , 162.598 }, { -54.1992 , -196.045 , 132.080 , 147.461 },
+{-224.854 , -335.938 , 59.5703 , 28.3203 }, {-205.322 , -176.514 , 153.809 , 143.555 },
+{ 34.1797 , 161.865 , 71.7773 , 89.8438 }, { 228.271 , 255.371 , 215.088 , 185.303 },
+{ 426.270 , 357.422 , 223.633 , 153.320 }, { 106.445 , 235.107 , 68.6035 , 0.244141},
+{ -29.0527 , 18.0664 , 132.324 , 52.0020 }, { 0.244141, -138.428 , 73.4863 , 58.8379 },
+{ 63.4766 , 106.201 , 54.1992 , 96.6797 }, { 228.516 , 233.643 , 270.508 , 171.631 },
+{ 124.512 , 123.535 , 197.266 , 116.699 }, { 146.729 , 169.434 , 234.375 , 151.367 },
+{ 237.305 , 180.908 , 239.258 , 146.484 }, { 203.613 , 175.049 , 187.256 , 166.992 },
+{ 156.982 , 237.305 , 228.271 , 155.762 }, { 122.314 , 161.377 , 175.781 , 207.764 },
+{ -25.6348 , -154.297 , -73.9746 , -28.5645 }, {-104.736 , 31.7383 , 192.627 , 107.910 },
+{-127.441 , -45.8984 , 171.875 , 91.0645 }, {-185.303 , 10.2539 , 198.730 , 127.686 },
+{-129.639 , -277.588 , 91.0645 , 141.113 }, {-166.504 , -293.701 , -111.084 , 69.5801 },
+{-283.936 , -385.010 , -268.066 , 10.7422 }, { 19.7754 , -20.0195 , 173.828 , 88.6230 },
+{ 116.455 , 60.0586 , 232.910 , 151.855 }, { 391.602 , 395.996 , 311.768 , 217.529 },
+{ 343.994 , 209.717 , 225.586 , 217.773 }, { 188.965 , 254.150 , 231.201 , 278.809 },
+{ 9.76563 , -133.301 , -18.3105 , 70.3125 }, {-150.391 , -25.8789 , -170.166 , -6.34766 },
+{ -41.2598 , -39.0625 , -217.529 , -180.420 }, { -68.1152 , -93.7500 , -251.221 , -85.4492 },
+{ 434.814 , 319.336 , 255.371 , 199.219 }, { 385.742 , 374.268 , 359.375 , 287.598 },
+{ 367.432 , 262.695 , 296.875 , 219.482 }, { 217.285 , 220.703 , 137.695 , 159.668 },
+{ 224.609 , 168.945 , 249.268 , 208.984 }, {-120.361 , 32.2266 , 43.2129 , 123.291 },
+{ 17.3340 , 47.6074 , -6.83594 , 23.6816 }, { 111.328 , 85.6934 , -40.0391 , 21.4844 },
+{ 107.178 , 67.8711 , -9.76563 , 85.4492 }, { 340.576 , 231.689 , 57.1289 , -23.1934 },
+{-196.533 , -115.234 , 9.27734 , -39.7949 }, { 89.5996 , -23.9258 , 119.385 , 127.686 },
+{ 250.244 , 287.598 , 295.898 , 221.191 }, { 77.8809 , 320.801 , 198.730 , 112.549 },
+{ -30.0293 , -132.568 , -196.289 , 109.131 }, {-182.617 , -79.1016 , -218.994 , -275.146 },
+{-179.932 , -122.314 , -192.627 , -174.072 }, { 174.561 , 189.697 , 302.490 , 225.098 },
+{ 475.830 , 473.389 , 333.984 , 211.182 }, { 178.223 , 214.844 , 185.059 , 94.7266 },
+{-212.646 , 110.840 , 4.15039 , -61.2793 }, { -93.0176 , -197.754 , -386.475 , 58.3496 },
+{-127.197 , -235.840 , -193.359 , 63.2324 }, {-217.285 , -331.543 , -187.988 , -17.8223 },
+{ 40.5273 , 85.2051 , -51.7578 , 78.8574 }, {-205.078 , -73.4863 , 115.479 , 106.201 },
+{-165.771 , -113.281 , 177.734 , 85.6934 }, { -38.0859 , -48.5840 , 162.842 , 105.469 },
+{ 7.08008 , -61.5234 , 101.318 , 117.188 }, {-178.467 , -92.5293 , 35.4004 , 136.475 },
+{-128.906 , -154.053 , -282.715 , -38.8184 }, { 108.643 , 66.6504 , 30.0293 , 156.006 },
+{ 91.0645 , -30.7617 , 195.313 , 138.672 }, { 20.5078 , -39.5508 , 175.781 , 173.828 },
+{-202.637 , -130.859 , -45.1660 , 54.1992 }, { 99.6094 , 110.352 , 122.314 , 188.232 },
+{-218.994 , -330.811 , -16.3574 , 107.910 }, {-193.359 , -343.262 , 138.184 , 146.973 },
+{ 40.7715 , -79.5898 , 124.268 , 80.5664 }, { -23.1934 , -152.832 , -178.223 , -83.9844 },
+{ 407.227 , 297.119 , 190.186 , 111.084 }, { 321.289 , 202.148 , 142.578 , 175.537 },
+{ 98.6328 , -7.56836 , 247.314 , 192.627 }, { 21.7285 , 26.1230 , 217.529 , 134.033 },
+{ 212.646 , 385.986 , 223.877 , 163.818 }, { 211.426 , 361.084 , 314.697 , 208.496 },
+{ 95.4590 , 260.742 , 273.926 , 198.242 }, { 19.0430 , -137.207 , 84.2285 , 137.451 },
+{ 104.736 , -25.1465 , 101.807 , 192.139 }, { -29.7852 , -106.689 , 100.342 , 192.383 },
+{-222.900 , -101.807 , 146.973 , 184.082 }, { -55.1758 , -3.90625 , 36.8652 , 185.547 },
+{-170.898 , 28.8086 , -25.3906 , -3.41797 }, {-275.391 , 11.7188 , 69.3359 , 95.9473 },
+{ -95.2148 , -102.295 , -156.006 , -28.3203 }, {-222.168 , 74.7070 , 77.1484 , -3.17383 },
+{ 294.678 , 240.234 , 200.439 , 163.330 }, {-291.748 , -169.189 , 34.1797 , -52.0020 },
+{-215.820 , -101.563 , -48.5840 , -136.230 }, {-150.391 , 59.8145 , -98.6328 , -162.109 },
+{ 63.9648 , 13.6719 , -150.635 , -176.758 }, { -20.7520 , -119.873 , -78.1250 , -160.156 },
+{-139.160 , -202.881 , -31.4941 , -128.906 }, {-367.676 , -15.3809 , -89.5996 , -93.9941 },
+{ -87.4023 , -78.3691 , 0.976563, 12.4512 }, { -89.3555 , -52.2461 , 77.8809 , 124.756 },
+{ 35.6445 , 163.818 , -4.15039 , -71.0449 }, { -26.8555 , 113.281 , -33.9355 , -121.094 },
+{ -49.3164 , 53.7109 , -76.1719 , -154.053 }, {-161.133 , -17.8223 , -159.912 , -200.195 },
+{-161.621 , -159.424 , -314.453 , -209.229 }, {-104.980 , -232.666 , -234.131 , -64.4531 },
+{ -11.9629 , -114.258 , -17.5781 , -93.0176 }, { -85.4492 , -137.451 , -47.1191 , -99.3652 },
+{ 13.4277 , -99.6094 , -196.045 , 2.68555 }, { -75.4395 , 158.447 , 45.8984 , -48.3398 },
+{-125.000 , 112.549 , -19.2871 , -111.816 }, {-321.777 , -64.2090 , -32.7148 , -127.686 },
+{-404.541 , -106.201 , -120.850 , -186.768 }, { 13.9160 , -84.7168 , -101.074 , 105.957 },
+{-278.564 , -59.0820 , -162.109 , -209.229 }, { 8.30078 , -16.6016 , -172.607 , -82.5195 },
+};
+
+static const float lsf_3_3_MODE_515[128][4] = {
+{ 102.295 , 39.7949 , -7.32422 , -63.9648 }, {-111.084 , -192.627 , -349.121 , -176.025 },
+{ 245.605 , 162.109 , 65.6738 , 6.10352 }, { 151.123 , 63.4766 , 44.6777 , 23.4375 },
+{-236.328 , -331.543 , -94.7266 , 32.9590 }, {-169.189 , 203.857 , 111.328 , 37.5977 },
+{ 269.775 , 171.631 , 138.916 , 88.6230 }, { 396.729 , 323.730 , 240.479 , 182.617 },
+{ -53.7109 , 53.4668 , 18.5547 , -50.7813 }, {-355.225 , -405.762 , 11.9629 , 36.3770 },
+{-235.352 , -41.9922 , -183.594 , -82.0313 }, { 152.588 , 51.0254 , -61.0352 , -16.1133 },
+{-248.291 , -204.590 , -0.488281, 77.3926 }, {-529.297 , -362.549 , -33.6914 , 30.0293 },
+{-458.008 , -512.451 , -127.197 , 20.7520 }, {-236.084 , -89.3555 , -169.678 , -215.088 },
+{-224.854 , -246.826 , -186.279 , -231.689 }, { -30.2734 , -62.5000 , -85.9375 , -161.133 },
+{ 43.4570 , 113.037 , 86.4258 , 74.2188 }, {-425.781 , -144.287 , -68.8477 , 19.2871 },
+{-549.072 , 42.7246 , 211.670 , 121.826 }, { -33.6914 , -43.9453 , -44.1895 , -5.12695 },
+{-559.326 , -302.979 , -112.305 , -126.953 }, {-188.232 , 110.107 , -2.44141 , -75.1953 },
+{ 66.1621 , -15.8691 , 0.976563, 52.2461 }, { -68.1152 , -106.201 , -10.4980 , -84.9609 },
+{-163.574 , 8.54492 , -15.8691 , -51.5137 }, { 196.777 , 130.615 , 20.7520 , 72.5098 },
+{ 13.9160 , 58.3496 , 176.270 , 120.361 }, { 54.9316 , 161.377 , 205.078 , 133.545 },
+{-131.836 , -91.7969 , 3.41797 , 85.2051 }, { 114.502 , 176.025 , 80.8105 , 39.5508 },
+{-132.813 , -183.594 , -15.1367 , -2.44141 }, { 97.1680 , -21.4844 , 176.758 , 171.143 },
+{ -4.63867 , -130.127 , -22.9492 , 146.729 }, { 33.2031 , -17.3340 , -166.260 , -182.373 },
+{ -40.5273 , -83.9844 , 63.7207 , -12.2070 }, { 39.3066 , -12.6953 , 118.408 , 82.2754 },
+{-408.936 , 12.2070 , 46.3867 , -22.7051 }, {-557.129 , -56.3965 , -47.3633 , -20.0195 },
+{ -23.1934 , -145.264 , -37.5977 , 31.2500 }, { 218.262 , 122.314 , 143.555 , 111.572 },
+{ -84.2285 , 50.2930 , 29.7852 , 26.8555 }, {-154.053 , -55.4199 , -138.916 , 0.732422},
+{ 99.6094 , 58.3496 , 96.9238 , 55.1758 }, { -48.0957 , -0.488281, 31.2500 , 119.873 },
+{ 312.744 , 220.703 , 71.2891 , 52.4902 }, { 131.348 , 74.7070 , 63.2324 , 124.268 },
+{-165.283 , -255.615 , 3.17383 , 78.3691 }, {-165.771 , -143.555 , -87.4023 , -51.7578 },
+{-136.230 , 59.3262 , 157.715 , 116.943 }, { 118.652 , 83.4961 , 154.785 , 129.883 },
+{ 26.1230 , 195.801 , 80.8105 , 33.2031 }, { -27.3438 , -97.1680 , -251.709 , -69.8242 },
+{ -79.5898 , -172.119 , 70.3125 , 66.4063 }, { 317.139 , 279.297 , 287.598 , 209.961 },
+{-103.271 , 29.5410 , -93.9941 , -36.1328 }, { -72.0215 , -73.7305 , -203.613 , -199.951 },
+{ 3.90625 , -5.85938 , -49.0723 , -116.211 }, { 135.498 , 22.2168 , -59.8145 , 71.7773 },
+{ -9.27734 , -92.5293 , -234.863 , -298.096 }, {-290.771 , -370.605 , -66.6504 , -96.4355 },
+{ -95.2148 , -247.314 , -157.471 , 139.893 }, {-449.951 , -251.465 , 123.291 , 114.258 },
+{ 181.641 , 231.201 , 148.682 , 120.361 }, {-168.213 , -286.133 , -153.320 , -32.9590 },
+{-250.488 , 47.6074 , 100.342 , 47.8516 }, { 386.230 , 280.029 , 140.381 , 82.2754 },
+{-302.490 , -189.697 , -158.203 , -34.6680 }, { 145.264 , 201.416 , 236.084 , 179.443 },
+{-294.434 , -236.816 , -19.7754 , -83.4961 }, {-181.885 , 3.17383 , -17.5781 , 91.5527 },
+{ 110.840 , 4.63867 , 343.506 , 224.854 }, {-402.100 , -41.9922 , 210.205 , 137.207 },
+{ 226.563 , 375.244 , 259.521 , 180.664 }, {-603.516 , -232.422 , 64.4531 , 20.0195 },
+{-122.559 , -235.596 , -325.684 , 30.0293 }, { 211.670 , 301.758 , 130.371 , 41.7480 },
+{-566.406 , -112.305 , 190.430 , 88.6230 }, {-290.527 , -150.635 , 61.5234 , -14.8926 },
+{ -42.4805 , 8.30078 , 246.826 , 192.383 }, {-569.580 , 60.3027 , 103.271 , 37.3535 },
+{ -3.90625 , -86.6699 , 63.9648 , 109.619 }, {-384.766 , -261.963 , -132.813 , -90.5762 },
+{-150.146 , -74.4629 , 256.592 , 196.533 }, { 167.725 , 128.906 , 1.46484 , -44.4336 },
+{ 228.271 , 213.623 , 244.629 , 197.510 }, { 48.5840 , 62.7441 , 30.7617 , 18.5547 },
+{-142.578 , -277.832 , 146.240 , 135.742 }, {-269.775 , -339.600 , -388.428 , -126.709 },
+{-238.525 , -323.486 , 26.3672 , 84.7168 }, {-176.270 , -238.037 , 89.1113 , 24.6582 },
+{ -35.4004 , 166.260 , 60.7910 , -37.3535 }, { 0.000000, -81.5430 , -139.160 , 38.8184 },
+{ 100.586 , 69.5801 , -82.0313 , -150.635 }, {-232.666 , -235.840 , 216.553 , 168.213 },
+{-305.420 , 20.5078 , -45.1660 , -97.1680 }, {-144.531 , 105.713 , 254.883 , 159.424 },
+{ 20.7520 , 80.3223 , -9.76563 , 88.1348 }, {-105.713 , -172.119 , 113.770 , 140.137 },
+{ -37.5977 , 159.668 , 144.531 , 70.8008 }, { -40.7715 , 17.5781 , 85.2051 , 42.7246 },
+{ 164.551 , 72.5098 , 238.525 , 175.781 }, { 301.514 , 293.945 , 184.814 , 119.141 },
+{ -97.6563 , -65.6738 , 131.348 , 90.8203 }, {-329.590 , -338.623 , -291.504 , -22.2168 },
+{ 308.105 , 213.867 , 189.209 , 170.898 }, {-146.240 , -9.27734 , -104.980 , -176.270 },
+{ 482.422 , 397.949 , 241.943 , 148.438 }, { 27.0996 , 67.3828 , -55.1758 , -23.4375 },
+{-231.201 , -94.7266 , -2.68555 , -1.70898 }, { -73.9746 , -129.639 , -204.834 , 82.5195 },
+{ 423.340 , 417.480 , 343.018 , 247.314 }, {-125.977 , -208.740 , -157.471 , 51.2695 },
+{-167.969 , -101.563 , 125.244 , 56.1523 }, {-200.684 , -155.518 , -279.785 , -78.1250 },
+{-232.422 , -160.645 , -169.434 , 44.6777 }, { -27.8320 , -152.100 , 199.707 , 164.551 },
+{ -46.6309 , -49.8047 , 178.467 , 155.029 }, { 12.4512 , 298.096 , 215.576 , 140.625 },
+{-232.910 , -105.225 , 201.660 , 145.996 }, { -83.4961 , -184.326 , -219.727 , -99.3652 },
+{-274.902 , -86.4258 , -50.2930 , -125.000 }, {-133.545 , -197.754 , -87.1582 , -151.367 },
+{ 16.1133 , 125.732 , -17.8223 , -100.098 }, {-212.891 , -230.713 , -352.539 , -299.561 },
+{ 46.6309 , -4.15039 , -132.813 , -56.3965 }, {-375.977 , -132.813 , -219.971 , -216.309 },
+};
+
+static const float lsf_3_3_MODE_795[512][3] = {
+{-217.285 , -378.418 , -620.361 }, {-199.951 , -236.816 , 42.7246 },
+{-201.660 , -301.270 , -186.035 }, {-146.240 , -5.37109 , 154.785 },
+{-197.998 , -240.967 , -220.215 }, { -78.8574 , 49.5605 , 6.34766 },
+{ -93.5059 , -57.3730 , -190.674 }, { -97.4121 , 308.105 , 221.191 },
+{-227.539 , -341.553 , -336.914 }, {-152.344 , 22.7051 , 21.2402 },
+{-101.074 , -131.592 , -168.701 }, { 9.03320 , 154.541 , 124.512 },
+{ -94.4824 , -116.211 , -324.707 }, { 97.4121 , 16.1133 , 64.2090 },
+{ -99.3652 , -11.9629 , -81.7871 }, {-101.807 , 254.150 , 455.322 },
+{-190.186 , -265.869 , -351.563 }, {-182.129 , -209.473 , 203.125 },
+{-141.846 , -185.303 , -90.5762 }, {-164.307 , -123.535 , 509.766 },
+{-136.719 , -154.785 , -287.842 }, { 66.1621 , 58.8379 , 3.41797 },
+{-106.934 , -59.5703 , -96.9238 }, { 113.037 , 293.457 , 255.615 },
+{-147.949 , -194.580 , -351.074 }, { -12.4512 , -78.8574 , 117.432 },
+{ -54.6875 , -142.578 , -128.662 }, { 120.605 , 215.088 , 166.504 },
+{-105.713 , -74.7070 , -244.629 }, { 135.254 , 160.889 , 54.1992 },
+{ 41.7480 , -39.0625 , -86.1816 }, { 166.260 , 438.965 , 382.080 },
+{-208.008 , -288.330 , -413.818 }, { -82.0313 , -162.598 , 27.8320 },
+{-141.846 , -184.570 , -181.641 }, { -47.6074 , 91.5527 , 121.338 },
+{-113.525 , -196.289 , -268.066 }, { 37.5977 , 68.8477 , -31.9824 },
+{ -12.2070 , -46.6309 , -175.537 }, { 78.8574 , 178.711 , 376.465 },
+{-176.270 , -199.951 , -342.773 }, { 25.6348 , -61.0352 , 45.1660 },
+{ -43.4570 , -122.559 , -181.152 }, { 78.3691 , 124.512 , 271.240 },
+{ -78.8574 , -138.428 , -235.840 }, { 31.0059 , 118.164 , 82.5195 },
+{ -39.0625 , 12.6953 , -82.5195 }, { 178.711 , 333.740 , 379.395 },
+{-152.832 , -195.801 , -414.063 }, { -69.8242 , -143.066 , 165.039 },
+{-169.678 , -83.7402 , -90.3320 }, {-119.629 , 72.0215 , 462.158 },
+{-153.809 , -140.137 , -247.559 }, { -19.5313 , 157.471 , -16.8457 },
+{ -1.46484 , -77.6367 , -88.8672 }, { 190.918 , 354.004 , 253.418 },
+{ -76.4160 , -178.955 , -340.576 }, { 29.2969 , 14.6484 , 116.455 },
+{ -64.4531 , -142.822 , -30.0293 }, { 173.584 , 303.955 , 154.541 },
+{ -22.2168 , -86.6699 , -248.047 }, { 188.232 , 185.059 , 63.7207 },
+{ 61.7676 , 19.7754 , -115.723 }, { 227.051 , 540.771 , 419.922 },
+{-197.266 , -268.311 , -469.971 }, {-136.719 , -190.918 , 41.2598 },
+{-196.289 , -262.207 , -45.8984 }, {-152.832 , -13.4277 , 343.018 },
+{-169.434 , -174.805 , -291.504 }, {-161.133 , 86.4258 , 80.3223 },
+{-125.488 , -13.4277 , -132.568 }, { 89.3555 , 252.197 , 288.574 },
+{-160.645 , -234.131 , -331.299 }, { -13.4277 , -44.9219 , 22.7051 },
+{-147.705 , -69.8242 , -161.621 }, { 98.6328 , 109.619 , 201.904 },
+{ -69.8242 , -85.4492 , -308.350 }, { 153.320 , 74.7070 , 55.4199 },
+{ -3.90625 , 35.8887 , -152.100 }, { 45.4102 , 225.342 , 523.926 },
+{-164.551 , -217.285 , -392.090 }, {-108.154 , -55.6641 , 82.7637 },
+{ -90.0879 , -192.871 , -99.8535 }, { 56.3965 , 20.9961 , 358.643 },
+{-109.375 , -141.846 , -259.033 }, { 145.020 , 109.863 , -43.2129 },
+{ -30.2734 , -41.5039 , -109.131 }, { 163.818 , 282.959 , 342.773 },
+{-116.211 , -162.842 , -368.896 }, { -18.7988 , -33.6914 , 174.805 },
+{ -43.2129 , -90.8203 , -93.0176 }, { 110.107 , 228.027 , 223.389 },
+{ -61.0352 , -105.469 , -200.684 }, { 66.4063 , 202.148 , 108.887 },
+{ 6.34766 , 4.63867 , -7.56836 }, { 170.410 , 413.086 , 529.297 },
+{-157.715 , -238.525 , -469.727 }, { -43.7012 , -115.479 , 65.4297 },
+{ -92.5293 , -181.885 , -168.701 }, { 2.68555 , 31.0059 , 252.197 },
+{-119.141 , -223.877 , -201.416 }, { 14.8926 , 78.8574 , 32.9590 },
+{ 35.8887 , -35.4004 , -167.480 }, { 167.236 , 191.895 , 410.645 },
+{-123.535 , -207.031 , -316.650 }, { 8.54492 , 21.9727 , 54.1992 },
+{ -5.61523 , -84.4727 , -163.574 }, { 111.084 , 144.287 , 314.209 },
+{ -49.5605 , -144.775 , -265.137 }, { 159.180 , 85.9375 , 106.689 },
+{ 9.52148 , 15.3809 , -111.572 }, { 205.322 , 308.838 , 513.916 },
+{-126.953 , -215.332 , -386.719 }, { -80.0781 , -173.584 , 346.924 },
+{-145.508 , -83.4961 , -17.0898 }, { 51.0254 , 42.2363 , 470.703 },
+{-103.271 , -145.996 , -224.854 }, { 102.783 , 147.705 , -9.27734 },
+{ -0.488281, -59.8145 , -31.0059 }, { 218.750 , 480.713 , 277.100 },
+{ -92.5293 , -126.465 , -385.498 }, { 42.2363 , 28.8086 , 183.838 },
+{ -13.4277 , -93.0176 , -12.6953 }, { 240.479 , 249.268 , 183.838 },
+{ -0.488281, -71.0449 , -217.529 }, { 183.838 , 242.188 , 103.271 },
+{ 64.4531 , 31.9824 , -47.8516 }, { 218.506 , 555.176 , 620.850 },
+{-155.029 , -265.625 , -610.107 }, {-129.150 , -239.746 , 128.418 },
+{-186.523 , -202.637 , -133.789 }, {-106.445 , 77.1484 , 146.240 },
+{-164.795 , -229.492 , -182.129 }, { -13.9160 , 57.6172 , -2.68555 },
+{ -49.0723 , -19.7754 , -194.824 }, { 3.90625 , 206.299 , 380.371 },
+{-179.932 , -240.479 , -295.898 }, {-114.258 , 4.15039 , 70.8008 },
+{ -68.1152 , -142.578 , -170.898 }, { 44.6777 , 200.684 , 172.119 },
+{ -64.6973 , -120.117 , -289.795 }, { 102.783 , 37.1094 , 114.258 },
+{ -95.2148 , 40.5273 , -65.4297 }, { 9.52148 , 378.418 , 456.055 },
+{-155.029 , -235.840 , -383.545 }, {-110.596 , -120.117 , 222.168 },
+{ -69.3359 , -250.732 , -18.3105 }, { -44.1895 , -32.4707 , 452.148 },
+{-108.643 , -152.344 , -286.621 }, { 102.539 , 89.5996 , -11.9629 },
+{ -94.9707 , -51.7578 , -41.2598 }, { 172.607 , 261.963 , 294.922 },
+{-131.592 , -173.340 , -353.760 }, { 20.2637 , -39.7949 , 118.164 },
+{ -57.6172 , -132.568 , -86.6699 }, { 82.5195 , 286.865 , 198.730 },
+{ -60.0586 , -75.4395 , -233.887 }, { 147.949 , 185.547 , 14.6484 },
+{ 40.5273 , -1.95313 , -39.7949 }, { -74.7070 , 451.416 , 625.732 },
+{-182.373 , -250.244 , -435.303 }, {-102.295 , -108.887 , 51.0254 },
+{-175.293 , -138.184 , -130.371 }, {-123.535 , 169.189 , 209.229 },
+{-113.037 , -170.166 , -264.160 }, { 79.3457 , 105.225 , -50.2930 },
+{ -3.66211 , -1.95313 , -186.279 }, { 133.057 , 224.365 , 370.605 },
+{-149.170 , -191.162 , -320.557 }, { 62.5000 , -13.4277 , 50.7813 },
+{ -40.2832 , -84.9609 , -161.621 }, { 78.3691 , 166.016 , 227.051 },
+{ -79.5898 , -104.736 , -232.178 }, { 118.164 , 108.887 , 139.160 },
+{ -48.0957 , 17.5781 , -17.8223 }, { 221.924 , 355.225 , 425.049 },
+{-137.451 , -179.932 , -481.934 }, { -30.2734 , -101.563 , 175.293 },
+{-116.699 , -98.6328 , -76.6602 }, { -3.90625 , 108.887 , 399.414 },
+{-134.521 , -131.104 , -183.105 }, { -14.1602 , 155.762 , 52.2461 },
+{ 13.4277 , -45.1660 , -66.1621 }, { 280.273 , 317.627 , 295.898 },
+{-117.920 , -163.818 , -308.594 }, { 28.5645 , 69.5801 , 132.568 },
+{ -49.8047 , -95.4590 , -27.0996 }, { 125.244 , 375.488 , 208.496 },
+{ -27.8320 , -46.3867 , -238.770 }, { 214.111 , 145.264 , 113.281 },
+{ 63.4766 , 63.4766 , -75.9277 }, { 182.617 , 557.373 , 541.016 },
+{-126.221 , -230.713 , -530.029 }, { -79.5898 , -172.852 , 92.2852 },
+{-198.242 , -168.701 , -56.6406 }, {-136.719 , 167.725 , 343.994 },
+{-178.711 , -168.457 , -204.102 }, { -87.6465 , 157.471 , 94.2383 },
+{ -64.6973 , 15.1367 , -165.527 }, { 35.4004 , 401.367 , 294.922 },
+{-135.498 , -241.211 , -301.025 }, { -19.0430 , 3.41797 , 27.8320 },
+{ -79.8340 , -87.4023 , -119.385 }, { 95.7031 , 165.283 , 170.166 },
+{ -49.0723 , -57.6172 , -278.320 }, { 169.189 , 109.619 , 43.4570 },
+{ -59.3262 , 62.5000 , -105.713 }, { 149.170 , 338.135 , 599.609 },
+{-149.414 , -219.971 , -357.422 }, { -74.9512 , -4.15039 , 121.826 },
+{ -76.9043 , -162.842 , -62.0117 }, { 62.5000 , 104.492 , 357.178 },
+{-118.652 , -103.027 , -257.813 }, { 159.912 , 90.3320 , 4.39453 },
+{ -24.9023 , -45.1660 , -67.3828 }, { 184.326 , 385.254 , 325.928 },
+{-119.141 , -147.217 , -346.191 }, { 44.4336 , -22.7051 , 212.402 },
+{ -17.8223 , -111.816 , -84.9609 }, { 203.857 , 210.449 , 233.643 },
+{ -68.8477 , -81.2988 , -182.129 }, { 133.545 , 204.834 , 104.492 },
+{ 66.6504 , -21.7285 , 3.17383 }, { 229.492 , 416.992 , 628.906 },
+{-102.051 , -264.648 , -429.199 }, { -10.7422 , -87.4023 , 63.2324 },
+{-121.338 , -156.982 , -136.719 }, { 24.1699 , 135.986 , 234.619 },
+{-102.783 , -187.012 , -223.877 }, { 72.0215 , 79.5898 , 44.9219 },
+{ 42.7246 , 3.66211 , -152.832 }, { 129.883 , 214.355 , 483.643 },
+{-108.154 , -187.500 , -311.279 }, { 53.9551 , 38.0859 , 65.4297 },
+{ 9.52148 , -88.6230 , -123.291 }, { 169.678 , 188.477 , 278.320 },
+{ -39.5508 , -112.061 , -222.656 }, { 173.096 , 108.398 , 160.645 },
+{ 6.10352 , 73.9746 , -76.1719 }, { 309.570 , 344.238 , 418.701 },
+{ -72.5098 , -187.012 , -448.242 }, { -64.2090 , -26.3672 , 261.230 },
+{ -99.1211 , -3.17383 , -31.4941 }, { 13.9160 , 106.934 , 667.480 },
+{ -91.3086 , -118.896 , -203.857 }, { 74.2188 , 169.922 , 40.0391 },
+{ 25.3906 , -57.3730 , 1.22070 }, { 393.311 , 463.867 , 341.553 },
+{ -55.9082 , -142.090 , -323.486 }, { 98.8770 , 46.8750 , 199.463 },
+{ -21.2402 , -106.934 , 27.0996 }, { 250.977 , 292.725 , 242.432 },
+{ 16.6016 , -42.7246 , -228.027 }, { 252.197 , 272.705 , 110.107 },
+{ 116.699 , 48.8281 , -60.5469 }, { 519.287 , 658.203 , 498.535 },
+{-203.857 , -322.998 , -520.264 }, {-195.068 , -168.945 , 113.770 },
+{-198.242 , -251.953 , -114.502 }, {-151.855 , 70.3125 , 224.609 },
+{-171.143 , -205.322 , -261.230 }, {-100.342 , 125.000 , 1.95313 },
+{ -95.2148 , -22.2168 , -181.641 }, { -7.32422 , 254.639 , 283.447 },
+{-200.684 , -280.273 , -282.227 }, { -71.7773 , -11.2305 , 26.8555 },
+{-100.342 , -91.3086 , -165.527 }, { 52.2461 , 129.639 , 163.086 },
+{ -99.1211 , -102.539 , -291.504 }, { 118.896 , 56.6406 , 73.9746 },
+{ -77.6367 , 22.2168 , -115.234 }, { 30.0293 , 300.781 , 596.924 },
+{-176.270 , -232.422 , -364.990 }, {-180.176 , -164.795 , 325.195 },
+{-132.568 , -147.949 , -51.5137 }, { -23.1934 , -23.9258 , 368.164 },
+{-134.033 , -125.488 , -291.260 }, { 115.479 , 51.5137 , 17.8223 },
+{ -70.3125 , -27.3438 , -94.9707 }, { 131.104 , 325.195 , 307.129 },
+{-138.428 , -184.326 , -377.197 }, { 17.3340 , -69.0918 , 154.297 },
+{ -41.5039 , -117.432 , -120.361 }, { 166.260 , 244.629 , 199.463 },
+{ -86.9141 , -80.8105 , -214.111 }, { 102.295 , 172.363 , 84.4727 },
+{ 58.8379 , -8.30078 , -79.5898 }, { 92.0410 , 476.074 , 459.717 },
+{-177.490 , -262.451 , -396.729 }, { -56.8848 , -132.568 , 28.3203 },
+{-127.930 , -196.777 , -142.822 }, { -17.8223 , 116.699 , 177.979 },
+{ -70.3125 , -225.830 , -279.053 }, { 42.2363 , 109.131 , -12.6953 },
+{ 16.6016 , -55.9082 , -147.949 }, { 109.619 , 129.150 , 438.721 },
+{-144.287 , -213.623 , -332.764 }, { 44.6777 , -35.1563 , 79.1016 },
+{ -25.1465 , -110.352 , -162.598 }, { 152.100 , 119.141 , 287.109 },
+{ -58.1055 , -124.756 , -245.117 }, { 79.5898 , 134.766 , 111.816 },
+{ 33.2031 , 26.3672 , -77.8809 }, { 152.832 , 327.881 , 459.717 },
+{-119.629 , -157.715 , -422.363 }, { -45.4102 , -109.619 , 240.234 },
+{-180.176 , -18.5547 , -41.5039 }, {-134.277 , 184.326 , 625.000 },
+{-121.094 , -124.512 , -231.201 }, { 51.2695 , 169.434 , -12.6953 },
+{ 20.5078 , -78.6133 , -48.5840 }, { 266.113 , 396.729 , 298.828 },
+{ -91.7969 , -147.217 , -340.820 }, { 83.7402 , 18.0664 , 154.297 },
+{ -42.7246 , -122.559 , -7.81250 }, { 237.305 , 325.195 , 179.199 },
+{ 12.6953 , -72.0215 , -271.729 }, { 260.010 , 224.121 , 39.0625 },
+{ 95.9473 , 26.1230 , -96.9238 }, { 296.387 , 646.729 , 425.049 },
+{-154.297 , -293.213 , -461.670 }, {-175.537 , -67.6270 , 86.1816 },
+{-158.936 , -214.844 , -29.7852 }, { -51.5137 , 51.0254 , 326.660 },
+{-137.207 , -174.316 , -258.545 }, { -50.7813 , 94.7266 , 38.8184 },
+{ -78.1250 , -14.8926 , -134.521 }, { 71.5332 , 266.602 , 352.295 },
+{-158.203 , -211.182 , -305.908 }, { -11.9629 , -34.9121 , 74.4629 },
+{ -97.9004 , -55.4199 , -142.822 }, { 136.963 , 129.883 , 226.318 },
+{ -28.5645 , -108.154 , -290.039 }, { 123.779 , 106.445 , 71.2891 },
+{ -19.2871 , 56.8848 , -111.816 }, { 163.818 , 250.244 , 584.961 },
+{-154.541 , -205.566 , -372.314 }, { -75.1953 , -69.8242 , 156.250 },
+{ -91.0645 , -151.611 , -99.3652 }, { 102.051 , 61.7676 , 318.604 },
+{ -76.9043 , -141.846 , -277.588 }, { 139.648 , 167.236 , -68.6035 },
+{ 14.8926 , -16.6016 , -90.5762 }, { 241.943 , 268.799 , 365.723 },
+{-120.361 , -166.748 , -332.520 }, { -11.4746 , 40.0391 , 171.875 },
+{ -62.5000 , -76.6602 , -65.4297 }, { 154.053 , 231.689 , 256.836 },
+{ -28.8086 , -84.9609 , -203.369 }, { 16.6016 , 288.086 , 138.672 },
+{ 37.1094 , 28.5645 , 8.30078 }, { 271.729 , 464.355 , 546.631 },
+{-146.729 , -234.131 , -416.504 }, { -34.9121 , -119.385 , 117.188 },
+{ -81.0547 , -159.912 , -140.137 }, { 13.1836 , 86.1816 , 291.016 },
+{-112.793 , -159.180 , -194.336 }, { 36.6211 , 134.033 , 27.3438 },
+{ 47.6074 , -27.0996 , -125.732 }, { 165.771 , 270.508 , 402.100 },
+{-136.230 , -182.861 , -297.119 }, { -2.19727 , 66.4063 , 83.2520 },
+{ -12.9395 , -64.6973 , -130.615 }, { 119.385 , 205.811 , 316.895 },
+{ -29.2969 , -117.676 , -251.953 }, { 154.297 , 132.568 , 99.6094 },
+{ 43.7012 , 74.7070 , -128.418 }, { 274.414 , 357.422 , 547.852 },
+{-101.807 , -191.895 , -381.348 }, { -54.6875 , -93.7500 , 333.008 },
+{ -92.0410 , -112.061 , -6.10352 }, { 93.9941 , 119.385 , 530.762 },
+{ -81.0547 , -158.936 , -202.393 }, { 132.813 , 135.010 , 14.8926 },
+{ 5.37109 , -27.5879 , -21.7285 }, { 275.391 , 421.143 , 372.070 },
+{ -52.7344 , -91.0645 , -403.564 }, { 39.3066 , 77.1484 , 221.680 },
+{ -40.2832 , -54.1992 , -16.3574 }, { 332.520 , 286.865 , 192.627 },
+{ 17.8223 , -61.5234 , -187.256 }, { 180.176 , 227.539 , 150.391 },
+{ 88.3789 , 60.0586 , -30.7617 }, { 192.139 , 647.949 , 739.014 },
+{-168.701 , -270.020 , -534.668 }, {-137.939 , -143.555 , 127.930 },
+{-144.043 , -239.014 , -119.629 }, { -64.2090 , 96.9238 , 239.746 },
+{-140.869 , -204.346 , -230.713 }, { -5.37109 , 106.201 , -11.9629 },
+{ -46.3867 , -28.8086 , -153.564 }, { -21.4844 , 302.734 , 369.385 },
+{-155.273 , -256.592 , -248.779 }, { -71.0449 , 46.1426 , 63.2324 },
+{ -62.7441 , -114.746 , -153.564 }, { 35.4004 , 230.713 , 218.262 },
+{ -79.5898 , -88.8672 , -267.090 }, { 132.568 , 63.4766 , 153.809 },
+{ -49.3164 , 46.1426 , -51.0254 }, { 87.1582 , 336.670 , 510.498 },
+{-138.916 , -262.451 , -353.760 }, {-174.316 , -58.3496 , 224.365 },
+{-102.539 , -172.119 , -20.5078 }, { -26.6113 , -27.8320 , 587.646 },
+{-100.830 , -129.150 , -287.354 }, { 117.676 , 89.8438 , 31.9824 },
+{ -45.4102 , -17.5781 , -31.9824 }, { 210.205 , 306.396 , 297.852 },
+{-149.170 , -160.645 , -327.393 }, { 55.4199 , -29.5410 , 154.053 },
+{ -42.9688 , -119.385 , -53.2227 }, { 181.885 , 286.865 , 233.643 },
+{ -78.3691 , -36.1328 , -228.516 }, { 163.818 , 235.840 , 52.7344 },
+{ 83.0078 , -0.732422, -34.9121 }, { 114.502 , 451.172 , 594.971 },
+{-177.979 , -234.619 , -410.889 }, { -52.0020 , -62.0117 , 78.3691 },
+{-124.756 , -106.934 , -127.197 }, { -30.7617 , 177.002 , 220.459 },
+{ -83.0078 , -167.236 , -251.953 }, { 77.1484 , 117.188 , 4.88281 },
+{ 5.61523 , -21.7285 , -134.521 }, { 86.1816 , 256.592 , 436.768 },
+{-132.813 , -184.814 , -333.008 }, { 72.7539 , -6.10352 , 106.445 },
+{ -24.4141 , -95.7031 , -126.709 }, { 114.014 , 184.082 , 263.184 },
+{ -51.2695 , -97.1680 , -263.184 }, { 151.367 , 160.645 , 153.809 },
+{ 8.05664 , 35.8887 , -43.4570 }, { 224.854 , 411.865 , 468.994 },
+{ -79.3457 , -128.906 , -482.910 }, { 0.488281, -69.5801 , 222.168 },
+{ -90.5762 , -119.629 , -56.1523 }, { 0.000000, 145.752 , 490.723 },
+{-121.094 , -96.4355 , -203.613 }, { 9.03320 , 230.713 , 59.8145 },
+{ 44.1895 , -39.0625 , -35.1563 }, { 361.572 , 335.205 , 331.299 },
+{ -86.6699 , -146.729 , -310.059 }, { 72.7539 , 78.6133 , 164.063 },
+{ -47.1191 , -82.0313 , 18.7988 }, { 265.869 , 374.268 , 225.098 },
+{ 43.2129 , -9.52148 , -274.658 }, { 243.164 , 190.674 , 130.859 },
+{ 111.328 , 89.3555 , -105.469 }, { 345.459 , 595.703 , 556.396 },
+{-113.770 , -185.059 , -567.627 }, { -73.9746 , -124.268 , 94.4824 },
+{-177.490 , -135.986 , 16.1133 }, { -35.4004 , 156.982 , 304.688 },
+{-132.813 , -165.039 , -223.633 }, { -54.9316 , 210.449 , 143.555 },
+{ -37.1094 , 9.76563 , -130.127 }, { 103.271 , 347.412 , 380.371 },
+{-139.648 , -205.811 , -279.541 }, { -31.2500 , 20.7520 , 112.549 },
+{ -58.1055 , -62.7441 , -142.578 }, { 147.705 , 182.617 , 210.205 },
+{ 5.85938 , -49.3164 , -343.994 }, { 194.580 , 118.896 , 73.9746 },
+{ -44.1895 , 88.8672 , -44.4336 }, { 150.391 , 336.426 , 718.262 },
+{-120.605 , -208.008 , -351.807 }, { -71.2891 , 14.8926 , 198.242 },
+{ -20.5078 , -176.514 , -44.4336 }, { 135.498 , 129.883 , 367.676 },
+{ -89.1113 , -120.361 , -258.057 }, { 200.684 , 143.555 , 2.68555 },
+{ -3.41797 , -4.39453 , -56.1523 }, { 244.385 , 342.041 , 354.248 },
+{-115.723 , -138.916 , -315.430 }, { 73.7305 , 15.1367 , 259.277 },
+{ -17.0898 , -91.7969 , -54.1992 }, { 239.746 , 237.793 , 280.518 },
+{ -47.8516 , -57.1289 , -194.092 }, { 116.943 , 268.066 , 121.826 },
+{ 88.3789 , 14.1602 , 17.0898 }, { 280.029 , 505.127 , 697.510 },
+{-118.896 , -214.355 , -445.313 }, { 17.8223 , -70.3125 , 84.9609 },
+{ -87.4023 , -122.070 , -124.023 }, { 48.5840 , 176.025 , 303.223 },
+{ -19.0430 , -170.166 , -194.092 }, { 88.1348 , 130.859 , 47.8516 },
+{ 91.3086 , 26.8555 , -179.443 }, { 206.787 , 256.592 , 462.891 },
+{ -89.3555 , -174.072 , -288.574 }, { 76.9043 , 78.1250 , 104.736 },
+{ 17.5781 , -52.4902 , -109.863 }, { 185.303 , 216.309 , 332.764 },
+{ -7.32422 , -104.492 , -203.613 }, { 210.205 , 153.076 , 194.336 },
+{ 28.8086 , 114.258 , -68.1152 }, { 330.811 , 459.717 , 462.158 },
+{ -45.8984 , -156.738 , -393.555 }, { 15.3809 , -42.7246 , 292.480 },
+{-102.051 , -51.5137 , 12.4512 }, { 101.074 , 143.311 , 635.010 },
+{ -57.1289 , -135.986 , -209.473 }, { 103.516 , 217.041 , 54.1992 },
+{ 33.2031 , -24.6582 , 20.2637 }, { 344.971 , 556.152 , 337.646 },
+{ -20.5078 , -108.643 , -339.111 }, { 101.074 , 76.4160 , 255.127 },
+{ 7.08008 , -83.7402 , 15.8691 }, { 378.906 , 402.100 , 239.258 },
+{ 44.6777 , -22.2168 , -202.393 }, { 310.791 , 344.971 , 87.8906 },
+{ 135.010 , 66.4063 , -26.1230 }, { 387.451 , 768.799 , 635.498 },
+};
+
+static const float lsf_5_1[128][4] = {
+{-110.107 , -260.010 , -129.150 , -318.604 }, {-109.863 , -184.570 , -121.338 , -210.693 },
+{ -93.7500 , -151.123 , -100.830 , -163.330 }, { -77.3926 , -131.348 , -80.8105 , -135.742 },
+{-101.074 , -124.023 , -103.516 , -92.2852 }, { -66.8945 , -79.1016 , -105.957 , -149.902 },
+{ -55.1758 , -122.070 , -56.6406 , -125.488 }, { -64.2090 , -92.0410 , -72.7539 , -100.098 },
+{ -36.8652 , -173.340 , -42.4805 , -199.707 }, { -36.3770 , -100.586 , -38.0859 , -104.736 },
+{ -70.3125 , -112.793 , -45.4102 , -49.5605 }, { -41.5039 , -73.7305 , -46.6309 , -78.3691 },
+{ -31.9824 , -35.8887 , -72.5098 , -96.4355 }, { -55.6641 , -52.2461 , -59.8145 , -46.8750 },
+{ -16.3574 , -77.1484 , -17.3340 , -79.8340 }, { -25.3906 , -50.0488 , -22.9492 , -44.6777 },
+{ -34.9121 , -9.27734 , -47.1191 , -23.1934 }, { 3.90625 , -18.5547 , -30.2734 , -60.5469 },
+{ 5.61523 , -57.8613 , 5.85938 , -59.5703 }, { 4.39453 , -33.2031 , 10.7422 , -27.0996 },
+{ -8.05664 , -5.85938 , -6.10352 , 0.000000}, { 36.3770 , 4.63867 , 5.61523 , -34.9121 },
+{ 38.5742 , -41.2598 , 42.4805 , -44.1895 }, { 32.4707 , -13.4277 , 40.2832 , -6.34766 },
+{ 27.0996 , 20.5078 , 23.9258 , 18.3105 }, { 21.2402 , 44.6777 , -28.0762 , -2.68555 },
+{ -1.95313 , 31.7383 , 2.68555 , 41.5039 }, { 62.0117 , 18.7988 , 50.0488 , 4.15039 },
+{ 44.6777 , 27.3438 , 63.9648 , 47.3633 }, { 49.3164 , 70.0684 , 23.1934 , 46.1426 },
+{ -10.2539 , -25.6348 , 57.1289 , 43.7012 }, { 9.52148 , 45.4102 , 39.7949 , 84.2285 },
+{ 81.0547 , 48.5840 , 72.9980 , 39.3066 }, { -13.1836 , 69.5801 , -19.0430 , 68.6035 },
+{ -32.4707 , 34.4238 , -44.4336 , 27.0996 }, { 60.7910 , 83.2520 , 66.1621 , 88.8672 },
+{ 22.7051 , 98.3887 , 18.3105 , 95.4590 }, { 22.4609 , 124.512 , -33.6914 , 53.7109 },
+{ -45.1660 , -7.08008 , -8.30078 , 88.1348 }, { -28.0762 , 78.1250 , 0.732422, 135.254 },
+{ 24.1699 , 69.8242 , 53.2227 , 144.287 }, { -59.8145 , 99.1211 , -65.4297 , 110.596 },
+{ 0.000000, 141.602 , 6.10352 , 147.949 }, { 67.1387 , 129.883 , 36.1328 , 109.863 },
+{ -17.8223 , 180.420 , -69.5801 , 126.465 }, { -70.3125 , 22.9492 , -49.5605 , 164.551 },
+{ -34.1797 , -18.0664 , 50.0488 , 174.316 }, { -27.8320 , 72.9980 , 42.9688 , 225.342 },
+{ 44.4336 , 135.986 , 58.5938 , 172.119 }, { -3.90625 , 125.244 , 118.408 , 144.775 },
+{ 71.5332 , 93.7500 , 110.107 , 150.635 }, { -9.27734 , 12.2070 , 137.451 , 129.150 },
+{ 73.9746 , 51.0254 , 112.061 , 88.6230 }, { 105.713 , 110.352 , 109.863 , 110.840 },
+{ 89.5996 , 147.949 , 116.455 , 180.908 }, { 105.469 , 86.1816 , 89.8438 , 65.1855 },
+{ 88.1348 , 174.805 , 66.6504 , 142.334 }, { 110.596 , 40.5273 , 124.512 , 41.9922 },
+{ 49.0723 , 153.564 , 66.8945 , 46.6309 }, { 138.672 , 156.006 , 73.7305 , 72.7539 },
+{ 154.785 , 94.4824 , 156.982 , 85.4492 }, { 143.311 , 136.719 , 149.414 , 137.939 },
+{ 146.484 , 192.383 , 118.896 , 164.063 }, { 125.000 , 247.803 , 78.3691 , 81.2988 },
+{ 87.1582 , 208.496 , -30.5176 , 100.830 }, { 115.723 , 173.828 , 4.15039 , -36.8652 },
+{ 137.695 , 69.5801 , 65.9180 , -58.8379 }, { 237.061 , 217.041 , 119.385 , 53.7109 },
+{ 124.512 , 218.750 , 134.033 , 225.586 }, { 79.8340 , 201.416 , 70.8008 , 222.412 },
+{ 131.836 , 270.508 , 38.5742 , 196.533 }, { 48.5840 , 233.643 , 124.756 , 178.223 },
+{ 24.4141 , 213.379 , 3.17383 , 193.115 }, { 106.201 , 154.297 , 165.039 , 237.305 },
+{ 60.7910 , 219.727 , 114.014 , 297.363 }, { 190.674 , 262.207 , 142.822 , 191.650 },
+{ -5.61523 , 163.330 , 65.1855 , 254.639 }, { 151.123 , 264.648 , 150.146 , 279.541 },
+{ 151.855 , 220.947 , 223.633 , 256.104 }, { 19.5313 , 80.8105 , 142.578 , 262.451 },
+{ 21.7285 , 156.006 , 241.211 , 234.619 }, { 187.988 , 175.781 , 194.824 , 170.654 },
+{ 120.117 , 109.131 , 219.482 , 153.076 }, { 66.1621 , 290.039 , 177.002 , 325.439 },
+{ 21.2402 , 147.217 , 203.125 , 391.357 }, { 150.391 , 275.146 , 217.285 , 367.432 },
+{ 244.141 , 282.227 , 211.426 , 246.338 }, { 242.920 , 201.904 , 280.518 , 209.473 },
+{ 199.463 , 354.004 , 188.721 , 322.266 }, { 122.070 , 339.111 , 76.1719 , 281.494 },
+{ -4.88281 , 264.648 , 15.6250 , 313.232 }, { 0.488281, 286.133 , 97.4121 , 456.299 },
+{ 125.488 , 416.504 , 122.559 , 399.414 }, { 216.309 , 371.582 , 101.563 , 146.484 },
+{ 276.123 , 329.590 , 311.279 , 339.355 }, { 217.041 , 438.232 , 223.145 , 431.152 },
+{ 55.4199 , 288.818 , 305.176 , 445.801 }, { 123.291 , 452.637 , 224.365 , 574.463 },
+{ -48.5840 , 105.225 , 37.1094 , 423.584 }, { -52.0020 , -6.83594 , 95.7031 , 325.684 },
+{ -37.3535 , -12.6953 , 238.770 , 281.006 }, { -78.8574 , -97.6563 , 198.486 , 415.771 },
+{ -33.2031 , 20.5078 , 353.760 , 491.943 }, { -80.8105 , -34.9121 , -33.4473 , 291.016 },
+{ -62.5000 , 130.371 , -38.3301 , 251.709 }, { -74.9512 , -107.178 , 132.324 , 178.467 },
+{ -80.3223 , -102.539 , -23.6816 , 150.391 }, { -88.3789 , -41.0156 , -78.6133 , 89.3555 },
+{ -60.3027 , -26.8555 , -51.5137 , 21.7285 }, { -47.8516 , -75.4395 , 4.88281 , 14.4043 },
+{ -88.8672 , -113.037 , -69.8242 , 21.7285 }, { -82.0313 , 42.7246 , -105.469 , 34.4238 },
+{ -92.5293 , -46.3867 , -105.957 , -47.8516 }, { -19.2871 , 36.6211 , -67.8711 , -55.4199 },
+{ -68.3594 , 40.5273 , -135.498 , -103.027 }, { -37.8418 , 132.080 , -89.3555 , 13.1836 },
+{ -7.08008 , -20.2637 , -73.4863 , -188.965 }, { 45.4102 , 153.320 , -96.9238 , -64.4531 },
+{ 59.0820 , 71.5332 , -48.0957 , -142.822 }, { 30.2734 , 100.098 , 12.9395 , -32.4707 },
+{ 2.44141 , 83.0078 , -139.160 , -260.010 }, { 15.8691 , -108.887 , 16.6016 , -120.361 },
+{ 93.5059 , 228.760 , -87.1582 , -173.584 }, { -87.6465 , -61.0352 , -165.283 , -260.742 },
+{ 71.2891 , -6.34766 , 88.6230 , 1.46484 }, { 148.193 , 320.557 , -31.0059 , -2.44141 },
+{ 369.385 , 460.449 , 174.072 , 237.305 }, { 358.643 , 532.471 , 352.295 , 492.188 },
+};
+
+static const float lsf_5_2[256][4] = {
+{-398.193 , -390.625 , -438.477 , -559.082 }, {-250.732 , -432.129 , -268.555 , -494.385 },
+{-311.768 , -338.867 , -333.740 , -374.512 }, {-231.201 , -356.689 , -237.305 , -372.070 },
+{-243.896 , -298.340 , -249.023 , -286.133 }, {-198.975 , -240.967 , -242.188 , -334.717 },
+{-296.875 , -245.605 , -314.697 , -267.090 }, {-181.641 , -309.570 , -184.326 , -315.674 },
+{-210.449 , -225.342 , -220.947 , -240.234 }, {-165.527 , -256.592 , -167.236 , -256.348 },
+{-265.381 , -240.479 , -259.277 , -165.771 }, {-241.455 , -156.494 , -275.146 , -238.281 },
+{-186.035 , -159.668 , -217.285 , -196.777 }, {-203.369 , -266.357 , -172.363 , -153.564 },
+{-151.611 , -196.777 , -156.250 , -198.242 }, {-189.209 , -154.785 , -190.186 , -132.568 },
+{-243.164 , -137.939 , -262.451 , -141.602 }, {-133.301 , -149.170 , -139.648 , -151.123 },
+{-185.547 , -70.8008 , -214.600 , -128.418 }, {-200.928 , -112.793 , -194.092 , -61.7676 },
+{-135.010 , -101.318 , -143.799 , -107.178 }, {-130.127 , -83.0078 , -168.945 , -228.271 },
+{-123.291 , -188.477 , -171.387 , -276.123 }, { -64.2090 , -74.7070 , -237.061 , -117.920 },
+{-108.643 , -18.0664 , -135.498 , -133.789 }, {-149.902 , -31.4941 , -169.189 , -57.1289 },
+{ -96.6797 , -60.0586 , -115.967 , -61.0352 }, { -64.6973 , -98.6328 , -91.7969 , -125.488 },
+{-101.807 , -124.512 , -73.2422 , -76.4160 }, { -81.5430 , -162.109 , -113.037 , -198.730 },
+{ -94.2383 , -171.875 , -82.2754 , -150.146 }, { -57.1289 , -49.0723 , -56.8848 , -58.3496 },
+{ -40.7715 , -138.428 , -49.5605 , -151.123 }, { -35.8887 , -101.318 , -28.0762 , -85.9375 },
+{ -40.5273 , -183.105 , -41.7480 , -185.791 }, { -65.9180 , -214.600 , -64.4531 , -220.459 },
+{ -89.5996 , -181.641 , 10.4980 , -115.967 }, { 3.41797 , -159.424 , 10.4980 , -163.574 },
+{ 2.68555 , -109.375 , -14.4043 , -127.197 }, { -30.7617 , -29.0527 , -37.8418 , -149.658 },
+{ -10.2539 , -210.693 , -6.59180 , -227.295 }, { 33.2031 , -117.920 , 44.6777 , -114.258 },
+{ 13.4277 , -72.7539 , 13.4277 , -74.2188 }, { 76.4160 , -148.682 , 76.4160 , -175.781 },
+{ 78.6133 , -40.7715 , 24.4141 , -132.080 }, { -0.732422, -29.0527 , -27.0996 , -45.6543 },
+{ 56.8848 , -57.6172 , 63.4766 , -57.1289 }, { 6.34766 , -40.2832 , 32.7148 , -10.9863 },
+{ -9.76563 , -134.033 , 87.8906 , -49.5605 }, { 92.2852 , -94.7266 , 109.863 , -93.5059 },
+{ 67.1387 , 4.88281 , 44.4336 , -25.1465 }, { 60.0586 , -27.0996 , 105.225 , 9.03320 },
+{ 112.793 , -35.6445 , 118.896 , -38.3301 }, { -69.3359 , -14.4043 , 122.803 , -44.9219 },
+{ 5.85938 , 12.9395 , -0.732422, 13.1836 }, { 29.7852 , 63.2324 , 81.2988 , 16.1133 },
+{ 118.164 , 25.3906 , 106.445 , 16.6016 }, { 47.6074 , 28.3203 , 46.3867 , 50.2930 },
+{ 65.6738 , -2.19727 , 117.676 , 85.9375 }, { 93.2617 , 69.5801 , 97.4121 , 67.6270 },
+{ 110.352 , 62.5000 , 16.8457 , 45.4102 }, { 3.17383 , 72.5098 , -3.17383 , 63.2324 },
+{ -23.1934 , 7.32422 , 13.6719 , 96.1914 }, { 47.8516 , 103.760 , 50.0488 , 111.328 },
+{ 68.6035 , 140.869 , 3.66211 , 46.6309 }, { 91.5527 , 70.8008 , 99.3652 , 140.625 },
+{ -13.6719 , 55.4199 , 132.813 , 98.8770 }, { 0.000000, 134.033 , -22.4609 , 128.906 },
+{ -55.9082 , 85.6934 , -59.8145 , 82.5195 }, { -88.3789 , 106.201 , 40.7715 , 128.662 },
+{ -18.3105 , 73.7305 , 22.2168 , 201.172 }, { 31.4941 , 146.240 , 121.094 , 165.771 },
+{ 45.4102 , 182.861 , 37.3535 , 179.932 }, { -68.6035 , 146.484 , -84.9609 , 150.146 },
+{ -57.6172 , 187.744 , 10.0098 , 215.088 }, { 9.27734 , 217.285 , -53.7109 , 205.322 },
+{ -87.1582 , 215.576 , -95.9473 , 220.459 }, {-154.785 , 115.723 , -108.398 , 207.520 },
+{ -42.7246 , 165.527 , -120.361 , 59.0820 }, {-126.709 , 191.650 , -174.316 , 142.090 },
+{-132.080 , 89.3555 , -132.568 , 105.957 }, {-145.752 , 122.070 , -186.768 , 54.1992 },
+{-171.387 , 223.877 , -181.396 , 234.863 }, {-212.158 , 122.314 , -219.482 , 133.789 },
+{ -92.5293 , 48.8281 , -106.201 , 38.3301 }, {-199.951 , 52.2461 , -210.205 , 38.3301 },
+{-149.902 , 9.76563 , -154.297 , 22.9492 }, {-215.576 , -13.1836 , -180.908 , 125.977 },
+{-122.314 , 72.7539 , -149.902 , -41.7480 }, {-212.402 , -39.3066 , -211.182 , -5.61523 },
+{-199.707 , 22.7051 , -247.803 , -65.1855 }, {-161.621 , -87.6465 , -134.033 , 0.488281},
+{-107.910 , -29.5410 , -92.0410 , 0.000000}, { -55.4199 , 8.05664 , -101.074 , -30.7617 },
+{ -31.4941 , 51.7578 , -228.027 , 8.30078 }, {-264.160 , -68.8477 , -273.193 , -65.4297 },
+{-173.340 , -201.416 , -102.539 , -46.6309 }, {-262.695 , -226.563 , -223.877 , -22.7051 },
+{-153.320 , -87.4023 , 23.6816 , 1.70898 }, { -50.2930 , -95.9473 , -24.6582 , 5.85938 },
+{ -49.5605 , 9.27734 , -41.0156 , 20.2637 }, {-146.240 , -103.271 , -68.1152 , 104.004 },
+{-170.898 , 28.8086 , -18.3105 , 50.2930 }, {-239.502 , -164.307 , -166.016 , 101.807 },
+{ -89.5996 , 9.03320 , -68.1152 , 115.723 }, { -31.4941 , -77.6367 , 77.8809 , 72.2656 },
+{-152.832 , -9.52148 , 83.7402 , 146.973 }, {-169.922 , -9.52148 , -73.9746 , 229.492 },
+{ 25.3906 , 56.8848 , -92.7734 , 33.4473 }, { -8.78906 , 65.6738 , -18.3105 , -52.2461 },
+{ 29.2969 , 10.4980 , -129.150 , -116.455 }, { 112.061 , 40.0391 , -49.3164 , -55.9082 },
+{ -11.9629 , -40.7715 , 148.682 , 193.359 }, { 23.9258 , -53.7109 , 223.389 , 36.1328 },
+{ 71.5332 , 69.0918 , 212.158 , 22.2168 }, { 140.381 , 96.1914 , 79.5898 , -19.0430 },
+{ 175.049 , 16.3574 , 89.1113 , -78.8574 }, { 150.391 , -8.78906 , 178.467 , 6.59180 },
+{ 151.123 , 58.1055 , 154.297 , 66.6504 }, { 109.375 , 24.1699 , 195.557 , 116.211 },
+{ 212.158 , 66.6504 , 167.236 , 15.6250 }, { 192.627 , 17.5781 , 249.268 , 52.9785 },
+{ 193.604 , 112.061 , 179.199 , 87.8906 }, { 157.715 , 117.188 , 87.8906 , 78.6133 },
+{ 104.736 , 113.281 , 155.762 , 104.980 }, { 184.570 , 88.6230 , 244.141 , 98.6328 },
+{ 166.748 , 128.906 , 146.973 , 150.146 }, { 159.912 , 100.830 , 230.957 , 167.725 },
+{ 228.760 , 146.973 , 220.703 , 147.461 }, { 135.498 , 179.932 , 191.895 , 161.621 },
+{ 114.014 , 159.668 , 88.3789 , 143.799 }, { 226.807 , 173.340 , 121.582 , 116.699 },
+{ 101.318 , 102.539 , 169.189 , 215.576 }, { 198.486 , 166.748 , 190.674 , 225.830 },
+{ 222.900 , 229.248 , 177.246 , 178.711 }, { 119.873 , 208.252 , 129.639 , 231.445 },
+{ 179.199 , 235.107 , 76.9043 , 197.266 }, { 185.791 , 184.326 , 279.297 , 185.547 },
+{ 159.912 , 262.695 , 201.660 , 258.057 }, { 266.357 , 204.590 , 244.873 , 197.266 },
+{ 255.615 , 276.611 , 160.889 , 268.799 }, { 242.188 , 256.348 , 262.207 , 262.451 },
+{ 237.061 , 169.434 , 299.316 , 257.324 }, { 139.404 , 205.322 , 215.820 , 342.773 },
+{ 336.670 , 267.578 , 263.672 , 210.205 }, { 300.537 , 179.443 , 313.477 , 185.547 },
+{ 310.547 , 241.943 , 333.740 , 257.080 }, { 306.885 , 170.898 , 256.348 , 130.371 },
+{ 241.211 , 110.596 , 308.594 , 146.240 }, { 278.320 , 165.771 , 395.752 , 198.975 },
+{ 337.891 , 127.197 , 321.533 , 95.9473 }, { 381.836 , 196.533 , 353.516 , 167.480 },
+{ 260.742 , 158.203 , 213.623 , 74.9512 }, { 264.404 , 88.1348 , 255.615 , 77.3926 },
+{ 345.947 , 235.352 , 164.795 , 139.404 }, { 281.250 , 19.2871 , 271.973 , -11.4746 },
+{ 373.535 , 75.9277 , 420.166 , 76.6602 }, { 284.668 , 168.213 , 125.488 , -22.9492 },
+{ 85.2051 , 68.8477 , 344.727 , 80.0781 }, { 250.244 , 118.896 , -15.8691 , 13.9160 },
+{ 196.533 , 236.816 , 8.78906 , 15.1367 }, { 187.744 , -64.2090 , 193.115 , -84.4727 },
+{ 155.518 , 170.654 , -33.4473 , 151.367 }, { 130.371 , 132.080 , -179.443 , 47.3633 },
+{ 173.584 , 73.2422 , -65.4297 , -210.693 }, { 226.074 , 187.744 , -172.852 , -104.492 },
+{ 123.535 , 42.4805 , -217.773 , -153.809 }, { 106.201 , 133.545 , -350.342 , -62.9883 },
+{ 151.611 , 114.990 , -248.535 , -333.984 }, { -95.9473 , 127.197 , -224.609 , -167.480 },
+{ -6.10352 , 4.88281 , -239.746 , -282.227 }, { 83.0078 , 2.19727 , -380.371 , -277.100 },
+{ -85.9375 , 11.7188 , -385.498 , -98.1445 }, {-216.553 , 1.46484 , -282.227 , -216.797 },
+{-133.789 , -85.9375 , -401.123 , -285.156 }, { -38.8184 , 148.926 , -494.141 , -235.107 },
+{ -54.9316 , 47.1191 , -404.297 , -478.516 }, { -59.8145 , -120.361 , -235.352 , -410.156 },
+{-228.516 , -155.029 , -317.139 , -425.781 }, {-338.867 , -147.461 , -375.977 , -203.857 },
+{-341.064 , -32.9590 , -387.695 , -70.8008 }, {-407.715 , -173.828 , -490.967 , -398.438 },
+{-406.006 , -6.59180 , -551.270 , -197.998 }, {-282.471 , 44.9219 , -308.838 , 46.1426 },
+{-333.740 , 143.066 , -490.967 , 49.0723 }, {-192.871 , 173.828 , -295.410 , 0.732422},
+{-252.197 , 197.266 , -305.420 , 202.637 }, { -27.0996 , 155.029 , -399.414 , 109.131 },
+{-113.037 , -231.689 , -108.643 , -226.563 }, {-123.047 , -283.691 , -122.314 , -295.654 },
+{ 35.1563 , -85.6934 , -90.8203 , -256.836 }, { -69.0918 , -258.545 , -68.1152 , -274.170 },
+{-140.381 , -351.074 , -143.311 , -394.043 }, {-228.271 , -240.234 , 55.9082 , 168.457 },
+{-224.854 , -175.537 , -98.3887 , 332.520 }, {-167.236 , -113.525 , 213.379 , 96.9238 },
+{-124.268 , -11.2305 , 77.3926 , 325.684 }, {-118.408 , 111.328 , 198.486 , 107.178 },
+{-100.342 , 82.7637 , 219.238 , 260.498 }, {-103.760 , 11.2305 , 351.807 , 121.338 },
+{-221.924 , -195.313 , 357.666 , 255.371 }, { -62.0117 , -78.3691 , 349.121 , 284.424 },
+{ 16.6016 , 85.4492 , 252.441 , 162.598 }, { 90.3320 , 2.68555 , 320.068 , 192.871 },
+{ 34.9121 , 56.6406 , 254.150 , 381.348 }, { -27.8320 , 161.865 , 394.531 , 263.184 },
+{ 110.840 , 141.357 , 311.279 , 253.906 }, { -18.5547 , 221.924 , 183.594 , 260.498 },
+{ 37.3535 , 125.000 , 84.9609 , 296.387 }, { 149.902 , 93.9941 , 449.951 , 197.266 },
+{ 65.6738 , 252.441 , 49.5605 , 265.137 }, { 159.180 , 248.291 , 435.303 , 275.879 },
+{ 104.736 , 323.975 , 94.4824 , 337.891 }, { -11.9629 , 288.818 , -17.5781 , 296.631 },
+{-101.563 , 244.385 , 132.813 , 427.002 }, { -85.9375 , 298.584 , -122.559 , 292.725 },
+{-143.799 , 138.916 , -55.4199 , 397.949 }, { -34.6680 , 385.254 , -56.1523 , 418.701 },
+{-174.316 , 314.453 , -204.590 , 341.309 }, { 276.123 , 331.299 , -50.7813 , 300.781 },
+{ 106.689 , 235.596 , -226.807 , 199.707 }, { 197.998 , 344.238 , 209.717 , 367.920 },
+{ 40.0391 , 295.898 , 338.623 , 437.744 }, { 118.164 , 457.520 , 111.328 , 503.662 },
+{ 243.164 , 285.645 , 323.730 , 342.285 }, { 321.289 , 332.031 , 277.100 , 308.105 },
+{ 301.270 , 395.020 , 332.275 , 431.641 }, { 346.924 , 299.561 , 386.719 , 328.857 },
+{ 208.496 , 164.063 , 411.377 , 382.324 }, { 278.076 , 310.059 , 492.188 , 445.557 },
+{ 432.861 , 385.986 , 374.023 , 356.445 }, { 363.037 , 230.957 , 405.029 , 249.268 },
+{ 425.781 , 295.898 , 339.844 , 238.525 }, { 432.617 , 283.447 , 445.801 , 284.180 },
+{ 419.434 , 348.877 , 481.689 , 388.428 }, { 289.307 , 210.938 , 520.508 , 259.033 },
+{ 439.209 , 198.730 , 448.730 , 184.814 }, { 513.672 , 321.045 , 501.465 , 307.129 },
+{ 515.869 , 223.389 , 569.092 , 227.051 }, { 358.154 , 280.029 , 632.324 , 351.318 },
+{ 548.096 , 425.781 , 510.254 , 395.508 }, { 575.684 , 354.980 , 650.879 , 367.676 },
+{ 458.008 , 448.486 , 505.371 , 482.178 }, { 424.561 , 385.010 , 166.504 , 314.697 },
+{ 386.719 , 499.268 , 354.980 , 512.207 }, { 609.863 , 489.258 , 661.865 , 504.395 },
+{ 177.246 , 387.695 , 672.852 , 570.313 }, { 55.6641 , 206.787 , 599.609 , 405.029 },
+{ 8.78906 , 73.4863 , 474.121 , 477.783 }, {-108.887 , -23.4375 , 525.879 , 340.820 },
+{ 374.268 , 268.799 , 3.41797 , 148.438 }, {-225.342 , -178.711 , 337.646 , 483.887 },
+{ 328.369 , 232.422 , -166.016 , 78.3691 }, { 312.744 , 309.570 , -389.160 , 89.1113 },
+{ 229.736 , 230.957 , -424.072 , -200.684 }, { 579.590 , 680.420 , 444.580 , 680.664 },
+};
+
+static const float lsf_5_3[256][4] = {
+{-442.383 , -555.420 , -458.740 , -619.385 }, {-400.391 , -451.172 , -413.818 , -489.258 },
+{-297.852 , -466.797 , -298.096 , -514.160 }, {-380.615 , -387.695 , -384.033 , -379.883 },
+{-291.748 , -394.287 , -298.828 , -421.631 }, {-331.787 , -281.006 , -394.531 , -475.586 },
+{-311.035 , -339.600 , -318.604 , -342.529 }, {-392.334 , -287.842 , -409.180 , -320.068 },
+{-352.295 , -360.840 , -333.740 , -219.238 }, {-306.641 , -258.545 , -324.951 , -276.855 },
+{-239.746 , -276.611 , -280.518 , -367.188 }, {-263.672 , -319.336 , -249.023 , -288.818 },
+{-239.258 , -362.793 , -236.084 , -364.990 }, {-241.211 , -225.098 , -255.615 , -262.939 },
+{-204.590 , -287.842 , -209.473 , -298.340 }, {-276.123 , -254.150 , -259.766 , -187.256 },
+{-212.891 , -282.471 , -171.143 , -214.844 }, {-172.363 , -221.191 , -188.965 , -248.047 },
+{-141.113 , -263.672 , -195.557 , -360.840 }, {-144.287 , -271.240 , -144.531 , -279.785 },
+{-174.072 , -338.867 , -156.250 , -335.938 }, {-145.752 , -258.545 , -101.563 , -220.459 },
+{-167.480 , -203.125 , -161.377 , -172.852 }, {-108.398 , -211.914 , -119.629 , -224.854 },
+{ -91.3086 , -189.453 , -151.123 , -285.645 }, {-142.822 , -134.033 , -187.744 , -194.092 },
+{-106.201 , -160.889 , -129.395 , -180.908 }, {-121.582 , -204.346 , -87.1582 , -145.752 },
+{ -68.1152 , -212.646 , -59.3262 , -216.553 }, { -68.8477 , -162.354 , -68.3594 , -162.842 },
+{ -40.2832 , -136.719 , -96.1914 , -220.459 }, { -88.3789 , -100.098 , -109.375 , -142.334 },
+{ -99.8535 , -140.137 , -76.4160 , -87.1582 }, {-155.518 , -133.789 , -139.160 , -106.445 },
+{-218.750 , -123.047 , -93.2617 , -184.814 }, { -14.1602 , -117.432 , -40.2832 , -150.879 },
+{ -46.6309 , -91.3086 , -57.1289 , -93.2617 }, { -54.1992 , -166.748 , -6.10352 , -117.188 },
+{-102.051 , -87.6465 , -178.223 , -86.1816 }, { -79.1016 , -38.3301 , -105.469 , -78.6133 },
+{ -96.1914 , -73.9746 , -69.3359 , -25.3906 }, {-146.729 , -70.5566 , -135.742 , -47.8516 },
+{-143.555 , -36.6211 , -160.889 , -148.438 }, {-115.479 , -5.85938 , -16.6016 , -109.375 },
+{-115.723 , -1.95313 , -123.535 , -10.9863 }, {-182.617 , -44.9219 , -206.055 , -61.5234 },
+{-219.971 , -22.2168 , -142.578 , -23.6816 }, {-159.180 , 33.6914 , -186.523 , -31.9824 },
+{-165.527 , -2.92969 , -163.574 , 40.2832 }, { -63.2324 , -0.732422, -205.078 , -26.1230 },
+{-221.924 , 9.03320 , -242.188 , 10.7422 }, {-208.496 , -101.318 , -204.834 , 3.17383 },
+{-244.385 , -66.1621 , -250.488 , -75.4395 }, {-194.824 , -116.699 , -203.125 , -119.141 },
+{-230.225 , 41.0156 , -271.484 , -94.4824 }, {-289.307 , -24.6582 , -288.818 , -9.76563 },
+{-229.736 , -77.1484 , -251.465 , -187.988 }, {-254.883 , -152.588 , -263.916 , -131.348 },
+{-298.828 , -72.9980 , -320.313 , -106.445 }, {-292.236 , -161.865 , -284.912 , -39.3066 },
+{-296.875 , -168.457 , -302.002 , -202.881 }, {-349.609 , -175.781 , -342.529 , -120.361 },
+{-219.238 , -180.664 , -225.098 , -195.557 }, {-269.043 , -98.1445 , -385.498 , -235.352 },
+{-259.033 , -155.762 , -309.814 , -351.074 }, {-365.967 , -228.027 , -366.699 , -218.506 },
+{-390.137 , -137.695 , -420.654 , -175.049 }, {-147.949 , -145.752 , -284.668 , -264.893 },
+{-334.229 , -114.258 , -475.098 , -364.502 }, {-448.730 , -232.666 , -471.680 , -227.295 },
+{-365.967 , -45.8984 , -399.170 , -102.783 }, {-355.713 , -82.5195 , -353.516 , -5.37109 },
+{-474.121 , -103.027 , -489.746 , -60.7910 }, {-121.094 , -27.8320 , -466.309 , -184.326 },
+{-314.697 , 42.4805 , -354.248 , -26.6113 }, {-117.676 , -62.7441 , -298.096 , -124.023 },
+{-394.775 , 36.8652 , -413.574 , 50.7813 }, {-159.668 , 26.1230 , -403.076 , 7.08008 },
+{-278.564 , 68.1152 , -296.631 , 74.7070 }, {-299.805 , -123.535 , -178.223 , -42.7246 },
+{-301.758 , -24.6582 , -236.572 , 134.521 }, {-212.402 , 67.8711 , -200.928 , 76.9043 },
+{-137.451 , 91.7969 , -256.592 , 55.6641 }, {-123.779 , 68.3594 , -146.240 , 68.6035 },
+{-185.059 , 61.7676 , -74.4629 , 92.5293 }, {-184.326 , -32.7148 , -149.170 , 161.133 },
+{-201.172 , 130.859 , -199.463 , 157.715 }, {-100.830 , 11.9629 , -83.2520 , 43.2129 },
+{-110.596 , 128.418 , -117.676 , 143.799 }, { -17.3340 , 82.7637 , -160.400 , 64.4531 },
+{ -59.5703 , 72.0215 , -57.8613 , 76.9043 }, { -94.4824 , 138.916 , -123.535 , -2.19727 },
+{ -92.0410 , 3.41797 , -39.0625 , 161.377 }, { -52.7344 , 9.76563 , -75.1953 , -11.2305 },
+{ 23.1934 , 52.2461 , -59.0820 , 40.7715 }, { -20.9961 , 46.8750 , -13.6719 , 6.59180 },
+{ -18.5547 , 7.56836 , 8.78906 , 75.4395 }, { -25.8789 , -44.4336 , -27.5879 , 18.0664 },
+{-107.666 , -5.37109 , 5.61523 , 33.9355 }, { 19.7754 , -2.68555 , 10.7422 , 3.66211 },
+{ -21.2402 , -33.4473 , -28.8086 , -50.5371 }, { -38.5742 , -14.1602 , 66.4063 , -22.4609 },
+{ -38.0859 , -107.666 , 1.95313 , -33.2031 }, { 31.2500 , -53.9551 , 24.6582 , -53.2227 },
+{ 9.76563 , -48.0957 , -18.5547 , -111.328 }, { 2.19727 , -108.643 , 8.05664 , -103.271 },
+{ 55.1758 , 14.6484 , 17.8223 , -54.1992 }, { 38.0859 , -97.4121 , 68.3594 , -77.6367 },
+{ 59.8145 , -83.2520 , 40.5273 , -121.826 }, { 82.7637 , -46.3867 , 79.8340 , -53.4668 },
+{ 79.3457 , -33.4473 , -21.7285 , -145.508 }, { 24.4141 , -153.076 , 35.1563 , -165.283 },
+{ 118.896 , 6.83594 , 61.5234 , -95.4590 }, { 52.2461 , -10.0098 , 68.8477 , -6.83594 },
+{ 24.1699 , -69.8242 , 80.8105 , 11.9629 }, { 112.061 , -94.7266 , 137.939 , -90.0879 },
+{ 106.445 , 6.83594 , 82.0313 , -2.19727 }, { 96.9238 , -40.7715 , 150.879 , 8.30078 },
+{ 145.508 , -4.15039 , 136.963 , -34.1797 }, { 72.9980 , 19.2871 , 127.441 , 30.5176 },
+{ 49.5605 , 0.488281, 59.5703 , 70.3125 }, { 62.2559 , 51.5137 , 42.7246 , 20.0195 },
+{ 145.508 , 45.6543 , 126.221 , 26.3672 }, { 93.0176 , 62.2559 , 89.1113 , 72.5098 },
+{ 121.338 , 85.9375 , 79.8340 , -20.0195 }, { 6.10352 , 51.2695 , 90.5762 , 59.8145 },
+{ 63.7207 , 0.732422, 133.057 , 109.619 }, { 34.1797 , 71.7773 , 10.7422 , 72.0215 },
+{ 51.7578 , 84.7168 , 59.5703 , 120.605 }, { 80.8105 , 128.906 , 49.0723 , 74.9512 },
+{ 85.2051 , 100.342 , 149.658 , 69.3359 }, { 149.902 , 100.830 , 113.281 , 78.6133 },
+{ 152.344 , 96.9238 , 23.6816 , 48.8281 }, { -39.0625 , 93.7500 , 36.3770 , 88.3789 },
+{ 120.850 , 128.174 , 65.6738 , 142.822 }, { 8.05664 , 119.873 , -29.5410 , 105.713 },
+{ 104.248 , 149.170 , 121.582 , 125.977 }, { 41.7480 , 108.154 , 121.338 , 162.598 },
+{ 107.422 , 67.1387 , 138.184 , 140.381 }, { 35.6445 , 156.006 , 37.8418 , 163.574 },
+{ -8.05664 , 42.2363 , 51.7578 , 169.922 }, { -40.5273 , 146.729 , -46.6309 , 169.678 },
+{-119.385 , 122.803 , 42.7246 , 181.152 }, { 52.2461 , 116.211 , 90.8203 , 264.404 },
+{ 141.113 , 129.395 , 143.066 , 189.697 }, { 103.760 , 213.379 , 76.9043 , 205.322 },
+{ 91.3086 , 207.031 , -40.2832 , 137.939 }, { 8.54492 , 241.943 , -9.52148 , 259.277 },
+{ 80.3223 , 173.828 , 191.895 , 205.078 }, { 157.471 , 194.092 , 161.377 , 165.039 },
+{ 139.404 , 224.121 , 154.297 , 263.428 }, { 164.307 , 199.463 , 77.6367 , 94.7266 },
+{ 213.379 , 247.070 , 137.695 , 207.031 }, { 214.844 , 151.367 , 135.986 , 116.943 },
+{ 163.818 , 110.596 , 168.945 , 114.258 }, { 205.078 , 156.738 , 206.055 , 157.471 },
+{ 123.535 , 104.492 , 218.994 , 138.428 }, { 204.346 , 94.4824 , 234.863 , 121.826 },
+{ 168.701 , 136.963 , 229.248 , 226.074 }, { 191.162 , 72.2656 , 192.871 , 65.4297 },
+{ 250.977 , 129.395 , 213.379 , 80.3223 }, { 133.789 , 34.9121 , 164.795 , 71.0449 },
+{ 122.803 , 16.1133 , 254.150 , 87.6465 }, { 191.895 , 23.6816 , 196.533 , 8.05664 },
+{ 204.346 , 114.746 , 124.756 , 11.9629 }, { 266.602 , 79.8340 , 286.621 , 78.8574 },
+{ 0.732422, 59.0820 , 212.891 , 115.723 }, { 168.213 , 104.736 , 324.463 , 165.527 },
+{ 254.395 , 151.367 , 270.752 , 162.109 }, { 78.3691 , 47.1191 , 217.041 , 231.934 },
+{ 281.494 , 213.379 , 218.018 , 155.029 }, { 214.111 , 210.449 , 231.445 , 222.900 },
+{ 315.674 , 162.354 , 322.266 , 156.006 }, { 243.408 , 193.604 , 342.285 , 251.465 },
+{ 287.109 , 247.070 , 270.996 , 234.131 }, { 344.238 , 225.830 , 342.529 , 223.389 },
+{ 132.568 , 210.449 , 272.461 , 298.340 }, { 203.857 , 290.527 , 203.857 , 290.527 },
+{ 234.131 , 280.273 , 280.029 , 335.938 }, { 317.383 , 291.260 , 345.459 , 300.537 },
+{ 325.928 , 327.393 , 182.129 , 266.602 }, { 417.725 , 313.232 , 339.111 , 261.963 },
+{ 325.684 , 382.324 , 281.494 , 360.107 }, { 401.611 , 277.588 , 445.557 , 297.852 },
+{ 257.813 , 337.402 , 371.338 , 422.363 }, { 398.438 , 377.197 , 395.508 , 376.465 },
+{ 208.740 , 389.648 , 211.182 , 406.982 }, { 169.189 , 216.064 , 418.945 , 370.850 },
+{ 284.912 , 316.406 , 539.307 , 429.688 }, { 476.563 , 364.502 , 493.164 , 361.816 },
+{ 374.512 , 455.566 , 413.574 , 490.234 }, { 382.324 , 182.617 , 429.932 , 201.416 },
+{ 71.7773 , 339.844 , 264.648 , 502.441 }, { 151.611 , 321.045 , 89.1113 , 314.209 },
+{ 48.3398 , 250.977 , 119.141 , 343.750 }, { 60.7910 , 98.3887 , 247.559 , 381.104 },
+{ 79.1016 , 88.6230 , 401.611 , 254.883 }, { 47.1191 , 89.5996 , 496.582 , 453.857 },
+{ -61.2793 , 141.357 , 183.105 , 242.676 }, { -59.3262 , 7.32422 , 323.486 , 214.600 },
+{ -6.83594 , -41.2598 , 152.344 , 223.877 }, {-110.596 , 38.8184 , 45.4102 , 334.473 },
+{-149.902 , 1.46484 , 131.104 , 95.7031 }, { -22.9492 , -71.0449 , 190.674 , 55.9082 },
+{ -31.2500 , -72.7539 , 59.8145 , 119.873 }, {-171.143 , -158.203 , 237.305 , 192.627 },
+{-122.314 , -156.250 , 43.4570 , 62.2559 }, { -89.1113 , -95.2148 , -62.2559 , 77.3926 },
+{-233.887 , -71.7773 , -46.6309 , 55.6641 }, {-189.209 , -109.131 , 38.3301 , -57.8613 },
+{-160.400 , -175.781 , -99.3652 , 22.4609 }, { -28.5645 , -149.170 , 81.5430 , -56.1523 },
+{-165.771 , -264.648 , -35.1563 , -77.3926 }, {-219.971 , -210.205 , -180.176 , -87.8906 },
+{ -20.7520 , -177.490 , -21.9727 , -192.139 }, { 24.4141 , -5.37109 , -95.4590 , -64.2090 },
+{ -13.6719 , -17.8223 , -82.2754 , -184.082 }, { 1.22070 , -46.1426 , -172.363 , -152.344 },
+{ 21.7285 , -83.9844 , -32.9590 , -271.729 }, { -86.1816 , -57.8613 , -166.992 , -277.100 },
+{ -67.1387 , -269.043 , -65.6738 , -293.701 }, { 37.1094 , 35.4004 , -176.270 , -300.781 },
+{ 11.9629 , 19.5313 , -304.688 , -189.453 }, { -60.5469 , 95.4590 , -178.711 , -133.545 },
+{ 114.502 , 53.2227 , -62.2559 , -210.938 }, { 16.8457 , 89.3555 , -40.5273 , -118.408 },
+{-167.969 , 46.6309 , -295.898 , -291.992 }, { -41.5039 , -41.2598 , -319.336 , -398.193 },
+{ 78.3691 , 114.746 , -346.436 , -303.467 }, { -15.6250 , 66.4063 , -332.275 , -60.5469 },
+{ 120.117 , 137.939 , -176.025 , -148.682 }, { 47.6074 , 118.408 , -139.893 , -32.4707 },
+{ 104.248 , 49.3164 , -41.7480 , -28.8086 }, { 48.5840 , 140.381 , 0.488281, -7.56836 },
+{ 169.434 , 184.326 , -333.496 , -9.52148 }, { 134.766 , 135.986 , -119.385 , 66.1621 },
+{ 166.016 , 131.104 , 3.17383 , -110.596 }, { 208.740 , 232.910 , -32.4707 , -12.6953 },
+{ -19.7754 , 180.176 , -285.400 , 155.518 }, { 257.568 , 258.545 , -23.1934 , 165.039 },
+{ 307.373 , 263.916 , 119.385 , 74.4629 }, {-109.619 , 232.910 , -130.371 , 243.164 },
+{-236.572 , 211.426 , -258.301 , 258.545 }, {-315.918 , 150.879 , -345.703 , 150.635 },
+{-111.816 , 333.496 , -38.8184 , 444.580 }, {-188.965 , -128.906 , -3.41797 , 270.996 },
+{-293.457 , -219.971 , -188.477 , 105.713 }, {-306.641 , -306.396 , -246.826 , -73.7305 },
+{-146.973 , -142.822 , -185.303 , -395.020 }, {-185.547 , -378.174 , -205.078 , -468.994 },
+{-199.219 , -131.592 , -431.885 , -545.654 }, { -55.4199 , -8.78906 , -496.582 , -447.021 },
+{-514.404 , -274.902 , -603.271 , -443.359 }, {-358.887 , 61.5234 , -659.424 , -101.318 },
+{-139.404 , -114.014 , 368.408 , 379.395 }, { 532.227 , 482.178 , 567.871 , 493.164 },
+};
+
+static const float lsf_5_4[256][4] = {
+{-453.369 , -410.400 , -453.369 , -428.467 }, {-501.953 , -280.762 , -520.996 , -403.809 },
+{-395.264 , -268.311 , -416.016 , -276.123 }, {-328.369 , -392.578 , -331.787 , -399.902 },
+{-326.660 , -315.674 , -323.486 , -308.838 }, {-406.250 , -402.588 , -363.037 , -207.764 },
+{-328.613 , -447.266 , -344.971 , -534.180 }, {-312.988 , -166.260 , -435.791 , -402.588 },
+{-235.840 , -264.160 , -288.818 , -409.180 }, {-257.324 , -261.963 , -278.809 , -282.715 },
+{-294.678 , -181.641 , -311.035 , -243.408 }, {-228.027 , -337.646 , -226.318 , -345.703 },
+{-246.582 , -318.604 , -191.162 , -233.154 }, {-256.104 , -219.727 , -242.432 , -199.463 },
+{-179.932 , -200.928 , -237.305 , -290.283 }, {-180.176 , -267.090 , -180.176 , -281.738 },
+{-191.406 , -195.557 , -197.754 , -191.895 }, {-217.773 , -126.953 , -244.141 , -199.707 },
+{-157.227 , -235.596 , -140.869 , -215.332 }, {-132.080 , -169.434 , -163.818 , -223.877 },
+{-145.264 , -156.738 , -157.715 , -150.146 }, {-233.398 , -151.611 , -225.830 , -125.732 },
+{-177.490 , -117.920 , -198.975 , -118.408 }, {-205.078 , -141.113 , -107.422 , -174.072 },
+{-141.113 , -79.3457 , -160.400 , -163.574 }, { -94.2383 , -139.160 , -107.666 , -162.598 },
+{-125.488 , -192.139 , -95.7031 , -129.150 }, {-127.441 , -110.596 , -118.896 , -103.271 },
+{-150.391 , -142.822 , -150.635 , -38.3301 }, {-161.621 , -65.4297 , -166.016 , -84.9609 },
+{ -78.6133 , -78.8574 , -154.297 , -108.398 }, { -74.2188 , -104.980 , -81.0547 , -111.816 },
+{ -67.6270 , -114.258 , -160.889 , -193.604 }, { -77.8809 , -155.273 , -55.4199 , -135.254 },
+{ -91.0645 , -84.7168 , -81.5430 , -51.2695 }, {-111.328 , -46.8750 , -129.395 , -59.0820 },
+{ -52.7344 , -48.3398 , -89.3555 , -90.3320 }, { -82.5195 , -39.3066 , -99.8535 , -182.617 },
+{ -26.1230 , -92.7734 , -71.7773 , -156.982 }, { -54.4434 , -162.354 , -57.1289 , -180.908 },
+{ -34.4238 , -121.094 , -31.7383 , -124.512 }, { -33.9355 , -79.8340 , -41.9922 , -74.4629 },
+{ -74.7070 , -141.602 , -40.0391 , -64.2090 }, { -63.9648 , -41.9922 , -16.3574 , -98.1445 },
+{ 7.56836 , -89.3555 , -2.44141 , -106.445 }, { -20.9961 , -128.662 , 17.3340 , -92.0410 },
+{ -5.37109 , -148.682 , -2.92969 , -165.527 }, { -16.3574 , -77.8809 , 15.3809 , -46.6309 },
+{ 8.54492 , -44.1895 , -9.52148 , -59.0820 }, { 30.7617 , -40.7715 , -34.1797 , -132.813 },
+{ 37.8418 , -72.5098 , 42.4805 , -72.5098 }, { 9.27734 , -1.95313 , 28.5645 , -92.7734 },
+{ 48.0957 , -110.352 , 58.5938 , -127.441 }, { 54.4434 , -25.1465 , 26.8555 , -45.6543 },
+{ 21.2402 , -37.8418 , 41.2598 , -11.4746 }, { 38.3301 , 6.34766 , -20.2637 , -24.4141 },
+{ 31.2500 , 19.5313 , 51.0254 , -15.1367 }, { 1.46484 , 1.70898 , 5.37109 , 1.22070 },
+{ 77.6367 , -4.88281 , 60.5469 , -10.9863 }, { -48.8281 , -15.3809 , 38.0859 , -16.8457 },
+{ 61.0352 , -44.6777 , 90.0879 , -30.7617 }, { -27.5879 , -18.5547 , -34.6680 , -29.7852 },
+{ -15.6250 , -62.0117 , -7.56836 , 8.54492 }, { -43.2129 , -17.3340 , -1.70898 , 41.7480 },
+{ 22.7051 , 6.59180 , 26.3672 , 51.7578 }, { -80.5664 , -51.0254 , -30.0293 , -17.0898 },
+{ -68.1152 , 23.1934 , -23.4375 , 4.88281 }, { -45.8984 , -14.8926 , -76.6602 , 21.2402 },
+{ -73.2422 , -19.0430 , -86.4258 , -32.7148 }, { 2.68555 , 29.7852 , -34.1797 , 29.7852 },
+{ -67.1387 , 37.1094 , -71.5332 , 34.1797 }, { -20.0195 , 33.6914 , -78.3691 , -27.0996 },
+{-117.188 , -38.0859 , -87.6465 , 18.5547 }, { -62.0117 , -9.76563 , -155.029 , -23.4375 },
+{-127.441 , 19.2871 , -123.779 , 1.95313 }, { -65.4297 , 73.9746 , -131.592 , 16.6016 },
+{-108.887 , 14.8926 , -127.441 , 74.7070 }, { 27.0996 , 46.1426 , -106.201 , 29.7852 },
+{ -92.5293 , 40.5273 , -139.404 , -97.1680 }, {-154.297 , -18.0664 , -182.373 , -23.1934 },
+{-111.084 , 47.3633 , -232.422 , 20.2637 }, {-194.824 , 46.8750 , -184.326 , 46.8750 },
+{-190.674 , -39.5508 , -151.123 , 57.1289 }, {-161.865 , -72.5098 , -119.141 , -26.6113 },
+{-235.352 , -32.2266 , -204.590 , -16.6016 }, {-205.811 , 14.1602 , -271.484 , -20.9961 },
+{-196.533 , -72.9980 , -230.469 , -61.7676 }, {-189.941 , -12.2070 , -235.596 , -134.033 },
+{ -85.9375 , -23.9258 , -242.188 , -83.7402 }, {-272.705 , -76.9043 , -272.705 , -74.9512 },
+{-281.982 , -91.3086 , -155.518 , -56.1523 }, {-284.668 , -10.4980 , -317.139 , -24.4141 },
+{-225.830 , -95.9473 , -311.035 , -146.484 }, {-168.213 , -31.7383 , -361.084 , -76.1719 },
+{-322.510 , -62.0117 , -357.422 , -107.910 }, {-315.430 , -149.658 , -307.861 , -122.803 },
+{-366.455 , -89.8438 , -322.754 , 6.34766 }, {-349.609 , -16.1133 , -425.537 , -39.3066 },
+{-401.367 , -114.014 , -429.688 , -133.789 }, {-340.088 , -138.672 , -379.883 , -212.646 },
+{-364.990 , -252.441 , -338.623 , -139.404 }, {-468.018 , -128.906 , -435.303 , -30.0293 },
+{-463.135 , -56.3965 , -501.465 , -78.8574 }, {-500.977 , -221.191 , -482.422 , -138.428 },
+{-468.018 , -151.367 , -499.756 , -241.455 }, {-262.939 , -90.3320 , -495.850 , -171.875 },
+{-574.951 , -182.861 , -668.945 , -265.869 }, {-466.064 , 38.8184 , -491.211 , 60.5469 },
+{-152.832 , -30.0293 , -571.045 , -234.863 }, {-163.330 , -99.6094 , -336.670 , -286.621 },
+{-110.352 , -88.8672 , -254.883 , -179.443 }, { -32.2266 , 44.6777 , -395.508 , -183.594 },
+{-133.545 , -74.9512 , -189.697 , -307.861 }, { -23.9258 , 10.0098 , -214.844 , -266.357 },
+{ -62.7441 , 23.6816 , -391.113 , -447.510 }, { 7.56836 , -6.34766 , -157.227 , -136.963 },
+{ -43.9453 , -133.301 , -93.9941 , -267.334 }, {-100.098 , -195.801 , -101.074 , -201.904 },
+{-111.572 , -236.816 , -119.629 , -270.752 }, { -52.4902 , -223.633 , -35.1563 , -228.760 },
+{-120.361 , -309.814 , -126.221 , -367.920 }, { 44.1895 , 24.6582 , -81.0547 , -217.041 },
+{-204.102 , -228.760 , -136.475 , -104.736 }, {-153.564 , -133.545 , -44.6777 , -82.2754 },
+{-133.057 , -20.0195 , -61.0352 , -69.8242 }, { 1.22070 , -32.2266 , -84.9609 , -61.5234 },
+{ -71.5332 , -115.234 , -38.5742 , 24.4141 }, { -7.08008 , 48.0957 , -57.6172 , -103.516 },
+{-210.205 , -52.0020 , -34.1797 , -1.70898 }, {-104.248 , -108.154 , 45.6543 , -23.6816 },
+{-166.992 , -179.688 , -71.5332 , 62.9883 }, { -89.8438 , -37.1094 , -36.6211 , 95.7031 },
+{-148.682 , 42.7246 , -34.6680 , 72.9980 }, { -33.6914 , 37.1094 , -29.0527 , 80.3223 },
+{-118.652 , -12.6953 , 71.5332 , 48.3398 }, { -44.6777 , 28.5645 , 42.7246 , 80.8105 },
+{ -14.1602 , -66.8945 , 56.3965 , 73.2422 }, { -70.3125 , 80.5664 , -74.4629 , 90.8203 },
+{ -27.0996 , 99.8535 , -2.19727 , 103.271 }, { 20.2637 , 62.5000 , 16.3574 , 89.5996 },
+{ -4.63867 , 60.5469 , 22.2168 , 27.5879 }, { -8.54492 , 99.1211 , -46.6309 , 37.5977 },
+{ 58.1055 , 72.2656 , 1.22070 , 48.0957 }, { 34.4238 , 53.9551 , 76.4160 , 48.3398 },
+{ 51.5137 , 102.783 , 59.5703 , 81.5430 }, { 21.4844 , 104.004 , -59.3262 , 110.840 },
+{ 49.3164 , 134.766 , -1.22070 , 98.3887 }, { 71.0449 , 45.1660 , 53.4668 , 73.4863 },
+{ 61.2793 , 33.6914 , 31.2500 , 16.8457 }, { 48.0957 , 70.3125 , -34.1797 , -14.8926 },
+{ 45.8984 , 88.1348 , 48.0957 , 145.996 }, { 107.910 , 66.6504 , 70.8008 , 34.9121 },
+{ 115.234 , 117.676 , 38.3301 , 90.3320 }, { 101.318 , 78.3691 , 90.8203 , 93.9941 },
+{ 98.1445 , 134.766 , 37.8418 , 5.85938 }, { 134.277 , 64.2090 , -2.68555 , 5.12695 },
+{ 87.8906 , 55.4199 , 35.8887 , -62.0117 }, { 103.516 , 23.6816 , 89.3555 , -3.17383 },
+{ 91.5527 , 34.4238 , 109.619 , 56.6406 }, { 96.6797 , 123.779 , 115.723 , 66.4063 },
+{ 171.143 , 79.1016 , 88.3789 , -11.4746 }, { 143.311 , 36.1328 , 132.568 , 16.8457 },
+{ 97.6563 , -12.4512 , 136.963 , 14.4043 }, { 53.7109 , -2.44141 , 85.9375 , 35.8887 },
+{ 50.2930 , 51.5137 , 159.424 , 45.1660 }, { 137.451 , 72.5098 , 137.939 , 69.3359 },
+{ 145.020 , 29.5410 , 187.012 , 46.8750 }, { 97.1680 , 28.8086 , 156.738 , 105.957 },
+{ 56.8848 , 64.4531 , 117.432 , 114.014 }, { 31.4941 , -40.2832 , 170.654 , 58.3496 },
+{ 21.9727 , 6.34766 , 83.4961 , 115.723 }, { -13.4277 , 6.59180 , 94.7266 , 22.9492 },
+{ -41.9922 , 0.000000, 177.002 , 92.5293 }, { -14.6484 , 82.2754 , 90.3320 , 113.525 },
+{ 23.1934 , 77.8809 , 196.777 , 145.264 }, { 19.0430 , 63.4766 , 121.338 , 207.764 },
+{ 51.2695 , 136.719 , 111.816 , 140.137 }, {-113.281 , 49.3164 , 121.338 , 152.588 },
+{ -49.3164 , 37.1094 , 11.7188 , 173.828 }, { -4.88281 , 138.184 , 24.4141 , 174.561 },
+{ 111.084 , 114.258 , 100.342 , 147.705 }, { 77.8809 , 157.715 , 47.6074 , 150.146 },
+{ 97.9004 , 131.348 , 166.016 , 180.420 }, { 49.0723 , 162.842 , 105.957 , 232.910 },
+{ 110.840 , 103.760 , 157.715 , 119.873 }, { 147.949 , 166.260 , 101.563 , 124.023 },
+{ 121.338 , 200.684 , 104.004 , 198.975 }, { 161.133 , 157.959 , 153.320 , 174.805 },
+{ 170.166 , 113.770 , 150.879 , 111.572 }, { 167.236 , 112.305 , 89.1113 , 75.4395 },
+{ 176.025 , 138.428 , 204.102 , 146.729 }, { 148.682 , 73.2422 , 201.416 , 112.061 },
+{ 230.225 , 167.725 , 166.260 , 130.127 }, { 223.389 , 145.996 , 144.287 , 59.3262 },
+{ 213.867 , 110.107 , 213.379 , 102.539 }, { 191.895 , 77.3926 , 178.711 , 53.7109 },
+{ 225.098 , 77.3926 , 270.508 , 89.5996 }, { 129.639 , 113.770 , 250.977 , 158.447 },
+{ 257.080 , 150.146 , 252.441 , 135.010 }, { 202.393 , 146.973 , 249.268 , 195.068 },
+{ 226.318 , 196.045 , 214.355 , 186.279 }, { 195.068 , 121.094 , 335.205 , 188.721 },
+{ 142.822 , 187.988 , 196.045 , 227.051 }, { 268.311 , 193.604 , 298.340 , 210.449 },
+{ 295.166 , 218.506 , 250.244 , 177.490 }, { 188.477 , 206.299 , 286.133 , 272.217 },
+{ 211.670 , 249.268 , 202.637 , 247.314 }, { 205.322 , 222.168 , 123.535 , 171.631 },
+{ 302.490 , 262.939 , 151.367 , 199.951 }, { 291.992 , 264.404 , 281.982 , 263.916 },
+{ 278.809 , 221.436 , 377.686 , 273.682 }, { 319.580 , 158.203 , 327.881 , 149.414 },
+{ 362.305 , 241.211 , 361.084 , 228.760 }, { 240.479 , 324.219 , 233.154 , 327.393 },
+{ 104.736 , 222.168 , 205.322 , 326.660 }, { 137.695 , 287.842 , 100.586 , 282.227 },
+{ 348.389 , 322.266 , 350.098 , 324.707 }, { 156.250 , 185.547 , 421.387 , 344.238 },
+{ 46.3867 , 135.498 , 261.963 , 245.361 }, { 104.004 , 62.7441 , 204.834 , 239.258 },
+{ 57.3730 , 56.3965 , 371.094 , 284.912 }, { 26.6113 , 71.5332 , 247.559 , 383.057 },
+{ 74.4629 , 34.6680 , 280.273 , 131.592 }, { -71.0449 , -26.3672 , 296.143 , 237.305 },
+{ 5.37109 , -52.7344 , 162.842 , 202.148 }, {-117.676 , 106.934 , 110.596 , 349.365 },
+{-141.846 , -103.027 , 192.627 , 94.4824 }, { -87.4023 , -110.840 , 42.4805 , 190.430 },
+{ -8.78906 , -90.8203 , 95.2148 , -32.7148 }, {-153.564 , 39.0625 , -74.7070 , 183.350 },
+{-307.129 , -80.8105 , 43.2129 , 127.441 }, { -60.5469 , 140.137 , -61.2793 , 156.006 },
+{-129.639 , 99.3652 , -145.508 , 96.1914 }, {-102.295 , 192.627 , -150.635 , 195.557 },
+{-240.723 , 97.4121 , -209.229 , 177.490 }, { -1.70898 , 126.465 , -171.631 , 75.6836 },
+{-279.053 , -5.85938 , -244.629 , 70.0684 }, {-234.375 , 88.6230 , -317.139 , 76.1719 },
+{-374.512 , 59.8145 , -380.127 , 74.4629 }, { 6.83594 , 37.3535 , -209.717 , -42.7246 },
+{ -8.05664 , 81.0547 , -341.309 , -37.5977 }, { 51.7578 , 100.098 , -144.775 , -48.0957 },
+{-266.602 , -171.875 , -220.703 , -15.8691 }, { 68.8477 , 89.5996 , -224.121 , -167.480 },
+{ 84.2285 , 22.7051 , -62.9883 , -87.1582 }, { 169.922 , 157.227 , -169.189 , -6.83594 },
+{ 109.375 , 120.361 , -66.6504 , 47.1191 }, { 128.662 , 133.301 , -59.3262 , -125.244 },
+{ 93.7500 , -33.2031 , 66.6504 , -86.1816 }, { 125.000 , -34.6680 , 131.104 , -48.3398 },
+{ 229.736 , 183.105 , 20.2637 , 60.5469 }, { 141.113 , 210.205 , -13.6719 , 144.531 },
+{ 205.566 , 10.7422 , 217.773 , 5.85938 }, { 8.05664 , 217.285 , -3.90625 , 239.746 },
+{ 202.881 , 341.309 , 374.756 , 463.379 }, { 418.945 , 335.938 , 475.586 , 357.666 },
+};
+
+static const float lsf_5_5[64][4] = {
+{-244.629 , -226.807 , -267.578 , -293.701 }, {-156.494 , -227.295 , -147.461 , -234.619 },
+{-190.186 , -164.307 , -203.857 , -192.383 }, {-101.563 , -162.109 , -111.816 , -187.012 },
+{-159.180 , -127.197 , -161.621 , -120.850 }, {-249.756 , -124.268 , -249.756 , -104.492 },
+{-108.398 , -134.766 , -89.8438 , -109.619 }, {-116.943 , -51.5137 , -257.324 , -220.459 },
+{ -77.1484 , -60.7910 , -138.916 , -144.287 }, {-138.916 , -67.1387 , -132.080 , -46.6309 },
+{-174.805 , -45.8984 , -205.566 , -64.4531 }, { -81.2988 , -60.5469 , -77.6367 , -55.6641 },
+{ -67.1387 , 0.244141, -138.428 , -55.6641 }, { -28.0762 , -53.9551 , -58.1055 , -91.3086 },
+{ -48.0957 , -123.779 , -54.1992 , -141.357 }, { -62.9883 , -105.469 , -14.8926 , -59.5703 },
+{ -84.2285 , 0.488281, -82.5195 , 9.52148 }, { -52.4902 , -41.2598 , -14.1602 , 0.000000},
+{ -13.6719 , -1.46484 , -49.5605 , -31.9824 }, { 0.244141, -45.4102 , -1.22070 , -51.5137 },
+{ 1.46484 , -92.7734 , 2.68555 , -102.051 }, { -28.3203 , 31.9824 , -32.7148 , 27.5879 },
+{ 21.7285 , -0.976563, 17.3340 , -0.488281}, { -4.63867 , -46.8750 , 63.9648 , 5.85938 },
+{ 46.1426 , 36.8652 , -32.4707 , -26.6113 }, { 45.4102 , -37.3535 , 40.5273 , -53.4668 },
+{ 9.03320 , 33.9355 , 47.1191 , 41.7480 }, { 82.2754 , 30.2734 , 38.5742 , -14.8926 },
+{ 34.4238 , 55.1758 , -3.17383 , 46.3867 }, { 56.3965 , 8.30078 , 86.4258 , 26.6113 },
+{ 77.1484 , 49.0723 , 59.5703 , 40.0391 }, { 80.5664 , -20.7520 , 95.2148 , -20.5078 },
+{ 62.0117 , 79.8340 , 62.7441 , 81.7871 }, { 119.873 , 35.8887 , 116.211 , 25.6348 },
+{ 13.1836 , 18.7988 , 106.689 , 90.3320 }, { 102.783 , 76.6602 , 109.619 , 83.4961 },
+{ 80.3223 , 30.7617 , 164.307 , 71.2891 }, { 139.404 , 94.7266 , 59.3262 , 47.1191 },
+{ 159.424 , 78.1250 , 151.611 , 68.3594 }, { 47.3633 , 92.7734 , 126.221 , 141.846 },
+{ 10.9863 , 78.8574 , 27.0996 , 103.027 }, { 119.385 , 96.4355 , 179.199 , 130.371 },
+{ 151.855 , 133.301 , 118.652 , 122.559 }, { 77.6367 , 139.648 , 46.1426 , 134.277 },
+{ 93.9941 , 103.027 , -38.3301 , 37.3535 }, { -30.5176 , 93.2617 , -48.0957 , 94.2383 },
+{ -64.2090 , 81.5430 , 55.6641 , 170.166 }, { -45.8984 , 0.244141, 12.4512 , 72.5098 },
+{-123.779 , 52.0020 , -91.7969 , 96.9238 }, { -5.85938 , 62.2559 , -133.545 , 21.7285 },
+{-122.559 , -22.9492 , 94.4824 , 43.7012 }, {-151.367 , 16.6016 , -166.992 , 27.3438 },
+{-156.738 , -85.4492 , -63.4766 , 41.9922 }, {-106.934 , -79.1016 , 64.4531 , 158.203 },
+{-235.352 , -0.976563, -273.682 , 1.70898 }, { -32.7148 , 32.7148 , -276.611 , -74.7070 },
+{ 34.9121 , 23.4375 , -102.539 , -121.338 }, {-298.096 , -85.4492 , -372.803 , -167.236 },
+{ -39.3066 , 17.5781 , 213.135 , 168.701 }, { 178.711 , 69.0918 , 224.854 , 86.1816 },
+{ 81.5430 , 115.967 , 267.334 , 200.439 }, { 210.938 , 127.930 , 205.811 , 121.338 },
+{ 174.316 , 173.584 , 192.383 , 183.105 }, { 262.695 , 174.316 , 293.945 , 183.838 },
+};
+
+static const float lsf_mean_3[LP_FILTER_ORDER] = {
+ 377.441, 554.688, 922.363, 1339.84 , 1702.15 ,
+2046.39 , 2452.88 , 2741.46 , 3116.70 , 3348.14 ,
+};
+
+static const float lsf_mean_5[LP_FILTER_ORDER] = {
+ 337.891, 507.80 , 834.961, 1247.7 , 1646.0 ,
+1982.91 , 2407.96 , 2708.1 , 3104.0 , 3344.97 ,
+};
+
+static const float pred_fac[LP_FILTER_ORDER] = {
+0.291626, 0.328644, 0.383636, 0.405640, 0.438873,
+0.355560, 0.323120, 0.298065, 0.262238, 0.197876,
+};
+
+#define PRED_FAC_MODE_122 0.65
+#define FREQ_LSP_FAC 2*M_PI/8000.0
+
+
+/**************************** end of tables *****************************/
Added: amr/amrnbfloatdec.c
==============================================================================
--- (empty file)
+++ amr/amrnbfloatdec.c Wed Oct 3 20:17:27 2007
@@ -0,0 +1,458 @@
+/*
+ * AMR narrowband decoder (floating point)
+ * Copyright (c) 2006-2007 Robert Swain
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+/**
+ * @file amrnbfloatdec.c
+ * AMR narrowband decoder (floating point)
+ */
+
+
+#include <math.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "avcodec.h"
+#include "bitstream.h"
+#include "common.h"
+#include "amrnbfloatdata.h"
+
+typedef struct AMRContext {
+
+ GetBitContext gb;
+ int16_t *sample_buffer;
+
+ int16_t *amr_prms; ///< pointer to the decoded amr parameters (lsf coefficients, codebook indices, etc)
+ int bad_frame_indicator; ///< bad frame ? 1 : 0
+
+ float prev_lsf_r[LP_FILTER_ORDER];
+ float lsp[4][LP_FILTER_ORDER]; ///< lsp vectors from current frame
+ float prev_lsp_sub4[LP_FILTER_ORDER]; ///< lsp vector for the 4th subframe of the previous frame
+
+ float lpc[4][LP_FILTER_ORDER]; ///< vectors of lpc coefficients for 4 subframes
+
+} AMRContext;
+
+
+static int amrnb_decode_init(AVCodecContext *avctx) {
+ AMRContext *p = avctx->priv_data;
+
+ // allocate and zero the 16-bit mono sample buffer
+ p->sample_buffer = av_mallocz(sizeof(int16_t)*AMR_BLOCK_SIZE);
+ // allocate and zero the amr parameters
+ p->amr_prms = av_mallocz(sizeof(int16_t)*PRMS_MODE_122);
+
+ /* Check if the allocation was successful */
+ if(p->sample_buffer == NULL)
+ return -1;
+ // Check amr_prms allocation
+ if(p->amr_prms == NULL)
+ return -1;
+
+ /* return 0 for a successful init, -1 for failure */
+ return 0;
+}
+
+
+/**
+ * Decode the bitstream into the AMR parameters and discover the frame mode
+ *
+ * @param buf pointer to the input buffer
+ * @param buf_size size of the input buffer
+ * @param speech_mode pointer to the speech mode
+ *
+ * @return Returns the frame mode
+ */
+
+enum Mode decode_bitstream(AMRContext *p, uint8_t *buf, int buf_size, enum Mode *speech_mode) {
+ enum Mode mode;
+ int i;
+ const AMROrder *order;
+
+ // initialise get_bits
+ init_get_bits(&p->gb, buf, buf_size*8);
+ skip_bits1(&p->gb);
+ // set the mode
+ mode = get_bits(&p->gb ,4);
+ // set the bad frame indicator based on the quality bit
+ p->bad_frame_indicator = !get_bits1(&p->gb);
+ skip_bits(&p->gb, 2);
+
+ switch(mode) {
+ case MODE_DTX:
+ order = order_MODE_DTX;
+ p->cur_frame_type = RX_SID_FIRST; // get SID type bit
+ break;
+ case NO_DATA:
+ p->cur_frame_type = RX_NO_DATA;
+ break;
+ case MODE_475:
+ order = order_MODE_475;
+ p->cur_frame_type = RX_SPEECH_GOOD;
+ break;
+ case MODE_515:
+ order = order_MODE_515;
+ p->cur_frame_type = RX_SPEECH_GOOD;
+ break;
+ case MODE_59:
+ order = order_MODE_59;
+ p->cur_frame_type = RX_SPEECH_GOOD;
+ break;
+ case MODE_67:
+ order = order_MODE_67;
+ p->cur_frame_type = RX_SPEECH_GOOD;
+ break;
+ case MODE_74:
+ order = order_MODE_74;
+ p->cur_frame_type = RX_SPEECH_GOOD;
+ break;
+ case MODE_795:
+ order = order_MODE_795;
+ p->cur_frame_type = RX_SPEECH_GOOD;
+ break;
+ case MODE_102:
+ order = order_MODE_102;
+ p->cur_frame_type = RX_SPEECH_GOOD;
+ break;
+ case MODE_122:
+ order = order_MODE_122;
+ p->cur_frame_type = RX_SPEECH_GOOD;
+ break;
+ default:
+ p->cur_frame_type = RX_SPEECH_BAD;
+ break;
+ }
+
+ // reorder the bitstream to match the bit allocation in the specification
+ if((p->cur_frame_type != RX_NO_DATA) && (p->cur_frame_type != RX_SPEECH_BAD)) {
+ for(i=0; i<mode_bits[mode]; i++) {
+ p->amr_prms[ order[i].array_element ] += get_bits1(&p->gb) * (1<< order[i].bit_mask);
+ }
+ }
+
+ if(mode == MODE_DTX) {
+ skip_bits(&p->gb, 4); // skip to the next byte
+ if(get_bits1(&p->gb)) // use the update if there is one
+ p->cur_frame_type = RX_SID_UPDATE;
+ *speech_mode = get_bits(&p->gb, 3); // speech mode indicator
+ }
+
+ return mode;
+}
+
+
+/*** LPC coefficient decoding functions ***/
+
+/**
+ * Convert an lsf vector into an lsp vector
+ *
+ * @param lsf input lsf vector
+ * @param lsp output lsp vector
+ *
+ * @return void
+ */
+
+static void lsf2lsp(float *lsf, float *lsp) {
+ int i;
+
+ for(i=0; i<LP_FILTER_ORDER; i++) {
+ lsp[i] = cos(lsf[i]*FREQ_LSP_FAC); // FREQ_LSP_FAC = 2*M_PI/8000.0
+ }
+}
+
+/**
+ * Decode a set of 5 split-matrix quantised lsf indices into an lsp vector
+ *
+ * @param p pointer to the AMRContext
+ *
+ * @return void
+ */
+
+static void lsf2lsp_5(AMRContext *p) {
+ float lsf_r[2][LP_FILTER_ORDER]; // residual LSF vectors
+ float lsf_q[2][LP_FILTER_ORDER]; // quantified LSF vectors
+ float sign;
+ int idx;
+
+ // decode split-matrix quantized residual LSF vectors
+
+ idx = p->amr_prms[0];
+ lsf_r[0][0] = lsf_5_1[ idx ][0];
+ lsf_r[0][1] = lsf_5_1[ idx ][1];
+ lsf_r[1][0] = lsf_5_1[ idx ][2];
+ lsf_r[1][1] = lsf_5_1[ idx ][3];
+
+ idx = p->amr_prms[1];
+ lsf_r[0][2] = lsf_5_2[ idx ][0];
+ lsf_r[0][3] = lsf_5_2[ idx ][1];
+ lsf_r[1][2] = lsf_5_2[ idx ][2];
+ lsf_r[1][3] = lsf_5_2[ idx ][3];
+
+ // lsb of p->amr_prms[2] is the sign bit
+ sign = (p->amr_prms[2] & 1) ? -1.0 : 1.0;
+ idx = p->amr_prms[2]>>1;
+ lsf_r[0][4] = lsf_5_3[ idx ][0]*sign;
+ lsf_r[0][5] = lsf_5_3[ idx ][1]*sign;
+ lsf_r[1][4] = lsf_5_3[ idx ][2]*sign;
+ lsf_r[1][5] = lsf_5_3[ idx ][3]*sign;
+
+ idx = p->amr_prms[3];
+ lsf_r[0][6] = lsf_5_4[ idx ][0];
+ lsf_r[0][7] = lsf_5_4[ idx ][1];
+ lsf_r[1][6] = lsf_5_4[ idx ][2];
+ lsf_r[1][7] = lsf_5_4[ idx ][3];
+
+ idx = p->amr_prms[4];
+ lsf_r[0][8] = lsf_5_5[ idx ][0];
+ lsf_r[0][9] = lsf_5_5[ idx ][1];
+ lsf_r[1][8] = lsf_5_5[ idx ][2];
+ lsf_r[1][9] = lsf_5_5[ idx ][3];
+
+ // calculate mean-removed LSF vectors and add mean
+ for(i=0; i<LP_FILTER_ORDER; i++) {
+ float temp = p->prev_lsf_r[i]*PRED_FAC_MODE_122 + lsf_5_mean[i];
+ lsf_q[0][i] = lsf_r[0][i] + temp;
+ lsf_q[1][i] = lsf_r[1][i] + temp;
+ }
+ // update residual LSD vector from previous subframe
+ memcpy(p->prev_lsf_r, lsf_r[1], LP_FILTER_ORDER*sizeof(float));
+
+ // convert LSF vectors to LSP vectors
+ lsf2lsp(lsf_q[0], p->lsp[1]);
+ lsf2lsp(lsf_q[1], p->lsp[3]);
+}
+
+/**
+ * Decode a set of 3 split-matrix quantised lsf indices into an lsp vector
+ *
+ * @param p pointer to the AMRContext
+ *
+ * @return void
+ */
+
+static void lsf2lsp_3(AMRContext *p) {
+ float lsf_r[LP_FILTER_ORDER]; // residual LSF vector
+ float lsf_q[LP_FILTER_ORDER]; // quantified LSF vector
+ const float (*lsf_3_1_tmp)[3], (*lsf_3_3_tmp)[4]; // temp ptrs for switching tables depending on mode
+ float sign;
+ int idx, i;
+
+ // assign lsf tables according to mode
+ if((p->cur_frame_mode == MODE_475) || (p->cur_frame_mode == MODE_515)) {
+ lsf_3_1_tmp = lsf_3_1;
+ lsf_3_3_tmp = lsf_3_MODE_515;
+ }else if(p->cur_frame_mode == MODE_795) {
+ lsf_3_1_tmp = lsf_3_MODE_795;
+ lsf_3_3_tmp = lsf_3_3;
+ }else {
+ lsf_3_1_tmp = lsf_3_1;
+ lsf_3_3_tmp = lsf_3_3;
+ }
+
+ // decode split-matrix quantized residual LSF vector
+
+ idx = p->amr_prms[0];
+ lsf_r[0] = lsf_3_1_tmp[ idx ][0];
+ lsf_r[1] = lsf_3_1_tmp[ idx ][1];
+ lsf_r[2] = lsf_3_1_tmp[ idx ][2];
+
+ idx = p->amr_prms[1];
+ // MODE_475, MODE_515 only use every other entry as their indices are stored
+ // using 1 less bit (8-bits vs 9-bits)
+ if((p->cur_frame_mode == MODE_475) || (p->cur_frame_mode == MODE_515)) {
+ idx <<= 1;
+ }
+ lsf_r[3] = lsf_3_2[ idx ][0];
+ lsf_r[4] = lsf_3_2[ idx ][1];
+ lsf_r[5] = lsf_3_2[ idx ][2];
+
+ lsf_r[6] = lsf_3_3_tmp[ idx ][0];
+ lsf_r[7] = lsf_3_3_tmp[ idx ][1];
+ lsf_r[8] = lsf_3_3_tmp[ idx ][2];
+ lsf_r[9] = lsf_3_3_tmp[ idx ][3];
+
+ // calculate mean-removed LSF vector and add mean
+ for(i=0; i<LP_FILTER_ORDER; i++) {
+ lsf_q[i] = lsf_r[i] + p->prev_lsf_r[i]*pred_fac[i] + lsf_3_mean[i];
+ }
+ // update residual LSF vector from previous subframe
+ memcpy(p->prev_lsf_r, lsf_r, LP_FILTER_ORDER*sizeof(float));
+
+ // convert LSF vector to LSP vector
+ lsf2lsp(lsf_q, p->lsp[3]);
+}
+
+/**
+ * Interpolate lsp vectors for subframes 1 and 3
+ *
+ * @param p pointer to the AMRContext
+ *
+ * @return void
+ */
+
+static void interp_lsp_13(AMRContext *p) {
+ int i;
+
+ for(i=0; i<LP_FILTER_ORDER; i++) {
+ p->lsp[0][i] = 0.5*(p->prev_lsp_sub4[i] + p->lsp[1][i]);
+ p->lsp[2][i] = 0.5*( p->lsp[1][i] + p->lsp[3][i]);
+ }
+}
+
+/**
+ * Interpolate lsp vectors for subframes 1, 2 and 3
+ *
+ * @param p pointer to the AMRContext
+ *
+ * @return void
+ */
+
+static void interp_lsp_123(AMRContext *p) {
+ int i;
+
+ for(i=0; i<LP_FILTER_ORDER; i++) {
+ p->lsp[0][i] = 0.75*p->prev_lsp_sub4[i] + 0.25*p->lsp[3][i];
+ p->lsp[1][i] = 0.5*(p->prev_lsp_sub4[i] + p->lsp[3][i]);
+ p->lsp[2][i] = 0.25*p->prev_lsp_sub4[i] + 0.75*p->lsp[3][i];
+ }
+}
+
+/**
+ * Find the polynomial F1(z) or F2(z) from the lsp vectors
+ *
+ * @param lsp input lsp vector
+ * @param f pointer to the polynomial F1(z) or F2(z)
+ *
+ * @return void
+ */
+
+static void lsp2poly(float *lsp, float *f) {
+ int i, j;
+
+ f[0] = 0.0;
+ f[1] = 1.0;
+
+ for(i=2; i<7; i++) {
+ int idx_lsp = 2*i-4;
+ f[i] = 2.0*(-lsp[idx_lsp]*f[i-1] + f[i-2]);
+ for(j=i-1; j>0; j--) {
+ f[j] += -2.0*lsp[idx_lsp]*f[j-1] + f[j-2];
+ }
+ }
+}
+
+/**
+ * Convert an lsp vector to lpc coefficients
+ *
+ * @param lsp input lsp vector
+ * @param lpc output lpc coefficients
+ *
+ * @return void
+ */
+
+static void lsp2lpc(float *lsp, float *lpc_coeffs) {
+ float f1[6], f2[6];
+ int i;
+
+ // find F1(z) and F2(z) from the lsps
+ lsp2poly(&lsp[0], f1);
+ lsp2poly(&lsp[1], f2);
+
+ // multiply F1(z) by 1+z^{-1} and F2(z) by 1-z^{-1} to obtain F1'(z) and F2'(z)
+ for(i=5; i>0; i--) {
+ f1[i] += f1[i-1];
+ f2[i] -= f2[i-1];
+ }
+
+ // A(z) = ( F1'(z) + F2'(z) )/2
+ // note f1 and f2 are actually f1' and f2'
+ for(i=0; i<5; i++) {
+ lpc_coeffs[i] = 0.5*(f1[i+1] + f2[i+1]); // lpc 0..4 uses indices to f, 1..5
+ lpc_coeffs[i+5] = 0.5*(f1[5-i] - f2[5-i]); // lpc 5..9 uses indices to f, 5..1
+ }
+}
+
+/*** end of LPC coefficient decoding functions ***/
+
+
+static int amrnb_decode_frame(AVCodecContext *avctx,
+ void *data, int *data_size, uint8_t *buf, int buf_size) {
+
+ AMRContext *p = avctx->priv_data; // pointer to private data
+ int16_t *buf_out = data; // pointer to the output data buffer
+ int i; // counter
+ enum Mode speech_mode = MODE_475; // ???
+
+ // decode the bitstream to amr parameters
+ p->cur_frame_mode = decode_bitstream(p, buf, buf_size, &speech_mode);
+
+/*** LPC coefficient decoding ***/
+
+ if(p->cur_frame_mode == MODE_122) {
+ // decode split-matrix quantised lsf vector indices to lsp vectors
+ lsf2lsp_5(p);
+ // interpolate LSP vectors at subframes 1 and 3
+ interp_lsp_13(p);
+ }else {
+ // decode split-matrix quantised lsf vector indices to an lsp vector
+ lsf2lsp_3(p);
+ // interpolate LSP vectors at subframes 1, 2 and 3
+ interp_lsp_123(p);
+ }
+
+ // convert LSP vectors to LPC coefficient vectors
+ for(i=0; i<4; i++) {
+ lsp2lpc(p->lsp[i], p->lpc[i]);
+ }
+
+/*** end of LPC coefficient decoding ***/
+
+ /* Report how many samples we got */
+ *data_size = buf_size;
+
+ /* Return the amount of bytes consumed if everything was ok */
+ return *data_size*sizeof(int16_t);
+}
+
+
+static int amrnb_decode_close(AVCodecContext *avctx) {
+ AMRContext *p = avctx->priv_data;
+
+ /* Free allocated memory */
+ av_free(p->sample_buffer);
+ av_free(p->amr_prms);
+
+ /* Return 0 if everything is ok, -1 if not */
+ return 0;
+}
+
+
+AVCodec amrnb_decoder =
+{
+ .name = "amrnb",
+ .type = CODEC_TYPE_AUDIO,
+ .id = CODEC_ID_AMR_NB,
+ .priv_data_size = sizeof(AMRContext),
+ .init = amrnb_decode_init,
+ .close = amrnb_decode_close,
+ .decode = amrnb_decode_frame,
+};
More information about the FFmpeg-soc
mailing list