shithub: opus

Download patch

ref: 3116093d34f794238acdc8c509dea6ace3aa1b95
parent: ea3eb56a01a39415312ad8c6b2021724b144cb34
author: Jean-Marc Valin <jeanmarcv@google.com>
date: Mon May 27 12:29:56 EDT 2024

Support for full 32-bit FFT/MDCT twiddles/scaling

--- a/celt/_kiss_fft_guts.h
+++ b/celt/_kiss_fft_guts.h
@@ -54,8 +54,13 @@
 
 #define SAMP_MIN -SAMP_MAX
 
-
+#ifdef ENABLE_QEXT
+#   define S_MUL(a,b) MULT32_32_Q31(b, a)
+#   define S_MUL2(a,b) MULT32_32_Q31(b, a)
+#else
 #   define S_MUL(a,b) MULT16_32_Q15(b, a)
+#   define S_MUL2(a,b) MULT16_32_Q16(b, a)
+#endif
 
 #   define C_MUL(m,a,b) \
       do{ (m).r = SUB32_ovflw(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \
@@ -104,6 +109,7 @@
 #else  /* not FIXED_POINT*/
 
 #   define S_MUL(a,b) ( (a)*(b) )
+#   define S_MUL2(a,b) ( (a)*(b) )
 #define C_MUL(m,a,b) \
     do{ (m).r = (a).r*(b).r - (a).i*(b).i;\
         (m).i = (a).r*(b).i + (a).i*(b).r; }while(0)
--- a/celt/arch.h
+++ b/celt/arch.h
@@ -173,6 +173,12 @@
 #define INT16TOSIG(a)   SHL32(EXTEND32(a), SIG_SHIFT)
 #define INT24TOSIG(a)   SHL32(a, SIG_SHIFT-8)
 
+#ifdef ENABLE_QEXT
+typedef opus_val32 celt_coef;
+#else
+typedef opus_val16 celt_coef;
+#endif
+
 #define celt_isnan(x) 0
 
 #define Q15ONE 32767
@@ -239,6 +245,7 @@
 typedef float celt_glog;
 
 typedef float opus_res;
+typedef float celt_coef;
 
 #ifdef FLOAT_APPROX
 /* This code should reliably detect NaN/inf even when -ffast-math is used.
--- a/celt/dump_modes/dump_modes.c
+++ b/celt/dump_modes/dump_modes.c
@@ -49,6 +49,11 @@
 #define WORD32 FLOAT
 #endif
 
+#define COEF16(x, a) ((opus_int16)SATURATE(((opus_int64)(x)+(1<<(a)>>1))>>(a), 32767))
+int opus_select_arch(void) {
+   return 0;
+}
+
 void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
 {
    int i, j, k;
@@ -148,10 +153,21 @@
       /* FFT twiddles */
       fprintf(file, "#ifndef FFT_TWIDDLES%d_%d\n", mode->Fs, mdctSize);
       fprintf(file, "#define FFT_TWIDDLES%d_%d\n", mode->Fs, mdctSize);
+
       fprintf (file, "static const kiss_twiddle_cpx fft_twiddles%d_%d[%d] = {\n",
             mode->Fs, mdctSize, mode->mdct.kfft[0]->nfft);
+#if defined(FIXED_POINT) && defined(ENABLE_QEXT)
+      fprintf(file, "#ifdef ENABLE_QEXT\n");
       for (j=0;j<mode->mdct.kfft[0]->nfft;j++)
+         fprintf (file, "{" WORD32 ", " WORD32 "},%c", mode->mdct.kfft[0]->twiddles[j].r, mode->mdct.kfft[0]->twiddles[j].i,(j+3)%2==0?'\n':' ');
+      fprintf(file, "#else\n");
+      for (j=0;j<mode->mdct.kfft[0]->nfft;j++)
+         fprintf (file, "{" WORD16 ", " WORD16 "},%c", COEF16(mode->mdct.kfft[0]->twiddles[j].r,16), COEF16(mode->mdct.kfft[0]->twiddles[j].i,16),(j+3)%2==0?'\n':' ');
+      fprintf(file, "#endif\n");
+#else
+      for (j=0;j<mode->mdct.kfft[0]->nfft;j++)
          fprintf (file, "{" WORD16 ", " WORD16 "},%c", mode->mdct.kfft[0]->twiddles[j].r, mode->mdct.kfft[0]->twiddles[j].i,(j+3)%2==0?'\n':' ');
+#endif
       fprintf (file, "};\n");
 
 #ifdef OVERRIDE_FFT
@@ -180,7 +196,16 @@
          fprintf (file, "static const kiss_fft_state fft_state%d_%d_%d = {\n",
                mode->Fs, mdctSize, k);
          fprintf (file, "%d,    /* nfft */\n", mode->mdct.kfft[k]->nfft);
+
+#if defined(FIXED_POINT) && defined(ENABLE_QEXT)
+         fprintf(file, "#ifdef ENABLE_QEXT\n");
+         fprintf (file, WORD32 ",    /* scale */\n", mode->mdct.kfft[k]->scale);
+         fprintf(file, "#else\n");
+         fprintf (file, WORD16 ",    /* scale */\n", COEF16(mode->mdct.kfft[k]->scale, 15));
+         fprintf(file, "#endif\n");
+#else
          fprintf (file, WORD16 ",    /* scale */\n", mode->mdct.kfft[k]->scale);
+#endif
 #ifdef FIXED_POINT
          fprintf (file, "%d,    /* scale_shift */\n", mode->mdct.kfft[k]->scale_shift);
 #endif
@@ -211,10 +236,22 @@
       mdct_twiddles_size = mode->mdct.n-(mode->mdct.n/2>>mode->mdct.maxshift);
       fprintf(file, "#ifndef MDCT_TWIDDLES%d\n", mdctSize);
       fprintf(file, "#define MDCT_TWIDDLES%d\n", mdctSize);
-      fprintf (file, "static const opus_val16 mdct_twiddles%d[%d] = {\n",
+      fprintf (file, "static const celt_coef mdct_twiddles%d[%d] = {\n",
             mdctSize, mdct_twiddles_size);
+
+#if defined(FIXED_POINT) && defined(ENABLE_QEXT)
+      fprintf(file, "#ifdef ENABLE_QEXT\n");
       for (j=0;j<mdct_twiddles_size;j++)
+         fprintf (file, WORD32 ",%c", mode->mdct.trig[j],(j+6)%5==0?'\n':' ');
+      fprintf(file, "#else\n");
+      for (j=0;j<mdct_twiddles_size;j++)
+         fprintf (file, WORD16 ",%c", COEF16(mode->mdct.trig[j], 16),(j+6)%5==0?'\n':' ');
+      fprintf(file, "#endif\n");
+#else
+      for (j=0;j<mdct_twiddles_size;j++)
          fprintf (file, WORD16 ",%c", mode->mdct.trig[j],(j+6)%5==0?'\n':' ');
+#endif
+
       fprintf (file, "};\n");
 
       fprintf(file, "#endif\n");
--- a/celt/fixed_debug.h
+++ b/celt/fixed_debug.h
@@ -50,7 +50,7 @@
 #define MULT16_32_P16(a,b) MULT16_32_PX(a,b,16)
 
 #define QCONST16(x,bits) ((opus_val16)(.5+(x)*(((opus_val32)1)<<(bits))))
-#define QCONST32(x,bits) ((opus_val32)(.5+(x)*(((opus_val32)1)<<(bits))))
+#define QCONST32(x,bits) ((opus_val32)(.5+(x)*(((opus_val64)1)<<(bits))))
 #define GCONST2(x,bits) ((celt_glog)(.5+(x)*(((celt_glog)1)<<(bits))))
 #define GCONST(x) GCONST2((x),DB_SHIFT)
 
--- a/celt/fixed_generic.h
+++ b/celt/fixed_generic.h
@@ -75,7 +75,7 @@
 #define QCONST16(x,bits) ((opus_val16)(.5+(x)*(((opus_val32)1)<<(bits))))
 
 /** Compile-time conversion of float constant to 32-bit value */
-#define QCONST32(x,bits) ((opus_val32)(.5+(x)*(((opus_val32)1)<<(bits))))
+#define QCONST32(x,bits) ((opus_val32)(.5+(x)*(((opus_int64)1)<<(bits))))
 
 /** Compile-time conversion of float constant to log gain value */
 #define GCONST2(x,bits) ((celt_glog)(.5+(x)*(((celt_glog)1)<<(bits))))
--- a/celt/kiss_fft.c
+++ b/celt/kiss_fft.c
@@ -41,6 +41,10 @@
 #include "mathops.h"
 #include "stack_alloc.h"
 
+#ifndef M_PI
+#define M_PI 3.141592653
+#endif
+
 /* The guts header contains all the multiplication and addition macros that are defined for
    complex numbers.  It also delares the kf_ internal functions.
 */
@@ -70,8 +74,8 @@
    } else
 #endif
    {
-      opus_val16 tw;
-      tw = QCONST16(0.7071067812f, 15);
+      celt_coef tw;
+      tw = QCONST32(0.7071067812f, COEF_SHIFT-1);
       /* We know that m==4 here because the radix-2 is just after a radix-4 */
       celt_assert(m==4);
       for (i=0;i<N;i++)
@@ -192,7 +196,7 @@
    kiss_fft_cpx * Fout_beg = Fout;
 #ifdef FIXED_POINT
    /*epi3.r = -16384;*/ /* Unused */
-   epi3.i = -28378;
+   epi3.i = -QCONST32(0.86602540f, COEF_SHIFT-1);
 #else
    epi3 = st->twiddles[fstride*m];
 #endif
@@ -249,10 +253,10 @@
    kiss_fft_cpx * Fout_beg = Fout;
 
 #ifdef FIXED_POINT
-   ya.r = 10126;
-   ya.i = -31164;
-   yb.r = -26510;
-   yb.i = -19261;
+   ya.r = QCONST32(0.30901699f, COEF_SHIFT-1);
+   ya.i = -QCONST32(0.95105652f, COEF_SHIFT-1);
+   yb.r = -QCONST32(0.80901699f, COEF_SHIFT-1);
+   yb.i = -QCONST32(0.58778525f, COEF_SHIFT-1);
 #else
    ya = st->twiddles[fstride*m];
    yb = st->twiddles[fstride*2*m];
@@ -412,7 +416,12 @@
 #ifdef FIXED_POINT
    for (i=0;i<nfft;++i) {
       opus_val32 phase = -i;
+#ifdef ENABLE_QEXT
+      twiddles[i].r = floor(.5+2147483647*cos((2*M_PI/nfft)*phase));
+      twiddles[i].i = floor(.5+2147483647*sin((2*M_PI/nfft)*phase));
+#else
       kf_cexp2(twiddles+i, DIV32(SHL32(phase,17),nfft));
+#endif
    }
 #else
    for (i=0;i<nfft;++i) {
@@ -454,10 +463,17 @@
         st->nfft=nfft;
 #ifdef FIXED_POINT
         st->scale_shift = celt_ilog2(st->nfft);
+# ifdef ENABLE_QEXT
         if (st->nfft == 1<<st->scale_shift)
+           st->scale = QCONST32(1.0f, 30);
+        else
+           st->scale = (((opus_int64)1073741824<<st->scale_shift)+st->nfft/2)/st->nfft;
+# else
+        if (st->nfft == 1<<st->scale_shift)
            st->scale = Q15ONE;
         else
            st->scale = (1073741824+st->nfft/2)/st->nfft>>(15-st->scale_shift);
+# endif
 #else
         st->scale = 1.f/nfft;
 #endif
@@ -569,7 +585,7 @@
 void opus_fft_c(const kiss_fft_state *st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout)
 {
    int i;
-   opus_val16 scale;
+   celt_coef scale;
 #ifdef FIXED_POINT
    /* Allows us to scale with MULT16_32_Q16(), which is faster than
       MULT16_32_Q15() on ARM. */
@@ -582,8 +598,8 @@
    for (i=0;i<st->nfft;i++)
    {
       kiss_fft_cpx x = fin[i];
-      fout[st->bitrev[i]].r = SHR32(MULT16_32_Q16(scale, x.r), scale_shift);
-      fout[st->bitrev[i]].i = SHR32(MULT16_32_Q16(scale, x.i), scale_shift);
+      fout[st->bitrev[i]].r = SHR32(S_MUL2(x.r, scale), scale_shift);
+      fout[st->bitrev[i]].i = SHR32(S_MUL2(x.i, scale), scale_shift);
    }
    opus_fft_impl(st, fout);
 }
--- a/celt/kiss_fft.h
+++ b/celt/kiss_fft.h
@@ -50,8 +50,14 @@
 #include "arch.h"
 
 #  define kiss_fft_scalar opus_int32
-#  define kiss_twiddle_scalar opus_int16
+#  ifdef ENABLE_QEXT
+#   define COEF_SHIFT 32
+#  else
+#   define COEF_SHIFT 16
+#  endif
 
+#  define kiss_twiddle_scalar celt_coef
+
 /* Some 32-bit CPUs would load/store a kiss_twiddle_cpx with a single memory
  * access, and could benefit from additional alignment.
  */
@@ -58,6 +64,7 @@
 #  define KISS_TWIDDLE_CPX_ALIGNMENT (sizeof(opus_int32))
 
 #else
+
 # ifndef kiss_fft_scalar
 /*  default is float */
 #   define kiss_fft_scalar float
@@ -95,7 +102,7 @@
 
 typedef struct kiss_fft_state{
     int nfft;
-    opus_val16 scale;
+    celt_coef scale;
 #ifdef FIXED_POINT
     int scale_shift;
 #endif
--- a/celt/mdct.c
+++ b/celt/mdct.c
@@ -57,6 +57,9 @@
 #include "mips/mdct_mipsr1.h"
 #endif
 
+#ifndef M_PI
+#define M_PI 3.141592653
+#endif
 
 #ifdef CUSTOM_MODES
 
@@ -86,12 +89,12 @@
    {
       /* We have enough points that sine isn't necessary */
 #if defined(FIXED_POINT)
-#if 1
+#ifndef ENABLE_QEXT
       for (i=0;i<N2;i++)
          trig[i] = TRIG_UPSCALE*celt_cos_norm(DIV32(ADD32(SHL32(EXTEND32(i),17),N2+16384),N));
 #else
       for (i=0;i<N2;i++)
-         trig[i] = (kiss_twiddle_scalar)MAX32(-32767,MIN32(32767,floor(.5+32768*cos(2*M_PI*(i+.125)/N))));
+         trig[i] = (kiss_twiddle_scalar)MAX32(-2147483647,MIN32(2147483647,floor(.5+2147483648*cos(2*M_PI*(i+.125)/N))));
 #endif
 #else
       for (i=0;i<N2;i++)
@@ -125,7 +128,7 @@
    VARDECL(kiss_fft_cpx, f2);
    const kiss_fft_state *st = l->kfft[shift];
    const kiss_twiddle_scalar *trig;
-   opus_val16 scale;
+   celt_coef scale;
 #ifdef FIXED_POINT
    /* Allows us to scale with MULT16_32_Q16(), which is faster than
       MULT16_32_Q15() on ARM. */
@@ -205,8 +208,8 @@
          yi = S_MUL(im,t0)  +  S_MUL(re,t1);
          yc.r = yr;
          yc.i = yi;
-         yc.r = PSHR32(MULT16_32_Q16(scale, yc.r), scale_shift);
-         yc.i = PSHR32(MULT16_32_Q16(scale, yc.i), scale_shift);
+         yc.r = PSHR32(S_MUL2(yc.r, scale), scale_shift);
+         yc.i = PSHR32(S_MUL2(yc.i, scale), scale_shift);
          f2[st->bitrev[i]] = yc;
       }
    }
--- a/celt/static_modes_fixed.h
+++ b/celt/static_modes_fixed.h
@@ -102,246 +102,489 @@
 #ifndef FFT_TWIDDLES48000_960
 #define FFT_TWIDDLES48000_960
 static const kiss_twiddle_cpx fft_twiddles48000_960[480] = {
-{32767, 0}, {32766, -429},
-{32757, -858}, {32743, -1287},
-{32724, -1715}, {32698, -2143},
-{32667, -2570}, {32631, -2998},
+#ifdef ENABLE_QEXT
+{2147483647, 0}, {2147299667, -28109692},
+{2146747758, -56214568}, {2145828015, -84309812},
+{2144540595, -112390610}, {2142885720, -140452150},
+{2140863672, -168489625}, {2138474798, -196498230},
+{2135719507, -224473166}, {2132598272, -252409639},
+{2129111627, -280302863}, {2125260169, -308148059},
+{2121044560, -335940456}, {2116465520, -363675290},
+{2111523835, -391347811}, {2106220351, -418953276},
+{2100555977, -446486956}, {2094531684, -473944133},
+{2088148503, -501320101}, {2081407529, -528610171},
+{2074309916, -555809667}, {2066856881, -582913927},
+{2059049701, -609918308}, {2050889713, -636818183},
+{2042378316, -663608942}, {2033516968, -690285995},
+{2024307187, -716844771}, {2014750552, -743280720},
+{2004848699, -769589311}, {1994603326, -795766037},
+{1984016188, -821806413}, {1973089099, -847705976},
+{1961823931, -873460290}, {1950222615, -899064940},
+{1938287138, -924515540}, {1926019546, -949807729},
+{1913421940, -974937174}, {1900496479, -999899568},
+{1887245378, -1024690635}, {1873670907, -1049306126},
+{1859775393, -1073741823}, {1845561215, -1097993541},
+{1831030810, -1122057123}, {1816186667, -1145928447},
+{1801031330, -1169603421}, {1785567395, -1193077990},
+{1769797513, -1216348131}, {1753724385, -1239409858},
+{1737350766, -1262259217}, {1720679460, -1284892295},
+{1703713325, -1307305214}, {1686455267, -1329494132},
+{1668908244, -1351455249}, {1651075262, -1373184800},
+{1632959376, -1394679063}, {1614563692, -1415934356},
+{1595891360, -1436947035}, {1576945581, -1457713501},
+{1557729600, -1478230195}, {1538246710, -1498493602},
+{1518500249, -1518500249}, {1498493602, -1538246710},
+{1478230195, -1557729600}, {1457713501, -1576945581},
+{1436947035, -1595891360}, {1415934356, -1614563692},
+{1394679063, -1632959376}, {1373184800, -1651075262},
+{1351455249, -1668908244}, {1329494132, -1686455267},
+{1307305214, -1703713325}, {1284892295, -1720679460},
+{1262259217, -1737350766}, {1239409858, -1753724385},
+{1216348131, -1769797513}, {1193077990, -1785567395},
+{1169603421, -1801031330}, {1145928447, -1816186667},
+{1122057123, -1831030810}, {1097993541, -1845561215},
+{1073741824, -1859775393}, {1049306126, -1873670907},
+{1024690635, -1887245378}, {999899568, -1900496479},
+{974937174, -1913421940}, {949807729, -1926019546},
+{924515540, -1938287138}, {899064940, -1950222615},
+{873460290, -1961823931}, {847705976, -1973089099},
+{821806413, -1984016188}, {795766037, -1994603326},
+{769589311, -2004848699}, {743280720, -2014750552},
+{716844771, -2024307187}, {690285995, -2033516968},
+{663608942, -2042378316}, {636818183, -2050889713},
+{609918308, -2059049701}, {582913927, -2066856881},
+{555809667, -2074309916}, {528610171, -2081407529},
+{501320101, -2088148503}, {473944133, -2094531684},
+{446486956, -2100555977}, {418953276, -2106220351},
+{391347811, -2111523835}, {363675290, -2116465520},
+{335940456, -2121044560}, {308148059, -2125260169},
+{280302863, -2129111627}, {252409639, -2132598272},
+{224473166, -2135719507}, {196498230, -2138474798},
+{168489625, -2140863672}, {140452150, -2142885720},
+{112390610, -2144540595}, {84309812, -2145828015},
+{56214568, -2146747758}, {28109692, -2147299667},
+{0, -2147483647}, {-28109692, -2147299667},
+{-56214568, -2146747758}, {-84309812, -2145828015},
+{-112390610, -2144540595}, {-140452150, -2142885720},
+{-168489625, -2140863672}, {-196498230, -2138474798},
+{-224473166, -2135719507}, {-252409639, -2132598272},
+{-280302863, -2129111627}, {-308148059, -2125260169},
+{-335940456, -2121044560}, {-363675290, -2116465520},
+{-391347811, -2111523835}, {-418953276, -2106220351},
+{-446486956, -2100555977}, {-473944133, -2094531684},
+{-501320101, -2088148503}, {-528610171, -2081407529},
+{-555809667, -2074309916}, {-582913927, -2066856881},
+{-609918308, -2059049701}, {-636818183, -2050889713},
+{-663608942, -2042378316}, {-690285995, -2033516968},
+{-716844771, -2024307187}, {-743280720, -2014750552},
+{-769589311, -2004848699}, {-795766037, -1994603326},
+{-821806413, -1984016188}, {-847705976, -1973089099},
+{-873460290, -1961823931}, {-899064940, -1950222615},
+{-924515540, -1938287138}, {-949807729, -1926019546},
+{-974937174, -1913421940}, {-999899568, -1900496479},
+{-1024690635, -1887245378}, {-1049306126, -1873670907},
+{-1073741823, -1859775393}, {-1097993541, -1845561215},
+{-1122057123, -1831030810}, {-1145928447, -1816186667},
+{-1169603421, -1801031330}, {-1193077990, -1785567395},
+{-1216348131, -1769797513}, {-1239409858, -1753724385},
+{-1262259217, -1737350766}, {-1284892295, -1720679460},
+{-1307305214, -1703713325}, {-1329494132, -1686455267},
+{-1351455249, -1668908244}, {-1373184800, -1651075262},
+{-1394679063, -1632959376}, {-1415934356, -1614563692},
+{-1436947035, -1595891360}, {-1457713501, -1576945581},
+{-1478230195, -1557729600}, {-1498493602, -1538246710},
+{-1518500249, -1518500249}, {-1538246710, -1498493602},
+{-1557729600, -1478230195}, {-1576945581, -1457713501},
+{-1595891360, -1436947035}, {-1614563692, -1415934356},
+{-1632959376, -1394679063}, {-1651075262, -1373184800},
+{-1668908244, -1351455249}, {-1686455267, -1329494132},
+{-1703713325, -1307305214}, {-1720679460, -1284892295},
+{-1737350766, -1262259217}, {-1753724385, -1239409858},
+{-1769797513, -1216348131}, {-1785567395, -1193077990},
+{-1801031330, -1169603421}, {-1816186667, -1145928447},
+{-1831030810, -1122057123}, {-1845561215, -1097993541},
+{-1859775393, -1073741824}, {-1873670907, -1049306126},
+{-1887245378, -1024690635}, {-1900496479, -999899568},
+{-1913421940, -974937174}, {-1926019546, -949807729},
+{-1938287138, -924515540}, {-1950222615, -899064940},
+{-1961823931, -873460290}, {-1973089099, -847705976},
+{-1984016188, -821806413}, {-1994603326, -795766037},
+{-2004848699, -769589311}, {-2014750552, -743280720},
+{-2024307187, -716844771}, {-2033516968, -690285995},
+{-2042378316, -663608942}, {-2050889713, -636818183},
+{-2059049701, -609918308}, {-2066856881, -582913927},
+{-2074309916, -555809667}, {-2081407529, -528610171},
+{-2088148503, -501320101}, {-2094531684, -473944133},
+{-2100555977, -446486956}, {-2106220351, -418953276},
+{-2111523835, -391347811}, {-2116465520, -363675290},
+{-2121044560, -335940456}, {-2125260169, -308148059},
+{-2129111627, -280302863}, {-2132598272, -252409639},
+{-2135719507, -224473166}, {-2138474798, -196498230},
+{-2140863672, -168489625}, {-2142885720, -140452150},
+{-2144540595, -112390610}, {-2145828015, -84309812},
+{-2146747758, -56214568}, {-2147299667, -28109692},
+{-2147483647, 0}, {-2147299667, 28109692},
+{-2146747758, 56214568}, {-2145828015, 84309812},
+{-2144540595, 112390610}, {-2142885720, 140452150},
+{-2140863672, 168489625}, {-2138474798, 196498230},
+{-2135719507, 224473166}, {-2132598272, 252409639},
+{-2129111627, 280302863}, {-2125260169, 308148059},
+{-2121044560, 335940456}, {-2116465520, 363675290},
+{-2111523835, 391347811}, {-2106220351, 418953276},
+{-2100555977, 446486956}, {-2094531684, 473944133},
+{-2088148503, 501320101}, {-2081407529, 528610171},
+{-2074309916, 555809667}, {-2066856881, 582913927},
+{-2059049701, 609918308}, {-2050889713, 636818183},
+{-2042378316, 663608942}, {-2033516968, 690285995},
+{-2024307187, 716844771}, {-2014750552, 743280720},
+{-2004848699, 769589311}, {-1994603326, 795766037},
+{-1984016188, 821806413}, {-1973089099, 847705976},
+{-1961823931, 873460290}, {-1950222615, 899064940},
+{-1938287138, 924515540}, {-1926019546, 949807729},
+{-1913421940, 974937174}, {-1900496479, 999899568},
+{-1887245378, 1024690635}, {-1873670907, 1049306126},
+{-1859775393, 1073741823}, {-1845561215, 1097993541},
+{-1831030810, 1122057123}, {-1816186667, 1145928447},
+{-1801031330, 1169603421}, {-1785567395, 1193077990},
+{-1769797513, 1216348131}, {-1753724385, 1239409858},
+{-1737350766, 1262259217}, {-1720679460, 1284892295},
+{-1703713325, 1307305214}, {-1686455267, 1329494132},
+{-1668908244, 1351455249}, {-1651075262, 1373184800},
+{-1632959376, 1394679063}, {-1614563692, 1415934356},
+{-1595891360, 1436947035}, {-1576945581, 1457713501},
+{-1557729600, 1478230195}, {-1538246710, 1498493602},
+{-1518500249, 1518500249}, {-1498493602, 1538246710},
+{-1478230195, 1557729600}, {-1457713501, 1576945581},
+{-1436947035, 1595891360}, {-1415934356, 1614563692},
+{-1394679063, 1632959376}, {-1373184800, 1651075262},
+{-1351455249, 1668908244}, {-1329494132, 1686455267},
+{-1307305214, 1703713325}, {-1284892295, 1720679460},
+{-1262259217, 1737350766}, {-1239409858, 1753724385},
+{-1216348131, 1769797513}, {-1193077990, 1785567395},
+{-1169603421, 1801031330}, {-1145928447, 1816186667},
+{-1122057123, 1831030810}, {-1097993541, 1845561215},
+{-1073741824, 1859775393}, {-1049306126, 1873670907},
+{-1024690635, 1887245378}, {-999899568, 1900496479},
+{-974937174, 1913421940}, {-949807729, 1926019546},
+{-924515540, 1938287138}, {-899064940, 1950222615},
+{-873460290, 1961823931}, {-847705976, 1973089099},
+{-821806413, 1984016188}, {-795766037, 1994603326},
+{-769589311, 2004848699}, {-743280720, 2014750552},
+{-716844771, 2024307187}, {-690285995, 2033516968},
+{-663608942, 2042378316}, {-636818183, 2050889713},
+{-609918308, 2059049701}, {-582913927, 2066856881},
+{-555809667, 2074309916}, {-528610171, 2081407529},
+{-501320101, 2088148503}, {-473944133, 2094531684},
+{-446486956, 2100555977}, {-418953276, 2106220351},
+{-391347811, 2111523835}, {-363675290, 2116465520},
+{-335940456, 2121044560}, {-308148059, 2125260169},
+{-280302863, 2129111627}, {-252409639, 2132598272},
+{-224473166, 2135719507}, {-196498230, 2138474798},
+{-168489625, 2140863672}, {-140452150, 2142885720},
+{-112390610, 2144540595}, {-84309812, 2145828015},
+{-56214568, 2146747758}, {-28109692, 2147299667},
+{0, 2147483647}, {28109692, 2147299667},
+{56214568, 2146747758}, {84309812, 2145828015},
+{112390610, 2144540595}, {140452150, 2142885720},
+{168489625, 2140863672}, {196498230, 2138474798},
+{224473166, 2135719507}, {252409639, 2132598272},
+{280302863, 2129111627}, {308148059, 2125260169},
+{335940456, 2121044560}, {363675290, 2116465520},
+{391347811, 2111523835}, {418953276, 2106220351},
+{446486956, 2100555977}, {473944133, 2094531684},
+{501320101, 2088148503}, {528610171, 2081407529},
+{555809667, 2074309916}, {582913927, 2066856881},
+{609918308, 2059049701}, {636818183, 2050889713},
+{663608942, 2042378316}, {690285995, 2033516968},
+{716844771, 2024307187}, {743280720, 2014750552},
+{769589311, 2004848699}, {795766037, 1994603326},
+{821806413, 1984016188}, {847705976, 1973089099},
+{873460290, 1961823931}, {899064940, 1950222615},
+{924515540, 1938287138}, {949807729, 1926019546},
+{974937174, 1913421940}, {999899568, 1900496479},
+{1024690635, 1887245378}, {1049306126, 1873670907},
+{1073741823, 1859775393}, {1097993541, 1845561215},
+{1122057123, 1831030810}, {1145928447, 1816186667},
+{1169603421, 1801031330}, {1193077990, 1785567395},
+{1216348131, 1769797513}, {1239409858, 1753724385},
+{1262259217, 1737350766}, {1284892295, 1720679460},
+{1307305214, 1703713325}, {1329494132, 1686455267},
+{1351455249, 1668908244}, {1373184800, 1651075262},
+{1394679063, 1632959376}, {1415934356, 1614563692},
+{1436947035, 1595891360}, {1457713501, 1576945581},
+{1478230195, 1557729600}, {1498493602, 1538246710},
+{1518500249, 1518500249}, {1538246710, 1498493602},
+{1557729600, 1478230195}, {1576945581, 1457713501},
+{1595891360, 1436947035}, {1614563692, 1415934356},
+{1632959376, 1394679063}, {1651075262, 1373184800},
+{1668908244, 1351455249}, {1686455267, 1329494132},
+{1703713325, 1307305214}, {1720679460, 1284892295},
+{1737350766, 1262259217}, {1753724385, 1239409858},
+{1769797513, 1216348131}, {1785567395, 1193077990},
+{1801031330, 1169603421}, {1816186667, 1145928447},
+{1831030810, 1122057123}, {1845561215, 1097993541},
+{1859775393, 1073741824}, {1873670907, 1049306126},
+{1887245378, 1024690635}, {1900496479, 999899568},
+{1913421940, 974937174}, {1926019546, 949807729},
+{1938287138, 924515540}, {1950222615, 899064940},
+{1961823931, 873460290}, {1973089099, 847705976},
+{1984016188, 821806413}, {1994603326, 795766037},
+{2004848699, 769589311}, {2014750552, 743280720},
+{2024307187, 716844771}, {2033516968, 690285995},
+{2042378316, 663608942}, {2050889713, 636818183},
+{2059049701, 609918308}, {2066856881, 582913927},
+{2074309916, 555809667}, {2081407529, 528610171},
+{2088148503, 501320101}, {2094531684, 473944133},
+{2100555977, 446486956}, {2106220351, 418953276},
+{2111523835, 391347811}, {2116465520, 363675290},
+{2121044560, 335940456}, {2125260169, 308148059},
+{2129111627, 280302863}, {2132598272, 252409639},
+{2135719507, 224473166}, {2138474798, 196498230},
+{2140863672, 168489625}, {2142885720, 140452150},
+{2144540595, 112390610}, {2145828015, 84309812},
+{2146747758, 56214568}, {2147299667, 28109692},
+#else
+{32767, 0}, {32765, -429},
+{32757, -858}, {32743, -1286},
+{32723, -1715}, {32698, -2143},
+{32667, -2571}, {32631, -2998},
 {32588, -3425}, {32541, -3851},
-{32488, -4277}, {32429, -4701},
-{32364, -5125}, {32295, -5548},
+{32488, -4277}, {32429, -4702},
+{32365, -5126}, {32295, -5549},
 {32219, -5971}, {32138, -6393},
-{32051, -6813}, {31960, -7231},
-{31863, -7650}, {31760, -8067},
-{31652, -8481}, {31539, -8895},
-{31419, -9306}, {31294, -9716},
-{31165, -10126}, {31030, -10532},
-{30889, -10937}, {30743, -11340},
-{30592, -11741}, {30436, -12141},
+{32052, -6813}, {31960, -7232},
+{31863, -7650}, {31760, -8066},
+{31651, -8481}, {31538, -8895},
+{31419, -9307}, {31294, -9717},
+{31164, -10126}, {31029, -10533},
+{30888, -10938}, {30743, -11342},
+{30592, -11743}, {30435, -12142},
 {30274, -12540}, {30107, -12935},
-{29936, -13328}, {29758, -13718},
-{29577, -14107}, {29390, -14493},
-{29197, -14875}, {29000, -15257},
-{28797, -15635}, {28590, -16010},
-{28379, -16384}, {28162, -16753},
-{27940, -17119}, {27714, -17484},
-{27482, -17845}, {27246, -18205},
-{27006, -18560}, {26760, -18911},
-{26510, -19260}, {26257, -19606},
-{25997, -19947}, {25734, -20286},
-{25466, -20621}, {25194, -20952},
-{24918, -21281}, {24637, -21605},
-{24353, -21926}, {24063, -22242},
-{23770, -22555}, {23473, -22865},
-{23171, -23171}, {22866, -23472},
-{22557, -23769}, {22244, -24063},
-{21927, -24352}, {21606, -24636},
-{21282, -24917}, {20954, -25194},
-{20622, -25465}, {20288, -25733},
-{19949, -25997}, {19607, -26255},
-{19261, -26509}, {18914, -26760},
-{18561, -27004}, {18205, -27246},
-{17846, -27481}, {17485, -27713},
-{17122, -27940}, {16755, -28162},
-{16385, -28378}, {16012, -28590},
-{15636, -28797}, {15258, -28999},
-{14878, -29197}, {14494, -29389},
-{14108, -29576}, {13720, -29757},
-{13329, -29934}, {12937, -30107},
+{29935, -13328}, {29758, -13719},
+{29576, -14107}, {29389, -14493},
+{29197, -14876}, {28999, -15257},
+{28797, -15636}, {28590, -16011},
+{28378, -16384}, {28161, -16754},
+{27939, -17121}, {27713, -17485},
+{27482, -17847}, {27246, -18205},
+{27005, -18560}, {26760, -18912},
+{26510, -19261}, {26255, -19606},
+{25997, -19948}, {25733, -20286},
+{25466, -20622}, {25193, -20953},
+{24917, -21281}, {24636, -21605},
+{24351, -21926}, {24062, -22243},
+{23769, -22556}, {23472, -22865},
+{23170, -23170}, {22865, -23472},
+{22556, -23769}, {22243, -24062},
+{21926, -24351}, {21605, -24636},
+{21281, -24917}, {20953, -25193},
+{20622, -25466}, {20286, -25733},
+{19948, -25997}, {19606, -26255},
+{19261, -26510}, {18912, -26760},
+{18560, -27005}, {18205, -27246},
+{17847, -27482}, {17485, -27713},
+{17121, -27939}, {16754, -28161},
+{16384, -28378}, {16011, -28590},
+{15636, -28797}, {15257, -28999},
+{14876, -29197}, {14493, -29389},
+{14107, -29576}, {13719, -29758},
+{13328, -29935}, {12935, -30107},
 {12540, -30274}, {12142, -30435},
-{11744, -30592}, {11342, -30743},
-{10939, -30889}, {10534, -31030},
-{10127, -31164}, {9718, -31294},
-{9307, -31418}, {8895, -31537},
-{8482, -31652}, {8067, -31759},
-{7650, -31862}, {7233, -31960},
-{6815, -32051}, {6393, -32138},
-{5973, -32219}, {5549, -32294},
-{5127, -32364}, {4703, -32429},
-{4278, -32487}, {3852, -32541},
-{3426, -32588}, {2999, -32630},
-{2572, -32667}, {2144, -32698},
-{1716, -32724}, {1287, -32742},
-{860, -32757}, {430, -32766},
-{0, -32767}, {-429, -32766},
-{-858, -32757}, {-1287, -32743},
-{-1715, -32724}, {-2143, -32698},
-{-2570, -32667}, {-2998, -32631},
+{11743, -30592}, {11342, -30743},
+{10938, -30888}, {10533, -31029},
+{10126, -31164}, {9717, -31294},
+{9307, -31419}, {8895, -31538},
+{8481, -31651}, {8066, -31760},
+{7650, -31863}, {7232, -31960},
+{6813, -32052}, {6393, -32138},
+{5971, -32219}, {5549, -32295},
+{5126, -32365}, {4702, -32429},
+{4277, -32488}, {3851, -32541},
+{3425, -32588}, {2998, -32631},
+{2571, -32667}, {2143, -32698},
+{1715, -32723}, {1286, -32743},
+{858, -32757}, {429, -32765},
+{0, -32767}, {-429, -32765},
+{-858, -32757}, {-1286, -32743},
+{-1715, -32723}, {-2143, -32698},
+{-2571, -32667}, {-2998, -32631},
 {-3425, -32588}, {-3851, -32541},
-{-4277, -32488}, {-4701, -32429},
-{-5125, -32364}, {-5548, -32295},
+{-4277, -32488}, {-4702, -32429},
+{-5126, -32365}, {-5549, -32295},
 {-5971, -32219}, {-6393, -32138},
-{-6813, -32051}, {-7231, -31960},
-{-7650, -31863}, {-8067, -31760},
-{-8481, -31652}, {-8895, -31539},
-{-9306, -31419}, {-9716, -31294},
-{-10126, -31165}, {-10532, -31030},
-{-10937, -30889}, {-11340, -30743},
-{-11741, -30592}, {-12141, -30436},
+{-6813, -32052}, {-7232, -31960},
+{-7650, -31863}, {-8066, -31760},
+{-8481, -31651}, {-8895, -31538},
+{-9307, -31419}, {-9717, -31294},
+{-10126, -31164}, {-10533, -31029},
+{-10938, -30888}, {-11342, -30743},
+{-11743, -30592}, {-12142, -30435},
 {-12540, -30274}, {-12935, -30107},
-{-13328, -29936}, {-13718, -29758},
-{-14107, -29577}, {-14493, -29390},
-{-14875, -29197}, {-15257, -29000},
-{-15635, -28797}, {-16010, -28590},
-{-16384, -28379}, {-16753, -28162},
-{-17119, -27940}, {-17484, -27714},
-{-17845, -27482}, {-18205, -27246},
-{-18560, -27006}, {-18911, -26760},
-{-19260, -26510}, {-19606, -26257},
-{-19947, -25997}, {-20286, -25734},
-{-20621, -25466}, {-20952, -25194},
-{-21281, -24918}, {-21605, -24637},
-{-21926, -24353}, {-22242, -24063},
-{-22555, -23770}, {-22865, -23473},
-{-23171, -23171}, {-23472, -22866},
-{-23769, -22557}, {-24063, -22244},
-{-24352, -21927}, {-24636, -21606},
-{-24917, -21282}, {-25194, -20954},
-{-25465, -20622}, {-25733, -20288},
-{-25997, -19949}, {-26255, -19607},
-{-26509, -19261}, {-26760, -18914},
-{-27004, -18561}, {-27246, -18205},
-{-27481, -17846}, {-27713, -17485},
-{-27940, -17122}, {-28162, -16755},
-{-28378, -16385}, {-28590, -16012},
-{-28797, -15636}, {-28999, -15258},
-{-29197, -14878}, {-29389, -14494},
-{-29576, -14108}, {-29757, -13720},
-{-29934, -13329}, {-30107, -12937},
+{-13328, -29935}, {-13719, -29758},
+{-14107, -29576}, {-14493, -29389},
+{-14876, -29197}, {-15257, -28999},
+{-15636, -28797}, {-16011, -28590},
+{-16384, -28378}, {-16754, -28161},
+{-17121, -27939}, {-17485, -27713},
+{-17847, -27482}, {-18205, -27246},
+{-18560, -27005}, {-18912, -26760},
+{-19261, -26510}, {-19606, -26255},
+{-19948, -25997}, {-20286, -25733},
+{-20622, -25466}, {-20953, -25193},
+{-21281, -24917}, {-21605, -24636},
+{-21926, -24351}, {-22243, -24062},
+{-22556, -23769}, {-22865, -23472},
+{-23170, -23170}, {-23472, -22865},
+{-23769, -22556}, {-24062, -22243},
+{-24351, -21926}, {-24636, -21605},
+{-24917, -21281}, {-25193, -20953},
+{-25466, -20622}, {-25733, -20286},
+{-25997, -19948}, {-26255, -19606},
+{-26510, -19261}, {-26760, -18912},
+{-27005, -18560}, {-27246, -18205},
+{-27482, -17847}, {-27713, -17485},
+{-27939, -17121}, {-28161, -16754},
+{-28378, -16384}, {-28590, -16011},
+{-28797, -15636}, {-28999, -15257},
+{-29197, -14876}, {-29389, -14493},
+{-29576, -14107}, {-29758, -13719},
+{-29935, -13328}, {-30107, -12935},
 {-30274, -12540}, {-30435, -12142},
-{-30592, -11744}, {-30743, -11342},
-{-30889, -10939}, {-31030, -10534},
-{-31164, -10127}, {-31294, -9718},
-{-31418, -9307}, {-31537, -8895},
-{-31652, -8482}, {-31759, -8067},
-{-31862, -7650}, {-31960, -7233},
-{-32051, -6815}, {-32138, -6393},
-{-32219, -5973}, {-32294, -5549},
-{-32364, -5127}, {-32429, -4703},
-{-32487, -4278}, {-32541, -3852},
-{-32588, -3426}, {-32630, -2999},
-{-32667, -2572}, {-32698, -2144},
-{-32724, -1716}, {-32742, -1287},
-{-32757, -860}, {-32766, -430},
-{-32767, 0}, {-32766, 429},
-{-32757, 858}, {-32743, 1287},
-{-32724, 1715}, {-32698, 2143},
-{-32667, 2570}, {-32631, 2998},
+{-30592, -11743}, {-30743, -11342},
+{-30888, -10938}, {-31029, -10533},
+{-31164, -10126}, {-31294, -9717},
+{-31419, -9307}, {-31538, -8895},
+{-31651, -8481}, {-31760, -8066},
+{-31863, -7650}, {-31960, -7232},
+{-32052, -6813}, {-32138, -6393},
+{-32219, -5971}, {-32295, -5549},
+{-32365, -5126}, {-32429, -4702},
+{-32488, -4277}, {-32541, -3851},
+{-32588, -3425}, {-32631, -2998},
+{-32667, -2571}, {-32698, -2143},
+{-32723, -1715}, {-32743, -1286},
+{-32757, -858}, {-32765, -429},
+{-32767, 0}, {-32765, 429},
+{-32757, 858}, {-32743, 1286},
+{-32723, 1715}, {-32698, 2143},
+{-32667, 2571}, {-32631, 2998},
 {-32588, 3425}, {-32541, 3851},
-{-32488, 4277}, {-32429, 4701},
-{-32364, 5125}, {-32295, 5548},
+{-32488, 4277}, {-32429, 4702},
+{-32365, 5126}, {-32295, 5549},
 {-32219, 5971}, {-32138, 6393},
-{-32051, 6813}, {-31960, 7231},
-{-31863, 7650}, {-31760, 8067},
-{-31652, 8481}, {-31539, 8895},
-{-31419, 9306}, {-31294, 9716},
-{-31165, 10126}, {-31030, 10532},
-{-30889, 10937}, {-30743, 11340},
-{-30592, 11741}, {-30436, 12141},
+{-32052, 6813}, {-31960, 7232},
+{-31863, 7650}, {-31760, 8066},
+{-31651, 8481}, {-31538, 8895},
+{-31419, 9307}, {-31294, 9717},
+{-31164, 10126}, {-31029, 10533},
+{-30888, 10938}, {-30743, 11342},
+{-30592, 11743}, {-30435, 12142},
 {-30274, 12540}, {-30107, 12935},
-{-29936, 13328}, {-29758, 13718},
-{-29577, 14107}, {-29390, 14493},
-{-29197, 14875}, {-29000, 15257},
-{-28797, 15635}, {-28590, 16010},
-{-28379, 16384}, {-28162, 16753},
-{-27940, 17119}, {-27714, 17484},
-{-27482, 17845}, {-27246, 18205},
-{-27006, 18560}, {-26760, 18911},
-{-26510, 19260}, {-26257, 19606},
-{-25997, 19947}, {-25734, 20286},
-{-25466, 20621}, {-25194, 20952},
-{-24918, 21281}, {-24637, 21605},
-{-24353, 21926}, {-24063, 22242},
-{-23770, 22555}, {-23473, 22865},
-{-23171, 23171}, {-22866, 23472},
-{-22557, 23769}, {-22244, 24063},
-{-21927, 24352}, {-21606, 24636},
-{-21282, 24917}, {-20954, 25194},
-{-20622, 25465}, {-20288, 25733},
-{-19949, 25997}, {-19607, 26255},
-{-19261, 26509}, {-18914, 26760},
-{-18561, 27004}, {-18205, 27246},
-{-17846, 27481}, {-17485, 27713},
-{-17122, 27940}, {-16755, 28162},
-{-16385, 28378}, {-16012, 28590},
-{-15636, 28797}, {-15258, 28999},
-{-14878, 29197}, {-14494, 29389},
-{-14108, 29576}, {-13720, 29757},
-{-13329, 29934}, {-12937, 30107},
+{-29935, 13328}, {-29758, 13719},
+{-29576, 14107}, {-29389, 14493},
+{-29197, 14876}, {-28999, 15257},
+{-28797, 15636}, {-28590, 16011},
+{-28378, 16384}, {-28161, 16754},
+{-27939, 17121}, {-27713, 17485},
+{-27482, 17847}, {-27246, 18205},
+{-27005, 18560}, {-26760, 18912},
+{-26510, 19261}, {-26255, 19606},
+{-25997, 19948}, {-25733, 20286},
+{-25466, 20622}, {-25193, 20953},
+{-24917, 21281}, {-24636, 21605},
+{-24351, 21926}, {-24062, 22243},
+{-23769, 22556}, {-23472, 22865},
+{-23170, 23170}, {-22865, 23472},
+{-22556, 23769}, {-22243, 24062},
+{-21926, 24351}, {-21605, 24636},
+{-21281, 24917}, {-20953, 25193},
+{-20622, 25466}, {-20286, 25733},
+{-19948, 25997}, {-19606, 26255},
+{-19261, 26510}, {-18912, 26760},
+{-18560, 27005}, {-18205, 27246},
+{-17847, 27482}, {-17485, 27713},
+{-17121, 27939}, {-16754, 28161},
+{-16384, 28378}, {-16011, 28590},
+{-15636, 28797}, {-15257, 28999},
+{-14876, 29197}, {-14493, 29389},
+{-14107, 29576}, {-13719, 29758},
+{-13328, 29935}, {-12935, 30107},
 {-12540, 30274}, {-12142, 30435},
-{-11744, 30592}, {-11342, 30743},
-{-10939, 30889}, {-10534, 31030},
-{-10127, 31164}, {-9718, 31294},
-{-9307, 31418}, {-8895, 31537},
-{-8482, 31652}, {-8067, 31759},
-{-7650, 31862}, {-7233, 31960},
-{-6815, 32051}, {-6393, 32138},
-{-5973, 32219}, {-5549, 32294},
-{-5127, 32364}, {-4703, 32429},
-{-4278, 32487}, {-3852, 32541},
-{-3426, 32588}, {-2999, 32630},
-{-2572, 32667}, {-2144, 32698},
-{-1716, 32724}, {-1287, 32742},
-{-860, 32757}, {-430, 32766},
-{0, 32767}, {429, 32766},
-{858, 32757}, {1287, 32743},
-{1715, 32724}, {2143, 32698},
-{2570, 32667}, {2998, 32631},
+{-11743, 30592}, {-11342, 30743},
+{-10938, 30888}, {-10533, 31029},
+{-10126, 31164}, {-9717, 31294},
+{-9307, 31419}, {-8895, 31538},
+{-8481, 31651}, {-8066, 31760},
+{-7650, 31863}, {-7232, 31960},
+{-6813, 32052}, {-6393, 32138},
+{-5971, 32219}, {-5549, 32295},
+{-5126, 32365}, {-4702, 32429},
+{-4277, 32488}, {-3851, 32541},
+{-3425, 32588}, {-2998, 32631},
+{-2571, 32667}, {-2143, 32698},
+{-1715, 32723}, {-1286, 32743},
+{-858, 32757}, {-429, 32765},
+{0, 32767}, {429, 32765},
+{858, 32757}, {1286, 32743},
+{1715, 32723}, {2143, 32698},
+{2571, 32667}, {2998, 32631},
 {3425, 32588}, {3851, 32541},
-{4277, 32488}, {4701, 32429},
-{5125, 32364}, {5548, 32295},
+{4277, 32488}, {4702, 32429},
+{5126, 32365}, {5549, 32295},
 {5971, 32219}, {6393, 32138},
-{6813, 32051}, {7231, 31960},
-{7650, 31863}, {8067, 31760},
-{8481, 31652}, {8895, 31539},
-{9306, 31419}, {9716, 31294},
-{10126, 31165}, {10532, 31030},
-{10937, 30889}, {11340, 30743},
-{11741, 30592}, {12141, 30436},
+{6813, 32052}, {7232, 31960},
+{7650, 31863}, {8066, 31760},
+{8481, 31651}, {8895, 31538},
+{9307, 31419}, {9717, 31294},
+{10126, 31164}, {10533, 31029},
+{10938, 30888}, {11342, 30743},
+{11743, 30592}, {12142, 30435},
 {12540, 30274}, {12935, 30107},
-{13328, 29936}, {13718, 29758},
-{14107, 29577}, {14493, 29390},
-{14875, 29197}, {15257, 29000},
-{15635, 28797}, {16010, 28590},
-{16384, 28379}, {16753, 28162},
-{17119, 27940}, {17484, 27714},
-{17845, 27482}, {18205, 27246},
-{18560, 27006}, {18911, 26760},
-{19260, 26510}, {19606, 26257},
-{19947, 25997}, {20286, 25734},
-{20621, 25466}, {20952, 25194},
-{21281, 24918}, {21605, 24637},
-{21926, 24353}, {22242, 24063},
-{22555, 23770}, {22865, 23473},
-{23171, 23171}, {23472, 22866},
-{23769, 22557}, {24063, 22244},
-{24352, 21927}, {24636, 21606},
-{24917, 21282}, {25194, 20954},
-{25465, 20622}, {25733, 20288},
-{25997, 19949}, {26255, 19607},
-{26509, 19261}, {26760, 18914},
-{27004, 18561}, {27246, 18205},
-{27481, 17846}, {27713, 17485},
-{27940, 17122}, {28162, 16755},
-{28378, 16385}, {28590, 16012},
-{28797, 15636}, {28999, 15258},
-{29197, 14878}, {29389, 14494},
-{29576, 14108}, {29757, 13720},
-{29934, 13329}, {30107, 12937},
+{13328, 29935}, {13719, 29758},
+{14107, 29576}, {14493, 29389},
+{14876, 29197}, {15257, 28999},
+{15636, 28797}, {16011, 28590},
+{16384, 28378}, {16754, 28161},
+{17121, 27939}, {17485, 27713},
+{17847, 27482}, {18205, 27246},
+{18560, 27005}, {18912, 26760},
+{19261, 26510}, {19606, 26255},
+{19948, 25997}, {20286, 25733},
+{20622, 25466}, {20953, 25193},
+{21281, 24917}, {21605, 24636},
+{21926, 24351}, {22243, 24062},
+{22556, 23769}, {22865, 23472},
+{23170, 23170}, {23472, 22865},
+{23769, 22556}, {24062, 22243},
+{24351, 21926}, {24636, 21605},
+{24917, 21281}, {25193, 20953},
+{25466, 20622}, {25733, 20286},
+{25997, 19948}, {26255, 19606},
+{26510, 19261}, {26760, 18912},
+{27005, 18560}, {27246, 18205},
+{27482, 17847}, {27713, 17485},
+{27939, 17121}, {28161, 16754},
+{28378, 16384}, {28590, 16011},
+{28797, 15636}, {28999, 15257},
+{29197, 14876}, {29389, 14493},
+{29576, 14107}, {29758, 13719},
+{29935, 13328}, {30107, 12935},
 {30274, 12540}, {30435, 12142},
-{30592, 11744}, {30743, 11342},
-{30889, 10939}, {31030, 10534},
-{31164, 10127}, {31294, 9718},
-{31418, 9307}, {31537, 8895},
-{31652, 8482}, {31759, 8067},
-{31862, 7650}, {31960, 7233},
-{32051, 6815}, {32138, 6393},
-{32219, 5973}, {32294, 5549},
-{32364, 5127}, {32429, 4703},
-{32487, 4278}, {32541, 3852},
-{32588, 3426}, {32630, 2999},
-{32667, 2572}, {32698, 2144},
-{32724, 1716}, {32742, 1287},
-{32757, 860}, {32766, 430},
+{30592, 11743}, {30743, 11342},
+{30888, 10938}, {31029, 10533},
+{31164, 10126}, {31294, 9717},
+{31419, 9307}, {31538, 8895},
+{31651, 8481}, {31760, 8066},
+{31863, 7650}, {31960, 7232},
+{32052, 6813}, {32138, 6393},
+{32219, 5971}, {32295, 5549},
+{32365, 5126}, {32429, 4702},
+{32488, 4277}, {32541, 3851},
+{32588, 3425}, {32631, 2998},
+{32667, 2571}, {32698, 2143},
+{32723, 1715}, {32743, 1286},
+{32757, 858}, {32765, 429},
+#endif
 };
 #ifndef FFT_BITREV480
 #define FFT_BITREV480
@@ -431,12 +674,16 @@
 #define FFT_STATE48000_960_0
 static const kiss_fft_state fft_state48000_960_0 = {
 480,    /* nfft */
+#ifdef ENABLE_QEXT
+572662306,    /* scale */
+#else
 17476,    /* scale */
-8,      /* scale_shift */
--1,     /* shift */
+#endif
+8,    /* scale_shift */
+-1,    /* shift */
 {5, 96, 3, 32, 4, 8, 2, 4, 4, 1, 0, 0, 0, 0, 0, 0, },    /* factors */
-fft_bitrev480,  /* bitrev */
-fft_twiddles48000_960,  /* bitrev */
+fft_bitrev480,    /* bitrev */
+fft_twiddles48000_960,    /* bitrev */
 #ifdef OVERRIDE_FFT
 (arch_fft_state *)&cfg_arch_480,
 #else
@@ -449,12 +696,16 @@
 #define FFT_STATE48000_960_1
 static const kiss_fft_state fft_state48000_960_1 = {
 240,    /* nfft */
+#ifdef ENABLE_QEXT
+572662306,    /* scale */
+#else
 17476,    /* scale */
-7,      /* scale_shift */
-1,      /* shift */
+#endif
+7,    /* scale_shift */
+1,    /* shift */
 {5, 48, 3, 16, 4, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, },    /* factors */
-fft_bitrev240,  /* bitrev */
-fft_twiddles48000_960,  /* bitrev */
+fft_bitrev240,    /* bitrev */
+fft_twiddles48000_960,    /* bitrev */
 #ifdef OVERRIDE_FFT
 (arch_fft_state *)&cfg_arch_240,
 #else
@@ -467,12 +718,16 @@
 #define FFT_STATE48000_960_2
 static const kiss_fft_state fft_state48000_960_2 = {
 120,    /* nfft */
+#ifdef ENABLE_QEXT
+572662306,    /* scale */
+#else
 17476,    /* scale */
-6,      /* scale_shift */
-2,      /* shift */
+#endif
+6,    /* scale_shift */
+2,    /* shift */
 {5, 24, 3, 8, 2, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, },    /* factors */
-fft_bitrev120,  /* bitrev */
-fft_twiddles48000_960,  /* bitrev */
+fft_bitrev120,    /* bitrev */
+fft_twiddles48000_960,    /* bitrev */
 #ifdef OVERRIDE_FFT
 (arch_fft_state *)&cfg_arch_120,
 #else
@@ -484,13 +739,17 @@
 #ifndef FFT_STATE48000_960_3
 #define FFT_STATE48000_960_3
 static const kiss_fft_state fft_state48000_960_3 = {
-60,     /* nfft */
+60,    /* nfft */
+#ifdef ENABLE_QEXT
+572662306,    /* scale */
+#else
 17476,    /* scale */
-5,      /* scale_shift */
-3,      /* shift */
+#endif
+5,    /* scale_shift */
+3,    /* shift */
 {5, 12, 3, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },    /* factors */
-fft_bitrev60,   /* bitrev */
-fft_twiddles48000_960,  /* bitrev */
+fft_bitrev60,    /* bitrev */
+fft_twiddles48000_960,    /* bitrev */
 #ifdef OVERRIDE_FFT
 (arch_fft_state *)&cfg_arch_60,
 #else
@@ -503,7 +762,369 @@
 
 #ifndef MDCT_TWIDDLES960
 #define MDCT_TWIDDLES960
-static const opus_val16 mdct_twiddles960[1800] = {
+static const celt_coef mdct_twiddles960[1800] = {
+#ifdef ENABLE_QEXT
+2147483468, 2147469095, 2147431723, 2147371355, 2147287990,
+2147181629, 2147052273, 2146899924, 2146724584, 2146526254,
+2146304937, 2146060634, 2145793349, 2145503083, 2145189842,
+2144853627, 2144494442, 2144112292, 2143707180, 2143279110,
+2142828088, 2142354118, 2141857204, 2141337354, 2140794571,
+2140228862, 2139640233, 2139028690, 2138394240, 2137736889,
+2137056645, 2136353515, 2135627506, 2134878626, 2134106884,
+2133312286, 2132494843, 2131654563, 2130791454, 2129905526,
+2128996788, 2128065251, 2127110924, 2126133817, 2125133941,
+2124111307, 2123065925, 2121997806, 2120906963, 2119793407,
+2118657149, 2117498202, 2116316578, 2115112291, 2113885352,
+2112635775, 2111363574, 2110068761, 2108751352, 2107411359,
+2106048798, 2104663683, 2103256028, 2101825849, 2100373162,
+2098897981, 2097400322, 2095880202, 2094337637, 2092772643,
+2091185237, 2089575437, 2087943258, 2086288720, 2084611839,
+2082912633, 2081191122, 2079447322, 2077681253, 2075892934,
+2074082383, 2072249621, 2070394667, 2068517540, 2066618262,
+2064696851, 2062753329, 2060787717, 2058800036, 2056790306,
+2054758550, 2052704789, 2050629045, 2048531340, 2046411698,
+2044270140, 2042106689, 2039921369, 2037714204, 2035485216,
+2033234429, 2030961869, 2028667558, 2026351522, 2024013785,
+2021654373, 2019273310, 2016870623, 2014446336, 2012000477,
+2009533071, 2007044144, 2004533723, 2002001835, 1999448508,
+1996873768, 1994277643, 1991660161, 1989021350, 1986361238,
+1983679853, 1980977226, 1978253383, 1975508355, 1972742171,
+1969954860, 1967146453, 1964316979, 1961466469, 1958594953,
+1955702462, 1952789027, 1949854680, 1946899451, 1943923372,
+1940926475, 1937908793, 1934870357, 1931811201, 1928731356,
+1925630856, 1922509734, 1919368023, 1916205758, 1913022972,
+1909819698, 1906595972, 1903351828, 1900087301, 1896802425,
+1893497236, 1890171769, 1886826060, 1883460144, 1880074058,
+1876667838, 1873241521, 1869795142, 1866328740, 1862842350,
+1859336011, 1855809760, 1852263635, 1848697674, 1845111914,
+1841506395, 1837881155, 1834236233, 1830571667, 1826887497,
+1823183763, 1819460504, 1815717761, 1811955572, 1808173978,
+1804373021, 1800552740, 1796713177, 1792854372, 1788976368,
+1785079205, 1781162925, 1777227570, 1773273182, 1769299805,
+1765307479, 1761296249, 1757266156, 1753217244, 1749149557,
+1745063138, 1740958031, 1736834279, 1732691928, 1728531020,
+1724351602, 1720153717, 1715937410, 1711702727, 1707449714,
+1703178415, 1698888876, 1694581143, 1690255263, 1685911282,
+1681549245, 1677169201, 1672771196, 1668355276, 1663921490,
+1659469885, 1655000508, 1650513407, 1646008631, 1641486227,
+1636946244, 1632388731, 1627813736, 1623221309, 1618611498,
+1613984353, 1609339924, 1604678260, 1599999411, 1595303428,
+1590590360, 1585860258, 1581113173, 1576349155, 1571568256,
+1566770527, 1561956018, 1557124783, 1552276872, 1547412337,
+1542531231, 1537633606, 1532719513, 1527789007, 1522842139,
+1517878963, 1512899531, 1507903898, 1502892116, 1497864239,
+1492820322, 1487760417, 1482684580, 1477592864, 1472485325,
+1467362016, 1462222994, 1457068312, 1451898025, 1446712191,
+1441510863, 1436294098, 1431061951, 1425814478, 1420551737,
+1415273782, 1409980671, 1404672460, 1399349206, 1394010966,
+1388657798, 1383289758, 1377906904, 1372509294, 1367096986,
+1361670037, 1356228505, 1350772450, 1345301929, 1339817000,
+1334317724, 1328804158, 1323276361, 1317734393, 1312178313,
+1306608181, 1301024057, 1295425999, 1289814068, 1284188325,
+1278548828, 1272895640, 1267228820, 1261548429, 1255854528,
+1250147177, 1244426439, 1238692373, 1232945043, 1227184508,
+1221410831, 1215624074, 1209824299, 1204011567, 1198185941,
+1192347484, 1186496258, 1180632325, 1174755748, 1168866591,
+1162964917, 1157050787, 1151124267, 1145185419, 1139234307,
+1133270995, 1127295547, 1121308026, 1115308496, 1109297023,
+1103273670, 1097238502, 1091191583, 1085132978, 1079062753,
+1072980972, 1066887699, 1060783002, 1054666944, 1048539592,
+1042401010, 1036251266, 1030090423, 1023918550, 1017735711,
+1011541973, 1005337402, 999122065, 992896028, 986659358,
+980412122, 974154386, 967886217, 961607684, 955318852,
+949019790, 942710564, 936391243, 930061894, 923722585,
+917373383, 911014357, 904645574, 898267104, 891879014,
+885481373, 879074249, 872657710, 866231826, 859796666,
+853352298, 846898791, 840436214, 833964638, 827484130,
+820994760, 814496598, 807989714, 801474176, 794950056,
+788417422, 781876345, 775326894, 768769141, 762203154,
+755629005, 749046764, 742456501, 735858287, 729252193,
+722638289, 716016646, 709387335, 702750427, 696105993,
+689454104, 682794832, 676128248, 669454423, 662773428,
+656085336, 649390218, 642688145, 635979190, 629263424,
+622540918, 615811746, 609075979, 602333690, 595584950,
+588829831, 582068407, 575300749, 568526931, 561747023,
+554961100, 548169234, 541371497, 534567963, 527758704,
+520943793, 514123303, 507297307, 500465878, 493629090,
+486787016, 479939728, 473087301, 466229807, 459367320,
+452499914, 445627662, 438750638, 431868915, 424982567,
+418091668, 411196291, 404296511, 397392401, 390484035,
+383571488, 376654833, 369734144, 362809495, 355880961,
+348948616, 342012534, 335072790, 328129457, 321182610,
+314232323, 307278671, 300321729, 293361570, 286398270,
+279431902, 272462542, 265490265, 258515144, 251537254,
+244556671, 237573469, 230587722, 223599506, 216608896,
+209615966, 202620791, 195623446, 188624006, 181622546,
+174619141, 167613866, 160606796, 153598006, 146587571,
+139575567, 132562067, 125547148, 118530885, 111513352,
+104494625, 97474778, 90453888, 83432030, 76409277,
+69385707, 62361393, 55336412, 48310838, 41284746,
+34258213, 27231312, 20204120, 13176712, 6149162,
+-878453, -7906059, -14933580, -21960942, -28988068,
+-36014884, -43041314, -50067283, -57092716, -64117537,
+-71141672, -78165045, -85187581, -92209205, -99229841,
+-106249414, -113267850, -120285073, -127301007, -134315578,
+-141328711, -148340330, -155350361, -162358728, -169365356,
+-176370170, -183373096, -190374058, -197372981, -204369791,
+-211364411, -218356769, -225346788, -232334393, -239319511,
+-246302065, -253281982, -260259186, -267233603, -274205159,
+-281173778, -288139385, -295101907, -302061269, -309017396,
+-315970213, -322919647, -329865622, -336808065, -343746901,
+-350682056, -357613455, -364541025, -371464690, -378384377,
+-385300013, -392211522, -399118830, -406021865, -412920551,
+-419814815, -426704583, -433589782, -440470337, -447346176,
+-454217223, -461083406, -467944652, -474800886, -481652035,
+-488498026, -495338786, -502174241, -509004318, -515828944,
+-522648046, -529461551, -536269386, -543071478, -549867754,
+-556658141, -563442567, -570220959, -576993244, -583759350,
+-590519205, -597272736, -604019870, -610760536, -617494660,
+-624222173, -630943000, -637657070, -644364312, -651064652,
+-657758021, -664444345, -671123554, -677795576, -684460338,
+-691117771, -697767803, -704410362, -711045377, -717672778,
+-724292493, -730904451, -737508582, -744104815, -750693079,
+-757273304, -763845419, -770409354, -776965038, -783512402,
+-790051375, -796581887, -803103868, -809617249, -816121959,
+-822617929, -829105090, -835583372, -842052705, -848513021,
+-854964249, -861406322, -867839170, -874262724, -880676915,
+-887081675, -893476935, -899862626, -906238681, -912605031,
+-918961607, -925308342, -931645168, -937972016, -944288820,
+-950595511, -956892022, -963178285, -969454234, -975719800,
+-981974918, -988219519, -994453537, -1000676905, -1006889557,
+-1013091426, -1019282445, -1025462549, -1031631671, -1037789745,
+-1043936705, -1050072485, -1056197020, -1062310244, -1068412091,
+-1074502497, -1080581395, -1086648722, -1092704411, -1098748398,
+-1104780618, -1110801008, -1116809501, -1122806034, -1128790543,
+-1134762964, -1140723232, -1146671283, -1152607055, -1158530484,
+-1164441505, -1170340057, -1176226074, -1182099496, -1187960258,
+-1193808298, -1199643553, -1205465961, -1211275460, -1217071986,
+-1222855479, -1228625876, -1234383115, -1240127136, -1245857875,
+-1251575272, -1257279266, -1262969796, -1268646800, -1274310217,
+-1279959989, -1285596052, -1291218348, -1296826816, -1302421396,
+-1308002029, -1313568653, -1319121210, -1324659641, -1330183885,
+-1335693885, -1341189580, -1346670912, -1352137822, -1357590252,
+-1363028143, -1368451438, -1373860077, -1379254004, -1384633159,
+-1389997487, -1395346928, -1400681427, -1406000925, -1411305366,
+-1416594694, -1421868850, -1427127780, -1432371426, -1437599733,
+-1442812644, -1448010104, -1453192057, -1458358447, -1463509220,
+-1468644319, -1473763690, -1478867279, -1483955030, -1489026889,
+-1494082802, -1499122714, -1504146572, -1509154322, -1514145910,
+-1519121283, -1524080387, -1529023170, -1533949577, -1538859558,
+-1543753058, -1548630027, -1553490410, -1558334157, -1563161216,
+-1567971534, -1572765060, -1577541744, -1582301533, -1587044377,
+-1591770225, -1596479027, -1601170732, -1605845289, -1610502649,
+-1615142762, -1619765578, -1624371047, -1628959121, -1633529750,
+-1638082885, -1642618478, -1647136479, -1651636841, -1656119516,
+-1660584454, -1665031609, -1669460933, -1673872378, -1678265898,
+-1682641444, -1686998971, -1691338432, -1695659779, -1699962968,
+-1704247951, -1708514683, -1712763118, -1716993211, -1721204917,
+-1725398189, -1729572984, -1733729257, -1737866963, -1741986057,
+-1746086497, -1750168237, -1754231234, -1758275445, -1762300826,
+-1766307335, -1770294927, -1774263561, -1778213194, -1782143784,
+-1786055289, -1789947667, -1793820875, -1797674873, -1801509620,
+-1805325074, -1809121194, -1812897940, -1816655271, -1820393147,
+-1824111529, -1827810376, -1831489648, -1835149306, -1838789312,
+-1842409625, -1846010208, -1849591022, -1853152028, -1856693188,
+-1860214464, -1863715819, -1867197215, -1870658615, -1874099982,
+-1877521279, -1880922469, -1884303515, -1887664383, -1891005035,
+-1894325435, -1897625550, -1900905342, -1904164776, -1907403819,
+-1910622435, -1913820590, -1916998250, -1920155379, -1923291946,
+-1926407915, -1929503255, -1932577931, -1935631910, -1938665161,
+-1941677650, -1944669345, -1947640214, -1950590226, -1953519348,
+-1956427550, -1959314800, -1962181067, -1965026321, -1967850531,
+-1970653667, -1973435699, -1976196596, -1978936331, -1981654873,
+-1984352192, -1987028261, -1989683050, -1992316532, -1994928677,
+-1997519459, -2000088848, -2002636818, -2005163342, -2007668391,
+-2010151941, -2012613963, -2015054432, -2017473321, -2019870604,
+-2022246257, -2024600252, -2026932566, -2029243173, -2031532049,
+-2033799168, -2036044507, -2038268042, -2040469748, -2042649603,
+-2044807583, -2046943664, -2049057824, -2051150040, -2053220291,
+-2055268553, -2057294804, -2059299024, -2061281190, -2063241282,
+-2065179277, -2067095157, -2068988899, -2070860485, -2072709893,
+-2074537104, -2076342098, -2078124857, -2079885360, -2081623590,
+-2083339527, -2085033153, -2086704450, -2088353400, -2089979985,
+-2091584189, -2093165993, -2094725382, -2096262337, -2097776843,
+-2099268884, -2100738443, -2102185505, -2103610054, -2105012075,
+-2106391553, -2107748474, -2109082822, -2110394584, -2111683744,
+-2112950291, -2114194210, -2115415487, -2116614110, -2117790065,
+-2118943341, -2120073924, -2121181804, -2122266967, -2123329402,
+-2124369098, -2125386044, -2126380229, -2127351642, -2128300272,
+-2129226111, -2130129147, -2131009371, -2131866773, -2132701345,
+-2133513078, -2134301962, -2135067990, -2135811153, -2136531442,
+-2137228852, -2137903373, -2138555000, -2139183723, -2139789539,
+-2140372438, -2140932416, -2141469466, -2141983583, -2142474761,
+-2142942995, -2143388280, -2143810610, -2144209982, -2144586392,
+-2144939834, -2145270306, -2145577804, -2145862324, -2146123864,
+-2146362421, -2146577992, -2146770575, -2146940167, -2147086768,
+-2147210375, -2147310987, -2147388603, -2147443222, -2147474844,
+2147482929, 2147425435, 2147275952, 2147034487, 2146701050,
+2146275656, 2145758322, 2145149071, 2144447929, 2143654926,
+2142770096, 2141793477, 2140725111, 2139565043, 2138313323,
+2136970005, 2135535146, 2134008809, 2132391057, 2130681961,
+2128881593, 2126990031, 2125007356, 2122933653, 2120769010,
+2118513521, 2116167282, 2113730393, 2111202959, 2108585087,
+2105876892, 2103078487, 2100189994, 2097211535, 2094143239,
+2090985237, 2087737664, 2084400659, 2080974365, 2077458929,
+2073854502, 2070161238, 2066379295, 2062508835, 2058550025,
+2054503033, 2050368032, 2046145201, 2041834720, 2037436773,
+2032951550, 2028379241, 2023720043, 2018974156, 2014141783,
+2009223131, 2004218410, 1999127836, 1993951625, 1988690000,
+1983343186, 1977911412, 1972394912, 1966793920, 1961108677,
+1955339428, 1949486417, 1943549898, 1937530123, 1931427351,
+1925241843, 1918973864, 1912623682, 1906191570, 1899677803,
+1893082661, 1886406424, 1879649381, 1872811820, 1865894033,
+1858896318, 1851818974, 1844662304, 1837426615, 1830112217,
+1822719423, 1815248550, 1807699917, 1800073849, 1792370671,
+1784590714, 1776734311, 1768801799, 1760793518, 1752709809,
+1744551021, 1736317502, 1728009604, 1719627685, 1711172102,
+1702643219, 1694041400, 1685367013, 1676620432, 1667802029,
+1658912184, 1649951276, 1640919689, 1631817811, 1622646032,
+1613404744, 1604094343, 1594715227, 1585267800, 1575752465,
+1566169630, 1556519705, 1546803104, 1537020244, 1527171542,
+1517257422, 1507278307, 1497234626, 1487126808, 1476955286,
+1466720497, 1456422878, 1446062871, 1435640919, 1425157469,
+1414612971, 1404007875, 1393342636, 1382617710, 1371833558,
+1360990642, 1350089425, 1339130374, 1328113960, 1317040654,
+1305910930, 1294725265, 1283484138, 1272188032, 1260837429,
+1249432816, 1237974681, 1226463516, 1214899813, 1203284068,
+1191616778, 1179898443, 1168129565, 1156310649, 1144442200,
+1132524727, 1120558740, 1108544752, 1096483278, 1084374834,
+1072219940, 1060019115, 1047772882, 1035481766, 1023146293,
+1010766993, 998344394, 985879030, 973371434, 960822142,
+948231691, 935600622, 922929474, 910218791, 897469118,
+884680999, 871854984, 858991622, 846091463, 833155061,
+820182969, 807175743, 794133941, 781058120, 767948841,
+754806666, 741632158, 728425880, 715188400, 701920283,
+688622098, 675294414, 661937804, 648552838, 635140090,
+621700135, 608233549, 594740907, 581222789, 567679774,
+554112440, 540521371, 526907147, 513270353, 499611571,
+485931388, 472230390, 458509162, 444768294, 431008373,
+417229989, 403433732, 389620194, 375789965, 361943639,
+348081809, 334205068, 320314011, 306409232, 292491328,
+278560894, 264618528, 250664827, 236700388, 222725809,
+208741690, 194748629, 180747225, 166738079, 152721790,
+138698959, 124670187, 110636075, 96597223, 82554233,
+68507707, 54458246, 40406452, 26352928, 12298274,
+-1756906, -15812011, -29866438, -43919586, -57970853,
+-72019637, -86065335, -100107347, -114145071, -128177904,
+-142205248, -156226499, -170241059, -184248325, -198247699,
+-212238581, -226220372, -240192472, -254154282, -268105206,
+-282044645, -295972002, -309886680, -323788084, -337675619,
+-351548688, -365406698, -379249055, -393075166, -406884440,
+-420676284, -434450107, -448205320, -461941333, -475657559,
+-489353409, -503028296, -516681636, -530312842, -543921332,
+-557506522, -571067830, -584604676, -598116479, -611602660,
+-625062643, -638495850, -651901706, -665279637, -678629069,
+-691949432, -705240153, -718500664, -731730397, -744928785,
+-758095263, -771229267, -784330234, -797397602, -810430813,
+-823429308, -836392529, -849319923, -862210934, -875065011,
+-887881603, -900660162, -913400139, -926100989, -938762167,
+-951383133, -963963344, -976502263, -988999351, -1001454074,
+-1013865898, -1026234291, -1038558724, -1050838668, -1063073598,
+-1075262990, -1087406320, -1099503070, -1111552721, -1123554757,
+-1135508663, -1147413928, -1159270041, -1171076495, -1182832785,
+-1194538405, -1206192856, -1217795637, -1229346252, -1240844206,
+-1252289006, -1263680162, -1275017186, -1286299593, -1297526899,
+-1308698624, -1319814288, -1330873416, -1341875533, -1352820169,
+-1363706855, -1374535124, -1385304512, -1396014559, -1406664805,
+-1417254794, -1427784073, -1438252190, -1448658697, -1459003149,
+-1469285102, -1479504115, -1489659751, -1499751576, -1509779156,
+-1519742062, -1529639867, -1539472148, -1549238483, -1558938453,
+-1568571644, -1578137643, -1587636039, -1597066426, -1606428400,
+-1615721561, -1624945509, -1634099849, -1643184191, -1652198144,
+-1661141322, -1670013342, -1678813825, -1687542393, -1696198672,
+-1704782292, -1713292884, -1721730085, -1730093532, -1738382868,
+-1746597738, -1754737789, -1762802673, -1770792044, -1778705561,
+-1786542883, -1794303676, -1801987607, -1809594347, -1817123570,
+-1824574954, -1831948179, -1839242929, -1846458892, -1853595759,
+-1860653224, -1867630985, -1874528743, -1881346202, -1888083070,
+-1894739060, -1901313885, -1907807264, -1914218919, -1920548575,
+-1926795962, -1932960811, -1939042858, -1945041843, -1950957509,
+-1956789602, -1962537873, -1968202076, -1973781967, -1979277308,
+-1984687864, -1990013401, -1995253694, -2000408516, -2005477648,
+-2010460871, -2015357973, -2020168744, -2024892978, -2029530472,
+-2034081027, -2038544449, -2042920547, -2047209133, -2051410023,
+-2055523038, -2059548001, -2063484740, -2067333086, -2071092874,
+-2074763944, -2078346137, -2081839301, -2085243286, -2088557947,
+-2091783140, -2094918728, -2097964577, -2100920556, -2103786539,
+-2106562402, -2109248028, -2111843300, -2114348108, -2116762344,
+-2119085905, -2121318692, -2123460608, -2125511562, -2127471467,
+-2129340237, -2131117794, -2132804061, -2134398966, -2135902440,
+-2137314419, -2138634843, -2139863654, -2141000801, -2142046235,
+-2142999911, -2143861787, -2144631828, -2145310000, -2145896274,
+-2146390624, -2146793031, -2147103476, -2147321946, -2147448433,
+2147480773, 2147250799, 2146652904, 2145687192, 2144353827,
+2142653038, 2140585116, 2138150417, 2135349356, 2132182414,
+2128650133, 2124753120, 2120492040, 2115867626, 2110880668,
+2105532022, 2099822604, 2093753392, 2087325426, 2080539807,
+2073397699, 2065900325, 2058048970, 2049844978, 2041289756,
+2032384769, 2023131544, 2013531666, 2003586779, 1993298588,
+1982668856, 1971699403, 1960392110, 1948748914, 1936771810,
+1924462850, 1911824143, 1898857855, 1885566207, 1871951478,
+1858015999, 1843762158, 1829192399, 1814309216, 1799115162,
+1783612838, 1767804901, 1751694060, 1735283075, 1718574758,
+1701571972, 1684277631, 1666694698, 1648826185, 1630675154,
+1612244715, 1593538026, 1574558293, 1555308768, 1535792748,
+1516013578, 1495974647, 1475679389, 1455131280, 1434333842,
+1413290638, 1392005275, 1370481398, 1348722696, 1326732898,
+1304515771, 1282075122, 1259414796, 1236538675, 1213450681,
+1190154767, 1166654927, 1142955186, 1119059606, 1094972281,
+1070697338, 1046238936, 1021601267, 996788551, 971805042,
+946655018, 921342790, 895872694, 870249095, 844476384,
+818558976, 792501312, 766307857, 739983099, 713531549,
+686957739, 660266222, 633461572, 606548381, 579531262,
+552414843, 525203770, 497902707, 470516330, 443049333,
+415506422, 387892316, 360211746, 332469456, 304670200,
+276818739, 248919847, 220978304, 192998897, 164986421,
+136945676, 108881465, 80798598, 52701887, 24596146,
+-3513810, -31623164, -59727099, -87820801, -115899455,
+-143958250, -171992378, -199997036, -227967426, -255898755,
+-283786237, -311625094, -339410555, -367137861, -394802258,
+-422399009, -449923384, -477370666, -504736154, -532015158,
+-559203003, -586295032, -613286603, -640173090, -666949886,
+-693612404, -720156076, -746576352, -772868706, -799028633,
+-825051651, -850933300, -876669146, -902254780, -927685817,
+-952957899, -978066697, -1003007909, -1027777260, -1052370507,
+-1076783436, -1101011863, -1125051638, -1148898640, -1172548785,
+-1195998020, -1219242327, -1242277723, -1265100260, -1287706030,
+-1310091157, -1332251808, -1354184184, -1375884527, -1397349119,
+-1418574283, -1439556382, -1460291820, -1480777044, -1501008545,
+-1520982856, -1540696555, -1560146263, -1579328647, -1598240423,
+-1616878347, -1635239228, -1653319919, -1671117323, -1688628389,
+-1705850117, -1722779556, -1739413807, -1755750017, -1771785389,
+-1787517174, -1802942678, -1818059257, -1832864320, -1847355332,
+-1861529809, -1875385322, -1888919498, -1902130017, -1915014616,
+-1927571087, -1939797279, -1951691096, -1963250501, -1974473513,
+-1985358210, -1995902725, -2006105253, -2015964045, -2025477412,
+-2034643724, -2043461410, -2051928960, -2060044922, -2067807906,
+-2075216581, -2082269679, -2088965991, -2095304370, -2101283728,
+-2106903043, -2112161350, -2117057750, -2121591402, -2125761531,
+-2129567422, -2133008422, -2136083942, -2138793455, -2141136497,
+-2143112666, -2144721624, -2145963095, -2146836866, -2147342788,
+2147472149, 2146552303, 2144161316, 2140300829, 2134973487,
+2128182940, 2119933843, 2110231849, 2099083608, 2086496759,
+2072479930, 2057042727, 2040195730, 2021950484, 2002319494,
+1981316215, 1958955040, 1935251296, 1910221227, 1883881987,
+1856251629, 1827349089, 1797194176, 1765807555, 1733210737,
+1699426064, 1664476689, 1628386565, 1591180426, 1552883771,
+1513522847, 1473124631, 1431716808, 1389327759, 1345986533,
+1301722835, 1256567002, 1210549980, 1163703308, 1116059092,
+1067649985, 1018509163, 968670307, 918167572, 867035571,
+815309347, 763024350, 710216415, 656921734, 603176830,
+549018540, 494483979, 439610524, 384435782, 328997567,
+273333873, 217482850, 161482775, 105372028, 49189064,
+-7027611, -63239471, -119407989, -175494670, -231461077,
+-287268852, -342879747, -398255649, -453358607, -508150855,
+-562594842, -616653255, -670289044, -723465451, -776146031,
+-828294679, -879875655, -930853609, -981193602, -1030861133,
+-1079822164, -1128043139, -1175491010, -1222133257, -1267937916,
+-1312873593, -1356909492, -1400015434, -1442161874, -1483319929,
+-1523461391, -1562558748, -1600585205, -1637514702, -1673321927,
+-1707982341, -1741472190, -1773768520, -1804849198, -1834692923,
+-1863279241, -1890588560, -1916602164, -1941302225, -1964671814,
+-1986694916, -2007356435, -2026642214, -2044539032, -2061034626,
+-2076117690, -2089777886, -2102005853, -2112793210, -2122132564,
+-2130017514, -2136442657, -2141403589, -2144896910, -2146920225,
+#else
 32767, 32767, 32767, 32766, 32765,
 32763, 32761, 32759, 32756, 32753,
 32750, 32746, 32742, 32738, 32733,
@@ -864,25 +1485,26 @@
 -30315, -30630, -30924, -31197, -31449,
 -31679, -31887, -32074, -32239, -32381,
 -32501, -32600, -32675, -32729, -32759,
+#endif
 };
 #endif
 
 static const CELTMode mode48000_960_120 = {
-48000,  /* Fs */
+48000,    /* Fs */
 120,    /* overlap */
-21,     /* nbEBands */
-21,     /* effEBands */
-{27853, 0, 4096, 8192, },       /* preemph */
-eband5ms,       /* eBands */
-3,      /* maxLM */
-8,      /* nbShortMdcts */
+21,    /* nbEBands */
+21,    /* effEBands */
+{27853, 0, 4096, 8192, },    /* preemph */
+eband5ms,    /* eBands */
+3,    /* maxLM */
+8,    /* nbShortMdcts */
 120,    /* shortMdctSize */
-11,     /* nbAllocVectors */
-band_allocation,        /* allocVectors */
-logN400,        /* logN */
-window120,      /* window */
+11,    /* nbAllocVectors */
+band_allocation,    /* allocVectors */
+logN400,    /* logN */
+window120,    /* window */
 {1920, 3, {&fft_state48000_960_0, &fft_state48000_960_1, &fft_state48000_960_2, &fft_state48000_960_3, }, mdct_twiddles960},    /* mdct */
-{392, cache_index50, cache_bits50, cache_caps50},       /* cache */
+{392, cache_index50, cache_bits50, cache_caps50},    /* cache */
 };
 
 /* List of all the available modes */
--