[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