diff --git a/.gitignore b/.gitignore index 21b780e5..efa9bc45 100755 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ *.pro.user build/ +.idea/ +*.iml \ No newline at end of file diff --git a/README.md b/README.md index 03012061..0440cf49 100644 --- a/README.md +++ b/README.md @@ -320,7 +320,7 @@ The D-Bus introspection XML is available here: https://github.com/Audio4Linux/JD
Tim Schneeberger (ThePBone)
- 7094 words + 7284 words logo @@ -341,7 +341,14 @@ The D-Bus introspection XML is available here: https://github.com/Audio4Linux/JD
Katie Frogs (KatieFrogs)

- 2670 words + 2848 words + + + logo +
+ catvinyl
+
+ 2352 words logo @@ -355,7 +362,7 @@ The D-Bus introspection XML is available here: https://github.com/Audio4Linux/JD
NullPointerException (seqfault)

- 1106 words + 1151 words logo @@ -364,6 +371,8 @@ The D-Bus introspection XML is available here: https://github.com/Audio4Linux/JD
373 words + +
logo
@@ -371,8 +380,13 @@ The D-Bus introspection XML is available here: https://github.com/Audio4Linux/JD
240 words - - + +
logo +
+ AnClark Liu (AnClark)
+
+ 173 words + logo
@@ -387,6 +401,13 @@ The D-Bus introspection XML is available here: https://github.com/Audio4Linux/JD
114 words + +
logo +
+ James Fung (james34602)
+
+ 72 words + logo
@@ -408,6 +429,8 @@ The D-Bus introspection XML is available here: https://github.com/Audio4Linux/JD
13 words + +
logo
diff --git a/libjamesdsp/libjamesdsp.pro b/libjamesdsp/libjamesdsp.pro index b89150cc..2d050509 100644 --- a/libjamesdsp/libjamesdsp.pro +++ b/libjamesdsp/libjamesdsp.pro @@ -10,6 +10,8 @@ QMAKE_CFLAGS += -std=gnu11 -O2 CONFIG += warn_off # Disable warnings for library +DEBUG_ASAN: CONFIG += sanitizer sanitize_address + # Enable liveprog logging redirection DEFINES += CUSTOM_CMD @@ -55,7 +57,22 @@ HEADERS += \ $$BASEPATH/jdsp_header.h \ EELStdOutExtension.h \ PrintfStdOutExtension.h \ - JdspImpResToolbox.h + JdspImpResToolbox.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxpre.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxxsrc/xcomplex.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxxsrc/xreal.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/doc/xcomplex.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/doc/xreal.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/hpaconf.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/mp/const07.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/mp/const11.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/mp/const15.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/mp/const19.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/mp/const23.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/mp/const27.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/mp/const31.h \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xpre.h \ + $$BASEPATH/Effects/info.h SOURCES += \ $$BASEPATH/Effects/arbEqConv.c \ @@ -105,7 +122,45 @@ SOURCES += \ EELStdOutExtension.c \ PrintfStdOutExtension.c \ JdspImpResToolbox.c \ - subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/multimodalEQ.c + $$BASEPATH/Effects/eel2/numericSys/HPFloat/atox.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/constant.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxaop.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxbasic.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxconstant.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxconvf.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxexp.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxhypb.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxidiv.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxpow.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxprcmp.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/cxtrig.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/hpaconf.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/prcxpr.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/print.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/prxpr.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/sfmod.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/shift.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xadd.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xchcof.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xdiv.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xevtch.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xexp.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xfmod.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xfrac.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xhypb.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xivhypb.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xivtrg.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xlog.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xmul.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xneg.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xprcmp.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xpwr.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xsigerr.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xsqrt.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xtodbl.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xtoflt.c \ + $$BASEPATH/Effects/eel2/numericSys/HPFloat/xtrig.c \ + $$BASEPATH/Effects/multimodalEQ.c unix { isEmpty(LIBDIR) { diff --git a/libjamesdsp/subtree/Main/CLI/JamesDSPLib.vcxproj b/libjamesdsp/subtree/Main/CLI/JamesDSPLib.vcxproj index 48449f46..b641fffb 100644 --- a/libjamesdsp/subtree/Main/CLI/JamesDSPLib.vcxproj +++ b/libjamesdsp/subtree/Main/CLI/JamesDSPLib.vcxproj @@ -38,7 +38,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -50,8 +90,8 @@ - + @@ -83,14 +123,17 @@ + + + - + @@ -103,33 +146,33 @@ {0B79F137-4D4B-448F-95FF-2E6D56BE770B} Win32Proj JamesDSPLib - 10.0.19041.0 + 10.0 JamesDSPLib Application true - v141 + v142 MultiByte Application false - v141 + v142 true MultiByte Application true - v141 + v142 MultiByte Application false - v141 + v142 true MultiByte diff --git a/libjamesdsp/subtree/Main/CLI/JamesDSPLib.vcxproj.filters b/libjamesdsp/subtree/Main/CLI/JamesDSPLib.vcxproj.filters index d742efd2..7569d18c 100644 --- a/libjamesdsp/subtree/Main/CLI/JamesDSPLib.vcxproj.filters +++ b/libjamesdsp/subtree/Main/CLI/JamesDSPLib.vcxproj.filters @@ -44,9 +44,6 @@ jdsp\Effects - - jdsp\Effects - jdsp\Effects @@ -134,6 +131,129 @@ jdsp\Effects\eel2\numericSys\SolveLinearSystem + + jdsp\Effects + + + jdsp\Effects\eel2\numericSys\libsamplerate + + + jdsp\Effects\eel2\numericSys\FilterDesign + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + @@ -160,6 +280,9 @@ {120faa8f-8a0e-42a8-86c4-bfe62ab09b72} + + {8a0ba327-7ca9-4821-9afb-ef3d7eca4812} + @@ -249,11 +372,20 @@ jdsp\Effects\eel2\numericSys\libsamplerate - - jdsp\Effects\eel2\numericSys\libsamplerate - jdsp\Effects\eel2\numericSys\SolveLinearSystem + + jdsp\Effects + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + + + jdsp\Effects\eel2\numericSys\HPFloat + \ No newline at end of file diff --git a/libjamesdsp/subtree/Main/CLI/desktop.ini b/libjamesdsp/subtree/Main/CLI/desktop.ini deleted file mode 100644 index d957fd18..00000000 --- a/libjamesdsp/subtree/Main/CLI/desktop.ini +++ /dev/null @@ -1,4 +0,0 @@ -[ViewState] -Mode= -Vid= -FolderType=Generic diff --git a/libjamesdsp/subtree/Main/CLI/hpfloat.eel b/libjamesdsp/subtree/Main/CLI/hpfloat.eel new file mode 100644 index 00000000..ff66de86 --- /dev/null +++ b/libjamesdsp/subtree/Main/CLI/hpfloat.eel @@ -0,0 +1,94 @@ +desc: Hadamard Variable Delay Array + +@init +// Constants +printf("hZero: %F\n", $hZero); +printf("hOne: %F\n", $hOne); +printf("hTwo: %F\n", $hTwo); +printf("hTen: %F\n", $hTen); +printf("hPinf: %F\n", $hPinf); +printf("hMinf: %F\n", $hMinf); +printf("hNaN: %F\n", $hNaN); +printf("hPi: %F\n", $hPi); +printf("hPi2: %F\n", $hPi2); +printf("hPi4: %F\n", $hPi4); +printf("hEe: %F\n", $hEe); +printf("hSqrt2: %F\n", $hSqrt2); +printf("hLn2: %F\n", $hLn2); +printf("hLn10: %F\n", $hLn10); +printf("hLog2_e: %F\n", $hLog2_e); +printf("hLog2_10: %F\n", $hLog2_10); +printf("hLog2_e: %F\n", $hLog2_e); +printf("HPA_MIN: %F\n", $HPA_MIN); +printf("HPA_MAX: %F\n", $HPA_MAX); +// Arithmetic +num256b_1 = xFloatS("0.4121114214214945995439191"); +num256b_2 = xFloatF(-4.1456); +str1 = xF2str(num256b_2); +flt1 = xF2f32(num256b_1); +printf("Load from string 1: %F\nLoad from string 2: %s\nConvert back to float32: %f\n", num256b_1, str1, flt1); + +var1 = xAdd(num256b_1, num256b_2); +var2 = xSub(num256b_1, num256b_2); +var3 = xMul(num256b_1, num256b_2); +var4 = xDiv(num256b_1, num256b_2); +var5 = xclone(num256b_1); +printf("Add(var1): %F\nSub(var2): %F\nMul(var3): %F\nDiv(var4): %F\nCloned variable: %F\n", var1, var2, var3, var4, var5); + +var6 = xsin(var1); +var7 = xcos(var2); +var8 = xtan(var3); +var9 = xasin(var1); +var10 = xacos(xfrac(var2)); +var11 = xatan(var3); +var12 = xsinh(var1); +var13 = xcosh(var2); +var14 = xtanh(var3); +var15 = xasinh(var1); +var16 = xacosh(var2); +var17 = xatanh(xfrac(var3)); +var18 = xatan2(xFloatS("-0.8"), xFloatS("2.7")); +printf("sin(var1): %F\n", var6); +printf("cos(var2): %F\n", var7); +printf("tan(var3): %F\n", var8); +printf("asin(var1): %F\n", var9); +printf("acos(xfrac(var2)): %F\n", var10); +printf("atan(var3): %F\n", var11); +printf("sinh(var1): %F\n", var12); +printf("cosh(var2): %F\n", var13); +printf("tanh(var3): %F\n", var14); +printf("asinh(var1): %F\n", var15); +printf("acosh(var2): %F\n", var16); +printf("atanh(frac(var3)): %F\n", var17); +printf("xatan2(-0.8, 2.7): %F\n", var18); +var19 = xround(xFloatS("-10.8")); +var20 = xceil(xFloatS("-10.8")); +var21 = xfloor(xFloatS("-10.8")); +var22 = xtrunc(xFloatS("-10.8")); +var23 = xfix(xFloatS("-10.8")); +var24 = xfrac(xFloatS("80.84125")); +printf("round(-10.8): %F\nceil(-10.8): %F\nfloor(-10.8): %F\ntrunc(-10.8): %F\nfix(-10.8): %F\nfrac(-10.8): %F\n", var19, var20, var21, var22, var23, var24); +var25 = xNegation(var17); +printf("-var17 = %F\n", var25); +var26 = xsqrt(xabs(var22)); +var27 = xexp(var22); +printf("sqrt(abs(var22)) = %F\n", var26); + +logic1 = xequal(var5, num256b_1); +logic2 = xequal(var5, var20); +printf("Is var5 == num256b_1 -> %d\n", logic1); +printf("Is var5 == var20 -> %d\n", logic2); +printf("Is var6 <= var7 -> %d\n", xlessequal(var6, var7)); +printf("Is var6 < var7 -> %d\n", xless(var6, var7)); +printf("Is var18 >= var17 -> %d\n", xgreaterequal(var18, var17)); +printf("Is var17 > var18 -> %d\n", xgreater(var17, var18)); + +printf("exp(0.421) = %F\n", xexp(xFloatS("2.214"))); +printf("exp2(0.421) = %F\n", xexp2(xFloatS("2.214"))); +printf("exp10(0.421) = %F\n", xexp10(xFloatS("2.214"))); +printf("log(0.221) = %F\n", xlog(xFloatS("2.214"))); +printf("log2(0.221) = %F\n", xlog2(xFloatS("2.214"))); +printf("log10(0.221) = %F\n", xlog10(xFloatS("2.214"))); +printf("pow(12.54, 16.45) = %F\n", xpow(xFloatS("12.54"), xFloatS("16.45"))); +printf("intpow(12.54, 280) = %F\n", xintpow(xFloatS("12.54"), 290)); +@sample diff --git a/libjamesdsp/subtree/Main/CLI/main.c b/libjamesdsp/subtree/Main/CLI/main.c index e262622b..6c12850a 100644 --- a/libjamesdsp/subtree/Main/CLI/main.c +++ b/libjamesdsp/subtree/Main/CLI/main.c @@ -5,31 +5,8 @@ #include #include "../libjamesdsp/jni/jamesdsp/jdsp/jdsp_header.h" #include "../libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/dr_wav.h" -// Windows -#ifdef _WIN32 -#include -#include -//////////////////////////////////////////////////////////////////// -// Performance timer -double get_wall_time() -{ - LARGE_INTEGER time, freq; - if (!QueryPerformanceFrequency(&freq)) - return 0; - if (!QueryPerformanceCounter(&time)) - return 0; - return (double)time.QuadPart / freq.QuadPart; -} -double get_cpu_time() -{ - FILETIME a, b, c, d; - if (GetProcessTimes(GetCurrentProcess(), &a, &b, &c, &d) != 0) - return (double)(d.dwLowDateTime | ((unsigned long long)d.dwHighDateTime << 32)) * 0.0000001; - else - return 0; -} #include -char* openTextFile(char *fileSelectorPath) +char *openTextFile(char *fileSelectorPath) { char *buffer = 0; long length; @@ -39,7 +16,7 @@ char* openTextFile(char *fileSelectorPath) fseek(textFile, 0, SEEK_END); length = ftell(textFile); fseek(textFile, 0, SEEK_SET); - buffer = (char*)malloc(length + 1); + buffer = (char *)malloc(length + 1); if (buffer) fread(buffer, 1, length, textFile); fclose(textFile); @@ -48,10 +25,10 @@ char* openTextFile(char *fileSelectorPath) return buffer; } extern void JamesDSPOfflineResampling(float const *in, float *out, size_t lenIn, size_t lenOut, int channels, double src_ratio); -float* FileSelecterPopupWavFileWin32(char *fileSelectorPath, double targetFs, unsigned int *channels, size_t *totalPCMFrameCount) +float *FileSelecterPopupWavFileWin32(char *fileSelectorPath, double targetFs, unsigned int *channels, size_t *totalPCMFrameCount) { unsigned int fs; - float* pSampleData = drwav_open_file_and_read_pcm_frames_f32(fileSelectorPath, channels, &fs, totalPCMFrameCount, 0); + float *pSampleData = drwav_open_file_and_read_pcm_frames_f32(fileSelectorPath, channels, &fs, totalPCMFrameCount, 0); if (pSampleData == NULL) { printf("Error opening and reading WAV file"); @@ -72,47 +49,13 @@ float* FileSelecterPopupWavFileWin32(char *fileSelectorPath, double targetFs, un } double ratio = targetFs / (double)fs; int compressedLen = (int)ceil(*totalPCMFrameCount * ratio); - float *tmpBuf = (float*)malloc(compressedLen * *channels * sizeof(float)); + float *tmpBuf = (float *)malloc(compressedLen * *channels * sizeof(float)); memset(tmpBuf, 0, compressedLen * *channels * sizeof(float)); JamesDSPOfflineResampling(pSampleData, tmpBuf, *totalPCMFrameCount, compressedLen, *channels, ratio); *totalPCMFrameCount = compressedLen; free(pSampleData); return tmpBuf; } -#else -#include -#include -double get_wall_time() -{ - struct timeval time; - if (gettimeofday(&time, NULL)) - return 0; - return (double)time.tv_sec + (double)time.tv_usec * .000001; -} -double get_cpu_time() -{ - return (double)clock() / CLOCKS_PER_SEC; -} -#endif -//////////////////////////////////////////////////////////////////// -char *inputString(FILE* fp, size_t size) -{ - //The size is extended by the input with the value of the provisional - char *str; - int ch; - size_t len = 0; - str = realloc(NULL, sizeof(char)*size);//size is start size - if (!str)return str; - while (EOF != (ch = fgetc(fp)) && ch != '\n') { - str[len++] = ch; - if (len == size) { - str = realloc(str, sizeof(char)*(size += 16)); - if (!str)return str; - } - } - str[len++] = '\0'; - return realloc(str, sizeof(char)*len); -} char *basename(char const *path) { #ifdef _MSC_VER @@ -133,10 +76,10 @@ typedef struct float paramFloat; } threadTest; /* this function is run by the second thread */ -float* loadWaveFile(double targetFs, unsigned int *channels, size_t *totalPCMFrameCount) +float *loadWaveFile(double targetFs, unsigned int *channels, size_t *totalPCMFrameCount) { unsigned int fs; - float* pSampleData = drwav_open_file_and_read_pcm_frames_f32("EqResponse.wav", channels, &fs, totalPCMFrameCount, 0); + float *pSampleData = drwav_open_file_and_read_pcm_frames_f32("EqResponse.wav", channels, &fs, totalPCMFrameCount, 0); if (pSampleData == NULL) { printf("Error opening and reading WAV file"); @@ -157,7 +100,7 @@ float* loadWaveFile(double targetFs, unsigned int *channels, size_t *totalPCMFra } double ratio = targetFs / (double)fs; int compressedLen = (int)ceil(*totalPCMFrameCount * ratio); - float *tmpBuf = (float*)malloc(compressedLen * *channels * sizeof(float)); + float *tmpBuf = (float *)malloc(compressedLen * *channels * sizeof(float)); memset(tmpBuf, 0, compressedLen * *channels * sizeof(float)); JamesDSPOfflineResampling(pSampleData, tmpBuf, *totalPCMFrameCount, compressedLen, *channels, ratio); *totalPCMFrameCount = compressedLen; @@ -168,29 +111,70 @@ void *inc_x(void *x_void_ptr) { threadTest *x_ptr = (threadTest *)x_void_ptr; JamesDSPLib *jdsp = x_ptr->dspPtr; -// jdsp->crossfeedForceRefresh = 1; -// CrossfeedChangeMode(jdsp, 3); + // jdsp->crossfeedForceRefresh = 1; + // CrossfeedChangeMode(jdsp, 3); int impulseChannels; size_t impFrameCount; float *impulseResponse = loadWaveFile(jdsp->fs, &impulseChannels, &impFrameCount); - Convolver1DLoadImpulseResponse(jdsp, impulseResponse, impulseChannels, impFrameCount); + Convolver1DLoadImpulseResponse(jdsp, impulseResponse, impulseChannels, impFrameCount, 1); free(impulseResponse); Convolver1DEnable(jdsp); pthread_exit(NULL); return NULL; } -FILE *tele = 0; -FILE *tele2 = 0; -// We support only .wav file as JDSP buffer testing and processing -#define FILENAME "137777fs.wav" +double freqTh[NUMPTS] = { 25.0, 40.0, 63.0, 100.0, 160.0, 250.0, 400.0, 630.0, 1000.0, 1600.0, 2500.0, 4000.0, 6300.0, 10000.0, 16000.0 }; +double gainsTh[NUMPTS] = { 5.0, -1.0, -4, -1, 2.1, 0.0, 0.0, 0.7, -10.7, 0.0, 0.0, 0.0, 0.0, 0.8, 8.0 }; +int idxN, readCountN; +/*void *inc_eq(void *x_void_ptr) +{ + threadTest *x_ptr = (threadTest *)x_void_ptr; + JamesDSPLib *jdsp = x_ptr->dspPtr; + int ii = 0; + while (1) + { + if (idxN <= ii) + continue; + ii = idxN; + if (idxN > 0 && idxN < 500) + { + gainsTh[5] += 0.48; + if (gainsTh[5] > 64) + gainsTh[5] = 64; + MultimodalEqualizerAxisInterpolation(jdsp, 0, 5, freqTh, gainsTh); + } + else if (idxN >= 500) + { + gainsTh[5] -= 0.4; + if (gainsTh[5] < -64) + gainsTh[5] = -64; + gainsTh[10] -= 0.1; + if (gainsTh[10] < -64) + gainsTh[10] = -64; + MultimodalEqualizerAxisInterpolation(jdsp, 0, 5, freqTh, gainsTh); + } + if (idxN >= readCountN - 1) + break; + } + pthread_exit(NULL); + return NULL; +}*/ +#define FILENAME "mus.wav" +static inline float float_from_i32(int32_t ival) +{ + static const float scale = 1. / (float)(1UL << 31); + return ival * scale; +} +int32_t clamp24_from_float(float f); int main() { + char oldPath[MAX_PATH]; + GetCurrentDirectory(MAX_PATH, oldPath); char *text = 0; int i; unsigned int channels; unsigned int sampleRate; drwav_uint64 totalPCMFrameCount; - float* pSampleData = drwav_open_file_and_read_pcm_frames_f32(FILENAME, &channels, &sampleRate, &totalPCMFrameCount, 0); + float *pSampleData = drwav_open_file_and_read_pcm_frames_f32(FILENAME, &channels, &sampleRate, &totalPCMFrameCount, 0); if (pSampleData == NULL) { printf("Error opening and reading WAV file"); @@ -210,36 +194,36 @@ int main() return -1; } char *filename = basename(FILENAME); - int frameCountBest = 512; + int frameCountBest = 1024; printf("[Status] Precomputing...\n"); - double wall0 = get_wall_time(); - double cpu0 = get_cpu_time(); JamesDSPGlobalMemoryAllocation(); - JamesDSPLib *jdsp = (JamesDSPLib*)malloc(sizeof(JamesDSPLib)); + JamesDSPLib *jdsp = (JamesDSPLib *)malloc(sizeof(JamesDSPLib)); memset(jdsp, 0, sizeof(JamesDSPLib)); - JamesDSPInit(jdsp, frameCountBest - 30, sampleRate); - JamesDSPSetSampleRate(jdsp, (float)sampleRate, 0); - //JamesDSPSetPostGain(jdsp, -3.0); + JamesDSPInit(jdsp, 77, sampleRate); + JLimiterSetCoefficients(jdsp, 0.0, 100); // Parameters // DRC - //CompressorSetParam(jdsp, 30.0, 200.0, 800.0); - //CompressorEnable(jdsp); + double freqDRC[NUMPTS_DRS] = { 95.0, 200.0, 400.0, 800.0, 1600.0, 3400.0, 7500.0 }; + double gainsDRC[NUMPTS_DRS] = { 1.0, 0.9, 0.2, 0.0, 0.0, 0.8, 1.0 }; + for (i = 0; i < NUMPTS_DRS; i++) + gainsDRC[i] = -1.0; + CompressorSetParam(jdsp, 0.8, 4, 1, 1); + CompressorSetGain(jdsp, freqDRC, gainsDRC, 1); + CompressorEnable(jdsp, 1); // Bass boost - //tele = fopen("aa.txt", "wb"); - //tele2 = fopen("bb.txt", "wb"); - BassBoostSetParam(jdsp, 10.0f); - BassBoostEnable(jdsp); + //BassBoostSetParam(jdsp, 10.0f); + //BassBoostEnable(jdsp); // Reverb -// Reverb_SetParam(jdsp, 4); -// ReverbEnable(jdsp); + //Reverb_SetParam(jdsp, 4); + //ReverbEnable(jdsp); // Stereo enhancement - //StereoEnhancementSetParam(jdsp, 0.5f); + //StereoEnhancementSetParam(jdsp, 0.9f); //StereoEnhancementEnable(jdsp); // Vacuum tube - //VacuumTubeEnable(jdsp); //VacuumTubeSetGain(jdsp, 8.0); + //VacuumTubeEnable(jdsp); // Live programmable DSP - /*text = openTextFile("C:\\Users\\JamesHighPerformance\\Documents\\EELPrograms\\stftCentreCut.eel"); + /*text = openTextFile("hadamVerb.eel"); if (text) { LiveProgStringParser(jdsp, text); @@ -265,112 +249,326 @@ int main() DDCStringParser(jdsp, text); free(text); } - DDCEnable(jdsp);*/ + DDCEnable(jdsp, 1);*/ // Crossfeed - //CrossfeedChangeMode(jdsp, 5); - //CrossfeedChangeMode(jdsp, 3); - //CrossfeedEnable(jdsp); + /*CrossfeedChangeMode(jdsp, 5); + CrossfeedChangeMode(jdsp, 3); + CrossfeedEnable(jdsp, 1);*/ // Convolver - /*int impulseChannels; + int impulseChannels; size_t impFrameCount; // - float *impulseResponse = FileSelecterPopupWavFileWin32("DormSpks.wav", jdsp->fs, &impulseChannels, &impFrameCount); - Convolver1DLoadImpulseResponse(jdsp, impulseResponse, impulseChannels, impFrameCount); - free(impulseResponse); - // - impulseResponse = FileSelecterPopupWavFileWin32("EqResponse.wav", jdsp->fs, &impulseChannels, &impFrameCount); - Convolver1DLoadImpulseResponse(jdsp, impulseResponse, impulseChannels, impFrameCount); - free(impulseResponse); + /*float *impulseResponse = FileSelecterPopupWavFileWin32("longReverb.wav", jdsp->fs, &impulseChannels, &impFrameCount); + Convolver1DLoadImpulseResponse(jdsp, impulseResponse, impulseChannels, impFrameCount, 1); + free(impulseResponse);*/ // - impulseResponse = FileSelecterPopupWavFileWin32("reverb james.wav", jdsp->fs, &impulseChannels, &impFrameCount); - Convolver1DLoadImpulseResponse(jdsp, impulseResponse, impulseChannels, impFrameCount); + /*impulseResponse = FileSelecterPopupWavFileWin32("EqResponse.wav", jdsp->fs, &impulseChannels, &impFrameCount); + Convolver1DLoadImpulseResponse(jdsp, impulseResponse, impulseChannels, impFrameCount, 1); free(impulseResponse); // - Convolver1DEnable(jdsp);*/ + impulseResponse = FileSelecterPopupWavFileWin32("408.wav", jdsp->fs, &impulseChannels, &impFrameCount); + Convolver1DLoadImpulseResponse(jdsp, impulseResponse, impulseChannels, impFrameCount, 1); + free(impulseResponse);*/ + //Convolver1DEnable(jdsp); // Arbitrary magnitude response -// ArbitraryResponseEqualizerStringParser(jdsp, "IE80Cal: 10 -6.1681; 10.3 -6.31; 10.6247 -6.339; 10.7171 -6.2821; 10.8103 -6.396; 10.9043 -6.396; 10.9991 -6.51; 11.0947 -6.51; 11.1912 -6.51; 11.2885 -6.51; 11.3866 -6.6239; 11.4856 -6.6239; 11.5855 -6.6239; 11.6862 -6.7379; 11.7878 -6.7379; 11.8903 -6.7379; 11.9937 -6.7379; 12.098 -6.8519; 12.2032 -6.8519; 12.3093 -6.8519; 12.4163 -6.9658; 12.5243 -6.9658; 12.6332 -6.9658; 12.743 -6.9658; 12.8538 -7.0798; 12.9656 -7.0798; 13.0783 -7.0798; 13.192 -7.1937; 13.3067 -7.1937; 13.4224 -7.1937; 13.5391 -7.1937; 13.6568 -7.3077; 13.7756 -7.3077; 13.8953 -7.3077; 14.0162 -7.4217; 14.138 -7.4217; 14.2609 -7.4217; 14.3849 -7.4217; 14.51 -7.5356; 14.6362 -7.5356; 14.7634 -7.5356; 14.8918 -7.6496; 15.0213 -7.6496; 15.1519 -7.6496; 15.2836 -7.6496; 15.4165 -7.7635; 15.5505 -7.7635; 15.6857 -7.7635; 15.8221 -7.8775; 15.9597 -7.8775; 16.0985 -7.8775; 16.2384 -7.8775; 16.3796 -7.9915; 16.522 -7.9915; 16.6657 -7.9915; 16.8106 -8.1054; 16.9568 -8.1054; 17.1042 -8.1054; 17.2529 -8.1054; 17.4029 -8.2194; 17.5542 -8.2194; 17.7068 -8.2194; 17.8608 -8.2194; 18.0161 -8.3333; 18.1727 -8.4473; 18.3307 -8.4473; 18.4901 -8.4473; 18.6509 -8.4473; 18.8131 -8.4473; 18.9766 -8.5613; 19.1416 -8.5613; 19.308 -8.5613; 19.4759 -8.5613; 19.6453 -8.5613; 19.8161 -8.5613; 19.9884 -8.6752; 20.1622 -8.6752; 20.3375 -8.6752; 20.5143 -8.7892; 20.6926 -8.7892; 20.8726 -8.7892; 21.054 -8.7892; 21.2371 -8.9031; 21.4217 -8.9031; 21.608 -8.9031; 21.7959 -8.9031; 21.9854 -8.9031; 22.1765 -9.0171; 22.3694 -9.0171; 22.5639 -9.0171; 22.76 -9.0171; 22.9579 -9.1311; 23.1575 -9.1311; 23.3589 -9.1311; 23.562 -9.1311; 23.7668 -9.1311; 23.9735 -9.245; 24.1819 -9.245; 24.3922 -9.245; 24.6043 -9.359; 24.8182 -9.359; 25.034 -9.359; 25.2516 -9.359; 25.4712 -9.4729; 25.6927 -9.4729; 25.916 -9.4729; 26.1414 -9.4729; 26.3687 -9.4729; 26.5979 -9.5869; 26.8292 -9.5869; 27.0625 -9.5869; 27.2978 -9.5869; 27.5351 -9.7009; 27.7745 -9.7009; 28.016 -9.7009; 28.2596 -9.7009; 28.5053 -9.7009; 28.7531 -9.7009; 29.0031 -9.7009; 29.2553 -9.8148; 29.5097 -9.8148; 29.7662 -9.9288; 30.0251 -9.9288; 30.2861 -9.9288; 30.5494 -9.9288; 30.8151 -9.9288; 31.083 -9.9288; 31.3532 -9.9288; 31.6258 -10.0427; 31.9008 -10.0427; 32.1782 -10.0427; 32.458 -10.0427; 32.7402 -10.0427; 33.0248 -10.1567; 33.312 -10.1567; 33.6016 -10.1567; 33.8938 -10.1567; 34.1885 -10.1567; 34.4857 -10.2707; 34.7856 -10.2707; 35.088 -10.2707; 35.3931 -10.2707; 35.7008 -10.3846; 36.0112 -10.3846; 36.3243 -10.3846; 36.6402 -10.3846; 36.9587 -10.3846; 37.2801 -10.3846; 37.6042 -10.3846; 37.9312 -10.4986; 38.261 -10.4986; 38.5936 -10.4986; 38.9292 -10.4986; 39.2677 -10.4986; 39.6091 -10.4986; 39.9535 -10.4986; 40.3008 -10.6125; 40.6512 -10.6125; 41.0047 -10.6125; 41.3612 -10.6125; 41.7208 -10.6125; 42.0836 -10.7265; 42.4495 -10.7265; 42.8186 -10.7265; 43.1909 -10.7265; 43.5664 -10.7265; 43.9452 -10.7265; 44.3273 -10.7265; 44.7127 -10.8405; 45.1014 -10.8405; 45.4936 -10.8405; 45.8891 -10.8405; 46.2881 -10.8405; 46.6906 -10.8405; 47.0965 -10.8405; 47.506 -10.9544; 47.9191 -10.9544; 48.3357 -10.9544; 48.756 -10.9544; 49.1799 -10.9544; 49.6075 -10.9544; 50.0388 -10.9544; 50.4739 -10.9544; 50.9127 -10.9544; 51.3554 -11.0684; 51.8019 -11.0684; 52.2523 -11.0684; 52.7066 -11.0684; 53.1649 -11.0684; 53.6272 -11.0684; 54.0934 -11.0684; 54.5637 -11.0684; 55.0382 -11.0684; 55.5167 -11.1823; 55.9994 -11.1823; 56.4863 -11.1823; 56.9774 -11.1823; 57.4728 -11.1823; 57.9725 -11.1823; 58.4766 -11.1823; 58.985 -11.1823; 59.4979 -11.1823; 60.0152 -11.1823; 60.537 -11.1823; 61.0633 -11.1823; 61.5943 -11.2963; 62.1298 -11.2963; 62.67 -11.2963; 63.2149 -11.2963; 63.7645 -11.2963; 64.3189 -11.2963; 64.8782 -11.2963; 65.4422 -11.2963; 66.0112 -11.2963; 66.5852 -11.2963; 67.1641 -11.2963; 67.7481 -11.2963; 68.3371 -11.2963; 68.9313 -11.2963; 69.5306 -11.4103; 70.1352 -11.4103; 70.745 -11.4103; 71.3601 -11.4103; 71.9805 -11.4103; 72.6064 -11.4103; 73.2377 -11.4103; 73.8744 -11.4103; 74.5168 -11.4103; 75.1647 -11.4103; 75.8182 -11.4103; 76.4774 -11.4103; 77.1423 -11.4103; 77.8131 -11.4103; 78.4896 -11.4103; 79.1721 -11.4103; 79.8604 -11.4103; 80.5548 -11.4103; 81.2552 -11.4103; 81.9617 -11.4103; 82.6743 -11.4103; 83.3931 -11.4103; 84.1182 -11.4103; 84.8496 -11.4103; 85.5873 -11.4103; 86.3315 -11.4103; 87.0821 -11.4103; 87.8392 -11.4103; 88.603 -11.5242; 89.3733 -11.5242; 90.1504 -11.5242; 90.9342 -11.5242; 91.7249 -11.5242; 92.5224 -11.5242; 93.3268 -11.5242; 94.1383 -11.5242; 94.9568 -11.5242; 95.7824 -11.5242; 96.6152 -11.5242; 97.4552 -11.5242; 98.3026 -11.5242; 99.1573 -11.5242; 100.019 -11.4103; 100.889 -11.4103; 101.766 -11.4103; 102.651 -11.4103; 103.544 -11.4103; 104.444 -11.4103; 105.352 -11.4103; 106.268 -11.4103; 107.192 -11.4103; 108.124 -11.4103; 109.064 -11.4103; 110.012 -11.4103; 110.969 -11.4103; 111.934 -11.4103; 112.907 -11.4103; 113.889 -11.4103; 114.879 -11.4103; 115.878 -11.4103; 116.885 -11.4103; 117.901 -11.4103; 118.926 -11.4103; 119.961 -11.4103; 121.004 -11.4103; 122.056 -11.4103; 123.117 -11.4103; 124.187 -11.4103; 125.267 -11.4103; 126.356 -11.4103; 127.455 -11.4103; 128.563 -11.2963; 129.681 -11.2963; 130.808 -11.2963; 131.946 -11.2963; 133.093 -11.2963; 134.25 -11.2963; 135.417 -11.2963; 136.595 -11.2963; 137.782 -11.2963; 138.98 -11.2963; 140.189 -11.2963; 141.408 -11.2963; 142.637 -11.2963; 143.877 -11.2963; 145.128 -11.1823; 146.39 -11.1823; 147.663 -11.1823; 148.947 -11.1823; 150.242 -11.1823; 151.548 -11.1823; 152.866 -11.1823; 154.195 -11.1823; 155.536 -11.1823; 156.888 -11.1823; 158.252 -11.0684; 159.628 -11.0684; 161.016 -11.0684; 162.416 -11.0684; 163.828 -11.0684; 165.252 -11.0684; 166.689 -11.0684; 168.139 -11.0684; 169.6 -11.0684; 171.075 -10.9544; 172.562 -10.9544; 174.063 -10.9544; 175.576 -10.9544; 177.103 -10.9544; 178.643 -10.9544; 180.196 -10.9544; 181.763 -10.8405; 183.343 -10.8405; 184.937 -10.8405; 186.545 -10.8405; 188.167 -10.8405; 189.803 -10.8405; 191.453 -10.8405; 193.118 -10.7265; 194.797 -10.7265; 196.491 -10.7265; 198.199 -10.7265; 199.922 -10.7265; 201.661 -10.7265; 203.414 -10.7265; 205.183 -10.6125; 206.967 -10.6125; 208.766 -10.6125; 210.581 -10.6125; 212.412 -10.6125; 214.259 -10.4986; 216.122 -10.4986; 218.001 -10.4986; 219.897 -10.4986; 221.808 -10.4986; 223.737 -10.4986; 225.682 -10.4986; 227.645 -10.4986; 229.624 -10.3846; 231.62 -10.3846; 233.634 -10.3846; 235.666 -10.3846; 237.715 -10.3846; 239.781 -10.2707; 241.866 -10.2707; 243.969 -10.2707; 246.09 -10.2707; 248.23 -10.2707; 250.388 -10.1567; 252.565 -10.1567; 254.761 -10.1567; 256.976 -10.1567; 259.211 -10.0427; 261.464 -10.0427; 263.738 -10.0427; 266.031 -10.0427; 268.344 -10.0427; 270.677 -9.9288; 273.031 -9.9288; 275.404 -9.9288; 277.799 -9.9288; 280.214 -9.9288; 282.651 -9.8148; 285.108 -9.8148; 287.587 -9.8148; 290.088 -9.8148; 292.61 -9.7009; 295.154 -9.7009; 297.72 -9.7009; 300.309 -9.5869; 302.92 -9.5869; 305.554 -9.5869; 308.21 -9.5869; 310.89 -9.5869; 313.593 -9.5869; 316.32 -9.4729; 319.07 -9.4729; 321.844 -9.4729; 324.643 -9.359; 327.465 -9.359; 330.312 -9.359; 333.184 -9.359; 336.081 -9.245; 339.003 -9.245; 341.951 -9.245; 344.924 -9.1311; 347.923 -9.1311; 350.948 -9.1311; 354 -9.1311; 357.077 -9.0171; 360.182 -9.0171; 363.314 -9.0171; 366.473 -8.9031; 369.659 -8.9031; 372.873 -8.9031; 376.115 -8.9031; 379.385 -8.7892; 382.684 -8.7892; 386.011 -8.7892; 389.367 -8.7892; 392.753 -8.7892; 396.168 -8.6752; 399.612 -8.6752; 403.087 -8.6752; 406.591 -8.5613; 410.127 -8.5613; 413.692 -8.5613; 417.289 -8.5613; 420.918 -8.5613; 424.577 -8.5613; 428.269 -8.4473; 431.992 -8.4473; 435.748 -8.4473; 439.537 -8.4473; 443.359 -8.4473; 447.214 -8.3333; 451.102 -8.3333; 455.024 -8.3333; 458.98 -8.3333; 462.971 -8.2194; 466.996 -8.2194; 471.057 -8.2194; 475.152 -8.2194; 479.284 -8.2194; 483.451 -8.1054; 487.654 -8.1054; 491.894 -8.1054; 496.171 -7.9915; 500.485 -7.9915; 504.837 -7.9915; 509.226 -7.9915; 513.654 -7.8775; 518.12 -7.8775; 522.625 -7.8775; 527.169 -7.7635; 531.752 -7.7635; 536.376 -7.7635; 541.039 -7.7635; 545.743 -7.6496; 550.488 -7.6496; 555.275 -7.6496; 560.103 -7.5356; 564.973 -7.5356; 569.885 -7.5356; 574.84 -7.5356; 579.838 -7.4217; 584.879 -7.4217; 589.965 -7.4217; 595.094 -7.4217; 600.268 -7.3077; 605.487 -7.3077; 610.752 -7.3077; 616.062 -7.1937; 621.418 -7.1937; 626.822 -7.1937; 632.272 -7.1937; 637.769 -7.1937; 643.314 -7.0798; 648.907 -7.0798; 654.549 -7.0798; 660.241 -7.0798; 665.981 -6.9658; 671.772 -6.9658; 677.612 -6.9658; 683.504 -6.9658; 689.447 -6.9658; 695.441 -6.8519; 701.488 -6.8519; 707.587 -6.8519; 713.739 -6.8519; 719.945 -6.8519; 726.205 -6.7379; 732.519 -6.7379; 738.888 -6.7379; 745.312 -6.7379; 751.792 -6.7379; 758.329 -6.7379; 764.922 -6.7379; 771.573 -6.6239; 778.282 -6.6239; 785.049 -6.6239; 791.874 -6.6239; 798.759 -6.6239; 805.704 -6.6239; 812.71 -6.6239; 819.776 -6.6239; 826.903 -6.6239; 834.093 -6.51; 841.345 -6.51; 848.66 -6.51; 856.039 -6.51; 863.482 -6.51; 870.99 -6.51; 878.563 -6.51; 886.202 -6.51; 893.907 -6.51; 901.679 -6.51; 909.519 -6.51; 917.427 -6.51; 925.403 -6.51; 933.449 -6.51; 941.565 -6.51; 949.752 -6.51; 958.01 -6.51; 966.339 -6.51; 974.741 -6.51; 983.216 -6.51; 991.765 -6.51; 1000.39 -6.396; 1009.09 -6.396; 1017.86 -6.396; 1026.71 -6.396; 1035.64 -6.396; 1044.64 -6.396; 1053.72 -6.396; 1062.89 -6.396; 1072.13 -6.396; 1081.45 -6.51; 1090.85 -6.51; 1100.34 -6.51; 1109.9 -6.51; 1119.55 -6.6239; 1129.29 -6.6239; 1139.11 -6.6239; 1149.01 -6.7379; 1159 -6.7379; 1169.08 -6.7379; 1179.24 -6.7379; 1189.5 -6.8519; 1199.84 -6.8519; 1210.27 -6.8519; 1220.79 -6.9658; 1231.41 -6.9658; 1242.11 -6.9658; 1252.91 -6.9658; 1263.81 -7.0798; 1274.8 -7.0798; 1285.88 -7.1937; 1297.06 -7.1937; 1308.34 -7.1937; 1319.71 -7.3077; 1331.19 -7.3077; 1342.76 -7.4217; 1354.44 -7.4217; 1366.21 -7.4217; 1378.09 -7.5356; 1390.07 -7.5356; 1402.16 -7.6496; 1414.35 -7.6496; 1426.65 -7.7635; 1439.05 -7.7635; 1451.56 -7.7635; 1464.19 -7.8775; 1476.92 -7.8775; 1489.76 -7.9915; 1502.71 -7.9915; 1515.78 -7.9915; 1528.95 -7.9915; 1542.25 -8.1054; 1555.66 -8.2194; 1569.18 -8.2194; 1582.83 -8.2194; 1596.59 -8.2194; 1610.47 -8.3333; 1624.47 -8.3333; 1638.6 -8.3333; 1652.84 -8.3333; 1667.22 -8.4473; 1681.71 -8.5613; 1696.33 -8.5613; 1711.08 -8.5613; 1725.96 -8.5613; 1740.97 -8.6752; 1756.1 -8.6752; 1771.37 -8.6752; 1786.77 -8.7892; 1802.31 -8.7892; 1817.98 -8.7892; 1833.79 -8.7892; 1849.73 -8.9031; 1865.81 -8.9031; 1882.04 -8.9031; 1898.4 -9.0171; 1914.9 -9.0171; 1931.55 -9.1311; 1948.35 -9.1311; 1965.29 -9.1311; 1982.38 -9.1311; 1999.61 -9.245; 2017 -9.245; 2034.54 -9.245; 2052.22 -9.359; 2070.07 -9.359; 2088.07 -9.4729; 2106.22 -9.4729; 2124.53 -9.5869; 2143.01 -9.5869; 2161.64 -9.5869; 2180.43 -9.7009; 2199.39 -9.7009; 2218.51 -9.7009; 2237.8 -9.7009; 2257.26 -9.8148; 2276.89 -9.8148; 2296.68 -9.9288; 2316.65 -9.9288; 2336.79 -9.9288; 2357.11 -10.0427; 2377.61 -10.0427; 2398.28 -10.1567; 2419.13 -10.1567; 2440.16 -10.1567; 2461.38 -10.2707; 2482.78 -10.2707; 2504.37 -10.2707; 2526.14 -10.2707; 2548.11 -10.3846; 2570.26 -10.3846; 2592.61 -10.4986; 2615.15 -10.4986; 2637.89 -10.4986; 2660.83 -10.6125; 2683.96 -10.6125; 2707.3 -10.6125; 2730.84 -10.6125; 2754.58 -10.7265; 2778.53 -10.7265; 2802.69 -10.7265; 2827.06 -10.8405; 2851.64 -10.8405; 2876.43 -10.8405; 2901.44 -10.8405; 2926.67 -10.8405; 2952.11 -10.9544; 2977.78 -10.9544; 3003.67 -10.9544; 3029.79 -10.9544; 3056.13 -10.9544; 3082.7 -10.9544; 3109.5 -11.0684; 3136.54 -11.0684; 3163.81 -11.0684; 3191.32 -11.0684; 3219.07 -11.0684; 3247.06 -11.0684; 3275.29 -11.0684; 3303.77 -11.0684; 3332.49 -11.0684; 3361.47 -11.0684; 3390.69 -11.0684; 3420.17 -11.0684; 3449.91 -11.0684; 3479.91 -11.0684; 3510.16 -11.0684; 3540.68 -11.0684; 3571.47 -11.1823; 3602.52 -11.1823; 3633.84 -11.1823; 3665.44 -11.1823; 3697.31 -11.1823; 3729.45 -11.1823; 3761.88 -11.1823; 3794.59 -11.1823; 3827.58 -11.1823; 3860.86 -11.1823; 3894.43 -11.1823; 3928.29 -11.1823; 3962.44 -11.0684; 3996.9 -11.0684; 4031.65 -11.0684; 4066.7 -10.9544; 4102.06 -10.9544; 4137.73 -10.8405; 4173.7 -10.8405; 4209.99 -10.7265; 4246.6 -10.6125; 4283.52 -10.4986; 4320.76 -10.3276; 4358.33 -10.1567; 4396.22 -9.9858; 4434.45 -9.9288; 4473 -9.7578; 4511.89 -9.5869; 4551.12 -9.359; 4590.69 -9.1311; 4630.61 -8.9031; 4670.87 -8.7322; 4711.48 -8.5043; 4752.45 -8.3903; 4793.77 -8.1624; 4835.45 -8.0484; 4877.49 -7.8205; 4919.9 -7.7635; 4962.68 -7.6496; 5005.82 -7.5356; 5049.35 -7.4217; 5093.25 -7.4217; 5137.53 -7.3077; 5182.2 -7.1937; 5227.26 -7.1937; 5272.71 -7.0798; 5318.55 -7.0798; 5364.8 -7.0798; 5411.44 -7.0798; 5458.49 -7.1937; 5505.95 -7.1937; 5553.82 -7.1937; 5602.11 -7.3077; 5650.82 -7.3077; 5699.95 -7.4217; 5749.51 -7.4217; 5799.5 -7.5356; 5849.93 -7.6496; 5900.79 -7.7635; 5952.1 -7.8775; 6003.85 -7.8775; 6056.05 -7.9915; 6108.7 -7.9915; 6161.82 -7.9915; 6215.39 -7.9915; 6269.43 -7.9915; 6323.94 -7.9915; 6378.93 -7.9915; 6434.39 -7.8775; 6490.33 -7.8775; 6546.76 -7.7635; 6603.69 -7.6496; 6661.1 -7.4786; 6719.02 -7.3077; 6777.44 -7.1937; 6836.37 -7.0798; 6895.81 -6.9658; 6955.76 -6.7949; 7016.24 -6.6239; 7077.24 -6.453; 7138.78 -6.2251; 7200.85 -6.1681; 7263.46 -6.0541; 7326.61 -5.9402; 7390.31 -5.8262; 7454.57 -5.7123; 7519.38 -5.5983; 7584.76 -5.4843; 7650.71 -5.3704; 7717.23 -5.2564; 7784.33 -5.1425; 7852.01 -5.0285; 7920.28 -5.0285; 7989.14 -4.91453; 8058.61 -4.91453; 8128.67 -4.80057; 8199.35 -4.80057; 8270.64 -4.80057; 8342.55 -4.80057; 8415.08 -4.80057; 8488.25 -4.80057; 8562.05 -4.80057; 8636.5 -4.91453; 8711.59 -5.0285; 8787.33 -5.0285; 8863.73 -5.1425; 8940.8 -5.2564; 9018.54 -5.3704; 9096.95 -5.4843; 9176.05 -5.7123; 9255.83 -5.9402; 9336.31 -6.2251; 9417.48 -6.51; 9499.36 -6.7379; 9581.96 -6.9658; 9665.27 -7.1937; 9749.3 -7.4217; 9834.07 -7.5926; 9919.57 -7.7635; 10005.8 -7.5926; 10092.8 -7.4786; 10180.6 -7.1368; 10269.1 -6.7949; 10358.4 -6.2821; 10448.4 -5.7692; 10539.3 -5.1994; 10630.9 -4.80057; 10723.4 -4.45869; 10816.6 -4.23077; 10910.6 -4.00285; 11005.5 -3.83191; 11101.2 -3.77493; 11197.7 -3.66097; 11295.1 -3.54701; 11393.3 -3.54701; 11492.3 -3.66097; 11592.3 -3.66097; 11693 -3.77493; 11794.7 -3.83191; 11897.3 -4.00285; 12000.7 -4.11681; 12105 -4.11681; 12210.3 -4.23077; 12316.5 -4.23077; 12423.5 -4.11681; 12531.6 -4.11681; 12640.5 -3.94587; 12750.4 -3.77493; 12861.3 -3.66097; 12973.1 -3.54701; 13085.9 -3.54701; 13199.7 -3.43305; 13314.5 -3.43305; 13430.2 -3.43305; 13547 -3.43305; 13664.8 -3.43305; 13783.6 -3.54701; 13903.4 -3.60399; 14024.3 -3.71795; 14146.3 -3.94587; 14269.2 -4.23077; 14393.3 -4.57265; 14518.5 -5.0285; 14644.7 -5.4843; 14772 -5.9402; 14900.5 -6.453; 15030 -6.9088; 15160.7 -7.3077; 15292.5 -7.1937; 15425.5 -6.6809; 15559.6 -5.9972; 15694.9 -5.3134; 15831.3 -4.57265; 15969 -3.94587; 16107.8 -3.26211; 16247.9 -2.63533; 16389.2 -2.06553; 16531.7 -1.55271; 16675.4 -1.15385; 16820.4 -0.86895; 16966.6 -0.58405; 17114.1 -0.35613; 17262.9 -0.12821; 17413 0.09972; 17564.4 0.32764; 17717.2 0.4416; 17871.2 0.55556; 18026.6 0.55556; 18183.3 0.55556; 18341.4 0.55556; 18500.9 0.38462; 18661.7 0.1567; 18824 -0.12821; 18987.7 -0.47009; 19152.8 -0.86895; 19319.3 -1.26781; 19487.3 -1.72365; 19656.7 -2.23647; 19827.6 -2.63533; 20000 -2.92023; 20173.9 -2.57835; 20349.3 -2.12251; 20526.2 -1.43875; 20704.7 -0.69801; 20884.7 0.21368; 21066.3 1.06838; 21249.5 1.80912; 21434.2 2.49288; 21620.6 2.94872; 21808.6 3.34758; 21998.2 3.68946; 22189.5 4.03134; 22382.4 4.31624; 22577 4.60114; 22773.3 4.82906; 22971.3 4.88604; 23171 5; 23372.5 5; 23780.7 4.88604"); -// ArbitraryResponseEqualizerStringParser(jdsp, "cce2: 5000.0 3.0; 2000.0 0.0; 0.0 -100.0; 100.0 -20, 400.0; 0;"); -// jdsp->arbMagForceRefresh = 1; // For testing purpose -// ArbitraryResponseEqualizerEnable(jdsp); + /*ArbitraryResponseEqualizerStringParser(jdsp, "IE80Cal: 10 -6.1681; 10.3 -6.31; 10.6247 -6.339; 10.7171 -6.2821; 10.8103 -6.396; 10.9043 -6.396; 10.9991 -6.51; 11.0947 -6.51; 11.1912 -6.51; 11.2885 -6.51; 11.3866 -6.6239; 11.4856 -6.6239; 11.5855 -6.6239; 11.6862 -6.7379; 11.7878 -6.7379; 11.8903 -6.7379; 11.9937 -6.7379; 12.098 -6.8519; 12.2032 -6.8519; 12.3093 -6.8519; 12.4163 -6.9658; 12.5243 -6.9658; 12.6332 -6.9658; 12.743 -6.9658; 12.8538 -7.0798; 12.9656 -7.0798; 13.0783 -7.0798; 13.192 -7.1937; 13.3067 -7.1937; 13.4224 -7.1937; 13.5391 -7.1937; 13.6568 -7.3077; 13.7756 -7.3077; 13.8953 -7.3077; 14.0162 -7.4217; 14.138 -7.4217; 14.2609 -7.4217; 14.3849 -7.4217; 14.51 -7.5356; 14.6362 -7.5356; 14.7634 -7.5356; 14.8918 -7.6496; 15.0213 -7.6496; 15.1519 -7.6496; 15.2836 -7.6496; 15.4165 -7.7635; 15.5505 -7.7635; 15.6857 -7.7635; 15.8221 -7.8775; 15.9597 -7.8775; 16.0985 -7.8775; 16.2384 -7.8775; 16.3796 -7.9915; 16.522 -7.9915; 16.6657 -7.9915; 16.8106 -8.1054; 16.9568 -8.1054; 17.1042 -8.1054; 17.2529 -8.1054; 17.4029 -8.2194; 17.5542 -8.2194; 17.7068 -8.2194; 17.8608 -8.2194; 18.0161 -8.3333; 18.1727 -8.4473; 18.3307 -8.4473; 18.4901 -8.4473; 18.6509 -8.4473; 18.8131 -8.4473; 18.9766 -8.5613; 19.1416 -8.5613; 19.308 -8.5613; 19.4759 -8.5613; 19.6453 -8.5613; 19.8161 -8.5613; 19.9884 -8.6752; 20.1622 -8.6752; 20.3375 -8.6752; 20.5143 -8.7892; 20.6926 -8.7892; 20.8726 -8.7892; 21.054 -8.7892; 21.2371 -8.9031; 21.4217 -8.9031; 21.608 -8.9031; 21.7959 -8.9031; 21.9854 -8.9031; 22.1765 -9.0171; 22.3694 -9.0171; 22.5639 -9.0171; 22.76 -9.0171; 22.9579 -9.1311; 23.1575 -9.1311; 23.3589 -9.1311; 23.562 -9.1311; 23.7668 -9.1311; 23.9735 -9.245; 24.1819 -9.245; 24.3922 -9.245; 24.6043 -9.359; 24.8182 -9.359; 25.034 -9.359; 25.2516 -9.359; 25.4712 -9.4729; 25.6927 -9.4729; 25.916 -9.4729; 26.1414 -9.4729; 26.3687 -9.4729; 26.5979 -9.5869; 26.8292 -9.5869; 27.0625 -9.5869; 27.2978 -9.5869; 27.5351 -9.7009; 27.7745 -9.7009; 28.016 -9.7009; 28.2596 -9.7009; 28.5053 -9.7009; 28.7531 -9.7009; 29.0031 -9.7009; 29.2553 -9.8148; 29.5097 -9.8148; 29.7662 -9.9288; 30.0251 -9.9288; 30.2861 -9.9288; 30.5494 -9.9288; 30.8151 -9.9288; 31.083 -9.9288; 31.3532 -9.9288; 31.6258 -10.0427; 31.9008 -10.0427; 32.1782 -10.0427; 32.458 -10.0427; 32.7402 -10.0427; 33.0248 -10.1567; 33.312 -10.1567; 33.6016 -10.1567; 33.8938 -10.1567; 34.1885 -10.1567; 34.4857 -10.2707; 34.7856 -10.2707; 35.088 -10.2707; 35.3931 -10.2707; 35.7008 -10.3846; 36.0112 -10.3846; 36.3243 -10.3846; 36.6402 -10.3846; 36.9587 -10.3846; 37.2801 -10.3846; 37.6042 -10.3846; 37.9312 -10.4986; 38.261 -10.4986; 38.5936 -10.4986; 38.9292 -10.4986; 39.2677 -10.4986; 39.6091 -10.4986; 39.9535 -10.4986; 40.3008 -10.6125; 40.6512 -10.6125; 41.0047 -10.6125; 41.3612 -10.6125; 41.7208 -10.6125; 42.0836 -10.7265; 42.4495 -10.7265; 42.8186 -10.7265; 43.1909 -10.7265; 43.5664 -10.7265; 43.9452 -10.7265; 44.3273 -10.7265; 44.7127 -10.8405; 45.1014 -10.8405; 45.4936 -10.8405; 45.8891 -10.8405; 46.2881 -10.8405; 46.6906 -10.8405; 47.0965 -10.8405; 47.506 -10.9544; 47.9191 -10.9544; 48.3357 -10.9544; 48.756 -10.9544; 49.1799 -10.9544; 49.6075 -10.9544; 50.0388 -10.9544; 50.4739 -10.9544; 50.9127 -10.9544; 51.3554 -11.0684; 51.8019 -11.0684; 52.2523 -11.0684; 52.7066 -11.0684; 53.1649 -11.0684; 53.6272 -11.0684; 54.0934 -11.0684; 54.5637 -11.0684; 55.0382 -11.0684; 55.5167 -11.1823; 55.9994 -11.1823; 56.4863 -11.1823; 56.9774 -11.1823; 57.4728 -11.1823; 57.9725 -11.1823; 58.4766 -11.1823; 58.985 -11.1823; 59.4979 -11.1823; 60.0152 -11.1823; 60.537 -11.1823; 61.0633 -11.1823; 61.5943 -11.2963; 62.1298 -11.2963; 62.67 -11.2963; 63.2149 -11.2963; 63.7645 -11.2963; 64.3189 -11.2963; 64.8782 -11.2963; 65.4422 -11.2963; 66.0112 -11.2963; 66.5852 -11.2963; 67.1641 -11.2963; 67.7481 -11.2963; 68.3371 -11.2963; 68.9313 -11.2963; 69.5306 -11.4103; 70.1352 -11.4103; 70.745 -11.4103; 71.3601 -11.4103; 71.9805 -11.4103; 72.6064 -11.4103; 73.2377 -11.4103; 73.8744 -11.4103; 74.5168 -11.4103; 75.1647 -11.4103; 75.8182 -11.4103; 76.4774 -11.4103; 77.1423 -11.4103; 77.8131 -11.4103; 78.4896 -11.4103; 79.1721 -11.4103; 79.8604 -11.4103; 80.5548 -11.4103; 81.2552 -11.4103; 81.9617 -11.4103; 82.6743 -11.4103; 83.3931 -11.4103; 84.1182 -11.4103; 84.8496 -11.4103; 85.5873 -11.4103; 86.3315 -11.4103; 87.0821 -11.4103; 87.8392 -11.4103; 88.603 -11.5242; 89.3733 -11.5242; 90.1504 -11.5242; 90.9342 -11.5242; 91.7249 -11.5242; 92.5224 -11.5242; 93.3268 -11.5242; 94.1383 -11.5242; 94.9568 -11.5242; 95.7824 -11.5242; 96.6152 -11.5242; 97.4552 -11.5242; 98.3026 -11.5242; 99.1573 -11.5242; 100.019 -11.4103; 100.889 -11.4103; 101.766 -11.4103; 102.651 -11.4103; 103.544 -11.4103; 104.444 -11.4103; 105.352 -11.4103; 106.268 -11.4103; 107.192 -11.4103; 108.124 -11.4103; 109.064 -11.4103; 110.012 -11.4103; 110.969 -11.4103; 111.934 -11.4103; 112.907 -11.4103; 113.889 -11.4103; 114.879 -11.4103; 115.878 -11.4103; 116.885 -11.4103; 117.901 -11.4103; 118.926 -11.4103; 119.961 -11.4103; 121.004 -11.4103; 122.056 -11.4103; 123.117 -11.4103; 124.187 -11.4103; 125.267 -11.4103; 126.356 -11.4103; 127.455 -11.4103; 128.563 -11.2963; 129.681 -11.2963; 130.808 -11.2963; 131.946 -11.2963; 133.093 -11.2963; 134.25 -11.2963; 135.417 -11.2963; 136.595 -11.2963; 137.782 -11.2963; 138.98 -11.2963; 140.189 -11.2963; 141.408 -11.2963; 142.637 -11.2963; 143.877 -11.2963; 145.128 -11.1823; 146.39 -11.1823; 147.663 -11.1823; 148.947 -11.1823; 150.242 -11.1823; 151.548 -11.1823; 152.866 -11.1823; 154.195 -11.1823; 155.536 -11.1823; 156.888 -11.1823; 158.252 -11.0684; 159.628 -11.0684; 161.016 -11.0684; 162.416 -11.0684; 163.828 -11.0684; 165.252 -11.0684; 166.689 -11.0684; 168.139 -11.0684; 169.6 -11.0684; 171.075 -10.9544; 172.562 -10.9544; 174.063 -10.9544; 175.576 -10.9544; 177.103 -10.9544; 178.643 -10.9544; 180.196 -10.9544; 181.763 -10.8405; 183.343 -10.8405; 184.937 -10.8405; 186.545 -10.8405; 188.167 -10.8405; 189.803 -10.8405; 191.453 -10.8405; 193.118 -10.7265; 194.797 -10.7265; 196.491 -10.7265; 198.199 -10.7265; 199.922 -10.7265; 201.661 -10.7265; 203.414 -10.7265; 205.183 -10.6125; 206.967 -10.6125; 208.766 -10.6125; 210.581 -10.6125; 212.412 -10.6125; 214.259 -10.4986; 216.122 -10.4986; 218.001 -10.4986; 219.897 -10.4986; 221.808 -10.4986; 223.737 -10.4986; 225.682 -10.4986; 227.645 -10.4986; 229.624 -10.3846; 231.62 -10.3846; 233.634 -10.3846; 235.666 -10.3846; 237.715 -10.3846; 239.781 -10.2707; 241.866 -10.2707; 243.969 -10.2707; 246.09 -10.2707; 248.23 -10.2707; 250.388 -10.1567; 252.565 -10.1567; 254.761 -10.1567; 256.976 -10.1567; 259.211 -10.0427; 261.464 -10.0427; 263.738 -10.0427; 266.031 -10.0427; 268.344 -10.0427; 270.677 -9.9288; 273.031 -9.9288; 275.404 -9.9288; 277.799 -9.9288; 280.214 -9.9288; 282.651 -9.8148; 285.108 -9.8148; 287.587 -9.8148; 290.088 -9.8148; 292.61 -9.7009; 295.154 -9.7009; 297.72 -9.7009; 300.309 -9.5869; 302.92 -9.5869; 305.554 -9.5869; 308.21 -9.5869; 310.89 -9.5869; 313.593 -9.5869; 316.32 -9.4729; 319.07 -9.4729; 321.844 -9.4729; 324.643 -9.359; 327.465 -9.359; 330.312 -9.359; 333.184 -9.359; 336.081 -9.245; 339.003 -9.245; 341.951 -9.245; 344.924 -9.1311; 347.923 -9.1311; 350.948 -9.1311; 354 -9.1311; 357.077 -9.0171; 360.182 -9.0171; 363.314 -9.0171; 366.473 -8.9031; 369.659 -8.9031; 372.873 -8.9031; 376.115 -8.9031; 379.385 -8.7892; 382.684 -8.7892; 386.011 -8.7892; 389.367 -8.7892; 392.753 -8.7892; 396.168 -8.6752; 399.612 -8.6752; 403.087 -8.6752; 406.591 -8.5613; 410.127 -8.5613; 413.692 -8.5613; 417.289 -8.5613; 420.918 -8.5613; 424.577 -8.5613; 428.269 -8.4473; 431.992 -8.4473; 435.748 -8.4473; 439.537 -8.4473; 443.359 -8.4473; 447.214 -8.3333; 451.102 -8.3333; 455.024 -8.3333; 458.98 -8.3333; 462.971 -8.2194; 466.996 -8.2194; 471.057 -8.2194; 475.152 -8.2194; 479.284 -8.2194; 483.451 -8.1054; 487.654 -8.1054; 491.894 -8.1054; 496.171 -7.9915; 500.485 -7.9915; 504.837 -7.9915; 509.226 -7.9915; 513.654 -7.8775; 518.12 -7.8775; 522.625 -7.8775; 527.169 -7.7635; 531.752 -7.7635; 536.376 -7.7635; 541.039 -7.7635; 545.743 -7.6496; 550.488 -7.6496; 555.275 -7.6496; 560.103 -7.5356; 564.973 -7.5356; 569.885 -7.5356; 574.84 -7.5356; 579.838 -7.4217; 584.879 -7.4217; 589.965 -7.4217; 595.094 -7.4217; 600.268 -7.3077; 605.487 -7.3077; 610.752 -7.3077; 616.062 -7.1937; 621.418 -7.1937; 626.822 -7.1937; 632.272 -7.1937; 637.769 -7.1937; 643.314 -7.0798; 648.907 -7.0798; 654.549 -7.0798; 660.241 -7.0798; 665.981 -6.9658; 671.772 -6.9658; 677.612 -6.9658; 683.504 -6.9658; 689.447 -6.9658; 695.441 -6.8519; 701.488 -6.8519; 707.587 -6.8519; 713.739 -6.8519; 719.945 -6.8519; 726.205 -6.7379; 732.519 -6.7379; 738.888 -6.7379; 745.312 -6.7379; 751.792 -6.7379; 758.329 -6.7379; 764.922 -6.7379; 771.573 -6.6239; 778.282 -6.6239; 785.049 -6.6239; 791.874 -6.6239; 798.759 -6.6239; 805.704 -6.6239; 812.71 -6.6239; 819.776 -6.6239; 826.903 -6.6239; 834.093 -6.51; 841.345 -6.51; 848.66 -6.51; 856.039 -6.51; 863.482 -6.51; 870.99 -6.51; 878.563 -6.51; 886.202 -6.51; 893.907 -6.51; 901.679 -6.51; 909.519 -6.51; 917.427 -6.51; 925.403 -6.51; 933.449 -6.51; 941.565 -6.51; 949.752 -6.51; 958.01 -6.51; 966.339 -6.51; 974.741 -6.51; 983.216 -6.51; 991.765 -6.51; 1000.39 -6.396; 1009.09 -6.396; 1017.86 -6.396; 1026.71 -6.396; 1035.64 -6.396; 1044.64 -6.396; 1053.72 -6.396; 1062.89 -6.396; 1072.13 -6.396; 1081.45 -6.51; 1090.85 -6.51; 1100.34 -6.51; 1109.9 -6.51; 1119.55 -6.6239; 1129.29 -6.6239; 1139.11 -6.6239; 1149.01 -6.7379; 1159 -6.7379; 1169.08 -6.7379; 1179.24 -6.7379; 1189.5 -6.8519; 1199.84 -6.8519; 1210.27 -6.8519; 1220.79 -6.9658; 1231.41 -6.9658; 1242.11 -6.9658; 1252.91 -6.9658; 1263.81 -7.0798; 1274.8 -7.0798; 1285.88 -7.1937; 1297.06 -7.1937; 1308.34 -7.1937; 1319.71 -7.3077; 1331.19 -7.3077; 1342.76 -7.4217; 1354.44 -7.4217; 1366.21 -7.4217; 1378.09 -7.5356; 1390.07 -7.5356; 1402.16 -7.6496; 1414.35 -7.6496; 1426.65 -7.7635; 1439.05 -7.7635; 1451.56 -7.7635; 1464.19 -7.8775; 1476.92 -7.8775; 1489.76 -7.9915; 1502.71 -7.9915; 1515.78 -7.9915; 1528.95 -7.9915; 1542.25 -8.1054; 1555.66 -8.2194; 1569.18 -8.2194; 1582.83 -8.2194; 1596.59 -8.2194; 1610.47 -8.3333; 1624.47 -8.3333; 1638.6 -8.3333; 1652.84 -8.3333; 1667.22 -8.4473; 1681.71 -8.5613; 1696.33 -8.5613; 1711.08 -8.5613; 1725.96 -8.5613; 1740.97 -8.6752; 1756.1 -8.6752; 1771.37 -8.6752; 1786.77 -8.7892; 1802.31 -8.7892; 1817.98 -8.7892; 1833.79 -8.7892; 1849.73 -8.9031; 1865.81 -8.9031; 1882.04 -8.9031; 1898.4 -9.0171; 1914.9 -9.0171; 1931.55 -9.1311; 1948.35 -9.1311; 1965.29 -9.1311; 1982.38 -9.1311; 1999.61 -9.245; 2017 -9.245; 2034.54 -9.245; 2052.22 -9.359; 2070.07 -9.359; 2088.07 -9.4729; 2106.22 -9.4729; 2124.53 -9.5869; 2143.01 -9.5869; 2161.64 -9.5869; 2180.43 -9.7009; 2199.39 -9.7009; 2218.51 -9.7009; 2237.8 -9.7009; 2257.26 -9.8148; 2276.89 -9.8148; 2296.68 -9.9288; 2316.65 -9.9288; 2336.79 -9.9288; 2357.11 -10.0427; 2377.61 -10.0427; 2398.28 -10.1567; 2419.13 -10.1567; 2440.16 -10.1567; 2461.38 -10.2707; 2482.78 -10.2707; 2504.37 -10.2707; 2526.14 -10.2707; 2548.11 -10.3846; 2570.26 -10.3846; 2592.61 -10.4986; 2615.15 -10.4986; 2637.89 -10.4986; 2660.83 -10.6125; 2683.96 -10.6125; 2707.3 -10.6125; 2730.84 -10.6125; 2754.58 -10.7265; 2778.53 -10.7265; 2802.69 -10.7265; 2827.06 -10.8405; 2851.64 -10.8405; 2876.43 -10.8405; 2901.44 -10.8405; 2926.67 -10.8405; 2952.11 -10.9544; 2977.78 -10.9544; 3003.67 -10.9544; 3029.79 -10.9544; 3056.13 -10.9544; 3082.7 -10.9544; 3109.5 -11.0684; 3136.54 -11.0684; 3163.81 -11.0684; 3191.32 -11.0684; 3219.07 -11.0684; 3247.06 -11.0684; 3275.29 -11.0684; 3303.77 -11.0684; 3332.49 -11.0684; 3361.47 -11.0684; 3390.69 -11.0684; 3420.17 -11.0684; 3449.91 -11.0684; 3479.91 -11.0684; 3510.16 -11.0684; 3540.68 -11.0684; 3571.47 -11.1823; 3602.52 -11.1823; 3633.84 -11.1823; 3665.44 -11.1823; 3697.31 -11.1823; 3729.45 -11.1823; 3761.88 -11.1823; 3794.59 -11.1823; 3827.58 -11.1823; 3860.86 -11.1823; 3894.43 -11.1823; 3928.29 -11.1823; 3962.44 -11.0684; 3996.9 -11.0684; 4031.65 -11.0684; 4066.7 -10.9544; 4102.06 -10.9544; 4137.73 -10.8405; 4173.7 -10.8405; 4209.99 -10.7265; 4246.6 -10.6125; 4283.52 -10.4986; 4320.76 -10.3276; 4358.33 -10.1567; 4396.22 -9.9858; 4434.45 -9.9288; 4473 -9.7578; 4511.89 -9.5869; 4551.12 -9.359; 4590.69 -9.1311; 4630.61 -8.9031; 4670.87 -8.7322; 4711.48 -8.5043; 4752.45 -8.3903; 4793.77 -8.1624; 4835.45 -8.0484; 4877.49 -7.8205; 4919.9 -7.7635; 4962.68 -7.6496; 5005.82 -7.5356; 5049.35 -7.4217; 5093.25 -7.4217; 5137.53 -7.3077; 5182.2 -7.1937; 5227.26 -7.1937; 5272.71 -7.0798; 5318.55 -7.0798; 5364.8 -7.0798; 5411.44 -7.0798; 5458.49 -7.1937; 5505.95 -7.1937; 5553.82 -7.1937; 5602.11 -7.3077; 5650.82 -7.3077; 5699.95 -7.4217; 5749.51 -7.4217; 5799.5 -7.5356; 5849.93 -7.6496; 5900.79 -7.7635; 5952.1 -7.8775; 6003.85 -7.8775; 6056.05 -7.9915; 6108.7 -7.9915; 6161.82 -7.9915; 6215.39 -7.9915; 6269.43 -7.9915; 6323.94 -7.9915; 6378.93 -7.9915; 6434.39 -7.8775; 6490.33 -7.8775; 6546.76 -7.7635; 6603.69 -7.6496; 6661.1 -7.4786; 6719.02 -7.3077; 6777.44 -7.1937; 6836.37 -7.0798; 6895.81 -6.9658; 6955.76 -6.7949; 7016.24 -6.6239; 7077.24 -6.453; 7138.78 -6.2251; 7200.85 -6.1681; 7263.46 -6.0541; 7326.61 -5.9402; 7390.31 -5.8262; 7454.57 -5.7123; 7519.38 -5.5983; 7584.76 -5.4843; 7650.71 -5.3704; 7717.23 -5.2564; 7784.33 -5.1425; 7852.01 -5.0285; 7920.28 -5.0285; 7989.14 -4.91453; 8058.61 -4.91453; 8128.67 -4.80057; 8199.35 -4.80057; 8270.64 -4.80057; 8342.55 -4.80057; 8415.08 -4.80057; 8488.25 -4.80057; 8562.05 -4.80057; 8636.5 -4.91453; 8711.59 -5.0285; 8787.33 -5.0285; 8863.73 -5.1425; 8940.8 -5.2564; 9018.54 -5.3704; 9096.95 -5.4843; 9176.05 -5.7123; 9255.83 -5.9402; 9336.31 -6.2251; 9417.48 -6.51; 9499.36 -6.7379; 9581.96 -6.9658; 9665.27 -7.1937; 9749.3 -7.4217; 9834.07 -7.5926; 9919.57 -7.7635; 10005.8 -7.5926; 10092.8 -7.4786; 10180.6 -7.1368; 10269.1 -6.7949; 10358.4 -6.2821; 10448.4 -5.7692; 10539.3 -5.1994; 10630.9 -4.80057; 10723.4 -4.45869; 10816.6 -4.23077; 10910.6 -4.00285; 11005.5 -3.83191; 11101.2 -3.77493; 11197.7 -3.66097; 11295.1 -3.54701; 11393.3 -3.54701; 11492.3 -3.66097; 11592.3 -3.66097; 11693 -3.77493; 11794.7 -3.83191; 11897.3 -4.00285; 12000.7 -4.11681; 12105 -4.11681; 12210.3 -4.23077; 12316.5 -4.23077; 12423.5 -4.11681; 12531.6 -4.11681; 12640.5 -3.94587; 12750.4 -3.77493; 12861.3 -3.66097; 12973.1 -3.54701; 13085.9 -3.54701; 13199.7 -3.43305; 13314.5 -3.43305; 13430.2 -3.43305; 13547 -3.43305; 13664.8 -3.43305; 13783.6 -3.54701; 13903.4 -3.60399; 14024.3 -3.71795; 14146.3 -3.94587; 14269.2 -4.23077; 14393.3 -4.57265; 14518.5 -5.0285; 14644.7 -5.4843; 14772 -5.9402; 14900.5 -6.453; 15030 -6.9088; 15160.7 -7.3077; 15292.5 -7.1937; 15425.5 -6.6809; 15559.6 -5.9972; 15694.9 -5.3134; 15831.3 -4.57265; 15969 -3.94587; 16107.8 -3.26211; 16247.9 -2.63533; 16389.2 -2.06553; 16531.7 -1.55271; 16675.4 -1.15385; 16820.4 -0.86895; 16966.6 -0.58405; 17114.1 -0.35613; 17262.9 -0.12821; 17413 0.09972; 17564.4 0.32764; 17717.2 0.4416; 17871.2 0.55556; 18026.6 0.55556; 18183.3 0.55556; 18341.4 0.55556; 18500.9 0.38462; 18661.7 0.1567; 18824 -0.12821; 18987.7 -0.47009; 19152.8 -0.86895; 19319.3 -1.26781; 19487.3 -1.72365; 19656.7 -2.23647; 19827.6 -2.63533; 20000 -2.92023; 20173.9 -2.57835; 20349.3 -2.12251; 20526.2 -1.43875; 20704.7 -0.69801; 20884.7 0.21368; 21066.3 1.06838; 21249.5 1.80912; 21434.2 2.49288; 21620.6 2.94872; 21808.6 3.34758; 21998.2 3.68946; 22189.5 4.03134; 22382.4 4.31624; 22577 4.60114; 22773.3 4.82906; 22971.3 4.88604; 23171 5; 23372.5 5; 23780.7 4.88604"); + ArbitraryResponseEqualizerEnable(jdsp, 1);*/ // FIR Equalizer - /*double freq[NUMPTS] = { 25.0, 40.0, 63.0, 100.0, 160.0, 250.0, 400.0, 630.0, 1000.0, 1600.0, 2500.0, 4000.0, 6300.0, 10000.0, 16000.0 }; - double gain[NUMPTS] = { 5.0, -1.0, -4, -1, 2.1, 0.0, 0.0, 0.7, -10.7, 0.0, 0.0, 0.0, 0.0, 0.8, 8.0 }; - //double gain[NUMPTS] = { 0.0, 5.0, 0.0 }; - FIREqualizerAxisInterpolation(jdsp, 0, 0, freq, gain); - jdsp->equalizerForceRefresh = 1; // For testing purpose - FIREqualizerEnable(jdsp);*/ - double wall1 = get_wall_time(); - double cpu1 = get_cpu_time(); - printf("[Info] Precomputation of filters take:\n[Info] %lf sec Wall time, %lf sec CPU time\n", wall1 - wall0, cpu1 - cpu0); - printf("[Info] Samples: %I64d, Channels: %d\n[Status] Allocating buffer\n", totalPCMFrameCount, channels); - wall0 = get_wall_time(); - cpu0 = get_cpu_time(); + double freq[NUMPTS] = { 25.0, 40.0, 63.0, 100.0, 160.0, 250.0, 400.0, 630.0, 1000.0, 1600.0, 2500.0, 4000.0, 6300.0, 10000.0, 16000.0 }; + double gains[NUMPTS] = { 5.0, -1.0, -4, -1, 2.1, 0.0, 0.0, 0.7, -10.7, 0.0, 0.0, 0.0, 0.0, 0.8, 8.0 }; + //double gains[NUMPTS] = { 0.0, 5.0, 0.0 }; + //MultimodalEqualizerAxisInterpolation(jdsp, 0, 0, freq, gains); + MultimodalEqualizerAxisInterpolation(jdsp, 0, 5, freq, gains); + MultimodalEqualizerEnable(jdsp, 1); + JamesDSPSetSampleRate(jdsp, (float)sampleRate, 1); int readcount = (unsigned int)ceil((float)totalPCMFrameCount / (float)frameCountBest); int finalSize = frameCountBest * readcount; float *splittedBuffer[2]; - splittedBuffer[0] = (float*)calloc(finalSize, sizeof(float)); - splittedBuffer[1] = (float*)calloc(finalSize, sizeof(float)); + splittedBuffer[0] = (float *)calloc(finalSize, sizeof(float)); + splittedBuffer[1] = (float *)calloc(finalSize, sizeof(float)); channel_splitFloat(pSampleData, (unsigned int)totalPCMFrameCount, splittedBuffer, channels); if (channels == 1) memcpy(splittedBuffer[1], splittedBuffer[0], finalSize * sizeof(float)); free(pSampleData); + void *dt1 = 0, *dt2 = 0; + void *yt1 = 0, *yt2 = 0; + const char simulateMultiplexing = 0; + const char simulateDatatype = 4; + if (simulateDatatype == 4) // Pack24 + { + dt1 = malloc(frameCountBest * 3 * 2); + dt2 = ((char *)dt1) + frameCountBest * 3; + yt1 = malloc(frameCountBest * 3 * 2); + yt2 = ((char *)yt1) + frameCountBest * 3; + } + else if (simulateDatatype == 3 || simulateDatatype == 2) // 8_24 / 32 + { + dt1 = malloc(frameCountBest * sizeof(int32_t) * 2); + dt2 = ((char *)dt1) + frameCountBest * sizeof(int32_t); + yt1 = malloc(frameCountBest * sizeof(int32_t) * 2); + yt2 = ((char *)yt1) + frameCountBest * sizeof(int32_t); + } + else if (simulateDatatype == 1) // 16 + { + dt1 = malloc(frameCountBest * sizeof(int16_t) * 2); + dt2 = ((char *)dt1) + frameCountBest * sizeof(int16_t); + yt1 = malloc(frameCountBest * sizeof(int16_t) * 2); + yt2 = ((char *)yt1) + frameCountBest * sizeof(int16_t); + } + else if (simulateDatatype == 0) // float + { + dt1 = malloc(frameCountBest * sizeof(float) * 2); + dt2 = ((char *)dt1) + frameCountBest * sizeof(float); + yt1 = malloc(frameCountBest * sizeof(float) * 2); + yt2 = ((char *)yt1) + frameCountBest * sizeof(float); + } int targetChannels = 2; - float **outBuffer = (float**)malloc(targetChannels * sizeof(float*)); + float **outBuffer = (float **)malloc(targetChannels * sizeof(float *)); for (i = 0; i < targetChannels; i++) - outBuffer[i] = (float*)calloc(finalSize, sizeof(float)); + outBuffer[i] = (float *)calloc(finalSize, sizeof(float)); printf("[Info] Processing...\n"); pthread_t inc_x_thread; threadTest dataThread; dataThread.dspPtr = jdsp; - //MovingAverage ma; - //InitMovingAverage(&ma, 512); + readCountN = readcount; + //pthread_create(&inc_x_thread, NULL, inc_eq, &dataThread); for (i = 0; i < readcount; i++) { + idxN = i; unsigned int pointerOffset = frameCountBest * i; float *ptrInLeft = splittedBuffer[0] + pointerOffset; float *ptrInRight = splittedBuffer[1] + pointerOffset; float *outl = outBuffer[0] + pointerOffset; float *outr = outBuffer[1] + pointerOffset; - if (i > 800 && i < 802) + if (i == 400) { - // Remove below comment for changing convolution impulse response in runtime + //CompressorSetParam(jdsp, 0.8, 4, 2, 1); //pthread_create(&inc_x_thread, NULL, inc_x, &dataThread); + //ArbitraryResponseEqualizerStringParser(jdsp, "cce2: 5000.0 3.0; 2000.0 0.0; 0.0 -100.0; 100.0 -20, 400.0; 0;"); + } + if (i > 50 && i < 400) + { + gains[5] += 0.09; + MultimodalEqualizerAxisInterpolation(jdsp, 0, 0, freq, gains); + } + else if (i >= 400) + { + gains[5] -= 0.3; + gains[10] -= 0.1; + MultimodalEqualizerAxisInterpolation(jdsp, 0, 0, freq, gains); + } + /*if (i == 200) + { + text = openTextFile("stftCentreCut.eel"); + if (text) + { + LiveProgStringParser(jdsp, text); + free(text); + } } - // Remove below comment for changing EQ setting in runtime - /*if (i > 700 && i < 900) + if (i == 300) { - gain[5] += 0.25; - FIREqualizerAxisInterpolation(jdsp, 0, 0, freq, gain); + text = openTextFile("fftConvolutionHRTF1.eel"); + if (text) + { + LiveProgStringParser(jdsp, text); + free(text); + } } - else if (i >= 900) + if (i == 600) { - gain[5] -= 0.25; - FIREqualizerAxisInterpolation(jdsp, 0, 1, freq, gain); + text = openTextFile("autopeakfilter.eel"); + if (text) + { + LiveProgStringParser(jdsp, text); + free(text); + } + } + if (i == 800) + { + text = openTextFile("stftDenoise.eel"); + if (text) + { + LiveProgStringParser(jdsp, text); + free(text); + } + } + if (i == 1000) + { + text = openTextFile("fftConvolution2x4x2.eel"); + if (text) + { + LiveProgStringParser(jdsp, text); + free(text); + } }*/ - jdsp->processFloatDeinterleaved(jdsp, ptrInLeft, ptrInRight, outl, outr, frameCountBest); + if (!simulateMultiplexing) + { + if (simulateDatatype == 4) + { + uint8_t *casted1 = dt1; + uint8_t *casted2 = dt2; + uint8_t *ycasted1 = yt1; + uint8_t *ycasted2 = yt2; + static const float scale = 1.0f / (float)(1UL << 31); + for (int j = 0; j < frameCountBest; j++) + { + jdsp->p24_from_i32(clamp24_from_float(ptrInLeft[j]), casted1 + j * 3); + jdsp->p24_from_i32(clamp24_from_float(ptrInRight[j]), casted2 + j * 3); + } + jdsp->processInt24PackedDeinterleaved(jdsp, casted1, casted2, ycasted1, ycasted2, frameCountBest); + for (int j = 0; j < frameCountBest; j++) + { + outl[j] = (float)jdsp->i32_from_p24(ycasted1 + j * 3) * scale; + outr[j] = (float)jdsp->i32_from_p24(ycasted2 + j * 3) * scale; + } + } + else if (simulateDatatype == 3 || simulateDatatype == 2) + { + int32_t *casted1 = dt1; + int32_t *casted2 = dt2; + int32_t *ycasted1 = yt1; + int32_t *ycasted2 = yt2; + float scale; + if (simulateDatatype == 3) + scale = 1.0 / (float)(1 << 23); + else + scale = 1.0 / (float)(1 << 31); + for (int j = 0; j < frameCountBest; j++) + { + casted1[j] = ptrInLeft[j] / scale; + casted2[j] = ptrInRight[j] / scale; + } + if (simulateDatatype == 3) + jdsp->processInt8_24Deinterleaved(jdsp, casted1, casted2, ycasted1, ycasted2, frameCountBest); + else + jdsp->processInt32Deinterleaved(jdsp, casted1, casted2, ycasted1, ycasted2, frameCountBest); + for (int j = 0; j < frameCountBest; j++) + { + outl[j] = (float)ycasted1[j] * scale; + outr[j] = (float)ycasted2[j] * scale; + } + } + else if (simulateDatatype == 1) + { + int16_t *casted1 = dt1; + int16_t *casted2 = dt2; + int16_t *ycasted1 = yt1; + int16_t *ycasted2 = yt2; + float scale; + scale = 1.0 / (float)(1 << 15); + for (int j = 0; j < frameCountBest; j++) + { + casted1[j] = ptrInLeft[j] / scale; + casted2[j] = ptrInRight[j] / scale; + } + jdsp->processInt16Deinterleaved(jdsp, casted1, casted2, ycasted1, ycasted2, frameCountBest); + for (int j = 0; j < frameCountBest; j++) + { + outl[j] = (float)ycasted1[j] * scale; + outr[j] = (float)ycasted2[j] * scale; + } + } + else + jdsp->processFloatDeinterleaved(jdsp, ptrInLeft, ptrInRight, outl, outr, frameCountBest); + } + else + { + if (simulateDatatype == 4) + { + uint8_t *casted = dt1; + uint8_t *ycasted = yt1; + static const float scale = 1.0f / (float)(1UL << 31); + for (int j = 0; j < frameCountBest; j++) + { + jdsp->p24_from_i32(clamp24_from_float(ptrInLeft[j]), casted + (j << 1) * 3); + jdsp->p24_from_i32(clamp24_from_float(ptrInRight[j]), casted + ((j << 1) + 1) * 3); + } + jdsp->processInt24PackedMultiplexd(jdsp, casted, ycasted, frameCountBest); + for (int j = 0; j < frameCountBest; j++) + { + outl[j] = (float)jdsp->i32_from_p24(ycasted + (j << 1) * 3) * scale; + outr[j] = (float)jdsp->i32_from_p24(ycasted + ((j << 1) + 1) * 3) * scale; + } + } + else if (simulateDatatype == 3 || simulateDatatype == 2) + { + int32_t *casted = dt1; + int32_t *ycasted = yt1; + float scale; + if (simulateDatatype == 3) + scale = 1.0 / (float)(1 << 23); + else + scale = 1.0 / (float)(1 << 31); + for (int j = 0; j < frameCountBest; j++) + { + casted[j << 1] = ptrInLeft[j] / scale; + casted[(j << 1) + 1] = ptrInRight[j] / scale; + } + if (simulateDatatype == 3) + jdsp->processInt8_24Multiplexd(jdsp, casted, ycasted, frameCountBest); + else + jdsp->processInt32Multiplexd(jdsp, casted, ycasted, frameCountBest); + for (int j = 0; j < frameCountBest; j++) + { + outl[j] = (float)ycasted[j << 1] * scale; + outr[j] = (float)ycasted[(j << 1) + 1] * scale; + } + } + else if (simulateDatatype == 1) + { + int16_t *casted = dt1; + int16_t *ycasted = yt1; + float scale; + scale = 1.0 / (float)(1 << 15); + for (int j = 0; j < frameCountBest; j++) + { + casted[j << 1] = ptrInLeft[j] / scale; + casted[(j << 1) + 1] = ptrInRight[j] / scale; + } + jdsp->processInt16Multiplexd(jdsp, casted, ycasted, frameCountBest); + for (int j = 0; j < frameCountBest; j++) + { + outl[j] = (float)ycasted[j << 1] * scale; + outr[j] = (float)ycasted[(j << 1) + 1] * scale; + } + } + else + { + float *casted = dt1; + float *ycasted = yt1; + for (int j = 0; j < frameCountBest; j++) + { + casted[j << 1] = ptrInLeft[j]; + casted[(j << 1) + 1] = ptrInRight[j]; + } + jdsp->processFloatMultiplexd(jdsp, casted, ycasted, frameCountBest); + for (int j = 0; j < frameCountBest; j++) + { + outl[j] = ycasted[j << 1]; + outr[j] = ycasted[(j << 1) + 1]; + } + } + } } - if (tele) - fclose(tele); - if (tele2) - fclose(tele2); - wall1 = get_wall_time(); - cpu1 = get_cpu_time(); - printf("[Info] Audio samples processing take:\n[Info] %lf sec Wall time, %lf sec CPU time\n", wall1 - wall0, cpu1 - cpu0); + free(dt1); + free(yt1); JamesDSPFree(jdsp); JamesDSPGlobalMemoryDeallocation(); free(jdsp); free(splittedBuffer[0]); free(splittedBuffer[1]); unsigned int totalFrames = finalSize * targetChannels; - float *sndBuf = (float*)calloc(totalFrames, sizeof(float)); + float *sndBuf = (float *)calloc(totalFrames, sizeof(float)); channel_joinFloat(outBuffer, targetChannels, sndBuf, finalSize); for (i = 0; i < targetChannels; i++) free(outBuffer[i]); free(outBuffer); size_t bufsz = snprintf(NULL, 0, "%s_Processed.wav", filename); - char *filenameNew = (char*)malloc(bufsz + 1); + char *filenameNew = (char *)malloc(bufsz + 1); snprintf(filenameNew, bufsz + 1, "%s_Processed.wav", filename); free(filename); + SetCurrentDirectory(oldPath); drwav pWav; drwav_data_format format; format.container = drwav_container_riff; diff --git a/libjamesdsp/subtree/Main/CLI/mus.wav b/libjamesdsp/subtree/Main/CLI/mus.wav new file mode 100644 index 00000000..919290ef Binary files /dev/null and b/libjamesdsp/subtree/Main/CLI/mus.wav differ diff --git a/libjamesdsp/subtree/Main/DSPManager/AndroidManifest.xml b/libjamesdsp/subtree/Main/DSPManager/AndroidManifest.xml index ae67445c..4bef7cf1 100644 --- a/libjamesdsp/subtree/Main/DSPManager/AndroidManifest.xml +++ b/libjamesdsp/subtree/Main/DSPManager/AndroidManifest.xml @@ -11,6 +11,7 @@ +** Copyright (c) 2002-2021, Erik de Castro Lopo ** All rights reserved. ** ** This code is released under 2-clause BSD license. Please see the -** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING +** file at : https://github.com/libsndfile/libsamplerate/blob/master/COPYING */ #ifndef COMMON_H_INCLUDED #define COMMON_H_INCLUDED -#ifdef HAVE_STDINT_H #include -#elif (SIZEOF_INT == 4) -typedef int int32_t ; -#elif (SIZEOF_LONG == 4) -typedef long int32_t ; +#ifdef HAVE_STDBOOL_H +#include +#endif + +#if defined(__x86_64__) || defined(_M_X64) +# define HAVE_SSE2_INTRINSICS +#elif defined(ENABLE_SSE2_LRINT) && (defined(_M_IX86) || defined(__i386__)) +# if defined(_MSC_VER) +# define HAVE_SSE2_INTRINSICS +# elif defined(__clang__) +# ifdef __SSE2__ +# define HAVE_SSE2_INTRINSICS +# elif (__has_attribute(target)) +# define HAVE_SSE2_INTRINSICS +# define USE_TARGET_ATTRIBUTE +# endif +# elif defined(__GNUC__) +# ifdef __SSE2__ +# define HAVE_SSE2_INTRINSICS +# elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) +# define HAVE_SSE2_INTRINSICS +# define USE_TARGET_ATTRIBUTE +# endif +# endif +#endif + +#ifdef HAVE_SSE2_INTRINSICS +#ifdef HAVE_IMMINTRIN_H +#include +#else +#include +#endif +#endif /* HAVE_SSE2_INTRINSICS */ + +#include + +#ifdef HAVE_VISIBILITY + #define LIBSAMPLERATE_DLL_PRIVATE __attribute__ ((visibility ("hidden"))) +#elif defined (__APPLE__) + #define LIBSAMPLERATE_DLL_PRIVATE __private_extern__ +#else + #define LIBSAMPLERATE_DLL_PRIVATE #endif #define SRC_MAX_RATIO 256 @@ -22,10 +59,14 @@ typedef long int32_t ; #define SRC_MIN_RATIO_DIFF (1e-20) +#ifndef MAX #define MAX(a,b) (((a) > (b)) ? (a) : (b)) +#endif + +#ifndef MIN #define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#endif -#define ARRAY_LEN(x) ((int) (sizeof (x) / sizeof ((x) [0]))) #define OFFSETOF(type,member) ((int) (&((type*) 0)->member)) #define MAKE_MAGIC(a,b,c,d,e,f) ((a) + ((b) << 4) + ((c) << 8) + ((d) << 12) + ((e) << 16) + ((f) << 20)) @@ -48,19 +89,22 @@ typedef long int32_t ; # define WARN_UNUSED #endif - #include "samplerate.h" enum { SRC_FALSE = 0, SRC_TRUE = 1, +} ; - SRC_MODE_PROCESS = 555, - SRC_MODE_CALLBACK = 556 +enum SRC_MODE +{ + SRC_MODE_PROCESS = 0, + SRC_MODE_CALLBACK = 1 } ; -enum -{ SRC_ERR_NO_ERROR = 0, +typedef enum SRC_ERROR +{ + SRC_ERR_NO_ERROR = 0, SRC_ERR_MALLOC_FAILED, SRC_ERR_BAD_STATE, @@ -87,43 +131,94 @@ enum /* This must be the last error number. */ SRC_ERR_MAX_ERROR -} ; +} SRC_ERROR ; -typedef struct SRC_PRIVATE_tag -{ double last_ratio, last_position ; +typedef struct SRC_STATE_VT_tag +{ + /* Varispeed process function. */ + SRC_ERROR (*vari_process) (SRC_STATE *state, SRC_DATA *data) ; - int error ; - int channels ; + /* Constant speed process function. */ + SRC_ERROR (*const_process) (SRC_STATE *state, SRC_DATA *data) ; - /* SRC_MODE_PROCESS or SRC_MODE_CALLBACK */ - int mode ; + /* State reset. */ + void (*reset) (SRC_STATE *state) ; - /* Pointer to data to converter specific data. */ - void *private_data ; + /* State clone. */ + SRC_STATE *(*copy) (SRC_STATE *state) ; - /* Varispeed process function. */ - int (*vari_process) (struct SRC_PRIVATE_tag *psrc, SRC_DATA *data) ; + /* State close. */ + void (*close) (SRC_STATE *state) ; +} SRC_STATE_VT ; - /* Constant speed process function. */ - int (*const_process) (struct SRC_PRIVATE_tag *psrc, SRC_DATA *data) ; +struct SRC_STATE_tag +{ + SRC_STATE_VT *vt ; - /* State reset. */ - void (*reset) (struct SRC_PRIVATE_tag *psrc) ; + double last_ratio, last_position ; + + SRC_ERROR error ; + int channels ; + + /* SRC_MODE_PROCESS or SRC_MODE_CALLBACK */ + enum SRC_MODE mode ; /* Data specific to SRC_MODE_CALLBACK. */ src_callback_t callback_func ; void *user_callback_data ; long saved_frames ; const float *saved_data ; -} SRC_PRIVATE ; -int sinc_set_converter (SRC_PRIVATE *psrc, int src_enum) ; + /* Pointer to data to converter specific data. */ + void *private_data ; +} ; + +/* In src_sinc.c */ +const char* sinc_get_name (int src_enum) ; +const char* sinc_get_description (int src_enum) ; + +SRC_STATE *sinc_state_new (int converter_type, int channels, SRC_ERROR *error) ; /* In src_linear.c */ const char* linear_get_name (int src_enum) ; const char* linear_get_description (int src_enum) ; -int linear_set_converter (SRC_PRIVATE *psrc, int src_enum) ; +SRC_STATE *linear_state_new (int channels, SRC_ERROR *error) ; + +/*---------------------------------------------------------- +** SIMD optimized math functions. +*/ + +#ifdef HAVE_SSE2_INTRINSICS +static inline int +#ifdef USE_TARGET_ATTRIBUTE +__attribute__((target("sse2"))) +#endif +psf_lrintf (float x) +{ + return _mm_cvtss_si32 (_mm_load_ss (&x)) ; +} +static inline int +#ifdef USE_TARGET_ATTRIBUTE +__attribute__((target("sse2"))) +#endif +psf_lrint (double x) +{ + return _mm_cvtsd_si32 (_mm_load_sd (&x)) ; +} + +#else + +static inline int psf_lrintf (float x) +{ + return lrintf (x) ; +} /* psf_lrintf */ + +static inline int psf_lrint (double x) +{ + return lrint (x) ; +} /* psf_lrint */ +#endif /*---------------------------------------------------------- ** Common static inline functions. @@ -133,7 +228,7 @@ static inline double fmod_one (double x) { double res ; - res = x - lrint (x) ; + res = x - psf_lrint (x) ; if (res < 0.0) return res + 1.0 ; diff --git a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/config.h b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/config.h deleted file mode 100644 index df079cb8..00000000 --- a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/config.h +++ /dev/null @@ -1,140 +0,0 @@ -/* src/config.h. Generated from config.h.in by configure. */ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Set to 1 if the compile is GNU GCC. */ -#define COMPILER_IS_GCC 1 - -/* Target processor clips on negative float to int conversion. */ -#define CPU_CLIPS_NEGATIVE 1 - -/* Target processor clips on positive float to int conversion. */ -#define CPU_CLIPS_POSITIVE 0 - -/* Target processor is big endian. */ -#define CPU_IS_BIG_ENDIAN 0 - -/* Target processor is little endian. */ -#define CPU_IS_LITTLE_ENDIAN 1 - -/* Major version of GCC or 3 otherwise. */ -#define GCC_MAJOR_VERSION 4 - -/* Define to 1 if you have the `alarm' function. */ -#define HAVE_ALARM 1 - -/* Define to 1 if you have the `calloc' function. */ -#define HAVE_CALLOC 1 - -/* Define to 1 if you have the `ceil' function. */ -#define HAVE_CEIL 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Set to 1 if you have libfftw3. */ -#define HAVE_FFTW3 1 - -/* Define to 1 if you have the `floor' function. */ -#define HAVE_FLOOR 1 - -/* Define to 1 if you have the `fmod' function. */ -#define HAVE_FMOD 1 - -/* Define to 1 if you have the `free' function. */ -#define HAVE_FREE 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `m' library (-lm). */ -#define HAVE_LIBM 1 - -/* Define if you have C99's lrint function. */ -#define HAVE_LRINT 1 - -/* Define if you have C99's lrintf function. */ -#define HAVE_LRINTF 1 - -/* Define to 1 if you have the `malloc' function. */ -#define HAVE_MALLOC 1 - -/* Define to 1 if you have the `memcpy' function. */ -#define HAVE_MEMCPY 1 - -/* Define to 1 if you have the `memmove' function. */ -#define HAVE_MEMMOVE 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define if you have signal SIGALRM. */ -#define HAVE_SIGALRM 1 - -/* Define to 1 if you have the `signal' function. */ -#define HAVE_SIGNAL 1 - -/* Set to 1 if you have libsndfile. */ -#define HAVE_SNDFILE 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIMES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Set to 1 if compiling for Win32 */ -#define OS_IS_WIN32 0 - -/* Name of package */ -#define PACKAGE "libsamplerate" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "" - -/* The size of `double', as computed by sizeof. */ -#define SIZEOF_DOUBLE 8 - -/* The size of `float', as computed by sizeof. */ -#define SIZEOF_FLOAT 4 - -/* The size of `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of `long', as computed by sizeof. */ -#define SIZEOF_LONG 4 - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#define VERSION "0.1.3" diff --git a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/float_cast.h b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/float_cast.h deleted file mode 100644 index 0318427e..00000000 --- a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/float_cast.h +++ /dev/null @@ -1,271 +0,0 @@ -/* -** Copyright (c) 2001-2016, Erik de Castro Lopo -** All rights reserved. -** -** This code is released under 2-clause BSD license. Please see the -** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING -*/ - -/* Version 1.5 */ - -#ifndef FLOAT_CAST_HEADER -#define FLOAT_CAST_HEADER - -/*============================================================================ -** On Intel Pentium processors (especially PIII and probably P4), converting -** from float to int is very slow. To meet the C specs, the code produced by -** most C compilers targeting Pentium needs to change the FPU rounding mode -** before the float to int conversion is performed. -** -** Changing the FPU rounding mode causes the FPU pipeline to be flushed. It -** is this flushing of the pipeline which is so slow. -** -** Fortunately the ISO C99 specifications define the functions lrint, lrintf, -** llrint and llrintf which fix this problem as a side effect. -** -** On Unix-like systems, the configure process should have detected the -** presence of these functions. If they weren't found we have to replace them -** here with a standard C cast. -*/ - -/* -** The C99 prototypes for lrint and lrintf are as follows: -** -** long int lrintf (float x) ; -** long int lrint (double x) ; -*/ - -#include "config.h" - -/* -** The presence of the required functions are detected during the configure -** process and the values HAVE_LRINT and HAVE_LRINTF are set accordingly in -** the config.h file. -*/ - -#define HAVE_LRINT_REPLACEMENT 0 - -#if (HAVE_LRINT && HAVE_LRINTF) - - /* - ** These defines enable functionality introduced with the 1999 ISO C - ** standard. They must be defined before the inclusion of math.h to - ** engage them. If optimisation is enabled, these functions will be - ** inlined. With optimisation switched off, you have to link in the - ** maths library using -lm. - */ - - #define _ISOC9X_SOURCE 1 - #define _ISOC99_SOURCE 1 - - #define __USE_ISOC9X 1 - #define __USE_ISOC99 1 - - #include - -#elif (defined (__CYGWIN__)) - - #include - - #undef HAVE_LRINT_REPLACEMENT - #define HAVE_LRINT_REPLACEMENT 1 - - #undef lrint - #undef lrintf - - #define lrint double2int - #define lrintf float2int - - /* - ** The native CYGWIN lrint and lrintf functions are buggy: - ** http://sourceware.org/ml/cygwin/2005-06/msg00153.html - ** http://sourceware.org/ml/cygwin/2005-09/msg00047.html - ** and slow. - ** These functions (pulled from the Public Domain MinGW math.h header) - ** replace the native versions. - */ - - static inline long double2int (double in) - { long retval ; - - __asm__ __volatile__ - ( "fistpl %0" - : "=m" (retval) - : "t" (in) - : "st" - ) ; - - return retval ; - } /* double2int */ - - static inline long float2int (float in) - { long retval ; - - __asm__ __volatile__ - ( "fistpl %0" - : "=m" (retval) - : "t" (in) - : "st" - ) ; - - return retval ; - } /* float2int */ - -#elif (defined (WIN64) || defined(_WIN64)) - - /* Win64 section should be places before Win32 one, because - ** most likely both WIN32 and WIN64 will be defined in 64-bit case. - */ - - #include - - /* Win64 doesn't seem to have these functions, nor inline assembly. - ** Therefore implement inline versions of these functions here. - */ - #include - #include - - __inline long int - lrint(double flt) - { - return _mm_cvtsd_si32(_mm_load_sd(&flt)); - } - - __inline long int - lrintf(float flt) - { - return _mm_cvtss_si32(_mm_load_ss(&flt)); - } - -#elif (defined (WIN32) || defined (_WIN32)) - - #undef HAVE_LRINT_REPLACEMENT - #define HAVE_LRINT_REPLACEMENT 1 - - #include - - /* - ** Win32 doesn't seem to have these functions. - ** Therefore implement inline versions of these functions here. - */ - - __inline long int - lrint (double flt) - { int intgr ; - - _asm - { fld flt - fistp intgr - } ; - - return intgr ; - } - - __inline long int - lrintf (float flt) - { int intgr ; - - _asm - { fld flt - fistp intgr - } ; - - return intgr ; - } - -#elif (defined (__MWERKS__) && defined (macintosh)) - - /* This MacOS 9 solution was provided by Stephane Letz */ - - #undef HAVE_LRINT_REPLACEMENT - #define HAVE_LRINT_REPLACEMENT 1 - #include - - #undef lrint - #undef lrintf - - #define lrint double2int - #define lrintf float2int - - inline int - float2int (register float in) - { long res [2] ; - - asm - { fctiw in, in - stfd in, res - } - return res [1] ; - } /* float2int */ - - inline int - double2int (register double in) - { long res [2] ; - - asm - { fctiw in, in - stfd in, res - } - return res [1] ; - } /* double2int */ - -#elif (defined (__MACH__) && defined (__APPLE__)) - - /* For Apple MacOSX. */ - - #undef HAVE_LRINT_REPLACEMENT - #define HAVE_LRINT_REPLACEMENT 1 - #include - - #undef lrint - #undef lrintf - - #define lrint double2int - #define lrintf float2int - - inline static long - float2int (register float in) - { int res [2] ; - - __asm__ __volatile__ - ( "fctiw %1, %1\n\t" - "stfd %1, %0" - : "=m" (res) /* Output */ - : "f" (in) /* Input */ - : "memory" - ) ; - - return res [1] ; - } /* lrintf */ - - inline static long - double2int (register double in) - { int res [2] ; - - __asm__ __volatile__ - ( "fctiw %1, %1\n\t" - "stfd %1, %0" - : "=m" (res) /* Output */ - : "f" (in) /* Input */ - : "memory" - ) ; - - return res [1] ; - } /* lrint */ - -#else - #ifndef __sgi - #warning "Don't have the functions lrint() and lrintf()." - #warning "Replacing these functions with a standard C cast." - #endif - - #include - - #define lrint(dbl) ((long) (dbl)) - #define lrintf(flt) ((long) (flt)) - -#endif - - -#endif /* FLOAT_CAST_HEADER */ - diff --git a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/samplerate.c b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/samplerate.c index bef019dc..9cf46ed6 100644 --- a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/samplerate.c +++ b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/samplerate.c @@ -3,59 +3,53 @@ ** All rights reserved. ** ** This code is released under 2-clause BSD license. Please see the -** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING +** file at : https://github.com/libsndfile/libsamplerate/blob/master/COPYING */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include #include - -#include "config.h" +#include #include "samplerate.h" -#include "float_cast.h" #include "common.h" -static int psrc_set_converter (SRC_PRIVATE *psrc, int converter_type) ; +static SRC_STATE *psrc_set_converter (int converter_type, int channels, int *error) ; SRC_STATE * src_new (int converter_type, int channels, int *error) -{ SRC_PRIVATE *psrc ; +{ + return psrc_set_converter (converter_type, channels, error) ; +} /* src_new */ +SRC_STATE* +src_clone (SRC_STATE* orig, int *error) +{ + if (!orig) + { + if (error) + *error = SRC_ERR_BAD_STATE ; + return NULL ; + } if (error) *error = SRC_ERR_NO_ERROR ; - if (channels < 1) - { if (error) - *error = SRC_ERR_BAD_CHANNEL_COUNT ; - return NULL ; - } ; - - if ((psrc = calloc (1, sizeof (*psrc))) == NULL) - { if (error) + SRC_STATE *state = orig->vt->copy (orig) ; + if (!state) + if (error) *error = SRC_ERR_MALLOC_FAILED ; - return NULL ; - } ; - psrc->channels = channels ; - psrc->mode = SRC_MODE_PROCESS ; - - if (psrc_set_converter (psrc, converter_type) != SRC_ERR_NO_ERROR) - { if (error) - *error = SRC_ERR_BAD_CONVERTER ; - free (psrc) ; - psrc = NULL ; - } ; - - src_reset ((SRC_STATE*) psrc) ; - - return (SRC_STATE*) psrc ; -} /* src_new */ + return state ; +} SRC_STATE* src_callback_new (src_callback_t func, int converter_type, int channels, int *error, void* cb_data) -{ SRC_STATE *src_state ; +{ SRC_STATE *state ; if (func == NULL) { if (error) @@ -66,46 +60,36 @@ src_callback_new (src_callback_t func, int converter_type, int channels, int *er if (error != NULL) *error = 0 ; - if ((src_state = src_new (converter_type, channels, error)) == NULL) + if ((state = src_new (converter_type, channels, error)) == NULL) return NULL ; - src_reset (src_state) ; + src_reset (state) ; - ((SRC_PRIVATE*) src_state)->mode = SRC_MODE_CALLBACK ; - ((SRC_PRIVATE*) src_state)->callback_func = func ; - ((SRC_PRIVATE*) src_state)->user_callback_data = cb_data ; + state->mode = SRC_MODE_CALLBACK ; + state->callback_func = func ; + state->user_callback_data = cb_data ; - return src_state ; + return state ; } /* src_callback_new */ SRC_STATE * src_delete (SRC_STATE *state) -{ SRC_PRIVATE *psrc ; - - psrc = (SRC_PRIVATE*) state ; - if (psrc) - { if (psrc->private_data) - free (psrc->private_data) ; - memset (psrc, 0, sizeof (SRC_PRIVATE)) ; - free (psrc) ; - } ; +{ + if (state) + state->vt->close (state) ; return NULL ; } /* src_state */ int src_process (SRC_STATE *state, SRC_DATA *data) -{ SRC_PRIVATE *psrc ; +{ int error ; - psrc = (SRC_PRIVATE*) state ; - - if (psrc == NULL) + if (state == NULL) return SRC_ERR_BAD_STATE ; - if (psrc->vari_process == NULL || psrc->const_process == NULL) - return SRC_ERR_BAD_PROC_PTR ; - if (psrc->mode != SRC_MODE_PROCESS) + if (state->mode != SRC_MODE_PROCESS) return SRC_ERR_BAD_MODE ; /* Check for valid SRC_DATA first. */ @@ -113,7 +97,8 @@ src_process (SRC_STATE *state, SRC_DATA *data) return SRC_ERR_BAD_DATA ; /* And that data_in and data_out are valid. */ - if (data->data_in == NULL || data->data_out == NULL) + if ((data->data_in == NULL && data->input_frames > 0) + || (data->data_out == NULL && data->output_frames > 0)) return SRC_ERR_BAD_DATA_PTR ; /* Check src_ratio is in range. */ @@ -126,13 +111,13 @@ src_process (SRC_STATE *state, SRC_DATA *data) data->output_frames = 0 ; if (data->data_in < data->data_out) - { if (data->data_in + data->input_frames * psrc->channels > data->data_out) + { if (data->data_in + data->input_frames * state->channels > data->data_out) { /*-printf ("\n\ndata_in: %p data_out: %p\n", (void*) (data->data_in + data->input_frames * psrc->channels), (void*) data->data_out) ;-*/ return SRC_ERR_DATA_OVERLAP ; } ; } - else if (data->data_out + data->output_frames * psrc->channels > data->data_in) + else if (data->data_out + data->output_frames * state->channels > data->data_in) { /*-printf ("\n\ndata_in : %p ouput frames: %ld data_out: %p\n", (void*) data->data_in, data->output_frames, (void*) data->data_out) ; printf ("data_out: %p (%p) data_in: %p\n", (void*) data->data_out, @@ -145,21 +130,21 @@ src_process (SRC_STATE *state, SRC_DATA *data) data->output_frames_gen = 0 ; /* Special case for when last_ratio has not been set. */ - if (psrc->last_ratio < (1.0 / SRC_MAX_RATIO)) - psrc->last_ratio = data->src_ratio ; + if (state->last_ratio < (1.0 / SRC_MAX_RATIO)) + state->last_ratio = data->src_ratio ; /* Now process. */ - if (fabs (psrc->last_ratio - data->src_ratio) < 1e-15) - error = psrc->const_process (psrc, data) ; + if (fabs (state->last_ratio - data->src_ratio) < 1e-15) + error = state->vt->const_process (state, data) ; else - error = psrc->vari_process (psrc, data) ; + error = state->vt->vari_process (state, data) ; return error ; } /* src_process */ long src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) -{ SRC_PRIVATE *psrc ; +{ SRC_DATA src_data ; long output_frames_gen ; @@ -171,15 +156,13 @@ src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) if (frames <= 0) return 0 ; - psrc = (SRC_PRIVATE*) state ; - - if (psrc->mode != SRC_MODE_CALLBACK) - { psrc->error = SRC_ERR_BAD_MODE ; + if (state->mode != SRC_MODE_CALLBACK) + { state->error = SRC_ERR_BAD_MODE ; return 0 ; } ; - if (psrc->callback_func == NULL) - { psrc->error = SRC_ERR_NULL_CALLBACK ; + if (state->callback_func == NULL) + { state->error = SRC_ERR_NULL_CALLBACK ; return 0 ; } ; @@ -187,7 +170,7 @@ src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) /* Check src_ratio is in range. */ if (is_bad_src_ratio (src_ratio)) - { psrc->error = SRC_ERR_BAD_SRC_RATIO ; + { state->error = SRC_ERR_BAD_SRC_RATIO ; return 0 ; } ; @@ -196,8 +179,8 @@ src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) src_data.data_out = data ; src_data.output_frames = frames ; - src_data.data_in = psrc->saved_data ; - src_data.input_frames = psrc->saved_frames ; + src_data.data_in = state->saved_data ; + src_data.input_frames = state->saved_frames ; output_frames_gen = 0 ; while (output_frames_gen < frames) @@ -209,7 +192,7 @@ src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) if (src_data.input_frames == 0) { float *ptr = dummy ; - src_data.input_frames = psrc->callback_func (psrc->user_callback_data, &ptr) ; + src_data.input_frames = state->callback_func (state->user_callback_data, &ptr) ; src_data.data_in = ptr ; if (src_data.input_frames == 0) @@ -221,17 +204,17 @@ src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) ** to SRC_MODE_PROCESS first and when we return set it back to ** SRC_MODE_CALLBACK. */ - psrc->mode = SRC_MODE_PROCESS ; + state->mode = SRC_MODE_PROCESS ; error = src_process (state, &src_data) ; - psrc->mode = SRC_MODE_CALLBACK ; + state->mode = SRC_MODE_CALLBACK ; if (error != 0) break ; - src_data.data_in += src_data.input_frames_used * psrc->channels ; + src_data.data_in += src_data.input_frames_used * state->channels ; src_data.input_frames -= src_data.input_frames_used ; - src_data.data_out += src_data.output_frames_gen * psrc->channels ; + src_data.data_out += src_data.output_frames_gen * state->channels ; src_data.output_frames -= src_data.output_frames_gen ; output_frames_gen += src_data.output_frames_gen ; @@ -240,12 +223,12 @@ src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) break ; } ; - psrc->saved_data = src_data.data_in ; - psrc->saved_frames = src_data.input_frames ; + state->saved_data = src_data.data_in ; + state->saved_frames = src_data.input_frames ; if (error != 0) - { psrc->error = error ; - return 0 ; + { state->error = (SRC_ERROR) error ; + return 0 ; } ; return output_frames_gen ; @@ -256,58 +239,74 @@ src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) int src_set_ratio (SRC_STATE *state, double new_ratio) -{ SRC_PRIVATE *psrc ; - - psrc = (SRC_PRIVATE*) state ; - - if (psrc == NULL) +{ + if (state == NULL) return SRC_ERR_BAD_STATE ; - if (psrc->vari_process == NULL || psrc->const_process == NULL) - return SRC_ERR_BAD_PROC_PTR ; if (is_bad_src_ratio (new_ratio)) return SRC_ERR_BAD_SRC_RATIO ; - psrc->last_ratio = new_ratio ; + state->last_ratio = new_ratio ; return SRC_ERR_NO_ERROR ; } /* src_set_ratio */ int src_get_channels (SRC_STATE *state) -{ SRC_PRIVATE *psrc ; - - psrc = (SRC_PRIVATE*) state ; - - if (psrc == NULL) - return SRC_ERR_BAD_STATE ; - if (psrc->vari_process == NULL || psrc->const_process == NULL) - return SRC_ERR_BAD_PROC_PTR ; +{ + if (state == NULL) + return -SRC_ERR_BAD_STATE ; - return psrc->channels ; + return state->channels ; } /* src_get_channels */ int src_reset (SRC_STATE *state) -{ SRC_PRIVATE *psrc ; - - if ((psrc = (SRC_PRIVATE*) state) == NULL) +{ + if (state == NULL) return SRC_ERR_BAD_STATE ; - if (psrc->reset != NULL) - psrc->reset (psrc) ; + state->vt->reset (state) ; - psrc->last_position = 0.0 ; - psrc->last_ratio = 0.0 ; + state->last_position = 0.0 ; + state->last_ratio = 0.0 ; - psrc->saved_data = NULL ; - psrc->saved_frames = 0 ; + state->saved_data = NULL ; + state->saved_frames = 0 ; - psrc->error = SRC_ERR_NO_ERROR ; + state->error = SRC_ERR_NO_ERROR ; return SRC_ERR_NO_ERROR ; } /* src_reset */ +/*============================================================================== +** Control functions. +*/ + +const char * +src_get_name (int converter_type) +{ const char *desc ; + + if ((desc = sinc_get_name (converter_type)) != NULL) + return desc ; + if ((desc = linear_get_name (converter_type)) != NULL) + return desc ; + + return NULL ; +} /* src_get_name */ + +const char * +src_get_description (int converter_type) +{ const char *desc ; + + if ((desc = sinc_get_description (converter_type)) != NULL) + return desc ; + if ((desc = linear_get_description (converter_type)) != NULL) + return desc ; + + return NULL ; +} /* src_get_description */ + int src_is_valid_ratio (double ratio) { @@ -317,6 +316,79 @@ src_is_valid_ratio (double ratio) return SRC_TRUE ; } /* src_is_valid_ratio */ +/*============================================================================== +** Error reporting functions. +*/ + +int +src_error (SRC_STATE *state) +{ if (state) + return state->error ; + return SRC_ERR_NO_ERROR ; +} /* src_error */ + +const char* +src_strerror (int error) +{ + switch (error) + { case SRC_ERR_NO_ERROR : + return "No error." ; + case SRC_ERR_MALLOC_FAILED : + return "Malloc failed." ; + case SRC_ERR_BAD_STATE : + return "SRC_STATE pointer is NULL." ; + case SRC_ERR_BAD_DATA : + return "SRC_DATA pointer is NULL." ; + case SRC_ERR_BAD_DATA_PTR : + return "SRC_DATA->data_out or SRC_DATA->data_in is NULL." ; + case SRC_ERR_NO_PRIVATE : + return "Internal error. No private data." ; + + case SRC_ERR_BAD_SRC_RATIO : + return "SRC ratio outside [1/" SRC_MAX_RATIO_STR ", " SRC_MAX_RATIO_STR "] range." ; + + case SRC_ERR_BAD_SINC_STATE : + return "src_process() called without reset after end_of_input." ; + case SRC_ERR_BAD_PROC_PTR : + return "Internal error. No process pointer." ; + case SRC_ERR_SHIFT_BITS : + return "Internal error. SHIFT_BITS too large." ; + case SRC_ERR_FILTER_LEN : + return "Internal error. Filter length too large." ; + case SRC_ERR_BAD_CONVERTER : + return "Bad converter number." ; + case SRC_ERR_BAD_CHANNEL_COUNT : + return "Channel count must be >= 1." ; + case SRC_ERR_SINC_BAD_BUFFER_LEN : + return "Internal error. Bad buffer length. Please report this." ; + case SRC_ERR_SIZE_INCOMPATIBILITY : + return "Internal error. Input data / internal buffer size difference. Please report this." ; + case SRC_ERR_BAD_PRIV_PTR : + return "Internal error. Private pointer is NULL. Please report this." ; + case SRC_ERR_DATA_OVERLAP : + return "Input and output data arrays overlap." ; + case SRC_ERR_BAD_CALLBACK : + return "Supplied callback function pointer is NULL." ; + case SRC_ERR_BAD_MODE : + return "Calling mode differs from initialisation mode (ie process v callback)." ; + case SRC_ERR_NULL_CALLBACK : + return "Callback function pointer is NULL in src_callback_read ()." ; + case SRC_ERR_NO_VARIABLE_RATIO : + return "This converter only allows constant conversion ratios." ; + case SRC_ERR_SINC_PREPARE_DATA_BAD_LEN : + return "Internal error : Bad length in prepare_data ()." ; + case SRC_ERR_BAD_INTERNAL_STATE : + return "Error : Someone is trampling on my internal state." ; + + case SRC_ERR_MAX_ERROR : + return "Placeholder. No error defined for this error number." ; + + default : break ; + } + + return NULL ; +} /* src_strerror */ + /*============================================================================== ** Simple interface for performing a single conversion from input buffer to ** output buffer at a fixed conversion ratio. @@ -339,19 +411,96 @@ src_simple (SRC_DATA *src_data, int converter, int channels) return error ; } /* src_simple */ +void +src_short_to_float_array (const short *in, float *out, int len) +{ + for (int i = 0 ; i < len ; i++) + { out [i] = (float) (in [i] / (1.0 * 0x8000)) ; + } ; + + return ; +} /* src_short_to_float_array */ + +void +src_float_to_short_array (const float *in, short *out, int len) +{ + for (int i = 0 ; i < len ; i++) + { float scaled_value ; + scaled_value = in [i] * 32768.f ; + if (scaled_value >= 32767.f) + out [i] = 32767 ; + else if (scaled_value <= -32768.f) + out [i] = -32768 ; + else + out [i] = (short) (psf_lrintf (scaled_value)) ; + } +} /* src_float_to_short_array */ + +void +src_int_to_float_array (const int *in, float *out, int len) +{ + for (int i = 0 ; i < len ; i++) + { out [i] = (float) (in [i] / (8.0 * 0x10000000)) ; + } ; + + return ; +} /* src_int_to_float_array */ + +void +src_float_to_int_array (const float *in, int *out, int len) +{ double scaled_value ; + + for (int i = 0 ; i < len ; i++) + { scaled_value = in [i] * (8.0 * 0x10000000) ; +#if CPU_CLIPS_POSITIVE == 0 + if (scaled_value >= (1.0 * 0x7FFFFFFF)) + { out [i] = 0x7fffffff ; + continue ; + } ; +#endif +#if CPU_CLIPS_NEGATIVE == 0 + if (scaled_value <= (-8.0 * 0x10000000)) + { out [i] = -1 - 0x7fffffff ; + continue ; + } ; +#endif + out [i] = (int) psf_lrint (scaled_value) ; + } ; + +} /* src_float_to_int_array */ + /*============================================================================== ** Private functions. */ -static int -psrc_set_converter (SRC_PRIVATE *psrc, int converter_type) +static SRC_STATE * +psrc_set_converter (int converter_type, int channels, int *error) { - if (sinc_set_converter (psrc, converter_type) == SRC_ERR_NO_ERROR) - return SRC_ERR_NO_ERROR ; + SRC_ERROR temp_error; + SRC_STATE *state ; + switch (converter_type) + { + case SRC_SINC_BEST_QUALITY : + state = sinc_state_new (converter_type, channels, &temp_error) ; + break ; + case SRC_SINC_MEDIUM_QUALITY : + state = sinc_state_new (converter_type, channels, &temp_error) ; + break ; + case SRC_SINC_FASTEST : + state = sinc_state_new (converter_type, channels, &temp_error) ; + break ; + case SRC_LINEAR : + state = linear_state_new (channels, &temp_error) ; + break ; + default : + temp_error = SRC_ERR_BAD_CONVERTER ; + state = NULL ; + break ; + } - if (linear_set_converter (psrc, converter_type) == SRC_ERR_NO_ERROR) - return SRC_ERR_NO_ERROR ; + if (error) + *error = (int) temp_error ; - return SRC_ERR_BAD_CONVERTER ; + return state ; } /* psrc_set_converter */ diff --git a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/samplerate.h b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/samplerate.h index 9dc10045..767c753b 100644 --- a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/samplerate.h +++ b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/samplerate.h @@ -3,12 +3,12 @@ ** All rights reserved. ** ** This code is released under 2-clause BSD license. Please see the -** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING +** file at : https://github.com/libsndfile/libsamplerate/blob/master/COPYING */ /* ** API documentation is available here: -** http://www.mega-nerd.com/SRC/api.html +** http://libsndfile.github.io/libsamplerate/api.html */ #ifndef SAMPLERATE_H @@ -25,7 +25,7 @@ typedef struct SRC_STATE_tag SRC_STATE ; /* SRC_DATA is used to pass data to src_simple() and src_process(). */ typedef struct { const float *data_in ; - float *data_out ; + float *data_out ; long input_frames, output_frames ; long input_frames_used, output_frames_gen ; @@ -54,6 +54,12 @@ typedef long (*src_callback_t) (void *cb_data, float **data) ; SRC_STATE* src_new (int converter_type, int channels, int *error) ; +/* +** Clone a handle : return an anonymous pointer to a new converter +** containing the same internal state as orig. Error returned in *error. +*/ +SRC_STATE* src_clone (SRC_STATE* orig, int *error) ; + /* ** Initilisation for callback based API : return an anonymous pointer to the ** internal state of the converter. Choose a converter from the enums below. @@ -94,6 +100,18 @@ long src_callback_read (SRC_STATE *state, double src_ratio, long frames, float * int src_simple (SRC_DATA *data, int converter_type, int channels) ; +/* +** This library contains a number of different sample rate converters, +** numbered 0 through N. +** +** Return a string giving either a name or a more full description of each +** sample rate converter or NULL if no sample rate converter exists for +** the given value. The converters are sequentially numbered from 0 to N. +*/ + +const char *src_get_name (int converter_type) ; +const char *src_get_description (int converter_type) ; + /* ** Set a new SRC ratio. This allows step responses ** in the conversion ratio. @@ -125,6 +143,17 @@ int src_reset (SRC_STATE *state) ; int src_is_valid_ratio (double ratio) ; +/* +** Return an error number. +*/ + +int src_error (SRC_STATE *state) ; + +/* +** Convert the error number into a string. +*/ +const char* src_strerror (int error) ; + /* ** The following enums can be used to set the interpolator type ** using the function src_set_converter(). @@ -132,10 +161,26 @@ int src_is_valid_ratio (double ratio) ; enum { - SRC_SINC_MEDIUM_QUALITY = 0, - SRC_LINEAR = 1, + SRC_SINC_BEST_QUALITY = 0, + SRC_SINC_MEDIUM_QUALITY = 1, + SRC_SINC_FASTEST = 2, + SRC_LINEAR = 3, } ; +/* +** Extra helper functions for converting from short to float and +** back again. +*/ + +void src_short_to_float_array (const short *in, float *out, int len) ; +void src_float_to_short_array (const float *in, short *out, int len) ; + +void src_int_to_float_array (const int *in, float *out, int len) ; +void src_float_to_int_array (const float *in, int *out, int len) ; + + +void precompute_lpfcoeff(); +void clean_lpfcoeff(); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ diff --git a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/src_linear.c b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/src_linear.c index c239a085..4ddd7b45 100644 --- a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/src_linear.c +++ b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/src_linear.c @@ -1,21 +1,27 @@ /* -** Copyright (c) 2002-2016, Erik de Castro Lopo +** Copyright (c) 2002-2021, Erik de Castro Lopo ** All rights reserved. ** ** This code is released under 2-clause BSD license. Please see the -** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING +** file at : https://github.com/libsndfile/libsamplerate/blob/master/COPYING */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include #include #include #include +#include -#include "config.h" -#include "float_cast.h" #include "common.h" -static int linear_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; -static void linear_reset (SRC_PRIVATE *psrc) ; +static SRC_ERROR linear_vari_process (SRC_STATE *state, SRC_DATA *data) ; +static void linear_reset (SRC_STATE *state) ; +static SRC_STATE *linear_copy (SRC_STATE *state) ; +static void linear_close (SRC_STATE *state) ; /*======================================================================================== */ @@ -26,18 +32,26 @@ static void linear_reset (SRC_PRIVATE *psrc) ; typedef struct { int linear_magic_marker ; - int channels ; - int reset ; + int dirty ; long in_count, in_used ; long out_count, out_gen ; - float last_value [1] ; + float *last_value ; } LINEAR_DATA ; +static SRC_STATE_VT linear_state_vt = +{ + linear_vari_process, + linear_vari_process, + linear_reset, + linear_copy, + linear_close +} ; + /*---------------------------------------------------------------------------------------- */ -static int -linear_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) +static SRC_ERROR +linear_vari_process (SRC_STATE *state, SRC_DATA *data) { LINEAR_DATA *priv ; double src_ratio, input_index, rem ; int ch ; @@ -45,41 +59,41 @@ linear_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) if (data->input_frames <= 0) return SRC_ERR_NO_ERROR ; - if (psrc->private_data == NULL) + if (state->private_data == NULL) return SRC_ERR_NO_PRIVATE ; - priv = (LINEAR_DATA*) psrc->private_data ; + priv = (LINEAR_DATA*) state->private_data ; - if (priv->reset) + if (!priv->dirty) { /* If we have just been reset, set the last_value data. */ - for (ch = 0 ; ch < priv->channels ; ch++) + for (ch = 0 ; ch < state->channels ; ch++) priv->last_value [ch] = data->data_in [ch] ; - priv->reset = 0 ; + priv->dirty = 1 ; } ; - priv->in_count = data->input_frames * priv->channels ; - priv->out_count = data->output_frames * priv->channels ; + priv->in_count = data->input_frames * state->channels ; + priv->out_count = data->output_frames * state->channels ; priv->in_used = priv->out_gen = 0 ; - src_ratio = psrc->last_ratio ; + src_ratio = state->last_ratio ; if (is_bad_src_ratio (src_ratio)) return SRC_ERR_BAD_INTERNAL_STATE ; - input_index = psrc->last_position ; + input_index = state->last_position ; /* Calculate samples before first sample in input array. */ while (input_index < 1.0 && priv->out_gen < priv->out_count) { - if (priv->in_used + priv->channels * (1.0 + input_index) >= priv->in_count) + if (priv->in_used + state->channels * (1.0 + input_index) >= priv->in_count) break ; - if (priv->out_count > 0 && fabs (psrc->last_ratio - data->src_ratio) > SRC_MIN_RATIO_DIFF) - src_ratio = psrc->last_ratio + priv->out_gen * (data->src_ratio - psrc->last_ratio) / priv->out_count ; + if (priv->out_count > 0 && fabs (state->last_ratio - data->src_ratio) > SRC_MIN_RATIO_DIFF) + src_ratio = state->last_ratio + priv->out_gen * (data->src_ratio - state->last_ratio) / priv->out_count ; - for (ch = 0 ; ch < priv->channels ; ch++) + for (ch = 0 ; ch < state->channels ; ch++) { data->data_out [priv->out_gen] = (float) (priv->last_value [ch] + input_index * - (data->data_in [ch] - priv->last_value [ch])) ; + ((double) data->data_in [ch] - priv->last_value [ch])) ; priv->out_gen ++ ; } ; @@ -88,23 +102,25 @@ linear_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) } ; rem = fmod_one (input_index) ; - priv->in_used += priv->channels * lrint (input_index - rem) ; + priv->in_used += state->channels * psf_lrint (input_index - rem) ; input_index = rem ; /* Main processing loop. */ - while (priv->out_gen < priv->out_count && priv->in_used + priv->channels * input_index < priv->in_count) + while (priv->out_gen < priv->out_count && priv->in_used + state->channels * input_index < priv->in_count) { - if (priv->out_count > 0 && fabs (psrc->last_ratio - data->src_ratio) > SRC_MIN_RATIO_DIFF) - src_ratio = psrc->last_ratio + priv->out_gen * (data->src_ratio - psrc->last_ratio) / priv->out_count ; + if (priv->out_count > 0 && fabs (state->last_ratio - data->src_ratio) > SRC_MIN_RATIO_DIFF) + src_ratio = state->last_ratio + priv->out_gen * (data->src_ratio - state->last_ratio) / priv->out_count ; - if (SRC_DEBUG && priv->in_used < priv->channels && input_index < 1.0) - { printf ("Whoops!!!! in_used : %ld channels : %d input_index : %f\n", priv->in_used, priv->channels, input_index) ; +#if SRC_DEBUG + if (priv->in_used < state->channels && input_index < 1.0) + { printf ("Whoops!!!! in_used : %ld channels : %d input_index : %f\n", priv->in_used, state->channels, input_index) ; exit (1) ; } ; +#endif - for (ch = 0 ; ch < priv->channels ; ch++) - { data->data_out [priv->out_gen] = (float) (data->data_in [priv->in_used - priv->channels + ch] + input_index * - (data->data_in [priv->in_used + ch] - data->data_in [priv->in_used - priv->channels + ch])) ; + for (ch = 0 ; ch < state->channels ; ch++) + { data->data_out [priv->out_gen] = (float) (data->data_in [priv->in_used - state->channels + ch] + input_index * + ((double) data->data_in [priv->in_used + ch] - data->data_in [priv->in_used - state->channels + ch])) ; priv->out_gen ++ ; } ; @@ -112,26 +128,26 @@ linear_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - priv->in_used += priv->channels * lrint (input_index - rem) ; + priv->in_used += state->channels * psf_lrint (input_index - rem) ; input_index = rem ; } ; if (priv->in_used > priv->in_count) - { input_index += (priv->in_used - priv->in_count) / priv->channels ; + { input_index += (priv->in_used - priv->in_count) / state->channels ; priv->in_used = priv->in_count ; } ; - psrc->last_position = input_index ; + state->last_position = input_index ; if (priv->in_used > 0) - for (ch = 0 ; ch < priv->channels ; ch++) - priv->last_value [ch] = data->data_in [priv->in_used - priv->channels + ch] ; + for (ch = 0 ; ch < state->channels ; ch++) + priv->last_value [ch] = data->data_in [priv->in_used - state->channels + ch] ; /* Save current ratio rather then target ratio. */ - psrc->last_ratio = src_ratio ; + state->last_ratio = src_ratio ; - data->input_frames_used = priv->in_used / priv->channels ; - data->output_frames_gen = priv->out_gen / priv->channels ; + data->input_frames_used = priv->in_used / state->channels ; + data->output_frames_gen = priv->out_gen / state->channels ; return SRC_ERR_NO_ERROR ; } /* linear_vari_process */ @@ -139,7 +155,7 @@ linear_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) /*------------------------------------------------------------------------------ */ -const char* +LIBSAMPLERATE_DLL_PRIVATE const char* linear_get_name (int src_enum) { if (src_enum == SRC_LINEAR) @@ -148,7 +164,7 @@ linear_get_name (int src_enum) return NULL ; } /* linear_get_name */ -const char* +LIBSAMPLERATE_DLL_PRIVATE const char* linear_get_description (int src_enum) { if (src_enum == SRC_LINEAR) @@ -157,53 +173,129 @@ linear_get_description (int src_enum) return NULL ; } /* linear_get_descrition */ -int -linear_set_converter (SRC_PRIVATE *psrc, int src_enum) -{ LINEAR_DATA *priv = NULL ; +static LINEAR_DATA * +linear_data_new (int channels) +{ + assert (channels > 0) ; - if (src_enum != SRC_LINEAR) - return SRC_ERR_BAD_CONVERTER ; + LINEAR_DATA *priv = (LINEAR_DATA *) calloc (1, sizeof (LINEAR_DATA)) ; + if (priv) + { + priv->linear_magic_marker = LINEAR_MAGIC_MARKER ; + priv->last_value = (float *) calloc (channels, sizeof (float)) ; + if (!priv->last_value) + { + free (priv) ; + priv = NULL ; + } + } + + return priv ; +} + +LIBSAMPLERATE_DLL_PRIVATE SRC_STATE * +linear_state_new (int channels, SRC_ERROR *error) +{ + assert (channels > 0) ; + assert (error != NULL) ; - if (psrc->private_data != NULL) - { free (psrc->private_data) ; - psrc->private_data = NULL ; - } ; + SRC_STATE *state = (SRC_STATE *) calloc (1, sizeof (SRC_STATE)) ; + if (!state) + { + *error = SRC_ERR_MALLOC_FAILED ; + return NULL ; + } - if (psrc->private_data == NULL) - { priv = calloc (1, sizeof (*priv) + psrc->channels * sizeof (float)) ; - psrc->private_data = priv ; - } ; + state->channels = channels ; + state->mode = SRC_MODE_PROCESS ; - if (priv == NULL) - return SRC_ERR_MALLOC_FAILED ; + state->private_data = linear_data_new (state->channels) ; + if (!state->private_data) + { + free (state) ; + *error = SRC_ERR_MALLOC_FAILED ; + return NULL ; + } - priv->linear_magic_marker = LINEAR_MAGIC_MARKER ; - priv->channels = psrc->channels ; + state->vt = &linear_state_vt ; - psrc->const_process = linear_vari_process ; - psrc->vari_process = linear_vari_process ; - psrc->reset = linear_reset ; + linear_reset (state) ; - linear_reset (psrc) ; + *error = SRC_ERR_NO_ERROR ; - return SRC_ERR_NO_ERROR ; -} /* linear_set_converter */ + return state ; +} /*=================================================================================== */ static void -linear_reset (SRC_PRIVATE *psrc) +linear_reset (SRC_STATE *state) { LINEAR_DATA *priv = NULL ; - priv = (LINEAR_DATA*) psrc->private_data ; + priv = (LINEAR_DATA*) state->private_data ; if (priv == NULL) return ; - priv->channels = psrc->channels ; - priv->reset = 1 ; - memset (priv->last_value, 0, sizeof (priv->last_value [0]) * priv->channels) ; + priv->dirty = 0 ; + memset (priv->last_value, 0, sizeof (priv->last_value [0]) * state->channels) ; return ; } /* linear_reset */ +SRC_STATE * +linear_copy (SRC_STATE *state) +{ + assert (state != NULL) ; + + if (state->private_data == NULL) + return NULL ; + + SRC_STATE *to = (SRC_STATE *) calloc (1, sizeof (SRC_STATE)) ; + if (!to) + return NULL ; + memcpy (to, state, sizeof (SRC_STATE)) ; + + LINEAR_DATA* from_priv = (LINEAR_DATA*) state->private_data ; + LINEAR_DATA *to_priv = (LINEAR_DATA *) calloc (1, sizeof (LINEAR_DATA)) ; + if (!to_priv) + { + free (to) ; + return NULL ; + } + + memcpy (to_priv, from_priv, sizeof (LINEAR_DATA)) ; + to_priv->last_value = (float *) malloc (sizeof (float) * state->channels) ; + if (!to_priv->last_value) + { + free (to) ; + free (to_priv) ; + return NULL ; + } + memcpy (to_priv->last_value, from_priv->last_value, sizeof (float) * state->channels) ; + + to->private_data = to_priv ; + + return to ; +} /* linear_copy */ + +static void +linear_close (SRC_STATE *state) +{ + if (state) + { + LINEAR_DATA *linear = (LINEAR_DATA *) state->private_data ; + if (linear) + { + if (linear->last_value) + { + free (linear->last_value) ; + linear->last_value = NULL ; + } + free (linear) ; + linear = NULL ; + } + free (state) ; + state = NULL ; + } +} /* linear_close */ diff --git a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/src_sinc.c b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/src_sinc.c index 44e9fd4e..47175ebc 100644 --- a/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/src_sinc.c +++ b/libjamesdsp/subtree/Main/DSPManager/jni/libsamplerate/src_sinc.c @@ -1,19 +1,172 @@ /* -** Copyright (c) 2002-2016, Erik de Castro Lopo +** Copyright (c) 2002-2021, Erik de Castro Lopo ** All rights reserved. ** ** This code is released under 2-clause BSD license. Please see the -** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING +** file at : https://github.com/libsndfile/libsamplerate/blob/master/COPYING */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include #include #include #include +#include +#include -#include "config.h" -#include "float_cast.h" #include "common.h" - +#ifndef M_PI +#define M_PI 3.14159265358979323846264338328 +#endif +// Filter generator start +double sinc(double x) +{ + if (x != 0.0) + return sin(M_PI * x) / (M_PI * x); + else + return 1.0; +} +double bessi0(double x) +{ + double xh, sum, pow, ds; + int k; + xh = 0.5 * x; + sum = 1.0; + pow = 1.0; + k = 0; + ds = 1.0; + while (ds > sum * DBL_EPSILON) + { + ++k; + pow = pow * (xh / k); + ds = pow * pow; + sum = sum + ds; + } + return sum; +} +double chbevl(double x, double array[], int n) +{ + double b0, b1, b2, *p; + int i; + + p = array; + b0 = *p++; + b1 = 0.0; + i = n - 1; + + do { + b2 = b1; + b1 = b0; + b0 = x * b1 - b2 + *p++; + } while (--i); + + return(0.5 * (b0 - b2)); +} +/* Chebyshev coefficients for exp(-x) I0(x) + * in the interval [0,8]. + * + * lim(x->0){ exp(-x) I0(x) } = 1. + */ +static double A[] = { + -4.41534164647933937950E-18, + 3.33079451882223809783E-17, + -2.43127984654795469359E-16, + 1.71539128555513303061E-15, + -1.16853328779934516808E-14, + 7.67618549860493561688E-14, + -4.85644678311192946090E-13, + 2.95505266312963983461E-12, + -1.72682629144155570723E-11, + 9.67580903537323691224E-11, + -5.18979560163526290666E-10, + 2.65982372468238665035E-9, + -1.30002500998624804212E-8, + 6.04699502254191894932E-8, + -2.67079385394061173391E-7, + 1.11738753912010371815E-6, + -4.41673835845875056359E-6, + 1.64484480707288970893E-5, + -5.75419501008210370398E-5, + 1.88502885095841655729E-4, + -5.76375574538582365885E-4, + 1.63947561694133579842E-3, + -4.32430999505057594430E-3, + 1.05464603945949983183E-2, + -2.37374148058994688156E-2, + 4.93052842396707084878E-2, + -9.49010970480476444210E-2, + 1.71620901522208775349E-1, + -3.04682672343198398683E-1, + 6.76795274409476084995E-1 +}; +/* Chebyshev coefficients for exp(-x) sqrt(x) I0(x) + * in the inverted interval [8,infinity]. + * + * lim(x->inf){ exp(-x) sqrt(x) I0(x) } = 1/sqrt(2pi). + */ +static double B[] = { + -7.23318048787475395456E-18, + -4.83050448594418207126E-18, + 4.46562142029675999901E-17, + 3.46122286769746109310E-17, + -2.82762398051658348494E-16, + -3.42548561967721913462E-16, + 1.77256013305652638360E-15, + 3.81168066935262242075E-15, + -9.55484669882830764870E-15, + -4.15056934728722208663E-14, + 1.54008621752140982691E-14, + 3.85277838274214270114E-13, + 7.18012445138366623367E-13, + -1.79417853150680611778E-12, + -1.32158118404477131188E-11, + -3.14991652796324136454E-11, + 1.18891471078464383424E-11, + 4.94060238822496958910E-10, + 3.39623202570838634515E-9, + 2.26666899049817806459E-8, + 2.04891858946906374183E-7, + 2.89137052083475648297E-6, + 6.88975834691682398426E-5, + 3.36911647825569408990E-3, + 8.04490411014108831608E-1 +}; +double i0(double x) +{ + double y; + + if (x < 0) + x = -x; + if (x <= 8.0) { + y = (x / 2.0) - 2.0; + return(exp(x) * chbevl(y, A, 30)); + } + return(exp(x) * chbevl(32.0 / x - 2.0, B, 25) / sqrt(x)); +} +unsigned int getcoeff(double ratio, double atten, unsigned long long N, unsigned int incre, float *y) +{ + unsigned long long m; + double bta = (atten + 0.5) / 10; + double bes = 1.0 / fabs(i0(bta)); + double xind = 1.0 / ((N - 1) * (N - 1)); + double sum = 0.0; + y[0] = 1.0; + for (m = 1; m < ((N - 1) >> 1) + 1; m++) + { + double w = i0(bta * sqrt(1.0 - (double)(4 * m * m) * xind)) * bes; + double f = sinc(m / ratio) * w; + y[m] = f; + sum += f; + } + sum = 1.0 / (y[0] + sum * 2.0); + for (m = 0; m < ((N - 1) >> 1) + 1; m++) + y[m] = (y[m] * incre) * sum; + return ((N - 1) >> 1) + 1; +} +// Filter generator end #define SINC_MAGIC_MARKER MAKE_MAGIC (' ', 's', 'i', 'n', 'c', ' ') /*======================================================================================== @@ -25,15 +178,23 @@ #define FP_ONE ((double) (((increment_t) 1) << SHIFT_BITS)) #define INV_FP_ONE (1.0 / FP_ONE) +/* Customixe max channls from Kconfig. */ +#ifndef CONFIG_CHAN_NR +#define MAX_CHANNELS 128 +#else +#define MAX_CHANNELS CONFIG_CHAN_NR +#endif + /*======================================================================================== */ typedef int32_t increment_t ; +typedef float coeff_t ; +typedef int _CHECK_SHIFT_BITS[2 * (SHIFT_BITS < sizeof (increment_t) * 8 - 1) - 1]; /* sanity check. */ typedef struct { int sinc_magic_marker ; - int channels ; long in_count, in_used ; long out_count, out_gen ; @@ -41,30 +202,76 @@ typedef struct double src_ratio, input_index ; - float const *coeffs ; + coeff_t *coeffs ; int b_current, b_end, b_real_end, b_len ; /* Sure hope noone does more than 128 channels at once. */ - double left_calc [128], right_calc [128] ; + double left_calc [MAX_CHANNELS], right_calc [MAX_CHANNELS] ; - /* C99 struct flexible array. */ - float buffer [] ; + float *buffer ; } SINC_FILTER ; -static int sinc_multichan_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; -static int sinc_hex_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; -static int sinc_quad_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; -static int sinc_stereo_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; -static int sinc_mono_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; - -static int prepare_data (SINC_FILTER *filter, SRC_DATA *data, int half_filter_chan_len) WARN_UNUSED ; - -static void sinc_reset (SRC_PRIVATE *psrc) ; +static SRC_ERROR sinc_multichan_vari_process (SRC_STATE *state, SRC_DATA *data) ; +static SRC_ERROR sinc_hex_vari_process (SRC_STATE *state, SRC_DATA *data) ; +static SRC_ERROR sinc_quad_vari_process (SRC_STATE *state, SRC_DATA *data) ; +static SRC_ERROR sinc_stereo_vari_process (SRC_STATE *state, SRC_DATA *data) ; +static SRC_ERROR sinc_mono_vari_process (SRC_STATE *state, SRC_DATA *data) ; + +static SRC_ERROR prepare_data (SINC_FILTER *filter, int channels, SRC_DATA *data, int half_filter_chan_len) WARN_UNUSED ; + +static void sinc_reset (SRC_STATE *state) ; +static SRC_STATE *sinc_copy (SRC_STATE *state) ; +static void sinc_close (SRC_STATE *state) ; + +static SRC_STATE_VT sinc_multichan_state_vt = +{ + sinc_multichan_vari_process, + sinc_multichan_vari_process, + sinc_reset, + sinc_copy, + sinc_close +} ; + +static SRC_STATE_VT sinc_hex_state_vt = +{ + sinc_hex_vari_process, + sinc_hex_vari_process, + sinc_reset, + sinc_copy, + sinc_close +} ; + +static SRC_STATE_VT sinc_quad_state_vt = +{ + sinc_quad_vari_process, + sinc_quad_vari_process, + sinc_reset, + sinc_copy, + sinc_close +} ; + +static SRC_STATE_VT sinc_stereo_state_vt = +{ + sinc_stereo_vari_process, + sinc_stereo_vari_process, + sinc_reset, + sinc_copy, + sinc_close +} ; + +static SRC_STATE_VT sinc_mono_state_vt = +{ + sinc_mono_vari_process, + sinc_mono_vari_process, + sinc_reset, + sinc_copy, + sinc_close +} ; static inline increment_t double_to_fp (double x) -{ return (lrint ((x) * FP_ONE)) ; +{ return (increment_t) (psf_lrint ((x) * FP_ONE)) ; } /* double_to_fp */ static inline increment_t @@ -87,92 +294,183 @@ fp_to_double (increment_t x) { return fp_fraction_part (x) * INV_FP_ONE ; } /* fp_to_double */ -extern float *decompressedCoefficients; -int -sinc_set_converter (SRC_PRIVATE *psrc, int src_enum) -{ SINC_FILTER *filter, temp_filter ; - increment_t count ; - int bits ; +static inline int +int_div_ceil (int divident, int divisor) /* == (int) ceil ((float) divident / divisor) */ +{ assert (divident >= 0 && divisor > 0) ; /* For positive numbers only */ + return (divident + (divisor - 1)) / divisor ; +} + +/*---------------------------------------------------------------------------------------- +*/ - /* Quick sanity check. */ - if (SHIFT_BITS >= sizeof (increment_t) * 8 - 1) - return SRC_ERR_SHIFT_BITS ; +LIBSAMPLERATE_DLL_PRIVATE const char* +sinc_get_name (int src_enum) +{ + switch (src_enum) + { case SRC_SINC_BEST_QUALITY : + return "Best Sinc Interpolator" ; - if (psrc->private_data != NULL) - { free (psrc->private_data) ; - psrc->private_data = NULL ; + case SRC_SINC_MEDIUM_QUALITY : + return "Medium Sinc Interpolator" ; + + case SRC_SINC_FASTEST : + return "Fastest Sinc Interpolator" ; + + default: break ; } ; - memset (&temp_filter, 0, sizeof (temp_filter)) ; + return NULL ; +} /* sinc_get_descrition */ - temp_filter.sinc_magic_marker = SINC_MAGIC_MARKER ; - temp_filter.channels = psrc->channels ; +LIBSAMPLERATE_DLL_PRIVATE const char* +sinc_get_description (int src_enum) +{ + switch (src_enum) + { case SRC_SINC_FASTEST : + return "Band limited sinc interpolation, fastest, 97dB SNR, 80% BW." ; - if (psrc->channels > ARRAY_LEN (temp_filter.left_calc)) - return SRC_ERR_BAD_CHANNEL_COUNT ; - else if (psrc->channels == 1) - { psrc->const_process = sinc_mono_vari_process ; - psrc->vari_process = sinc_mono_vari_process ; - } - else - if (psrc->channels == 2) - { psrc->const_process = sinc_stereo_vari_process ; - psrc->vari_process = sinc_stereo_vari_process ; - } - else - if (psrc->channels == 4) - { psrc->const_process = sinc_quad_vari_process ; - psrc->vari_process = sinc_quad_vari_process ; - } - else - if (psrc->channels == 6) - { psrc->const_process = sinc_hex_vari_process ; - psrc->vari_process = sinc_hex_vari_process ; - } - else - { psrc->const_process = sinc_multichan_vari_process ; - psrc->vari_process = sinc_multichan_vari_process ; + case SRC_SINC_MEDIUM_QUALITY : + return "Band limited sinc interpolation, medium quality, 121dB SNR, 90% BW." ; + + case SRC_SINC_BEST_QUALITY : + return "Band limited sinc interpolation, best quality, 144dB SNR, 96% BW." ; + + default : + break ; } ; - psrc->reset = sinc_reset ; - temp_filter.coeffs = decompressedCoefficients; - temp_filter.coeff_half_len = 22438 - 2; - temp_filter.index_inc = 491; + return NULL ; +} /* sinc_get_descrition */ +float *gbl_coeff[3]; +void clean_lpfcoeff() +{ + for (unsigned int i = 0; i < 3; i++) + { + if (gbl_coeff[i]) + free(gbl_coeff[i]); + gbl_coeff[i] = 0; + } +} +void precompute_lpfcoeff() +{ + clean_lpfcoeff(); + gbl_coeff[0] = (float *)malloc(2464 * sizeof(float)); + unsigned int halfLen = getcoeff(153.9, 100.3, 4925, 128, gbl_coeff[0]); //1.539440918821971e+02 + for (unsigned int i = halfLen; i < halfLen + 1; i++) + gbl_coeff[0][i] = 0; + gbl_coeff[1] = (float *)malloc(22438 * sizeof(float)); + halfLen = getcoeff(520.0, 122.0, 44873, 491, gbl_coeff[1]); //5.342397164871713e+02 + for (unsigned int i = halfLen; i < halfLen + 1; i++) + gbl_coeff[1][i] = 0; + gbl_coeff[2] = (float *)malloc(340239 * sizeof(float)); + halfLen = getcoeff(2430.0, 160.0, 680475, 2381, gbl_coeff[2]); //2.465496453815475e+03 + for (unsigned int i = halfLen; i < halfLen + 1; i++) + gbl_coeff[2][i] = 0; +} +static SINC_FILTER *sinc_filter_new (int converter_type, int channels) +{ + assert (converter_type == SRC_SINC_FASTEST || + converter_type == SRC_SINC_MEDIUM_QUALITY || + converter_type == SRC_SINC_BEST_QUALITY) ; + assert (channels > 0 && channels <= MAX_CHANNELS) ; + + SINC_FILTER *priv = (SINC_FILTER *) calloc (1, sizeof (SINC_FILTER)) ; + if (priv) + { + priv->sinc_magic_marker = SINC_MAGIC_MARKER ; + unsigned int halfLen; + switch (converter_type) + { + case SRC_SINC_FASTEST: + priv->coeffs = gbl_coeff[0]; + priv->index_inc = 128; + priv->coeff_half_len = 2464 - 2; + break; + case SRC_SINC_MEDIUM_QUALITY: + priv->coeffs = gbl_coeff[1]; + priv->index_inc = 491; + priv->coeff_half_len = 22438 - 2; + break; + case SRC_SINC_BEST_QUALITY: + priv->coeffs = gbl_coeff[2]; + priv->index_inc = 2381; + priv->coeff_half_len = 340239 - 2; + break; + } - /* - ** FIXME : This needs to be looked at more closely to see if there is - ** a better way. Need to look at prepare_data () at the same time. - */ + priv->b_len = 3 * (int) psf_lrint ((priv->coeff_half_len + 2.0) / priv->index_inc * SRC_MAX_RATIO + 1) ; + priv->b_len = MAX (priv->b_len, 4096) ; + priv->b_len *= channels ; + priv->b_len += 1 ; // There is a <= check against samples_in_hand requiring a buffer bigger than the calculation above - temp_filter.b_len = lrint (2.5 * temp_filter.coeff_half_len / (temp_filter.index_inc * 1.0) * SRC_MAX_RATIO) ; - temp_filter.b_len = MAX (temp_filter.b_len, 4096) ; - temp_filter.b_len *= temp_filter.channels ; - if ((filter = calloc (1, sizeof (SINC_FILTER) + sizeof (filter->buffer [0]) * (temp_filter.b_len + temp_filter.channels))) == NULL) - return SRC_ERR_MALLOC_FAILED ; + priv->buffer = (float *) calloc (priv->b_len + channels, sizeof (float)) ; + if (!priv->buffer) + { + free (priv) ; + priv = NULL ; + } + } - *filter = temp_filter ; - memset (&temp_filter, 0xEE, sizeof (temp_filter)) ; + return priv ; +} - psrc->private_data = filter ; +LIBSAMPLERATE_DLL_PRIVATE SRC_STATE * +sinc_state_new (int converter_type, int channels, SRC_ERROR *error) +{ + assert (converter_type == SRC_SINC_FASTEST || + converter_type == SRC_SINC_MEDIUM_QUALITY || + converter_type == SRC_SINC_BEST_QUALITY) ; + assert (channels > 0) ; + assert (error != NULL) ; - sinc_reset (psrc) ; + if (channels > MAX_CHANNELS) + { + *error = SRC_ERR_BAD_CHANNEL_COUNT ; + return NULL ; + } - count = filter->coeff_half_len ; - for (bits = 0 ; (MAKE_INCREMENT_T (1) << bits) < count ; bits++) - count |= (MAKE_INCREMENT_T (1) << bits) ; + SRC_STATE *state = (SRC_STATE *) calloc (1, sizeof (SRC_STATE)) ; + if (!state) + { + *error = SRC_ERR_MALLOC_FAILED ; + return NULL ; + } + + state->channels = channels ; + state->mode = SRC_MODE_PROCESS ; + + if (state->channels == 1) + state->vt = &sinc_mono_state_vt ; + else if (state->channels == 2) + state->vt = &sinc_stereo_state_vt ; + else if (state->channels == 4) + state->vt = &sinc_quad_state_vt ; + else if (state->channels == 6) + state->vt = &sinc_hex_state_vt ; + else + state->vt = &sinc_multichan_state_vt ; - if (bits + SHIFT_BITS - 1 >= (int) (sizeof (increment_t) * 8)) - return SRC_ERR_FILTER_LEN ; + state->private_data = sinc_filter_new (converter_type, state->channels) ; + if (!state->private_data) + { + free (state) ; + *error = SRC_ERR_MALLOC_FAILED ; + return NULL ; + } - return SRC_ERR_NO_ERROR ; -} /* sinc_set_converter */ + sinc_reset (state) ; + + *error = SRC_ERR_NO_ERROR ; + + return state ; +} static void -sinc_reset (SRC_PRIVATE *psrc) +sinc_reset (SRC_STATE *state) { SINC_FILTER *filter ; - filter = (SINC_FILTER*) psrc->private_data ; + filter = (SINC_FILTER*) state->private_data ; if (filter == NULL) return ; @@ -184,9 +482,45 @@ sinc_reset (SRC_PRIVATE *psrc) memset (filter->buffer, 0, filter->b_len * sizeof (filter->buffer [0])) ; /* Set this for a sanity check */ - memset (filter->buffer + filter->b_len, 0xAA, filter->channels * sizeof (filter->buffer [0])) ; + memset (filter->buffer + filter->b_len, 0xAA, state->channels * sizeof (filter->buffer [0])) ; } /* sinc_reset */ +static SRC_STATE * +sinc_copy (SRC_STATE *state) +{ + assert (state != NULL) ; + + if (state->private_data == NULL) + return NULL ; + + SRC_STATE *to = (SRC_STATE *) calloc (1, sizeof (SRC_STATE)) ; + if (!to) + return NULL ; + memcpy (to, state, sizeof (SRC_STATE)) ; + + + SINC_FILTER* from_filter = (SINC_FILTER*) state->private_data ; + SINC_FILTER *to_filter = (SINC_FILTER *) calloc (1, sizeof (SINC_FILTER)) ; + if (!to_filter) + { + free (to) ; + return NULL ; + } + memcpy (to_filter, from_filter, sizeof (SINC_FILTER)) ; + to_filter->buffer = (float *) malloc (sizeof (float) * (from_filter->b_len + state->channels)) ; + if (!to_filter->buffer) + { + free (to) ; + free (to_filter) ; + return NULL ; + } + memcpy (to_filter->buffer, from_filter->buffer, sizeof (float) * (from_filter->b_len + state->channels)) ; + + to->private_data = to_filter ; + + return to ; +} /* sinc_copy */ + /*======================================================================================== ** Beware all ye who dare pass this point. There be dragons here. */ @@ -206,19 +540,26 @@ calc_output_single (SINC_FILTER *filter, increment_t increment, increment_t star filter_index = filter_index + coeff_count * increment ; data_index = filter->b_current - coeff_count ; + if (data_index < 0) /* Avoid underflow access to filter->buffer. */ + { int steps = -data_index ; + /* If the assert triggers we would have to take care not to underflow/overflow */ + assert (steps <= int_div_ceil (filter_index, increment)) ; + filter_index -= increment * steps ; + data_index += steps ; + } left = 0.0 ; - do + while (filter_index >= MAKE_INCREMENT_T (0)) { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - + assert (data_index >= 0 && data_index < filter->b_len) ; + assert (data_index < filter->b_end) ; left += icoeff * filter->buffer [data_index] ; filter_index -= increment ; data_index = data_index + 1 ; - } - while (filter_index >= MAKE_INCREMENT_T (0)) ; + } ; /* Now apply the right half of the filter. */ filter_index = increment - start_filter_index ; @@ -230,9 +571,10 @@ calc_output_single (SINC_FILTER *filter, increment_t increment, increment_t star do { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - + assert (data_index >= 0 && data_index < filter->b_len) ; + assert (data_index < filter->b_end) ; right += icoeff * filter->buffer [data_index] ; filter_index -= increment ; @@ -243,43 +585,43 @@ calc_output_single (SINC_FILTER *filter, increment_t increment, increment_t star return (left + right) ; } /* calc_output_single */ -static int -sinc_mono_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) +static SRC_ERROR +sinc_mono_vari_process (SRC_STATE *state, SRC_DATA *data) { SINC_FILTER *filter ; double input_index, src_ratio, count, float_increment, terminate, rem ; increment_t increment, start_filter_index ; int half_filter_chan_len, samples_in_hand ; - if (psrc->private_data == NULL) + if (state->private_data == NULL) return SRC_ERR_NO_PRIVATE ; - filter = (SINC_FILTER*) psrc->private_data ; + filter = (SINC_FILTER*) state->private_data ; /* If there is not a problem, this will be optimised out. */ if (sizeof (filter->buffer [0]) != sizeof (data->data_in [0])) return SRC_ERR_SIZE_INCOMPATIBILITY ; - filter->in_count = data->input_frames * filter->channels ; - filter->out_count = data->output_frames * filter->channels ; + filter->in_count = data->input_frames * state->channels ; + filter->out_count = data->output_frames * state->channels ; filter->in_used = filter->out_gen = 0 ; - src_ratio = psrc->last_ratio ; + src_ratio = state->last_ratio ; if (is_bad_src_ratio (src_ratio)) return SRC_ERR_BAD_INTERNAL_STATE ; /* Check the sample rate ratio wrt the buffer len. */ count = (filter->coeff_half_len + 2.0) / filter->index_inc ; - if (MIN (psrc->last_ratio, data->src_ratio) < 1.0) - count /= MIN (psrc->last_ratio, data->src_ratio) ; + if (MIN (state->last_ratio, data->src_ratio) < 1.0) + count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = filter->channels * (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; - input_index = psrc->last_position ; + input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -291,8 +633,8 @@ sinc_mono_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) - { if ((psrc->error = prepare_data (filter, data, half_filter_chan_len)) != 0) - return psrc->error ; + { if ((state->error = prepare_data (filter, state->channels, data, half_filter_chan_len)) != 0) + return state->error ; samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) @@ -305,8 +647,8 @@ sinc_mono_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) break ; } ; - if (filter->out_count > 0 && fabs (psrc->last_ratio - data->src_ratio) > 1e-10) - src_ratio = psrc->last_ratio + filter->out_gen * (data->src_ratio - psrc->last_ratio) / filter->out_count ; + if (filter->out_count > 0 && fabs (state->last_ratio - data->src_ratio) > 1e-10) + src_ratio = state->last_ratio + filter->out_gen * (data->src_ratio - state->last_ratio) / filter->out_count ; float_increment = filter->index_inc * (src_ratio < 1.0 ? src_ratio : 1.0) ; increment = double_to_fp (float_increment) ; @@ -321,23 +663,23 @@ sinc_mono_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; - psrc->last_position = input_index ; + state->last_position = input_index ; /* Save current ratio rather then target ratio. */ - psrc->last_ratio = src_ratio ; + state->last_ratio = src_ratio ; - data->input_frames_used = filter->in_used / filter->channels ; - data->output_frames_gen = filter->out_gen / filter->channels ; + data->input_frames_used = filter->in_used / state->channels ; + data->output_frames_gen = filter->out_gen / state->channels ; return SRC_ERR_NO_ERROR ; } /* sinc_mono_vari_process */ static inline void -calc_output_stereo (SINC_FILTER *filter, increment_t increment, increment_t start_filter_index, double scale, float * output) +calc_output_stereo (SINC_FILTER *filter, int channels, increment_t increment, increment_t start_filter_index, double scale, float * output) { double fraction, left [2], right [2], icoeff ; increment_t filter_index, max_filter_index ; int data_index, coeff_count, indx ; @@ -349,85 +691,93 @@ calc_output_stereo (SINC_FILTER *filter, increment_t increment, increment_t star filter_index = start_filter_index ; coeff_count = (max_filter_index - filter_index) / increment ; filter_index = filter_index + coeff_count * increment ; - data_index = filter->b_current - filter->channels * coeff_count ; + data_index = filter->b_current - channels * coeff_count ; + if (data_index < 0) /* Avoid underflow access to filter->buffer. */ + { int steps = int_div_ceil (-data_index, 2) ; + /* If the assert triggers we would have to take care not to underflow/overflow */ + assert (steps <= int_div_ceil (filter_index, increment)) ; + filter_index -= increment * steps ; + data_index += steps * 2; + } left [0] = left [1] = 0.0 ; - do + while (filter_index >= MAKE_INCREMENT_T (0)) { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - - left [0] += icoeff * filter->buffer [data_index] ; - left [1] += icoeff * filter->buffer [data_index + 1] ; + assert (data_index >= 0 && data_index + 1 < filter->b_len) ; + assert (data_index + 1 < filter->b_end) ; + for (int ch = 0; ch < 2; ch++) + left [ch] += icoeff * filter->buffer [data_index + ch] ; filter_index -= increment ; data_index = data_index + 2 ; - } - while (filter_index >= MAKE_INCREMENT_T (0)) ; + } ; /* Now apply the right half of the filter. */ filter_index = increment - start_filter_index ; coeff_count = (max_filter_index - filter_index) / increment ; filter_index = filter_index + coeff_count * increment ; - data_index = filter->b_current + filter->channels * (1 + coeff_count) ; + data_index = filter->b_current + channels * (1 + coeff_count) ; right [0] = right [1] = 0.0 ; do { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - - right [0] += icoeff * filter->buffer [data_index] ; - right [1] += icoeff * filter->buffer [data_index + 1] ; + assert (data_index >= 0 && data_index + 1 < filter->b_len) ; + assert (data_index + 1 < filter->b_end) ; + for (int ch = 0; ch < 2; ch++) + right [ch] += icoeff * filter->buffer [data_index + ch] ; filter_index -= increment ; data_index = data_index - 2 ; } while (filter_index > MAKE_INCREMENT_T (0)) ; - output [0] = scale * (left [0] + right [0]) ; - output [1] = scale * (left [1] + right [1]) ; + for (int ch = 0; ch < 2; ch++) + output [ch] = (float) (scale * (left [ch] + right [ch])) ; } /* calc_output_stereo */ -static int -sinc_stereo_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) +SRC_ERROR +sinc_stereo_vari_process (SRC_STATE *state, SRC_DATA *data) { SINC_FILTER *filter ; double input_index, src_ratio, count, float_increment, terminate, rem ; increment_t increment, start_filter_index ; int half_filter_chan_len, samples_in_hand ; - if (psrc->private_data == NULL) + if (state->private_data == NULL) return SRC_ERR_NO_PRIVATE ; - filter = (SINC_FILTER*) psrc->private_data ; + filter = (SINC_FILTER*) state->private_data ; /* If there is not a problem, this will be optimised out. */ if (sizeof (filter->buffer [0]) != sizeof (data->data_in [0])) return SRC_ERR_SIZE_INCOMPATIBILITY ; - filter->in_count = data->input_frames * filter->channels ; - filter->out_count = data->output_frames * filter->channels ; + filter->in_count = data->input_frames * state->channels ; + filter->out_count = data->output_frames * state->channels ; filter->in_used = filter->out_gen = 0 ; - src_ratio = psrc->last_ratio ; + src_ratio = state->last_ratio ; if (is_bad_src_ratio (src_ratio)) return SRC_ERR_BAD_INTERNAL_STATE ; /* Check the sample rate ratio wrt the buffer len. */ count = (filter->coeff_half_len + 2.0) / filter->index_inc ; - if (MIN (psrc->last_ratio, data->src_ratio) < 1.0) - count /= MIN (psrc->last_ratio, data->src_ratio) ; + if (MIN (state->last_ratio, data->src_ratio) < 1.0) + count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = filter->channels * (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; - input_index = psrc->last_position ; + input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -439,8 +789,8 @@ sinc_stereo_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) - { if ((psrc->error = prepare_data (filter, data, half_filter_chan_len)) != 0) - return psrc->error ; + { if ((state->error = prepare_data (filter, state->channels, data, half_filter_chan_len)) != 0) + return state->error ; samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) @@ -453,38 +803,38 @@ sinc_stereo_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) break ; } ; - if (filter->out_count > 0 && fabs (psrc->last_ratio - data->src_ratio) > 1e-10) - src_ratio = psrc->last_ratio + filter->out_gen * (data->src_ratio - psrc->last_ratio) / filter->out_count ; + if (filter->out_count > 0 && fabs (state->last_ratio - data->src_ratio) > 1e-10) + src_ratio = state->last_ratio + filter->out_gen * (data->src_ratio - state->last_ratio) / filter->out_count ; float_increment = filter->index_inc * (src_ratio < 1.0 ? src_ratio : 1.0) ; increment = double_to_fp (float_increment) ; start_filter_index = double_to_fp (input_index * float_increment) ; - calc_output_stereo (filter, increment, start_filter_index, float_increment / filter->index_inc, data->data_out + filter->out_gen) ; + calc_output_stereo (filter, state->channels, increment, start_filter_index, float_increment / filter->index_inc, data->data_out + filter->out_gen) ; filter->out_gen += 2 ; /* Figure out the next index. */ input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; - psrc->last_position = input_index ; + state->last_position = input_index ; /* Save current ratio rather then target ratio. */ - psrc->last_ratio = src_ratio ; + state->last_ratio = src_ratio ; - data->input_frames_used = filter->in_used / filter->channels ; - data->output_frames_gen = filter->out_gen / filter->channels ; + data->input_frames_used = filter->in_used / state->channels ; + data->output_frames_gen = filter->out_gen / state->channels ; return SRC_ERR_NO_ERROR ; } /* sinc_stereo_vari_process */ static inline void -calc_output_quad (SINC_FILTER *filter, increment_t increment, increment_t start_filter_index, double scale, float * output) +calc_output_quad (SINC_FILTER *filter, int channels, increment_t increment, increment_t start_filter_index, double scale, float * output) { double fraction, left [4], right [4], icoeff ; increment_t filter_index, max_filter_index ; int data_index, coeff_count, indx ; @@ -496,91 +846,94 @@ calc_output_quad (SINC_FILTER *filter, increment_t increment, increment_t start_ filter_index = start_filter_index ; coeff_count = (max_filter_index - filter_index) / increment ; filter_index = filter_index + coeff_count * increment ; - data_index = filter->b_current - filter->channels * coeff_count ; + data_index = filter->b_current - channels * coeff_count ; + if (data_index < 0) /* Avoid underflow access to filter->buffer. */ + { int steps = int_div_ceil (-data_index, 4) ; + /* If the assert triggers we would have to take care not to underflow/overflow */ + assert (steps <= int_div_ceil (filter_index, increment)) ; + filter_index -= increment * steps ; + data_index += steps * 4; + } left [0] = left [1] = left [2] = left [3] = 0.0 ; - do + while (filter_index >= MAKE_INCREMENT_T (0)) { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - - left [0] += icoeff * filter->buffer [data_index] ; - left [1] += icoeff * filter->buffer [data_index + 1] ; - left [2] += icoeff * filter->buffer [data_index + 2] ; - left [3] += icoeff * filter->buffer [data_index + 3] ; + assert (data_index >= 0 && data_index + 3 < filter->b_len) ; + assert (data_index + 3 < filter->b_end) ; + for (int ch = 0; ch < 4; ch++) + left [ch] += icoeff * filter->buffer [data_index + ch] ; filter_index -= increment ; data_index = data_index + 4 ; - } - while (filter_index >= MAKE_INCREMENT_T (0)) ; + } ; /* Now apply the right half of the filter. */ filter_index = increment - start_filter_index ; coeff_count = (max_filter_index - filter_index) / increment ; filter_index = filter_index + coeff_count * increment ; - data_index = filter->b_current + filter->channels * (1 + coeff_count) ; + data_index = filter->b_current + channels * (1 + coeff_count) ; right [0] = right [1] = right [2] = right [3] = 0.0 ; do { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; + assert (data_index >= 0 && data_index + 3 < filter->b_len) ; + assert (data_index + 3 < filter->b_end) ; + for (int ch = 0; ch < 4; ch++) + right [ch] += icoeff * filter->buffer [data_index + ch] ; - right [0] += icoeff * filter->buffer [data_index] ; - right [1] += icoeff * filter->buffer [data_index + 1] ; - right [2] += icoeff * filter->buffer [data_index + 2] ; - right [3] += icoeff * filter->buffer [data_index + 3] ; filter_index -= increment ; data_index = data_index - 4 ; } while (filter_index > MAKE_INCREMENT_T (0)) ; - output [0] = scale * (left [0] + right [0]) ; - output [1] = scale * (left [1] + right [1]) ; - output [2] = scale * (left [2] + right [2]) ; - output [3] = scale * (left [3] + right [3]) ; + for (int ch = 0; ch < 4; ch++) + output [ch] = (float) (scale * (left [ch] + right [ch])) ; } /* calc_output_quad */ -static int -sinc_quad_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) +SRC_ERROR +sinc_quad_vari_process (SRC_STATE *state, SRC_DATA *data) { SINC_FILTER *filter ; double input_index, src_ratio, count, float_increment, terminate, rem ; increment_t increment, start_filter_index ; int half_filter_chan_len, samples_in_hand ; - if (psrc->private_data == NULL) + if (state->private_data == NULL) return SRC_ERR_NO_PRIVATE ; - filter = (SINC_FILTER*) psrc->private_data ; + filter = (SINC_FILTER*) state->private_data ; /* If there is not a problem, this will be optimised out. */ if (sizeof (filter->buffer [0]) != sizeof (data->data_in [0])) return SRC_ERR_SIZE_INCOMPATIBILITY ; - filter->in_count = data->input_frames * filter->channels ; - filter->out_count = data->output_frames * filter->channels ; + filter->in_count = data->input_frames * state->channels ; + filter->out_count = data->output_frames * state->channels ; filter->in_used = filter->out_gen = 0 ; - src_ratio = psrc->last_ratio ; + src_ratio = state->last_ratio ; if (is_bad_src_ratio (src_ratio)) return SRC_ERR_BAD_INTERNAL_STATE ; /* Check the sample rate ratio wrt the buffer len. */ count = (filter->coeff_half_len + 2.0) / filter->index_inc ; - if (MIN (psrc->last_ratio, data->src_ratio) < 1.0) - count /= MIN (psrc->last_ratio, data->src_ratio) ; + if (MIN (state->last_ratio, data->src_ratio) < 1.0) + count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = filter->channels * (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; - input_index = psrc->last_position ; + input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -592,8 +945,8 @@ sinc_quad_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) - { if ((psrc->error = prepare_data (filter, data, half_filter_chan_len)) != 0) - return psrc->error ; + { if ((state->error = prepare_data (filter, state->channels, data, half_filter_chan_len)) != 0) + return state->error ; samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) @@ -606,38 +959,38 @@ sinc_quad_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) break ; } ; - if (filter->out_count > 0 && fabs (psrc->last_ratio - data->src_ratio) > 1e-10) - src_ratio = psrc->last_ratio + filter->out_gen * (data->src_ratio - psrc->last_ratio) / filter->out_count ; + if (filter->out_count > 0 && fabs (state->last_ratio - data->src_ratio) > 1e-10) + src_ratio = state->last_ratio + filter->out_gen * (data->src_ratio - state->last_ratio) / filter->out_count ; float_increment = filter->index_inc * (src_ratio < 1.0 ? src_ratio : 1.0) ; increment = double_to_fp (float_increment) ; start_filter_index = double_to_fp (input_index * float_increment) ; - calc_output_quad (filter, increment, start_filter_index, float_increment / filter->index_inc, data->data_out + filter->out_gen) ; + calc_output_quad (filter, state->channels, increment, start_filter_index, float_increment / filter->index_inc, data->data_out + filter->out_gen) ; filter->out_gen += 4 ; /* Figure out the next index. */ input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; - psrc->last_position = input_index ; + state->last_position = input_index ; /* Save current ratio rather then target ratio. */ - psrc->last_ratio = src_ratio ; + state->last_ratio = src_ratio ; - data->input_frames_used = filter->in_used / filter->channels ; - data->output_frames_gen = filter->out_gen / filter->channels ; + data->input_frames_used = filter->in_used / state->channels ; + data->output_frames_gen = filter->out_gen / state->channels ; return SRC_ERR_NO_ERROR ; } /* sinc_quad_vari_process */ static inline void -calc_output_hex (SINC_FILTER *filter, increment_t increment, increment_t start_filter_index, double scale, float * output) +calc_output_hex (SINC_FILTER *filter, int channels, increment_t increment, increment_t start_filter_index, double scale, float * output) { double fraction, left [6], right [6], icoeff ; increment_t filter_index, max_filter_index ; int data_index, coeff_count, indx ; @@ -649,97 +1002,93 @@ calc_output_hex (SINC_FILTER *filter, increment_t increment, increment_t start_f filter_index = start_filter_index ; coeff_count = (max_filter_index - filter_index) / increment ; filter_index = filter_index + coeff_count * increment ; - data_index = filter->b_current - filter->channels * coeff_count ; + data_index = filter->b_current - channels * coeff_count ; + if (data_index < 0) /* Avoid underflow access to filter->buffer. */ + { int steps = int_div_ceil (-data_index, 6) ; + /* If the assert triggers we would have to take care not to underflow/overflow */ + assert (steps <= int_div_ceil (filter_index, increment)) ; + filter_index -= increment * steps ; + data_index += steps * 6; + } left [0] = left [1] = left [2] = left [3] = left [4] = left [5] = 0.0 ; - do + while (filter_index >= MAKE_INCREMENT_T (0)) { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - - left [0] += icoeff * filter->buffer [data_index] ; - left [1] += icoeff * filter->buffer [data_index + 1] ; - left [2] += icoeff * filter->buffer [data_index + 2] ; - left [3] += icoeff * filter->buffer [data_index + 3] ; - left [4] += icoeff * filter->buffer [data_index + 4] ; - left [5] += icoeff * filter->buffer [data_index + 5] ; + assert (data_index >= 0 && data_index + 5 < filter->b_len) ; + assert (data_index + 5 < filter->b_end) ; + for (int ch = 0; ch < 6; ch++) + left [ch] += icoeff * filter->buffer [data_index + ch] ; filter_index -= increment ; data_index = data_index + 6 ; - } - while (filter_index >= MAKE_INCREMENT_T (0)) ; + } ; /* Now apply the right half of the filter. */ filter_index = increment - start_filter_index ; coeff_count = (max_filter_index - filter_index) / increment ; filter_index = filter_index + coeff_count * increment ; - data_index = filter->b_current + filter->channels * (1 + coeff_count) ; + data_index = filter->b_current + channels * (1 + coeff_count) ; right [0] = right [1] = right [2] = right [3] = right [4] = right [5] = 0.0 ; do { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - - right [0] += icoeff * filter->buffer [data_index] ; - right [1] += icoeff * filter->buffer [data_index + 1] ; - right [2] += icoeff * filter->buffer [data_index + 2] ; - right [3] += icoeff * filter->buffer [data_index + 3] ; - right [4] += icoeff * filter->buffer [data_index + 4] ; - right [5] += icoeff * filter->buffer [data_index + 5] ; + assert (data_index >= 0 && data_index + 5 < filter->b_len) ; + assert (data_index + 5 < filter->b_end) ; + for (int ch = 0; ch < 6; ch++) + right [ch] += icoeff * filter->buffer [data_index + ch] ; filter_index -= increment ; data_index = data_index - 6 ; } while (filter_index > MAKE_INCREMENT_T (0)) ; - output [0] = scale * (left [0] + right [0]) ; - output [1] = scale * (left [1] + right [1]) ; - output [2] = scale * (left [2] + right [2]) ; - output [3] = scale * (left [3] + right [3]) ; - output [4] = scale * (left [4] + right [4]) ; - output [5] = scale * (left [5] + right [5]) ; + for (int ch = 0; ch < 6; ch++) + output [ch] = (float) (scale * (left [ch] + right [ch])) ; } /* calc_output_hex */ -static int -sinc_hex_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) +SRC_ERROR +sinc_hex_vari_process (SRC_STATE *state, SRC_DATA *data) { SINC_FILTER *filter ; double input_index, src_ratio, count, float_increment, terminate, rem ; increment_t increment, start_filter_index ; int half_filter_chan_len, samples_in_hand ; - if (psrc->private_data == NULL) + if (state->private_data == NULL) return SRC_ERR_NO_PRIVATE ; - filter = (SINC_FILTER*) psrc->private_data ; + filter = (SINC_FILTER*) state->private_data ; /* If there is not a problem, this will be optimised out. */ if (sizeof (filter->buffer [0]) != sizeof (data->data_in [0])) return SRC_ERR_SIZE_INCOMPATIBILITY ; - filter->in_count = data->input_frames * filter->channels ; - filter->out_count = data->output_frames * filter->channels ; + filter->in_count = data->input_frames * state->channels ; + filter->out_count = data->output_frames * state->channels ; filter->in_used = filter->out_gen = 0 ; - src_ratio = psrc->last_ratio ; + src_ratio = state->last_ratio ; if (is_bad_src_ratio (src_ratio)) return SRC_ERR_BAD_INTERNAL_STATE ; /* Check the sample rate ratio wrt the buffer len. */ count = (filter->coeff_half_len + 2.0) / filter->index_inc ; - if (MIN (psrc->last_ratio, data->src_ratio) < 1.0) - count /= MIN (psrc->last_ratio, data->src_ratio) ; + if (MIN (state->last_ratio, data->src_ratio) < 1.0) + count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = filter->channels * (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; - input_index = psrc->last_position ; + input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -751,8 +1100,8 @@ sinc_hex_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) - { if ((psrc->error = prepare_data (filter, data, half_filter_chan_len)) != 0) - return psrc->error ; + { if ((state->error = prepare_data (filter, state->channels, data, half_filter_chan_len)) != 0) + return state->error ; samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) @@ -765,32 +1114,32 @@ sinc_hex_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) break ; } ; - if (filter->out_count > 0 && fabs (psrc->last_ratio - data->src_ratio) > 1e-10) - src_ratio = psrc->last_ratio + filter->out_gen * (data->src_ratio - psrc->last_ratio) / filter->out_count ; + if (filter->out_count > 0 && fabs (state->last_ratio - data->src_ratio) > 1e-10) + src_ratio = state->last_ratio + filter->out_gen * (data->src_ratio - state->last_ratio) / filter->out_count ; float_increment = filter->index_inc * (src_ratio < 1.0 ? src_ratio : 1.0) ; increment = double_to_fp (float_increment) ; start_filter_index = double_to_fp (input_index * float_increment) ; - calc_output_hex (filter, increment, start_filter_index, float_increment / filter->index_inc, data->data_out + filter->out_gen) ; + calc_output_hex (filter, state->channels, increment, start_filter_index, float_increment / filter->index_inc, data->data_out + filter->out_gen) ; filter->out_gen += 6 ; /* Figure out the next index. */ input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; - psrc->last_position = input_index ; + state->last_position = input_index ; /* Save current ratio rather then target ratio. */ - psrc->last_ratio = src_ratio ; + state->last_ratio = src_ratio ; - data->input_frames_used = filter->in_used / filter->channels ; - data->output_frames_gen = filter->out_gen / filter->channels ; + data->input_frames_used = filter->in_used / state->channels ; + data->output_frames_gen = filter->out_gen / state->channels ; return SRC_ERR_NO_ERROR ; } /* sinc_hex_vari_process */ @@ -801,7 +1150,7 @@ calc_output_multi (SINC_FILTER *filter, increment_t increment, increment_t start /* The following line is 1999 ISO Standard C. If your compiler complains, get a better compiler. */ double *left, *right ; increment_t filter_index, max_filter_index ; - int data_index, coeff_count, indx, ch ; + int data_index, coeff_count, indx ; left = filter->left_calc ; right = filter->right_calc ; @@ -815,61 +1164,30 @@ calc_output_multi (SINC_FILTER *filter, increment_t increment, increment_t start filter_index = filter_index + coeff_count * increment ; data_index = filter->b_current - channels * coeff_count ; + if (data_index < 0) /* Avoid underflow access to filter->buffer. */ + { int steps = int_div_ceil (-data_index, channels) ; + /* If the assert triggers we would have to take care not to underflow/overflow */ + assert (steps <= int_div_ceil (filter_index, increment)) ; + filter_index -= increment * steps ; + data_index += steps * channels ; + } + memset (left, 0, sizeof (left [0]) * channels) ; - do + while (filter_index >= MAKE_INCREMENT_T (0)) { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - /* - ** Duff's Device. - ** See : http://en.wikipedia.org/wiki/Duff's_device - */ - ch = channels ; - do - { - switch (ch % 8) - { default : - ch -- ; - left [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 7 : - ch -- ; - left [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 6 : - ch -- ; - left [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 5 : - ch -- ; - left [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 4 : - ch -- ; - left [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 3 : - ch -- ; - left [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 2 : - ch -- ; - left [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 1 : - ch -- ; - left [ch] += icoeff * filter->buffer [data_index + ch] ; - } ; - } - while (ch > 0) ; + assert (data_index >= 0 && data_index + channels - 1 < filter->b_len) ; + assert (data_index + channels - 1 < filter->b_end) ; + for (int ch = 0; ch < channels; ch++) + left [ch] += icoeff * filter->buffer [data_index + ch] ; filter_index -= increment ; data_index = data_index + channels ; - } - while (filter_index >= MAKE_INCREMENT_T (0)) ; + } ; /* Now apply the right half of the filter. */ filter_index = increment - start_filter_index ; @@ -881,132 +1199,61 @@ calc_output_multi (SINC_FILTER *filter, increment_t increment, increment_t start do { fraction = fp_to_double (filter_index) ; indx = fp_to_int (filter_index) ; - + assert (indx >= 0 && indx + 1 < filter->coeff_half_len + 2) ; icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ; - - ch = channels ; - do - { - switch (ch % 8) - { default : - ch -- ; - right [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 7 : - ch -- ; - right [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 6 : - ch -- ; - right [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 5 : - ch -- ; - right [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 4 : - ch -- ; - right [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 3 : - ch -- ; - right [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 2 : - ch -- ; - right [ch] += icoeff * filter->buffer [data_index + ch] ; - /* Falls through. */ - case 1 : - ch -- ; - right [ch] += icoeff * filter->buffer [data_index + ch] ; - } ; - } - while (ch > 0) ; + assert (data_index >= 0 && data_index + channels - 1 < filter->b_len) ; + assert (data_index + channels - 1 < filter->b_end) ; + for (int ch = 0; ch < channels; ch++) + right [ch] += icoeff * filter->buffer [data_index + ch] ; filter_index -= increment ; data_index = data_index - channels ; } while (filter_index > MAKE_INCREMENT_T (0)) ; - ch = channels ; - do - { - switch (ch % 8) - { default : - ch -- ; - output [ch] = scale * (left [ch] + right [ch]) ; - /* Falls through. */ - case 7 : - ch -- ; - output [ch] = scale * (left [ch] + right [ch]) ; - /* Falls through. */ - case 6 : - ch -- ; - output [ch] = scale * (left [ch] + right [ch]) ; - /* Falls through. */ - case 5 : - ch -- ; - output [ch] = scale * (left [ch] + right [ch]) ; - /* Falls through. */ - case 4 : - ch -- ; - output [ch] = scale * (left [ch] + right [ch]) ; - /* Falls through. */ - case 3 : - ch -- ; - output [ch] = scale * (left [ch] + right [ch]) ; - /* Falls through. */ - case 2 : - ch -- ; - output [ch] = scale * (left [ch] + right [ch]) ; - /* Falls through. */ - case 1 : - ch -- ; - output [ch] = scale * (left [ch] + right [ch]) ; - } ; - } - while (ch > 0) ; + for(int ch = 0; ch < channels; ch++) + output [ch] = (float) (scale * (left [ch] + right [ch])) ; return ; } /* calc_output_multi */ -static int -sinc_multichan_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) +static SRC_ERROR +sinc_multichan_vari_process (SRC_STATE *state, SRC_DATA *data) { SINC_FILTER *filter ; double input_index, src_ratio, count, float_increment, terminate, rem ; increment_t increment, start_filter_index ; int half_filter_chan_len, samples_in_hand ; - if (psrc->private_data == NULL) + if (state->private_data == NULL) return SRC_ERR_NO_PRIVATE ; - filter = (SINC_FILTER*) psrc->private_data ; + filter = (SINC_FILTER*) state->private_data ; /* If there is not a problem, this will be optimised out. */ if (sizeof (filter->buffer [0]) != sizeof (data->data_in [0])) return SRC_ERR_SIZE_INCOMPATIBILITY ; - filter->in_count = data->input_frames * filter->channels ; - filter->out_count = data->output_frames * filter->channels ; + filter->in_count = data->input_frames * state->channels ; + filter->out_count = data->output_frames * state->channels ; filter->in_used = filter->out_gen = 0 ; - src_ratio = psrc->last_ratio ; + src_ratio = state->last_ratio ; if (is_bad_src_ratio (src_ratio)) return SRC_ERR_BAD_INTERNAL_STATE ; /* Check the sample rate ratio wrt the buffer len. */ count = (filter->coeff_half_len + 2.0) / filter->index_inc ; - if (MIN (psrc->last_ratio, data->src_ratio) < 1.0) - count /= MIN (psrc->last_ratio, data->src_ratio) ; + if (MIN (state->last_ratio, data->src_ratio) < 1.0) + count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = filter->channels * (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; - input_index = psrc->last_position ; + input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -1018,8 +1265,8 @@ sinc_multichan_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) - { if ((psrc->error = prepare_data (filter, data, half_filter_chan_len)) != 0) - return psrc->error ; + { if ((state->error = prepare_data (filter, state->channels, data, half_filter_chan_len)) != 0) + return state->error ; samples_in_hand = (filter->b_end - filter->b_current + filter->b_len) % filter->b_len ; if (samples_in_hand <= half_filter_chan_len) @@ -1032,32 +1279,32 @@ sinc_multichan_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) break ; } ; - if (filter->out_count > 0 && fabs (psrc->last_ratio - data->src_ratio) > 1e-10) - src_ratio = psrc->last_ratio + filter->out_gen * (data->src_ratio - psrc->last_ratio) / filter->out_count ; + if (filter->out_count > 0 && fabs (state->last_ratio - data->src_ratio) > 1e-10) + src_ratio = state->last_ratio + filter->out_gen * (data->src_ratio - state->last_ratio) / filter->out_count ; float_increment = filter->index_inc * (src_ratio < 1.0 ? src_ratio : 1.0) ; increment = double_to_fp (float_increment) ; start_filter_index = double_to_fp (input_index * float_increment) ; - calc_output_multi (filter, increment, start_filter_index, filter->channels, float_increment / filter->index_inc, data->data_out + filter->out_gen) ; - filter->out_gen += psrc->channels ; + calc_output_multi (filter, increment, start_filter_index, state->channels, float_increment / filter->index_inc, data->data_out + filter->out_gen) ; + filter->out_gen += state->channels ; /* Figure out the next index. */ input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + filter->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; - psrc->last_position = input_index ; + state->last_position = input_index ; /* Save current ratio rather then target ratio. */ - psrc->last_ratio = src_ratio ; + state->last_ratio = src_ratio ; - data->input_frames_used = filter->in_used / filter->channels ; - data->output_frames_gen = filter->out_gen / filter->channels ; + data->input_frames_used = filter->in_used / state->channels ; + data->output_frames_gen = filter->out_gen / state->channels ; return SRC_ERR_NO_ERROR ; } /* sinc_multichan_vari_process */ @@ -1065,12 +1312,15 @@ sinc_multichan_vari_process (SRC_PRIVATE *psrc, SRC_DATA *data) /*---------------------------------------------------------------------------------------- */ -static int -prepare_data (SINC_FILTER *filter, SRC_DATA *data, int half_filter_chan_len) +static SRC_ERROR +prepare_data (SINC_FILTER *filter, int channels, SRC_DATA *data, int half_filter_chan_len) { int len = 0 ; if (filter->b_real_end >= 0) - return 0 ; /* Should be terminating. Just return. */ + return SRC_ERR_NO_ERROR ; /* Should be terminating. Just return. */ + + if (data->data_in == NULL) + return SRC_ERR_NO_ERROR ; if (filter->b_current == 0) { /* Initial state. Set up zeros at the start of the buffer and @@ -1080,7 +1330,7 @@ prepare_data (SINC_FILTER *filter, SRC_DATA *data, int half_filter_chan_len) filter->b_current = filter->b_end = half_filter_chan_len ; } - else if (filter->b_end + half_filter_chan_len + filter->channels < filter->b_len) + else if (filter->b_end + half_filter_chan_len + channels < filter->b_len) { /* Load data at current end position. */ len = MAX (filter->b_len - filter->b_current - half_filter_chan_len, 0) ; } @@ -1097,8 +1347,8 @@ prepare_data (SINC_FILTER *filter, SRC_DATA *data, int half_filter_chan_len) len = MAX (filter->b_len - filter->b_current - half_filter_chan_len, 0) ; } ; - len = MIN (filter->in_count - filter->in_used, len) ; - len -= (len % filter->channels) ; + len = MIN ((int) (filter->in_count - filter->in_used), len) ; + len -= (len % channels) ; if (len < 0 || filter->b_end + len > filter->b_len) return SRC_ERR_SINC_PREPARE_DATA_BAD_LEN ; @@ -1135,7 +1385,26 @@ prepare_data (SINC_FILTER *filter, SRC_DATA *data, int half_filter_chan_len) filter->b_end += len ; } ; - return 0 ; + return SRC_ERR_NO_ERROR ; } /* prepare_data */ - +static void +sinc_close (SRC_STATE *state) +{ + if (state) + { + SINC_FILTER *sinc = (SINC_FILTER *) state->private_data ; + if (sinc) + { + if (sinc->buffer) + { + free (sinc->buffer) ; + sinc->buffer = NULL ; + } + free (sinc) ; + sinc = NULL ; + } + free (state) ; + state = NULL ; + } +} /* sinc_close */ diff --git a/libjamesdsp/subtree/Main/DSPManager/jni/main/JdspImpResToolbox.c b/libjamesdsp/subtree/Main/DSPManager/jni/main/JdspImpResToolbox.c index 71523a9a..d5118b07 100644 --- a/libjamesdsp/subtree/Main/DSPManager/jni/main/JdspImpResToolbox.c +++ b/libjamesdsp/subtree/Main/DSPManager/jni/main/JdspImpResToolbox.c @@ -284,7 +284,7 @@ void checkStartEnd(float **signal, int channels, int nsamples, float normalizedD range[0] = firstSmpsPrevious != (nsamples - 1) ? firstSmpsPrevious : 0; range[1] = lastSmpsPrevious + 1; } -#include "../libsamplerate\samplerate.h" +#include "../libsamplerate/samplerate.h" #define DRMP3_IMPLEMENTATION #include "../dr_mp3.h" #define DR_FLAC_IMPLEMENTATION @@ -297,84 +297,6 @@ const char *get_filename_ext(const char *filename) if (!dot || dot == filename) return ""; return dot + 1; } -float *decompressedCoefficients = 0; -static const double compressedCoeffMQ[701] = { 0.919063234986138511, 0.913619994199411201, 0.897406560667438402, 0.870768836078722797, 0.834273523109754001, 0.788693711602254766, 0.734989263333015286, 0.674282539592362951, 0.607830143521649657, 0.536991457245508341, 0.463194839157173466, 0.387902406850539450, 0.312574364478514499, 0.238633838900749129, 0.167433166845669668, 0.100222526262645231, 0.038121730693097225, -0.017904091793426027, -0.067064330735278010, -0.108757765594775291, -0.142582153044975485, -0.168338357500518510, -0.186029009837402531, -0.195851834439330574, -0.198187933840591440, -0.193585458951914369, -0.182739217157973949, -0.166466876941489483, -0.145682513177707279, -0.121368299577954988, -0.094545192393702127, -0.066243461643369750, -0.037473912797399318, -0.009200603832691301, 0.017684198632122932, 0.042382162574711987, 0.064207571946511041, 0.082602100079150684, 0.097145355203635028, 0.107561011406507381, 0.113718474453852247, 0.115630166683615837, 0.113444644504459249, 0.107435882084395071, 0.097989162055837783, 0.085584105452548076, 0.070775446120293309, 0.054172207614333223, 0.036415971885660689, 0.018158938330246815, 0.000042459196338912, -0.017323296238410713, -0.033377949403731559, -0.047627263300716267, -0.059656793081079629, -0.069142490141500798, -0.075858019256578396, -0.079678658979652428, -0.080581767609623323, -0.078643906863599317, -0.074034819562284179, -0.067008552930955145, -0.057892102695980191, -0.047072022601671190, -0.034979497375161483, -0.022074413174279148, -0.008828977400685476, 0.004288560713652965, 0.016829555699174666, 0.028379479813981756, 0.038570858162652835, 0.047094241683417769, 0.053706909605020871, 0.058239076113395197, 0.060597464446319166, 0.060766202425508065, 0.058805083502616720, 0.054845323789501445, 0.049083025498695095, 0.041770628243703020, 0.033206689594802247, 0.023724383421121997, 0.013679137601712221, 0.003435850879130631, -0.006643868309165797, -0.016214010012738603, -0.024955612937682017, -0.032586990530198853, -0.038872417226545809, -0.043629018879643239, -0.046731678346964158, -0.048115839004410917, -0.047778163016171563, -0.045775074997070689, -0.042219292770236193, -0.037274512912134725, -0.031148477572630149, -0.024084698830208532, -0.016353156105483747, -0.008240309809337577, -0.000038789761018515, 0.007962880277736915, 0.015490170167632772, 0.022291712611484882, 0.028147455724642705, 0.032875542265754551, 0.036337708303315903, 0.038443049556812471, 0.039150063091460026, 0.038466933347880143, 0.036450092517807633, 0.033201143952433128, 0.028862291652591764, 0.023610467168487866, 0.017650385903971395, 0.011206796641134264, 0.004516210167813600, -0.002181595351151269, -0.008651993358287469, -0.014673562407359826, -0.020045503214184583, -0.024594176093158650, -0.028178551235573571, -0.030694406321622035, -0.032077152831841031, -0.032303222419993387, -0.031389996039150381, -0.029394309376722470, -0.026409616804964359, -0.022561940854659814, -0.018004773700230153, -0.012913130046223239, -0.007476976122050557, -0.001894276500050309, 0.003636091270827173, 0.008921304789011335, 0.013781207467236415, 0.018054338893886482, 0.021603186795815136, 0.024318493648450956, 0.026122487293166251, 0.026970945047679402, 0.026854043263213976, 0.025795987570079431, 0.023853461640206807, 0.021112972713804853, 0.017687209024348168, 0.013710556397414673, 0.009333947668859192, 0.004719238361448204, 0.000033314715823999, -0.004557854609777880, -0.008895014112733140, -0.012831064739959125, -0.016235971633599879, -0.019000975419769615, -0.021041973670496809, -0.022301970824562707, -0.022752529440111541, -0.022394191906072568, -0.021255878361951062, -0.019393302279828196, -0.016886478718542881, -0.013836430536684995, -0.010361223853106050, -0.006591484944463394, -0.002665565936317155, 0.001275464342459697, 0.005092825309417521, 0.008654850008311749, 0.011841465274590917, 0.014548176385701671, 0.016689426206986688, 0.018201223316688792, 0.019042961289876651, 0.019198381208357294, 0.018675660452129358, 0.017506641810096972, 0.015745246837337051, 0.013465145155917528, 0.010756776112709417, 0.007723840062309154, 0.004479392878420811, 0.001141688626311485, -0.002170078649346380, -0.005339982462341837, -0.008259373919338373, -0.010830557217282604, -0.012970007990380254, -0.014611030342508765, -0.015705770153788771, -0.016226526478563909, -0.016166328657139784, -0.015538773207899238, -0.014377140707818779, -0.012732837794565421, -0.010673232279050818, -0.008278969379415602, -0.005640873626063710, -0.002856553527664500, -0.000026834265658038, 0.002747852704083721, 0.005370995258360709, 0.007753319014958258, 0.009815785813909824, 0.011492173003678219, 0.012731150958433296, 0.013497795530424229, 0.013774493273929109, 0.013561219484126362, 0.012875191572278549, 0.011749922250546383, 0.010233717662138146, 0.008387684262046795, 0.006283324310867826, 0.003999812773708582, 0.001621057822818793, -0.000767347236997687, -0.003081171091507831, -0.005240483245491547, -0.007172383140908554, -0.008813427537033921, -0.010111676574189758, -0.011028293954650051, -0.011538653669060464, -0.011632924035784708, -0.011316118830412747, -0.010607624279109693, -0.009540229002217340, -0.008158700990423423, -0.006517970800651516, -0.004680992876389242, -0.002716366825287035, -0.000695807329823454, 0.001308445056270027, 0.003226179724201707, 0.004991648959431359, 0.006545794666321473, 0.007838194454033614, 0.008828664063258869, 0.009488466505815606, 0.009801093167340614, 0.009762597931815446, 0.009381481548192093, 0.008678139395534967, 0.007683900954968532, 0.006439703144240938, 0.004994451750326167, 0.003403135115410580, 0.001724761684323746, 0.000020197792912962, -0.001650015947868542, -0.003227792151864713, -0.004659494079420105, -0.005897735119564774, -0.006902920847777659, -0.007644484483944344, -0.008101778413755888, -0.008264597354555087, -0.008133322264400958, -0.007718687720230902, -0.007041188742854554, -0.006130155461650219, -0.005022535167821778, -0.003761430832691131, -0.002394452762763960, -0.000971945496911797, 0.000454844825025831, 0.001835596641714852, 0.003122668316617104, 0.004272722114380925, 0.005248162177843576, 0.006018339594106877, 0.006560486855847911, 0.006860354383749922, 0.006912532886871314, 0.006720456790559610, 0.006296095343184246, 0.005659348921651181, 0.004837178114662079, 0.003862502033291890, 0.002772909691220670, 0.001609233980906675, 0.000414041581645497, -0.000769906024675906, -0.001901165407831948, -0.002941044990442539, -0.003854910802244932, -0.004613320774623974, -0.005192951162290093, -0.005577286818932973, -0.005757056020769449, -0.005730399990410974, -0.005502776877353867, -0.005086609356845171, -0.004500693886508907, -0.003769397706347888, -0.002921676615038254, -0.001989952181071211, -0.001008891180284735, -0.000014132577398601, 0.000958991766382216, 0.001876697269289887, 0.002707904681562794, 0.003425276863778077, 0.004006100299408528, 0.004432983601002821, 0.004694352366032693, 0.004784727410211850, 0.004704781367912914, 0.004461176612085595, 0.004066195127045020, 0.003537178100163921, 0.002895799341758980, 0.002167201988627001, 0.001379032128141500, 0.000560405874095270, -0.000259152041390146, -0.001050759947470964, -0.001787184184342184, -0.002443762818329620, -0.002999217281793143, -0.003436325772772713, -0.003742437746853627, -0.003909814939345641, -0.003935790838753386, -0.003822747153675574, -0.003577912336230492, -0.003212993416401785, -0.002743658050835511, -0.002188888608264336, -0.001570234143874397, -0.000910989133812205, -0.000235329764723561, 0.000432560641279413, 0.001069345839998360, 0.001653340745377959, 0.002165238082962834, 0.002588733711954676, 0.002911030869493576, 0.003123208352342977, 0.003220442832479460, 0.003202080909987641, 0.003071561941475896, 0.002836197950977609, 0.002506821849485185, 0.002097319592184942, 0.001624065644771860, 0.001105284094542681, 0.000560359841433201, 0.000009125484808694, -0.000528850236297424, -0.001034947274672293, -0.001492128764321782, -0.001885503916298735, -0.002202801129643487, -0.002434736758218434, -0.002575269035034838, -0.002621730990172647, -0.002574840645573092, -0.002438591168737718, -0.002220027862259672, -0.001928922712789991, -0.001577360593112676, -0.001179253996234489, -0.000749805296090004, -0.000304936916893765, 0.000139289578942291, 0.000567244609490058, 0.000964271897894877, 0.001317181565737385, 0.001614678737960774, 0.001847714105275549, 0.002009746006742852, 0.002096907004167219, 0.002108071492117578, 0.002044824491385029, 0.001911335280223238, 0.001714142804308648, 0.001461862761483392, 0.001164828784166054, 0.000834682161765550, 0.000483925998593740, 0.000125460552453497, -0.000227883269383389, -0.000563795658925073, -0.000870909262856999, -0.001139175997920627, -0.001360187135536317, -0.001527426803455576, -0.001636451679881492, -0.001684992470943874, -0.001672975660262524, -0.001602466894019970, -0.001477540114542411, -0.001304079085075351, -0.001089520173828018, -0.000842547115162114, -0.000572749884052837, -0.000290260767615715, -0.000005381173403155, 0.000271787324682131, 0.000531694720882059, 0.000765665077860444, 0.000966179147256847, 0.001127108176071712, 0.001243891947014572, 0.001313656276814221, 0.001335267482640161, 0.001309323638539731, 0.001238084697878249, 0.001125345675261167, 0.000976258990458714, 0.000797113715033597, 0.000595080778704776, 0.000377934148912837, 0.000153758569481225, -0.000069345376995143, -0.000283548328671139, -0.000481561352316614, -0.000656878246049437, -0.000803983100343503, -0.000918516742461215, -0.000997397336828164, -0.001038892182663637, -0.001042639573678904, -0.001009621396079384, -0.000942088876021349, -0.000843445486235168, -0.000718092430499951, -0.000571243299133416, -0.000408715393446694, -0.000236705827693455, -0.000061560820167541, 0.000110453421068778, 0.000273370118506192, 0.000421724138601977, 0.000550730322629083, 0.000656432310144007, 0.000735817450677950, 0.000786894740519778, 0.000808734131933592, 0.000801466989262860, 0.000766248858509478, 0.000705187025332569, 0.000621236516650982, 0.000518069214751335, 0.000399921568730665, 0.000271426983019702, 0.000137439322056229, 0.000002854088234340, -0.000127566289796932, -0.000249356967950712, -0.000358499459727905, -0.000451549869015331, -0.000525742663600061, -0.000579067066332711, -0.000610314210246149, -0.000619094306052033, -0.000605824164738963, -0.000571686465475047, -0.000518563123569660, -0.000448945962885840, -0.000365828604967228, -0.000272584032349123, -0.000172832651673869, -0.000070305865763902, 0.000031289837955523, 0.000128403456337462, 0.000217760218406138, 0.000296468531144650, 0.000362109765670523, 0.000412808249833617, 0.000447279627497663, 0.000464856578836417, 0.000465491738613502, 0.000449738470059130, 0.000418710921836804, 0.000374025488711351, 0.000317726390511799, 0.000252198560764628, 0.000180071382714710, 0.000104117018254314, 0.000027147141711448, -0.000048088182130861, -0.000118995940709898, -0.000183226726188442, -0.000238749615318076, -0.000283913107803554, -0.000317490431754438, -0.000338708143110164, -0.000347257581417331, -0.000343289373546324, -0.000327391777412823, -0.000300554208881314, -0.000264117778630104, -0.000219715066774411, -0.000169201669906033, -0.000114582260151285, -0.000057933995063949, -0.000001330110803372, 0.000053233576939992, 0.000103906741924272, 0.000149044949497856, 0.000187260510974094, 0.000217462319983746, 0.000238883649294571, 0.000251097355835207, 0.000254018413730855, 0.000247894152903089, 0.000233283008194432, 0.000211022966716673, 0.000182191226994878, 0.000148056842795767, 0.000110028310364557, 0.000069598166140896, 0.000028286691831679, -0.000012413223177511, -0.000051088131137235, -0.000086451240238396, -0.000117383287411682, -0.000142965848616867, -0.000162506184310969, -0.000175553056891817, -0.000181903303379713, -0.000181599287597338, -0.000174917679492114, -0.000162350303974188, -0.000144578058136870, -0.000122439106161612, -0.000096892719738482, -0.000068980234721197, -0.000039784640417051, -0.000010390306964679, 0.000018155708707897, 0.000044879452343343, 0.000068911789142910, 0.000089515073669816, 0.000106104020030281, 0.000118260259226232, 0.000125740319217347, 0.000128477011389261, 0.000126574445796332, 0.000120297118433995, 0.000110053709582710, 0.000096376396848920, 0.000079896615190895, 0.000061318285745045, 0.000041389584008291, 0.000020874325790195, 0.000000524017729422, -0.000018948449136533, -0.000036892585232981, -0.000052740818819573, -0.000066025144314650, -0.000076389469747209, -0.000083597404911355, -0.000087535408131387, -0.000088211381288728, -0.000085748963835814, -0.000080377921496540, -0.000072421149619506, -0.000062278911057702, -0.000050411001395778, -0.000037317578835504, -0.000023519411693731, -0.000009538283954733, 0.000004121739654397, 0.000016991550435446, 0.000028652179052461, 0.000038747470023706, 0.000046993903986995, 0.000053187343852112, 0.000057206603209622, 0.000059013855762422, 0.000058652018744224, 0.000056239347370971, 0.000051961567969763, 0.000046061951828715, 0.000038829788015541, 0.000030587750191730, 0.000021678669346899, 0.000012452221695327, 0.000003252019725938, -0.000005596443768274, -0.000013796601731427, -0.000021090036946349, -0.000027263866219030, -0.000032156106624670, -0.000035658928433894, -0.000037719781474555, -0.000038340460301533, -0.000037574245901964, -0.000035521325378456, -0.000032322744186229, -0.000028153186597604, -0.000023212908194301, -0.000017719158939021, -0.000011897436866734, -0.000005972901266780, -0.000000162251446552, 0.000005333655793588, 0.000010336218246169, 0.000014694346087313, 0.000018288433744639, 0.000021032968627464, 0.000022877753957232, 0.000023807775391314, 0.000023841789731823, 0.000023029757133319, 0.000021449274538926, 0.000019201196577477, 0.000016404650185715, 0.000013191660473528, 0.000009701607868611, 0.000006075730729441, 0.000002451874068818, -0.000001040335292299, -0.000004283732788372, -0.000007177155365100, -0.000009638185206925, -0.000011605042076524, -0.000013037603419542, -0.000013917565218600, -0.000014247788012456, -0.000014050900469913, -0.000013367256554309, -0.000012252360976939, -0.000010773890887184, -0.000009008449384796, -0.000007038188493661, -0.000004947435946560, -0.000002819451929447, -0.000000733429418017, 0.000001238164361723, 0.000003031826677860, 0.000004594780305705, 0.000005886220575305, 0.000006878033995645, 0.000007554995005623, 0.000007914466875845, 0.000007965650064675, 0.000007728435880102, 0.000007231934716903, 0.000006512756173231, 0.000005613122895949, 0.000004578901096601, 0.000003457628489583, 0.000002296615219305, 0.000001141185552533, 0.000000033118183302, -0.000000990668545558, -0.000001899152803076, -0.000002667946210802, -0.000003279724008567, -0.000003724353373815, -0.000003998736284580, -0.000004106393367485, -0.000004056823505075, -0.000003864680371659, -0.000003548811395079, -0.000003131206866384, -0.000002635907089885, -0.000002087913711897, -0.000001512147886406, -0.000000932492985725, -0.000000370953442845, 0.000000153045653294, 0.000000623201057861, 0.000001026706448750, 0.000001354458044511, 0.000001601095747237, 0.000001764891111188, 0.000001847498832724, 0.000001853592772907, 0.000001790410657756, 0.000001667233505382, 0.000001494826511430, 0.000001284867642241, 0.000001049388641653, 0.000000800250692844, 0.000000548673760673, 0.000000304834862491, 0.000000077546377014, -0.000000125978796206, -0.000000300272674786, -0.000000441669721214, -0.000000548281621807, -0.000000619897641839, -0.000000657821438861, -0.000000664657100282, -0.000000644058349094, -0.000000600455333568, -0.000000538773213853, -0.000000464155939282, -0.000000381707256690, -0.000000296259201847, -0.000000212176215381, -0.000000133200709942, -0.000000062343516559, 0.0 }; -void decompressResamplerMQ(const double y[701], float *yi) -{ - double breaks[701]; - double coefs[2800]; - int32_t k; - double s[701]; - double dx[700]; - double dvdf[700]; - double r, dzzdx, dzdxdx; - for (k = 0; k < 700; k++) - { - r = 0.0014285714285714286 * ((double)k + 1.0) - 0.0014285714285714286 * (double)k; - dx[k] = r; - dvdf[k] = (y[k + 1] - y[k]) / r; - } - s[0] = ((dx[0] + 0.0057142857142857143) * dx[1] * dvdf[0] + dx[0] * dx[0] * dvdf[1]) / 0.0028571428571428571; - s[700] = ((dx[699] + 0.0057142857142857828) * dx[698] * dvdf[699] + dx[699] * dx[699] * dvdf[698]) / 0.0028571428571428914; - breaks[0] = dx[1]; - breaks[700] = dx[698]; - for (k = 0; k < 699; k++) - { - r = dx[k + 1]; - s[k + 1] = 3.0 * (r * dvdf[k] + dx[k] * dvdf[k + 1]); - breaks[k + 1] = 2.0 * (r + dx[k]); - } - r = dx[1] / breaks[0]; - breaks[1] -= r * 0.0028571428571428571; - s[1] -= r * s[0]; - for (k = 0; k < 698; k++) - { - r = dx[k + 2] / breaks[k + 1]; - breaks[k + 2] -= r * dx[k]; - s[k + 2] -= r * s[k + 1]; - } - r = 0.0028571428571428914 / breaks[699]; - breaks[700] -= r * dx[698]; - s[700] -= r * s[699]; - s[700] /= breaks[700]; - for (k = 698; k >= 0; k--) - s[k + 1] = (s[k + 1] - dx[k] * s[k + 2]) / breaks[k + 1]; - s[0] = (s[0] - 0.0028571428571428571 * s[1]) / breaks[0]; - for (k = 0; k < 701; k++) - breaks[k] = 0.0014285714285714286 * (double)k; - for (k = 0; k < 700; k++) - { - r = 1.0 / dx[k]; - dzzdx = (dvdf[k] - s[k]) * r; - dzdxdx = (s[k + 1] - dvdf[k]) * r; - coefs[k] = (dzdxdx - dzzdx) * r; - coefs[k + 700] = 2.0 * dzzdx - dzdxdx; - coefs[k + 1400] = s[k]; - coefs[k + 2100] = y[k]; - } - double d = 1.0 / 22437.0; - int32_t low_i, low_ip1, high_i, mid_i; - for (k = 0; k < 22438; k++) - { - low_i = 0; - low_ip1 = 2; - high_i = 701; - r = k * d; - while (high_i > low_ip1) - { - mid_i = ((low_i + high_i) + 1) >> 1; - if (r >= breaks[mid_i - 1]) - { - low_i = mid_i - 1; - low_ip1 = mid_i + 1; - } - else - high_i = mid_i; - } - double xloc = r - breaks[low_i]; - yi[k] = xloc * (xloc * (xloc * coefs[low_i] + coefs[low_i + 700]) + coefs[low_i + 1400]) + coefs[low_i + 2100]; - } -} void reverse(float *arr, int32_t start, int32_t end) { while (start < end) @@ -402,18 +324,14 @@ void circshift(float *x, int n, int k) ierper pch1, pch2, pch3; __attribute__((constructor)) static void initialize(void) { - if (decompressedCoefficients) - free(decompressedCoefficients); - decompressedCoefficients = (float*)malloc(22438 * sizeof(float)); - decompressResamplerMQ(compressedCoeffMQ, decompressedCoefficients); + precompute_lpfcoeff(); initIerper(&pch1, NUMPTS + 2); initIerper(&pch2, NUMPTS + 2); initIerper(&pch3, NUMPTS_DRS + 2); } __attribute__((destructor)) static void destruction(void) { - free(decompressedCoefficients); - decompressedCoefficients = 0; + clean_lpfcoeff(); freeIerper(&pch1); freeIerper(&pch2); freeIerper(&pch3); @@ -492,7 +410,7 @@ JNIEXPORT jfloatArray JNICALL Java_james_dsp_activity_JdspImpResToolbox_ReadImpu if (strlen(mIRFileName) <= 0) return 0; unsigned int channels; drwav_uint64 frameCount; - float *pFrameBuffer = loadAudioFile(mIRFileName, targetSampleRate, &channels, &frameCount, 1); + float *pFrameBuffer = loadAudioFile(mIRFileName, targetSampleRate, &channels, &frameCount, SRC_SINC_BEST_QUALITY); if (channels == 0 || channels == 3 || channels > 4) { free(pFrameBuffer); @@ -623,7 +541,7 @@ JNIEXPORT jstring JNICALL Java_james_dsp_activity_JdspImpResToolbox_OfflineAudio snprintf(filenameIR, needed, "%s%s", jnipath, mIRFileName); unsigned int channels; drwav_uint64 frameCount; - float *pFrameBuffer = loadAudioFile(filenameIR, targetSampleRate, &channels, &frameCount, 0); + float *pFrameBuffer = loadAudioFile(filenameIR, targetSampleRate, &channels, &frameCount, SRC_SINC_BEST_QUALITY); free(filenameIR); if (!pFrameBuffer) { diff --git a/libjamesdsp/subtree/Main/DSPManager/project.properties b/libjamesdsp/subtree/Main/DSPManager/project.properties index 0fabc5d1..a78cc3e3 100644 --- a/libjamesdsp/subtree/Main/DSPManager/project.properties +++ b/libjamesdsp/subtree/Main/DSPManager/project.properties @@ -11,6 +11,6 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-28 +target=android-29 proguard.config=proguard.txt android.library.reference.1=../../../appcompatSupport diff --git a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rCN/arrays.xml b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rCN/arrays.xml index a067c97e..7fd927a8 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rCN/arrays.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rCN/arrays.xml @@ -17,9 +17,10 @@ 极高 - 均匀(短时傅里叶) - 多解析率(连续小波) - 多解析率(时域) + 均匀(降采样短时傅里叶) + 多解析率(连续小波不完整对偶帧) + 伪多解析率(降采样帧) + 伪多解析率(时域零延时) 最小相位FIR diff --git a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rCN/strings.xml b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rCN/strings.xml index 9b6a4b1c..a1c09c22 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rCN/strings.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rCN/strings.xml @@ -85,7 +85,7 @@ 请先启用全域模式或者惯用模式来注册DSP,以便从音讯DSP中获取采样率 载入冲激响应失败\n请选择正确冲激响应档案 冲激响应档案%1$s的采样率%2$d与DSP模组采样率%3$d不吻合\n目前正使用快速重采样器\n预先使用离线重采样器可改善冲激响应质量。 - 缓冲区大小:%1$s\n动态容器容量:%2$d\n采样率:%3$d + 缓冲区大小:%1$s\n动态容器容量:%2$d 成功载入冲激响应:%1$s\n声道:%2$s\n每声道样本总数:%3$d\n截短后的每声道样本总数:%4$d 压限器阈值[-60 到 -0.1 dB] 压限器时间常数[1.5 到 500 ms] diff --git a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rHK/arrays.xml b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rHK/arrays.xml index 7d9412bb..d6cf79e4 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rHK/arrays.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rHK/arrays.xml @@ -17,9 +17,10 @@ 極高 - 均勻(短時傅立葉) - 多解析率(連續小波) - 多解析率(時域) + 均勻(降採樣短時傅立葉) + 多解析率(連續小波不完整對偶幀) + 偽多解析率(降採樣幀) + 偽多解析率(時域零延時) 開啟 diff --git a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rHK/strings.xml b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rHK/strings.xml index 14419b9f..296dae9d 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rHK/strings.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rHK/strings.xml @@ -85,7 +85,7 @@ 請先啟用全域模式或者慣用模式來註冊DSP,以便從音訊DSP中獲取採樣率 載入脈衝響應失敗\n請選擇正確脈衝響應檔案 脈衝響應檔案%1$s的採樣率%2$d與DSP模組採樣率%3$d不吻合\n目前正使用快速重採樣器\n預先使用離線重採樣器可改善脈衝響應質量。 - 緩衝區大小:%1$s\n動態容器容量:%2$d\n採樣率:%3$d + 緩衝區大小:%1$s\n動態容器容量:%2$d 成功載入脈衝響應:%1$s\n聲道:%2$s\n每聲道樣本總數:%3$d\n截短後的每聲道樣本總數:%4$d 壓限器閾值[-60 到 -0.1 dB] 壓限器時間常數[1.5 到 500 ms] diff --git a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rTW/arrays.xml b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rTW/arrays.xml index 7d9412bb..d6cf79e4 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rTW/arrays.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rTW/arrays.xml @@ -17,9 +17,10 @@ 極高 - 均勻(短時傅立葉) - 多解析率(連續小波) - 多解析率(時域) + 均勻(降採樣短時傅立葉) + 多解析率(連續小波不完整對偶幀) + 偽多解析率(降採樣幀) + 偽多解析率(時域零延時) 開啟 diff --git a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rTW/strings.xml b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rTW/strings.xml index 14419b9f..296dae9d 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rTW/strings.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/values-zh-rTW/strings.xml @@ -85,7 +85,7 @@ 請先啟用全域模式或者慣用模式來註冊DSP,以便從音訊DSP中獲取採樣率 載入脈衝響應失敗\n請選擇正確脈衝響應檔案 脈衝響應檔案%1$s的採樣率%2$d與DSP模組採樣率%3$d不吻合\n目前正使用快速重採樣器\n預先使用離線重採樣器可改善脈衝響應質量。 - 緩衝區大小:%1$s\n動態容器容量:%2$d\n採樣率:%3$d + 緩衝區大小:%1$s\n動態容器容量:%2$d 成功載入脈衝響應:%1$s\n聲道:%2$s\n每聲道樣本總數:%3$d\n截短後的每聲道樣本總數:%4$d 壓限器閾值[-60 到 -0.1 dB] 壓限器時間常數[1.5 到 500 ms] diff --git a/libjamesdsp/subtree/Main/DSPManager/res/values/arrays.xml b/libjamesdsp/subtree/Main/DSPManager/res/values/arrays.xml index 686c51c1..daf72417 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/values/arrays.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/values/arrays.xml @@ -63,14 +63,16 @@ 4 - Uniform(Short time Fourier) - Multiresolution(Continuous wavelet) - Multiresolution(Time domain) + Uniform(Short time Fourier transform) + Multiresolution(Continuous wavelet incomplete dual frame) + Pseudo multiresolution(Undersampling frame) + Pseudo multiresolution(Time domain, zero latency) 0 1 2 + 3 @@ -93,6 +95,16 @@ 18 + + @string/eq_preset_flat + @string/eq_preset_custom + + + + 95.0;200.0;400.0;800.0;1600.0;3400.0;7500.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0 + custom + + @string/eq_preset_flat @string/eq_preset_custom @@ -101,7 +113,6 @@ 25.0;40.0;63.0;100.0;160.0;250.0;400.0;630.0;1000.0;1600.0;2500.0;4000.0;6300.0;10000.0;16000.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0 custom - diff --git a/libjamesdsp/subtree/Main/DSPManager/res/values/strings.xml b/libjamesdsp/subtree/Main/DSPManager/res/values/strings.xml index f71703de..ec533f6c 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/values/strings.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/values/strings.xml @@ -83,7 +83,7 @@ Please first register audio engine by enabling global effect or open a music player if using conventional mode in order to retrive sample rate from audio engine Load impulse failed\nPlease choose right impulse response file! Impulse response %1$s sample rate (%2$d) is not matching with driver sample rate(%3$d)\nWill use low quality resampler to resample…\nUse Offline Resampler for higher qualtiy resampling! - Buffer len: %1$s\nAllocated block size: %2$d\nSample rate: %3$d + Buffer len: %1$s\nAllocated block size: %2$d Impulse response %1$s loaded\nChannel info:%2$s\nSamples per channel:%3$d\nSamples per channel(Truncated):%4$d Limiter threshold [-60 – -0.1 dB] Limiter release [1.5 – 500 ms] diff --git a/libjamesdsp/subtree/Main/DSPManager/res/xml/bluetooth_preferences.xml b/libjamesdsp/subtree/Main/DSPManager/res/xml/bluetooth_preferences.xml index 255cbdc0..e351f2b1 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/xml/bluetooth_preferences.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/xml/bluetooth_preferences.xml @@ -58,12 +58,12 @@ android:entryValues="@array/compression_tfresolution_values" android:title="@string/dialog_compression_tfresolution" /> + android:entryValues="@array/compander_preset_values" /> diff --git a/libjamesdsp/subtree/Main/DSPManager/res/xml/headset_preferences.xml b/libjamesdsp/subtree/Main/DSPManager/res/xml/headset_preferences.xml index 255cbdc0..e351f2b1 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/xml/headset_preferences.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/xml/headset_preferences.xml @@ -58,12 +58,12 @@ android:entryValues="@array/compression_tfresolution_values" android:title="@string/dialog_compression_tfresolution" /> + android:entryValues="@array/compander_preset_values" /> diff --git a/libjamesdsp/subtree/Main/DSPManager/res/xml/speaker_preferences.xml b/libjamesdsp/subtree/Main/DSPManager/res/xml/speaker_preferences.xml index 255cbdc0..e351f2b1 100644 --- a/libjamesdsp/subtree/Main/DSPManager/res/xml/speaker_preferences.xml +++ b/libjamesdsp/subtree/Main/DSPManager/res/xml/speaker_preferences.xml @@ -58,12 +58,12 @@ android:entryValues="@array/compression_tfresolution_values" android:title="@string/dialog_compression_tfresolution" /> + android:entryValues="@array/compander_preset_values" /> diff --git a/libjamesdsp/subtree/Main/DSPManager/src/james/dsp/service/HeadsetService.java b/libjamesdsp/subtree/Main/DSPManager/src/james/dsp/service/HeadsetService.java index 7ec94ab1..e279e79a 100644 --- a/libjamesdsp/subtree/Main/DSPManager/src/james/dsp/service/HeadsetService.java +++ b/libjamesdsp/subtree/Main/DSPManager/src/james/dsp/service/HeadsetService.java @@ -761,7 +761,7 @@ private void updateDsp(SharedPreferences preferences, JDSPModule session, boolea } float timeConstant = Float.valueOf(preferences.getString("dsp.compression.timeconstant", "0.22")); float granularity = Float.valueOf(preferences.getString("dsp.compression.granularity", "4")); - float tfresolution = Float.valueOf(preferences.getString("dsp.compression.tfresolution", "1")); + float tfresolution = Float.valueOf(preferences.getString("dsp.compression.tfresolution", "0")); float compConfig[] = new float[]{ timeConstant, granularity, tfresolution }; float sendAry[] = mergeFloatArray(compConfig, compLevels); //Log.i(DSPManager.TAG, "Compander: " + Arrays.toString(compLevels)); @@ -954,7 +954,7 @@ private void updateDsp(SharedPreferences preferences, JDSPModule session, boolea session.setParameterShort(session.JamesDSP, 10004, (short)1); // Notify send array completed and resize array in native side if (DSPManager.devMsgDisplay) { - Toast.makeText(HeadsetService.this, getString(R.string.basicinfo, dspBufferLen, dspAllocatedBlockLen, dspModuleSamplingRate), Toast.LENGTH_SHORT).show(); + Toast.makeText(HeadsetService.this, getString(R.string.basicinfo, dspBufferLen, dspAllocatedBlockLen), Toast.LENGTH_SHORT).show(); if (impinfo[0] == 1) Toast.makeText(HeadsetService.this, getString(R.string.convolversuccess, mConvIRFileName, getString(R.string.mono_conv), impinfo[1], (int)impulseCutted), Toast.LENGTH_SHORT).show(); else if (impinfo[0] == 2) diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/Android.mk b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/Android.mk index a6db4927..d3b43bae 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/Android.mk +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/Android.mk @@ -26,6 +26,7 @@ LOCAL_SRC_FILES := \ jdsp/Effects/arbEqConv.c \ jdsp/Effects/eel2/numericSys/libsamplerate/samplerate.c \ jdsp/Effects/eel2/numericSys/libsamplerate/src_sinc.c \ + jdsp/Effects/eel2/numericSys/libsamplerate/src_linear.c \ jdsp/Effects/eel2/numericSys/FilterDesign/generalFdesign.c \ jdsp/Effects/eel2/numericSys/FilterDesign/cos_fib_paraunitary.c \ jdsp/Effects/eel2/numericSys/FilterDesign/polyphaseFilterbank.c \ @@ -41,6 +42,44 @@ LOCAL_SRC_FILES := \ jdsp/Effects/eel2/numericSys/cpoly.c \ jdsp/Effects/eel2/numericSys/MersenneTwister.c \ jdsp/Effects/eel2/numericSys/quadprog.c \ + jdsp/Effects/eel2/numericSys/HPFloat/atox.c \ + jdsp/Effects/eel2/numericSys/HPFloat/constant.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxaop.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxbasic.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxconstant.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxconvf.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxexp.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxhypb.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxidiv.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxpow.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxprcmp.c \ + jdsp/Effects/eel2/numericSys/HPFloat/cxtrig.c \ + jdsp/Effects/eel2/numericSys/HPFloat/hpaconf.c \ + jdsp/Effects/eel2/numericSys/HPFloat/prcxpr.c \ + jdsp/Effects/eel2/numericSys/HPFloat/print.c \ + jdsp/Effects/eel2/numericSys/HPFloat/prxpr.c \ + jdsp/Effects/eel2/numericSys/HPFloat/sfmod.c \ + jdsp/Effects/eel2/numericSys/HPFloat/shift.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xadd.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xchcof.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xdiv.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xevtch.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xexp.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xfmod.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xfrac.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xhypb.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xivhypb.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xivtrg.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xlog.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xmul.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xneg.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xprcmp.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xpwr.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xsigerr.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xsqrt.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xtodbl.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xtoflt.c \ + jdsp/Effects/eel2/numericSys/HPFloat/xtrig.c \ jdsp/Effects/eel2/s_str.c \ jdsp/Effects/eel2/fft.c \ jdsp/Effects/eel2/nseel-compiler.c \ @@ -52,17 +91,17 @@ LOCAL_SRC_FILES := \ # terminator LOCAL_LDLIBS := -llog ifeq ($(TARGET_ARCH_ABI), armeabi-v7a) -LOCAL_CPPFLAGS += -Wall -Wextra -ffunction-sections -fdata-sections -Ofast -march=armv7-a -mfpu=neon -ftree-vectorize -fvisibility=hidden #-DDEBUG -LOCAL_CFLAGS += -Wall -Wextra -ffunction-sections -fdata-sections -Ofast -march=armv7-a -mfpu=neon -ftree-vectorize -fvisibility=hidden #-DDEBUG +LOCAL_CPPFLAGS += -Wall -Wextra -ffunction-sections -fdata-sections -Ofast -march=armv7-a -mfpu=neon -ftree-vectorize -fvisibility=hidden -DJAMESDSP_REFERENCE_IMPL #-DDEBUG +LOCAL_CFLAGS += -Wall -Wextra -ffunction-sections -fdata-sections -Ofast -march=armv7-a -mfpu=neon -ftree-vectorize -fvisibility=hidden -DJAMESDSP_REFERENCE_IMPL #-DDEBUG else ifeq ($(TARGET_ARCH_ABI), arm64-v8a) -LOCAL_CPPFLAGS += -Wall -Wextra -ffunction-sections -fdata-sections -Ofast -march=armv8-a -mfpu=neon -ftree-vectorize -fvisibility=hidden #-DDEBUG -LOCAL_CFLAGS += -Wall -Wextra -ffunction-sections -fdata-sections -Ofast -march=armv8-a -mfpu=neon -ftree-vectorize -fvisibility=hidden #-DDEBUG +LOCAL_CPPFLAGS += -Wall -Wextra -ffunction-sections -fdata-sections -Ofast -march=armv8-a -mfpu=neon -ftree-vectorize -fvisibility=hidden -DJAMESDSP_REFERENCE_IMPL #-DDEBUG +LOCAL_CFLAGS += -Wall -Wextra -ffunction-sections -fdata-sections -Ofast -march=armv8-a -mfpu=neon -ftree-vectorize -fvisibility=hidden -DJAMESDSP_REFERENCE_IMPL #-DDEBUG else ifeq ($(TARGET_ARCH_ABI), x86) -LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections -Ofast -ftree-vectorize -fvisibility=hidden #-DDEBUG -LOCAL_CFLAGS += -ffunction-sections -fdata-sections -Ofast -ftree-vectorize -fvisibility=hidden #-DDEBUG +LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections -Ofast -ftree-vectorize -fvisibility=hidden -DJAMESDSP_REFERENCE_IMPL #-DDEBUG +LOCAL_CFLAGS += -ffunction-sections -fdata-sections -Ofast -ftree-vectorize -fvisibility=hidden -DJAMESDSP_REFERENCE_IMPL #-DDEBUG else ifeq ($(TARGET_ARCH_ABI), armeabi) -LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections -Ofast -ftree-vectorize -fvisibility=hidden #-DDEBUG -LOCAL_CFLAGS += -ffunction-sections -fdata-sections -Ofast -ftree-vectorize -fvisibility=hidden #-DDEBUG +LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections -Ofast -ftree-vectorize -fvisibility=hidden -DJAMESDSP_REFERENCE_IMPL #-DDEBUG +LOCAL_CFLAGS += -ffunction-sections -fdata-sections -Ofast -ftree-vectorize -fvisibility=hidden -DJAMESDSP_REFERENCE_IMPL #-DDEBUG endif LOCAL_LDFLAGS += -Wl,--gc-sections,--exclude-libs,ALL include $(BUILD_SHARED_LIBRARY) \ No newline at end of file diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jamesdsp.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jamesdsp.c index b80ba12b..25378879 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jamesdsp.c +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jamesdsp.c @@ -202,7 +202,7 @@ int32_t EffectDSPMainCommand(EffectDSPMain *dspmain, uint32_t cmdCode, uint32_t replyData->psize = 4; replyData->vsize = 4; replyData->cmd = 20001; - replyData->data = (int32_t)dspmain->jdsp.trueSampleRate; + replyData->data = (int32_t)dspmain->jdsp.fs; *replySize = sizeof(reply1x4_1x4_t); return 0; } @@ -550,7 +550,7 @@ int32_t EffectDSPMainCommand(EffectDSPMain *dspmain, uint32_t cmdCode, uint32_t for (int i = 0; i < 7; i++) LOGI("%1.7lf %1.7lf; ", param[i], param[i + 7]); #endif - CompressorSetParam(&dspmain->jdsp, timeconstant, granularity, tfresolution); + CompressorSetParam(&dspmain->jdsp, timeconstant, granularity, tfresolution, 0); CompressorSetGain(&dspmain->jdsp, param, param + 7, 1); *replyData = 0; return 0; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/crossfeed.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/crossfeed.c index 0d127ba9..7e5155b4 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/crossfeed.c +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/crossfeed.c @@ -10,6 +10,7 @@ void CrossfeedConstructor(JamesDSPLib *jdsp) } void CrossfeedDestructor(JamesDSPLib *jdsp) { + jdsp_lock(jdsp); if (jdsp->advXF.conv[0]) { FFTConvolver2x4x2Free(jdsp->advXF.conv[0]); @@ -29,6 +30,7 @@ void CrossfeedDestructor(JamesDSPLib *jdsp) FFTConvolver2x4x2Free(jdsp->advXF.convLong_S_S); free(jdsp->advXF.convLong_S_S); } + jdsp_unlock(jdsp); } void CrossfeedProcessFFTConvolver2x4x2(JamesDSPLib *jdsp, size_t n) { @@ -40,6 +42,7 @@ void CrossfeedProcessTwoStageFFTConvolver2x4x2(JamesDSPLib *jdsp, size_t n) } void CrossfeedEnable(JamesDSPLib *jdsp, char enable) { + jdsp_lock(jdsp); if (jdsp->crossfeedForceRefresh || !jdsp->advXF.conv[0] || !jdsp->advXF.conv[1] || !jdsp->advXF.conv[2] || !jdsp->advXF.convLong_S_S || !jdsp->advXF.convLong_T_S) { if (jdsp->advXF.conv[0]) @@ -55,11 +58,13 @@ void CrossfeedEnable(JamesDSPLib *jdsp, char enable) { TwoStageFFTConvolver2x4x2Free(jdsp->advXF.convLong_T_S); free(jdsp->advXF.convLong_T_S); + jdsp->advXF.convLong_T_S = NULL; } if (jdsp->advXF.convLong_S_S) { FFTConvolver2x4x2Free(jdsp->advXF.convLong_S_S); free(jdsp->advXF.convLong_S_S); + jdsp->advXF.convLong_S_S = NULL; } jdsp->advXF.conv[0] = (FFTConvolver2x4x2 *)malloc(sizeof(FFTConvolver2x4x2)); FFTConvolver2x4x2Init(jdsp->advXF.conv[0]); @@ -96,6 +101,7 @@ void CrossfeedEnable(JamesDSPLib *jdsp, char enable) } if (enable) jdsp->crossfeedEnabled = 1; + jdsp_unlock(jdsp); } void CrossfeedDisable(JamesDSPLib *jdsp) { @@ -135,4 +141,4 @@ void CrossfeedProcess(JamesDSPLib *jdsp, size_t n) FFTConvolver2x4x2Process(jdsp->advXF.conv[jdsp->advXF.mode - 2], jdsp->tmpBuffer[0], jdsp->tmpBuffer[1], jdsp->tmpBuffer[0], jdsp->tmpBuffer[1], (unsigned int)n); else jdsp->advXF.process(jdsp, (unsigned int)n); -} \ No newline at end of file +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/dynamic.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/dynamic.c index 625fa1d6..281acf1d 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/dynamic.c +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/dynamic.c @@ -1,5 +1,10 @@ +#include +#include +#include #include #include +#include "eel2/numericSys/codelet.h" +#include "eel2/ns-eel.h" #include "../jdsp_header.h" void JLimiterSetCoefficients(JamesDSPLib *jdsp, double thresholddB, double msRelease) { @@ -12,13 +17,6 @@ void JLimiterInit(JamesDSPLib *jdsp) { jdsp->limiter.envOverThreshold = 0.0f; } -#include -#include -#include -#include -#include -#include "eel2/numericSys/codelet.h" -#include "eel2/ns-eel.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif @@ -26,61 +24,6 @@ float map(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } -static void getAsymmetricWindow(float *analysisWnd, float *synthesisWnd, int k, int m, int p, double freq_temporal) -{ - int i; - if ((k / m) < 4) - freq_temporal = 1.0f; - if (freq_temporal > 9.0f) - freq_temporal = 9.0f; - memset(synthesisWnd, 0, k * sizeof(float)); - int n = ((k - m) << 1) + 2; - for (i = 0; i < k - m; ++i) - analysisWnd[i] = (float)pow(0.5 * (1.0 - cos(2.0 * M_PI * (i + 1.0) / (double)n)), freq_temporal); - n = (m << 1) + 2; - if (freq_temporal > 1.02) - freq_temporal = 1.02; - for (i = k - m; i < k; ++i) - analysisWnd[i] = (float)pow(sqrt(0.5 * (1.0 - cos(2.0 * M_PI * ((m + i - (k - m)) + 1.0) / (double)n))), freq_temporal); - n = m << 1; - for (i = k - (m << 1); i < k; ++i) - synthesisWnd[i] = (float)(0.5 * (1.0 - cos(2.0 * M_PI * (double)(i - (k - (m << 1))) / (double)n))) / analysisWnd[i]; - // Pre-shift window function - for (i = 0; i < k - p; i++) - synthesisWnd[i] = synthesisWnd[i + p]; -} -unsigned int LLIntegerLog2M(unsigned int v) -{ - unsigned int i = 0; - while (v > 1) - { - ++i; - v >>= 1; - } - return i; -} -unsigned LLRevBitsM(unsigned int x, unsigned int bits) -{ - unsigned int y = 0; - while (bits--) - { - y = (y + y) + (x & 1); - x >>= 1; - } - return y; -} -void LLbitReversalTblM(unsigned *dst, unsigned int fftLen) -{ - unsigned int bits = LLIntegerLog2M(fftLen); - for (unsigned int i = 0; i < fftLen; ++i) - dst[i] = LLRevBitsM(i, bits); -} -void LLsinHalfTblFloatM(float *dst, unsigned int fftLen) -{ - const double twopi_over_n = 6.283185307179586476925286766559 / fftLen; - for (int i = 0; i < fftLen >> 1; ++i) - dst[i] = (float)sin(twopi_over_n * i); -} #include "../generalDSP/spectralInterpolatorFloat.h" static size_t choose(float *a, float *b, size_t src1, size_t src2) { @@ -123,7 +66,7 @@ static size_t fast_upper_bound4(float *vec, size_t n, float *value) } return low; } -static float lerp1DNoExtrapo(float val, float *x, float *y, int n) +static inline float lerp1DNoExtrapo(float val, float *x, float *y, int n) { if (val <= x[0]) return y[0]; @@ -132,6 +75,92 @@ static float lerp1DNoExtrapo(float val, float *x, float *y, int n) size_t j = fast_upper_bound4(x, n, &val); return ((val - x[j - 1]) / (x[j] - x[j - 1])) * (y[j] - y[j - 1]) + y[j - 1]; // Interpolation } +void printMatrixFile(char *filename, double *mat, int rows, int cols) +{ + int i, j; + FILE *fp = fopen(filename, "wb"); + for (i = 0; i < rows; i++) + { + for (j = 0; j < cols; j++) + fprintf(fp, "%1.14lf,", mat[i * cols + j]); + fprintf(fp, "\n"); + } + fclose(fp); +} +#ifndef min +#define min(a,b) (((a)<(b))?(a):(b)) +#endif +#ifndef max +#define max(a,b) (((a)>(b))?(a):(b)) +#endif +void gammatoneAP(double fc, double fs, int n, double bwERB, double *bReal, double *bImag, double *aRe, double *aIm, double *delay, double *postGain) +{ + // One ERB value in Hz at this centre frequency + double ERBHz = 24.7 + 0.108 * fc; + // Bandwidth of the filter in Hertz + double bwHz = bwERB * ERBHz; + // This is when the function peaks + *delay = (n - 1.0) / (2.0 * M_PI * bwHz); + double btmp = pow(1.0 - exp(-2.0 * M_PI * bwHz / fs), (double)n); + double tmpRe = -2.0 * M_PI * bwHz / fs; + double tmpIm = -2.0 * M_PI * fc / fs; + double atildeRe, atildeIm; + cplxexp(tmpRe, tmpIm, ãRe, ãIm); + double bRe, bIm; + tmpRe = 0.0; + tmpIm = 2 * M_PI * fc * *delay; + cplxexp(tmpRe, tmpIm, &bRe, &bIm); + bRe = bRe * btmp; + bIm = bIm * btmp; + aRe[0] = 1.0; aIm[0] = 0.0; + for (int j = 1; j < n + 1; j++) + { + aRe[j] = 0.0; + aIm[j] = 0.0; + } + double *tRe = (double *)malloc(n * sizeof(double)); + double *tIm = (double *)malloc(n * sizeof(double)); + // Repeat the pole n times, and expand the polynomial + // a = poly(atilde*ones(1,n)); + for (int j = 0; j < n; j++) + { + for (int i = 0; i < j + 1; i++) + complexMultiplication(atildeRe, atildeIm, aRe[i], aIm[i], &tRe[i], &tIm[i]); + for (int i = 0; i < j + 1; i++) + { + aRe[i + 1] = aRe[i + 1] - tRe[i]; + aIm[i + 1] = aIm[i + 1] - tIm[i]; + } + } + free(tRe); + free(tIm); + double maxV = max(fabs(bRe), fabs(bIm)); + if (maxV < ((double)FLT_EPSILON)) + { + *bReal = bRe / maxV * ((double)FLT_EPSILON); + *bImag = bIm / maxV * ((double)FLT_EPSILON); + *postGain = maxV / ((double)FLT_EPSILON); + } + else + { + *bReal = bRe; + *bImag = bIm; + *postGain = 1.0; + } +} +void gammatoneAPFirstOrder(double fc, double fs, double bwERB, float *bRe, float *aRe, float *aIm) +{ + double bwHz = bwERB * (24.7 + 0.108 * fc); + *bRe = (float)(1.0 - exp(-2.0 * M_PI * bwHz / fs)); + double atildeRe, atildeIm; + cplxexp(-2.0 * M_PI * bwHz / fs, -2.0 * M_PI * fc / fs, ãRe, ãIm); + *aRe = (float)(-atildeRe); + *aIm = (float)(-atildeIm); +} +const float freq4Points[6] = { 0, 200, 1200, 3000, 10000, 24000 }; +const float asnr4Points[6] = { 25, 17, 16, 15, 14, 25 }; +const float wtNPoints[6] = { 0, 15, 23, 28, 40, 70 }; +const float pspri = 0.9; // prior speech probability [0.5] (18) #define MIN(a, b) (((a)<(b))?(a):(b)) #define MAX(a, b) (((a)>(b))?(a):(b)) static float db2mag2(float db) @@ -140,12 +169,7 @@ static float db2mag2(float db) } static float mag2db(float mag) { - // Fix: mag is zero after stopping playback since the input buffer is zeroed. - // This would cause a div-by-zero FPE, so we define a special case for zero. - if(mag == 0) - return -100; - - return 20.0f * log10f(mag); + return 20.0f * log10f(mag + 1e-5f); } static inline float processfftComp(FFTCompander *comp, unsigned int idx, float logIn) { @@ -157,6 +181,751 @@ static inline float processfftComp(FFTCompander *comp, unsigned int idx, float l multBuf = comp->headRoomdB; return db2mag2(multBuf); } +static inline float processfftCompdB(FFTCompander *comp, unsigned int idx, float logIn) +{ + float multBuf = logIn - comp->oldBuf[idx]; + if (multBuf < 0.0f) + multBuf = 0.0f; + multBuf *= comp->DREmult[idx]; + if (multBuf > comp->headRoomdB) + multBuf = comp->headRoomdB; + return multBuf; +} +void getwndDBL(double *wnd, unsigned int m, unsigned int n, char *mode) +{ + unsigned int i; + double x; + if (!strcmp(mode, "hann")) + { + for (i = 0; i < m; i++) + { + x = i / (double)(n - 1); + wnd[i] = (double)(0.5 - 0.5 * cos(2 * M_PI * x)); + } + } + else if (!strcmp(mode, "hamming")) + { + for (i = 0; i < m; i++) + { + x = i / (double)(n - 1); + wnd[i] = (double)(0.54 - 0.46 * cos(2 * M_PI * x)); + } + } + else if (!strcmp(mode, "blackman")) + { + for (i = 0; i < m; i++) + { + x = i / (double)(n - 1); + wnd[i] = (double)(0.42 - 0.5 * cos(2 * M_PI * x) + 0.08 * cos(4 * M_PI * x)); + } + } + else if (!strcmp(mode, "flattop")) + { + double a0 = 0.21557895; + double a1 = 0.41663158; + double a2 = 0.277263158; + double a3 = 0.083578947; + double a4 = 0.006947368; + for (i = 0; i < m; i++) + { + x = i / (double)(n - 1); + wnd[i] = (double)(a0 - a1 * cos(2 * M_PI * x) + a2 * cos(4 * M_PI * x) - a3 * cos(6 * M_PI * x) + a4 * cos(8 * M_PI * x)); + } + } +} +void genWndDBL(double *wnd, unsigned int N, char *type) +{ + unsigned int plus1 = N + 1; + unsigned int half; + unsigned int i; + if (plus1 % 2 == 0) + { + half = plus1 / 2; + getwndDBL(wnd, half, plus1, type); + for (i = 0; i < half - 1; i++) + wnd[i + half] = wnd[half - i - 1]; + } + else + { + half = (plus1 + 1) / 2; + getwndDBL(wnd, half, plus1, type); + for (i = 0; i < half - 2; i++) + wnd[i + half] = wnd[half - i - 2]; + } +} +#include "info.h" +static inline void conjugatePadFilteringDepad(FFTCompander *cm) +{ + unsigned int i; + for (i = 0; i < cm->prepad; ++i) + { + cm->specHannReal[0][cm->prepad - i - 1] = cm->specHannReal[0][cm->prepad + i + 1]; + cm->specHannImag[0][cm->prepad - i - 1] = -cm->specHannImag[0][cm->prepad + i + 1]; + cm->specHannReal[1][cm->prepad - i - 1] = cm->specHannReal[1][cm->prepad + i + 1]; + cm->specHannImag[1][cm->prepad - i - 1] = -cm->specHannImag[1][cm->prepad + i + 1]; + } + for (i = 0; i < cm->pospad - 1; ++i) + { + cm->specHannReal[0][cm->prepad + cm->halfLen + cm->pospad - i - 2] = cm->specHannReal[0][cm->prepad + cm->halfLen - cm->pospad + i]; + cm->specHannImag[0][cm->prepad + cm->halfLen + cm->pospad - i - 2] = -cm->specHannImag[0][cm->prepad + cm->halfLen - cm->pospad + i]; + cm->specHannReal[1][cm->prepad + cm->halfLen + cm->pospad - i - 2] = cm->specHannReal[1][cm->prepad + cm->halfLen - cm->pospad + i]; + cm->specHannImag[1][cm->prepad + cm->halfLen + cm->pospad - i - 2] = -cm->specHannImag[1][cm->prepad + cm->halfLen - cm->pospad + i]; + } + // LTV Gaussian + cplx z1[2], z2[2], o[2], st[2]; + z1[0].real = z1[0].imag = 0; + z2[0].real = z2[0].imag = 0; + z1[1].real = z1[1].imag = 0; + z2[1].real = z2[1].imag = 0; + for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; i++) + { + o[0].real = cm->specHannReal[0][i] - z1[0].real - z2[0].real; + o[0].imag = cm->specHannImag[0][i] - z1[0].imag - z2[0].imag; + st[0].real = cm->gauss_c2[i] * z1[0].real; + st[0].imag = cm->gauss_c2[i] * z1[0].imag; + cm->tmp[0][i].real = cm->gauss_b[i] * o[0].real + 2 * st[0].real + z2[0].real; + cm->tmp[0][i].imag = cm->gauss_b[i] * o[0].imag + 2 * st[0].imag + z2[0].imag; + z2[0].real = z2[0].real + st[0].real; + z2[0].imag = z2[0].imag + st[0].imag; + z1[0].real = z1[0].real + cm->gauss_c1[i] * o[0].real; + z1[0].imag = z1[0].imag + cm->gauss_c1[i] * o[0].imag; + o[1].real = cm->specHannReal[1][i] - z1[1].real - z2[1].real; + o[1].imag = cm->specHannImag[1][i] - z1[1].imag - z2[1].imag; + st[1].real = cm->gauss_c2[i] * z1[1].real; + st[1].imag = cm->gauss_c2[i] * z1[1].imag; + cm->tmp[1][i].real = cm->gauss_b[i] * o[1].real + 2 * st[1].real + z2[1].real; + cm->tmp[1][i].imag = cm->gauss_b[i] * o[1].imag + 2 * st[1].imag + z2[1].imag; + z2[1].real = z2[1].real + st[1].real; + z2[1].imag = z2[1].imag + st[1].imag; + z1[1].real = z1[1].real + cm->gauss_c1[i] * o[1].real; + z1[1].imag = z1[1].imag + cm->gauss_c1[i] * o[1].imag; + } + z1[0].real = z1[0].imag = 0; + z2[0].real = z2[0].imag = 0; + z1[1].real = z1[1].imag = 0; + z2[1].real = z2[1].imag = 0; + for (i = cm->prepad + cm->halfLen + cm->pospad - 1; i-- > 0; ) + { + o[0].real = cm->tmp[0][i].real - z1[0].real - z2[0].real; + o[0].imag = cm->tmp[0][i].imag - z1[0].imag - z2[0].imag; + st[0].real = cm->gauss_c2[i] * z1[0].real; + st[0].imag = cm->gauss_c2[i] * z1[0].imag; + cm->specHannReal[0][i] = cm->gauss_b[i] * o[0].real + 2 * st[0].real + z2[0].real; + cm->specHannImag[0][i] = cm->gauss_b[i] * o[0].imag + 2 * st[0].imag + z2[0].imag; + z2[0].real = z2[0].real + st[0].real; + z2[0].imag = z2[0].imag + st[0].imag; + z1[0].real = z1[0].real + cm->gauss_c1[i] * o[0].real; + z1[0].imag = z1[0].imag + cm->gauss_c1[i] * o[0].imag; + o[1].real = cm->tmp[1][i].real - z1[1].real - z2[1].real; + o[1].imag = cm->tmp[1][i].imag - z1[1].imag - z2[1].imag; + st[1].real = cm->gauss_c2[i] * z1[1].real; + st[1].imag = cm->gauss_c2[i] * z1[1].imag; + cm->specHannReal[1][i] = cm->gauss_b[i] * o[1].real + 2 * st[1].real + z2[1].real; + cm->specHannImag[1][i] = cm->gauss_b[i] * o[1].imag + 2 * st[1].imag + z2[1].imag; + z2[1].real = z2[1].real + st[1].real; + z2[1].imag = z2[1].imag + st[1].imag; + z1[1].real = z1[1].real + cm->gauss_c1[i] * o[1].real; + z1[1].imag = z1[1].imag + cm->gauss_c1[i] * o[1].imag; + } + //for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; ++i) + // printf("%d %1.14lf %1.14lf\n", i + 1, cm->specHannReal[i], cm->specHannImag[i]); + for (i = cm->prepad; i < cm->prepad + cm->halfLen; ++i) + { + cm->specHannReal[0][i - cm->prepad] = cm->specHannReal[0][i] * cm->corrF[i - cm->prepad]; + cm->specHannImag[0][i - cm->prepad] = cm->specHannImag[0][i] * cm->corrF[i - cm->prepad]; + cm->specHannReal[1][i - cm->prepad] = cm->specHannReal[1][i] * cm->corrF[i - cm->prepad]; + cm->specHannImag[1][i - cm->prepad] = cm->specHannImag[1][i] * cm->corrF[i - cm->prepad]; + } + cm->specHannImag[0][0] = cm->specHannImag[0][cm->halfLen - 1] = 0; + cm->specHannImag[1][0] = cm->specHannImag[1][cm->halfLen - 1] = 0; +} +FILE *dbg = 0; +//int ifa = 0; +void CWTFrameInversion(FFTCompander *cm) +{ + //ifa++; + unsigned int i, j; + // Forward transform + for (i = 0; i < cm->fftLen; ++i) + { + const unsigned int k = (i + cm->mInputPos) & cm->minus_fftLen; + //fwrite(&cm->mInput[0][k], sizeof(float), 1, dbg); + cm->fftBuf[0][cm->bitrevfftshift[i]] = cm->mInput[0][k]; + cm->fftBuf[1][cm->bitrevfftshift[i]] = cm->mInput[1][k]; + } + cm->fft(cm->fftBuf[0], cm->mSineTab); + cm->fft(cm->fftBuf[1], cm->mSineTab); + int symIdx; + for (i = 1; i < cm->halfLen; i++) + { + symIdx = cm->fftLen - i; + cm->real[0][i] = cm->fftBuf[0][i] + cm->fftBuf[0][symIdx]; + cm->imag[0][i] = -(cm->fftBuf[0][i] - cm->fftBuf[0][symIdx]); + cm->real[1][i] = cm->fftBuf[1][i] + cm->fftBuf[1][symIdx]; + cm->imag[1][i] = -(cm->fftBuf[1][i] - cm->fftBuf[1][symIdx]); + } + cm->real[0][0] = cm->fftBuf[0][0] * 2.0f; + cm->imag[0][0] = 0; + cm->real[1][0] = cm->fftBuf[1][0] * 2.0f; + cm->imag[1][0] = 0; + //for (i = 0; i < cm->halfLen; ++i) + // printf("%d %1.14lf %1.14lf\n", i + 1, cm->real[i], cm->imag[i]); + // Hann windowing + cm->specHannReal[0][cm->prepad + 0] = (cm->real[0][0] * 2.0f + cm->real[0][1] + cm->real[0][1]) / 8.0f; // DC + cm->specHannImag[0][cm->prepad + 0] = 0.0; // DC + cm->specHannReal[1][cm->prepad + 0] = (cm->real[1][0] * 2.0f + cm->real[1][1] + cm->real[1][1]) / 8.0f; // DC + cm->specHannImag[1][cm->prepad + 0] = 0.0; // DC + for (i = 1; i < cm->halfLen - 1; i++) + { + cm->specHannReal[0][cm->prepad + i] = (cm->real[0][i] * 2.0f + cm->real[0][i - 1] + cm->real[0][i + 1]) / 8.0f; + cm->specHannImag[0][cm->prepad + i] = (cm->imag[0][i] * 2.0f + cm->imag[0][i - 1] + cm->imag[0][i + 1]) / 8.0f; + cm->specHannReal[1][cm->prepad + i] = (cm->real[1][i] * 2.0f + cm->real[1][i - 1] + cm->real[1][i + 1]) / 8.0f; + cm->specHannImag[1][cm->prepad + i] = (cm->imag[1][i] * 2.0f + cm->imag[1][i - 1] + cm->imag[1][i + 1]) / 8.0f; + } + cm->specHannReal[0][cm->prepad + cm->halfLen - 1] = (cm->real[0][cm->halfLen - 1] * 2.0f + cm->real[0][cm->halfLen - 2] + cm->real[0][cm->halfLen - 2]) / 8.0f; // Nyquist + cm->specHannImag[0][cm->prepad + cm->halfLen - 1] = 0.0f; + cm->specHannReal[1][cm->prepad + cm->halfLen - 1] = (cm->real[1][cm->halfLen - 1] * 2.0f + cm->real[1][cm->halfLen - 2] + cm->real[1][cm->halfLen - 2]) / 8.0f; // Nyquist + cm->specHannImag[1][cm->prepad + cm->halfLen - 1] = 0.0f; + conjugatePadFilteringDepad(cm); + // Spectral analysis + float leftMag, rightMag, mask; + //idxFrame++; + unsigned int specLen = *((unsigned int *)(cm->octaveSmooth)); + float reciprocal = *((float *)(cm->octaveSmooth + sizeof(unsigned int))); + unsigned int lpLen = *((unsigned int *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float))); + float *lv1 = (float *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float)); + float *lv2 = (float *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float) + (lpLen + 3) * sizeof(float)); + if (!cm->noGridDownsampling) + { + for (i = 0; i < cm->procUpTo; i++) + { + float lR = cm->specHannReal[0][i]; + float lI = cm->specHannImag[0][i]; + float rR = cm->specHannReal[1][i]; + float rI = cm->specHannImag[1][i]; + float absV1 = fabsf(lR); + float absV2 = fabsf(lI); + leftMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + absV1 = fabsf(rR); + absV2 = fabsf(rI); + rightMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + cm->mag[i] = (leftMag + rightMag) * 0.5f; + } + ShrinkGridSpectralInterpolator(cm->octaveSmooth, cm->procUpTo, cm->mag, cm->aheight); + for (i = 0; i < cm->smallGridSize; i++) + { + float magNormalized = mag2db(cm->aheight[i]); + cm->oldBuf[i] = cm->oldBuf[i] + cm->fgt_fac * (magNormalized - cm->oldBuf[i]); + // Log conversion + float mask = processfftComp(cm, i, magNormalized); + cm->finalGain[i] = mask; + } + for (i = 0; i < cm->procUpTo; i++) + { + float val = i * reciprocal; + if (val <= lv1[0]) + mask = cm->finalGain[0]; + else if (val >= lv1[lpLen + 3 - 1]) + mask = cm->finalGain[lpLen + 3 - 1]; + else + { + size_t j = fast_upper_bound4(lv1, lpLen + 3, &val); + mask = ((val - lv1[j - 1]) * lv2[j - 1]) * (cm->finalGain[j] - cm->finalGain[j - 1]) + cm->finalGain[j - 1]; + } + cm->specHannReal[0][i] = cm->specHannReal[0][i] * mask; + cm->specHannImag[0][i] = cm->specHannImag[0][i] * mask; + cm->specHannReal[1][i] = cm->specHannReal[1][i] * mask; + cm->specHannImag[1][i] = cm->specHannImag[1][i] * mask; + } + //printf("\n"); + } + else + { + for (i = 0; i < cm->procUpTo; i++) + { + float lR = cm->specHannReal[0][i]; + float lI = cm->specHannImag[0][i]; + float rR = cm->specHannReal[1][i]; + float rI = cm->specHannImag[1][i]; + float absV1 = fabsf(lR); + float absV2 = fabsf(lI); + leftMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + absV1 = fabsf(rR); + absV2 = fabsf(rI); + rightMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + float magNormalized = mag2db((leftMag + rightMag) * 0.5f); + cm->oldBuf[i] = cm->oldBuf[i] + cm->fgt_fac * (magNormalized - cm->oldBuf[i]); + // Log conversion + mask = processfftComp(cm, i, magNormalized); + cm->specHannReal[0][i] = cm->specHannReal[0][i] * mask; + cm->specHannImag[0][i] = cm->specHannImag[0][i] * mask; + cm->specHannReal[1][i] = cm->specHannReal[1][i] * mask; + cm->specHannImag[1][i] = cm->specHannImag[1][i] * mask; + } + } + cm->imag[0][0] = cm->imag[1][0] = 0; + //for (i = 0; i < cm->halfLen; ++i) + // printf("%d %1.14lf %1.14lf\n", i + 1, cm->specHannReal[i], cm->specHannImag[i]); + //fwrite(cm->specHannReal[1], sizeof(float), cm->halfLen, dbg); + //fwrite(cm->specHannImag[1], sizeof(float), cm->halfLen, dbg); + // Inverse transform + cm->real[0][0] = (cm->specHannReal[0][0] * 2.0f + cm->specHannReal[0][1] + cm->specHannReal[0][1]) / 4.0f; // DC + cm->imag[0][0] = 0.0; // DC + cm->real[1][0] = (cm->specHannReal[1][0] * 2.0f + cm->specHannReal[1][1] + cm->specHannReal[1][1]) / 4.0f; // DC + cm->imag[1][0] = 0.0; // DC + for (i = 1; i < cm->halfLen - 1; i++) + { + cm->real[0][i] = (cm->specHannReal[0][i] * 2.0f + cm->specHannReal[0][i - 1] + cm->specHannReal[0][i + 1]) / 4.0f; + cm->imag[0][i] = (cm->specHannImag[0][i] * 2.0f + cm->specHannImag[0][i - 1] + cm->specHannImag[0][i + 1]) / 4.0f; + cm->real[1][i] = (cm->specHannReal[1][i] * 2.0f + cm->specHannReal[1][i - 1] + cm->specHannReal[1][i + 1]) / 4.0f; + cm->imag[1][i] = (cm->specHannImag[1][i] * 2.0f + cm->specHannImag[1][i - 1] + cm->specHannImag[1][i + 1]) / 4.0f; + } + cm->real[0][cm->halfLen - 1] = (cm->specHannReal[0][cm->halfLen - 1] * 2.0f + cm->specHannReal[0][cm->halfLen - 2] + cm->specHannReal[0][cm->halfLen - 2]) / 4.0f; // Nyquist + cm->imag[0][cm->halfLen - 1] = 0.0; + cm->real[1][cm->halfLen - 1] = (cm->specHannReal[1][cm->halfLen - 1] * 2.0f + cm->specHannReal[1][cm->halfLen - 2] + cm->specHannReal[1][cm->halfLen - 2]) / 4.0f; // Nyquist + cm->imag[1][cm->halfLen - 1] = 0.0; + cm->fftBuf[0][0] = cm->real[0][0]; + cm->fftBuf[1][0] = cm->real[1][0]; + for (i = 1; i < cm->halfLen; i++) + { + symIdx = cm->fftLen - i; + unsigned int bitRevFwd = cm->mBitRev[i]; + unsigned int bitRevSym = cm->mBitRev[symIdx]; + cm->fftBuf[0][bitRevFwd] = cm->real[0][i] + (-cm->imag[0][i]); + cm->fftBuf[0][bitRevSym] = cm->real[0][i] - (-cm->imag[0][i]); + cm->fftBuf[1][bitRevFwd] = cm->real[1][i] + (-cm->imag[1][i]); + cm->fftBuf[1][bitRevSym] = cm->real[1][i] - (-cm->imag[1][i]); + } + //for (i = 0; i < cm->halfLen; ++i) + // printf("%d %1.14lf %1.14lf\n", i + 1, cm->real[i], cm->imag[i]); + cm->fft(cm->fftBuf[0], cm->mSineTab); + cm->fft(cm->fftBuf[1], cm->mSineTab); + for (i = 0; i < cm->fftLen; ++i) + { + cm->getbackCorrectedToSpectrum1[0][cm->mBitRev[i]] = cm->fftBuf[0][i] * prec_correctionWnd[i]; + cm->getbackCorrectedToSpectrum1[1][cm->mBitRev[i]] = cm->fftBuf[1][i] * prec_correctionWnd[i]; + } + cm->fft(cm->getbackCorrectedToSpectrum1[0], cm->mSineTab); + cm->fft(cm->getbackCorrectedToSpectrum1[1], cm->mSineTab); + float getbackCorrectedToSpectrum1Re1 = cm->getbackCorrectedToSpectrum1[0][0] / cm->fftLen; + cm->specHannReal[0][cm->prepad + 0] = cm->real[0][0] * prec_wndCorrectionWeightingLF[0] + getbackCorrectedToSpectrum1Re1 * prec_wndCorrectionWeightingHF[0]; + cm->specHannImag[0][cm->prepad + 0] = 0; + float getbackCorrectedToSpectrum1Re2 = cm->getbackCorrectedToSpectrum1[1][0] / cm->fftLen; + cm->specHannReal[1][cm->prepad + 0] = cm->real[1][0] * prec_wndCorrectionWeightingLF[0] + getbackCorrectedToSpectrum1Re2 * prec_wndCorrectionWeightingHF[0]; + cm->specHannImag[1][cm->prepad + 0] = 0; + for (i = 1; i < cm->halfLen; i++) + { + symIdx = cm->fftLen - i; + getbackCorrectedToSpectrum1Re1 = (cm->getbackCorrectedToSpectrum1[0][i] + cm->getbackCorrectedToSpectrum1[0][symIdx]) * cm->scalarGain; + float getbackCorrectedToSpectrum1Im1 = (-(cm->getbackCorrectedToSpectrum1[0][i] - cm->getbackCorrectedToSpectrum1[0][symIdx])) * cm->scalarGain; + cm->specHannReal[0][cm->prepad + i] = cm->real[0][i] * prec_wndCorrectionWeightingLF[i] + getbackCorrectedToSpectrum1Re1 * prec_wndCorrectionWeightingHF[i]; + cm->specHannImag[0][cm->prepad + i] = cm->imag[0][i] * prec_wndCorrectionWeightingLF[i] + getbackCorrectedToSpectrum1Im1 * prec_wndCorrectionWeightingHF[i]; + getbackCorrectedToSpectrum1Re2 = (cm->getbackCorrectedToSpectrum1[1][i] + cm->getbackCorrectedToSpectrum1[1][symIdx]) * cm->scalarGain; + float getbackCorrectedToSpectrum1Im2 = (-(cm->getbackCorrectedToSpectrum1[1][i] - cm->getbackCorrectedToSpectrum1[1][symIdx])) * cm->scalarGain; + cm->specHannReal[1][cm->prepad + i] = cm->real[1][i] * prec_wndCorrectionWeightingLF[i] + getbackCorrectedToSpectrum1Re2 * prec_wndCorrectionWeightingHF[i]; + cm->specHannImag[1][cm->prepad + i] = cm->imag[1][i] * prec_wndCorrectionWeightingLF[i] + getbackCorrectedToSpectrum1Im2 * prec_wndCorrectionWeightingHF[i]; + //printf("%d %1.14lf %1.14lf\n", i + 1, re, im); + } + // Conjugate pad + for (i = 0; i < cm->prepad; ++i) + { + cm->specHannReal[0][cm->prepad - i - 1] = cm->specHannReal[0][cm->prepad + i + 1]; + cm->specHannImag[0][cm->prepad - i - 1] = -cm->specHannImag[0][cm->prepad + i + 1]; + cm->specHannReal[1][cm->prepad - i - 1] = cm->specHannReal[1][cm->prepad + i + 1]; + cm->specHannImag[1][cm->prepad - i - 1] = -cm->specHannImag[1][cm->prepad + i + 1]; + } + for (i = 0; i < cm->pospad - 1; ++i) + { + cm->specHannReal[0][cm->prepad + cm->halfLen + cm->pospad - i - 2] = cm->specHannReal[0][cm->prepad + cm->halfLen - cm->pospad + i]; + cm->specHannImag[0][cm->prepad + cm->halfLen + cm->pospad - i - 2] = -cm->specHannImag[0][cm->prepad + cm->halfLen - cm->pospad + i]; + cm->specHannReal[1][cm->prepad + cm->halfLen + cm->pospad - i - 2] = cm->specHannReal[1][cm->prepad + cm->halfLen - cm->pospad + i]; + cm->specHannImag[1][cm->prepad + cm->halfLen + cm->pospad - i - 2] = -cm->specHannImag[1][cm->prepad + cm->halfLen - cm->pospad + i]; + } + //for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; i++) + // printf("%d %1.14lf %1.14lf\n", i + 1, cm->specHannReal[i], cm->specHannImag[i]); + unsigned int ptrAcc = 0; + for (i = 0; i < cm->halfLen; i++) + { + unsigned int numMultiplications = prec_mtxStrides[i]; + float sumRe[2] = { 0 }; + float sumIm[2] = { 0 }; + for (j = 0; j < numMultiplications; j++) + { + unsigned int readIdx = ptrAcc + j; + sumRe[0] += cm->specHannReal[0][prec_mtxElementPos[readIdx]] * (float)prec_correctionMatrix[readIdx]; + sumIm[0] += cm->specHannImag[0][prec_mtxElementPos[readIdx]] * (float)prec_correctionMatrix[readIdx]; + sumRe[1] += cm->specHannReal[1][prec_mtxElementPos[readIdx]] * (float)prec_correctionMatrix[readIdx]; + sumIm[1] += cm->specHannImag[1][prec_mtxElementPos[readIdx]] * (float)prec_correctionMatrix[readIdx]; + //printf("%d, ", readIdx); + } + cm->real[0][i] = sumRe[0]; + cm->imag[0][i] = sumIm[0]; + cm->real[1][i] = sumRe[1]; + cm->imag[1][i] = sumIm[1]; + ptrAcc += numMultiplications; + } + cm->fftBuf[0][0] = cm->real[0][0] / cm->fftLen; + cm->fftBuf[1][0] = cm->real[1][0] / cm->fftLen; + for (i = 1; i < cm->halfLen; i++) + { + symIdx = cm->fftLen - i; + unsigned int bitRevFwd = cm->mBitRev[i]; + unsigned int bitRevSym = cm->mBitRev[symIdx]; + cm->fftBuf[0][bitRevFwd] = (cm->real[0][i] + (-cm->imag[0][i])) / cm->fftLen; + cm->fftBuf[0][bitRevSym] = (cm->real[0][i] - (-cm->imag[0][i])) / cm->fftLen; + cm->fftBuf[1][bitRevFwd] = (cm->real[1][i] + (-cm->imag[1][i])) / cm->fftLen; + cm->fftBuf[1][bitRevSym] = (cm->real[1][i] - (-cm->imag[1][i])) / cm->fftLen; + } + cm->fft(cm->fftBuf[0], cm->mSineTab); + cm->fft(cm->fftBuf[1], cm->mSineTab); + //fwrite(cm->fftBuf, sizeof(float), cm->fftLen, dbg); + cm->mOutputBufferCount++; + float *outBuffer = cm->mOutputBuffer[cm->mOutputBufferCount - 1]; + unsigned int currentBlockIndex, nextBlockIndex, blockOffset; + for (i = 0; i < cm->ovpLen; ++i) + { + outBuffer[0] = cm->mOverlapStage2dash[0][0][i] + cm->fftBuf[0][i]; + outBuffer[1] = cm->mOverlapStage2dash[1][0][i] + cm->fftBuf[1][i]; + outBuffer += 2; + // overlapping + currentBlockIndex = 0; + nextBlockIndex = 1; + blockOffset = cm->ovpLen; + while (nextBlockIndex < cm->ovpCount - 1) { + cm->mOverlapStage2dash[0][currentBlockIndex][i] = cm->mOverlapStage2dash[0][nextBlockIndex][i] + cm->fftBuf[0][blockOffset + i]; + cm->mOverlapStage2dash[1][currentBlockIndex][i] = cm->mOverlapStage2dash[1][nextBlockIndex][i] + cm->fftBuf[1][blockOffset + i]; + currentBlockIndex++; + nextBlockIndex++; + blockOffset += cm->ovpLen; + } + cm->mOverlapStage2dash[0][currentBlockIndex][i] = cm->fftBuf[0][blockOffset + i]; + cm->mOverlapStage2dash[1][currentBlockIndex][i] = cm->fftBuf[1][blockOffset + i]; + } + cm->mInputSamplesNeeded = cm->ovpLen; +} +void CWTFrameSTFTInversion(FFTCompander *cm) +{ + //ifa++; + unsigned int i, j; + // Forward transform + for (i = 0; i < cm->fftLen; ++i) + { + const unsigned int k = (i + cm->mInputPos) & cm->minus_fftLen; + cm->fftBuf[0][cm->bitrevfftshift[i]] = cm->mInput[0][k] * cm->analysisWnd[i]; + cm->fftBuf[1][cm->bitrevfftshift[i]] = cm->mInput[1][k] * cm->analysisWnd[i]; + } + cm->fft(cm->fftBuf[0], cm->mSineTab); + cm->fft(cm->fftBuf[1], cm->mSineTab); + int symIdx; + for (i = 1; i < cm->halfLen; i++) + { + symIdx = cm->fftLen - i; + cm->real[0][i] = cm->fftBuf[0][i] + cm->fftBuf[0][symIdx]; + cm->imag[0][i] = -(cm->fftBuf[0][i] - cm->fftBuf[0][symIdx]); + cm->real[1][i] = cm->fftBuf[1][i] + cm->fftBuf[1][symIdx]; + cm->imag[1][i] = -(cm->fftBuf[1][i] - cm->fftBuf[1][symIdx]); + } + cm->real[0][0] = cm->fftBuf[0][0] * 2.0f; + cm->imag[0][0] = 0; + cm->real[1][0] = cm->fftBuf[1][0] * 2.0f; + cm->imag[1][0] = 0; + //for (i = 0; i < cm->halfLen; ++i) + // printf("%d %1.14lf %1.14lf\n", i + 1, cm->real[i], cm->imag[i]); + // Hann windowing + memcpy(cm->specHannReal[0] + cm->prepad, cm->real[0], cm->halfLen * sizeof(float)); + memcpy(cm->specHannImag[0] + cm->prepad, cm->imag[0], cm->halfLen * sizeof(float)); + memcpy(cm->specHannReal[1] + cm->prepad, cm->real[1], cm->halfLen * sizeof(float)); + memcpy(cm->specHannImag[1] + cm->prepad, cm->imag[1], cm->halfLen * sizeof(float)); + conjugatePadFilteringDepad(cm); + //fwrite(cm->specHannReal[1], sizeof(float), cm->halfLen, dbg); + //fwrite(cm->specHannImag[1], sizeof(float), cm->halfLen, dbg); + + + // Spectral analysis + float leftMag, rightMag, mask; + unsigned int bitRevFwd, bitRevSym; + //idxFrame++; + unsigned int specLen = *((unsigned int *)(cm->octaveSmooth)); + float reciprocal = *((float *)(cm->octaveSmooth + sizeof(unsigned int))); + unsigned int lpLen = *((unsigned int *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float))); + float *lv1 = (float *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float)); + float *lv2 = (float *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float) + (lpLen + 3) * sizeof(float)); + if (!cm->noGridDownsampling) + { + for (i = 0; i < cm->procUpTo; i++) + { + float lR = cm->specHannReal[0][i]; + float lI = cm->specHannImag[0][i]; + float rR = cm->specHannReal[1][i]; + float rI = cm->specHannImag[1][i]; + float absV1 = fabsf(lR); + float absV2 = fabsf(lI); + leftMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + absV1 = fabsf(rR); + absV2 = fabsf(rI); + rightMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + cm->mag[i] = (leftMag + rightMag) * 0.5f; + } + ShrinkGridSpectralInterpolator(cm->octaveSmooth, cm->procUpTo, cm->mag, cm->aheight); + for (i = 0; i < cm->smallGridSize; i++) + { + float magNormalized = mag2db(cm->aheight[i]); + cm->oldBuf[i] = cm->oldBuf[i] + cm->fgt_fac * (magNormalized - cm->oldBuf[i]); + // Log conversion + float mask = processfftComp(cm, i, magNormalized); + cm->finalGain[i] = mask; + } + for (i = 0; i < cm->procUpTo; i++) + { + float val = i * reciprocal; + if (val <= lv1[0]) + mask = cm->finalGain[0]; + else if (val >= lv1[lpLen + 3 - 1]) + mask = cm->finalGain[lpLen + 3 - 1]; + else + { + size_t j = fast_upper_bound4(lv1, lpLen + 3, &val); + mask = ((val - lv1[j - 1]) * lv2[j - 1]) * (cm->finalGain[j] - cm->finalGain[j - 1]) + cm->finalGain[j - 1]; + } + cm->real[0][i] = cm->real[0][i] * mask; + cm->imag[0][i] = cm->imag[0][i] * mask; + cm->real[1][i] = cm->real[1][i] * mask; + cm->imag[1][i] = cm->imag[1][i] * mask; + } + //printf("\n"); + } + else + { + for (i = 0; i < cm->procUpTo; i++) + { + float lR = cm->specHannReal[0][i]; + float lI = cm->specHannImag[0][i]; + float rR = cm->specHannReal[1][i]; + float rI = cm->specHannImag[1][i]; + float absV1 = fabsf(lR); + float absV2 = fabsf(lI); + leftMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + absV1 = fabsf(rR); + absV2 = fabsf(rI); + rightMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + float magNormalized = mag2db((leftMag + rightMag) * 0.5f); + cm->oldBuf[i] = cm->oldBuf[i] + cm->fgt_fac * (magNormalized - cm->oldBuf[i]); + // Log conversion + mask = processfftComp(cm, i, magNormalized); + cm->real[0][i] = cm->real[0][i] * mask; + cm->imag[0][i] = cm->imag[0][i] * mask; + cm->real[1][i] = cm->real[1][i] * mask; + cm->imag[1][i] = cm->imag[1][i] * mask; + } + } + cm->imag[0][0] = cm->imag[1][0] = 0; + + cm->fftBuf[0][0] = cm->real[0][0]; + cm->fftBuf[1][0] = cm->real[1][0]; + for (i = 1; i < cm->halfLen; i++) + { + symIdx = cm->fftLen - i; + unsigned int bitRevFwd = cm->mBitRev[i]; + unsigned int bitRevSym = cm->mBitRev[symIdx]; + cm->fftBuf[0][bitRevFwd] = (cm->real[0][i] + (-cm->imag[0][i])) * cm->shiftCentre[i]; + cm->fftBuf[0][bitRevSym] = (cm->real[0][i] - (-cm->imag[0][i])) * cm->shiftCentre[i]; + cm->fftBuf[1][bitRevFwd] = (cm->real[1][i] + (-cm->imag[1][i])) * cm->shiftCentre[i]; + cm->fftBuf[1][bitRevSym] = (cm->real[1][i] - (-cm->imag[1][i])) * cm->shiftCentre[i]; + } + cm->fft(cm->fftBuf[0], cm->mSineTab); + cm->fft(cm->fftBuf[1], cm->mSineTab); + for (i = 0; i < cm->ovpLen * 2; i++) + { + cm->fftBuf[0][i] = cm->fftBuf[0][i + (cm->fftLen / 2 - cm->ovpLen)] * cm->synthesisWnd[i]; + cm->fftBuf[1][i] = cm->fftBuf[1][i + (cm->fftLen / 2 - cm->ovpLen)] * cm->synthesisWnd[i]; + } + //fwrite(cm->fftBuf, sizeof(float), cm->ovpLen * 2, dbg); + cm->mOutputBufferCount++; + float *outBuffer = cm->mOutputBuffer[cm->mOutputBufferCount - 1]; + for (i = 0; i < cm->ovpLen; ++i) + { + outBuffer[0] = cm->mOverlapStage2dash[0][0][i] + cm->fftBuf[0][i]; + outBuffer[1] = cm->mOverlapStage2dash[1][0][i] + cm->fftBuf[1][i]; + outBuffer += 2; + // overlapping + cm->mOverlapStage2dash[0][0][i] = cm->fftBuf[0][cm->ovpLen + i]; + cm->mOverlapStage2dash[1][0][i] = cm->fftBuf[1][cm->ovpLen + i]; + } + cm->mInputSamplesNeeded = cm->ovpLen; +} +static inline double fnc1(double x) +{ + return ((606.0 * x * x) / 1087.0 - (3009.0 * x) / 5513.0 + 712.0 / 5411.0) / (x * x - (496.0 * x) / 541.0 + 719.0 / 1034.0); +} +double complexMultiplicationConj(double xReal, double xImag, double yReal, double yImag) +{ + return xReal * yReal - xImag * yImag; +} +void regularSTFT(FFTCompander *cm) +{ + unsigned int i; + // copy to temporary buffer and FHT + for (i = 0; i < cm->fftLen; ++i) + { + const unsigned int k = (i + cm->mInputPos) & cm->minus_fftLen; + const float w = cm->analysisWnd[i]; + cm->mTempLBuffer[cm->mBitRev[i]] = (cm->mInput[0][k] * w); + cm->mTempRBuffer[cm->mBitRev[i]] = (cm->mInput[1][k] * w); + } + cm->fft(cm->mTempLBuffer, cm->mSineTab); + cm->fft(cm->mTempRBuffer, cm->mSineTab); + // Spectral analysis + int symIdx; + float lR = cm->mTempLBuffer[0] * 2.0f; + float rR = cm->mTempRBuffer[0] * 2.0f; + float leftMag, rightMag, mask; + cm->timeDomainOut[0][0] = lR; + cm->timeDomainOut[1][0] = rR; + unsigned int bitRevFwd, bitRevSym; + //idxFrame++; + unsigned int specLen = *((unsigned int *)(cm->octaveSmooth)); + float reciprocal = *((float *)(cm->octaveSmooth + sizeof(unsigned int))); + unsigned int lpLen = *((unsigned int *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float))); + float *lv1 = (float *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float)); + float *lv2 = (float *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float) + (lpLen + 3) * sizeof(float)); + if (!cm->noGridDownsampling) + { + leftMag = fabsf(lR); + rightMag = fabsf(rR); + cm->mag[0] = (leftMag + rightMag) * 0.5f; + for (i = 1; i < cm->procUpTo; i++) + { + symIdx = cm->fftLen - i; + bitRevFwd = cm->mBitRev[i]; + bitRevSym = cm->mBitRev[symIdx]; + lR = cm->mTempLBuffer[i] + cm->mTempLBuffer[symIdx]; + float lI = cm->mTempLBuffer[i] - cm->mTempLBuffer[symIdx]; + rR = cm->mTempRBuffer[i] + cm->mTempRBuffer[symIdx]; + float rI = cm->mTempRBuffer[i] - cm->mTempRBuffer[symIdx]; + float absV1 = fabsf(lR); + float absV2 = fabsf(lI); + leftMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + absV1 = fabsf(rR); + absV2 = fabsf(rI); + rightMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + cm->mag[i] = (leftMag + rightMag) * 0.5f; + } + ShrinkGridSpectralInterpolator(cm->octaveSmooth, cm->procUpTo, cm->mag, cm->aheight); + for (i = 0; i < cm->smallGridSize; i++) + { + float magNormalized = mag2db(cm->aheight[i]); + cm->oldBuf[i] = cm->oldBuf[i] + cm->fgt_fac * (magNormalized - cm->oldBuf[i]); + // Log conversion + float mask = processfftComp(cm, i, magNormalized); + cm->finalGain[i] = mask; + } + for (i = 1; i < cm->procUpTo; i++) + { + symIdx = cm->fftLen - i; + bitRevFwd = cm->mBitRev[i]; + bitRevSym = cm->mBitRev[symIdx]; + float val = i * reciprocal; + if (val <= lv1[0]) + mask = cm->finalGain[0]; + else if (val >= lv1[lpLen + 3 - 1]) + mask = cm->finalGain[lpLen + 3 - 1]; + else + { + size_t j = fast_upper_bound4(lv1, lpLen + 3, &val); + mask = ((val - lv1[j - 1]) * lv2[j - 1]) * (cm->finalGain[j] - cm->finalGain[j - 1]) + cm->finalGain[j - 1]; + } + lR = cm->mTempLBuffer[i] + cm->mTempLBuffer[symIdx]; + float lI = cm->mTempLBuffer[i] - cm->mTempLBuffer[symIdx]; + rR = cm->mTempRBuffer[i] + cm->mTempRBuffer[symIdx]; + float rI = cm->mTempRBuffer[i] - cm->mTempRBuffer[symIdx]; + cm->timeDomainOut[0][bitRevFwd] = (lR + lI) * mask; + cm->timeDomainOut[0][bitRevSym] = (lR - lI) * mask; + cm->timeDomainOut[1][bitRevFwd] = (rR + rI) * mask; + cm->timeDomainOut[1][bitRevSym] = (rR - rI) * mask; + } + //printf("\n"); + } + else + { + leftMag = fabsf(cm->mTempLBuffer[0]); + rightMag = fabsf(cm->mTempRBuffer[0]); + float magNormalized = mag2db((leftMag + rightMag) * 0.5f); + cm->oldBuf[0] = cm->oldBuf[0] + cm->fgt_fac * (magNormalized - cm->oldBuf[0]); + // Log conversion + float mask = processfftComp(cm, 0, magNormalized); + cm->timeDomainOut[0][0] = cm->mTempLBuffer[0] * mask; + cm->timeDomainOut[1][0] = cm->mTempRBuffer[0] * mask; + for (i = 1; i < cm->procUpTo; i++) + { + symIdx = cm->fftLen - i; + bitRevFwd = cm->mBitRev[i]; + bitRevSym = cm->mBitRev[symIdx]; + lR = cm->mTempLBuffer[i] + cm->mTempLBuffer[symIdx]; + float lI = cm->mTempLBuffer[i] - cm->mTempLBuffer[symIdx]; + rR = cm->mTempRBuffer[i] + cm->mTempRBuffer[symIdx]; + float rI = cm->mTempRBuffer[i] - cm->mTempRBuffer[symIdx]; + float absV1 = fabsf(lR); + float absV2 = fabsf(lI); + leftMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + absV1 = fabsf(rR); + absV2 = fabsf(rI); + rightMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); + magNormalized = mag2db((leftMag + rightMag) * 0.5f); + cm->oldBuf[i] = cm->oldBuf[i] + cm->fgt_fac * (magNormalized - cm->oldBuf[i]); + // Log conversion + mask = processfftComp(cm, i, magNormalized); + cm->timeDomainOut[0][bitRevFwd] = (lR + lI) * mask; + cm->timeDomainOut[0][bitRevSym] = (lR - lI) * mask; + cm->timeDomainOut[1][bitRevFwd] = (rR + rI) * mask; + cm->timeDomainOut[1][bitRevSym] = (rR - rI) * mask; + } + } + for (i = cm->procUpTo; i < cm->halfLen; i++) + { + symIdx = cm->fftLen - i; + bitRevFwd = cm->mBitRev[i]; + bitRevSym = cm->mBitRev[symIdx]; + lR = cm->mTempLBuffer[i] + cm->mTempLBuffer[symIdx]; + float lI = cm->mTempLBuffer[i] - cm->mTempLBuffer[symIdx]; + rR = cm->mTempRBuffer[i] + cm->mTempRBuffer[symIdx]; + float rI = cm->mTempRBuffer[i] - cm->mTempRBuffer[symIdx]; + cm->timeDomainOut[0][bitRevFwd] = lR + lI; + cm->timeDomainOut[0][bitRevSym] = lR - lI; + cm->timeDomainOut[1][bitRevFwd] = rR + rI; + cm->timeDomainOut[1][bitRevSym] = rR - rI; + } + // reconstitute left/right channels + cm->fft(cm->timeDomainOut[0], cm->mSineTab); + cm->fft(cm->timeDomainOut[1], cm->mSineTab); + for (i = 0; i < cm->fftLen; i++) + { + cm->timeDomainOut[0][i] = cm->timeDomainOut[0][i] * cm->synthesisWnd[i]; + cm->timeDomainOut[1][i] = cm->timeDomainOut[1][i] * cm->synthesisWnd[i]; + } + cm->mOutputBufferCount++; + float *outBuffer = cm->mOutputBuffer[cm->mOutputBufferCount - 1]; + unsigned int currentBlockIndex, nextBlockIndex, blockOffset; + for (i = 0; i < cm->ovpLen; ++i) + { + outBuffer[0] = cm->mOverlapStage2dash[0][0][i] + cm->timeDomainOut[0][i]; + outBuffer[1] = cm->mOverlapStage2dash[1][0][i] + cm->timeDomainOut[1][i]; + outBuffer += 2; + // overlapping + currentBlockIndex = 0; + nextBlockIndex = 1; + blockOffset = cm->ovpLen; + while (nextBlockIndex < cm->ovpCount - 1) { + cm->mOverlapStage2dash[0][currentBlockIndex][i] = cm->mOverlapStage2dash[0][nextBlockIndex][i] + cm->timeDomainOut[0][blockOffset + i]; + cm->mOverlapStage2dash[1][currentBlockIndex][i] = cm->mOverlapStage2dash[1][nextBlockIndex][i] + cm->timeDomainOut[1][blockOffset + i]; + currentBlockIndex++; + nextBlockIndex++; + blockOffset += cm->ovpLen; + } + cm->mOverlapStage2dash[0][currentBlockIndex][i] = cm->timeDomainOut[0][blockOffset + i]; + cm->mOverlapStage2dash[1][currentBlockIndex][i] = cm->timeDomainOut[1][blockOffset + i]; + } + cm->mInputSamplesNeeded = cm->ovpLen; +} int FFTCompanderProcessSamples(FFTCompander *cm, const float *inLeft, const float *inRight, unsigned int inSampleCount, float *outL, float *outR) { unsigned int outSampleCount, maxOutSampleCount, copyCount; @@ -181,159 +950,7 @@ int FFTCompanderProcessSamples(FFTCompander *cm, const float *inLeft, const floa cm->mInputPos = (cm->mInputPos + copyCount) & cm->minus_fftLen; cm->mInputSamplesNeeded -= copyCount; if (cm->mInputSamplesNeeded == 0) - { - unsigned int i; - // copy to temporary buffer and FHT - for (i = 0; i < cm->fftLen; ++i) - { - const unsigned int k = (i + cm->mInputPos) & cm->minus_fftLen; - const float w = cm->analysisWnd[i]; - cm->mTempLBuffer[cm->mBitRev[i]] = (cm->mInput[0][k] * w); - cm->mTempRBuffer[cm->mBitRev[i]] = (cm->mInput[1][k] * w); - } - cm->fft(cm->mTempLBuffer, cm->mSineTab); - cm->fft(cm->mTempRBuffer, cm->mSineTab); - // Spectral analysis - int symIdx; - float lR = cm->mTempLBuffer[0] * 2.0f; - float rR = cm->mTempRBuffer[0] * 2.0f; - float leftMag, rightMag, currentMagnitude, mask; - cm->timeDomainOut[0][0] = lR; - cm->timeDomainOut[1][0] = rR; - unsigned int bitRevFwd, bitRevSym; - //idxFrame++; - unsigned int specLen = *((unsigned int*)(cm->octaveSmooth)); - float reciprocal = *((float*)(cm->octaveSmooth + sizeof(unsigned int))); - unsigned int lpLen = *((unsigned int*)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float))); - float *lv1 = (float*)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float)); - float *lv2 = (float*)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float) + (lpLen + 3) * sizeof(float)); - if (!cm->noGridDownsampling) - { - leftMag = fabsf(lR); - rightMag = fabsf(rR); - cm->mag[0] = leftMag > rightMag ? leftMag : rightMag; - for (i = 1; i < cm->procUpTo; i++) - { - symIdx = cm->fftLen - i; - bitRevFwd = cm->mBitRev[i]; - bitRevSym = cm->mBitRev[symIdx]; - lR = cm->mTempLBuffer[i] + cm->mTempLBuffer[symIdx]; - float lI = cm->mTempLBuffer[i] - cm->mTempLBuffer[symIdx]; - rR = cm->mTempRBuffer[i] + cm->mTempRBuffer[symIdx]; - float rI = cm->mTempRBuffer[i] - cm->mTempRBuffer[symIdx]; - float absV1 = fabsf(lR); - float absV2 = fabsf(lI); - leftMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); - absV1 = fabsf(rR); - absV2 = fabsf(rI); - rightMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); - currentMagnitude = leftMag > rightMag ? leftMag : rightMag; - cm->mag[i] = currentMagnitude; - } - ShrinkGridSpectralInterpolator(cm->octaveSmooth, cm->procUpTo, cm->mag, cm->aheight); - for (i = 0; i < cm->smallGridSize; i++) - { - float magNormalized = mag2db(cm->aheight[i]); - cm->oldBuf[i] = cm->oldBuf[i] + cm->fgt_fac * (magNormalized - cm->oldBuf[i]); - // Log conversion - float mask = processfftComp(cm, i, magNormalized); - cm->finalGain[i] = mask; - } - for (i = 1; i < cm->procUpTo; i++) - { - symIdx = cm->fftLen - i; - bitRevFwd = cm->mBitRev[i]; - bitRevSym = cm->mBitRev[symIdx]; - float val = i * reciprocal; - if (val <= lv1[0]) - mask = cm->finalGain[0]; - else if (val >= lv1[lpLen + 3 - 1]) - mask = cm->finalGain[lpLen + 3 - 1]; - else - { - size_t j = fast_upper_bound4(lv1, lpLen + 3, &val); - mask = ((val - lv1[j - 1]) * lv2[j - 1]) * (cm->finalGain[j] - cm->finalGain[j - 1]) + cm->finalGain[j - 1]; - } - lR = cm->mTempLBuffer[i] + cm->mTempLBuffer[symIdx]; - float lI = cm->mTempLBuffer[i] - cm->mTempLBuffer[symIdx]; - rR = cm->mTempRBuffer[i] + cm->mTempRBuffer[symIdx]; - float rI = cm->mTempRBuffer[i] - cm->mTempRBuffer[symIdx]; - cm->timeDomainOut[0][bitRevFwd] = (lR + lI) * mask; - cm->timeDomainOut[0][bitRevSym] = (lR - lI) * mask; - cm->timeDomainOut[1][bitRevFwd] = (rR + rI) * mask; - cm->timeDomainOut[1][bitRevSym] = (rR - rI) * mask; - } - //printf("\n"); - } - else - { - leftMag = fabsf(cm->mTempLBuffer[0]); - rightMag = fabsf(cm->mTempRBuffer[0]); - currentMagnitude = leftMag > rightMag ? leftMag : rightMag; - float magNormalized = mag2db(currentMagnitude); - cm->oldBuf[0] = cm->oldBuf[0] + cm->fgt_fac * (magNormalized - cm->oldBuf[0]); - // Log conversion - float mask = processfftComp(cm, 0, magNormalized); - cm->timeDomainOut[0][0] = cm->mTempLBuffer[0] * mask; - cm->timeDomainOut[1][0] = cm->mTempRBuffer[0] * mask; - for (i = 1; i < cm->procUpTo; i++) - { - symIdx = cm->fftLen - i; - bitRevFwd = cm->mBitRev[i]; - bitRevSym = cm->mBitRev[symIdx]; - lR = cm->mTempLBuffer[i] + cm->mTempLBuffer[symIdx]; - float lI = cm->mTempLBuffer[i] - cm->mTempLBuffer[symIdx]; - rR = cm->mTempRBuffer[i] + cm->mTempRBuffer[symIdx]; - float rI = cm->mTempRBuffer[i] - cm->mTempRBuffer[symIdx]; - float absV1 = fabsf(lR); - float absV2 = fabsf(lI); - leftMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); - absV1 = fabsf(rR); - absV2 = fabsf(rI); - rightMag = max((127.0f / 128.0f) * max(absV1, absV2) + (3.0f / 16.0f) * min(absV1, absV2), (27.0f / 32.0f) * max(absV1, absV2) + (71.0f / 128.0f) * min(absV1, absV2)); - currentMagnitude = leftMag > rightMag ? leftMag : rightMag; - magNormalized = mag2db(currentMagnitude); - cm->oldBuf[i] = cm->oldBuf[i] + cm->fgt_fac * (magNormalized - cm->oldBuf[i]); - // Log conversion - mask = processfftComp(cm, i, magNormalized); - cm->timeDomainOut[0][bitRevFwd] = (lR + lI) * mask; - cm->timeDomainOut[0][bitRevSym] = (lR - lI) * mask; - cm->timeDomainOut[1][bitRevFwd] = (rR + rI) * mask; - cm->timeDomainOut[1][bitRevSym] = (rR - rI) * mask; - } - } - for (i = cm->procUpTo; i < cm->halfLen; i++) - { - symIdx = cm->fftLen - i; - bitRevFwd = cm->mBitRev[i]; - bitRevSym = cm->mBitRev[symIdx]; - lR = cm->mTempLBuffer[i] + cm->mTempLBuffer[symIdx]; - float lI = cm->mTempLBuffer[i] - cm->mTempLBuffer[symIdx]; - rR = cm->mTempRBuffer[i] + cm->mTempRBuffer[symIdx]; - float rI = cm->mTempRBuffer[i] - cm->mTempRBuffer[symIdx]; - cm->timeDomainOut[0][bitRevFwd] = lR + lI; - cm->timeDomainOut[0][bitRevSym] = lR - lI; - cm->timeDomainOut[1][bitRevFwd] = rR + rI; - cm->timeDomainOut[1][bitRevSym] = rR - rI; - } - // reconstitute left/right channels - cm->fft(cm->timeDomainOut[0], cm->mSineTab); - cm->fft(cm->timeDomainOut[1], cm->mSineTab); - cm->mOutputBufferCount++; - if (cm->mOutputBufferCount > 2) - continue; - float *outBuffer = cm->mOutputBuffer[cm->mOutputBufferCount - 1]; - for (i = 0; i < cm->ovpLen; ++i) - { - outBuffer[0] = cm->mOverlapStage2dash[0][i] + (cm->timeDomainOut[0][i + cm->smpShift] * cm->synthesisWnd[i]); - outBuffer[1] = cm->mOverlapStage2dash[1][i] + (cm->timeDomainOut[1][i + cm->smpShift] * cm->synthesisWnd[i]); - outBuffer += 2; - // overlapping - cm->mOverlapStage2dash[0][i] = (cm->timeDomainOut[0][cm->smpShift + cm->ovpLen + i] * cm->synthesisWnd[i + cm->ovpLen]); - cm->mOverlapStage2dash[1][i] = (cm->timeDomainOut[1][cm->smpShift + cm->ovpLen + i] * cm->synthesisWnd[i + cm->ovpLen]); - } - cm->mInputSamplesNeeded = cm->ovpLen; - } + cm->process(cm); } while ((cm->mOutputBufferCount > 0) && (outSampleCount < maxOutSampleCount)) { float *sampD = cm->mOutputBuffer[0]; @@ -391,19 +1008,114 @@ void FFTCompanderSetavgBW(FFTCompander *cm, double avgBW) cm->noGridDownsampling = 1; } } -void FFTCompanderInit(FFTCompander *cm, float fs) +static inline void filter2(float *Zre, float *Zim, float *bRe, float *aRe, float *aIm, float Xi, float *yRe, float *yIm) { - //memset(cm, 0, sizeof(FFTCompander)); - unsigned int i; - const float oX[10] = { 750, 1500, 3000, 6000, 12000, 24000, 48000, 96000, 192000, 256000 }; - const float oY[10] = { 24, 48, 96, 192, 384, 768, 1536, 3072, 6144, 8192 }; - const float oX2[6] = { 0.0f, 0.25f, 0.4f, 0.5f, 0.75f, 1.0f }; - const float oY2[6] = { 9.0f, 7.0f, 4.5f, 4.0f, 2.0f, 1.0f }; - float frameLen = lerp1DNoExtrapo(fs, oX, oY, 10); - float nextPwr2 = powf(2.0f, ceilf(logf(frameLen) / logf(2.0f))); - float paddingRatio = map(frameLen / nextPwr2, 0.5f, 1.0f, 0.0f, 1.0f); - float wndBeta = lerp1DNoExtrapo(paddingRatio, oX2, oY2, 6); - cm->fftLen = (unsigned int)nextPwr2; + *yRe = *bRe * Xi + *Zre; + *yIm = *Zim; + *Zre = -*aRe * *yRe - -*aIm * *yIm; + *Zim = -*aRe * *yIm + -*aIm * *yRe; +} +void HSHOSVF2nd(double gain, double overallGainDb, float *c1, float *c2, float *d0, float *d1, float *overallGain, double *trigo) +{ + double GB = pow(10.0, ((1.0 / sqrt(2.0)) * gain / 20.0)); + double G = pow(10.0, gain / 20.0); + *overallGain = (float)pow(10.0, overallGainDb / 20.0); + double gR; + if (fabs(gain) < 8.0 * DBL_EPSILON) + gR = 0; + else + gR = (G * G - GB * GB) / (GB * GB - 1); + double ratOrd = sqrt(gR); + double ratRO = sqrt(sqrt(gR)); + double gP1 = sqrt(G); + const double si = 0.70710678118654752440084436210485; + *c1 = (float)(2.0 - 2.0 * (trigo[1] - ratOrd) / (trigo[1] + ratOrd - 2.0 * ratRO * trigo[0] * si)); + *c2 = (float)((ratRO * trigo[3]) / (ratRO * trigo[3] - si * trigo[2])); + *d0 = (float)((ratOrd + G * trigo[1] - 2.0 * gP1 * ratRO * trigo[0] * si) / (trigo[1] + ratOrd - 2.0 * ratRO * trigo[0] * si)); + *d1 = (float)((ratRO * trigo[3] - gP1 * si * trigo[2]) / (ratRO * trigo[3] - si * trigo[2])); +} +void HSHOSVF2ndNoOverallGain(double gain, float *c1, float *c2, float *d0, float *d1, double *trigo) +{ + double GB = pow(10.0, ((1.0 / sqrt(2.0)) * gain / 20.0)); + double G = pow(10.0, gain / 20.0); + double gR; + if (fabs(gain) < 8.0 * DBL_EPSILON) + gR = 0; + else + gR = (G * G - GB * GB) / (GB * GB - 1); + double ratOrd = sqrt(gR); + double ratRO = sqrt(sqrt(gR)); + double gP1 = sqrt(G); + const double si = 0.70710678118654752440084436210485; + *c1 = (float)(2.0 - 2.0 * (trigo[1] - ratOrd) / (trigo[1] + ratOrd - 2.0 * ratRO * trigo[0] * si)); + *c2 = (float)((ratRO * trigo[3]) / (ratRO * trigo[3] - si * trigo[2])); + *d0 = (float)((ratOrd + G * trigo[1] - 2.0 * gP1 * ratRO * trigo[0] * si) / (trigo[1] + ratOrd - 2.0 * ratRO * trigo[0] * si)); + *d1 = (float)((ratRO * trigo[3] - gP1 * si * trigo[2]) / (ratRO * trigo[3] - si * trigo[2])); +} +void HSHOSVF2ndPrecompute(double fs, double fc, double *trigo) +{ + double Dw = M_PI * (fc / fs - 0.5); + double ntD = tan(Dw); + double ntD2 = ntD * ntD; + double stD = sin(Dw); + double ctD = cos(Dw); + trigo[0] = ntD; + trigo[1] = ntD2; + trigo[2] = stD; + trigo[3] = ctD; +} +void LLraisedCosTblFloat(float *dst, int n, int overlapCount) +{ + const double twopi_over_n = 6.283185307179586476925286766559 / n; + const double scalefac = 1.0 / n; + float power = 1.0f; + if (overlapCount == 2) + power = 0.5f; + for (int i = 0; i < n; ++i) + dst[i] = (float)(scalefac * pow(0.5 * (1.0 - cos(twopi_over_n * (i + 0.5))), power)); +} +void LLCreatePostWindowFloat(float *dst, int windowSize, int overlapCount) +{ + const float powerIntegrals[8] = { 1.0f, 1.0f / 2.0f, 3.0f / 8.0f, 5.0f / 16.0f, 35.0f / 128.0f, + 63.0f / 256.0f, 231.0f / 1024.0f, 429.0f / 2048.0f }; + int power = 1; + if (overlapCount == 2) + power = 0; + const float scalefac = (float)windowSize * (powerIntegrals[1] / powerIntegrals[power + 1]); + LLraisedCosTblFloat(dst, windowSize, overlapCount); + for (int i = 0; i < windowSize; ++i) + dst[i] *= scalefac; +} +void FFTCompanderInit(FFTCompander *cm, float fs, int tfresolution, unsigned int reqSynthesisWnd, double HFSamplingLimit) +{ + unsigned int i, j, k; + double oct; + // FFT method + if (tfresolution == 0) // STFT + { + cm->fftLen = 2048; + cm->ovpCount = 8; + cm->process = regularSTFT; + } + else if (tfresolution == 1) // CWT + { + cm->fftLen = 4096; + cm->ovpCount = 8; + oct = 32; + cm->process = CWTFrameInversion; + } + else if (tfresolution == 2) // CWT STFT inverse + { + cm->fftLen = 4096; + cm->ovpCount = 8; + oct = 32; + cm->process = CWTFrameSTFTInversion; + } + else + { + cm->fftLen = 32; + cm->ovpCount = 1; + } if (cm->fftLen == 32) cm->fft = DFT32; else if (cm->fftLen == 64) @@ -423,7 +1135,7 @@ void FFTCompanderInit(FFTCompander *cm, float fs) else cm->fft = DFT8192; cm->minus_fftLen = cm->fftLen - 1; - cm->ovpLen = cm->fftLen / ANALYSIS_OVERLAP_DRS; + cm->ovpLen = cm->fftLen / cm->ovpCount; cm->halfLen = (cm->fftLen >> 1) + 1; cm->smpShift = (cm->fftLen - (cm->ovpLen << 1)); const float desiredProcessFreq = 24000.0f; @@ -432,22 +1144,446 @@ void FFTCompanderInit(FFTCompander *cm, float fs) cm->procUpTo = cm->halfLen; else cm->procUpTo = idx; - LLbitReversalTblM(cm->mBitRev, cm->fftLen); - LLsinHalfTblFloatM(cm->mSineTab, cm->fftLen); + LLbitReversalTbl(cm->mBitRev, cm->fftLen); + fhtsinHalfTblFloat(cm->mSineTab, cm->fftLen); for (i = 0; i < MAX_OUTPUT_BUFFERS_DRS; i++) cm->mOutputBuffer[i] = cm->buffer[i]; cm->mInputSamplesNeeded = cm->ovpLen; cm->mInputPos = 0; cm->mOutputBufferCount = 0; cm->mOutputReadSampleOffset = 0; - getAsymmetricWindow(cm->analysisWnd, cm->synthesisWnd, cm->fftLen, cm->ovpLen, cm->smpShift, wndBeta); - for (i = 0; i < cm->fftLen; i++) - cm->analysisWnd[i] *= (1.0f / cm->fftLen) * 0.5f; - float sum = 0.0f; - for (i = 0; i < cm->fftLen; i++) - sum += cm->analysisWnd[i]; + LLraisedCosTblFloat(cm->analysisWnd, cm->fftLen, cm->ovpCount); + LLCreatePostWindowFloat(cm->synthesisWnd, cm->fftLen, cm->ovpCount); + for (i = 0; i < cm->fftLen; ++i) + cm->synthesisWnd[i] *= 0.5f * (2.0f / (float)cm->ovpCount); FFTCompanderSetavgBW(cm, 1.2); - cm->spectralRate = fs / (float)cm->fftLen * (float)ANALYSIS_OVERLAP_DRS; + cm->spectralRate = fs / (float)cm->fftLen * (float)cm->ovpCount; + for (i = 0; i < HALFWNDLEN_DRS; i++) + cm->oldBuf[i] = -20.0f; + unsigned int NFFTDIV2 = cm->fftLen >> 1; + for (i = 0; i < cm->halfLen; i++) + { + if (i % 2 == 0) + cm->shiftCentre[i] = 1; + else + cm->shiftCentre[i] = -1; + } + // Initialization + for (i = 0; i < cm->halfLen; i++) + cm->corrF[i] = 1.0; + // Copy overlapping buffer to FFT buffer with fftshift + unsigned int *idxfftshift = (unsigned int *)malloc(cm->fftLen * sizeof(unsigned int)); + for (i = 0; i < NFFTDIV2; i++) + idxfftshift[i] = NFFTDIV2 + i; + for (i = NFFTDIV2; i < cm->fftLen; i++) + idxfftshift[i] = i - NFFTDIV2; + for (i = 0; i < cm->fftLen; i++) + cm->bitrevfftshift[i] = cm->mBitRev[idxfftshift[i]]; + unsigned int zp = 1; + // number of points of pre andpost padding used to set initial conditions + cm->prepad = (unsigned int)(cm->fftLen / 102.4); + cm->pospad = (unsigned int)(cm->fftLen / 102.4) + 2; + if (tfresolution > 1 && tfresolution < 3) + { + double *thetas1 = (double *)malloc((cm->prepad + cm->fftLen + cm->pospad - 1) * sizeof(double)); + for (i = 0; i < cm->halfLen + cm->pospad - 1; i++) + thetas1[cm->prepad + i] = i; + thetas1[cm->prepad] = DBL_EPSILON; + for (i = 0; i < cm->prepad; i++) + thetas1[cm->prepad - i - 1] = i + 1; + for (i = 0; i < cm->prepad + cm->halfLen - 1; i++) + thetas1[cm->prepad + cm->halfLen + i] = thetas1[cm->prepad + cm->halfLen - i - 2]; + double *synWnd = (double *)malloc(cm->fftLen * sizeof(double)); + genWndDBL(synWnd, cm->fftLen, "hann"); + double *analysisWnd = (double *)malloc(cm->fftLen * sizeof(double)); + double *b = (double *)malloc((cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(double)); + double *c1 = (double *)malloc((cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(double)); + double *c2 = (double *)malloc((cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(double)); + for (i = 0; i < cm->fftLen; i++) + { + analysisWnd[i] = pow(synWnd[i], 1.0 / reqSynthesisWnd); + cm->analysisWnd[i] = (float)analysisWnd[i]; + } + double *chopedWnd1 = analysisWnd + cm->halfLen - 1; + double *chopedWnd2 = synWnd + cm->halfLen - 1; + unsigned int div = (unsigned int)round(cm->ovpLen / (1 + HFSamplingLimit)); + unsigned int halfWndLen = cm->halfLen - 1; + double *digw = (double *)malloc(halfWndLen * sizeof(double)); + linspace(digw, 0, M_PI - M_PI / halfWndLen, halfWndLen); + digw[halfWndLen - 1] = M_PI - M_PI / halfWndLen; + double sRe = cos(digw[div - 1]); + double sIm = sin(digw[div - 1]); + double *hHopPt = (double *)malloc((cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(double)); + double tmpRe, tmpIm; + complexMultiplication(sRe, sIm, sRe, sIm, &tmpRe, &tmpIm); + double wndPwr = pow(chopedWnd2[div - 1], reqSynthesisWnd); + double top = -DBL_MIN, down = DBL_MAX; + for (i = 0; i < (cm->prepad + cm->halfLen + cm->pospad - 1); i++) + { + double sigmas = (thetas1[i] / cm->fftLen) / oct / M_PI * cm->fftLen; + double mp = exp(-137 / (100 * sigmas)); + double a1 = 2.0 * cos(fnc1(sigmas) / sigmas) * mp; + double a[3] = { 1.0, -a1, mp * mp }; + double b = a[0] + a[1] + a[2]; + c1[i] = 2.0 - a1; + c2[i] = b / c1[i]; + double bDeflatedRe = tmpRe * b; + double bDeflatedIm = tmpIm * b; + double aDeflatedRe = tmpRe + sRe * a[1] + a[2]; + double aDeflatedIm = tmpIm + sIm * a[1]; + double hHopPtCplxRe, hHopPtCplxIm; + //printf("%d %1.14lf %1.14lf %1.14lf %1.14lf\n", i + 1, bDeflatedRe, bDeflatedIm, aDeflatedRe, aDeflatedIm); + cdivid(bDeflatedRe, bDeflatedIm, aDeflatedRe, aDeflatedIm, &hHopPtCplxRe, &hHopPtCplxIm); + hHopPt[i] = complexMultiplicationConj(hHopPtCplxRe, hHopPtCplxIm, hHopPtCplxRe, -hHopPtCplxIm) * chopedWnd1[div - 1] * wndPwr; + if (hHopPt[i] > top) + top = hHopPt[i]; + if (hHopPt[i] < down) + down = hHopPt[i]; + } + double thres = (top + down) / 2.0; + double *shiftedhHopPt = hHopPt + cm->prepad; + char isEmpty = 1; + for (i = 0; i < cm->halfLen; i++) + { + if (shiftedhHopPt[i] <= thres) + { + isEmpty = 0; + break; + } + } + unsigned int firstUndersampling = cm->prepad + min(i + 1, (unsigned int)(cm->fftLen / 4 - 1) - cm->prepad) - 1; + if (!isEmpty) + { + double thetaclipping = thetas1[firstUndersampling - 1]; + unsigned int len = cm->halfLen - firstUndersampling + 1; + for (i = 0; i < len; i++) + thetas1[i + firstUndersampling - 1] = thetaclipping; + for (i = 0; i < cm->prepad; i++) + thetas1[i] = thetas1[cm->prepad * 2 - i]; + len = cm->halfLen - (cm->halfLen - cm->prepad - cm->pospad + 1); + for (i = 0; i < len; i++) + thetas1[cm->halfLen + i] = thetas1[cm->halfLen - i - 2]; + // Eliminate oscillation around corner + double time = 0.026 * cm->fftLen / zp; // More elements in array less smoothing is needed + double alpha = 1 / (1 + time); + double alph = tan((M_PI * alpha) / 2.0); + double bCoef = alph / (1.0 + alph); + double iir_b[2] = { bCoef, bCoef }; + double iir_a = -(1.0 - alph) / (1.0 + alph); + double zi = (iir_b[1] - iir_b[0] * iir_a) / (1.0 + iir_a); + double *ytemp = (double *)malloc((cm->prepad + cm->halfLen + cm->pospad - 1 + 2 * 3) * sizeof(double)); + ytemp[0] = 2.0 * thetas1[0] - thetas1[3]; + ytemp[1] = 2.0 * thetas1[0] - thetas1[2]; + ytemp[2] = 2.0 * thetas1[0] - thetas1[1]; + memcpy(ytemp + 3, thetas1, (cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(double)); + ytemp[3 + (cm->prepad + cm->halfLen + cm->pospad - 1) + 0] = 2.0 * thetas1[cm->prepad + cm->halfLen + cm->pospad - 2] - thetas1[cm->prepad + cm->halfLen + cm->pospad - 3]; + ytemp[3 + (cm->prepad + cm->halfLen + cm->pospad - 1) + 1] = 2.0 * thetas1[cm->prepad + cm->halfLen + cm->pospad - 2] - thetas1[cm->prepad + cm->halfLen + cm->pospad - 4]; + ytemp[3 + (cm->prepad + cm->halfLen + cm->pospad - 1) + 2] = 2.0 * thetas1[cm->prepad + cm->halfLen + cm->pospad - 2] - thetas1[cm->prepad + cm->halfLen + cm->pospad - 5]; + double zLPF = zi * ytemp[0]; + for (i = 0; i < (cm->prepad + cm->halfLen + cm->pospad - 1 + 2 * 3); i++) + { + double out = ytemp[i] * bCoef + zLPF; + zLPF = ytemp[i] * bCoef - iir_a * out; + ytemp[i] = out; + } + int left = 0; + int right = (cm->prepad + cm->halfLen + cm->pospad - 1 + 2 * 3 - 1); + while (left < right) + { + double tmp = ytemp[left]; + ytemp[left++] = ytemp[right]; + ytemp[right--] = tmp; + } + zLPF = zi * ytemp[0]; + for (i = 0; i < (cm->prepad + cm->halfLen + cm->pospad - 1 + 2 * 3); i++) + { + double out = ytemp[i] * bCoef + zLPF; + zLPF = ytemp[i] * bCoef - iir_a * out; + ytemp[i] = out; + } + left = 0; + right = (cm->prepad + cm->halfLen + cm->pospad - 1 + 2 * 3 - 1); + while (left < right) + { + double tmp = ytemp[left]; + ytemp[left++] = ytemp[right]; + ytemp[right--] = tmp; + } + memcpy(thetas1, ytemp + 3, (cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(double)); + free(ytemp); + for (i = 0; i < (cm->prepad + cm->halfLen + cm->pospad - 1); i++) + { + double sigmas = (thetas1[i] / cm->fftLen) / oct / M_PI * cm->fftLen; + double mp = exp(-137 / (100 * sigmas)); + double a1 = 2.0 * cos(fnc1(sigmas) / sigmas) * mp; + double a[3] = { 1.0, -a1, mp * mp }; + b[i] = a[0] + a[1] + a[2]; + c1[i] = 2.0 - a1; + c2[i] = b[i] / c1[i]; + } + //for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; i++) + // printf("%d %1.14lf %1.14lf %1.14lf\n", i + 1, b[i], c1[i], c2[i]); + } + double meaTheta = 0.0; + for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; i++) + meaTheta += thetas1[i]; + meaTheta /= (cm->prepad + cm->halfLen + cm->pospad - 1); + char flat = 0; + for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; i++) + { + if (fabs(thetas1[i] - meaTheta) < DBL_EPSILON) + { + flat = 1; + break; + } + } + double *mSineTab = (double *)malloc(cm->fftLen * sizeof(double)); + LLsinHalfTbl(mSineTab, cm->fftLen); + unsigned int xlen = cm->fftLen + ((cm->ovpCount - 1) - 1) * cm->ovpLen; + double *systemImpulse = (double *)malloc(xlen * sizeof(double)); + memset(systemImpulse, 0, xlen * sizeof(double)); + double *tmpreal = (double *)malloc(cm->halfLen * sizeof(double)); + double *tmpimag = (double *)malloc(cm->halfLen * sizeof(double)); + double *tmpspecHannReal = (double *)malloc((cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(double)); + double *tmpspecHannImag = (double *)malloc((cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(double)); + cplxDouble *tmCplx = (cplxDouble *)malloc((cm->prepad + cm->halfLen + cm->pospad - 1) * sizeof(cplxDouble)); + double *fftBuf = (double *)malloc(cm->fftLen * sizeof(double)); + for (j = 0; j < cm->ovpCount - 1; j++) + { + unsigned int stepSize1 = (cm->fftLen - cm->ovpLen * (j + 1)) % cm->fftLen; + unsigned int stepSize = (cm->fftLen - cm->ovpLen * (j + 1) - cm->fftLen / 2 - 1) % cm->fftLen; + double cons1 = stepSize * 2 * M_PI / (double)cm->fftLen; + double anawnd = cm->analysisWnd[stepSize1 - 1]; + for (i = 0; i < cm->halfLen; i++) + { + double idx = -cons1 * i; + tmpspecHannReal[i + cm->prepad] = anawnd * cos(idx); + tmpspecHannImag[i + cm->prepad] = anawnd * sin(idx); + } + for (i = 0; i < cm->prepad; ++i) + { + tmpspecHannReal[cm->prepad - i - 1] = tmpspecHannReal[cm->prepad + i + 1]; + tmpspecHannImag[cm->prepad - i - 1] = -tmpspecHannImag[cm->prepad + i + 1]; + } + for (i = 0; i < cm->pospad - 1; ++i) + { + tmpspecHannReal[cm->prepad + cm->halfLen + cm->pospad - i - 2] = tmpspecHannReal[cm->prepad + cm->halfLen - cm->pospad + i]; + tmpspecHannImag[cm->prepad + cm->halfLen + cm->pospad - i - 2] = -tmpspecHannImag[cm->prepad + cm->halfLen - cm->pospad + i]; + } + // LTV Gaussian + cplxDouble z1, z2, o, st; + z1.real = z1.imag = 0; + z2.real = z2.imag = 0; + for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; i++) + { + o.real = tmpspecHannReal[i] - z1.real - z2.real; + o.imag = tmpspecHannImag[i] - z1.imag - z2.imag; + st.real = c2[i] * z1.real; + st.imag = c2[i] * z1.imag; + tmCplx[i].real = b[i] * o.real + 2 * st.real + z2.real; + tmCplx[i].imag = b[i] * o.imag + 2 * st.imag + z2.imag; + z2.real = z2.real + st.real; + z2.imag = z2.imag + st.imag; + z1.real = z1.real + c1[i] * o.real; + z1.imag = z1.imag + c1[i] * o.imag; + } + z1.real = z1.imag = 0; + z2.real = z2.imag = 0; + for (i = cm->prepad + cm->halfLen + cm->pospad - 1; i-- > 0; ) + { + o.real = tmCplx[i].real - z1.real - z2.real; + o.imag = tmCplx[i].imag - z1.imag - z2.imag; + st.real = c2[i] * z1.real; + st.imag = c2[i] * z1.imag; + tmpspecHannReal[i] = b[i] * o.real + 2 * st.real + z2.real; + tmpspecHannImag[i] = b[i] * o.imag + 2 * st.imag + z2.imag; + z2.real = z2.real + st.real; + z2.imag = z2.imag + st.imag; + z1.real = z1.real + c1[i] * o.real; + z1.imag = z1.imag + c1[i] * o.imag; + } + //for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; ++i) + // printf("%d %1.14lf %1.14lf\n", i + 1, tmpspecHannReal[i], tmpspecHannImag[i]); + for (i = cm->prepad; i < cm->prepad + cm->halfLen; ++i) + { + tmpspecHannReal[i - cm->prepad] = tmpspecHannReal[i] * cm->corrF[i - cm->prepad]; + tmpspecHannImag[i - cm->prepad] = tmpspecHannImag[i] * cm->corrF[i - cm->prepad]; + } + tmpspecHannImag[0] = tmpspecHannImag[cm->halfLen - 1] = 0; + double *reTar = tmpreal; + double *imTar = tmpimag; + double *reSrc = tmpspecHannReal; + double *imSrc = tmpspecHannImag; + // Inverse transform + for (k = 0; k < reqSynthesisWnd; k++) + { + reTar[0] = (reSrc[0] * 2.0 + reSrc[1] + reSrc[1]) / 4.0; // DC + imTar[0] = 0.0; // DC + for (i = 1; i < cm->halfLen - 1; i++) + { + reTar[i] = (reSrc[i] * 2.0 + reSrc[i - 1] + reSrc[i + 1]) / 4.0; + imTar[i] = (imSrc[i] * 2.0 + imSrc[i - 1] + imSrc[i + 1]) / 4.0; + } + reTar[cm->halfLen - 1] = (reSrc[cm->halfLen - 1] * 2.0 + reSrc[cm->halfLen - 2] + reSrc[cm->halfLen - 2]) / 4.0; // Nyquist + imTar[cm->halfLen - 1] = 0.0; + double *retmp = reSrc; + double *imtmp = imSrc; + reSrc = reTar; + imSrc = imTar; + reTar = retmp; + imTar = imtmp; + } + fftBuf[0] = reSrc[0]; + for (i = 1; i < cm->halfLen; i++) + { + unsigned int symIdx = cm->fftLen - i; + unsigned int bitRevFwd = cm->mBitRev[i]; + unsigned int bitRevSym = cm->mBitRev[symIdx]; + fftBuf[bitRevFwd] = reSrc[i] + (-imSrc[i]); + fftBuf[bitRevSym] = reSrc[i] - (-imSrc[i]); + } + //for (i = 0; i < cm->halfLen; ++i) + // printf("%d %1.14lf %1.14lf\n", i + 1, tmpreal[i], tmpimag[i]); + discreteHartleyTransform(fftBuf, cm->fftLen, mSineTab); + double *ptr = systemImpulse + j * cm->ovpLen; + for (i = 0; i < cm->fftLen; ++i) + ptr[i] += fftBuf[idxfftshift[i]] / cm->fftLen; + } + double *truncatedSystemImpulse = (double *)malloc((cm->fftLen + 1) * sizeof(double)); + if (cm->ovpLen != NFFTDIV2) + { + xlen = (cm->fftLen - cm->ovpLen) - ((cm->fftLen - cm->ovpLen) - (cm->fftLen / 2)) + 1; + memcpy(truncatedSystemImpulse, systemImpulse + (cm->fftLen - cm->ovpLen) - (cm->fftLen / 2) - 1, xlen * sizeof(double)); + } + else + { + xlen = cm->fftLen - cm->ovpLen; + truncatedSystemImpulse[0] = 0; + memcpy(truncatedSystemImpulse + 1, systemImpulse, xlen * sizeof(double)); + } + for (i = 0; i < NFFTDIV2; i++) + truncatedSystemImpulse[cm->halfLen + i] = truncatedSystemImpulse[cm->halfLen - 2 - i]; + double *truncatedSystemImpulseptr = truncatedSystemImpulse + 1; + for (i = 0; i < cm->fftLen; i++) + fftBuf[cm->mBitRev[i]] = truncatedSystemImpulseptr[i]; + discreteHartleyTransform(fftBuf, cm->fftLen, mSineTab); + double *impulseSpectrum = (double *)malloc(cm->halfLen * sizeof(double)); + impulseSpectrum[0] = fftBuf[0]; + unsigned int symIdx; + double mm = fftBuf[0]; + for (i = 1; i < cm->halfLen; i++) + { + symIdx = cm->fftLen - i; + impulseSpectrum[i] = hypot(fftBuf[i] + fftBuf[symIdx], -(fftBuf[i] - fftBuf[symIdx])) * 0.5; + mm += impulseSpectrum[i]; + } + if (flat) + { + mm = 1.0 / (mm / cm->halfLen); + for (i = 0; i < cm->halfLen; i++) + cm->corrF[i] = (float)mm; + } + else + { + for (i = 0; i < cm->halfLen; i++) + cm->corrF[i] = (float)(1.0 / impulseSpectrum[i]); + } + double *synth_win = (double *)malloc(cm->fftLen * sizeof(double)); + memset(synth_win, 0, cm->fftLen * sizeof(double)); + genWndDBL(synth_win + cm->fftLen / 2 - cm->ovpLen, cm->ovpLen * 2, "hann"); + double *tmpWnd = (double *)malloc(cm->fftLen * sizeof(double)); + for (i = 0; i < cm->fftLen; i++) + tmpWnd[i] = synth_win[i] * cm->analysisWnd[i]; + xlen = cm->fftLen + (cm->ovpCount * 2 - 1) * cm->ovpLen; + double *correctionWndHF = (double *)malloc(xlen * sizeof(double)); + memset(correctionWndHF, 0, xlen * sizeof(double)); + for (j = 0; j < cm->ovpCount * 2; j++) + { + double *ptr = correctionWndHF + j * cm->ovpLen; + for (i = 0; i < cm->fftLen; ++i) + ptr[i] += tmpWnd[i]; + } + double *wndValidPart1 = synth_win + (cm->fftLen / 2 - cm->ovpLen); + double *wndValidPart2 = correctionWndHF + (cm->fftLen - cm->ovpLen) + (cm->fftLen / 2 - cm->ovpLen); + for (j = 0; j < cm->ovpLen * 2; j++) + cm->synthesisWnd[j] = (float)((wndValidPart1[j] / wndValidPart2[j]) / (cm->fftLen * 2.0)); + /*FILE *fpp = fopen("dd.dat", "wb"); + fwrite(cm->synthesisWnd, sizeof(float), cm->ovpLen * 2, fpp); + fclose(fpp);*/ + /*FILE *fpp = fopen("dd.dat", "wb"); + fwrite(cm->corrF, sizeof(float), cm->halfLen, fpp); + fclose(fpp);*/ + for (i = 0; i < cm->prepad + cm->halfLen + cm->pospad - 1; i++) + { + cm->gauss_b[i] = (float)b[i]; + cm->gauss_c1[i] = (float)c1[i]; + cm->gauss_c2[i] = (float)c2[i]; + } + free(thetas1); + free(synWnd); + free(analysisWnd); + free(b); + free(c1); + free(c2); + free(digw); + free(hHopPt); + free(mSineTab); + free(systemImpulse); + free(tmpreal); + free(tmpimag); + free(tmpspecHannReal); + free(tmpspecHannImag); + free(tmCplx); + free(fftBuf); + free(truncatedSystemImpulse); + free(impulseSpectrum); + free(synth_win); + free(tmpWnd); + free(correctionWndHF); + } + else if (tfresolution == 1) + { + memcpy(cm->gauss_b, prec_b, sizeof(prec_b)); + memcpy(cm->gauss_c1, prec_c1, sizeof(prec_c1)); + memcpy(cm->gauss_c2, prec_c2, sizeof(prec_c2)); + memcpy(cm->corrF, prec_corrF, sizeof(prec_corrF)); + cm->scalarGain = (float)(1.0 / cm->fftLen / 2.0); + } + free(idxfftshift); + if (tfresolution == 3) + { + // Time domain method + double fb_bwERBs = 3.0; + double fb_lowFreqHz = 40.0; + double fb_highFreqHz = 20000.0; +#define freq2erb(freq) (9.265 * log(1.0 + freq / (24.7 * 9.265))) +#define erb2freq(erb) (24.7 * 9.265 * (exp(erb / 9.265) - 1)) + double ERBS[DYN_BANDS_GAMMATONE]; + linspace(ERBS, DYN_BANDS_GAMMATONE, freq2erb(fb_lowFreqHz), freq2erb(fb_highFreqHz)); + memset(cm->Zre, 0, DYN_BANDS_GAMMATONE * 2 * sizeof(float)); + memset(cm->Zim, 0, DYN_BANDS_GAMMATONE * 2 * sizeof(float)); + for (i = 0; i < DYN_BANDS_GAMMATONE; i++) + { + cm->gmtFreq[i] = erb2freq(ERBS[i]); + gammatoneAPFirstOrder(cm->gmtFreq[i], fs, fb_bwERBs, &cm->bRe[i], &cm->aRe[i], &cm->aIm[i]); + } + memcpy(cm->freq3 + 1, cm->gmtFreq, sizeof(cm->gmtFreq)); + cm->freq3[0] = 0.0f; + cm->freq3[DYN_BANDS_GAMMATONE + 1] = fs * 0.5f; + float *fq = cm->freq3 + 1; + HSHOSVF2ndPrecompute(fs, fq[0], cm->trigo); + for (unsigned int sb = 1; sb < DYN_BANDS_GAMMATONE - 1; sb++) + { + double designFreq = (fq[sb + 1] + fq[sb]) * 0.5; + HSHOSVF2ndPrecompute(fs, designFreq, cm->trigo + sb * 4); + } + HSHOSVF2nd(0, 0, &cm->c1[0], &cm->c2[0], &cm->d0[0], &cm->d1[0], &cm->overallGain, cm->trigo); + for (i = 1; i < DYN_BANDS_GAMMATONE - 1; i++) + HSHOSVF2ndNoOverallGain(0, &cm->c1[i], &cm->c2[i], &cm->d0[i], &cm->d1[i], cm->trigo + i * 4); + cm->updatePerNSmps = 2; + cm->dsSm = 1.0f / (1.0f + cm->updatePerNSmps); + cm->alpha = 0.5f / cm->updatePerNSmps; + } } void CompressorConstructor(JamesDSPLib *jdsp) { @@ -458,7 +1594,6 @@ void CompressorConstructor(JamesDSPLib *jdsp) cm->gains2[0] = cm->gains2[1]; cm->freq2[NUMPTS_DRS + 1] = 24000.0; initIerper(&cm->pch, NUMPTS_DRS + 2); - FFTCompanderInit(cm, jdsp->fs); } void CompressorDestructor(JamesDSPLib *jdsp) { @@ -468,8 +1603,7 @@ void CompressorEnable(JamesDSPLib *jdsp, char enable) { if (jdsp->compForceRefresh) { - FFTCompanderInit(&jdsp->comp, jdsp->fs); - CompressorSetParam(jdsp, jdsp->comp.fgt_facT, jdsp->comp.granularity, jdsp->comp.tfresolution); + CompressorSetParam(jdsp, jdsp->comp.fgt_facT, jdsp->comp.granularity, jdsp->comp.tfresolution, 1); CompressorSetGain(jdsp, 0, 0, 0); } if (enable) @@ -479,29 +1613,40 @@ void CompressorDisable(JamesDSPLib *jdsp) { jdsp->compEnabled = 0; } -void CompressorSetParam(JamesDSPLib *jdsp, float fgt_facT, int granularity, int tfresolution) +void CompressorSetParam(JamesDSPLib *jdsp, float fgt_facT, int granularity, int tfresolution, char forceRefresh) { FFTCompander *cm = (FFTCompander *)(&jdsp->comp); - cm->fgt_facT = fgt_facT; - cm->fgt_fac = (float)(1.0 - exp(-1.0 / (cm->fgt_facT * jdsp->comp.spectralRate))); - cm->granularity = granularity; - cm->tfresolution = tfresolution; - double avgBW; - if (!cm->granularity) - avgBW = 1.65; - else if (cm->granularity == 1) - avgBW = 1.45; - else if (cm->granularity == 2) - avgBW = 1.2; - else if (cm->granularity == 3) - avgBW = 1.15; - else - avgBW = 1.1; - FFTCompanderSetavgBW(cm, avgBW); + if ((fgt_facT != cm->fgt_facT || tfresolution != cm->tfresolution || granularity != cm->granularity) || forceRefresh) + { + FFTCompanderInit(&jdsp->comp, jdsp->fs, tfresolution, 3, 1.0); + cm->fgt_facT = fgt_facT; + cm->tfresolution = tfresolution; + cm->granularity = granularity; + if (cm->tfresolution < 3) + { + cm->fgt_fac = (float)(1.0 - exp(-1.0 / (cm->fgt_facT * jdsp->comp.spectralRate))); + double avgBW; + if (!cm->granularity) + avgBW = 1.65; + else if (cm->granularity == 1) + avgBW = 1.45; + else if (cm->granularity == 2) + avgBW = 1.2; + else if (cm->granularity == 3) + avgBW = 1.15; + else + avgBW = 1.08; + FFTCompanderSetavgBW(cm, avgBW); + } + else if (cm->tfresolution == 3) + { + cm->fgt_fac = (float)(1.0 - exp(-1.0 / (cm->fgt_facT * jdsp->fs))); + } + } } void CompressorSetGain(JamesDSPLib *jdsp, double *freq, double *gains, char cpy) { - FFTCompander *cm = (FFTCompander*)(&jdsp->comp); + FFTCompander *cm = (FFTCompander *)(&jdsp->comp); if (cpy) { memcpy(cm->freq2 + 1, freq, NUMPTS_DRS * sizeof(double)); @@ -517,33 +1662,155 @@ void CompressorSetGain(JamesDSPLib *jdsp, double *freq, double *gains, char cpy) unsigned int lpLen = *((unsigned int *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float))); float *lv1 = (float *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float)); float *lv2 = (float *)(cm->octaveSmooth + sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + (lpLen << 1) * sizeof(unsigned int) + lpLen * sizeof(float) + (lpLen + 3) * sizeof(float)); - for (int i = 0; i < HALFWNDLEN_DRS; i++) - cm->DREmultUniform[i] = getValueAt(&cm->pch.cb, i * jdsp->fs / cm->fftLen * 0.25); - if (!cm->noGridDownsampling) - ShrinkGridSpectralInterpolator(cm->octaveSmooth, cm->procUpTo, cm->DREmultUniform, cm->DREmult); - else - memcpy(cm->DREmult, cm->DREmultUniform, cm->procUpTo * sizeof(float)); - cm->headRoomdB = 10.0f; - if (!cm->noGridDownsampling) + if (cm->tfresolution < 3) { - for (int i = 0; i < cm->smallGridSize; i++) - if (cm->headRoomdB < cm->DREmult[i] * 12.0f) - cm->headRoomdB = cm->DREmult[i] * 12.0f; + for (int i = 0; i < HALFWNDLEN_DRS; i++) + cm->DREmultUniform[i] = getValueAt(&cm->pch.cb, i * jdsp->fs / cm->fftLen * 0.25); + if (!cm->noGridDownsampling) + ShrinkGridSpectralInterpolator(cm->octaveSmooth, cm->procUpTo, cm->DREmultUniform, cm->DREmult); + else + memcpy(cm->DREmult, cm->DREmultUniform, cm->procUpTo * sizeof(float)); + cm->headRoomdB = 10.0f; + if (!cm->noGridDownsampling) + { + for (int i = 0; i < cm->smallGridSize; i++) + { + if (cm->DREmult[i] < -1.2) + cm->DREmult[i] = -1.2; + if (cm->DREmult[i] > 1.2) + cm->DREmult[i] = 1.2; + if (cm->headRoomdB < cm->DREmult[i] * 12.0f) + cm->headRoomdB = cm->DREmult[i] * 12.0f; + } + } + else + { + for (int i = 0; i < cm->procUpTo; i++) + { + if (cm->DREmult[i] < -1.2) + cm->DREmult[i] = -1.2; + if (cm->DREmult[i] > 1.2) + cm->DREmult[i] = 1.2; + if (cm->headRoomdB < cm->DREmult[i] * 12.0f) + cm->headRoomdB = cm->DREmult[i] * 12.0f; + } + } } else { - for (int i = 0; i < cm->procUpTo; i++) + float avgGain = 0.0f; + for (int i = 0; i < DYN_BANDS_GAMMATONE; i++) + { + cm->DREmult[i] = getValueAt(&cm->pch.cb, cm->gmtFreq[i]); + if (cm->DREmult[i] < -1.2) + cm->DREmult[i] = -1.2; + if (cm->DREmult[i] > 1.2) + cm->DREmult[i] = 1.2; + avgGain += cm->DREmult[i]; + } + avgGain /= DYN_BANDS_GAMMATONE; + const float oX[11] = { -1.2, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.2 }; + const float oY[11] = { 0.05, 0.09, 0.15, 0.17, 0.2, 0.25, 0.1, 0.05, 0.008, 0.005, 0.003 }; + float rate = lerp1DNoExtrapo(avgGain, oX, oY, 11); + if (!cm->granularity) + rate *= 0.9f; + else if (cm->granularity == 1) + rate *= 0.95f; + else if (cm->granularity == 3) + rate *= 0.99f; + else if (cm->granularity == 3) + rate *= 1.0f; + cm->alpha = rate / cm->updatePerNSmps; + cm->headRoomdB = 10.0f; + for (int i = 0; i < DYN_BANDS_GAMMATONE; i++) if (cm->headRoomdB < cm->DREmult[i] * 12.0f) cm->headRoomdB = cm->DREmult[i] * 12.0f; } } void CompressorProcess(JamesDSPLib *jdsp, size_t n) { - unsigned int offset = 0; - while (offset < n) + FFTCompander *cm = (FFTCompander *)(&jdsp->comp); + if (cm->tfresolution < 3) + { + unsigned int offset = 0; + while (offset < n) + { + const unsigned int processing = min(n - offset, cm->ovpLen); + FFTCompanderProcessSamples(cm, jdsp->tmpBuffer[0] + offset, jdsp->tmpBuffer[1] + offset, processing, jdsp->tmpBuffer[0] + offset, jdsp->tmpBuffer[1] + offset); + offset += processing; + } + } + else { - const unsigned int processing = min(n - offset, jdsp->comp.ovpLen); - FFTCompanderProcessSamples(&jdsp->comp, jdsp->tmpBuffer[0] + offset, jdsp->tmpBuffer[1] + offset, processing, jdsp->tmpBuffer[0] + offset, jdsp->tmpBuffer[1] + offset); - offset += processing; + unsigned int smp, i, sb; + float yre, yim; + float *ZreL = cm->Zre; + float *ZimL = cm->Zim; + float *ZreR = ZreL + DYN_BANDS_GAMMATONE; + float *ZimR = ZimL + DYN_BANDS_GAMMATONE; + for (smp = 0; smp < n; smp++) + { + for (sb = 0; sb < DYN_BANDS_GAMMATONE; sb++) + { + filter2(&ZreL[sb], &ZimL[sb], &cm->bRe[sb], &cm->aRe[sb], &cm->aIm[sb], jdsp->tmpBuffer[0][smp], &yre, &yim); + float leftMag = hypotf(yre, yim); + filter2(&ZreR[sb], &ZimR[sb], &cm->bRe[sb], &cm->aRe[sb], &cm->aIm[sb], jdsp->tmpBuffer[1][smp], &yre, &yim); + float rightMag = hypotf(yre, yim); + float magNormalized = mag2db((leftMag + rightMag) * 0.5f); + cm->oldBuf[sb] = cm->oldBuf[sb] + cm->fgt_fac * (magNormalized - cm->oldBuf[sb]); + cm->interpolatedGain[sb + 1] = processfftCompdB(cm, sb, magNormalized); + } + cm->interpolatedGain[0] = cm->interpolatedGain[1]; + cm->interpolatedGain[DYN_BANDS_GAMMATONE + 1] = cm->interpolatedGain[DYN_BANDS_GAMMATONE]; + float *gn = cm->interpolatedGain + 1; + cm->diffGain[0] = gn[0] + cm->dsSm * (cm->diffGain[0] - gn[0]); + for (sb = 0; sb < DYN_BANDS_GAMMATONE - 1; sb++) + { + float diff = gn[sb + 1] - gn[sb]; + cm->diffGain[sb + 1] = diff + cm->dsSm * (cm->diffGain[sb + 1] - diff); + } + cm->updateIdx = (cm->updateIdx + 1) & (cm->updatePerNSmps - 1); + if (cm->updateIdx == 0) + { + float c1, c2, d0, d1, unityGain; + HSHOSVF2nd(cm->diffGain[0 + 1], cm->diffGain[0], &c1, &c2, &d0, &d1, &unityGain, cm->trigo); + cm->d0step[0] = (d0 - cm->d0[0]) * cm->alpha; + cm->d1step[0] = (d1 - cm->d1[0]) * cm->alpha; + cm->c1step[0] = (c1 - cm->c1[0]) * cm->alpha; + cm->c2step[0] = (c2 - cm->c2[0]) * cm->alpha; + cm->overallGainstep = (unityGain - cm->overallGain) * cm->alpha; + for (sb = 1; sb < DYN_BANDS_GAMMATONE - 1; sb++) + { + HSHOSVF2ndNoOverallGain(cm->diffGain[sb + 1], &c1, &c2, &d0, &d1, cm->trigo + sb * 4); + cm->d0step[sb] = (d0 - cm->d0[sb]) * cm->alpha; + cm->d1step[sb] = (d1 - cm->d1[sb]) * cm->alpha; + cm->c1step[sb] = (c1 - cm->c1[sb]) * cm->alpha; + cm->c2step[sb] = (c2 - cm->c2[sb]) * cm->alpha; + } + } + for (sb = 0; sb < DYN_BANDS_GAMMATONE - 1; sb++) + { + cm->d0[sb] += cm->d0step[sb]; + cm->d1[sb] += cm->d1step[sb]; + cm->c1[sb] += cm->c1step[sb]; + cm->c2[sb] += cm->c2step[sb]; + } + cm->overallGain += cm->overallGainstep; + float x1 = jdsp->tmpBuffer[0][smp]; + float x2 = jdsp->tmpBuffer[1][smp]; + for (i = 0; i < DYN_BANDS_GAMMATONE - 1; i++) + { + float y1 = x1 - cm->z1_AL[i] - cm->z2_AL[i]; + x1 = cm->d0[i] * y1 + cm->d1[i] * cm->z1_AL[i] + cm->z2_AL[i]; + cm->z2_AL[i] = cm->z2_AL[i] + cm->c2[i] * cm->z1_AL[i]; + cm->z1_AL[i] = cm->z1_AL[i] + cm->c1[i] * y1; + float y2 = x2 - cm->z1_AR[i] - cm->z2_AR[i]; + x2 = cm->d0[i] * y2 + cm->d1[i] * cm->z1_AR[i] + cm->z2_AR[i]; + cm->z2_AR[i] = cm->z2_AR[i] + cm->c2[i] * cm->z1_AR[i]; + cm->z1_AR[i] = cm->z1_AR[i] + cm->c1[i] * y2; + } + jdsp->tmpBuffer[0][smp] = x1 * cm->overallGain; + jdsp->tmpBuffer[1][smp] = x2 * cm->overallGain; + } } } diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/eelCommon.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/eelCommon.h index cfc40848..6b187635 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/eelCommon.h +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/eelCommon.h @@ -1,4 +1,4 @@ -#if defined(TURN_ON_VST) +#ifdef TURN_ON_VST // Config a custom CLI buffer #define CUSTOM_CMD #endif diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/ns-eel-int.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/ns-eel-int.h index 2ba4ec87..6f630ee1 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/ns-eel-int.h +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/ns-eel-int.h @@ -116,9 +116,9 @@ typedef struct { typedef struct { int32_t slot, inuse; - int32_t *map; - s_str *m_literal_strings; -} eel_string_context_state; + void **memRegion; + char *type; +} eel_builtin_memRegion; #define MAX_CMD_LEN 8192 #define HISTORY_COUNT 15000 #include "cpthread.h" @@ -141,14 +141,7 @@ typedef struct } abstractThreads; typedef struct { - uint32_t numberOfThreads; - uint32_t threadMap[1024]; - abstractThreads *codePtrThreadSink[1024]; pthread_mutex_t globalLocker; - uint32_t numberOfConvolver; - uint32_t *convolverMap; - uint32_t *convolverType; - void **convolverSink; const char *(*func_check)(const char *fn_name, void *user); // return error message if not permitted void *func_check_user; float **varTable_Values; @@ -182,7 +175,7 @@ typedef struct codeHandleType *tmpCodeHandle; float ram_state[NSEEL_RAM_ITEMSPERBLOCK]; void *caller_this; - eel_string_context_state *m_string_context; + eel_builtin_memRegion *region_context; char printfbuf[20000]; } compileContext; void *NSEEL_PProc_RAM(void *data, int32_t data_size, compileContext *ctx); @@ -246,6 +239,7 @@ opcodeRec *nseel_translate(compileContext *ctx, const char *tmp, size_t tmplen); #define __NSEEL_RAMAlloc(pblocks, w) (pblocks + w) float * NSEEL_CGEN_CALL __NSEEL_RAM_MemSet(float *blocks,float *dest, float *v, float *lenptr); float * NSEEL_CGEN_CALL __NSEEL_RAM_MemCpy(float *blocks,float *dest, float *src, float *lenptr); +float *dataSectionToRamDisk(void *opaque, size_t len); extern float NSEEL_CGEN_CALL nseel_int_rand(float amplitude); #ifdef __cplusplus } diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/ns-eel.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/ns-eel.h index c80d157b..5af07826 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/ns-eel.h +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/ns-eel.h @@ -40,7 +40,7 @@ typedef uintptr_t UINT_PTR; #ifndef min #define min(x,y) ((x)<(y)?(x):(y)) #endif -#if !defined(max) +#ifndef max #define max(x,y) ((x)<(y)?(y):(x)) #endif #ifndef _WIN32 @@ -73,7 +73,7 @@ void NSEEL_start(); // Init global variables void NSEEL_quit(); // Delete global variables int32_t *NSEEL_getstats(); // returns a pointer to 5 ints... source bytes, static code bytes, call code bytes, data bytes, number of code handles void NSEEL_VM_freevars(NSEEL_VMCTX _ctx); -void NSEEL_init_string(NSEEL_VMCTX ctx); +void NSEEL_init_memRegion(NSEEL_VMCTX ctx); NSEEL_VMCTX NSEEL_VM_alloc(); // return a handle void NSEEL_VM_free(NSEEL_VMCTX ctx); // free when done with a VM and ALL of its code have been freed, as well // validateFunc can return error message if not permitted @@ -108,7 +108,6 @@ int32_t *NSEEL_code_getstats(NSEEL_CODEHANDLE code); // 4 ints...source bytes, s #include #define NSEEL_NATIVE_FLT_MAX_INT (1 << FLT_MANT_DIG) // Next value will no longer be accurately represented #define NSEEL_MAX_FUNCTION_SIZE_FOR_INLINE 2048 -#define NSEEL_RAM_ITEMSPERBLOCK_LOG2 24 // How many float precision floating point items per block #define NSEEL_RAM_ITEMSPERBLOCK NSEEL_NATIVE_FLT_MAX_INT // Must be smaller or equal than max floating pointing representable integer #define EEL_BC_TYPE int32_t #ifdef CUSTOM_CMD diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/nseel-compiler.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/nseel-compiler.c index 6438f893..7f1a978e 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/nseel-compiler.c +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/nseel-compiler.c @@ -26,6 +26,10 @@ #include #include "eelCommon.h" #include "glue_port.h" +#include +#include "eel_matrix.h" +#include "numericSys/FFTConvolver.h" +#include "numericSys/HPFloat/xpre.h" static void lstrcpyn_safe(char *o, const char *in, int32_t count) { if (count > 0) @@ -132,6 +136,11 @@ struct opcodeRec // OPCODETYPE_FUNC* with fntype=FUNCTYPE_EELFUNC const char *relname; }; +float *dataSectionToRamDisk(void *opaque, size_t len) +{ + compileContext *c = (compileContext*)opaque; + return c->ram_state + (NSEEL_RAM_ITEMSPERBLOCK - len); +} static void *newTmpBlock(compileContext *ctx, int32_t size) { const int32_t align = 8; @@ -535,7 +544,7 @@ void discreteHartleyTransformFloat(float *A, const int32_t nPoints, const float theta_inc >>= 1; } } -#define M_PIDouble 3.1415926535897932384626433832795f +#define M_PIDouble 3.1415926535897932384626433832795 void getAsymmetricWindow(float *analysisWnd, float *synthesisWnd, int32_t k, int32_t m, float freq_temporal) { int32_t i; @@ -546,15 +555,77 @@ void getAsymmetricWindow(float *analysisWnd, float *synthesisWnd, int32_t k, int freq_temporal = 1.8f; int32_t n = ((k - m) << 1) + 2; for (i = 0; i < k - m; ++i) - analysisWnd[i] = (float)pow(sqrt(0.5f * (1.0f - cos(2.0f * M_PIDouble * (i + 1.0f) / (float)n))), freq_temporal); + analysisWnd[i] = (float)pow(sqrt(0.5 * (1.0 - cos(2.0 * M_PIDouble * (i + 1.0) / (double)n))), freq_temporal); n = (m << 1) + 2; if (freq_temporal > 1.5f) freq_temporal = 1.5f; for (i = k - m; i < k; ++i) - analysisWnd[i] = (float)pow(sqrt(0.5f * (1.0f - cos(2.0f * M_PIDouble * ((m + i - (k - m)) + 1.0f) / (float)n))), freq_temporal); + analysisWnd[i] = (float)pow(sqrt(0.5 * (1.0 - cos(2.0 * M_PIDouble * ((m + i - (k - m)) + 1.0) / (double)n))), freq_temporal); n = m << 1; for (i = k - (m << 1); i < k; ++i) - synthesisWnd[i] = (float)(0.5f * (1.0f - cos(2.0f * M_PIDouble * (float)(i - (k - (m << 1))) / (float)n))) / analysisWnd[i]; + synthesisWnd[i - (k - (m << 1))] = (float)(0.5 * (1.0 - cos(2.0 * M_PIDouble * (double)(i - (k - (m << 1))) / (double)n))) / analysisWnd[i]; +} +void getwnd(float *wnd, unsigned int m, unsigned int n, char *mode) +{ + unsigned int i; + double x; + if (!strcmp(mode, "hann")) + { + for (i = 0; i < m; i++) + { + x = i / (double)(n - 1); + wnd[i] = (float)(0.5 - 0.5 * cos(2 * M_PIDouble * x)); + } + } + else if (!strcmp(mode, "hamming")) + { + for (i = 0; i < m; i++) + { + x = i / (double)(n - 1); + wnd[i] = (float)(0.54 - 0.46 * cos(2 * M_PIDouble * x)); + } + } + else if (!strcmp(mode, "blackman")) + { + for (i = 0; i < m; i++) + { + x = i / (double)(n - 1); + wnd[i] = (float)(0.42 - 0.5 * cos(2 * M_PIDouble * x) + 0.08 * cos(4 * M_PIDouble * x)); + } + } + else if (!strcmp(mode, "flattop")) + { + double a0 = 0.21557895; + double a1 = 0.41663158; + double a2 = 0.277263158; + double a3 = 0.083578947; + double a4 = 0.006947368; + for (i = 0; i < m; i++) + { + x = i / (double)(n - 1); + wnd[i] = (float)(a0 - a1 * cos(2 * M_PIDouble * x) + a2 * cos(4 * M_PIDouble * x) - a3 * cos(6 * M_PIDouble * x) + a4 * cos(8 * M_PIDouble * x)); + } + } +} +void genWnd(float *wnd, unsigned int N, char *type) +{ + unsigned int plus1 = N + 1; + unsigned int half; + unsigned int i; + if (plus1 % 2 == 0) + { + half = plus1 / 2; + getwnd(wnd, half, plus1, type); + for (i = 0; i < half - 1; i++) + wnd[i + half] = wnd[half - i - 1]; + } + else + { + half = (plus1 + 1) / 2; + getwnd(wnd, half, plus1, type); + for (i = 0; i < half - 2; i++) + wnd[i + half] = wnd[half - i - 2]; + } } void STFT_DynInit(int32_t *indexFw, float *analysisWnd) { @@ -589,7 +660,7 @@ void STFT_DynInit(int32_t *indexFw, float *analysisWnd) getAsymmetricWindow(analysisWnd, synthesisWnd, indexFw[0], ovpSmps, indexFw[5] / (float)32767); // Pre-shift window function for (i = 0; i < indexFw[0] - indexFw[2]; i++) - synthesisWnd[i] = synthesisWnd[i + indexFw[2]] * (1.0f / indexFw[0]) * 0.5f; + synthesisWnd[i] = synthesisWnd[i] * (1.0f / indexFw[0]) * 0.5f; } int32_t STFTCartesian(float *indexer, float *analysisWnd, float *ptr) { @@ -611,31 +682,7 @@ int32_t STFTCartesian(float *indexer, float *analysisWnd, float *ptr) lR = mTempBuffer[i] + mTempBuffer[symIdx]; lI = mTempBuffer[i] - mTempBuffer[symIdx]; ptr[i << 1] = lR; - ptr[(i << 1) + 1] = lI; - } - return indexFw[0] + 2; -} -int32_t STFTPolar(float *indexer, float *analysisWnd, float *ptr) -{ - int32_t *indexFw = (int32_t*)indexer; - float *mSineTab = analysisWnd + indexFw[0] * 2; - float *mInput = mSineTab + indexFw[0]; - float *mTempBuffer = mInput + indexFw[0]; - uint32_t *bitRevTbl = (uint32_t*)(analysisWnd + (indexFw[0] * 6) + indexFw[3] + indexFw[3]); - int32_t i, symIdx; - for (i = 0; i < indexFw[0]; ++i) - mTempBuffer[bitRevTbl[i]] = mInput[(i + indexFw[4]) & (indexFw[0] - 1)] * analysisWnd[i]; - discreteHartleyTransformFloat(mTempBuffer, indexFw[0], mSineTab); - ptr[0] = fabsf(mTempBuffer[0] * 2.0f); - ptr[1] = ((mTempBuffer[0] < 0.0f) ? M_PIDouble : 0.0f); - float lR, lI; - for (i = 1; i < ((indexFw[0] >> 1) + 1); i++) - { - symIdx = indexFw[0] - i; - lR = mTempBuffer[i] + mTempBuffer[symIdx]; - lI = mTempBuffer[i] - mTempBuffer[symIdx]; - ptr[i << 1] = hypotf(lR, lI); - ptr[(i << 1) + 1] = atan2f(lI, lR); + ptr[(i << 1) + 1] = -lI; } return indexFw[0] + 2; } @@ -654,40 +701,7 @@ int32_t STFTCartesianInverse(float *indexer, float *analysisWnd, float *ptr) for (i = 1; i < ((indexFw[0] >> 1) + 1); i++) { lR = ptr[i << 1]; - lI = ptr[(i << 1) + 1]; - timeDomainOut[bitRevTbl[i]] = (lR + lI); - timeDomainOut[bitRevTbl[indexFw[0] - i]] = (lR - lI); - } - discreteHartleyTransformFloat(timeDomainOut, indexFw[0], mSineTab); - for (i = 0; i < indexFw[0] - indexFw[2]; i++) - timeDomainOut[i] = timeDomainOut[i + indexFw[2]] * synthesisWnd[i]; - for (i = 0; i < indexFw[3]; ++i) - { - mOutputBuffer[i] = mOverlapStage2Ldash[i] + timeDomainOut[i]; - mOverlapStage2Ldash[i] = timeDomainOut[indexFw[3] + i]; - } - return indexFw[3]; -} -int32_t STFTPolarInverse(float *indexer, float *analysisWnd, float *ptr) -{ - int32_t *indexFw = (int32_t*)indexer; - float *synthesisWnd = analysisWnd + indexFw[0]; - float *mSineTab = synthesisWnd + indexFw[0]; - float *timeDomainOut = mSineTab + indexFw[0] * 3; - float *mOutputBuffer = timeDomainOut + indexFw[0]; - float *mOverlapStage2Ldash = mOutputBuffer + indexFw[3]; - uint32_t *bitRevTbl = (uint32_t*)(analysisWnd + (indexFw[0] * 6) + indexFw[3] + indexFw[3]); - int32_t i; - float magnitude = ptr[0]; - float phase = ptr[1]; - float lR, lI; - timeDomainOut[0] = magnitude * cosf(phase); - for (i = 1; i < ((indexFw[0] >> 1) + 1); i++) - { - magnitude = ptr[i << 1]; - phase = ptr[(i << 1) + 1]; - lR = magnitude * cosf(phase); - lI = magnitude * sinf(phase); + lI = -ptr[(i << 1) + 1]; timeDomainOut[bitRevTbl[i]] = (lR + lI); timeDomainOut[bitRevTbl[indexFw[0] - i]] = (lR - lI); } @@ -715,6 +729,35 @@ static float NSEEL_CGEN_CALL stftInit(void *opaque, INT_PTR num_param, float **p STFT_DynInit(indexFw, stftFloatStruct); return (float)indexFw[3]; } +void STFT_SetWnd(int32_t *indexFw, float *stftFloatStruct, float *desired_analysisWnd, float *desired_synthesisWnd) +{ + int32_t i; + float *synthesisWnd = stftFloatStruct + indexFw[0]; + for (i = 0; i < indexFw[0]; i++) + stftFloatStruct[i] = desired_analysisWnd[i]; + for (i = 0; i < indexFw[0] - indexFw[2]; i++) + synthesisWnd[i] = desired_synthesisWnd[i] * (1.0f / indexFw[0]) * 0.5f; +} +static float NSEEL_CGEN_CALL stftSetAsymWnd(void *opaque, INT_PTR num_param, float **parms) +{ + compileContext *c = (compileContext *)opaque; + float *blocks = c->ram_state; + float *start1 = parms[0]; + int32_t offs1 = (int32_t)(*start1 + NSEEL_CLOSEFACTOR); + float *start2 = parms[1]; + int32_t offs2 = (int32_t)(*start2 + NSEEL_CLOSEFACTOR); + float *start3 = parms[2]; + int32_t offs3 = (int32_t)(*start3 + NSEEL_CLOSEFACTOR); + float *start4 = parms[3]; + int32_t offs4 = (int32_t)(*start4 + NSEEL_CLOSEFACTOR); + float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); + float *stftFloatStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); + float *desired_analysisWnd = __NSEEL_RAMAlloc(blocks, (uint64_t)offs3); + float *desired_synthesisWnd = __NSEEL_RAMAlloc(blocks, (uint64_t)offs4); + int32_t *indexFw = (int32_t *)indexer; + STFT_SetWnd(indexFw, stftFloatStruct, desired_analysisWnd, desired_synthesisWnd); + return 0; +} static float NSEEL_CGEN_CALL stftGetWindowPower(void *opaque, INT_PTR num_param, float **parms) { compileContext *c = (compileContext*)opaque; @@ -741,15 +784,11 @@ static float NSEEL_CGEN_CALL stftForward(void *opaque, INT_PTR num_param, float int32_t offs2 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); float *stftFloatStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t cartesian = (int32_t)(*parms[3]); int32_t *indexFw = (int32_t*)indexer; float *mInput = stftFloatStruct + indexFw[0] * 3; memcpy(&mInput[indexFw[4]], ptr, indexFw[3] * sizeof(float)); indexFw[4] = (indexFw[4] + indexFw[3]) & (indexFw[0] - 1); - if (cartesian) - return (float)STFTCartesian(indexer, stftFloatStruct, ptr); - else - return (float)STFTPolar(indexer, stftFloatStruct, ptr); + return (float)STFTCartesian(indexer, stftFloatStruct, ptr); } static float NSEEL_CGEN_CALL stftBackward(void *opaque, INT_PTR num_param, float **parms) { @@ -761,13 +800,9 @@ static float NSEEL_CGEN_CALL stftBackward(void *opaque, INT_PTR num_param, float int32_t offs2 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); float *stftFloatStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t cartesian = (int32_t)(*parms[3]); int32_t *indexFw = (int32_t*)indexer; int32_t ret; - if (cartesian) - ret = STFTCartesianInverse(indexer, stftFloatStruct, ptr); - else - ret = STFTPolarInverse(indexer, stftFloatStruct, ptr); + ret = STFTCartesianInverse(indexer, stftFloatStruct, ptr); memcpy(ptr, stftFloatStruct + indexFw[0] * 6, indexFw[3] * sizeof(float)); return (float)ret; } @@ -794,6 +829,391 @@ static float NSEEL_CGEN_CALL stftCheckMemoryRequirement(void *opaque, INT_PTR nu int32_t analyOv = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); return (float)STFT_DynConstructor(indexer, fftlen, analyOv, *parms[3]); } +static inline double ipowp(double x, long n) +{ + assert(n >= 0); + double z = 1.0; + while (n != 0) + { + if ((n & 1) != 0) + z *= x; + n >>= 1; + x *= x; + } + return z; +} +static inline void compute_transition_param(double *k, double *q, double transition) +{ + assert(transition > 0); + assert(transition < 0.5); + *k = tan((1 - transition * 2) * M_PIDouble / 4); + *k *= *k; + assert(*k < 1); + assert(*k > 0); + double kksqrt = pow(1.0 - *k * *k, 0.25); + const double e = 0.5 * (1 - kksqrt) / (1 + kksqrt); + const double e2 = e * e; + const double e4 = e2 * e2; + *q = e * (1 + e4 * (2 + e4 * (15 + 150 * e4))); + assert(*q > 0); +} +static inline double compute_acc_num(double q, int order, int c) +{ + assert(c >= 1); + assert(c < order * 2); + int i = 0; + int j = 1; + double acc = 0; + double q_ii1; + do + { + q_ii1 = ipowp(q, i * (i + 1)); + q_ii1 *= sin((i * 2 + 1) * c * M_PIDouble / order) * j; + acc += q_ii1; + j = -j; + ++i; + } while (fabs(q_ii1) > 1e-100); + return acc; +} +static inline double compute_acc_den(double q, int order, int c) +{ + assert(c >= 1); + assert(c < order * 2); + int i = 1; + int j = -1; + double acc = 0; + double q_i2; + do + { + q_i2 = ipowp(q, i * i); + q_i2 *= cos(i * 2 * c * M_PIDouble / order) * j; + acc += q_i2; + j = -j; + ++i; + } while (fabs(q_i2) > 1e-100); + return acc; +} +static inline double compute_coef(int index, double k, double q, int order) +{ + assert(index >= 0); + assert(index * 2 < order); + const int c = index + 1; + const double num = compute_acc_num(q, order, c) * pow(q, 0.25); + const double den = compute_acc_den(q, order, c) + 0.5; + const double ww = num / den; + const double wwsq = ww * ww; + const double x = sqrt((1 - wwsq * k) * (1 - wwsq / k)) / (1 + wwsq); + const double coef = (1 - x) / (1 + x); + return coef; +} +static inline void compute_coefs_spec_order_tbw(double coef_arr[], int nbr_coefs, double transition) +{ + assert(nbr_coefs > 0); + assert(transition > 0); + assert(transition < 0.5); + double k; + double q; + compute_transition_param(&k, &q, transition); + const int order = nbr_coefs * 2 + 1; + // Coefficient calculation + for (int index = 0; index < nbr_coefs; ++index) + coef_arr[index] = compute_coef(index, k, q, order); +} +static inline double IIR2thOrder(double *Xi, double *b, double z[2]) +{ + double Yi = *b * *Xi + z[0]; + z[0] = z[1]; + z[1] = *b * Yi - *Xi; + return Yi; +} +typedef struct +{ + unsigned int stages; + double *path, *z; + double imOld; +} IIRHilbert; +static inline void ProcessIIRHilbert(IIRHilbert *hil, double Xi, double *re, double *im) +{ + double imTmp; + imTmp = *re = Xi; + for (unsigned int j = 0; j < hil->stages; j++) + { + imTmp = IIR2thOrder(&imTmp, &hil->path[j], &hil->z[2 * j]); + *re = IIR2thOrder(re, &hil->path[hil->stages + j], &hil->z[hil->stages * 2 + 2 * j]); + } + *im = hil->imOld; + hil->imOld = imTmp; +} +static float NSEEL_CGEN_CALL iirHilbertProcess(float *blocks, float *offptr, float *x, float *y) +{ + uint32_t offs1 = (uint32_t)(*offptr + NSEEL_CLOSEFACTOR); + IIRHilbert *hil = (IIRHilbert *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs1); + uint32_t offs2 = (uint32_t)(*y + NSEEL_CLOSEFACTOR); + float *out = (float *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs2); + double re, im; + ProcessIIRHilbert(hil, *x, &re, &im); + out[0] = re; + out[1] = im; + return 2; +} +static float NSEEL_CGEN_CALL iirHilbertInit(void *opaque, INT_PTR num_param, float **parms) +{ + compileContext *c = (compileContext *)opaque; + float *blocks = c->ram_state; + float *start1 = parms[0]; + int32_t offs1 = (int32_t)(*start1 + NSEEL_CLOSEFACTOR); + IIRHilbert *hil = (IIRHilbert *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs1); + unsigned int numStages = (unsigned int)(*parms[1] + NSEEL_CLOSEFACTOR); + float transition = *parms[2]; + unsigned int numCoefs = numStages << 1; + size_t memSize = sizeof(IIRHilbert) + (numCoefs + (numStages << 2)) * sizeof(double); + hil->stages = numStages; + double *coefs = (double *)malloc(numCoefs * sizeof(double)); + hil->path = (double*)(hil + 1); + hil->z = hil->path + numCoefs; + memset(hil->z, 0, (hil->stages << 2) * sizeof(double)); + compute_coefs_spec_order_tbw(coefs, numCoefs, transition); + unsigned int i; + // Phase reference path coefficients + for (i = 1; i < numCoefs; i += 2) + hil->path[i >> 1] = coefs[i]; + // +90 deg path coefficients + for (i = 0; i < numCoefs; i += 2) + hil->path[hil->stages + (i >> 1)] = coefs[i]; + free(coefs); + hil->imOld = 0.0; + return (float)(1 + memSize / sizeof(float)); +} +typedef struct +{ + float data; + float maximum, minimum; +} node; +typedef struct +{ + unsigned int capacity, top; + node *items; +} stack; +static inline void insertDat(stack *s2, float val) +{ + if (!s2->top) + { + s2->items[s2->top].data = val; + s2->items[s2->top].maximum = val; + s2->items[s2->top++].minimum = val; + } + else + { + s2->items[s2->top].data = val; + s2->items[s2->top].minimum = min(val, s2->items[s2->top - 1].minimum); + s2->items[s2->top++].maximum = max(val, s2->items[s2->top - 1].maximum); + } +} +static inline void removeDat(stack *s1, stack *s2) +{ + if (s1->top) + s1->top--; + else + { + while (s2->top) + { + insertDat(s1, s2->items[s2->top - 1].data); + s2->top--; + } + s1->top--; + } +} +typedef struct mmStk +{ + stack s1, s2; + unsigned int windowSize, cnt; + void(*process)(struct mmStk *stk, float, float *, float *); +} runningMinMax; +void ProcessStkMaxLater(runningMinMax *stk, float a, float *minV, float *maxV) +{ + removeDat(&stk->s1, &stk->s2); + insertDat(&stk->s2, a); + // the maximum of both stack will be the maximum of overall window + if (stk->s1.top) + { + *minV = min(stk->s1.items[stk->s1.top - 1].minimum, stk->s2.items[stk->s2.top - 1].minimum); + *maxV = max(stk->s1.items[stk->s1.top - 1].maximum, stk->s2.items[stk->s2.top - 1].maximum); + } + else + { + *minV = stk->s2.items[stk->s2.top - 1].minimum; + *maxV = stk->s2.items[stk->s2.top - 1].maximum; + } +} +void ProcessStkBeginning(runningMinMax *stk, float a, float *minV, float *maxV) +{ + stk->cnt++; + if (stk->cnt >= stk->windowSize) + stk->process = ProcessStkMaxLater; + insertDat(&stk->s2, a); + // the maximum of both stack will be the maximum of overall window + *minV = stk->s2.items[stk->s2.top - 1].minimum; + *maxV = stk->s2.items[stk->s2.top - 1].maximum; +} +static float NSEEL_CGEN_CALL movingMinMaxProcess(float *blocks, float *offptr, float *x, float *y) +{ + uint32_t offs1 = (uint32_t)(*offptr + NSEEL_CLOSEFACTOR); + runningMinMax *stk = (runningMinMax *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs1); + uint32_t offs2 = (uint32_t)(*y + NSEEL_CLOSEFACTOR); + float *out = (float *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs2); + float minV = 0, maxV = 0; + stk->process(stk, *x, &minV, &maxV); + out[0] = minV; + out[1] = maxV; + return 2; +} +static float NSEEL_CGEN_CALL movingMinMaxInit(float *blocks, float *offptr, float *parm1) +{ + uint32_t offs1 = (uint32_t)(*offptr + NSEEL_CLOSEFACTOR); + runningMinMax *stk = (runningMinMax *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs1); + uint32_t windowSize = (uint32_t)(*parm1 + NSEEL_CLOSEFACTOR); + size_t memSize = sizeof(runningMinMax) + sizeof(node) * windowSize * 2; + stk->s1.top = 0; + stk->s1.capacity = windowSize; + stk->s2.top = 0; + stk->s2.capacity = windowSize; + stk->s1.items = (node*)(stk + 1); + stk->s2.items = (node*)(((char*)stk->s1.items) + sizeof(node) * windowSize); + stk->windowSize = windowSize; + stk->cnt = 0; + stk->process = ProcessStkBeginning; + return (float)(1 + memSize / sizeof(float)); +} +#define ItemLess(a,b) ((a)<(b)) +#define ItemMean(a,b) (((a)+(b))/2) +typedef struct +{ + float *data; //circular queue of values + int *pos; //index into `heap` for each value + int *heap; //max/median/min heap holding indexes into `data`. + int N; //allocated size. + int idx; //position in circular queue + int ct; //count of items in queue +} runningMedian; +#define minCt(m) (((m)->ct-1)/2) //count of items in minheap +#define maxCt(m) (((m)->ct)/2) //count of items in maxheap +//returns 1 if heap[i] < heap[j] +static inline int mmless(runningMedian *m, int i, int j) +{ + return ItemLess(m->data[m->heap[i]], m->data[m->heap[j]]); +} +//swaps items i&j in heap, maintains indexes +static inline int mmexchange(runningMedian *m, int i, int j) +{ + int t = m->heap[i]; + m->heap[i] = m->heap[j]; + m->heap[j] = t; + m->pos[m->heap[i]] = i; + m->pos[m->heap[j]] = j; + return 1; +} +//swaps items i&j if i 1 && i < minCt(m) && mmless(m, i + 1, i)) + ++i; + if (!mmCmpExch(m, i, i / 2)) + break; + } +} +//maintains maxheap property for all items below i/2. (negative indexes) +static inline void maxSortDown(runningMedian *m, int i) +{ + for (; i >= -maxCt(m); i *= 2) + { + if (i<-1 && i > -maxCt(m) && mmless(m, i, i - 1)) + --i; + if (!mmCmpExch(m, i / 2, i)) + break; + } +} +//maintains minheap property for all items above i, including median +//returns true if median changed +static inline int minSortUp(runningMedian *m, int i) +{ + while (i > 0 && mmCmpExch(m, i, i / 2)) + i /= 2; + return i == 0; +} +//maintains maxheap property for all items above i, including median +//returns true if median changed +static inline int maxSortUp(runningMedian *m, int i) +{ + while (i < 0 && mmCmpExch(m, i / 2, i)) + i /= 2; + return i == 0; +} +//Inserts item, maintains median in O(lg nItems) +float runningMedianInsert(runningMedian *m, float v) +{ + int isNew = (m->ct < m->N); + int p = m->pos[m->idx]; + float old = m->data[m->idx]; + m->data[m->idx] = v; + m->idx = (m->idx + 1) % m->N; + m->ct += isNew; + if (p > 0) //new item is in minHeap + { + if (!isNew && ItemLess(old, v)) + minSortDown(m, p * 2); + else if (minSortUp(m, p)) + maxSortDown(m, -1); + } + else if (p < 0) //new item is in maxheap + { + if (!isNew && ItemLess(v, old)) + maxSortDown(m, p * 2); + else if (maxSortUp(m, p)) + minSortDown(m, 1); + } + else //new item is at median + { + if (maxCt(m)) + maxSortDown(m, -1); + if (minCt(m)) + minSortDown(m, 1); + } + v = m->data[m->heap[0]]; + if ((m->ct & 1) == 0) + v = ItemMean(v, m->data[m->heap[-1]]); + return v; +} +static float NSEEL_CGEN_CALL movingMedianProcess(float *blocks, float *offptr, float *x) +{ + uint32_t offs1 = (uint32_t)(*offptr + NSEEL_CLOSEFACTOR); + runningMedian *m = (runningMedian *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs1); + return runningMedianInsert(m, *x); +} +static float NSEEL_CGEN_CALL movingMedianInit(float *blocks, float *offptr, float *parm1) +{ + uint32_t offs1 = (uint32_t)(*offptr + NSEEL_CLOSEFACTOR); + runningMedian *m = (runningMedian *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs1); + uint32_t windowSize = (uint32_t)(*parm1 + NSEEL_CLOSEFACTOR); + size_t memSize = sizeof(runningMedian) + windowSize * (sizeof(float) + sizeof(int) * 2); + m->data = (float *)(m + 1); + m->pos = (int *)(m->data + windowSize); + m->heap = m->pos + windowSize + (windowSize / 2); //points to middle of storage. + m->N = windowSize; + m->ct = m->idx = 0; + while (windowSize--) //set up initial heap fill pattern: median,max,min,max,... + { + m->pos[windowSize] = ((windowSize + 1) / 2) * ((windowSize & 1) ? -1 : 1); + m->heap[m->pos[windowSize]] = windowSize; + } + return (float)(1 + memSize / sizeof(float)); +} void runStateArburg(double *Z, double *b, double x, int n) { for (int j = 1; j < n; j++) // Update conditions @@ -808,13 +1228,13 @@ double predictArburg(double *Z, double *a, int n) Z[n - 1] = -a[n] * Yi; return Yi; // Write to output } -void TrainArburg(char *bg, float *xn, unsigned int xLen) +void TrainArburg(char *bg, float *xn, int positionStart, int positionEnd) { unsigned int i, j; char getPredictionState = *bg; unsigned int *flag = (unsigned int*)(bg + 1); const unsigned int _mCoefficientsNumber = *flag; - unsigned int lenM1 = xLen - 1; + int to = positionEnd + 1; // Creates internal variables with desirable length double *predictionCoefficients = (double*)(flag + 1); @@ -836,12 +1256,12 @@ void TrainArburg(char *bg, float *xn, unsigned int xLen) for (j = 0; j <= _mCoefficientsNumber; j++) { _c[j] = 0.0; - for (i = 0; i < xLen - j; i++) - _c[j] += xn[i] * xn[i + j]; + for (i = 0; i <= positionEnd - j; i++) + _c[j] += xn[i + positionStart] * xn[i + positionStart + j]; } unsigned int _iIterationCounter = 0; predictionCoefficients[0] = 1.0; - _g[0] = 2.0 * _c[0] - fabs(xn[0]) * fabs(xn[0]) - fabs(xn[lenM1]) * fabs(xn[lenM1]); + _g[0] = 2.0 * _c[0] - fabs(xn[0 + positionStart]) * fabs(xn[0 + positionStart]) - fabs(xn[positionEnd + positionStart]) * fabs(xn[positionEnd + positionStart]); _g[1] = 2.0 * _c[1]; // the paper says r[1], error in paper? _r[0] = 2.0 * _c[1]; @@ -850,13 +1270,16 @@ void TrainArburg(char *bg, float *xn, unsigned int xLen) { // Computes vector of reflection coefficients. For details see step 1 of algorithm on page 3 of the paper double nominator = 0.0; - double denominator = (double)FLT_EPSILON; + double denominator = ((double)FLT_EPSILON) * 100.0; for (i = 0; i <= _iIterationCounter + 1; i++) { nominator += predictionCoefficients[i] * _g[(_iIterationCounter + 1) - i]; denominator += predictionCoefficients[i] * _g[i]; } - reflectionCoefficient[_iIterationCounter] = -nominator / denominator; + if (fabs(nominator) < ((double)FLT_EPSILON) * 10.0 && fabs(denominator) < ((double)FLT_EPSILON) * 10.0) + reflectionCoefficient[_iIterationCounter] = -1.0 + FLT_EPSILON; + else + reflectionCoefficient[_iIterationCounter] = -nominator / denominator; // Updates vector of prediction coefficients. For details see step 2 of algorithm on page 3 of the paper memcpy(tmp, predictionCoefficients, (_mCoefficientsNumber + 1) * sizeof(double)); for (i = 0; i <= _iIterationCounter + 1; i++) @@ -868,10 +1291,11 @@ void TrainArburg(char *bg, float *xn, unsigned int xLen) { memset(forwardState, 0, (_mCoefficientsNumber + 1) * sizeof(double)); memset(backwardState, 0, (_mCoefficientsNumber + 1) * sizeof(double)); - for (i = 0; i < xLen; i++) + int idx2 = to - 1 + positionStart; + for (int i = positionStart; i < to; i++) { runStateArburg(forwardState, predictionCoefficients, xn[i], _mCoefficientsNumber); // Forward - runStateArburg(backwardState, predictionCoefficients, xn[lenM1 - i], _mCoefficientsNumber); // Backward + runStateArburg(backwardState, predictionCoefficients, xn[idx2 - i], _mCoefficientsNumber); // Backward } } break; @@ -879,22 +1303,22 @@ void TrainArburg(char *bg, float *xn, unsigned int xLen) // Updates vector r. For details see step 5 of algorithm on page 3 of the paper memcpy(tmp, _r, (_mCoefficientsNumber + 1) * sizeof(double)); for (i = 0; i <= _iIterationCounter - 1; i++) - _r[i + 1] = tmp[i] - xn[i] * xn[_iIterationCounter] - xn[lenM1 - i] * xn[lenM1 - _iIterationCounter]; + _r[i + 1] = tmp[i] - xn[i + positionStart] * xn[_iIterationCounter + positionStart] - xn[positionEnd - i + positionStart] * xn[positionEnd - _iIterationCounter + positionStart]; _r[0] = 2.0 * _c[_iIterationCounter + 1]; // Calculates vector deltaRAndAProduct. For details see step 6 of algorithm on page 3 of the paper - unsigned int posEnd = lenM1 - _iIterationCounter; - unsigned int _iIterationCounterA1 = _iIterationCounter + 1; + int posBegin = _iIterationCounter; + int posEnd = positionEnd - _iIterationCounter; for (i = 0; i <= _iIterationCounter; i++) { double innerProduct1 = 0.0; double innerProduct2 = 0.0; for (j = 0; j <= _iIterationCounter; j++) { - innerProduct1 += xn[_iIterationCounter - j] * predictionCoefficients[j]; - innerProduct2 += xn[posEnd + j] * predictionCoefficients[j]; + innerProduct1 += xn[posBegin - j + positionStart] * predictionCoefficients[j]; + innerProduct2 += xn[posEnd + j + positionStart] * predictionCoefficients[j]; } - _deltaRAndAProduct[i] = -xn[_iIterationCounter - i] * innerProduct1 - xn[posEnd + i] * innerProduct2; + _deltaRAndAProduct[i] = -xn[posBegin - i + positionStart] * innerProduct1 - xn[posEnd + i + positionStart] * innerProduct2; } // Updates vector g. For details see step 7 of algorithm on page 3 of the paper memcpy(tmp, _g, (_mCoefficientsNumber + 2) * sizeof(double)); @@ -923,29 +1347,9 @@ static float NSEEL_CGEN_CALL arburgTrainModel(void *opaque, INT_PTR num_param, f *burg = (char)(*parms[2] + NSEEL_CLOSEFACTOR); unsigned int *flag = (unsigned int*)(burg + 1); *flag = (unsigned int)(*parms[1] + NSEEL_CLOSEFACTOR); - uint32_t xLen = (uint32_t)(*parms[4] + NSEEL_CLOSEFACTOR); - TrainArburg(burg, xn, xLen); - return 0.0f; -} -static float NSEEL_CGEN_CALL arburgGetPredictionReflectionCoeff(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - char *bg = (char*)__NSEEL_RAMAlloc(blocks, (uint64_t)offs); - int32_t offs1 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float *pdC = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *rfC = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - unsigned int *flag = (unsigned int*)(bg + 1); - const unsigned int _mCoefficientsNumber = *flag; - double *predictionCoefficients = (double*)(flag + 1); - double *reflectionCoefficient = predictionCoefficients + (_mCoefficientsNumber + 1); - for (unsigned int i = 0; i < _mCoefficientsNumber + 1; i++) - { - pdC[i] = (float)predictionCoefficients[i]; - rfC[i] = (float)reflectionCoefficient[i]; - } + int32_t from = (int32_t)(*parms[4] + NSEEL_CLOSEFACTOR); + int32_t to = (int32_t)(*parms[5] + NSEEL_CLOSEFACTOR); + TrainArburg(burg, xn, from, to); return 0.0f; } static float NSEEL_CGEN_CALL arburgPredictBackward(float *blocks, float *start) @@ -1195,7 +1599,7 @@ static float NSEEL_CGEN_CALL eel_max(float *blocks, float *start, float *length float ma = ptr[0]; for (uint32_t i = 1; i < (uint32_t)(*length + NSEEL_CLOSEFACTOR); i++) { - if (ptr[i] > ma) + if (fabsf(ptr[i]) > fabsf(ma)) ma = ptr[i]; } return ma; @@ -1206,7 +1610,7 @@ static float NSEEL_CGEN_CALL eel_min(float *blocks, float *start, float *length float mi = ptr[0]; for (uint32_t i = 1; i < (uint32_t)(*length + NSEEL_CLOSEFACTOR); i++) { - if (ptr[i] < mi) + if (fabsf(ptr[i]) < fabsf(mi)) mi = ptr[i]; } return mi; @@ -1312,7 +1716,7 @@ static float * NSEEL_CGEN_CALL eel_convolve_c(float *blocks, float *dest, float WDL_fft_complexmul((WDL_FFT_COMPLEX*)destptr, (WDL_FFT_COMPLEX*)srcptr, (len / 2)&~1); return dest; } -int32_t nseel_stringsegments_tobuf(char *bufOut, int32_t bufout_sz, eelStringSegmentRec *list) // call with NULL to calculate size, or non-null to generate to buffer (returning size used) +static inline int32_t nseel_stringsegments_tobuf(char *bufOut, int32_t bufout_sz, eelStringSegmentRec *list) // call with NULL to calculate size, or non-null to generate to buffer (returning size used) { int32_t pos = 0; while (list) @@ -1328,98 +1732,165 @@ int32_t nseel_stringsegments_tobuf(char *bufOut, int32_t bufout_sz, eelStringSeg } return pos; } -void Initeel_string_context_state(eel_string_context_state *st) +static inline void eelThread_start(abstractThreads *info) { - st->inuse = 0; - st->slot = 2; - st->map = (int32_t*)malloc(st->slot * sizeof(s_str)); - st->m_literal_strings = (s_str*)malloc(st->slot * sizeof(s_str)); - for (int32_t i = 0; i < st->slot; i++) - { - st->map[i] = 0; - st->m_literal_strings[i] = 0; - } -} -void Freeel_string_context_state(eel_string_context_state *st) -{ - for (int32_t i = 0; i < st->slot; i++) - s_str_destroy(&st->m_literal_strings[i]); - free(st->map); - free(st->m_literal_strings); - st->slot = 0; - st->inuse = 0; + // ensure worker is waiting + pthread_mutex_lock(&(info->work_mtx)); + // set job information & state + info->state = EEL_WORKING; + // wake-up signal + pthread_cond_signal(&(info->work_cond)); + pthread_mutex_unlock(&(info->work_mtx)); } -int32_t arySearch(int32_t *array, int32_t N, int32_t x) +static inline void eelThread_wait(abstractThreads *info) { - for (int32_t i = 0; i < N; i++) + while (1) { - if (array[i] == x) - return i; + pthread_cond_wait(&(info->boss_cond), &(info->boss_mtx)); + if (EEL_IDLE == info->state) + break; } - return -1; } -#define FLOIDX 20000 -void* GetStringForIndex(eel_string_context_state *st, float val, int32_t write) +void* GetStringForIndex(eel_builtin_memRegion *st, float val, int32_t write) { - int32_t castedValue = (int32_t)(val + 0.5f); - if (castedValue < FLOIDX) - return 0; - int32_t idx = arySearch(st->map, st->slot, castedValue); - if (idx < 0) - return 0; + int32_t idx = (int32_t)(val + 0.5f); if (!write) { - s_str *tmp = &st->m_literal_strings[idx]; + s_str *tmp = &st->memRegion[idx]; const char *s = s_str_c_str(tmp); return (void*)s; } else - return (void*)&st->m_literal_strings[idx]; + return (void*)&st->memRegion[idx]; } -int32_t AddString(eel_string_context_state *st, char *ns) +static inline int32_t getEmptyRegion(eel_builtin_memRegion *st) { - const int32_t l = strlen(ns); int32_t x; - for (x = 0; x < st->inuse; x++) - { - s_str *tmp = &st->m_literal_strings[x]; - const char *s = s_str_c_str(tmp); - if (strlen(s) == l && !strcmp(s, ns)) + for (x = 0; x < st->slot; x++) + if (!st->memRegion[x]) break; - } - if (x < st->inuse) - free(ns); - else + if (st->inuse > (st->slot - 1)) { - int32_t currentSlot = st->inuse; - if (currentSlot > (st->slot - 1)) + st->slot += 10; + st->memRegion = (void**)realloc(st->memRegion, st->slot * sizeof(void*)); + st->memRegion[st->inuse] = 0; + st->type = (char*)realloc(st->type, st->slot * sizeof(char)); + for (int32_t i = st->inuse; i < st->slot; i++) { - st->slot++; - st->m_literal_strings = (s_str*)realloc(st->m_literal_strings, st->slot * sizeof(s_str)); - st->m_literal_strings[st->inuse] = 0; - st->map = (int32_t*)realloc(st->map, st->slot * sizeof(int32_t)); - st->map[st->inuse] = 0; + st->memRegion[i] = 0; + st->type[i] = 0; } - st->m_literal_strings[st->inuse] = s_str_create_from_c_str(ns); - st->map[st->inuse] = x + FLOIDX; - st->inuse++; + } + st->inuse++; + return x; +} +void DeleteSlot(eel_builtin_memRegion *st, float val) +{ + int32_t idx = (int32_t)(val + 0.5f); + if (!st->memRegion[idx]) + goto decrement; + if (st->type[idx] == 0) + s_str_destroy(&st->memRegion[idx]); + else if (st->type[idx] == 1) + { + FFTConvolver1x1 *conv = (FFTConvolver1x1 *)st->memRegion[idx]; + FFTConvolver1x1Free(conv); + free(conv); + } + else if (st->type[idx] == 2) + { + FFTConvolver2x2 *conv = (FFTConvolver2x2 *)st->memRegion[idx]; + FFTConvolver2x2Free(conv); + free(conv); + } + else if (st->type[idx] == 3) + { + FFTConvolver2x4x2 *conv = (FFTConvolver2x4x2 *)st->memRegion[idx]; + FFTConvolver2x4x2Free(conv); + free(conv); + } + else if (st->type[idx] == 4) + { + abstractThreads *ptr = (abstractThreads *)st->memRegion[idx]; + // ensure the worker is waiting + if (ptr->state == EEL_WORKING) + eelThread_wait(ptr); + pthread_mutex_lock(&(ptr->work_mtx)); + ptr->state = EEL_GET_OFF_FROM_WORK; + // wake-up signal + pthread_cond_signal(&(ptr->work_cond)); + pthread_mutex_unlock(&(ptr->work_mtx)); + // wait for thread to exit + pthread_join(ptr->threadID, NULL); + pthread_mutex_destroy(&(ptr->work_mtx)); + pthread_cond_destroy(&(ptr->work_cond)); + pthread_mutex_unlock(&(ptr->boss_mtx)); + pthread_mutex_destroy(&(ptr->boss_mtx)); + pthread_cond_destroy(&(ptr->boss_cond)); + NSEEL_code_free(ptr->codePtr); + free(ptr); + } + else + free(st->memRegion[idx]); + st->memRegion[idx] = 0; +decrement: + st->inuse--; +} +void FreeRegion_context(eel_builtin_memRegion *st) +{ + for (int32_t i = 0; i < st->slot; i++) + DeleteSlot(st, (float)i + 0.1f); + free(st->type); + free(st->memRegion); + st->slot = 0; + st->inuse = 0; +} +int32_t AddData(eel_builtin_memRegion *st, void *ns, char type) +{ + int32_t x = getEmptyRegion(st); + if (type == 0) + { + st->memRegion[x] = s_str_create_from_c_str((char *)ns); free(ns); } - return x + FLOIDX; + else + st->memRegion[x] = ns; + st->type[x] = type; + return x; } static float addStringCallback(void *opaque, eelStringSegmentRec *list) { compileContext *c = (compileContext*)opaque; - eel_string_context_state *_this = c->m_string_context; // could probably do a faster implementation using AddRaw() etc but this should also be OK int32_t sz = nseel_stringsegments_tobuf(NULL, 0, list); char *ns = (char*)malloc(sz + 32); memset(ns, 0, sz + 32); sz = nseel_stringsegments_tobuf(ns, sz, list) + 1; ns = (char*)realloc(ns, sz); - int32_t id = AddString(_this, ns); + int32_t id = AddData(c->region_context, (void*)ns, 0); return (float)id; } +static const xpr *xConstant[19] = { &xZero, &xOne, &xTwo, &xTen, &xPinf, &xMinf, &xNaN, &xPi, &xPi2, &xPi4, &xEe, &xSqrt2, &xLn2, &xLn10, &xLog2_e, &xLog2_10, &xLog10_e, &HPA_MIN, &HPA_MAX }; +static const char xVarName[19][10] = { "$hZero", "$hOne", "$hTwo", "$hTen", "$hPinf", "$hMinf", "$hNaN", "$hPi", "$hPi2", "$hPi4", "$hEe", "$hSqrt2", "$hLn2", "$hLn10", "$hLog2_e", "$hLog2_10", "$hLog10_e", "$HPA_MIN", "$HPA_MAX" }; +static inline void InitRegion_context(eel_builtin_memRegion *st) +{ + st->inuse = 0; + st->slot = 30; + st->type = (char *)malloc(st->slot * sizeof(char)); + st->memRegion = (s_str *)malloc(st->slot * sizeof(s_str)); + for (int32_t i = 0; i < st->slot; i++) + { + st->type[i] = 0; + st->memRegion[i] = 0; + } + for (int32_t i = 0; i < 19; i++) + { + xpr br = *xConstant[i]; + void *ptr = malloc(sizeof(xpr)); + memcpy(ptr, (void *)&br, sizeof(xpr)); + int32_t id = AddData(st, ptr, 5); + } +} static int32_t eel_string_match(compileContext *c, const char *fmt, const char *msg, int32_t match_fmt_pos, int32_t ignorecase, const char *fmt_endptr, const char *msg_endptr, int32_t num_fmt_parms, float **fmt_parms) { // %d=12345 @@ -1514,7 +1985,7 @@ static int32_t eel_string_match(compileContext *c, const char *fmt, const char * { if (varOut == &vv) // %{#foo}c { - s_str *wr = (s_str*)GetStringForIndex(c->m_string_context, vv, 1); + s_str *wr = (s_str*)GetStringForIndex(c->region_context, vv, 1); if (wr) s_str_destroy(wr); *wr = s_str_create_from_c_str(msg); @@ -1585,7 +2056,7 @@ static int32_t eel_string_match(compileContext *c, const char *fmt, const char * { if (fmt_char == 's') { - s_str *wr = (s_str*)GetStringForIndex(c->m_string_context, *varOut, 1); + s_str *wr = (s_str*)GetStringForIndex(c->region_context, *varOut, 1); if (wr) s_str_destroy(wr); if (wr) @@ -1622,7 +2093,7 @@ static int32_t eel_string_match(compileContext *c, const char *fmt, const char * lstrcpyn_safe(tmp, msg, min(len + 1, (int32_t)sizeof(tmp))); if (varOut == &vv) { - s_str *wr = (s_str*)GetStringForIndex(c->m_string_context, vv, 1); + s_str *wr = (s_str*)GetStringForIndex(c->region_context, vv, 1); if (wr) s_str_destroy(wr); *wr = s_str_create_from_c_str(tmp); @@ -1651,13 +2122,40 @@ static int32_t eel_string_match(compileContext *c, const char *fmt, const char * } } } +static float NSEEL_CGEN_CALL getCosineWindows(void *opaque, INT_PTR num_param, float **parms) +{ + compileContext *c = (compileContext *)opaque; + float *blocks = c->ram_state; + float *start1 = parms[0]; + int32_t offs2 = (int32_t)(*start1 + NSEEL_CLOSEFACTOR); + float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); + float *fmt_index = parms[2]; + const char *fmt = (const char *)GetStringForIndex(c->region_context, *fmt_index, 0); + float *start2 = parms[1]; + genWnd(indexer, (int32_t)(*start2 + NSEEL_CLOSEFACTOR), fmt); + return 0; +} +static float NSEEL_CGEN_CALL getAsymmetricCosine(void *opaque, INT_PTR num_param, float **parms) +{ + compileContext *c = (compileContext *)opaque; + float *blocks = c->ram_state; + uint32_t offs1 = (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR); + float *analysisWnd = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); + uint32_t offs2 = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); + float *synthesisWnd = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); + int32_t fftlen = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); + int32_t ovpSmps = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); + float tf_res = *parms[4]; + getAsymmetricWindow(analysisWnd, synthesisWnd, fftlen, ovpSmps, tf_res); + return 0; +} static float NSEEL_CGEN_CALL _eel_match(void *opaque, INT_PTR num_parms, float **parms) { if (num_parms >= 2) { compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - const char *msg = (const char*)GetStringForIndex(c->m_string_context, *parms[1], 0); + const char *fmt = (const char*)GetStringForIndex(c->region_context, *parms[0], 0); + const char *msg = (const char*)GetStringForIndex(c->region_context, *parms[1], 0); if (fmt && msg) return eel_string_match(c, fmt, msg, 0, 0, fmt + strlen(fmt), msg + strlen(msg), (int32_t)num_parms - 2, parms + 2) ? 1.0f : 0.0f; } @@ -1668,8 +2166,8 @@ static float NSEEL_CGEN_CALL _eel_matchi(void *opaque, INT_PTR num_parms, float if (num_parms >= 2) { compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - const char *msg = (const char*)GetStringForIndex(c->m_string_context, *parms[1], 0); + const char *fmt = (const char*)GetStringForIndex(c->region_context, *parms[0], 0); + const char *msg = (const char*)GetStringForIndex(c->region_context, *parms[1], 0); if (fmt && msg) return eel_string_match(opaque, fmt, msg, 0, 1, fmt + strlen(fmt), msg + strlen(msg), (int32_t)num_parms - 2, parms + 2) ? 1.0f : 0.0f; } @@ -1687,7 +2185,7 @@ static int32_t eel_validate_format_specifier(const char *fmt_in, char *typeOut, { const char c = *fmt++; if (fmtOut_sz < 2) return 0; - if (c == 'f' || c == 'e' || c == 'E' || c == 'g' || c == 'G' || c == 'd' || c == 'u' || c == 'x' || c == 'X' || c == 'c' || c == 'C' || c == 's' || c == 'S' || c == 'i') + if (c == 'f' || c == 'F' || c == 'e' || c == 'E' || c == 'g' || c == 'G' || c == 'd' || c == 'u' || c == 'x' || c == 'X' || c == 'c' || c == 'C' || c == 's' || c == 'S' || c == 'i') { *typeOut = c; fmtOut[0] = c; @@ -1751,15 +2249,25 @@ int32_t eel_format_strings(void *opaque, const char *fmt, const char *fmt_end, c float v = varptr ? (float)*varptr : 0.0f; if (ct == 'x' || ct == 'X' || ct == 'd' || ct == 'u' || ct == 'i') { - stbsp_snprintf(op, 64, fs, (int32_t)(v)); + stbsp_snprintf(op, 128, fs, (int32_t)(v)); } else if (ct == 's' || ct == 'S') { compileContext *c = (compileContext*)opaque; - const char *str = (const char*)GetStringForIndex(c->m_string_context, v, 0); + const char *str = (const char*)GetStringForIndex(c->region_context, v, 0); const size_t maxl = (size_t)(buf + buf_sz - 2u - op); stbsp_snprintf(op, maxl, fs, str ? str : ""); } + else if (ct == 'F') + { + compileContext *c = (compileContext*)opaque; + int32_t idx = (int32_t)(v + NSEEL_CLOSEFACTOR); + xpr *br = (xpr *)c->region_context->memRegion[idx]; + char *str = xpr_asprint(*br, 1, 0, (XDIM * 48) / 10 - 2); + int maxl = strlen(str); + stbsp_snprintf(op, min(maxl + 1, 128), "%s", str ? str : ""); + free(str); + } else if (ct == 'c') { *op++ = (char)(int32_t)v; @@ -1781,7 +2289,7 @@ int32_t eel_format_strings(void *opaque, const char *fmt, const char *fmt_end, c *op = 0; } else - stbsp_snprintf(op, 64, fs, v); + stbsp_snprintf(op, 128, fs, v); while (*op) op++; fmt += l; } @@ -1796,7 +2304,7 @@ float NSEEL_CGEN_CALL _eel_printf(void *opaque, INT_PTR num_param, float **parms if (num_param > 0) { compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *(parms[0]), 0); + const char *fmt = (const char*)GetStringForIndex(c->region_context, *(parms[0]), 0); if (fmt) { int32_t stringLength = strlen(fmt); @@ -1825,10 +2333,10 @@ float NSEEL_CGEN_CALL _eel_sprintf(void *opaque, INT_PTR num_param, float **parm if (num_param > 0) { compileContext *c = (compileContext*)opaque; - s_str *wr = (s_str*)GetStringForIndex(c->m_string_context, *(parms[0]), 1); + s_str *wr = (s_str*)GetStringForIndex(c->region_context, *(parms[0]), 1); if (wr) s_str_destroy(wr); - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *(parms[1]), 0); + const char *fmt = (const char*)GetStringForIndex(c->region_context, *(parms[1]), 0); if (wr && fmt) { int32_t stringLength = strlen(fmt); @@ -1882,8 +2390,8 @@ static float _eel_strcmp_int(const char *a, int32_t a_len, const char *b, int32_ static float NSEEL_CGEN_CALL _eel_strncmp(void *opaque, float *aa, float *bb, float *maxlen) { compileContext *c = (compileContext*)opaque; - const char *a = (const char*)GetStringForIndex(c->m_string_context, *aa, 0); - const char *b = (const char*)GetStringForIndex(c->m_string_context, *bb, 0); + const char *a = (const char*)GetStringForIndex(c->region_context, *aa, 0); + const char *b = (const char*)GetStringForIndex(c->region_context, *bb, 0); if (!a || !b) { const char *badStr = "strncmp: bad specifier(s)"; @@ -1900,8 +2408,8 @@ static float NSEEL_CGEN_CALL _eel_strncmp(void *opaque, float *aa, float *bb, fl static float NSEEL_CGEN_CALL _eel_strnicmp(void *opaque, float *aa, float *bb, float *maxlen) { compileContext *c = (compileContext*)opaque; - const char *a = (const char*)GetStringForIndex(c->m_string_context, *aa, 0); - const char *b = (const char*)GetStringForIndex(c->m_string_context, *bb, 0); + const char *a = (const char*)GetStringForIndex(c->region_context, *aa, 0); + const char *b = (const char*)GetStringForIndex(c->region_context, *bb, 0); if (!a || !b) { const char *badStr = "strnicmp: bad specifier(s)"; @@ -1926,7 +2434,7 @@ static float NSEEL_CGEN_CALL _eel_stricmp(void *opaque, float *strOut, float *fm static float NSEEL_CGEN_CALL _eel_strlen(void *opaque, float *fmt_index) { compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *fmt_index, 0); + const char *fmt = (const char*)GetStringForIndex(c->region_context, *fmt_index, 0); if (fmt) return (float)strlen(fmt); return 0.0f; @@ -1961,7 +2469,7 @@ static float NSEEL_CGEN_CALL _eel_cd(void *opaque, float *fmt_index) if (opaque) { compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *fmt_index, 0); + const char *fmt = (const char*)GetStringForIndex(c->region_context, *fmt_index, 0); if (fmt) #ifdef _WIN32 return (float)_chdir(fmt); @@ -1977,7 +2485,7 @@ static float NSEEL_CGEN_CALL _eel_eval(void *opaque, float *s) NSEEL_CODEHANDLE ch = NULL; if (r) { - const char *str = (const char*)GetStringForIndex(r->m_string_context, *s, 0); + const char *str = (const char*)GetStringForIndex(r->region_context, *s, 0); if (!str) { const char *badStr = "eval() passed invalid string handle\n"; @@ -2009,7 +2517,7 @@ static float NSEEL_CGEN_CALL _eel_evalFile(void *opaque, float *s) compileContext *r = (compileContext*)opaque; if (r) { - const char *str = (const char*)GetStringForIndex(r->m_string_context, *s, 0); + const char *str = (const char*)GetStringForIndex(r->region_context, *s, 0); if (!str) { const char *badStr = "eval() passed invalid string handle\n"; @@ -2059,10 +2567,10 @@ static float NSEEL_CGEN_CALL _eel_base64_encode(void *opaque, float *destination if (opaque) { compileContext *c = (compileContext*)opaque; - s_str *dest = (s_str*)GetStringForIndex(c->m_string_context, *destination, 1); + s_str *dest = (s_str*)GetStringForIndex(c->region_context, *destination, 1); if (dest) s_str_destroy(dest); - s_str *srcClass = (s_str*)GetStringForIndex(c->m_string_context, *source, 1); + s_str *srcClass = (s_str*)GetStringForIndex(c->region_context, *source, 1); size_t len = (size_t)(*maxlen + NSEEL_CLOSEFACTOR); if (len > s_str_capacity(srcClass)) return -1; @@ -2130,8 +2638,8 @@ static float NSEEL_CGEN_CALL _eel_base64_encodeBinaryToTextFile(void *opaque, fl if (opaque) { compileContext *c = (compileContext*)opaque; - const char *dest = (const char*)GetStringForIndex(c->m_string_context, *destination, 0); - const char *src = (const char *)GetStringForIndex(c->m_string_context, *source, 0); + const char *dest = (const char*)GetStringForIndex(c->region_context, *destination, 0); + const char *src = (const char *)GetStringForIndex(c->region_context, *source, 0); if (dest && src) { unsigned char *buffer = 0; @@ -2172,10 +2680,10 @@ static float NSEEL_CGEN_CALL _eel_base64_decode(void *opaque, float *destination if (opaque) { compileContext *c = (compileContext*)opaque; - s_str *dest = (s_str*)GetStringForIndex(c->m_string_context, *destination, 1); + s_str *dest = (s_str*)GetStringForIndex(c->region_context, *destination, 1); if (dest) s_str_destroy(dest); - s_str *srcClass = (s_str*)GetStringForIndex(c->m_string_context, *source, 1); + s_str *srcClass = (s_str*)GetStringForIndex(c->region_context, *source, 1); size_t len = (size_t)(*maxlen + NSEEL_CLOSEFACTOR); if (len > s_str_capacity(srcClass)) return -1; @@ -2244,8 +2752,8 @@ static float NSEEL_CGEN_CALL _eel_base64_decodeBinaryToTextFile(void *opaque, fl if (opaque) { compileContext *c = (compileContext*)opaque; - const char *dest = (const char*)GetStringForIndex(c->m_string_context, *destination, 0); - const char *src = (const char *)GetStringForIndex(c->m_string_context, *source, 0); + const char *dest = (const char*)GetStringForIndex(c->region_context, *destination, 0); + const char *src = (const char *)GetStringForIndex(c->region_context, *source, 0); if (dest && src) { unsigned char *buffer = 0; @@ -2281,12 +2789,12 @@ static float NSEEL_CGEN_CALL _eel_base64_decodeBinaryToTextFile(void *opaque, fl } return 0.0f; } -static float NSEEL_CGEN_CALL _eel_delete_all_strings(void *opaque, INT_PTR num_param, float **parms) +static float NSEEL_CGEN_CALL _eel_resetSysMemRegion(void *opaque, INT_PTR num_param, float **parms) { compileContext *c = (compileContext*)opaque; - eel_string_context_state *state = c->m_string_context; - Freeel_string_context_state(state); - Initeel_string_context_state(state); + eel_builtin_memRegion *state = c->region_context; + FreeRegion_context(state); + InitRegion_context(state); return 0.0f; } int32_t get_float(char *val, float *F) @@ -2334,7 +2842,7 @@ float* string2FloatArray(char *frArbitraryEqString, int32_t *elements) static float NSEEL_CGEN_CALL _eel_importFloatArrayFromString(void *opaque, float *fn_index, float *pointer) { compileContext *c = (compileContext*)opaque; - const char *FLTBuf = (const char*)GetStringForIndex(c->m_string_context, *fn_index, 0); + const char *FLTBuf = (const char*)GetStringForIndex(c->region_context, *fn_index, 0); uint32_t offs1 = (uint32_t)(*pointer + NSEEL_CLOSEFACTOR); float *userspaceFLT = __NSEEL_RAMAlloc(c->ram_state, offs1); int32_t elements; @@ -2754,7 +3262,7 @@ static float NSEEL_CGEN_CALL _eel_iirBandSplitterInit(void *opaque, INT_PTR num_ if (num_param > 9) return -1; size_t requireMemSize; - void *ptr = 0; + void *ptr; if (num_param == 3) { requireMemSize = sizeof(LinkwitzRileyCrossover); @@ -2803,7 +3311,7 @@ static float NSEEL_CGEN_CALL _eel_iirBandSplitterInit(void *opaque, INT_PTR num_ init7BandsCrossover(bps, fs, *parms[2], *parms[3], *parms[4], *parms[5], *parms[6], *parms[7]); ptr = bps; } - else if (num_param == 9) + else { requireMemSize = sizeof(EightBandsCrossover); EightBandsCrossover *bps = (EightBandsCrossover*)malloc(requireMemSize); @@ -2913,38 +3421,18 @@ static float NSEEL_CGEN_CALL _eel_iirBandSplitterProcess(void *opaque, INT_PTR n } return 1; } -#include "eel_matrix.h" -#include "numericSys/FFTConvolver.h" static float NSEEL_CGEN_CALL _eel_initfftconv1d(void *opaque, INT_PTR num_param, float **parms) { compileContext *c = (compileContext*)opaque; float *blocks = c->ram_state; - if (c->numberOfConvolver > 1024 - 1) - return -1; - uint32_t ranN; - while (1) - { - ranN = (uint32_t)(nseel_int_rand(1.0f) * 1024.0); - uint32_t counter = 0; - for (uint32_t i = 0; i < c->numberOfConvolver; i++) - { - if (ranN == c->convolverMap[i]) - { - counter++; - break; - } - } - if (!counter) - break; - } - void *ptr = 0; - uint32_t convType; + void *ptr; + char convType; if (num_param == 3) convType = 1; else if (num_param == 4) convType = 2; else if (num_param == 6) - convType = 4; + convType = 3; else return -2; uint32_t latency = (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR); @@ -2958,7 +3446,7 @@ static float NSEEL_CGEN_CALL _eel_initfftconv1d(void *opaque, INT_PTR num_param, FFTConvolver1x1LoadImpulseResponse(conv, latency, impulseresponse, irLen); ptr = (void*)conv; } - if (convType == 2) + else if (convType == 2) { uint32_t offs1 = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); uint32_t offs2 = (uint32_t)(*parms[3] + NSEEL_CLOSEFACTOR); @@ -2969,7 +3457,7 @@ static float NSEEL_CGEN_CALL _eel_initfftconv1d(void *opaque, INT_PTR num_param, FFTConvolver2x2LoadImpulseResponse(conv, latency, leftImp, rightImp, irLen); ptr = (void*)conv; } - if (convType == 4) + else { uint32_t offs1 = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); uint32_t offs2 = (uint32_t)(*parms[3] + NSEEL_CLOSEFACTOR); @@ -2984,88 +3472,16 @@ static float NSEEL_CGEN_CALL _eel_initfftconv1d(void *opaque, INT_PTR num_param, FFTConvolver2x4x2LoadImpulseResponse(conv, latency, LL, LR, RL, RR, irLen); ptr = (void*)conv; } - c->numberOfConvolver++; - int32_t idx = c->numberOfConvolver - 1; - if (idx) - { - c->convolverMap = (uint32_t*)realloc(c->convolverMap, c->numberOfConvolver * sizeof(uint32_t)); - c->convolverType = (uint32_t*)realloc(c->convolverType, c->numberOfConvolver * sizeof(uint32_t)); - c->convolverSink = (void**)realloc(c->convolverSink, c->numberOfConvolver * sizeof(void*)); - } - else - { - c->convolverMap = (uint32_t*)malloc(c->numberOfConvolver * sizeof(uint32_t)); - c->convolverType = (uint32_t*)malloc(c->numberOfConvolver * sizeof(uint32_t)); - c->convolverSink = (void**)malloc(c->numberOfConvolver * sizeof(void*)); - } - c->convolverMap[idx] = ranN; - c->convolverType[idx] = convType; - c->convolverSink[idx] = ptr; - return (float)ranN; -} -static float NSEEL_CGEN_CALL _eel_deletefftconv1d(void *opaque, float *v) -{ - compileContext *c = (compileContext*)opaque; - if (!c->convolverMap) - return -1; - int32_t idx = arySearch(c->convolverMap, c->numberOfConvolver, (int32_t)(*v + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return -2; - void *ptr = c->convolverSink[idx]; - int32_t convType = c->convolverType[idx]; - if (convType == 1) - { - FFTConvolver1x1 *conv = (FFTConvolver1x1*)ptr; - FFTConvolver1x1Free(conv); - free(conv); - } - if (convType == 2) - { - FFTConvolver2x2 *conv = (FFTConvolver2x2*)ptr; - FFTConvolver2x2Free(conv); - free(conv); - } - if (convType == 4) - { - FFTConvolver2x4x2 *conv = (FFTConvolver2x4x2*)ptr; - FFTConvolver2x4x2Free(conv); - free(conv); - } - for (uint32_t i = idx; i < c->numberOfConvolver - 1; i++) - { - c->convolverMap[i] = c->convolverMap[i + 1]; - c->convolverType[i] = c->convolverType[i + 1]; - c->convolverSink[i] = c->convolverSink[i + 1]; - } - c->numberOfConvolver--; - if (c->numberOfConvolver) - { - c->convolverMap = (uint32_t*)realloc(c->convolverMap, c->numberOfConvolver * sizeof(uint32_t)); - c->convolverType = (uint32_t*)realloc(c->convolverType, c->numberOfConvolver * sizeof(uint32_t)); - c->convolverSink = (void**)realloc(c->convolverSink, c->numberOfConvolver * sizeof(void*)); - } - else - { - free(c->convolverMap); - free(c->convolverType); - free(c->convolverSink); - c->convolverMap = 0; - c->convolverType = 0; - c->convolverSink = 0; - } - return 1; + int32_t id = AddData(c->region_context, ptr, convType); + return (float)id; } static float NSEEL_CGEN_CALL _eel_processfftconv1d(void *opaque, INT_PTR num_param, float **parms) { compileContext *c = (compileContext*)opaque; float *blocks = c->ram_state; - if (!c->convolverMap) - return -1; - int32_t idx = arySearch(c->convolverMap, c->numberOfConvolver, (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return 0; - void *ptr = c->convolverSink[idx]; - int32_t convType = c->convolverType[idx]; + int32_t idx = (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR); + void *ptr = c->region_context->memRegion[idx]; + char convType = c->region_context->type[idx]; if (convType == 1) { FFTConvolver1x1 *conv = (FFTConvolver1x1*)ptr; @@ -3082,7 +3498,7 @@ static float NSEEL_CGEN_CALL _eel_processfftconv1d(void *opaque, INT_PTR num_par float *x2 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); FFTConvolver2x2Process(conv, x1, x2, x1, x2, conv->_blockSize); } - if (convType == 4) + if (convType == 3) { FFTConvolver2x4x2 *conv = (FFTConvolver2x4x2*)ptr; uint32_t offs1 = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); @@ -3093,7 +3509,6 @@ static float NSEEL_CGEN_CALL _eel_processfftconv1d(void *opaque, INT_PTR num_par } return 1; } - void *task_user_created(void *arg) { abstractThreads *info = (abstractThreads *)arg; @@ -3127,30 +3542,8 @@ void *task_user_created(void *arg) pthread_exit(NULL); return 0; } -void eelThread_start(compileContext *st, size_t task) -{ - abstractThreads *info = st->codePtrThreadSink[task]; - // ensure worker is waiting - pthread_mutex_lock(&(info->work_mtx)); - // set job information & state - info->state = EEL_WORKING; - // wake-up signal - pthread_cond_signal(&(info->work_cond)); - pthread_mutex_unlock(&(info->work_mtx)); -} -void eelThread_wait(compileContext *st, size_t task) -{ - abstractThreads *info = st->codePtrThreadSink[task]; - while (1) - { - pthread_cond_wait(&(info->boss_cond), &(info->boss_mtx)); - if (EEL_IDLE == info->state) - break; - } -} -void thread_init(compileContext *st, int task) +void thread_init(abstractThreads *info) { - abstractThreads *info = st->codePtrThreadSink[task]; info->state = EEL_SETUP; pthread_cond_init(&(info->work_cond), NULL); pthread_mutex_init(&(info->work_mtx), NULL); @@ -3158,32 +3551,12 @@ void thread_init(compileContext *st, int task) pthread_mutex_init(&(info->boss_mtx), NULL); pthread_mutex_lock(&(info->boss_mtx)); pthread_create(&info->threadID, NULL, task_user_created, (void *)info); - eelThread_wait(st, task); -} -void thread_delete(compileContext *st, int task) -{ - abstractThreads *info = st->codePtrThreadSink[task]; - // ensure the worker is waiting - if (info->state == EEL_WORKING) - eelThread_wait(st, task); - pthread_mutex_lock(&(info->work_mtx)); - info->state = EEL_GET_OFF_FROM_WORK; - // wake-up signal - pthread_cond_signal(&(info->work_cond)); - pthread_mutex_unlock(&(info->work_mtx)); - // wait for thread to exit - pthread_join(info->threadID, NULL); - pthread_mutex_destroy(&(info->work_mtx)); - pthread_cond_destroy(&(info->work_cond)); - pthread_mutex_unlock(&(info->boss_mtx)); - pthread_mutex_destroy(&(info->boss_mtx)); - pthread_cond_destroy(&(info->boss_cond)); - NSEEL_code_free(info->codePtr); + eelThread_wait(info); } static float NSEEL_CGEN_CALL _eel_initthread(void *opaque, float *stringID) { compileContext *c = (compileContext*)opaque; - const char *codePtr = (const char*)GetStringForIndex(c->m_string_context, *stringID, 0); + const char *codePtr = (const char*)GetStringForIndex(c->region_context, *stringID, 0); NSEEL_CODEHANDLE compiledCode = NSEEL_code_compile_ex(c, codePtr, 0, 1); char *err; char badStr[128]; @@ -3193,73 +3566,32 @@ static float NSEEL_CGEN_CALL _eel_initthread(void *opaque, float *stringID) EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); return -2; } - float *blocks = c->ram_state; - if (c->numberOfThreads > 1024 - 1) - return -1; - uint32_t ranN; - while (1) - { - ranN = (uint32_t)(nseel_int_rand(1.0f) * 1024.0); - uint32_t counter = 0; - for (uint32_t i = 0; i < c->numberOfThreads; i++) - { - if (ranN == c->threadMap[i]) - { - counter++; - break; - } - } - if (!counter) - break; - } - c->numberOfThreads++; - int32_t idx = c->numberOfThreads - 1; - c->codePtrThreadSink[idx] = (abstractThreads*)malloc(sizeof(abstractThreads)); - thread_init(c, idx); - c->codePtrThreadSink[idx]->codePtr = compiledCode; - c->threadMap[idx] = ranN; - return (float)ranN; + abstractThreads *pth = (abstractThreads*)malloc(sizeof(abstractThreads)); + pth->codePtr = compiledCode; + thread_init(pth); + int32_t id = AddData(c->region_context, (void *)pth, 4); + return (float)id; } -static float NSEEL_CGEN_CALL _eel_deletethread(void *opaque, float *v) +static float NSEEL_CGEN_CALL _eel_deleteSysVariable(void *opaque, float *v) { compileContext *c = (compileContext*)opaque; - if (!c->threadMap) - return -1; - int32_t idx = arySearch(c->threadMap, c->numberOfThreads, (int32_t)(*v + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return -2; - thread_delete(c, idx); - free(c->codePtrThreadSink[idx]); - for (uint32_t i = idx; i < c->numberOfThreads - 1; i++) - { - c->threadMap[i] = c->threadMap[i + 1]; - c->codePtrThreadSink[i] = c->codePtrThreadSink[i + 1]; - } - c->numberOfThreads--; + DeleteSlot(c->region_context, (int32_t)(*v + NSEEL_CLOSEFACTOR)); return 1; } static float NSEEL_CGEN_CALL _eel_createThread(void *opaque, float *v) { compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - if (!c->threadMap) - return -1; - int32_t idx = arySearch(c->threadMap, c->numberOfThreads, (uint32_t)(*v + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return 0; - eelThread_start(c, idx); + int32_t idx = (int32_t)(*v + NSEEL_CLOSEFACTOR); + abstractThreads *ptr = (abstractThreads *)c->region_context->memRegion[idx]; + eelThread_start(ptr); return 1; } static float NSEEL_CGEN_CALL _eel_joinThread(void *opaque, float *v) { compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - if (!c->threadMap) - return -1; - int32_t idx = arySearch(c->threadMap, c->numberOfThreads, (uint32_t)(*v + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return 0; - eelThread_wait(c, idx); + int32_t idx = (int32_t)(*v + NSEEL_CLOSEFACTOR); + abstractThreads *ptr = (abstractThreads *)c->region_context->memRegion[idx]; + eelThread_wait(ptr); return 1; } static float NSEEL_CGEN_CALL _eel_lockThread(void *opaque, float *v) @@ -3274,7 +3606,208 @@ static float NSEEL_CGEN_CALL _eel_unlockThread(void *opaque, float *v) pthread_mutex_unlock(&c->globalLocker); return 1; } - +// HPFloat +#define HPFREPEATBLKEND \ +void *ptr = malloc(sizeof(xpr)); \ +memcpy(ptr, (void *)&br, sizeof(xpr)); \ +int32_t id = AddData(c->region_context, ptr, 5); \ +return id; +static float NSEEL_CGEN_CALL _eel_createHPFloatFromString(void *opaque, float *v) +{ + compileContext *c = (compileContext *)opaque; + const char *decimal = (const char *)GetStringForIndex(c->region_context, *v, 0); + xpr br = atox(decimal); + HPFREPEATBLKEND +} +static float NSEEL_CGEN_CALL _eel_createHPFloatFromFloat32(void *opaque, float *flt) +{ + compileContext *c = (compileContext *)opaque; + xpr br = flttox(*flt); + void *ptr = malloc(sizeof(xpr)); + memcpy(ptr, (void *)&br, sizeof(xpr)); + int32_t id = AddData(c->region_context, ptr, 5); + return id; +} +static float NSEEL_CGEN_CALL _eel_createHPFloatToFloat32(void *opaque, float *v) +{ + compileContext *c = (compileContext *)opaque; + int32_t idx = (int32_t)(*v + NSEEL_CLOSEFACTOR); + xpr *br = (xpr *)c->region_context->memRegion[idx]; + return xtoflt(*br); +} +static float NSEEL_CGEN_CALL _eel_createHPFloatToString(void *opaque, float *v) +{ + compileContext *c = (compileContext *)opaque; + int32_t idx = (int32_t)(*v + NSEEL_CLOSEFACTOR); + xpr *br = (xpr *)c->region_context->memRegion[idx]; + char *str = xpr_asprint(*br, 1, 0, (XDIM * 48) / 10 - 2); + int32_t id = AddData(c->region_context, (void*)str, 0); + return id; +} +#define HPFREPEATBLKDYADIC \ +compileContext *c = (compileContext *)opaque; \ +xpr *x1 = (xpr *)c->region_context->memRegion[(int32_t)(*parms[0] + NSEEL_CLOSEFACTOR)]; \ +xpr *x2 = (xpr *)c->region_context->memRegion[(int32_t)(*parms[1] + NSEEL_CLOSEFACTOR)]; +#define HPFREPEATBLK1O \ +compileContext *c = (compileContext *)opaque; \ +xpr *x = (xpr *)c->region_context->memRegion[(int32_t)(*parms[0] + NSEEL_CLOSEFACTOR)]; +static float NSEEL_CGEN_CALL _eel_HPFAdd(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLKDYADIC + xpr br = xadd(*x1, *x2, 0); + HPFREPEATBLKEND +} +static float NSEEL_CGEN_CALL _eel_HPFSub(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLKDYADIC + xpr br = xadd(*x1, *x2, 1); + HPFREPEATBLKEND +} +static float NSEEL_CGEN_CALL _eel_HPFMul(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLKDYADIC + xpr br = xmul(*x1, *x2); + HPFREPEATBLKEND +} +static float NSEEL_CGEN_CALL _eel_HPFDiv(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLKDYADIC + xpr br = xdiv(*x1, *x2); + HPFREPEATBLKEND +} +// Math functions +static float NSEEL_CGEN_CALL _eel_HPFfrexp(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLK1O + float *blocks = c->ram_state; + int p; + xpr br = xfrexp(*x, &p); + uint32_t offs2 = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); + float *out = (float *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs2); + void *ptr = malloc(sizeof(xpr)); + memcpy(ptr, (void *)&br, sizeof(xpr)); + out[0] = AddData(c->region_context, ptr, 5); + ptr = malloc(sizeof(xpr)); + br = dbltox((double)p); + memcpy(ptr, (void *)&br, sizeof(xpr)); + out[1] = AddData(c->region_context, ptr, 5); + return 0; +} +static float NSEEL_CGEN_CALL _eel_HPFqfmod(void *opaque, INT_PTR num_param, float **parms) +{ + compileContext *c = (compileContext *)opaque; + xpr *s = (xpr *)c->region_context->memRegion[(int32_t)(*parms[0] + NSEEL_CLOSEFACTOR)]; + xpr *t = (xpr *)c->region_context->memRegion[(int32_t)(*parms[1] + NSEEL_CLOSEFACTOR)]; + xpr *q = (xpr *)c->region_context->memRegion[(int32_t)(*parms[2] + NSEEL_CLOSEFACTOR)]; + xpr br = xfmod(*s, *t, q); + HPFREPEATBLKEND +} +static float NSEEL_CGEN_CALL _eel_HPFfmod(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLKDYADIC + xpr q; + xpr br = xfmod(*x1, *x2, &q); + HPFREPEATBLKEND +} +static float NSEEL_CGEN_CALL _eel_HPFsfmod(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLK1O + float *blocks = c->ram_state; + int p; + xpr br = xsfmod(*x, &p); + uint32_t offs2 = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); + float *out = (float *)__NSEEL_RAMAlloc(blocks, (uint64_t)offs2); + void *ptr = malloc(sizeof(xpr)); + memcpy(ptr, (void *)&br, sizeof(xpr)); + out[0] = AddData(c->region_context, ptr, 5); + ptr = malloc(sizeof(xpr)); + br = dbltox((double)p); + memcpy(ptr, (void *)&br, sizeof(xpr)); + out[1] = AddData(c->region_context, ptr, 5); + return 0; +} +static float NSEEL_CGEN_CALL _eel_HPFMulPowOf2(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLK1O + xpr br = xpr2(*x, (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR)); + HPFREPEATBLKEND +} +#define HPFLogicGen1O(fname, expr) \ +static float NSEEL_CGEN_CALL fname(void *opaque, INT_PTR num_param, float **parms) \ +{ \ + HPFREPEATBLK1O \ + int lg = expr; \ + return lg; \ +} +#define HPFLogicGenDYADIC(fname, expr) \ +static float NSEEL_CGEN_CALL fname(void *opaque, INT_PTR num_param, float **parms) \ +{ \ + HPFREPEATBLKDYADIC \ + int lg = expr; \ + return lg; \ +} +#define HPFGen(fname, expr) \ +static float NSEEL_CGEN_CALL fname(void *opaque, INT_PTR num_param, float **parms) \ +{ \ + HPFREPEATBLK1O \ + xpr br = expr(*x); \ + HPFREPEATBLKEND \ +} +HPFGen(_eel_HPFfrac, xfrac) +HPFGen(_eel_HPFabs, xabs) +HPFGen(_eel_HPFtrunc, xtrunc) +HPFGen(_eel_HPFround, xround) +HPFGen(_eel_HPFceil, xceil) +HPFGen(_eel_HPFfloor, xfloor) +HPFGen(_eel_HPFfix, xfix) +HPFGen(_eel_HPFtan, xtan) +HPFGen(_eel_HPFsin, xsin) +HPFGen(_eel_HPFcos, xcos) +HPFGen(_eel_HPFatan, xatan) +HPFGen(_eel_HPFasin, xasin) +HPFGen(_eel_HPFacos, xacos) +HPFGen(_eel_HPFNegation, xneg) +static float NSEEL_CGEN_CALL _eel_HPFatan2(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLKDYADIC + xpr br = xatan2(*x1, *x2); + HPFREPEATBLKEND +} +HPFGen(_eel_HPFsqrt, xsqrt) +HPFGen(_eel_HPFexp, xexp) +HPFGen(_eel_HPFexp2, xexp2) +HPFGen(_eel_HPFexp10, xexp10) +HPFGen(_eel_HPFlog, xlog) +HPFGen(_eel_HPFlog2, xlog2) +HPFGen(_eel_HPFlog10, xlog10) +HPFGen(_eel_HPFtanh, xtanh) +HPFGen(_eel_HPFsinh, xsinh) +HPFGen(_eel_HPFcosh, xcosh) +HPFGen(_eel_HPFatanh, xatanh) +HPFGen(_eel_HPFasinh, xasinh) +HPFGen(_eel_HPFacosh, xacosh) +HPFGen(_eel_HPFclone, ) +static float NSEEL_CGEN_CALL _eel_HPFpow(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLKDYADIC + xpr br = xpow(*x1, *x2); + HPFREPEATBLKEND +} +static float NSEEL_CGEN_CALL _eel_HPFIntPow(void *opaque, INT_PTR num_param, float **parms) +{ + HPFREPEATBLK1O + xpr br = xpwr(*x, (int32_t)roundf(*parms[1])); + HPFREPEATBLKEND +} +HPFLogicGen1O(_eel_HPFiszero, xis0(x)) +HPFLogicGen1O(_eel_HPFisneg, x_neg(x)) +HPFLogicGen1O(_eel_HPFbinaryexp, x_exp(x)) +HPFLogicGenDYADIC(_eel_HPFeq, (xprcmp(x1, x2) == 0)) +HPFLogicGenDYADIC(_eel_HPFneq, (xprcmp(x1, x2) != 0)) +HPFLogicGenDYADIC(_eel_HPFle, (xprcmp(x1, x2) <= 0)) +HPFLogicGenDYADIC(_eel_HPFge, (xprcmp(x1, x2) >= 0)) +HPFLogicGenDYADIC(_eel_HPFgt, (xprcmp(x1, x2) > 0)) +HPFLogicGenDYADIC(_eel_HPFlt, (xprcmp(x1, x2) < 0)) static void channel_split(float *buffer, uint64_t num_frames, float **chan_buffers, uint32_t num_channels) { uint64_t i, samples = num_frames * num_channels; @@ -3394,7 +3927,7 @@ static float NSEEL_CGEN_CALL _eel_flacDecodeFile(void *opaque, INT_PTR num_param { compileContext *c = (compileContext*)opaque; float *blocks = c->ram_state; - const char *filename = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); + const char *filename = (const char*)GetStringForIndex(c->region_context, *parms[0], 0); uint32_t channels, fs; uint64_t frameCount; float *signal = drflac_open_file_and_read_pcm_frames_f32(filename, &channels, &fs, &frameCount, 0); @@ -3454,7 +3987,7 @@ static float NSEEL_CGEN_CALL _eel_flacDecodeMemory(void *opaque, INT_PTR num_par { compileContext *c = (compileContext*)opaque; float *blocks = c->ram_state; - const char *base64String = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); + const char *base64String = (const char*)GetStringForIndex(c->region_context, *parms[0], 0); size_t actualSize; unsigned char *memoryBlk = base64_decode((const unsigned char*)base64String, strlen(base64String), &actualSize); uint32_t channels, fs; @@ -3517,7 +4050,7 @@ static float NSEEL_CGEN_CALL _eel_wavDecodeFile(void *opaque, INT_PTR num_param, { compileContext *c = (compileContext*)opaque; float *blocks = c->ram_state; - const char *filename = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); + const char *filename = (const char*)GetStringForIndex(c->region_context, *parms[0], 0); uint32_t channels, fs; uint64_t frameCount; float *signal = drwav_open_file_and_read_pcm_frames_f32(filename, &channels, &fs, &frameCount, 0); @@ -3577,7 +4110,7 @@ static float NSEEL_CGEN_CALL _eel_wavDecodeMemory(void *opaque, INT_PTR num_para { compileContext *c = (compileContext*)opaque; float *blocks = c->ram_state; - const char *base64String = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); + const char *base64String = (const char*)GetStringForIndex(c->region_context, *parms[0], 0); size_t actualSize; unsigned char *memoryBlk = base64_decode((const unsigned char*)base64String, strlen(base64String), &actualSize); uint32_t channels, fs; @@ -3846,7 +4379,7 @@ static float NSEEL_CGEN_CALL _eel_writeWavFile(void *opaque, INT_PTR num_param, { compileContext *c = (compileContext*)opaque; float *blocks = c->ram_state; - const char *filename = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); + const char *filename = (const char*)GetStringForIndex(c->region_context, *parms[0], 0); uint32_t channels = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); uint32_t fs = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); uint64_t frameCount = (uint64_t)(*parms[3] + NSEEL_CLOSEFACTOR); @@ -3875,7 +4408,7 @@ static float NSEEL_CGEN_CALL _eel_writeWavMemory(void *opaque, INT_PTR num_param { compileContext *c = (compileContext*)opaque; float *blocks = c->ram_state; - s_str *dest = (s_str*)GetStringForIndex(c->m_string_context, *parms[0], 1); + s_str *dest = (s_str*)GetStringForIndex(c->region_context, *parms[0], 1); uint32_t channels = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); uint32_t fs = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); uint64_t frameCount = (uint64_t)(*parms[3] + NSEEL_CLOSEFACTOR); @@ -3921,7 +4454,7 @@ static float NSEEL_CGEN_CALL _eel_listSystemVariable(void *opaque, INT_PTR num_p { for (int j = 0; j < NSEEL_VARS_PER_BLOCK; j++) { - char *valid = GetStringForIndex(c->m_string_context, c->varTable_Values[i][j], 1); + char *valid = GetStringForIndex(c->region_context, c->varTable_Values[i][j], 1); if (!valid) strncpy(isString, "Is not string", 16); else @@ -4031,50 +4564,50 @@ redirect(roundf) redirect(floorf) redirect(ceilf) static functionType fnTable1[] = { - { "sin", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sinf} }, - { "cos", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_cosf} }, - { "tan", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_tanf} }, - { "sqrt", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sqrtf}, }, - { "asin", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_asinf}, }, - { "acos", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_acosf}, }, - { "atan", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_atanf}, }, - { "atan2", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_atan2f}, }, - { "sinh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sinhf} }, - { "cosh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_coshf} }, - { "tanh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_tanhf} }, - { "asinh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_asinhf}, }, - { "acosh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_acoshf}, }, - { "atanh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_atanhf}, }, - { "log", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_logf} }, - { "log10", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_log10f} }, - { "hypot", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_hypotf}, }, - { "pow", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_powf}, }, - { "exp", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_expf}, }, - { "abs", nseel_asm_abs,nseel_asm_abs_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(0) | BIF_WONTMAKEDENORMAL }, - { "sqr", nseel_asm_sqr,nseel_asm_sqr_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(1) }, - { "min", nseel_asm_min,nseel_asm_min_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_FPSTACKUSE(3) | BIF_WONTMAKEDENORMAL }, - { "max", nseel_asm_max,nseel_asm_max_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_FPSTACKUSE(3) | BIF_WONTMAKEDENORMAL }, - { "sign", nseel_asm_sign,nseel_asm_sign_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL, }, - { "rand", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&nseel_int_rand}, }, - { "round", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_roundf} }, - { "floor", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_floorf} }, - { "ceil", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_ceilf} }, - { "expint", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&expint} }, - { "expintFast",nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&expint_interpolation} }, - { "invsqrt",nseel_asm_1pdd,nseel_asm_1pdd_end,1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(3), {(void**)&invsqrt} }, - { "invsqrtFast",nseel_asm_invsqrt,nseel_asm_invsqrt_end,1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(3), }, - { "circshift",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&__NSEEL_circshift},NSEEL_PProc_RAM}, - { "convolve_c",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&eel_convolve_c},NSEEL_PProc_RAM}, - { "maxVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_max},NSEEL_PProc_RAM}, - { "minVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_min},NSEEL_PProc_RAM}, - { "meanVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_mean},NSEEL_PProc_RAM}, - { "medianVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_median},NSEEL_PProc_RAM}, - { "fft",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft},NSEEL_PProc_RAM}, - { "ifft",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft},NSEEL_PProc_RAM}, - { "fft_real",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft_real},NSEEL_PProc_RAM}, - { "ifft_real",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft_real},NSEEL_PProc_RAM}, - { "fft_permute",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft_permute},NSEEL_PProc_RAM}, - { "fft_ipermute",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft_permute},NSEEL_PProc_RAM}, + {"sin", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sinf} }, + {"cos", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_cosf} }, + {"tan", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_tanf} }, + {"sqrt", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sqrtf}, }, + {"asin", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_asinf}, }, + {"acos", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_acosf}, }, + {"atan", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_atanf}, }, + {"atan2", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_atan2f}, }, + {"sinh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sinhf} }, + {"cosh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_coshf} }, + {"tanh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_tanhf} }, + {"asinh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_asinhf}, }, + {"acosh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_acoshf}, }, + {"atanh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_atanhf}, }, + {"log", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_logf} }, + {"log10", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_log10f} }, + {"hypot", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_hypotf}, }, + {"pow", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_powf}, }, + {"exp", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_expf}, }, + {"abs", nseel_asm_abs,nseel_asm_abs_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(0) | BIF_WONTMAKEDENORMAL }, + {"sqr", nseel_asm_sqr,nseel_asm_sqr_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(1) }, + {"min", nseel_asm_min,nseel_asm_min_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_FPSTACKUSE(3) | BIF_WONTMAKEDENORMAL }, + {"max", nseel_asm_max,nseel_asm_max_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_FPSTACKUSE(3) | BIF_WONTMAKEDENORMAL }, + {"sign", nseel_asm_sign,nseel_asm_sign_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL, }, + {"rand", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&nseel_int_rand}, }, + {"round", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_roundf} }, + {"floor", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_floorf} }, + {"ceil", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_ceilf} }, + {"expint", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&expint} }, + {"expintFast",nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&expint_interpolation} }, + {"invsqrt",nseel_asm_1pdd,nseel_asm_1pdd_end,1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(3), {(void**)&invsqrt} }, + {"invsqrtFast",nseel_asm_invsqrt,nseel_asm_invsqrt_end,1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(3), }, + {"circshift",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&__NSEEL_circshift},NSEEL_PProc_RAM}, + {"convolve_c",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&eel_convolve_c},NSEEL_PProc_RAM}, + {"maxVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_max},NSEEL_PProc_RAM}, + {"minVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_min},NSEEL_PProc_RAM}, + {"meanVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_mean},NSEEL_PProc_RAM}, + {"medianVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_median},NSEEL_PProc_RAM}, + {"fft",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft},NSEEL_PProc_RAM}, + {"ifft",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft},NSEEL_PProc_RAM}, + {"fft_real",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft_real},NSEEL_PProc_RAM}, + {"ifft_real",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft_real},NSEEL_PProc_RAM}, + {"fft_permute",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft_permute},NSEEL_PProc_RAM}, + {"fft_ipermute",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft_permute},NSEEL_PProc_RAM}, {"memcpy",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&__NSEEL_RAM_MemCpy},NSEEL_PProc_RAM}, {"memset",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&__NSEEL_RAM_MemSet},NSEEL_PProc_RAM}, {"sleep",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK,{(void**)&_eel_sleep}}, @@ -4093,18 +4626,26 @@ static functionType fnTable1[] = { {"strnicmp",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void**)&_eel_strnicmp},NSEEL_PProc_THIS}, {"printf",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_printf},NSEEL_PProc_THIS}, {"sprintf",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_sprintf},NSEEL_PProc_THIS}, - {"resetStringContainers",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_delete_all_strings},NSEEL_PProc_THIS}, + {"resetSysMemRegion",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_resetSysMemRegion},NSEEL_PProc_THIS}, {"importFLTFromStr",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&_eel_importFloatArrayFromString},NSEEL_PProc_THIS}, {"arburgCheckMemoryRequirement",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&arburgCheckMemoryRequirement},NSEEL_PProc_RAM}, - {"arburgTrainModel",_asm_generic2parm_retd,_asm_generic2parm_retd_end,5 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&arburgTrainModel},NSEEL_PProc_THIS}, - {"arburgGetPredictionReflectionCoeff",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&arburgGetPredictionReflectionCoeff},NSEEL_PProc_THIS}, + {"arburgTrainModel",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&arburgTrainModel},NSEEL_PProc_THIS}, {"arburgPredictBackward",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&arburgPredictBackward},NSEEL_PProc_RAM}, {"arburgPredictForward",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&arburgPredictForward},NSEEL_PProc_RAM}, + {"getCosineWindows",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&getCosineWindows},NSEEL_PProc_THIS}, + {"getAsymmetricCosine",_asm_generic2parm_retd,_asm_generic2parm_retd_end,5 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&getAsymmetricCosine},NSEEL_PProc_THIS}, {"stftCheckMemoryRequirement",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftCheckMemoryRequirement},NSEEL_PProc_THIS}, {"stftInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftInit},NSEEL_PProc_THIS}, + {"iirHilbertProcess",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void **)&iirHilbertProcess},NSEEL_PProc_RAM}, + {"iirHilbertInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&iirHilbertInit},NSEEL_PProc_THIS}, + {"movingMinMaxProcess",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void **)&movingMinMaxProcess},NSEEL_PProc_RAM}, + {"movingMinMaxInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&movingMinMaxInit},NSEEL_PProc_RAM}, + {"movingMedianProcess",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void **)&movingMedianProcess},NSEEL_PProc_RAM}, + {"movingMedianInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&movingMedianInit},NSEEL_PProc_RAM}, {"stftGetWindowPower",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftGetWindowPower},NSEEL_PProc_THIS}, {"stftForward",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftForward},NSEEL_PProc_THIS}, {"stftBackward",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftBackward},NSEEL_PProc_THIS}, + {"stftSetAsymWnd",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftSetAsymWnd},NSEEL_PProc_THIS}, {"InitPinkNoise",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&pinkNoiseInit},NSEEL_PProc_THIS}, {"GeneratePinkNoise",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&pinkNoiseGen},NSEEL_PProc_THIS}, {"InitPolyphaseFilterbank",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankInit},NSEEL_PProc_THIS}, @@ -4144,9 +4685,6 @@ static functionType fnTable1[] = { {"IIRBandSplitterInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_iirBandSplitterInit},NSEEL_PProc_THIS}, {"IIRBandSplitterClearState",_asm_generic1parm_retd,_asm_generic1parm_retd_end, 1 | BIF_RETURNSONSTACK,{(void**)&_eel_iirBandSplitterClearState},NSEEL_PProc_RAM}, {"IIRBandSplitterProcess",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_iirBandSplitterProcess},NSEEL_PProc_THIS}, - {"Conv1DInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_initfftconv1d},NSEEL_PProc_THIS}, - {"Conv1DProcess",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_processfftconv1d},NSEEL_PProc_THIS}, - {"Conv1DFree",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_deletefftconv1d},NSEEL_PProc_THIS}, {"decodeFLACFromFile",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_flacDecodeFile},NSEEL_PProc_THIS}, {"decodeFLACFromMemory",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_flacDecodeMemory},NSEEL_PProc_THIS}, {"decodeWavFromFile",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_wavDecodeFile},NSEEL_PProc_THIS}, @@ -4160,17 +4698,70 @@ static functionType fnTable1[] = { {"vectorizeMinus",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_vectorizeMinus},NSEEL_PProc_THIS }, {"vectorizeMultiply",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_vectorizeMultiply},NSEEL_PProc_THIS }, {"vectorizeDivide",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_vectorizeDivide},NSEEL_PProc_THIS }, + { "lerpAt",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_lerp},NSEEL_PProc_THIS }, {"ls",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_ls},NSEEL_PProc_THIS }, {"cd",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_cd},NSEEL_PProc_THIS }, {"eval",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_eval},NSEEL_PProc_THIS }, {"evalFile",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_evalFile},NSEEL_PProc_THIS }, + {"Conv1DInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_initfftconv1d},NSEEL_PProc_THIS }, + {"Conv1DProcess",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_processfftconv1d},NSEEL_PProc_THIS }, {"ThreadInit",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_initthread},NSEEL_PProc_THIS }, {"ThreadCreate",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_createThread},NSEEL_PProc_THIS }, {"ThreadJoin",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_joinThread},NSEEL_PProc_THIS }, - {"ThreadDelete",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_deletethread},NSEEL_PProc_THIS }, {"ThreadMutexLock",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_lockThread},NSEEL_PProc_THIS }, {"ThreadMutexUnlock",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_unlockThread},NSEEL_PProc_THIS }, - {"lerpAt",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_lerp},NSEEL_PProc_THIS }, + {"xFloatS",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void **)&_eel_createHPFloatFromString},NSEEL_PProc_THIS }, + {"xFloatF",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void **)&_eel_createHPFloatFromFloat32},NSEEL_PProc_THIS }, + {"xF2f32",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void **)&_eel_createHPFloatToFloat32},NSEEL_PProc_THIS }, + {"xF2str",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void **)&_eel_createHPFloatToString},NSEEL_PProc_THIS }, + {"xAdd",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFAdd},NSEEL_PProc_THIS }, + {"xSub",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFSub},NSEEL_PProc_THIS }, + {"xMul",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFMul},NSEEL_PProc_THIS }, + {"xDiv",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFDiv},NSEEL_PProc_THIS }, + {"xfrexp",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFfrexp},NSEEL_PProc_THIS }, + {"xqfmod",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFqfmod},NSEEL_PProc_THIS }, + {"xfmod",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFfmod},NSEEL_PProc_THIS }, + {"xsfmod",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFsfmod},NSEEL_PProc_THIS }, + {"xMulPowOf2",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFMulPowOf2},NSEEL_PProc_THIS }, + {"xfrac",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFfrac},NSEEL_PProc_THIS }, + {"xabs",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFabs},NSEEL_PProc_THIS }, + {"xtrunc",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFtrunc},NSEEL_PProc_THIS }, + {"xround",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFround},NSEEL_PProc_THIS }, + {"xceil",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFceil},NSEEL_PProc_THIS }, + {"xfloor",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFfloor},NSEEL_PProc_THIS }, + {"xfix",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFfix},NSEEL_PProc_THIS }, + {"xtan",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFtan},NSEEL_PProc_THIS }, + {"xsin",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFsin},NSEEL_PProc_THIS }, + {"xcos",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFcos},NSEEL_PProc_THIS }, + {"xatan",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFatan},NSEEL_PProc_THIS }, + {"xasin",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFasin},NSEEL_PProc_THIS }, + {"xacos",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFacos},NSEEL_PProc_THIS }, + {"xNegation",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFNegation},NSEEL_PProc_THIS }, + {"xatan2",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFatan2},NSEEL_PProc_THIS }, + {"xsqrt",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFsqrt},NSEEL_PProc_THIS }, + {"xexp",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFexp},NSEEL_PProc_THIS }, + {"xexp2",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFexp2},NSEEL_PProc_THIS }, + {"xexp10",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFexp10},NSEEL_PProc_THIS }, + {"xlog",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFlog},NSEEL_PProc_THIS }, + {"xlog2",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFlog2},NSEEL_PProc_THIS }, + {"xlog10",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFlog10},NSEEL_PProc_THIS }, + {"xtanh",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFtanh},NSEEL_PProc_THIS }, + {"xsinh",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFsinh},NSEEL_PProc_THIS }, + {"xcosh",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFcosh},NSEEL_PProc_THIS }, + {"xatanh",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFatanh},NSEEL_PProc_THIS }, + {"xasinh",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFasinh},NSEEL_PProc_THIS }, + {"xacosh",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFacosh},NSEEL_PProc_THIS }, + {"xclone",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFclone},NSEEL_PProc_THIS }, + {"xpow",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFpow},NSEEL_PProc_THIS }, + {"xintpow",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFIntPow},NSEEL_PProc_THIS }, + {"xbinexp",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFbinaryexp},NSEEL_PProc_THIS }, + {"xequal",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFeq},NSEEL_PProc_THIS }, + {"xnotequal",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFneq},NSEEL_PProc_THIS }, + {"xlessequal",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFle},NSEEL_PProc_THIS }, + {"xgreaterequal",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFge},NSEEL_PProc_THIS }, + {"xgreater",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFgt},NSEEL_PProc_THIS }, + {"xless",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void **)&_eel_HPFlt},NSEEL_PProc_THIS }, + {"DeleteSysVariable",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void **)&_eel_deleteSysVariable},NSEEL_PProc_THIS }, }; void printFunctions() { @@ -4181,9 +4772,17 @@ void printFunctions() EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); } } - +int XLITTLE_ENDIAN; void NSEEL_start() { + union + { + unsigned char cc[4]; + unsigned short s[2]; + unsigned long n; + } u; + u.n = 0x12345678; + XLITTLE_ENDIAN = (u.s[0] == 0x5678 && u.s[1] == 0x1234 && u.cc[0] == 0x78 && u.cc[1] == 0x56 && u.cc[2] == 0x34 && u.cc[3] == 0x12); // Global memory if (decompressedCoefficients) free(decompressedCoefficients); @@ -4618,9 +5217,7 @@ eelStringSegmentRec *nseel_createStringSegmentRec(compileContext *ctx, const cha opcodeRec *nseel_eelMakeOpcodeFromStringSegments(compileContext *ctx, eelStringSegmentRec *rec) { if (ctx && ctx->onString) - { return nseel_createCompiledValue(ctx, ctx->onString(ctx->caller_this, rec)); - } return NULL; } opcodeRec *nseel_createMoreParametersOpcode(compileContext *ctx, opcodeRec *code1, opcodeRec *code2) @@ -5779,7 +6376,7 @@ unsigned char *compileCodeBlockWithRet(compileContext *ctx, opcodeRec *rec, int3 p += funcsz; memcpy(p, &GLUE_RET, sizeof(GLUE_RET)); p += sizeof(GLUE_RET); #ifdef __arm__ - //__clear_cache(newblock2, p); + __clear_cache(newblock2, p); #endif ctx->l_stats[2] += funcsz + 2; return newblock2; @@ -7187,7 +7784,7 @@ NSEEL_CODEHANDLE NSEEL_code_compile_ex(NSEEL_VMCTX _ctx, const char *_expression ctx->l_stats[1] = size; handle->code_size = (int32_t)(writeptr - (unsigned char *)handle->code); #ifdef __arm__ - //__clear_cache(handle->code, writeptr); + __clear_cache(handle->code, writeptr); #endif } handle->blocks = ctx->blocks_head; @@ -7271,72 +7868,26 @@ void NSEEL_VM_freevars(NSEEL_VMCTX _ctx) if (_ctx) { compileContext *ctx = (compileContext*)_ctx; - memset(ctx->ram_state, 0, sizeof(ctx->ram_state)); free(ctx->varTable_Values); free(ctx->varTable_Names); ctx->varTable_Values = 0; ctx->varTable_Names = 0; ctx->varTable_numBlocks = 0; - if (ctx->numberOfConvolver) - { - for (uint32_t i = 0; i < ctx->numberOfConvolver; i++) - { - void *ptr = ctx->convolverSink[i]; - int32_t convType = ctx->convolverType[i]; - if (convType == 1) - { - FFTConvolver1x1 *conv = (FFTConvolver1x1*)ptr; - FFTConvolver1x1Free(conv); - free(conv); - } - if (convType == 2) - { - FFTConvolver2x2 *conv = (FFTConvolver2x2*)ptr; - FFTConvolver2x2Free(conv); - free(conv); - } - if (convType == 4) - { - FFTConvolver2x4x2 *conv = (FFTConvolver2x4x2*)ptr; - FFTConvolver2x4x2Free(conv); - free(conv); - } - } - if (ctx->convolverMap) - free(ctx->convolverMap); - if (ctx->convolverType) - free(ctx->convolverType); - if (ctx->convolverSink) - free(ctx->convolverSink); - ctx->convolverMap = 0; - ctx->convolverType = 0; - ctx->convolverSink = 0; - ctx->numberOfConvolver = 0; - } - if (ctx->numberOfThreads) - { - for (uint32_t i = 0; i < ctx->numberOfThreads; i++) - { - thread_delete(ctx, i); - free(ctx->codePtrThreadSink[i]); - } - ctx->numberOfThreads = 0; - } - if (ctx->m_string_context) + if (ctx->region_context) { - Freeel_string_context_state(ctx->m_string_context); - free(ctx->m_string_context); - ctx->m_string_context = 0; + FreeRegion_context(ctx->region_context); + free(ctx->region_context); + ctx->region_context = 0; } } } -void NSEEL_init_string(NSEEL_VMCTX _ctx) +void NSEEL_init_memRegion(NSEEL_VMCTX _ctx) { if (_ctx) { compileContext *ctx = (compileContext*)_ctx; - ctx->m_string_context = (eel_string_context_state*)malloc(sizeof(eel_string_context_state)); - Initeel_string_context_state(ctx->m_string_context); + ctx->region_context = (eel_builtin_memRegion*)malloc(sizeof(eel_builtin_memRegion)); + InitRegion_context(ctx->region_context); } } NSEEL_VMCTX NSEEL_VM_alloc() // return a handle @@ -7348,7 +7899,7 @@ NSEEL_VMCTX NSEEL_VM_alloc() // return a handle ctx->caller_this = ctx; ctx->scanner = ctx; ctx->onString = addStringCallback; - NSEEL_init_string((NSEEL_VMCTX)ctx); + NSEEL_init_memRegion((NSEEL_VMCTX)ctx); } return ctx; } @@ -7631,6 +8182,9 @@ opcodeRec *nseel_createFunctionByName(compileContext *ctx, const char *name, int } #include //------------------------------------------------------------------------------ +#define GENCONSTANTIF_ELSE(idx) \ +else if (!tmplen ? !stricmp(tmp, xVarName[idx]) : (tmplen == strlen(xVarName[idx]) && !strnicmp(tmp, xVarName[idx], strlen(xVarName[idx])))) \ +return nseel_createCompiledValue(ctx, idx); opcodeRec *nseel_translate(compileContext *ctx, const char *tmp, size_t tmplen) // tmplen 0 = null term { // this depends on the string being nul terminated eventually, tmplen is used more as a hint than anything else @@ -7651,13 +8205,30 @@ opcodeRec *nseel_translate(compileContext *ctx, const char *tmp, size_t tmplen) else if (!tmplen ? !stricmp(tmp, "$E") : (tmplen == 2 && !strnicmp(tmp, "$E", 2))) return nseel_createCompiledValue(ctx, (float)2.71828182845904523536); else if (!tmplen ? !stricmp(tmp, "$PI") : (tmplen == 3 && !strnicmp(tmp, "$PI", 3))) - return nseel_createCompiledValue(ctx, (float)3.141592653589793238463); + return nseel_createCompiledValue(ctx, (float)M_PIDouble); else if (!tmplen ? !stricmp(tmp, "$PHI") : (tmplen == 4 && !strnicmp(tmp, "$PHI", 4))) return nseel_createCompiledValue(ctx, (float)1.618033988749894848205); else if (!tmplen ? !stricmp(tmp, "$EPS") : (tmplen == 4 && !strnicmp(tmp, "$EPS", 4))) return nseel_createCompiledValue(ctx, (float)FLT_EPSILON); - else if (!tmplen ? !stricmp(tmp, "$DBL_MAX") : (tmplen == 4 && !strnicmp(tmp, "$DBL_MAX", 4))) - return nseel_createCompiledValue(ctx, (float)FLT_MAX); + GENCONSTANTIF_ELSE(0) + GENCONSTANTIF_ELSE(1) + GENCONSTANTIF_ELSE(2) + GENCONSTANTIF_ELSE(3) + GENCONSTANTIF_ELSE(4) + GENCONSTANTIF_ELSE(5) + GENCONSTANTIF_ELSE(6) + GENCONSTANTIF_ELSE(7) + GENCONSTANTIF_ELSE(8) + GENCONSTANTIF_ELSE(9) + GENCONSTANTIF_ELSE(10) + GENCONSTANTIF_ELSE(11) + GENCONSTANTIF_ELSE(12) + GENCONSTANTIF_ELSE(13) + GENCONSTANTIF_ELSE(14) + GENCONSTANTIF_ELSE(15) + GENCONSTANTIF_ELSE(16) + GENCONSTANTIF_ELSE(17) + GENCONSTANTIF_ELSE(18) else if (!tmplen ? !stricmp(tmp, "$MEMBLKLIMIT") : (tmplen == 12 && !strnicmp(tmp, "$MEMBLKLIMIT", 12))) return nseel_createCompiledValue(ctx, (float)NSEEL_RAM_ITEMSPERBLOCK); else if ((!tmplen || tmplen == 4) && tmp[1] == '\'' && tmp[2] && tmp[3] == '\'') diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/nseel-compiler.c.bak b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/nseel-compiler.c.bak deleted file mode 100644 index 6ccf9b08..00000000 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/nseel-compiler.c.bak +++ /dev/null @@ -1,7687 +0,0 @@ -/* - Expression Evaluator Library (NS-EEL) v2 - Copyright (C) 2004-2013 Cockos Incorporated - Copyright (C) 1999-2003 Nullsoft, Inc. - nseel-compiler.c - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include -#include -#include -#include -#include -#include -#include -#include "eelCommon.h" -#include "glue_port.h" -static void lstrcpyn_safe(char *o, const char *in, int32_t count) -{ - if (count > 0) - { - while (--count > 0 && *in) *o++ = *in++; - *o = 0; - } -} -static void lstrcatn(char *o, const char *in, int32_t count) -{ - if (count > 0) - { - while (*o) { if (--count < 1) return; o++; } - while (--count > 0 && *in) *o++ = *in++; - *o = 0; - } -} -#define STB_SPRINTF_IMPLEMENTATION -#include "stb_sprintf.h" -static void snprintf_append(char *o, int32_t count, const char *format, ...) -{ - if (count > 0) - { - va_list va; - while (*o) { if (--count < 1) return; o++; } - va_start(va, format); - stbsp_vsnprintf(o, count, format, va); - va_end(va); - } -} -#define NSEEL_VARS_MALLOC_CHUNKSIZE 8 -#define RET_MINUS1_FAIL(x) return -1; -#define MIN_COMPUTABLE_SIZE 32 // always use at least this big of a temp storage table (and reset the temp ptr when it goes past this boundary) -#define COMPUTABLE_EXTRA_SPACE 16 // safety buffer, if EEL_VALIDATE_WORKTABLE_USE set, used for magic-value-checking -/* - P1 is rightmost parameter - P2 is second rightmost, if any - P3 is third rightmost, if any - registers on x86 are (RAX etc on x86-64) - P1(ret) EAX - P2 EDI - P3 ECX - WTP RSI - x86_64: r12 is a pointer to ram_state - x86_64: r13 is a pointer to closenessfactor - registers on PPC are: - P1(ret) r3 - P2 r14 - P3 r15 - WTP r16 (r17 has the original value) - r13 is a pointer to ram_state - ppc uses f31 and f30 and others for certain constants - */ - // used by //#eel-no-optimize:xxx, in 0 -#define OPTFLAG_NO_FPSTACK 2 -#define OPTFLAG_NO_INLINEFUNC 4 -#define MAX_SUB_NAMESPACES 32 -typedef struct -{ - const char *namespacePathToThis; - const char *subParmInfo[MAX_SUB_NAMESPACES]; -} namespaceInformation; -static int32_t nseel_evallib_stats[5]; // source bytes, static code bytes, call code bytes, data bytes, segments -int32_t *NSEEL_getstats() -{ - return nseel_evallib_stats; -} -static int32_t findLineNumber(const char *exp, int32_t byteoffs) -{ - int32_t lc = 0; - while (byteoffs-- > 0 && *exp) if (*exp++ == '\n') lc++; - return lc; -} -static void *__newBlock(llBlock **start, int32_t size); -#define OPCODE_IS_TRIVIAL(x) ((x)->opcodeType <= OPCODETYPE_VARPTRPTR) -enum { - OPCODETYPE_DIRECTVALUE = 0, - OPCODETYPE_DIRECTVALUE_TEMPSTRING, // like directvalue, but will generate a new tempstring value on generate - OPCODETYPE_VALUE_FROM_NAMESPACENAME, // this.* or namespace.* are encoded this way - OPCODETYPE_VARPTR, - OPCODETYPE_VARPTRPTR, - OPCODETYPE_FUNC1, - OPCODETYPE_FUNC2, - OPCODETYPE_FUNC3, - OPCODETYPE_FUNCX, - OPCODETYPE_MOREPARAMS, - OPCODETYPE_INVALID, -}; -struct opcodeRec -{ - int32_t opcodeType; - int32_t fntype; - void *fn; - union { - struct opcodeRec *parms[3]; - struct { - float directValue; - float *valuePtr; // if direct value, valuePtr can be cached - } dv; - } parms; - int32_t namespaceidx; - // OPCODETYPE_VALUE_FROM_NAMESPACENAME (relname is either empty or blah) - // OPCODETYPE_VARPTR if it represents a global variable, will be nonempty - // OPCODETYPE_FUNC* with fntype=FUNCTYPE_EELFUNC - const char *relname; -}; -static void *newTmpBlock(compileContext *ctx, int32_t size) -{ - const int32_t align = 8; - const int32_t a1 = align - 1; - char *p = (char*)__newBlock(&ctx->tmpblocks_head, size + a1); - return p + ((align - (((INT_PTR)p)&a1))&a1); -} -static void *__newBlock_align(compileContext *ctx, int32_t size, int32_t align, int32_t isForCode) -{ - const int32_t a1 = align - 1; - char *p = (char*)__newBlock( - ( - isForCode < 0 ? (isForCode == -2 ? &ctx->pblocks : &ctx->tmpblocks_head) : - isForCode > 0 ? &ctx->blocks_head : - &ctx->blocks_head_data), size + a1); - return p + ((align - (((INT_PTR)p)&a1))&a1); -} -static opcodeRec *newOpCode(compileContext *ctx, const char *str, int32_t opType) -{ - const size_t strszfull = str ? strlen(str) : 0; - const size_t str_sz = min(NSEEL_MAX_VARIABLE_NAMELEN, strszfull); - opcodeRec *rec = (opcodeRec*)__newBlock_align(ctx, - (int32_t)(sizeof(opcodeRec) + (str_sz > 0 ? str_sz + 1 : 0)), - 8, ctx->isSharedFunctions ? 0 : -1); - if (rec) - { - memset(rec, 0, sizeof(*rec)); - rec->opcodeType = opType; - if (str_sz > 0) - { - char *p = (char *)(rec + 1); - memcpy(p, str, str_sz); - p[str_sz] = 0; - rec->relname = p; - } - else - { - rec->relname = ""; - } - } - return rec; -} -#define newCodeBlock(x,a) __newBlock_align(ctx,x,a,1) -#define newDataBlock(x,a) __newBlock_align(ctx,x,a,0) -#define newCtxDataBlock(x,a) __newBlock_align(ctx,x,a,-2) -static void freeBlocks(llBlock **start); -#ifndef DECL_ASMFUNC -#define DECL_ASMFUNC(x) \ - void nseel_asm_##x(void); \ - void nseel_asm_##x##_end(void); -void _asm_megabuf(void); -void _asm_megabuf_end(void); -#endif -#define FUNCTIONTYPE_PARAMETERCOUNTMASK 0xff -#define BIF_NPARAMS_MASK 0x7ffff00 -#define BIF_RETURNSONSTACK 0x0000100 -#define BIF_LASTPARMONSTACK 0x0000200 -#define BIF_RETURNSBOOL 0x0000400 -#define BIF_LASTPARM_ASBOOL 0x0000800 -// 0x00?0000 -- taken by FP stack flags -#define BIF_TAKES_VARPARM 0x0400000 -#define BIF_TAKES_VARPARM_EX 0x0C00000 // this is like varparm but check count exactly -#define BIF_WONTMAKEDENORMAL 0x0100000 -#define BIF_CLEARDENORMAL 0x0200000 -#if defined(GLUE_HAS_FXCH) && GLUE_MAX_FPSTACK_SIZE > 0 -#define BIF_SECONDLASTPARMST 0x0001000 // use with BIF_LASTPARMONSTACK only (last two parameters get passed on fp stack) -#define BIF_LAZYPARMORDERING 0x0002000 // allow optimizer to avoid fxch when using BIF_TWOPARMSONFPSTACK_LAZY etc -#define BIF_REVERSEFPORDER 0x0004000 // force a fxch (reverse order of last two parameters on fp stack, used by comparison functions) -#ifndef BIF_FPSTACKUSE -#define BIF_FPSTACKUSE(x) (((x)>=0&&(x)<8) ? ((7-(x))<<16):0) -#endif -#ifndef BIF_GETFPSTACKUSE -#define BIF_GETFPSTACKUSE(x) (7 - (((x)>>16)&7)) -#endif -#else - // do not support fp stack use unless GLUE_HAS_FXCH and GLUE_MAX_FPSTACK_SIZE>0 -#define BIF_SECONDLASTPARMST 0 -#define BIF_LAZYPARMORDERING 0 -#define BIF_REVERSEFPORDER 0 -#define BIF_FPSTACKUSE(x) 0 -#define BIF_GETFPSTACKUSE(x) 0 -#endif -#define BIF_TWOPARMSONFPSTACK (BIF_SECONDLASTPARMST|BIF_LASTPARMONSTACK) -#define BIF_TWOPARMSONFPSTACK_LAZY (BIF_LAZYPARMORDERING|BIF_SECONDLASTPARMST|BIF_LASTPARMONSTACK) -float NSEEL_CGEN_CALL nseel_int_rand(float f); -#define FNPTR_HAS_CONDITIONAL_EXEC(op) \ - (op->fntype == FN_LOGICAL_AND || \ - op->fntype == FN_LOGICAL_OR || \ - op->fntype == FN_IF_ELSE || \ - op->fntype == FN_WHILE || \ - op->fntype == FN_LOOP) -// Add custom functions -static const unsigned char base64_table[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -/** - * base64_encode - Base64 encode - * @src: Data to be encoded - * @len: Length of the data to be encoded - * @out_len: Pointer to output length variable, or %NULL if not used - * Returns: Allocated buffer of out_len bytes of encoded data, - * or %NULL on failure - * - * Caller is responsible for freeing the returned buffer. Returned buffer is - * nul terminated to make it easier to use as a C string. The nul terminator is - * not included in out_len. - */ -static unsigned char* base64_encode(const unsigned char *src, size_t len, size_t *out_len) -{ - unsigned char *out, *pos; - const unsigned char *end, *in; - size_t olen; - olen = len * 4 / 3 + 4; /* 3-byte blocks to 4-byte */ - olen += olen / 72; /* line feeds */ - olen++; /* nul termination */ - if (olen < len) - return NULL; /* integer overflow */ - out = (unsigned char*)malloc(olen); - if (out == NULL) - return NULL; - end = src + len; - in = src; - pos = out; - while (end - in >= 3) { - *pos++ = base64_table[in[0] >> 2]; - *pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)]; - *pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)]; - *pos++ = base64_table[in[2] & 0x3f]; - in += 3; - } - - if (end - in) { - *pos++ = base64_table[in[0] >> 2]; - if (end - in == 1) { - *pos++ = base64_table[(in[0] & 0x03) << 4]; - *pos++ = '='; - } - else { - *pos++ = base64_table[((in[0] & 0x03) << 4) | - (in[1] >> 4)]; - *pos++ = base64_table[(in[1] & 0x0f) << 2]; - } - *pos++ = '='; - } - *pos = '\0'; - if (out_len) - *out_len = pos - out; - return out; -} -/** - * base64_decode - Base64 decode - * @src: Data to be decoded - * @len: Length of the data to be decoded - * @out_len: Pointer to output length variable - * Returns: Allocated buffer of out_len bytes of decoded data, - * or %NULL on failure - * - * Caller is responsible for freeing the returned buffer. - */ -static unsigned char* base64_decode(const unsigned char *src, size_t len, size_t *out_len) -{ - unsigned char dtable[256], *out, *pos, block[4], tmp; - size_t i, count, olen; - int32_t pad = 0; - - memset(dtable, 0x80, 256); - for (i = 0; i < sizeof(base64_table) - 1; i++) - dtable[base64_table[i]] = (unsigned char)i; - dtable['='] = 0; - - count = 0; - for (i = 0; i < len; i++) { - if (dtable[src[i]] != 0x80) - count++; - } - - if (count == 0 || count % 4) - return NULL; - - olen = count / 4 * 3; - pos = out = malloc(olen); - if (out == NULL) - return NULL; - - count = 0; - for (i = 0; i < len; i++) { - tmp = dtable[src[i]]; - if (tmp == 0x80) - continue; - - if (src[i] == '=') - pad++; - block[count] = tmp; - count++; - if (count == 4) { - *pos++ = (block[0] << 2) | (block[1] >> 4); - *pos++ = (block[1] << 4) | (block[2] >> 2); - *pos++ = (block[2] << 6) | block[3]; - count = 0; - if (pad) { - if (pad == 1) - pos--; - else if (pad == 2) - pos -= 2; - else { - /* Invalid padding */ - free(out); - return NULL; - } - break; - } - } - } - - *out_len = pos - out; - return out; -} -#include -#ifndef _WIN32 -#include -#include -#endif -static float NSEEL_CGEN_CALL _eel_sleep(float amt) -{ - if (amt >= 0.0f) - { -#ifdef _WIN32 - if (amt > 30000000.0) Sleep(30000000); - else Sleep((DWORD)(amt + 0.5f)); -#else - if (amt > 30000000.0) usleep(((useconds_t)30000000) * 1000); - else usleep((useconds_t)(amt * 1000.0 + 0.5f)); -#endif - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_time(void *opaque) -{ - return (float)time(NULL); -} -static float NSEEL_CGEN_CALL _eel_time_precise(void *opaque) -{ -#ifdef _WIN32 - LARGE_INTEGER freq, now; - QueryPerformanceFrequency(&freq); - QueryPerformanceCounter(&now); - return (float)now.QuadPart / (float)freq.QuadPart; -#else - struct timeval tm = { 0, }; - gettimeofday(&tm, NULL); - return (float)tm.tv_sec + (float)tm.tv_usec * 0.000001; -#endif -} -void discreteHartleyTransform(double *A, const int32_t nPoints, const double *sinTab) -{ - int32_t i, j, n, n2, theta_inc, nptDiv2; - double alpha, beta; - for (i = 0; i < nPoints; i += 4) - { - const double x0 = A[i]; - const double x1 = A[i + 1]; - const double x2 = A[i + 2]; - const double x3 = A[i + 3]; - const double y0 = x0 + x1; - const double y1 = x0 - x1; - const double y2 = x2 + x3; - const double y3 = x2 - x3; - A[i] = y0 + y2; - A[i + 2] = y0 - y2; - A[i + 1] = y1 + y3; - A[i + 3] = y1 - y3; - } - for (i = 0; i < nPoints; i += 8) - { - alpha = A[i]; - beta = A[i + 4]; - A[i] = alpha + beta; - A[i + 4] = alpha - beta; - alpha = A[i + 2]; - beta = A[i + 6]; - A[i + 2] = alpha + beta; - A[i + 6] = alpha - beta; - alpha = A[i + 1]; - const double beta1 = 0.70710678118654752440084436210485*(A[i + 5] + A[i + 7]); - const double beta2 = 0.70710678118654752440084436210485*(A[i + 5] - A[i + 7]); - A[i + 1] = alpha + beta1; - A[i + 5] = alpha - beta1; - alpha = A[i + 3]; - A[i + 3] = alpha + beta2; - A[i + 7] = alpha - beta2; - } - n = 16; - n2 = 8; - theta_inc = nPoints >> 4; - nptDiv2 = nPoints >> 2; - while (n <= nPoints) - { - for (i = 0; i < nPoints; i += n) - { - int32_t theta = theta_inc; - const int32_t n4 = n2 >> 1; - alpha = A[i]; - beta = A[i + n2]; - A[i] = alpha + beta; - A[i + n2] = alpha - beta; - alpha = A[i + n4]; - beta = A[i + n2 + n4]; - A[i + n4] = alpha + beta; - A[i + n2 + n4] = alpha - beta; - for (j = 1; j < n4; j++) - { - double sinval = sinTab[theta]; - double cosval = sinTab[theta + nptDiv2]; - double alpha1 = A[i + j]; - double alpha2 = A[i - j + n2]; - double beta1 = A[i + j + n2] * cosval + A[i - j + n] * sinval; - double beta2 = A[i + j + n2] * sinval - A[i - j + n] * cosval; - theta += theta_inc; - A[i + j] = alpha1 + beta1; - A[i + j + n2] = alpha1 - beta1; - A[i - j + n2] = alpha2 + beta2; - A[i - j + n] = alpha2 - beta2; - } - } - n <<= 1; - n2 <<= 1; - theta_inc >>= 1; - } -} -void discreteHartleyTransformFloat(float *A, const int32_t nPoints, const float *sinTab) -{ - int32_t i, j, n, n2, theta_inc, nptDiv2; - float alpha, beta; - for (i = 0; i < nPoints; i += 4) - { - const float x0 = A[i]; - const float x1 = A[i + 1]; - const float x2 = A[i + 2]; - const float x3 = A[i + 3]; - const float y0 = x0 + x1; - const float y1 = x0 - x1; - const float y2 = x2 + x3; - const float y3 = x2 - x3; - A[i] = y0 + y2; - A[i + 2] = y0 - y2; - A[i + 1] = y1 + y3; - A[i + 3] = y1 - y3; - } - for (i = 0; i < nPoints; i += 8) - { - alpha = A[i]; - beta = A[i + 4]; - A[i] = alpha + beta; - A[i + 4] = alpha - beta; - alpha = A[i + 2]; - beta = A[i + 6]; - A[i + 2] = alpha + beta; - A[i + 6] = alpha - beta; - alpha = A[i + 1]; - const float beta1 = 0.70710678118654752440084436210485f*(A[i + 5] + A[i + 7]); - const float beta2 = 0.70710678118654752440084436210485f*(A[i + 5] - A[i + 7]); - A[i + 1] = alpha + beta1; - A[i + 5] = alpha - beta1; - alpha = A[i + 3]; - A[i + 3] = alpha + beta2; - A[i + 7] = alpha - beta2; - } - n = 16; - n2 = 8; - theta_inc = nPoints >> 4; - nptDiv2 = nPoints >> 2; - while (n <= nPoints) - { - for (i = 0; i < nPoints; i += n) - { - int32_t theta = theta_inc; - const int32_t n4 = n2 >> 1; - alpha = A[i]; - beta = A[i + n2]; - A[i] = alpha + beta; - A[i + n2] = alpha - beta; - alpha = A[i + n4]; - beta = A[i + n2 + n4]; - A[i + n4] = alpha + beta; - A[i + n2 + n4] = alpha - beta; - for (j = 1; j < n4; j++) - { - float sinval = sinTab[theta]; - float cosval = sinTab[theta + nptDiv2]; - float alpha1 = A[i + j]; - float alpha2 = A[i - j + n2]; - float beta1 = A[i + j + n2] * cosval + A[i - j + n] * sinval; - float beta2 = A[i + j + n2] * sinval - A[i - j + n] * cosval; - theta += theta_inc; - A[i + j] = alpha1 + beta1; - A[i + j + n2] = alpha1 - beta1; - A[i - j + n2] = alpha2 + beta2; - A[i - j + n] = alpha2 - beta2; - } - } - n <<= 1; - n2 <<= 1; - theta_inc >>= 1; - } -} -#define M_PIDouble 3.1415926535897932384626433832795f -void getAsymmetricWindow(float *analysisWnd, float *synthesisWnd, int32_t k, int32_t m, float freq_temporal) -{ - int32_t i; - memset(synthesisWnd, 0, k * sizeof(float)); - if (freq_temporal < 0.4f) - freq_temporal = 0.4f; - if (freq_temporal > 1.8f) - freq_temporal = 1.8f; - int32_t n = ((k - m) << 1) + 2; - for (i = 0; i < k - m; ++i) - analysisWnd[i] = (float)pow(sqrt(0.5f * (1.0f - cos(2.0f * M_PIDouble * (i + 1.0f) / (float)n))), freq_temporal); - n = (m << 1) + 2; - if (freq_temporal > 1.5f) - freq_temporal = 1.5f; - for (i = k - m; i < k; ++i) - analysisWnd[i] = (float)pow(sqrt(0.5f * (1.0f - cos(2.0f * M_PIDouble * ((m + i - (k - m)) + 1.0f) / (float)n))), freq_temporal); - n = m << 1; - for (i = k - (m << 1); i < k; ++i) - synthesisWnd[i] = (float)(0.5f * (1.0f - cos(2.0f * M_PIDouble * (float)(i - (k - (m << 1))) / (float)n))) / analysisWnd[i]; -} -void STFT_DynInit(int32_t *indexFw, float *analysisWnd) -{ - int32_t i; - int32_t ovpSmps = indexFw[0] / indexFw[1]; - int32_t bufferSize = (indexFw[0] * 6) + indexFw[3] + indexFw[3] + (int32_t)((float)(indexFw[0] * sizeof(uint32_t)) / (float)(sizeof(float) / sizeof(uint32_t))); - memset(analysisWnd, 0, bufferSize * sizeof(float)); - float *synthesisWnd = analysisWnd + indexFw[0]; - uint32_t *bitRevTbl = (uint32_t*)(analysisWnd + (indexFw[0] * 6) + indexFw[3] + indexFw[3]); - uint32_t bitsConst = 0; - uint32_t v = indexFw[0]; - while (v > 1) - { - ++bitsConst; - v >>= 1; - } - for (i = 0; i < indexFw[0]; ++i) - { - uint32_t bits = bitsConst; - uint32_t x = i; - bitRevTbl[i] = 0; - while (bits--) - { - bitRevTbl[i] = (bitRevTbl[i] + bitRevTbl[i]) + (x & 1); - x >>= 1; - } - } - float *sineTbl = synthesisWnd + indexFw[0]; - float pi2dN = (M_PIDouble * 2.0f) / indexFw[0]; - for (i = 0; i < indexFw[0]; ++i) - sineTbl[i] = (float)sin(pi2dN * i); - getAsymmetricWindow(analysisWnd, synthesisWnd, indexFw[0], ovpSmps, indexFw[5] / (float)32767); - // Pre-shift window function - for (i = 0; i < indexFw[0] - indexFw[2]; i++) - synthesisWnd[i] = synthesisWnd[i + indexFw[2]] * (1.0f / indexFw[0]) * 0.5f; -} -int32_t STFTCartesian(float *indexer, float *analysisWnd, float *ptr) -{ - int32_t *indexFw = (int32_t*)indexer; - float *mSineTab = analysisWnd + indexFw[0] * 2; - float *mInput = mSineTab + indexFw[0]; - float *mTempBuffer = mInput + indexFw[0]; - uint32_t *bitRevTbl = (uint32_t*)(analysisWnd + (indexFw[0] * 6) + indexFw[3] + indexFw[3]); - int32_t i, symIdx; - for (i = 0; i < indexFw[0]; ++i) - mTempBuffer[bitRevTbl[i]] = mInput[(i + indexFw[4]) & (indexFw[0] - 1)] * analysisWnd[i]; - discreteHartleyTransformFloat(mTempBuffer, indexFw[0], mSineTab); - ptr[0] = mTempBuffer[0] * 2.0f; - ptr[1] = 0.0f; - float lR, lI; - for (i = 1; i < ((indexFw[0] >> 1) + 1); i++) - { - symIdx = indexFw[0] - i; - lR = mTempBuffer[i] + mTempBuffer[symIdx]; - lI = mTempBuffer[i] - mTempBuffer[symIdx]; - ptr[i << 1] = lR; - ptr[(i << 1) + 1] = lI; - } - return indexFw[0] + 2; -} -int32_t STFTPolar(float *indexer, float *analysisWnd, float *ptr) -{ - int32_t *indexFw = (int32_t*)indexer; - float *mSineTab = analysisWnd + indexFw[0] * 2; - float *mInput = mSineTab + indexFw[0]; - float *mTempBuffer = mInput + indexFw[0]; - uint32_t *bitRevTbl = (uint32_t*)(analysisWnd + (indexFw[0] * 6) + indexFw[3] + indexFw[3]); - int32_t i, symIdx; - for (i = 0; i < indexFw[0]; ++i) - mTempBuffer[bitRevTbl[i]] = mInput[(i + indexFw[4]) & (indexFw[0] - 1)] * analysisWnd[i]; - discreteHartleyTransformFloat(mTempBuffer, indexFw[0], mSineTab); - ptr[0] = fabsf(mTempBuffer[0] * 2.0f); - ptr[1] = ((mTempBuffer[0] < 0.0f) ? M_PIDouble : 0.0f); - float lR, lI; - for (i = 1; i < ((indexFw[0] >> 1) + 1); i++) - { - symIdx = indexFw[0] - i; - lR = mTempBuffer[i] + mTempBuffer[symIdx]; - lI = mTempBuffer[i] - mTempBuffer[symIdx]; - ptr[i << 1] = hypotf(lR, lI); - ptr[(i << 1) + 1] = atan2f(lI, lR); - } - return indexFw[0] + 2; -} -int32_t STFTCartesianInverse(float *indexer, float *analysisWnd, float *ptr) -{ - int32_t *indexFw = (int32_t*)indexer; - float *synthesisWnd = analysisWnd + indexFw[0]; - float *mSineTab = synthesisWnd + indexFw[0]; - float *timeDomainOut = mSineTab + indexFw[0] * 3; - float *mOutputBuffer = timeDomainOut + indexFw[0]; - float *mOverlapStage2Ldash = mOutputBuffer + indexFw[3]; - uint32_t *bitRevTbl = (uint32_t*)(analysisWnd + (indexFw[0] * 6) + indexFw[3] + indexFw[3]); - int32_t i; - timeDomainOut[0] = ptr[0]; - float lR, lI; - for (i = 1; i < ((indexFw[0] >> 1) + 1); i++) - { - lR = ptr[i << 1]; - lI = ptr[(i << 1) + 1]; - timeDomainOut[bitRevTbl[i]] = (lR + lI); - timeDomainOut[bitRevTbl[indexFw[0] - i]] = (lR - lI); - } - discreteHartleyTransformFloat(timeDomainOut, indexFw[0], mSineTab); - for (i = 0; i < indexFw[0] - indexFw[2]; i++) - timeDomainOut[i] = timeDomainOut[i + indexFw[2]] * synthesisWnd[i]; - for (i = 0; i < indexFw[3]; ++i) - { - mOutputBuffer[i] = mOverlapStage2Ldash[i] + timeDomainOut[i]; - mOverlapStage2Ldash[i] = timeDomainOut[indexFw[3] + i]; - } - return indexFw[3]; -} -int32_t STFTPolarInverse(float *indexer, float *analysisWnd, float *ptr) -{ - int32_t *indexFw = (int32_t*)indexer; - float *synthesisWnd = analysisWnd + indexFw[0]; - float *mSineTab = synthesisWnd + indexFw[0]; - float *timeDomainOut = mSineTab + indexFw[0] * 3; - float *mOutputBuffer = timeDomainOut + indexFw[0]; - float *mOverlapStage2Ldash = mOutputBuffer + indexFw[3]; - uint32_t *bitRevTbl = (uint32_t*)(analysisWnd + (indexFw[0] * 6) + indexFw[3] + indexFw[3]); - int32_t i; - float magnitude = ptr[0]; - float phase = ptr[1]; - float lR, lI; - timeDomainOut[0] = magnitude * cosf(phase); - for (i = 1; i < ((indexFw[0] >> 1) + 1); i++) - { - magnitude = ptr[i << 1]; - phase = ptr[(i << 1) + 1]; - lR = magnitude * cosf(phase); - lI = magnitude * sinf(phase); - timeDomainOut[bitRevTbl[i]] = (lR + lI); - timeDomainOut[bitRevTbl[indexFw[0] - i]] = (lR - lI); - } - discreteHartleyTransformFloat(timeDomainOut, indexFw[0], mSineTab); - for (i = 0; i < indexFw[0] - indexFw[2]; i++) - timeDomainOut[i] = timeDomainOut[i + indexFw[2]] * synthesisWnd[i]; - for (i = 0; i < indexFw[3]; ++i) - { - mOutputBuffer[i] = mOverlapStage2Ldash[i] + timeDomainOut[i]; - mOverlapStage2Ldash[i] = timeDomainOut[indexFw[3] + i]; - } - return indexFw[3]; -} -static float NSEEL_CGEN_CALL stftInit(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - float *start1 = parms[0]; - int32_t offs1 = (int32_t)(*start1 + NSEEL_CLOSEFACTOR); - float *start2 = parms[1]; - int32_t offs2 = (int32_t)(*start2 + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float *stftFloatStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t *indexFw = (int32_t*)indexer; - STFT_DynInit(indexFw, stftFloatStruct); - return (float)indexFw[3]; -} -static float NSEEL_CGEN_CALL stftGetWindowPower(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - float *start1 = parms[0]; - int32_t offs1 = (int32_t)(*start1 + NSEEL_CLOSEFACTOR); - float *start2 = parms[1]; - int32_t offs2 = (int32_t)(*start2 + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float *stftFloatStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t *indexFw = (int32_t*)indexer; - float sumOfPreWindow = 0.0f; - for (int i = 0; i < indexFw[0]; i++) - sumOfPreWindow += stftFloatStruct[i]; - return 1.0f / sumOfPreWindow; -} -static float NSEEL_CGEN_CALL stftForward(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *ptr = __NSEEL_RAMAlloc(blocks, (uint64_t)offs); - int32_t offs1 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - int32_t offs2 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float *stftFloatStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t cartesian = (int32_t)(*parms[3]); - int32_t *indexFw = (int32_t*)indexer; - float *mInput = stftFloatStruct + indexFw[0] * 3; - memcpy(&mInput[indexFw[4]], ptr, indexFw[3] * sizeof(float)); - indexFw[4] = (indexFw[4] + indexFw[3]) & (indexFw[0] - 1); - if (cartesian) - return (float)STFTCartesian(indexer, stftFloatStruct, ptr); - else - return (float)STFTPolar(indexer, stftFloatStruct, ptr); -} -static float NSEEL_CGEN_CALL stftBackward(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *ptr = __NSEEL_RAMAlloc(blocks, (uint64_t)offs); - int32_t offs1 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - int32_t offs2 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float *stftFloatStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t cartesian = (int32_t)(*parms[3]); - int32_t *indexFw = (int32_t*)indexer; - int32_t ret; - if (cartesian) - ret = STFTCartesianInverse(indexer, stftFloatStruct, ptr); - else - ret = STFTPolarInverse(indexer, stftFloatStruct, ptr); - memcpy(ptr, stftFloatStruct + indexFw[0] * 6, indexFw[3] * sizeof(float)); - return (float)ret; -} -int32_t STFT_DynConstructor(float *indexer, int32_t fftLen, int32_t analysisOvp, float tf_res) -{ - int32_t ovpSmps = fftLen / analysisOvp; - int32_t sampleShift = (fftLen - (ovpSmps << 1)); - int32_t *indexFw = (int32_t*)indexer; - indexFw[0] = fftLen; - indexFw[1] = analysisOvp; - indexFw[2] = sampleShift; - indexFw[3] = ovpSmps; - indexFw[4] = 0; - indexFw[5] = (int32_t)(tf_res * (float)32767); - return ((fftLen * 6) + ovpSmps + ovpSmps + (int32_t)((float)(fftLen * sizeof(uint32_t)) / (float)(sizeof(float) / sizeof(uint32_t)))); -} -static float NSEEL_CGEN_CALL stftCheckMemoryRequirement(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - uint32_t offs1 = (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t fftlen = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - int32_t analyOv = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - return (float)STFT_DynConstructor(indexer, fftlen, analyOv, *parms[3]); -} -void runStateArburg(double *Z, double *b, double x, int n) -{ - for (int j = 1; j < n; j++) // Update conditions - Z[j - 1] = -b[j] * x + Z[j]; - Z[n - 1] = -b[n] * x; -} -double predictArburg(double *Z, double *a, int n) -{ - double Yi = Z[0]; // Filtered value - for (int j = 1; j < n; j++) // Update conditions - Z[j - 1] = Z[j] - a[j] * Yi; - Z[n - 1] = -a[n] * Yi; - return Yi; // Write to output -} -void TrainArburg(char *bg, float *xn, unsigned int xLen) -{ - unsigned int i, j; - char getPredictionState = *bg; - unsigned int *flag = (unsigned int*)(bg + 1); - const unsigned int _mCoefficientsNumber = *flag; - unsigned int lenM1 = xLen - 1; - - // Creates internal variables with desirable length - double *predictionCoefficients = (double*)(flag + 1); - memset(predictionCoefficients, 0, (_mCoefficientsNumber + 1) * sizeof(double)); - double *reflectionCoefficient = predictionCoefficients + (_mCoefficientsNumber + 1); - memset(reflectionCoefficient, 0, (_mCoefficientsNumber + 1) * sizeof(double)); - double *_r = reflectionCoefficient + (_mCoefficientsNumber + 1); - memset(_r, 0, (_mCoefficientsNumber + 1) * sizeof(double)); - double *_c = _r + (_mCoefficientsNumber + 1); - double *_deltaRAndAProduct = _c + (_mCoefficientsNumber + 1); - double *_g = _deltaRAndAProduct + (_mCoefficientsNumber + 1); - memset(_g, 0, (_mCoefficientsNumber + 2) * sizeof(double)); - double *tmp = _g + (_mCoefficientsNumber + 2); - double *forwardState = tmp + (_mCoefficientsNumber + 2); - double *backwardState = forwardState + (_mCoefficientsNumber + 1); - - // Initializes i_iterationCounter and vectors. For details see step 0 of algorithm on page 3 of the paper - /// Calculates autocorrelations. For details see step 0 of algorithm on page 3 of the paper - for (j = 0; j <= _mCoefficientsNumber; j++) - { - _c[j] = 0.0; - for (i = 0; i < xLen - j; i++) - _c[j] += xn[i] * xn[i + j]; - } - unsigned int _iIterationCounter = 0; - predictionCoefficients[0] = 1.0; - _g[0] = 2.0 * _c[0] - fabs(xn[0]) * fabs(xn[0]) - fabs(xn[lenM1]) * fabs(xn[lenM1]); - _g[1] = 2.0 * _c[1]; - // the paper says r[1], error in paper? - _r[0] = 2.0 * _c[1]; - - while (_iIterationCounter <= _mCoefficientsNumber) - { - // Computes vector of reflection coefficients. For details see step 1 of algorithm on page 3 of the paper - double nominator = 0.0; - double denominator = (double)FLT_EPSILON; - for (i = 0; i <= _iIterationCounter + 1; i++) - { - nominator += predictionCoefficients[i] * _g[(_iIterationCounter + 1) - i]; - denominator += predictionCoefficients[i] * _g[i]; - } - reflectionCoefficient[_iIterationCounter] = -nominator / denominator; - // Updates vector of prediction coefficients. For details see step 2 of algorithm on page 3 of the paper - memcpy(tmp, predictionCoefficients, (_mCoefficientsNumber + 1) * sizeof(double)); - for (i = 0; i <= _iIterationCounter + 1; i++) - predictionCoefficients[i] = tmp[i] + reflectionCoefficient[_iIterationCounter] * tmp[(_iIterationCounter + 1) - i]; - _iIterationCounter++; - if (_iIterationCounter == _mCoefficientsNumber) - { - if (getPredictionState) - { - memset(forwardState, 0, (_mCoefficientsNumber + 1) * sizeof(double)); - memset(backwardState, 0, (_mCoefficientsNumber + 1) * sizeof(double)); - for (i = 0; i < xLen; i++) - { - runStateArburg(forwardState, predictionCoefficients, xn[i], _mCoefficientsNumber); // Forward - runStateArburg(backwardState, predictionCoefficients, xn[lenM1 - i], _mCoefficientsNumber); // Backward - } - } - break; - } - // Updates vector r. For details see step 5 of algorithm on page 3 of the paper - memcpy(tmp, _r, (_mCoefficientsNumber + 1) * sizeof(double)); - for (i = 0; i <= _iIterationCounter - 1; i++) - _r[i + 1] = tmp[i] - xn[i] * xn[_iIterationCounter] - xn[lenM1 - i] * xn[lenM1 - _iIterationCounter]; - _r[0] = 2.0 * _c[_iIterationCounter + 1]; - - // Calculates vector deltaRAndAProduct. For details see step 6 of algorithm on page 3 of the paper - unsigned int posEnd = lenM1 - _iIterationCounter; - unsigned int _iIterationCounterA1 = _iIterationCounter + 1; - for (i = 0; i <= _iIterationCounter; i++) - { - double innerProduct1 = 0.0; - double innerProduct2 = 0.0; - for (j = 0; j <= _iIterationCounter; j++) - { - innerProduct1 += xn[_iIterationCounter - j] * predictionCoefficients[j]; - innerProduct2 += xn[posEnd + j] * predictionCoefficients[j]; - } - _deltaRAndAProduct[i] = -xn[_iIterationCounter - i] * innerProduct1 - xn[posEnd + i] * innerProduct2; - } - // Updates vector g. For details see step 7 of algorithm on page 3 of the paper - memcpy(tmp, _g, (_mCoefficientsNumber + 2) * sizeof(double)); - // g.Length is i_iterationCounter + 1 - for (i = 0; i <= _iIterationCounter; i++) - _g[i] = tmp[i] + reflectionCoefficient[_iIterationCounter - 1] * tmp[_iIterationCounter - i] + _deltaRAndAProduct[i]; - for (i = 0; i <= _iIterationCounter; i++) - _g[_iIterationCounter + 1] += _r[i] * predictionCoefficients[i]; - } -} -static float NSEEL_CGEN_CALL arburgCheckMemoryRequirement(float *blocks, float *parm0, float *parm1) -{ - unsigned int coefficientsNumber = (unsigned int)(*parm0 + NSEEL_CLOSEFACTOR); - char getPredictionState = (char)(*parm1 + NSEEL_CLOSEFACTOR); - size_t totalMemSize = sizeof(unsigned int) + ((coefficientsNumber + 1) * (getPredictionState == 1 ? 7 : 5) + (coefficientsNumber + 2) * 2) * sizeof(double); - return (float)((totalMemSize / sizeof(float) + 1)); -} -static float NSEEL_CGEN_CALL arburgTrainModel(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - char *burg = (char*)__NSEEL_RAMAlloc(blocks, (uint64_t)offs); - int32_t offs1 = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *xn = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - *burg = (char)(*parms[2] + NSEEL_CLOSEFACTOR); - unsigned int *flag = (unsigned int*)(burg + 1); - *flag = (unsigned int)(*parms[1] + NSEEL_CLOSEFACTOR); - uint32_t xLen = (uint32_t)(*parms[4] + NSEEL_CLOSEFACTOR); - TrainArburg(burg, xn, xLen); - return 0.0f; -} -static float NSEEL_CGEN_CALL arburgGetPredictionReflectionCoeff(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - char *bg = (char*)__NSEEL_RAMAlloc(blocks, (uint64_t)offs); - int32_t offs1 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float *pdC = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *rfC = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - unsigned int *flag = (unsigned int*)(bg + 1); - const unsigned int _mCoefficientsNumber = *flag; - double *predictionCoefficients = (double*)(flag + 1); - double *reflectionCoefficient = predictionCoefficients + (_mCoefficientsNumber + 1); - for (unsigned int i = 0; i < _mCoefficientsNumber + 1; i++) - { - pdC[i] = (float)predictionCoefficients[i]; - rfC[i] = (float)reflectionCoefficient[i]; - } - return 0.0f; -} -static float NSEEL_CGEN_CALL arburgPredictBackward(float *blocks, float *start) -{ - int32_t offs = (int32_t)(*start + NSEEL_CLOSEFACTOR); - char *burg = (char*)__NSEEL_RAMAlloc(blocks, (uint64_t)offs); - unsigned int *flag = (unsigned int*)(burg + 1); - double *predictionCoefficients = (double*)(flag + 1); - double *backwardState = ((double*)(flag + 1)) + (*flag + 1) * 5 + (*flag + 2) * 2 + (*flag + 1); - double output = predictArburg(backwardState, predictionCoefficients, *flag); - return (float)output; -} -static float NSEEL_CGEN_CALL arburgPredictForward(float *blocks, float *start) -{ - int32_t offs = (int32_t)(*start + NSEEL_CLOSEFACTOR); - char *burg = (char*)__NSEEL_RAMAlloc(blocks, (uint64_t)offs); - unsigned int *flag = (unsigned int*)(burg + 1); - double *predictionCoefficients = (double*)(flag + 1); - double *forwardState = ((double*)(flag + 1)) + (*flag + 1) * 5 + (*flag + 2) * 2; - double output = predictArburg(forwardState, predictionCoefficients, *flag); - return (float)output; -} -void reverse(float *arr, int32_t start, int32_t end) -{ - while (start < end) - { - float tmp = arr[start]; - arr[start] = arr[end]; - arr[end] = tmp; - start++; - end--; - } -} -void shift(float *arr, int32_t k, int32_t n) -{ - k = k % n; - reverse(arr, 0, n - 1); - reverse(arr, 0, n - k - 1); - reverse(arr, n - k, n - 1); -} -float * NSEEL_CGEN_CALL __NSEEL_circshift(float *blocks, float *offptr, float *shiftptr, float *lenptr) -{ - uint32_t offs = (uint32_t)(*offptr + NSEEL_CLOSEFACTOR); - float *arr = __NSEEL_RAMAlloc(blocks, (uint64_t)offs); - int32_t k = (int32_t)*shiftptr; - int32_t n = (int32_t)*lenptr; - k < 0 ? shift(arr, -k, n) : shift(arr, n - k, n); - return offptr; -} -static float NSEEL_CGEN_CALL _eel_vectorizeAssignScalar(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t resultPtr = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *result = __NSEEL_RAMAlloc(blocks, (uint64_t)resultPtr); - int32_t numElements = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - for (int32_t i = 0; i < numElements; i++) - result[i] = *parms[2]; - return 1; -} -static float NSEEL_CGEN_CALL _eel_vectorizeAdd(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t resultPtr = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *result = __NSEEL_RAMAlloc(blocks, (uint64_t)resultPtr); - int32_t numElements = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - int32_t APtr = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *A = __NSEEL_RAMAlloc(blocks, (uint64_t)APtr); - int32_t BPtr = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *B = __NSEEL_RAMAlloc(blocks, (uint64_t)BPtr); - for (int32_t i = 0; i < numElements; i++) - result[i] = A[i] + B[i]; - return 1; -} -static float NSEEL_CGEN_CALL _eel_vectorizeMinus(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t resultPtr = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *result = __NSEEL_RAMAlloc(blocks, (uint64_t)resultPtr); - int32_t numElements = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - int32_t APtr = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *A = __NSEEL_RAMAlloc(blocks, (uint64_t)APtr); - int32_t BPtr = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *B = __NSEEL_RAMAlloc(blocks, (uint64_t)BPtr); - for (int32_t i = 0; i < numElements; i++) - result[i] = A[i] - B[i]; - return 1; -} -static float NSEEL_CGEN_CALL _eel_vectorizeMultiply(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t resultPtr = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *result = __NSEEL_RAMAlloc(blocks, (uint64_t)resultPtr); - int32_t numElements = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - int32_t APtr = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *A = __NSEEL_RAMAlloc(blocks, (uint64_t)APtr); - int32_t BPtr = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *B = __NSEEL_RAMAlloc(blocks, (uint64_t)BPtr); - for (int32_t i = 0; i < numElements; i++) - result[i] = A[i] * B[i]; - return 1; -} -static float NSEEL_CGEN_CALL _eel_vectorizeDivide(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t resultPtr = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *result = __NSEEL_RAMAlloc(blocks, (uint64_t)resultPtr); - int32_t numElements = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - int32_t APtr = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *A = __NSEEL_RAMAlloc(blocks, (uint64_t)APtr); - int32_t BPtr = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *B = __NSEEL_RAMAlloc(blocks, (uint64_t)BPtr); - for (int32_t i = 0; i < numElements; i++) - result[i] = A[i] / B[i]; - return 1; -} -float expint(float x) -{ - if (x <= 1.0f) - return -0.57721566490153286060651209f - logf(x) + x * (-x / 4.0f + 1.0f); - float term = 0.0f; - for (int32_t k = 1 + (int32_t)floorf(80.0f / x); k >= 1; k--) - term = k / (1.0f + k / (x + term)); - return expf(-x) / (x + term); -} -// Domain: 0.001 ~ 0.5f -static const float ExpintTable1[500] = { 6.33153936413615f, 5.63939143396494f, 5.23492507691165f, 4.94824125651360f, 4.72609545858444f, 4.54477115683906f, 4.39161723405586f, 4.25908210080260f, 4.14229482717614f, 4.03792957653811f, 3.94361416507444f, 3.85759706007702f, 3.77854812837773f, 3.70543343651052f, 3.63743334995231f, 3.57388711871546f, 3.51425429210118f, 3.45808717909408f, 3.40501076461633f, 3.35470778330971f, 3.30690743883812f, 3.26137674984624f, 3.21791382119158f, 3.17634254828989f, 3.13650840321517f, 3.09827504776313f, 3.06152158606426f, 3.02614031708686f, 2.99203488170511f, 2.95911872402128f, 2.92731380507851f, 2.89654952085833f, 2.86676178682571f, 2.83789225917520f, 2.80988766899124f, 2.78269925022877f, 2.75628224608441f, 2.73059548120986f, 2.70560098950218f, 2.68126368902528f, 2.65755109707773f, 2.63443307960029f, 2.61188163007365f, 2.58987067383731f, 2.56837589440108f, 2.54737457884799f, 2.52684547986474f, 2.50676869229857f, 2.48712554244313f, 2.46789848850997f, 2.44907103095643f, 2.43062763152119f, 2.41255363997231f, 2.39483522770240f, 2.37745932741712f, 2.36041357825803f, 2.34368627578265f, 2.32726632629475f, 2.31114320507867f, 2.29530691814378f, 2.27974796713116f, 2.26445731707363f, 2.24942636673543f, 2.23464692128761f, 2.22011116710190f, 2.20581164846892f, 2.19174124606712f, 2.17789315702680f, 2.16426087644945f, 2.15083818025680f, 2.13761910925637f, 2.12459795432145f, 2.11176924259316f, 2.09912772462139f, 2.08666836236871f, 2.07438631800884f, 2.06227694345737f, 2.05033577057783f, 2.03855850201183f, 2.02694100258574f, 2.01547929125139f, 2.00416953352107f, 1.99300803436109f, 1.98199123151100f, 1.97111568919802f, 1.96037809221915f, 1.94977524036537f, 1.93930404316446f, 1.92896151492086f, 1.91874477003266f, 1.90865101856733f, 1.89867756207924f, 1.88882178965323f, 1.87908117415985f, 1.86945326870865f, 1.85993570328723f, 1.85052618157445f, 1.84122247791703f, 1.83202243445968f, 1.82292395841939f, 1.81392501949540f, 1.80502364740671f, 1.79621792954979f, 1.78750600876935f, 1.77888608123583f, 1.77035639442354f, 1.76191524518360f, 1.75356097790666f, 1.74529198277014f, 1.73710669406567f, 1.72900358860208f, 1.72098118418005f, 1.71303803813460f, 1.70517274594176f, 1.69738393988603f, 1.68967028778564f, 1.68203049177242f, 1.67446328712364f, 1.66696744114317f, 1.65954175208938f, 1.65218504814758f, 1.64489618644475f, 1.63767405210444f, 1.63051755734000f, 1.62342564058417f, 1.61639726565340f, 1.60943142094514f, 1.60252711866667f, 1.59568339409389f, 1.58889930485880f, 1.58217393026415f, 1.57550637062431f, 1.56889574663089f, 1.56234119874219f, 1.55584188659529f, 1.54939698843990f, 1.54300570059289f, 1.53666723691273f, 1.53038082829278f, 1.52414572217289f, 1.51796118206826f, 1.51182648711501f, 1.50574093163171f, 1.49970382469613f, 1.49371448973666f, 1.48777226413783f, 1.48187649885916f, 1.47602655806709f, 1.47022181877919f, 1.46446167052028f, 1.45874551499005f, 1.45307276574158f, 1.44744284787039f, 1.44185519771371f, 1.43630926255935f, 1.43080450036407f, 1.42534037948083f, 1.41991637839478f, 1.41453198546754f, 1.40918669868949f, 1.40388002543983f, 1.39861148225397f, 1.39338059459819f, 1.38818689665114f, 1.38302993109194f, 1.37790924889475f, 1.37282440912947f, 1.36777497876843f, 1.36276053249873f, 1.35778065254024f, 1.35283492846881f, 1.34792295704476f, 1.34304434204620f, 1.33819869410729f, 1.33338563056104f, 1.32860477528666f, 1.32385575856114f, 1.31913821691513f, 1.31445179299275f, 1.30979613541537f, 1.30517089864914f, 1.30057574287617f, 1.29601033386927f, 1.29147434287001f, 1.28696744647023f, 1.28248932649660f, 1.27803966989839f, 1.27361816863814f, 1.26922451958530f, 1.26485842441262f, 1.26051958949533f, 1.25620772581287f, 1.25192254885323f, 1.24766377851975f, 1.24343113904031f, 1.23922435887882f, 1.23504317064902f, 1.23088731103039f, 1.22675652068626f, 1.22265054418389f, 1.21856912991660f, 1.21451203002782f, 1.21047900033696f, 1.20646980026724f, 1.20248419277510f, 1.19852194428150f, 1.19458282460475f, 1.19066660689505f, 1.18677306757053f, 1.18290198625489f, 1.17905314571646f, 1.17522633180872f, 1.17142133341224f, 1.16763794237793f, 1.16387595347169f, 1.16013516432024f, 1.15641537535834f, 1.15271638977706f, 1.14903801347337f, 1.14538005500082f, 1.14174232552131f, 1.13812463875802f, 1.13452681094936f, 1.13094866080393f, 1.12739000945649f, 1.12385068042499f, 1.12033049956838f, 1.11682929504554f, 1.11334689727494f, 1.10988313889530f, 1.10643785472705f, 1.10301088173459f, 1.09960205898947f, 1.09621122763424f, 1.09283823084711f, 1.08948291380742f, 1.08614512366176f, 1.08282470949081f, 1.07952152227697f, 1.07623541487250f, 1.07296624196851f, 1.06971386006443f, 1.06647812743823f, 1.06325890411715f, 1.06005605184912f, 1.05686943407471f, 1.05369891589963f, 1.05054436406786f, 1.04740564693527f, 1.04428263444374f, 1.04117519809585f, 1.03808321093007f, 1.03500654749642f, 1.03194508383258f, 1.02889869744056f, 1.02586726726374f, 1.02285067366439f, 1.01984879840164f, 1.01686152460984f, 1.01388873677738f, 1.01093032072589f, 1.00798616358984f, 1.00505615379652f, 1.00214018104644f, 0.999238136294059f, 0.996349911728865f, 0.993475400756876f, 0.990614497982423f, 0.987767099190299f, 0.984933101328234f, 0.982112402489699f, 0.979304901897022f, 0.976510499884809f, 0.973729097883682f, 0.970960598404302f, 0.968204905021682f, 0.965461922359790f, 0.962731556076425f, 0.960013712848367f, 0.957308300356788f, 0.954615227272931f, 0.951934403244034f, 0.949265738879512f, 0.946609145737375f, 0.943964536310890f, 0.941331824015476f, 0.938710923175825f, 0.936101749013249f, 0.933504217633244f, 0.930918246013275f, 0.928343751990763f, 0.925780654251284f, 0.923228872316966f, 0.920688326535087f, 0.918158938066864f, 0.915640628876432f, 0.913133321720014f, 0.910636940135260f, 0.908151408430781f, 0.905676651675847f, 0.903212595690257f, 0.900759167034383f, 0.898316292999373f, 0.895883901597516f, 0.893461921552770f, 0.891050282291436f, 0.888648913932996f, 0.886257747281089f, 0.883876713814638f, 0.881505745679123f, 0.879144775677990f, 0.876793737264197f, 0.874452564531905f, 0.872121192208285f, 0.869799555645474f, 0.867487590812641f, 0.865185234288193f, 0.862892423252093f, 0.860609095478304f, 0.858335189327350f, 0.856070643738996f, 0.853815398225033f, 0.851569392862186f, 0.849332568285124f, 0.847104865679583f, 0.844886226775585f, 0.842676593840777f, 0.840475909673856f, 0.838284117598100f, 0.836101161455002f, 0.833926985597995f, 0.831761534886266f, 0.829604754678678f, 0.827456590827773f, 0.825316989673861f, 0.823185898039208f, 0.821063263222303f, 0.818949032992211f, 0.816843155583011f, 0.814745579688315f, 0.812656254455868f, 0.810575129482225f, 0.808502154807510f, 0.806437280910244f, 0.804380458702259f, 0.802331639523674f, 0.800290775137951f, 0.798257817727021f, 0.796232719886476f, 0.794215434620836f, 0.792205915338876f, 0.790204115849027f, 0.788209990354839f, 0.786223493450506f, 0.784244580116458f, 0.782273205715011f, 0.780309325986082f, 0.778352897042962f, 0.776403875368148f, 0.774462217809232f, 0.772527881574849f, 0.770600824230679f, 0.768681003695509f, 0.766768378237340f, 0.764862906469556f, 0.762964547347142f, 0.761073260162954f, 0.759189004544038f, 0.757311740448002f, 0.755441428159437f, 0.753578028286381f, 0.751721501756837f, 0.749871809815336f, 0.748028914019544f, 0.746192776236916f, 0.744363358641393f, 0.742540623710147f, 0.740724534220363f, 0.738915053246067f, 0.737112144154998f, 0.735315770605516f, 0.733525896543553f, 0.731742486199606f, 0.729965504085765f, 0.728194914992784f, 0.726430683987183f, 0.724672776408401f, 0.722921157865967f, 0.721175794236724f, 0.719436651662080f, 0.717703696545296f, 0.715976895548810f, 0.714256215591593f, 0.712541623846539f, 0.710833087737889f, 0.709130574938690f, 0.707434053368279f, 0.705743491189805f, 0.704058856807781f, 0.702380118865662f, 0.700707246243463f, 0.699040208055393f, 0.697378973647534f, 0.695723512595532f, 0.694073794702333f, 0.692429789995936f, 0.690791468727175f, 0.689158801367534f, 0.687531758606980f, 0.685910311351833f, 0.684294430722649f, 0.682684088052144f, 0.681079254883129f, 0.679479902966478f, 0.677886004259118f, 0.676297530922046f, 0.674714455318365f, 0.673136750011346f, 0.671564387762516f, 0.669997341529763f, 0.668435584465468f, 0.666879089914658f, 0.665327831413178f, 0.663781782685891f, 0.662240917644895f, 0.660705210387756f, 0.659174635195774f, 0.657649166532257f, 0.656128779040825f, 0.654613447543725f, 0.653103147040173f, 0.651597852704708f, 0.650097539885575f, 0.648602184103115f, 0.647111761048182f, 0.645626246580576f, 0.644145616727490f, 0.642669847681983f, 0.641198915801459f, 0.639732797606177f, 0.638271469777766f, 0.636814909157763f, 0.635363092746164f, 0.633915997699998f, 0.632473601331907f, 0.631035881108752f, 0.629602814650226f, 0.628174379727492f, 0.626750554261822f, 0.625331316323269f, 0.623916644129338f, 0.622506516043683f, 0.621100910574808f, 0.619699806374795f, 0.618303182238032f, 0.616911017099967f, 0.615523290035870f, 0.614139980259605f, 0.612761067122424f, 0.611386530111769f, 0.610016348850085f, 0.608650503093652f, 0.607288972731423f, 0.605931737783878f, 0.604578778401895f, 0.603230074865621f, 0.601885607583366f, 0.600545357090505f, 0.599209304048392f, 0.597877429243282f, 0.596549713585273f, 0.595226138107252f, 0.593906683963851f, 0.592591332430423f, 0.591280064902018f, 0.589972862892376f, 0.588669708032933f, 0.587370582071829f, 0.586075466872932f, 0.584784344414874f, 0.583497196790091f, 0.582214006203880f, 0.580934754973459f, 0.579659425527039f, 0.578388000402911f, 0.577120462248533f, 0.575856793819634f, 0.574596977979323f, 0.573340997697209f, 0.572088836048530f, 0.570840476213289f, 0.569595901475400f, 0.568355095221847f, 0.567118040941839f, 0.565884722225992f, 0.564655122765501f, 0.563429226351332f, 0.562207016873418f, 0.560988478319864f, 0.559773594776161f }; -// Domain: 0.5f ~ 1.5 -static const float ExpintTable2[251] = { 0.559773594776161f, 0.554950295774654f, 0.550184228566447f, 0.545474419724144f, 0.540819918846431f, 0.536219797845636f, 0.531673150262605f, 0.527179090607617f, 0.522736753726183f, 0.518345294188611f, 0.514003885702249f, 0.509711720545442f, 0.505468009022217f, 0.501271978936804f, 0.497122875087133f, 0.493019958776493f, 0.488962507342567f, 0.484949813703121f, 0.480981185917635f, 0.477055946764210f, 0.473173433331126f, 0.469332996622433f, 0.465534001177009f, 0.461775824700544f, 0.458057857709903f, 0.454379503189402f, 0.450740176258502f, 0.447139303850470f, 0.443576324401589f, 0.440050687550483f, 0.436561853847192f, 0.433109294471587f, 0.429692490960805f, 0.426310934945320f, 0.422964127893360f, 0.419651580863333f, 0.416372814263966f, 0.413127357621880f, 0.409914749356315f, 0.406734536560751f, 0.403586274791166f, 0.400469527860700f, 0.397383867640485f, 0.394328873866420f, 0.391304133951693f, 0.388309242804826f, 0.385343802653065f, 0.382407422870921f, 0.379499719813686f, 0.376620316655740f, 0.373768843233509f, 0.370944935892892f, 0.368148237341009f, 0.365378396502136f, 0.362635068377678f, 0.359917913910035f, 0.357226599850257f, 0.354560798629336f, 0.351920188233033f, 0.349304452080114f, 0.346713278903895f, 0.344146362636973f, 0.341603402299064f, 0.339084101887818f, 0.336588170272547f, 0.334115321090748f, 0.331665272647358f, 0.329237747816627f, 0.326832473946554f, 0.324449182765786f, 0.322087610292923f, 0.319747496748133f, 0.317428586467031f, 0.315130627816727f, 0.312853373114005f, 0.310596578545543f, 0.308360004090134f, 0.306143413442834f, 0.303946573940985f, 0.301769256492064f, 0.299611235503289f, 0.297472288812947f, 0.295352197623386f, 0.293250746435620f, 0.291167722985511f, 0.289102918181468f, 0.287056126043634f, 0.285027143644513f, 0.283015771050992f, 0.281021811267725f, 0.279045070181840f, 0.277085356508928f, 0.275142481740288f, 0.273216260091375f, 0.271306508451441f, 0.269413046334320f, 0.267535695830332f, 0.265674281559272f, 0.263828630624464f, 0.261998572567834f, 0.260183939326000f, 0.258384565187321f, 0.256600286749911f, 0.254830942880567f, 0.253076374674603f, 0.251336425416562f, 0.249610940541772f, 0.247899767598750f, 0.246202756212403f, 0.244519758048025f, 0.242850626776061f, 0.241195218037623f, 0.239553389410736f, 0.237925000377293f, 0.236309912290710f, 0.234707988344255f, 0.233119093540036f, 0.231543094658634f, 0.229979860229366f, 0.228429260501155f, 0.226891167414003f, 0.225365454571042f, 0.223851997211154f, 0.222350672182151f, 0.220861357914491f, 0.219383934395520f, 0.217918283144238f, 0.216464287186559f, 0.215021831031070f, 0.213590800645265f, 0.212171083432249f, 0.210762568207898f, 0.209365145178468f, 0.207978705918639f, 0.206603143349984f, 0.205238351719856f, 0.203884226580681f, 0.202540664769647f, 0.201207564388785f, 0.199884824785426f, 0.198572346533028f, 0.197270031412369f, 0.195977782393090f, 0.194695503615591f, 0.193423100373256f, 0.192160479095018f, 0.190907547328241f, 0.189664213721924f, 0.188430388010206f, 0.187205980996190f, 0.185990904536040f, 0.184785071523391f, 0.183588395874023f, 0.182400792510829f, 0.181222177349038f, 0.180052467281716f, 0.178891580165522f, 0.177739434806718f, 0.176595950947427f, 0.175461049252136f, 0.174334651294438f, 0.173216679544007f, 0.172107057353797f, 0.171005708947475f, 0.169912559407060f, 0.168827534660787f, 0.167750561471176f, 0.166681567423308f, 0.165620480913305f, 0.164567231136999f, 0.163521748078805f, 0.162483962500777f, 0.161453805931852f, 0.160431210657273f, 0.159416109708196f, 0.158408436851462f, 0.157408126579554f, 0.156415114100704f, 0.155429335329182f, 0.154450726875736f, 0.153479226038189f, 0.152514770792199f, 0.151557299782162f, 0.150606752312267f, 0.149663068337703f, 0.148726188455997f, 0.147796053898504f, 0.146872606522027f, 0.145955788800575f, 0.145045543817253f, 0.144141815256283f, 0.143244547395151f, 0.142353685096878f, 0.141469173802417f, 0.140590959523164f, 0.139718988833596f, 0.138853208864020f, 0.137993567293430f, 0.137140012342489f, 0.136292492766605f, 0.135450957849129f, 0.134615357394647f, 0.133785641722382f, 0.132961761659695f, 0.132143668535687f, 0.131331314174900f, 0.130524650891108f, 0.129723631481212f, 0.128928209219219f, 0.128138337850319f, 0.127353971585044f, 0.126575065093524f, 0.125801573499819f, 0.125033452376345f, 0.124270657738376f, 0.123513146038632f, 0.122760874161947f, 0.122013799420013f, 0.121271879546203f, 0.120535072690475f, 0.119803337414337f, 0.119076632685907f, 0.118354917875021f, 0.117638152748432f, 0.116926297465068f, 0.116219312571358f, 0.115517158996635f, 0.114819798048592f, 0.114127191408815f, 0.113439301128373f, 0.112756089623470f, 0.112077519671165f, 0.111403554405148f, 0.110734157311576f, 0.110069292224971f, 0.109408923324170f, 0.108753015128340f, 0.108101532493039f, 0.107454440606342f, 0.106811704985010f, 0.106173291470726f, 0.105539166226369f, 0.104909295732348f, 0.104283646782986f, 0.103662186482950f, 0.103044882243734f, 0.102431701780185f, 0.101822613107082f, 0.101217584535761f, 0.100616584670779f, 0.100019582406633f }; -// Domain 1.5 ~ 3.5 -static const float ExpintTable3[126] = { 0.100019582406633f, 0.0976709372158198f, 0.0953838384149070f, 0.0931564276459467f, 0.0909869129830044f, 0.0888735660844122f, 0.0868147194907422f, 0.0848087640597390f, 0.0828541465300625f, 0.0809493672062480f, 0.0790929777578066f, 0.0772835791258635f, 0.0755198195311743f, 0.0738003925777604f, 0.0721240354467908f, 0.0704895271756689f, 0.0688956870176292f, 0.0673413728774234f, 0.0658254798189725f, 0.0643469386411095f, 0.0629047145177793f, 0.0614978056992866f, 0.0601252422713888f, 0.0587860849692256f, 0.0574794240432553f, 0.0562043781745348f, 0.0549600934368431f, 0.0537457423032842f, 0.0525605226951504f, 0.0514036570709528f, 0.0502743915536392f, 0.0491719950941388f, 0.0480957586694767f, 0.0470449945137897f, 0.0460190353806841f, 0.0450172338354382f, 0.0440389615756621f, 0.0430836087790745f, 0.0421505834771471f, 0.0412393109534225f, 0.0403492331653865f, 0.0394798081888161f, 0.0386305096836003f, 0.0378008263800681f, 0.0369902615849173f, 0.0361983327058716f, 0.0354245707942568f, 0.0346685201047068f, 0.0339297376712618f, 0.0332077928991558f, 0.0325022671716214f, 0.0318127534710799f, 0.0311388560141009f, 0.0304801898995688f, 0.0298363807694920f, 0.0292070644819443f, 0.0285918867956309f, 0.0279905030656117f, 0.0274025779497217f, 0.0268277851252616f, 0.0262658070155479f, 0.0257163345259216f, 0.0251790667888503f, 0.0246537109177589f, 0.0241399817692477f, 0.0236376017133719f, 0.0231463004116726f, 0.0226658146026547f, 0.0221958878944312f, 0.0217362705642599f, 0.0212867193647089f, 0.0208469973362054f, 0.0204168736257225f, 0.0199961233113807f, 0.0195845272327421f, 0.0191818718265862f, 0.0187879489679693f, 0.0184025558163696f, 0.0180254946667384f, 0.0176565728052777f, 0.0172956023697725f, 0.0169424002143170f, 0.0165967877782784f, 0.0162585909593461f, 0.0159276399905230f, 0.0156037693209245f, 0.0152868175002407f, 0.0149766270667522f, 0.0146730444387568f, 0.0143759198093052f, 0.0140851070441270f, 0.0138004635826326f, 0.0135218503418941f, 0.0132491316235018f, 0.0129821750231990f, 0.0127208513432019f, 0.0124650345071144f, 0.0122146014773545f, 0.0119694321750053f, 0.0117294094020133f, 0.0114944187656559f, 0.0112643486052043f, 0.0110390899207104f, 0.0108185363038491f, 0.0106025838707484f, 0.0103911311967455f, 0.0101840792530053f, 0.00998133134494335f, 0.00978279305239503f, 0.00958837217147620f, 0.00939797865808188f, 0.00921152457297160f, 0.00902892402839181f, 0.00885009313618758f, 0.00867494995735709f, 0.00850341445300474f, 0.00833540843664957f, 0.00817085552784730f, 0.00800968110708622f, 0.00785181227191778f, 0.00769717779428456f, 0.00754570807900947f, 0.00739733512341117f, 0.00725199247801176f, 0.00710961520830429f, 0.00697013985754840f }; -// Domain 3.5 ~ 11.436 -static const float ExpintTable4[63] = { 0.00697013985754843f, 0.00595165118439979f, 0.00508661641561241f, 0.00435102957490895f, 0.00372481546087525f, 0.00319115004588169f, 0.00273590601139406f, 0.00234719870089483f, 0.00201501303487467f, 0.00173089598574009f, 0.00148770235377602f, 0.00127938403852772f, 0.00110081492605982f, 0.000947645033184157f, 0.000816178756486768f, 0.000703273036244310f, 0.000606252016086186f, 0.000522835399236460f, 0.000451078202821178f, 0.000389320017508240f, 0.000336142209771689f, 0.000290331773353231f, 0.000250850756880151f, 0.000216810375484428f, 0.000187449063132408f, 0.000162113845196945f, 0.000140244512382263f, 0.000121360161310043f, 0.000105047737015578f, 9.09522708167131e-05f, 7.87685555639048e-05f, 6.82340408359011e-05f, 5.91227645848651e-05f, 5.12401661828662e-05f, 4.44186497036028e-05f, 3.85137863511616e-05f, 3.34010618509128e-05f, 2.89730888669951e-05f, 2.51372165380621e-05f, 2.18134793867002e-05f, 1.89328364567230e-05f, 1.64356588152578e-05f, 1.42704297310207e-05f, 1.23926270802452e-05f, 1.07637619830281e-05f, 9.35055145753116e-06f, 8.12420610016641e-06f, 7.05981654290921e-06f, 6.13582477694144e-06f, 5.33356842622777e-06f, 4.63688775713486e-06f, 4.03178666455650e-06f, 3.50614011821845e-06f, 3.04944161624825e-06f, 2.65258510327885e-06f, 2.30767658985817e-06f, 2.00787137790676e-06f, 1.74723336968152e-06f, 1.52061342901041e-06f, 1.32354418525242e-06f, 1.15214903255314e-06f, 1.00306338807548e-06f, 8.73366540296160e-07f }; -float linear_value(float Start, float Step, float Input, const float *Space) -{ - int32_t Index = (int32_t)((Input - Start) / Step); - float X1 = Start + Step * Index; - return Space[Index] + (Space[Index + 1] - Space[Index]) / (Start + Step * (Index + 1) - X1) * (Input - X1); -} -float expint_interpolation(float x) -{ - if (x < 0.001f) - return 6.33153936413615f; - else if (x < 0.5f) - return (float)linear_value(0.001f, 0.001f, (float)x, ExpintTable1);// 0.001:0.001:0.5f - else if (x < 1.5f) - return (float)linear_value(0.5f, 0.004f, (float)x, ExpintTable2); // 0.5f:0.004:1.5 - else if (x < 3.5f) - return (float)linear_value(1.5f, 0.016f, (float)x, ExpintTable3);// 1.5:0.016:3.5 - else if (x < 11.436f) - return (float)linear_value(3.5f, 0.128f, (float)x, ExpintTable4);// 3.5:0.128:11.5 - else - return 8.73366540296160e-07f; -} -float invsqrt(float x) -{ - return 1.0f / sqrtf(x); -} -#include "fft.h" -static void fft_reorder_buffer(int32_t bitsz, WDL_FFT_COMPLEX *data, int32_t fwd) -{ - const int32_t *tab = fft_reorder_table_for_bitsize(bitsz); - if (!fwd) - { - while (*tab) - { - const int32_t sidx = *tab++; - WDL_FFT_COMPLEX a = data[sidx]; - for (;;) - { - WDL_FFT_COMPLEX ta; - const int32_t idx = *tab++; - if (!idx) break; - ta = data[idx]; - data[idx] = a; - a = ta; - } - data[sidx] = a; - } - } - else - { - while (*tab) - { - const int32_t sidx = *tab++; - int32_t lidx = sidx; - const WDL_FFT_COMPLEX sta = data[lidx]; - for (;;) - { - const int32_t idx = *tab++; - if (!idx) break; - data[lidx] = data[idx]; - lidx = idx; - } - data[lidx] = sta; - } - } -} -// 0=fw, 1=iv, 2=fwreal, 3=ireal, 4=permutec, 6=permuter -// low bit: is inverse -// second bit: was isreal, but no longer used -// third bit: is permute -static void FFT(int32_t sizebits, float *data, int32_t dir) -{ - if (dir >= 4 && dir < 8) - { - if (dir == 4 || dir == 5) - fft_reorder_buffer(sizebits, (WDL_FFT_COMPLEX*)data, dir == 4); - } - else if (dir >= 0 && dir < 2) - WDL_fft((WDL_FFT_COMPLEX*)data, 1 << sizebits, dir & 1); - else if (dir >= 2 && dir < 4) - WDL_real_fft((float*)data, 1 << sizebits, dir & 1); -} -static float * fft_func(int32_t dir, float *blocks, float *start, float *length) -{ - const int32_t offs = (uint32_t)(*start + NSEEL_CLOSEFACTOR); - const int32_t itemSizeShift = (dir & 2) ? 0 : 1; - int32_t l = (uint32_t)(*length + NSEEL_CLOSEFACTOR); - int32_t bitl = 0; - int32_t ilen; - float *ptr; - while (l > 1 && bitl < EEL_FFT_MAXBITLEN) - { - bitl++; - l >>= 1; - } - if (bitl < ((dir & 4) ? EEL_FFT_MINBITLEN_REORDER : EEL_FFT_MINBITLEN)) // smallest FFT is 16 item, smallest reorder is 8 item - return start; - ilen = 1 << bitl; - // check to make sure we don't cross a boundary - if (offs / NSEEL_RAM_ITEMSPERBLOCK != (offs + (ilen << itemSizeShift) - 1) / NSEEL_RAM_ITEMSPERBLOCK) - { - return start; - } - ptr = __NSEEL_RAMAlloc(blocks, (uint64_t)offs); - FFT(bitl, ptr, dir); - return start; -} -static float NSEEL_CGEN_CALL eel_max(float *blocks, float *start, float *length) -{ - float *ptr = __NSEEL_RAMAlloc(blocks, (uint32_t)(*start + NSEEL_CLOSEFACTOR)); - float ma = ptr[0]; - for (uint32_t i = 1; i < (uint32_t)(*length + NSEEL_CLOSEFACTOR); i++) - { - if (ptr[i] > ma) - ma = ptr[i]; - } - return ma; -} -static float NSEEL_CGEN_CALL eel_min(float *blocks, float *start, float *length) -{ - float *ptr = __NSEEL_RAMAlloc(blocks, (uint32_t)(*start + NSEEL_CLOSEFACTOR)); - float mi = ptr[0]; - for (uint32_t i = 1; i < (uint32_t)(*length + NSEEL_CLOSEFACTOR); i++) - { - if (ptr[i] < mi) - mi = ptr[i]; - } - return mi; -} -static float NSEEL_CGEN_CALL eel_mean(float *blocks, float *start, float *length) -{ - float *ptr = __NSEEL_RAMAlloc(blocks, (uint32_t)(*start + NSEEL_CLOSEFACTOR)); - float mm = ptr[0]; - for (uint32_t i = 1; i < (uint32_t)(*length + NSEEL_CLOSEFACTOR); i++) - mm += ptr[i]; - return mm / *length; -} -#define ELEM_SWAP(a,b) { register float t=(a);(a)=(b);(b)=t; } -/*--------------------------------------------------------------------------- - Function : kth_smallest() - In : array of elements, # of elements in the array, rank k - Out : one element - Job : find the kth smallest element in the array - Notice : use the median() macro defined below to get the median. - - Reference: - - Author: Wirth, Niklaus - Title: Algorithms + data structures = programs - Publisher: Englewood Cliffs: Prentice-Hall, 1976 - Physical description: 366 p. - Series: Prentice-Hall Series in Automatic Computation - - ---------------------------------------------------------------------------*/ -float kth_smallest(float a[], int n, int k) -{ - register i, j, l, m; - register float x; - - l = 0; m = n - 1; - while (l < m) { - x = a[k]; - i = l; - j = m; - do { - while (a[i] < x) i++; - while (x < a[j]) j--; - if (i <= j) { - ELEM_SWAP(a[i], a[j]); - i++; j--; - } - } while (i <= j); - if (j < k) l = i; - if (k < i) m = j; - } - if (n % 2) - return a[k]; - else - return (a[k] + a[k + 1]) * 0.5f; -} -#define median_wirth(a,n) kth_smallest(a,n,(((n)&1)?((n)/2):(((n)/2)-1))) -static float NSEEL_CGEN_CALL eel_median(float *blocks, float *start, float *length) -{ - float *ptr = __NSEEL_RAMAlloc(blocks, (uint32_t)(*start + NSEEL_CLOSEFACTOR)); - uint32_t n = (uint32_t)(*length + NSEEL_CLOSEFACTOR); - float *tmp = (float*)malloc(n * sizeof(float)); - memcpy(tmp, ptr, n * sizeof(float)); - float med = median_wirth(tmp, n); - free(tmp); - return med; -} -static float * NSEEL_CGEN_CALL eel_fft(float *blocks, float *start, float *length) -{ - return fft_func(0, blocks, start, length); -} -static float * NSEEL_CGEN_CALL eel_ifft(float *blocks, float *start, float *length) -{ - return fft_func(1, blocks, start, length); -} -static float * NSEEL_CGEN_CALL eel_fft_real(float *blocks, float *start, float *length) -{ - return fft_func(2, blocks, start, length); -} -static float * NSEEL_CGEN_CALL eel_ifft_real(float *blocks, float *start, float *length) -{ - return fft_func(3, blocks, start, length); -} -static float * NSEEL_CGEN_CALL eel_fft_permute(float *blocks, float *start, float *length) -{ - return fft_func(4, blocks, start, length); -} -static float * NSEEL_CGEN_CALL eel_ifft_permute(float *blocks, float *start, float *length) -{ - return fft_func(5, blocks, start, length); -} -static float * NSEEL_CGEN_CALL eel_convolve_c(float *blocks, float *dest, float *src, float *lenptr) -{ - const int32_t dest_offs = (int32_t)(*dest + NSEEL_CLOSEFACTOR); - const int32_t src_offs = (int32_t)(*src + NSEEL_CLOSEFACTOR); - const int32_t len = ((int32_t)(*lenptr + NSEEL_CLOSEFACTOR)) * 2; - float *srcptr, *destptr; - if (len < 1 || len > NSEEL_RAM_ITEMSPERBLOCK || dest_offs < 0 || src_offs < 0 || - dest_offs >= NSEEL_RAM_ITEMSPERBLOCK || src_offs >= NSEEL_RAM_ITEMSPERBLOCK) return dest; - if ((dest_offs&(NSEEL_RAM_ITEMSPERBLOCK - 1)) + len > NSEEL_RAM_ITEMSPERBLOCK) return dest; - if ((src_offs&(NSEEL_RAM_ITEMSPERBLOCK - 1)) + len > NSEEL_RAM_ITEMSPERBLOCK) return dest; - srcptr = __NSEEL_RAMAlloc(blocks, (uint64_t)src_offs); - destptr = __NSEEL_RAMAlloc(blocks, (uint64_t)dest_offs); - WDL_fft_complexmul((WDL_FFT_COMPLEX*)destptr, (WDL_FFT_COMPLEX*)srcptr, (len / 2)&~1); - return dest; -} -int32_t nseel_stringsegments_tobuf(char *bufOut, int32_t bufout_sz, eelStringSegmentRec *list) // call with NULL to calculate size, or non-null to generate to buffer (returning size used) -{ - int32_t pos = 0; - while (list) - { - if (!bufOut) - pos += list->str_len; - else if (list->str_len > 1) - { - if (pos >= bufout_sz) break; - pos += nseel_filter_escaped_string(bufOut + pos, bufout_sz - pos, list->str_start + 1, list->str_len - 1, list->str_start[0]); - } - list = list->_next; - } - return pos; -} -void Initeel_string_context_state(eel_string_context_state *st) -{ - st->inuse = 0; - st->slot = 2; - st->map = (int32_t*)malloc(st->slot * sizeof(s_str)); - st->m_literal_strings = (s_str*)malloc(st->slot * sizeof(s_str)); - for (int32_t i = 0; i < st->slot; i++) - { - st->map[i] = 0; - st->m_literal_strings[i] = 0; - } -} -void Freeel_string_context_state(eel_string_context_state *st) -{ - for (int32_t i = 0; i < st->slot; i++) - s_str_destroy(&st->m_literal_strings[i]); - free(st->map); - free(st->m_literal_strings); - st->slot = 0; - st->inuse = 0; -} -int32_t arySearch(int32_t *array, int32_t N, int32_t x) -{ - for (int32_t i = 0; i < N; i++) - { - if (array[i] == x) - return i; - } - return -1; -} -#define FLOIDX 20000 -void* GetStringForIndex(eel_string_context_state *st, float val, int32_t write) -{ - int32_t castedValue = (int32_t)(val + 0.5f); - if (castedValue < FLOIDX) - return 0; - int32_t idx = arySearch(st->map, st->slot, castedValue); - if (idx < 0) - return 0; - if (!write) - { - s_str *tmp = &st->m_literal_strings[idx]; - const char *s = s_str_c_str(tmp); - return (void*)s; - } - else - return (void*)&st->m_literal_strings[idx]; -} -int32_t AddString(eel_string_context_state *st, char *ns) -{ - const int32_t l = strlen(ns); - int32_t x; - for (x = 0; x < st->inuse; x++) - { - s_str *tmp = &st->m_literal_strings[x]; - const char *s = s_str_c_str(tmp); - if (strlen(s) == l && !strcmp(s, ns)) - break; - } - if (x < st->inuse) - free(ns); - else - { - int32_t currentSlot = st->inuse; - if (currentSlot > (st->slot - 1)) - { - st->slot++; - st->m_literal_strings = (s_str*)realloc(st->m_literal_strings, st->slot * sizeof(s_str)); - st->m_literal_strings[st->inuse] = 0; - st->map = (int32_t*)realloc(st->map, st->slot * sizeof(int32_t)); - st->map[st->inuse] = 0; - } - st->m_literal_strings[st->inuse] = s_str_create_from_c_str(ns); - st->map[st->inuse] = x + FLOIDX; - st->inuse++; - free(ns); - } - return x + FLOIDX; -} -static float addStringCallback(void *opaque, eelStringSegmentRec *list) -{ - compileContext *c = (compileContext*)opaque; - eel_string_context_state *_this = c->m_string_context; - // could probably do a faster implementation using AddRaw() etc but this should also be OK - int32_t sz = nseel_stringsegments_tobuf(NULL, 0, list); - char *ns = (char*)malloc(sz + 32); - memset(ns, 0, sz + 32); - sz = nseel_stringsegments_tobuf(ns, sz, list) + 1; - ns = (char*)realloc(ns, sz); - int32_t id = AddString(_this, ns); - return (float)id; -} -static int32_t eel_string_match(compileContext *c, const char *fmt, const char *msg, int32_t match_fmt_pos, int32_t ignorecase, const char *fmt_endptr, const char *msg_endptr, int32_t num_fmt_parms, float **fmt_parms) -{ - // %d=12345 - // %f=12345[.678] - // %c=any nonzero char, ascii value - // %x=12354ab - // %*, %?, %+, %% literals - // * ? + match minimal groups of 0+,1, or 1+ chars - for (;;) - { - if (fmt >= fmt_endptr) - { - if (msg >= msg_endptr) return 1; - return 0; // format ends before matching string - } - - // if string ends and format is not on a wildcard, early-out to 0 - if (msg >= msg_endptr && *fmt != '*' && *fmt != '%') return 0; - - switch (*fmt) - { - case '*': - case '+': - // if last char of search pattern, we're done! - if (fmt + 1 >= fmt_endptr || (fmt[1] == '?' && fmt + 2 >= fmt_endptr)) return *fmt == '*' || msg < msg_endptr; - - if (fmt[0] == '+') msg++; // skip a character for + . Note that in this case msg[1] is valid, because of the !*msg && *fmt != '*' check above - - fmt++; - if (*fmt == '?') - { - // *? or +? are lazy matches - fmt++; - - while (msg < msg_endptr && !eel_string_match(c, fmt, msg, match_fmt_pos, ignorecase, fmt_endptr, msg_endptr, num_fmt_parms, fmt_parms)) msg++; - return msg < msg_endptr; - } - else - { - // greedy match - int32_t len = (int32_t)(msg_endptr - msg); - while (len >= 0 && !eel_string_match(c, fmt, msg + len, match_fmt_pos, ignorecase, fmt_endptr, msg_endptr, num_fmt_parms, fmt_parms)) len--; - return len >= 0; - } - break; - case '?': - fmt++; - msg++; - break; - case '%': - { - fmt++; - unsigned short fmt_minlen = 1, fmt_maxlen = 0; - if (*fmt >= '0' && *fmt <= '9') - { - fmt_minlen = *fmt++ - '0'; - while (*fmt >= '0' && *fmt <= '9') fmt_minlen = fmt_minlen * 10 + (*fmt++ - '0'); - fmt_maxlen = fmt_minlen; - } - if (*fmt == '-') - { - fmt++; - fmt_maxlen = 0; - while (*fmt >= '0' && *fmt <= '9') fmt_maxlen = fmt_maxlen * 10 + (*fmt++ - '0'); - } - const char *dest_varname = NULL; - if (*fmt == '{') - { - dest_varname = ++fmt; - while (*fmt && fmt < fmt_endptr && *fmt != '}') fmt++; - if (fmt >= fmt_endptr - 1 || *fmt != '}') return 0; // malformed %{var}s - fmt++; // skip '}' - } - char fmt_char = *fmt++; - if (!fmt_char) return 0; // malformed - if (fmt_char == '*' || fmt_char == '?' || fmt_char == '+' || fmt_char == '%') - { - if (*msg++ != fmt_char) return 0; - } - else if (fmt_char == 'c') - { - float *varOut = NULL; - float vv = 0.0f; - if (!dest_varname) - { - if (match_fmt_pos < num_fmt_parms) - varOut = fmt_parms[match_fmt_pos]; - match_fmt_pos++; - } - if (msg >= msg_endptr) return 0; // out of chars - if (varOut) - { - if (varOut == &vv) // %{#foo}c - { - s_str *wr = (s_str*)GetStringForIndex(c->m_string_context, vv, 1); - if (wr) - s_str_destroy(wr); - *wr = s_str_create_from_c_str(msg); - } - else - { - *varOut = (float)*(unsigned char *)msg; - } - } - msg++; - } - else - { - int32_t len = 0; - int32_t lazy = 0; - if (fmt_char >= 'A'&&fmt_char <= 'Z') { lazy = 1; fmt_char += 'a' - 'A'; } - if (fmt_char == 's') - { - len = (int32_t)(msg_endptr - msg); - } - else if (fmt_char == 'x') - { - while ((msg[len] >= '0' && msg[len] <= '9') || (msg[len] >= 'A' && msg[len] <= 'F') || (msg[len] >= 'a' && msg[len] <= 'f')) - len++; - } - else if (fmt_char == 'f') - { - if (msg[len] == '-') len++; - while (msg[len] >= '0' && msg[len] <= '9') len++; - if (msg[len] == '.') - { - len++; - while (msg[len] >= '0' && msg[len] <= '9') len++; - } - } - else if (fmt_char == 'd' || fmt_char == 'u' || fmt_char == 'i') - { - if (fmt_char != 'u' && msg[len] == '-') len++; - while (msg[len] >= '0' && msg[len] <= '9') len++; - } - else - { - // bad format - return 0; - } - if (fmt_maxlen > 0 && len > fmt_maxlen) len = fmt_maxlen; - if (!dest_varname) match_fmt_pos++; - if (lazy) - { - if (fmt_maxlen<1 || fmt_maxlen>len) fmt_maxlen = len; - len = fmt_minlen; - while (len <= fmt_maxlen && !eel_string_match(c, fmt, msg + len, match_fmt_pos, ignorecase, fmt_endptr, msg_endptr, num_fmt_parms, fmt_parms)) len++; - if (len > fmt_maxlen) return 0; - } - else - { - while (len >= fmt_minlen && !eel_string_match(c, fmt, msg + len, match_fmt_pos, ignorecase, fmt_endptr, msg_endptr, num_fmt_parms, fmt_parms)) len--; - if (len < fmt_minlen) return 0; - } - float vv = 0.0f; - float *varOut = NULL; - if (!dest_varname) - { - if (match_fmt_pos > 0 && match_fmt_pos - 1 < num_fmt_parms) - varOut = fmt_parms[match_fmt_pos - 1]; - } - if (varOut) - { - if (fmt_char == 's') - { - s_str *wr = (s_str*)GetStringForIndex(c->m_string_context, *varOut, 1); - if (wr) - s_str_destroy(wr); - if (wr) - { - const char *strS = s_str_c_str(wr); - int32_t le = strlen(strS); - if (msg_endptr >= strS && msg_endptr <= strS + le) - { -#ifdef EEL_STRING_DEBUGOUT - EEL_STRING_DEBUGOUT("match: destination specifier passed is also haystack, will not update"); -#endif - } - else if (fmt_endptr >= strS && fmt_endptr <= strS + le) - { -#ifdef EEL_STRING_DEBUGOUT - EEL_STRING_DEBUGOUT("match: destination specifier passed is also format, will not update"); -#endif - } - else - { - *wr = s_str_create_from_c_str(msg); - } - } - else - { -#ifdef EEL_STRING_DEBUGOUT - EEL_STRING_DEBUGOUT("match: bad destination specifier passed as %d: %f", match_fmt_pos, *varOut); -#endif - } - } - else - { - char tmp[128]; - lstrcpyn_safe(tmp, msg, min(len + 1, (int32_t)sizeof(tmp))); - if (varOut == &vv) - { - s_str *wr = (s_str*)GetStringForIndex(c->m_string_context, vv, 1); - if (wr) - s_str_destroy(wr); - *wr = s_str_create_from_c_str(tmp); - } - else - { - char *bl = (char*)msg; - if (fmt_char == 'u') - *varOut = (float)strtoul(tmp, &bl, 10); - else if (fmt_char == 'x') - *varOut = (float)strtoul(msg, &bl, 16); - else - *varOut = (float)atof(tmp); - } - } - } - return 1; - } - } - break; - default: - if (ignorecase ? (toupper(*fmt) != toupper(*msg)) : (*fmt != *msg)) return 0; - fmt++; - msg++; - break; - } - } -} -static float NSEEL_CGEN_CALL _eel_match(void *opaque, INT_PTR num_parms, float **parms) -{ - if (num_parms >= 2) - { - compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - const char *msg = (const char*)GetStringForIndex(c->m_string_context, *parms[1], 0); - if (fmt && msg) - return eel_string_match(c, fmt, msg, 0, 0, fmt + strlen(fmt), msg + strlen(msg), (int32_t)num_parms - 2, parms + 2) ? 1.0f : 0.0f; - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_matchi(void *opaque, INT_PTR num_parms, float **parms) -{ - if (num_parms >= 2) - { - compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - const char *msg = (const char*)GetStringForIndex(c->m_string_context, *parms[1], 0); - if (fmt && msg) - return eel_string_match(opaque, fmt, msg, 0, 1, fmt + strlen(fmt), msg + strlen(msg), (int32_t)num_parms - 2, parms + 2) ? 1.0f : 0.0f; - } - return 0.0f; -} -static int32_t eel_validate_format_specifier(const char *fmt_in, char *typeOut, char *fmtOut, int32_t fmtOut_sz, char *varOut, int32_t varOut_sz) -{ - const char *fmt = fmt_in + 1; - int32_t state = 0; - if (fmt_in[0] != '%') return 0; // ugh passed a non- - *varOut = 0; - if (fmtOut_sz-- < 2) return 0; - *fmtOut++ = '%'; - while (*fmt) - { - const char c = *fmt++; - if (fmtOut_sz < 2) return 0; - if (c == 'f' || c == 'e' || c == 'E' || c == 'g' || c == 'G' || c == 'd' || c == 'u' || c == 'x' || c == 'X' || c == 'c' || c == 'C' || c == 's' || c == 'S' || c == 'i') - { - *typeOut = c; - fmtOut[0] = c; - fmtOut[1] = 0; - return (int32_t)(fmt - fmt_in); - } - else if (c == '.') - { - *fmtOut++ = c; fmtOut_sz--; - if (state&(2)) break; - state |= 2; - } - else if (c == '+') - { - *fmtOut++ = c; fmtOut_sz--; - if (state&(32 | 16 | 8 | 4)) break; - state |= 8; - } - else if (c == '-' || c == ' ') - { - *fmtOut++ = c; fmtOut_sz--; - if (state&(32 | 16 | 8 | 4)) break; - state |= 16; - } - else if (c >= '0' && c <= '9') - { - *fmtOut++ = c; fmtOut_sz--; - state |= 4; - } - else - break; - } - return 0; -} -int32_t eel_format_strings(void *opaque, const char *fmt, const char *fmt_end, char *buf, uint32_t buf_sz, int32_t num_fmt_parms, float **fmt_parms) -{ - int32_t fmt_parmpos = 0; - char *op = buf; - while ((fmt_end ? fmt < fmt_end : *fmt) && op < buf + buf_sz - 128) - { - if (fmt[0] == '%' && fmt[1] == '%') - { - *op++ = '%'; - fmt += 2; - } - else if (fmt[0] == '%') - { - char ct = 0; - char fs[128]; - char varname[128]; - const int32_t l = eel_validate_format_specifier(fmt, &ct, fs, sizeof(fs), varname, sizeof(varname)); - if (!l || !ct) - { - *op = 0; - return -1; - } - const float *varptr = NULL; - if (fmt_parmpos < num_fmt_parms) - varptr = fmt_parms[fmt_parmpos]; - fmt_parmpos++; - float v = varptr ? (float)*varptr : 0.0f; - if (ct == 'x' || ct == 'X' || ct == 'd' || ct == 'u' || ct == 'i') - { - stbsp_snprintf(op, 64, fs, (int32_t)(v)); - } - else if (ct == 's' || ct == 'S') - { - compileContext *c = (compileContext*)opaque; - const char *str = (const char*)GetStringForIndex(c->m_string_context, v, 0); - const size_t maxl = (size_t)(buf + buf_sz - 2u - op); - stbsp_snprintf(op, maxl, fs, str ? str : ""); - } - else if (ct == 'c') - { - *op++ = (char)(int32_t)v; - *op = 0; - } - else if (ct == 'C') - { - const uint32_t iv = (uint32_t)v; - int32_t bs = 0; - if (iv & 0xff000000) bs = 24; - else if (iv & 0x00ff0000) bs = 16; - else if (iv & 0x0000ff00) bs = 8; - while (bs >= 0) - { - const char c = (char)(iv >> bs); - *op++ = c ? c : ' '; - bs -= 8; - } - *op = 0; - } - else - stbsp_snprintf(op, 64, fs, v); - while (*op) op++; - fmt += l; - } - else - *op++ = *fmt++; - } - *op = 0; - return (int32_t)(op - buf); -} -float NSEEL_CGEN_CALL _eel_printf(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param > 0) - { - compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *(parms[0]), 0); - if (fmt) - { - int32_t stringLength = strlen(fmt); - const int32_t len = eel_format_strings(opaque, fmt, fmt ? (fmt + stringLength) : NULL, c->printfbuf, sizeof(c->printfbuf), num_param - 1, parms + 1); - if (len > 0) - { - EEL_STRING_STDOUT_WRITE(c->printfbuf, len); - return 1.0f; - } - else - { - const char *badStr = "printf: bad format string"; - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - } - else - { - const char *badStr = "printf: bad format specifier passed"; - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - } - return 0.0f; -} -float NSEEL_CGEN_CALL _eel_sprintf(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param > 0) - { - compileContext *c = (compileContext*)opaque; - s_str *wr = (s_str*)GetStringForIndex(c->m_string_context, *(parms[0]), 1); - if (wr) - s_str_destroy(wr); - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *(parms[1]), 0); - if (wr && fmt) - { - int32_t stringLength = strlen(fmt); - const int32_t len = eel_format_strings(opaque, fmt, fmt ? (fmt + stringLength) : NULL, c->printfbuf, sizeof(c->printfbuf), num_param - 2, parms + 2); - if (len > 0) - { - *wr = s_str_create_from_c_str(c->printfbuf); - return 1.0f; - } - else - { - const char *badStr = "printf: bad format string"; - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - } - else - { - const char *badStr = "printf: bad format specifier passed"; - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - } - return 0.0f; -} -static float _eel_strcmp_int(const char *a, int32_t a_len, const char *b, int32_t b_len, int32_t ml, int32_t ignorecase) -{ - // binary-safe comparison (at least if a_len>=0 etc) - int32_t pos = 0; - for (;;) - { - if (ml > 0 && pos == ml) return 0.0f; - const int32_t a_end = a_len >= 0 ? pos == a_len : !a[pos]; - const int32_t b_end = b_len >= 0 ? pos == b_len : !b[pos]; - if (a_end || b_end) - { - if (!b_end) return -1.0f; // b[pos] is nonzero, a[pos] is zero - if (!a_end) return 1.0f; - return 0.0f; - } - char av = a[pos]; - char bv = b[pos]; - if (ignorecase) - { - av = toupper(av); - bv = toupper(bv); - } - if (bv > av) return -1.0f; - if (av > bv) return 1.0f; - pos++; - } -} -static float NSEEL_CGEN_CALL _eel_strncmp(void *opaque, float *aa, float *bb, float *maxlen) -{ - compileContext *c = (compileContext*)opaque; - const char *a = (const char*)GetStringForIndex(c->m_string_context, *aa, 0); - const char *b = (const char*)GetStringForIndex(c->m_string_context, *bb, 0); - if (!a || !b) - { - const char *badStr = "strncmp: bad specifier(s)"; - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - else - { - const int32_t ml = maxlen ? (int32_t)(*maxlen + NSEEL_CLOSEFACTOR) : -1; - if (!ml || a == b) return 0; // strncmp(x,y,0) == 0 - return _eel_strcmp_int(a, a ? strlen(a) : -1, b, b ? strlen(b) : -1, ml, 0); - } - return -1.0f; -} -static float NSEEL_CGEN_CALL _eel_strnicmp(void *opaque, float *aa, float *bb, float *maxlen) -{ - compileContext *c = (compileContext*)opaque; - const char *a = (const char*)GetStringForIndex(c->m_string_context, *aa, 0); - const char *b = (const char*)GetStringForIndex(c->m_string_context, *bb, 0); - if (!a || !b) - { - const char *badStr = "strnicmp: bad specifier(s)"; - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - else - { - const int32_t ml = maxlen ? (int32_t)(*maxlen + NSEEL_CLOSEFACTOR) : -1; - if (!ml || a == b) return 0; // strncmp(x,y,0) == 0 - return _eel_strcmp_int(a, a ? strlen(a) : -1, b, b ? strlen(b) : -1, ml, 1); - } - return -1.0f; -} -static float NSEEL_CGEN_CALL _eel_strcmp(void *opaque, float *strOut, float *fmt_index) -{ - return _eel_strncmp(opaque, strOut, fmt_index, NULL); -} -static float NSEEL_CGEN_CALL _eel_stricmp(void *opaque, float *strOut, float *fmt_index) -{ - return _eel_strnicmp(opaque, strOut, fmt_index, NULL); -} -static float NSEEL_CGEN_CALL _eel_strlen(void *opaque, float *fmt_index) -{ - compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *fmt_index, 0); - if (fmt) - return (float)strlen(fmt); - return 0.0f; -} -#ifdef _WIN32 -#include -#include "dirent.h" -#else -#include -#include -#endif -static float NSEEL_CGEN_CALL _eel_ls(void *opaque, float *fmt_index) -{ - DIR *dir; - struct dirent *ent; - char badStr[128]; - if ((dir = opendir(".")) != NULL) - { - while ((ent = readdir(dir)) != NULL) - { - stbsp_snprintf(badStr, 128, "%s\n", ent->d_name); - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - closedir(dir); - } - else - return -1; - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_cd(void *opaque, float *fmt_index) -{ - if (opaque) - { - compileContext *c = (compileContext*)opaque; - const char *fmt = (const char*)GetStringForIndex(c->m_string_context, *fmt_index, 0); - if (fmt) -#ifdef _WIN32 - return (float)_chdir(fmt); -#else - return chdir(fmt); -#endif - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_eval(void *opaque, float *s) -{ - compileContext *r = (compileContext*)opaque; - NSEEL_CODEHANDLE ch = NULL; - if (r) - { - const char *str = (const char*)GetStringForIndex(r->m_string_context, *s, 0); - if (!str) - { - const char *badStr = "eval() passed invalid string handle\n"; - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - else - { - if (!ch) ch = NSEEL_code_compile(r, str, 0); - if (ch) - { - NSEEL_code_execute(ch); - NSEEL_code_free(ch); - return 1.0f; - } - else - { - const char *err = NSEEL_code_getcodeerror(r); - if (err) - { - // EEL_STRING_DEBUGOUT("eval() error: %s", err); - } - } - } - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_evalFile(void *opaque, float *s) -{ - compileContext *r = (compileContext*)opaque; - if (r) - { - const char *str = (const char*)GetStringForIndex(r->m_string_context, *s, 0); - if (!str) - { - const char *badStr = "eval() passed invalid string handle\n"; - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - else - { - FILE *fp = fopen(str, "rb"); - NSEEL_CODEHANDLE ch; - if (fp) - { - s_str code = s_str_create(); - s_str_clear(&code); - char line[4096]; - for (;;) - { - line[0] = 0; - fgets(line, sizeof(line), fp); - if (!line[0]) break; - s_str_append_c_str(&code, line); - } - fclose(fp); - const char *codetext = s_str_c_str(&code); - ch = NSEEL_code_compile(r, codetext, 0); - s_str_destroy(&code); - if (ch) - { - NSEEL_code_execute(ch); - NSEEL_code_free(ch); - return 1.0f; - } - else - { - const char *err = NSEEL_code_getcodeerror(r); - if (err) - { - EEL_STRING_STDOUT_WRITE(err, strlen(err)); - } - } - } - } - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_base64_encode(void *opaque, float *destination, float *source, float *maxlen) -{ - if (opaque) - { - compileContext *c = (compileContext*)opaque; - s_str *dest = (s_str*)GetStringForIndex(c->m_string_context, *destination, 1); - if (dest) - s_str_destroy(dest); - s_str *srcClass = (s_str*)GetStringForIndex(c->m_string_context, *source, 1); - size_t len = (size_t)(*maxlen + NSEEL_CLOSEFACTOR); - if (len > s_str_capacity(srcClass)) - return -1; - const char *src = s_str_c_str(srcClass); - if (dest && src) - { - unsigned char *out, *pos; - const unsigned char *end, *in; - size_t olen; - int32_t line_len; - olen = len * 4 / 3 + 4; // 3-byte blocks to 4-byte - olen += olen / 72; // line feeds - olen++; // nul termination - if (olen < len) - return 0; // integer overflow - out = (unsigned char*)malloc(olen); - if (out == 0) - return 0; - end = src + len; - in = src; - pos = out; - line_len = 0; - while (end - in >= 3) - { - *pos++ = base64_table[in[0] >> 2]; - *pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)]; - *pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)]; - *pos++ = base64_table[in[2] & 0x3f]; - in += 3; - line_len += 4; - if (line_len >= 72) - { - *pos++ = '\n'; - line_len = 0; - } - } - if (end - in) - { - *pos++ = base64_table[in[0] >> 2]; - if (end - in == 1) { - *pos++ = base64_table[(in[0] & 0x03) << 4]; - *pos++ = '='; - } - else - { - *pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)]; - *pos++ = base64_table[(in[1] & 0x0f) << 2]; - } - *pos++ = '='; - line_len += 4; - } - if (line_len) - *pos++ = '\n'; - *pos = '\0'; - size_t out_len = pos - out; - *dest = s_str_create_from_c_str(out); - free(out); - return (float)out_len; - } - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_base64_encodeBinaryToTextFile(void *opaque, float *destination, float *source) -{ - if (opaque) - { - compileContext *c = (compileContext*)opaque; - const char *dest = (const char*)GetStringForIndex(c->m_string_context, *destination, 0); - const char *src = (const char *)GetStringForIndex(c->m_string_context, *source, 0); - if (dest && src) - { - unsigned char *buffer = 0; - long length; - FILE *textFile = fopen(src, "rb"); - if (textFile) - { - fseek(textFile, 0, SEEK_END); - length = ftell(textFile); - fseek(textFile, 0, SEEK_SET); - buffer = (unsigned char*)malloc(length + 1); - if (buffer) - fread((void*)buffer, 1, length, textFile); - fclose(textFile); - buffer[length] = '\0'; - } - size_t outLen = 0; - unsigned char *out; - if (buffer) - { - out = base64_encode(buffer, length, &outLen); - free(buffer); - FILE *fp = fopen(dest, "w"); - if (fp) - { - fwrite(out, 1, outLen, fp); - fclose(fp); - } - free(out); - } - return (float)outLen; - } - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_base64_decode(void *opaque, float *destination, float *source, float *maxlen) -{ - if (opaque) - { - compileContext *c = (compileContext*)opaque; - s_str *dest = (s_str*)GetStringForIndex(c->m_string_context, *destination, 1); - if (dest) - s_str_destroy(dest); - s_str *srcClass = (s_str*)GetStringForIndex(c->m_string_context, *source, 1); - size_t len = (size_t)(*maxlen + NSEEL_CLOSEFACTOR); - if (len > s_str_capacity(srcClass)) - return -1; - const char *src = s_str_c_str(srcClass); - if (dest && src) - { - unsigned char dtable[256], *out, *pos, block[4], tmp; - size_t i, count, olen; - int32_t pad = 0; - memset(dtable, 0x80, 256); - for (i = 0; i < sizeof(base64_table) - 1; i++) - dtable[base64_table[i]] = (unsigned char)i; - dtable['='] = 0; - count = 0; - for (i = 0; i < len; i++) - if (dtable[src[i]] != 0x80) - count++; - if (count == 0 || count % 4) - return 0; - olen = count / 4 * 3; - pos = out = (unsigned char*)malloc(olen); - if (out == NULL) - return 0; - count = 0; - for (i = 0; i < len; i++) - { - tmp = dtable[src[i]]; - if (tmp == 0x80) - continue; - if (src[i] == '=') - pad++; - block[count] = tmp; - count++; - if (count == 4) - { - *pos++ = (block[0] << 2) | (block[1] >> 4); - *pos++ = (block[1] << 4) | (block[2] >> 2); - *pos++ = (block[2] << 6) | block[3]; - count = 0; - if (pad) - { - if (pad == 1) - pos--; - else if (pad == 2) - pos -= 2; - else - { - // Invalid padding - free(out); - return 0; - } - break; - } - } - } - size_t out_len = pos - out; - *dest = s_str_create_from_c_str_0Inc(out, out_len); - free(out); - return (float)out_len; - } - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_base64_decodeBinaryToTextFile(void *opaque, float *destination, float *source) -{ - if (opaque) - { - compileContext *c = (compileContext*)opaque; - const char *dest = (const char*)GetStringForIndex(c->m_string_context, *destination, 0); - const char *src = (const char *)GetStringForIndex(c->m_string_context, *source, 0); - if (dest && src) - { - unsigned char *buffer = 0; - long length; - FILE *textFile = fopen(src, "r"); - if (textFile) - { - fseek(textFile, 0, SEEK_END); - length = ftell(textFile); - fseek(textFile, 0, SEEK_SET); - buffer = (unsigned char*)malloc(length + 1); - if (buffer) - fread(buffer, 1, length, textFile); - fclose(textFile); - buffer[length] = '\0'; - } - size_t outLen = 0; - unsigned char *out; - if (buffer) - { - out = base64_decode(buffer, length, &outLen); - free(buffer); - FILE *fp = fopen(dest, "wb"); - if (fp) - { - fwrite(out, 1, outLen, fp); - fclose(fp); - } - free(out); - } - return (float)outLen; - } - } - return 0.0f; -} -static float NSEEL_CGEN_CALL _eel_delete_all_strings(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - eel_string_context_state *state = c->m_string_context; - Freeel_string_context_state(state); - Initeel_string_context_state(state); - return 0.0f; -} -int32_t get_float(char *val, float *F) -{ - char *eptr; - errno = 0; - float f = strtof(val, &eptr); - if (eptr != val && errno != ERANGE) - { - *F = f; - return 1; - } - return 0; -} -float* string2FloatArray(char *frArbitraryEqString, int32_t *elements) -{ - char *p = frArbitraryEqString; - char *counter = frArbitraryEqString; - int32_t i = 0, count = 0; - float number; - while (*p) - { - if (get_float(p, &number)) - { - strtod(p, &p); - count++; - } - else - p++; - } - *elements = count; - float *arrayF = (float*)malloc(count * sizeof(float)); - while (*counter) - { - if (get_float(counter, &number)) - { - arrayF[i] = (float)strtod(counter, &counter); - i++; - } - else - counter++; - } - return arrayF; -} -static float NSEEL_CGEN_CALL _eel_importFloatArrayFromString(void *opaque, float *fn_index, float *pointer) -{ - compileContext *c = (compileContext*)opaque; - const char *FLTBuf = (const char*)GetStringForIndex(c->m_string_context, *fn_index, 0); - uint32_t offs1 = (uint32_t)(*pointer + NSEEL_CLOSEFACTOR); - float *userspaceFLT = __NSEEL_RAMAlloc(c->ram_state, offs1); - int32_t elements; - float *convertedFLT = string2FloatArray((char*)FLTBuf, &elements); - memcpy(userspaceFLT, convertedFLT, elements * sizeof(float)); - free(convertedFLT); - return (float)elements; -} -void fractionalDelayLine_clear(float *fdl) -{ - for (int32_t i = 0; i < (int32_t)fdl[2]; i++) - fdl[5 + i] = 0.; -} -static float NSEEL_CGEN_CALL fractionalDelayLineInit(float *blocks, float *start, float *length) -{ - int32_t offs1 = (int32_t)(*start + NSEEL_CLOSEFACTOR); - int32_t max_length = (int32_t)(*length + NSEEL_CLOSEFACTOR); - float *fdl = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - fdl[0] = 0; - fdl[1] = 0; - fdl[2] = (float)max_length; - fractionalDelayLine_clear(fdl); - return (float)(max_length + 5); -} -static float NSEEL_CGEN_CALL fractionalDelayLineClear(float *blocks, float *start) -{ - int32_t offs1 = (int32_t)(*start + NSEEL_CLOSEFACTOR); - float *fdl = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - fractionalDelayLine_clear(fdl); - return 1; -} -static float NSEEL_CGEN_CALL fractionalDelayLineSetDelay(float *blocks, float *start, float *lg) -{ - uint32_t offs1 = (uint32_t)(*start + NSEEL_CLOSEFACTOR); - float lag = *lg; - float *fdl = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float outPointer; - if (lag > fdl[2] - 1.0f) - outPointer = fdl[0] + 1.0f; // force delay to max_length - else - outPointer = fdl[0] - lag; // read chases write - while (outPointer < 0) - outPointer += fdl[2]; // modulo maximum length - fdl[1] = (float)((int32_t)outPointer); // integer part - fdl[3] = outPointer - fdl[1]; // fractional part - fdl[4] = 1.0f - fdl[3]; // 1.0f - fractional part (more efficient) - return 1; -} -static float NSEEL_CGEN_CALL fractionalDelayLineProcess(float *blocks, float *start, float *x) -{ - uint32_t offs1 = (uint32_t)(*start + NSEEL_CLOSEFACTOR); - float *fdl = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t inPtr = (int32_t)(fdl[0] + NSEEL_CLOSEFACTOR); - fdl[5 + inPtr++] = *x; - int32_t len = (int32_t)(fdl[2] + NSEEL_CLOSEFACTOR); - if (inPtr == len) // Check for end condition - inPtr -= len; - fdl[0] = (float)inPtr; - int32_t outPtr = (int32_t)(fdl[1] + NSEEL_CLOSEFACTOR); - float lastOutput = fdl[5 + outPtr++] * fdl[4]; // first 1/2 of interpolation - if (outPtr < len) // Check for end condition - lastOutput += fdl[5 + outPtr] * fdl[3]; // second 1/2 of interpolation - else - { - lastOutput += fdl[5] * fdl[3]; // second 1/2 of interpolation - outPtr -= len; - } - fdl[1] = (float)outPtr; - return lastOutput; -} -static float NSEEL_CGEN_CALL FIRInit(float *blocks, float *start, float *length) -{ - uint32_t offs1 = (uint32_t)(*start + NSEEL_CLOSEFACTOR); - int32_t hlen = (int32_t)(*length + NSEEL_CLOSEFACTOR); - float *fir = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - memset(fir, 0, (hlen + 2) * sizeof(float)); - fir[1] = (float)hlen; - return (float)(hlen + 2); -} -static float NSEEL_CGEN_CALL FIRProcess(float *blocks, float *start, float *x, float *coe) -{ - int32_t offs1 = (int32_t)(*start + NSEEL_CLOSEFACTOR); - float *fir = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = (int32_t)(*coe + NSEEL_CLOSEFACTOR); - float *coeffs = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - float *coeff = coeffs; - int32_t coeffslength = (int32_t)(fir[1] + NSEEL_CLOSEFACTOR); - float *coeff_end = coeffs + coeffslength; - int32_t pos = (int32_t)(fir[0] + NSEEL_CLOSEFACTOR); - float *dline = &fir[2]; - float *buf_val = dline + pos; - *buf_val = *x; - float y = 0.0f; - while (buf_val >= dline) - y += *buf_val-- * *coeff++; - buf_val = dline + coeffslength - 1; - while (coeff < coeff_end) - y += *buf_val-- * *coeff++; - if (++pos >= coeffslength) - fir[0] = (float)0; - else - fir[0] = (float)pos; - return y; -} -#define NRAND 624 -#define MRAND 397 -#define MATRIX_A 0x9908b0dfUL /* constant vector a */ -#define UPPER_MASK 0x80000000UL /* most significant w-r bits */ -#define LOWER_MASK 0x7fffffffUL /* least significant r bits */ -float NSEEL_CGEN_CALL nseel_int_rand(float amplitude) -{ - uint32_t y; - static uint32_t mag01[2] = { 0x0UL, MATRIX_A }; - /* mag01[x] = x * MATRIX_A for x=0,1 */ - static uint32_t mt[NRAND]; /* the array for the state vector */ - static uint32_t __idx; - uint32_t mti = __idx; - if (!mti) - { - uint32_t s = 0x4141f00d; - mt[0] = s & 0xffffffffUL; - for (mti = 1; mti < NRAND; mti++) - { - mt[mti] = - (1812433253UL * (mt[mti - 1] ^ (mt[mti - 1] >> 30)) + mti); - /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ - /* In the previous versions, MSBs of the seed affect */ - /* only MSBs of the array mt[]. */ - /* 2002/01/09 modified by Makoto Matsumoto */ - mt[mti] &= 0xffffffffUL; - /* for >32 bit machines */ - } - __idx = NRAND; // mti = N (from loop) - } - if (mti >= NRAND) { /* generate N words at one time */ - int32_t kk; - __idx = 1; - - for (kk = 0; kk < NRAND - MRAND; kk++) { - y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK); - mt[kk] = mt[kk + MRAND] ^ (y >> 1) ^ mag01[y & 0x1UL]; - } - for (; kk < NRAND - 1; kk++) { - y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK); - mt[kk] = mt[kk + (MRAND - NRAND)] ^ (y >> 1) ^ mag01[y & 0x1UL]; - } - y = (mt[NRAND - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK); - mt[NRAND - 1] = mt[MRAND - 1] ^ (y >> 1) ^ mag01[y & 0x1UL]; - - mti = 0; - } - else - __idx++; - y = mt[mti]; - /* Tempering */ - y ^= (y >> 11); - y ^= (y << 7) & 0x9d2c5680UL; - y ^= (y << 15) & 0xefc60000UL; - y ^= (y >> 18); - return (float)(y*(1.0f / (float)0xFFFFFFFF) * fabsf(amplitude)); -} -// Calculate pseudo-random 32 bit number based on linear congruential method. -static unsigned long GenerateRandomNumber(void) -{ - static unsigned long randSeed = 22222; // Change this for different random sequences. - randSeed = (randSeed * 196314165) + 907633515; - return randSeed; -} -#define PINK_MAX_RANDOM_ROWS 31 -#define PINK_RANDOM_BITS 24 -#define PINK_RANDOM_SHIFT ((sizeof(long)*8)-PINK_RANDOM_BITS) -typedef struct -{ - long pink_Rows[PINK_MAX_RANDOM_ROWS]; - long pink_RunningSum; // Used to optimize summing of generators - int pink_Index; // Incremented each sample - int pink_IndexMask; // Index wrapped by ANDing with this mask - float pink_Scalar; // Used to scale within range of -1.0f to +1.0f -} PinkNoise; -// EEL_SETUP PinkNoise structure for N rows of generators -void InitializePinkNoise(PinkNoise *pink, unsigned int numRows) -{ - unsigned int i; - long pmax; - pink->pink_Index = 0; - pink->pink_IndexMask = (1 << numRows) - 1; - // Calculate maximum possible signed random value. Extra 1 for white noise always added - pmax = (numRows + 1) * (1 << (PINK_RANDOM_BITS - 1)); - pink->pink_Scalar = 1.0f / pmax; - // Initialize rows - for (i = 0; i < numRows; i++) pink->pink_Rows[i] = 0; - pink->pink_RunningSum = 0; -} -// Generate Pink noise values between -1.0f and +1.0f -float GeneratePinkNoise(PinkNoise *pink) -{ - long newRandom; - // Increment and mask index - pink->pink_Index = (pink->pink_Index + 1) & pink->pink_IndexMask; - // If index is zero, don't update any random values - if (pink->pink_Index) - { - // Determine how many trailing zeros in PinkIndex - // This algorithm will hang if n==0 so test first - int numZeros = 0; - int n = pink->pink_Index; - while ((n & 1) == 0) - { - n = n >> 1; - numZeros++; - } - // Replace the indexed ROWS random value. - // Subtract and add back to RunningSum instead of adding all the random - // values together. Only one changes each time. - pink->pink_RunningSum -= pink->pink_Rows[numZeros]; - newRandom = ((long)GenerateRandomNumber()) >> PINK_RANDOM_SHIFT; - pink->pink_RunningSum += newRandom; - pink->pink_Rows[numZeros] = newRandom; - } - // Add extra white noise value - newRandom = ((long)GenerateRandomNumber()) >> PINK_RANDOM_SHIFT; - return pink->pink_Scalar * (float)(pink->pink_RunningSum + newRandom); -} -static float NSEEL_CGEN_CALL pinkNoiseInit(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 2) - return 0; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int pinkness = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - if (pinkness < 1) - pinkness = 1; - if (pinkness > 30) - pinkness = 30; - memset(indexer, 0, sizeof(PinkNoise)); - InitializePinkNoise(((PinkNoise*)indexer), pinkness); - return sizeof(PinkNoise) / sizeof(float) + 1; -} -static float NSEEL_CGEN_CALL pinkNoiseGen(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - PinkNoise *noiseStruct = (PinkNoise*)indexer; - return GeneratePinkNoise(noiseStruct) * *parms[1]; -} -#include "numericSys/FilterDesign/polyphaseFilterbank.h" -static float NSEEL_CGEN_CALL PolyphaseFilterbankInit(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 4) - return 0; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - float fs = *parms[0]; - unsigned int N = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - if (N < 2) - { - *parms[1] = 2; - N = 2; - char badStr[128]; - stbsp_snprintf(badStr, 128, "Number of subbands cannot be less than 2\n"); - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - unsigned int m = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - size_t requiredMemSize = getMemSizeWarpedPFB(N, m); - size_t aligned = requiredMemSize / sizeof(float) + 1; - int32_t offs1 = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = 0; - float *indexer2 = 0; - if (num_param == 5) - { - indexer2 = __NSEEL_RAMAlloc(blocks, offs1 + aligned); - *parms[4] = offs1 + aligned; - } - WarpedPFB *pfbPtr = (WarpedPFB*)indexer; - WarpedPFB *pfbPtr2 = (WarpedPFB*)indexer2; - initWarpedPFB(pfbPtr, fs, N, m); - if (pfbPtr2) - assignPtrWarpedPFB(pfbPtr2, N, m); - return (float)requiredMemSize; -} -static float NSEEL_CGEN_CALL PolyphaseFilterbankChangeWarpingFactor(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 3) - return 0; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float fs = *parms[1]; - float warpFact = *parms[2]; - WarpedPFB *pfbPtr = (WarpedPFB*)indexer; - changeWarpingFactorWarpedPFB(pfbPtr, fs, warpFact); - return 0; -} -static float NSEEL_CGEN_CALL PolyphaseFilterbankGetPhaseCorrector(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 3) - return 0; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float corrFact = *parms[1]; - int32_t offs2 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *phaseCorr = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - WarpedPFB *pfbPtr = (WarpedPFB*)indexer; - unsigned int CFiltLen; - float *filter = getPhaseCorrFilterWarpedPFB(pfbPtr, corrFact, &CFiltLen); - for (int32_t i = 0; i < CFiltLen; i++) - phaseCorr[i] = filter[i]; - free(filter); - return CFiltLen; -} -static float NSEEL_CGEN_CALL PolyphaseFilterbankGetDecimationFactor(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 2) - return 0; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float *decF = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - WarpedPFB *pfbPtr = (WarpedPFB*)indexer; - for (int32_t i = 0; i < pfbPtr->N; i++) - decF[i] = pfbPtr->Sk[i]; - return 0; -} -static float NSEEL_CGEN_CALL PolyphaseFilterbankAnalysisMono(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 4) - return 0; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float *subbandDat = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t offs3 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *decimationCounter = __NSEEL_RAMAlloc(blocks, (uint64_t)offs3); - float xn = *parms[3]; - WarpedPFB *pfbPtr = (WarpedPFB*)indexer; - analysisWarpedPFB(pfbPtr, xn); - getSubbandDatWarpedPFB(pfbPtr, subbandDat, decimationCounter); - return 0; -} -static float NSEEL_CGEN_CALL PolyphaseFilterbankSynthesisMono(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 2) - return 0; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float *subbandDat = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - WarpedPFB *pfbPtr = (WarpedPFB*)indexer; - writeSubbandDatWarpedPFB(pfbPtr, subbandDat); - float y = synthesisWarpedPFB(pfbPtr); - return y; -} -static float NSEEL_CGEN_CALL PolyphaseFilterbankAnalysisStereo(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 7) - return -1; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer1 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float *indexer2 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t offs3 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *subbandDat1 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs3); - int32_t offs4 = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *subbandDat2 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs4); - int32_t offs5 = (int32_t)(*parms[4] + NSEEL_CLOSEFACTOR); - float *decimationCounter = __NSEEL_RAMAlloc(blocks, (uint64_t)offs5); - WarpedPFB *pfb1Ptr = (WarpedPFB*)indexer1; - WarpedPFB *pfb2Ptr = (WarpedPFB*)indexer2; - analysisWarpedPFBStereo(pfb1Ptr, pfb2Ptr, parms[5], parms[6]); - getSubbandDatWarpedPFBStereo(pfb1Ptr, pfb2Ptr, subbandDat1, subbandDat2, decimationCounter); - return 0; -} -static float NSEEL_CGEN_CALL PolyphaseFilterbankSynthesisStereo(void *opaque, INT_PTR num_param, float **parms) -{ - if (num_param < 6) - return -1; - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - int32_t offs1 = (int32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float *indexer1 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - int32_t offs2 = (int32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float *indexer2 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - int32_t offs3 = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *subbandDat1 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs3); - int32_t offs4 = (int32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *subbandDat2 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs4); - WarpedPFB *pfb1Ptr = (WarpedPFB*)indexer1; - WarpedPFB *pfb2Ptr = (WarpedPFB*)indexer2; - writeSubbandDatWarpedPFBStereo(pfb1Ptr, pfb2Ptr, subbandDat1, subbandDat2); - synthesisWarpedPFBStereo(pfb1Ptr, pfb2Ptr, parms[4], parms[5]); - return 0; -} -#include "numericSys/FilterDesign/fdesign.h" -static float NSEEL_CGEN_CALL _eel_iirBandSplitterInit(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - uint32_t offs1 = (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - float fs = *parms[1]; - float *tdsbStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - if (num_param > 9) - return -1; - size_t requireMemSize; - void *ptr = 0; - if (num_param == 3) - { - requireMemSize = sizeof(LinkwitzRileyCrossover); - LinkwitzRileyCrossover *lr = (LinkwitzRileyCrossover*)malloc(requireMemSize); - LWZRClearStateVariable(lr); - LWZRCalculateCoefficients(lr, fs, *parms[2], 0); - ptr = lr; - } - else if (num_param == 4) - { - requireMemSize = sizeof(ThreeBandsCrossover); - ThreeBandsCrossover *bps = (ThreeBandsCrossover*)malloc(requireMemSize); - memset(bps, 0, sizeof(ThreeBandsCrossover)); - init3BandsCrossover(bps, fs, *parms[2], *parms[3]); - ptr = bps; - } - else if (num_param == 5) - { - requireMemSize = sizeof(FourBandsCrossover); - FourBandsCrossover *bps = (FourBandsCrossover*)malloc(requireMemSize); - memset(bps, 0, sizeof(FourBandsCrossover)); - init4BandsCrossover(bps, fs, *parms[2], *parms[3], *parms[4]); - ptr = bps; - } - else if (num_param == 6) - { - requireMemSize = sizeof(FiveBandsCrossover); - FiveBandsCrossover *bps = (FiveBandsCrossover*)malloc(requireMemSize); - memset(bps, 0, sizeof(FiveBandsCrossover)); - init5BandsCrossover(bps, fs, *parms[2], *parms[3], *parms[4], *parms[5]); - ptr = bps; - } - else if (num_param == 7) - { - requireMemSize = sizeof(SixBandsCrossover); - SixBandsCrossover *bps = (SixBandsCrossover*)malloc(requireMemSize); - memset(bps, 0, sizeof(SixBandsCrossover)); - init6BandsCrossover(bps, fs, *parms[2], *parms[3], *parms[4], *parms[5], *parms[6]); - ptr = bps; - } - else if (num_param == 8) - { - requireMemSize = sizeof(SevenBandsCrossover); - SevenBandsCrossover *bps = (SevenBandsCrossover*)malloc(requireMemSize); - memset(bps, 0, sizeof(SevenBandsCrossover)); - init7BandsCrossover(bps, fs, *parms[2], *parms[3], *parms[4], *parms[5], *parms[6], *parms[7]); - ptr = bps; - } - else if (num_param == 9) - { - requireMemSize = sizeof(EightBandsCrossover); - EightBandsCrossover *bps = (EightBandsCrossover*)malloc(requireMemSize); - memset(bps, 0, sizeof(EightBandsCrossover)); - init8BandsCrossover(bps, fs, *parms[2], *parms[3], *parms[4], *parms[5], *parms[6], *parms[7], *parms[8]); - ptr = bps; - } - tdsbStruct[0] = (float)(num_param - 1); - memcpy(tdsbStruct + 1, ptr, requireMemSize); - free(ptr); - return (float)(1 + requireMemSize / sizeof(float)); -} -static float NSEEL_CGEN_CALL _eel_iirBandSplitterClearState(float *blocks, float *start) -{ - float *tdsbStruct = __NSEEL_RAMAlloc(blocks, (uint64_t)(uint32_t)(*start + NSEEL_CLOSEFACTOR)); - int32_t bands = (int32_t)(tdsbStruct[0] + NSEEL_CLOSEFACTOR); - switch (bands) - { - case 2: - LWZRClearStateVariable((LinkwitzRileyCrossover*)(tdsbStruct + 1)); - break; - case 3: - clearState3BandsCrossover((ThreeBandsCrossover*)(tdsbStruct + 1)); - break; - case 4: - clearState4BandsCrossover((FourBandsCrossover*)(tdsbStruct + 1)); - break; - case 5: - clearState5BandsCrossover((FiveBandsCrossover*)(tdsbStruct + 1)); - break; - case 6: - clearState6BandsCrossover((SixBandsCrossover*)(tdsbStruct + 1)); - break; - case 7: - clearState7BandsCrossover((SevenBandsCrossover*)(tdsbStruct + 1)); - break; - case 8: - clearState8BandsCrossover((EightBandsCrossover*)(tdsbStruct + 1)); - break; - } - return 1; -} -static float NSEEL_CGEN_CALL _eel_iirBandSplitterProcess(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *tdsbStruct = __NSEEL_RAMAlloc(c->ram_state, (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR)); - int32_t bands = (int32_t)(tdsbStruct[0] + NSEEL_CLOSEFACTOR); - double out[8]; - switch (bands) - { - case 2: - LWZRProcessSample((LinkwitzRileyCrossover*)(tdsbStruct + 1), *parms[1], &out[0], &out[1]); - *parms[2] = (float)out[0]; - *parms[3] = (float)-out[1]; - break; - case 3: - process3BandsCrossover((ThreeBandsCrossover*)(tdsbStruct + 1), *parms[1], &out[0], &out[1], &out[2]); - *parms[2] = (float)out[0]; - *parms[3] = (float)-out[1]; - *parms[4] = (float)out[2]; - break; - case 4: - process4BandsCrossover((FourBandsCrossover*)(tdsbStruct + 1), *parms[1], &out[0], &out[1], &out[2], &out[3]); - *parms[2] = (float)out[0]; - *parms[3] = (float)-out[1]; - *parms[4] = (float)out[2]; - *parms[5] = (float)-out[3]; - break; - case 5: - process5BandsCrossover((FiveBandsCrossover*)(tdsbStruct + 1), *parms[1], &out[0], &out[1], &out[2], &out[3], &out[4]); - *parms[2] = (float)out[0]; - *parms[3] = (float)-out[1]; - *parms[4] = (float)out[2]; - *parms[5] = (float)-out[3]; - *parms[6] = (float)out[4]; - break; - case 6: - process6BandsCrossover((SixBandsCrossover*)(tdsbStruct + 1), *parms[1], &out[0], &out[1], &out[2], &out[3], &out[4], &out[5]); - *parms[2] = (float)out[0]; - *parms[3] = (float)-out[1]; - *parms[4] = (float)out[2]; - *parms[5] = (float)-out[3]; - *parms[6] = (float)out[4]; - *parms[7] = (float)-out[5]; - break; - case 7: - process7BandsCrossover((SevenBandsCrossover*)(tdsbStruct + 1), *parms[1], &out[0], &out[1], &out[2], &out[3], &out[4], &out[5], &out[6]); - *parms[2] = (float)out[0]; - *parms[3] = (float)-out[1]; - *parms[4] = (float)out[2]; - *parms[5] = (float)-out[3]; - *parms[6] = (float)out[4]; - *parms[7] = (float)-out[5]; - *parms[8] = (float)out[6]; - break; - case 8: - process8BandsCrossover((EightBandsCrossover*)(tdsbStruct + 1), *parms[1], &out[0], &out[1], &out[2], &out[3], &out[4], &out[5], &out[6], &out[7]); - *parms[2] = (float)out[0]; - *parms[3] = (float)-out[1]; - *parms[4] = (float)out[2]; - *parms[5] = (float)-out[3]; - *parms[6] = (float)out[4]; - *parms[7] = (float)-out[5]; - *parms[8] = (float)out[6]; - *parms[9] = (float)-out[7]; - break; - } - return 1; -} -#include "eel_matrix.h" -#include "numericSys/FFTConvolver.h" -static float NSEEL_CGEN_CALL _eel_initfftconv1d(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - if (c->numberOfConvolver > 1024 - 1) - return -1; - uint32_t ranN; - while (1) - { - ranN = (uint32_t)(nseel_int_rand(1.0f) * 1024.0); - uint32_t counter = 0; - for (uint32_t i = 0; i < c->numberOfConvolver; i++) - { - if (ranN == c->convolverMap[i]) - { - counter++; - break; - } - } - if (!counter) - break; - } - void *ptr = 0; - uint32_t convType; - if (num_param == 3) - convType = 1; - else if (num_param == 4) - convType = 2; - else if (num_param == 6) - convType = 4; - else - return -2; - uint32_t latency = (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR); - uint32_t irLen = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - if (convType == 1) - { - int32_t offs1 = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *impulseresponse = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - FFTConvolver1x1 *conv = (FFTConvolver1x1*)malloc(sizeof(FFTConvolver1x1)); - FFTConvolver1x1Init(conv); - FFTConvolver1x1LoadImpulseResponse(conv, latency, impulseresponse, irLen); - ptr = (void*)conv; - } - if (convType == 2) - { - uint32_t offs1 = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - uint32_t offs2 = (uint32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - float *leftImp = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float *rightImp = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - FFTConvolver2x2 *conv = (FFTConvolver2x2*)malloc(sizeof(FFTConvolver2x2)); - FFTConvolver2x2Init(conv); - FFTConvolver2x2LoadImpulseResponse(conv, latency, leftImp, rightImp, irLen); - ptr = (void*)conv; - } - if (convType == 4) - { - uint32_t offs1 = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - uint32_t offs2 = (uint32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - uint32_t offs3 = (uint32_t)(*parms[4] + NSEEL_CLOSEFACTOR); - uint32_t offs4 = (uint32_t)(*parms[5] + NSEEL_CLOSEFACTOR); - float *LL = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float *LR = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - float *RL = __NSEEL_RAMAlloc(blocks, (uint64_t)offs3); - float *RR = __NSEEL_RAMAlloc(blocks, (uint64_t)offs4); - FFTConvolver2x4x2 *conv = (FFTConvolver2x4x2*)malloc(sizeof(FFTConvolver2x4x2)); - FFTConvolver2x4x2Init(conv); - FFTConvolver2x4x2LoadImpulseResponse(conv, latency, LL, LR, RL, RR, irLen); - ptr = (void*)conv; - } - c->numberOfConvolver++; - int32_t idx = c->numberOfConvolver - 1; - if (idx) - { - c->convolverMap = (uint32_t*)realloc(c->convolverMap, c->numberOfConvolver * sizeof(uint32_t)); - c->convolverType = (uint32_t*)realloc(c->convolverType, c->numberOfConvolver * sizeof(uint32_t)); - c->convolverSink = (void**)realloc(c->convolverSink, c->numberOfConvolver * sizeof(void*)); - } - else - { - c->convolverMap = (uint32_t*)malloc(c->numberOfConvolver * sizeof(uint32_t)); - c->convolverType = (uint32_t*)malloc(c->numberOfConvolver * sizeof(uint32_t)); - c->convolverSink = (void**)malloc(c->numberOfConvolver * sizeof(void*)); - } - c->convolverMap[idx] = ranN; - c->convolverType[idx] = convType; - c->convolverSink[idx] = ptr; - return (float)ranN; -} -static float NSEEL_CGEN_CALL _eel_deletefftconv1d(void *opaque, float *v) -{ - compileContext *c = (compileContext*)opaque; - if (!c->convolverMap) - return -1; - int32_t idx = arySearch(c->convolverMap, c->numberOfConvolver, (int32_t)(*v + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return -2; - void *ptr = c->convolverSink[idx]; - int32_t convType = c->convolverType[idx]; - if (convType == 1) - { - FFTConvolver1x1 *conv = (FFTConvolver1x1*)ptr; - FFTConvolver1x1Free(conv); - free(conv); - } - if (convType == 2) - { - FFTConvolver2x2 *conv = (FFTConvolver2x2*)ptr; - FFTConvolver2x2Free(conv); - free(conv); - } - if (convType == 4) - { - FFTConvolver2x4x2 *conv = (FFTConvolver2x4x2*)ptr; - FFTConvolver2x4x2Free(conv); - free(conv); - } - for (uint32_t i = idx; i < c->numberOfConvolver - 1; i++) - { - c->convolverMap[i] = c->convolverMap[i + 1]; - c->convolverType[i] = c->convolverType[i + 1]; - c->convolverSink[i] = c->convolverSink[i + 1]; - } - c->numberOfConvolver--; - if (c->numberOfConvolver) - { - c->convolverMap = (uint32_t*)realloc(c->convolverMap, c->numberOfConvolver * sizeof(uint32_t)); - c->convolverType = (uint32_t*)realloc(c->convolverType, c->numberOfConvolver * sizeof(uint32_t)); - c->convolverSink = (void**)realloc(c->convolverSink, c->numberOfConvolver * sizeof(void*)); - } - else - { - free(c->convolverMap); - free(c->convolverType); - free(c->convolverSink); - c->convolverMap = 0; - c->convolverType = 0; - c->convolverSink = 0; - } - return 1; -} -static float NSEEL_CGEN_CALL _eel_processfftconv1d(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - if (!c->convolverMap) - return -1; - int32_t idx = arySearch(c->convolverMap, c->numberOfConvolver, (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return 0; - void *ptr = c->convolverSink[idx]; - int32_t convType = c->convolverType[idx]; - if (convType == 1) - { - FFTConvolver1x1 *conv = (FFTConvolver1x1*)ptr; - uint32_t offs1 = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float *x = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - FFTConvolver1x1Process(conv, x, x, conv->_blockSize); - } - if (convType == 2) - { - FFTConvolver2x2 *conv = (FFTConvolver2x2*)ptr; - uint32_t offs1 = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - uint32_t offs2 = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *x1 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float *x2 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - FFTConvolver2x2Process(conv, x1, x2, x1, x2, conv->_blockSize); - } - if (convType == 4) - { - FFTConvolver2x4x2 *conv = (FFTConvolver2x4x2*)ptr; - uint32_t offs1 = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - uint32_t offs2 = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float *x1 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs1); - float *x2 = __NSEEL_RAMAlloc(blocks, (uint64_t)offs2); - FFTConvolver2x4x2Process(conv, x1, x2, x1, x2, conv->_blockSize); - } - return 1; -} - -void *task_user_created(void *arg) -{ - abstractThreads *info = (abstractThreads *)arg; - // cond_wait mutex must be locked before we can wait - pthread_mutex_lock(&(info->work_mtx)); - // ensure boss is waiting - pthread_mutex_lock(&(info->boss_mtx)); - // signal to boss that EEL_SETUP is complete - info->state = EEL_IDLE; - // wake-up signal - pthread_cond_signal(&(info->boss_cond)); - pthread_mutex_unlock(&(info->boss_mtx)); - while (1) - { - pthread_cond_wait(&(info->work_cond), &(info->work_mtx)); - if (EEL_GET_OFF_FROM_WORK == info->state) - break; // kill thread - if (EEL_IDLE == info->state) - continue; // accidental wake-up - // do blocking task - NSEEL_code_execute(info->codePtr); - // ensure boss is waiting - pthread_mutex_lock(&(info->boss_mtx)); - // indicate that job is done - info->state = EEL_IDLE; - // wake-up signal - pthread_cond_signal(&(info->boss_cond)); - pthread_mutex_unlock(&(info->boss_mtx)); - } - pthread_mutex_unlock(&(info->work_mtx)); - pthread_exit(NULL); - return 0; -} -void eelThread_start(compileContext *st, size_t task) -{ - abstractThreads *info = st->codePtrThreadSink[task]; - // ensure worker is waiting - pthread_mutex_lock(&(info->work_mtx)); - // set job information & state - info->state = EEL_WORKING; - // wake-up signal - pthread_cond_signal(&(info->work_cond)); - pthread_mutex_unlock(&(info->work_mtx)); -} -void eelThread_wait(compileContext *st, size_t task) -{ - abstractThreads *info = st->codePtrThreadSink[task]; - while (1) - { - pthread_cond_wait(&(info->boss_cond), &(info->boss_mtx)); - if (EEL_IDLE == info->state) - break; - } -} -void thread_init(compileContext *st, int task) -{ - abstractThreads *info = st->codePtrThreadSink[task]; - info->state = EEL_SETUP; - pthread_cond_init(&(info->work_cond), NULL); - pthread_mutex_init(&(info->work_mtx), NULL); - pthread_cond_init(&(info->boss_cond), NULL); - pthread_mutex_init(&(info->boss_mtx), NULL); - pthread_mutex_lock(&(info->boss_mtx)); - pthread_create(&info->threadID, NULL, task_user_created, (void *)info); - eelThread_wait(st, task); -} -void thread_delete(compileContext *st, int task) -{ - abstractThreads *info = st->codePtrThreadSink[task]; - // ensure the worker is waiting - if (info->state == EEL_WORKING) - eelThread_wait(st, task); - pthread_mutex_lock(&(info->work_mtx)); - info->state = EEL_GET_OFF_FROM_WORK; - // wake-up signal - pthread_cond_signal(&(info->work_cond)); - pthread_mutex_unlock(&(info->work_mtx)); - // wait for thread to exit - pthread_join(info->threadID, NULL); - pthread_mutex_destroy(&(info->work_mtx)); - pthread_cond_destroy(&(info->work_cond)); - pthread_mutex_unlock(&(info->boss_mtx)); - pthread_mutex_destroy(&(info->boss_mtx)); - pthread_cond_destroy(&(info->boss_cond)); - NSEEL_code_free(info->codePtr); -} -static float NSEEL_CGEN_CALL _eel_initthread(void *opaque, float *stringID) -{ - compileContext *c = (compileContext*)opaque; - const char *codePtr = (const char*)GetStringForIndex(c->m_string_context, *stringID, 0); - NSEEL_CODEHANDLE compiledCode = NSEEL_code_compile_ex(c, codePtr, 0, 1); - char *err; - char badStr[128]; - if (!compiledCode && (err = NSEEL_code_getcodeerror(c))) - { - stbsp_snprintf(badStr, 128, "Error when compiling code for thread: %s\n", err); - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - return -2; - } - float *blocks = c->ram_state; - if (c->numberOfThreads > 1024 - 1) - return -1; - uint32_t ranN; - while (1) - { - ranN = (uint32_t)(nseel_int_rand(1.0f) * 1024.0); - uint32_t counter = 0; - for (uint32_t i = 0; i < c->numberOfThreads; i++) - { - if (ranN == c->threadMap[i]) - { - counter++; - break; - } - } - if (!counter) - break; - } - c->numberOfThreads++; - int32_t idx = c->numberOfThreads - 1; - c->codePtrThreadSink[idx] = (abstractThreads*)malloc(sizeof(abstractThreads)); - thread_init(c, idx); - c->codePtrThreadSink[idx]->codePtr = compiledCode; - c->threadMap[idx] = ranN; - return (float)ranN; -} -static float NSEEL_CGEN_CALL _eel_deletethread(void *opaque, float *v) -{ - compileContext *c = (compileContext*)opaque; - if (!c->threadMap) - return -1; - int32_t idx = arySearch(c->threadMap, c->numberOfThreads, (int32_t)(*v + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return -2; - thread_delete(c, idx); - free(c->codePtrThreadSink[idx]); - for (uint32_t i = idx; i < c->numberOfThreads - 1; i++) - { - c->threadMap[i] = c->threadMap[i + 1]; - c->codePtrThreadSink[i] = c->codePtrThreadSink[i + 1]; - } - c->numberOfThreads--; - return 1; -} -static float NSEEL_CGEN_CALL _eel_createThread(void *opaque, float *v) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - if (!c->threadMap) - return -1; - int32_t idx = arySearch(c->threadMap, c->numberOfThreads, (uint32_t)(*v + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return 0; - eelThread_start(c, idx); - return 1; -} -static float NSEEL_CGEN_CALL _eel_joinThread(void *opaque, float *v) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - if (!c->threadMap) - return -1; - int32_t idx = arySearch(c->threadMap, c->numberOfThreads, (uint32_t)(*v + NSEEL_CLOSEFACTOR)); - if (idx < 0) - return 0; - eelThread_wait(c, idx); - return 1; -} -static float NSEEL_CGEN_CALL _eel_lockThread(void *opaque, float *v) -{ - compileContext *c = (compileContext*)opaque; - pthread_mutex_lock(&c->globalLocker); - return 1; -} -static float NSEEL_CGEN_CALL _eel_unlockThread(void *opaque, float *v) -{ - compileContext *c = (compileContext*)opaque; - pthread_mutex_unlock(&c->globalLocker); - return 1; -} - -static void channel_split(float *buffer, uint64_t num_frames, float **chan_buffers, uint32_t num_channels) -{ - uint64_t i, samples = num_frames * num_channels; - for (i = 0; i < samples; i++) - chan_buffers[i % num_channels][i / num_channels] = buffer[i]; -} -static void channel_join(float **chan_buffers, uint32_t num_channels, float *buffer, uint64_t num_frames) -{ - uint64_t i, samples = num_frames * num_channels; - for (i = 0; i < samples; i++) - buffer[i] = (float)(chan_buffers[i % num_channels][i / num_channels]); -} -static const double compressedCoeffMQ[701] = { 0.919063234986138511, 0.913619994199411201, 0.897406560667438402, 0.870768836078722797, 0.834273523109754001, 0.788693711602254766, 0.734989263333015286, 0.674282539592362951, 0.607830143521649657, 0.536991457245508341, 0.463194839157173466, 0.387902406850539450, 0.312574364478514499, 0.238633838900749129, 0.167433166845669668, 0.100222526262645231, 0.038121730693097225, -0.017904091793426027, -0.067064330735278010, -0.108757765594775291, -0.142582153044975485, -0.168338357500518510, -0.186029009837402531, -0.195851834439330574, -0.198187933840591440, -0.193585458951914369, -0.182739217157973949, -0.166466876941489483, -0.145682513177707279, -0.121368299577954988, -0.094545192393702127, -0.066243461643369750, -0.037473912797399318, -0.009200603832691301, 0.017684198632122932, 0.042382162574711987, 0.064207571946511041, 0.082602100079150684, 0.097145355203635028, 0.107561011406507381, 0.113718474453852247, 0.115630166683615837, 0.113444644504459249, 0.107435882084395071, 0.097989162055837783, 0.085584105452548076, 0.070775446120293309, 0.054172207614333223, 0.036415971885660689, 0.018158938330246815, 0.000042459196338912, -0.017323296238410713, -0.033377949403731559, -0.047627263300716267, -0.059656793081079629, -0.069142490141500798, -0.075858019256578396, -0.079678658979652428, -0.080581767609623323, -0.078643906863599317, -0.074034819562284179, -0.067008552930955145, -0.057892102695980191, -0.047072022601671190, -0.034979497375161483, -0.022074413174279148, -0.008828977400685476, 0.004288560713652965, 0.016829555699174666, 0.028379479813981756, 0.038570858162652835, 0.047094241683417769, 0.053706909605020871, 0.058239076113395197, 0.060597464446319166, 0.060766202425508065, 0.058805083502616720, 0.054845323789501445, 0.049083025498695095, 0.041770628243703020, 0.033206689594802247, 0.023724383421121997, 0.013679137601712221, 0.003435850879130631, -0.006643868309165797, -0.016214010012738603, -0.024955612937682017, -0.032586990530198853, -0.038872417226545809, -0.043629018879643239, -0.046731678346964158, -0.048115839004410917, -0.047778163016171563, -0.045775074997070689, -0.042219292770236193, -0.037274512912134725, -0.031148477572630149, -0.024084698830208532, -0.016353156105483747, -0.008240309809337577, -0.000038789761018515, 0.007962880277736915, 0.015490170167632772, 0.022291712611484882, 0.028147455724642705, 0.032875542265754551, 0.036337708303315903, 0.038443049556812471, 0.039150063091460026, 0.038466933347880143, 0.036450092517807633, 0.033201143952433128, 0.028862291652591764, 0.023610467168487866, 0.017650385903971395, 0.011206796641134264, 0.004516210167813600, -0.002181595351151269, -0.008651993358287469, -0.014673562407359826, -0.020045503214184583, -0.024594176093158650, -0.028178551235573571, -0.030694406321622035, -0.032077152831841031, -0.032303222419993387, -0.031389996039150381, -0.029394309376722470, -0.026409616804964359, -0.022561940854659814, -0.018004773700230153, -0.012913130046223239, -0.007476976122050557, -0.001894276500050309, 0.003636091270827173, 0.008921304789011335, 0.013781207467236415, 0.018054338893886482, 0.021603186795815136, 0.024318493648450956, 0.026122487293166251, 0.026970945047679402, 0.026854043263213976, 0.025795987570079431, 0.023853461640206807, 0.021112972713804853, 0.017687209024348168, 0.013710556397414673, 0.009333947668859192, 0.004719238361448204, 0.000033314715823999, -0.004557854609777880, -0.008895014112733140, -0.012831064739959125, -0.016235971633599879, -0.019000975419769615, -0.021041973670496809, -0.022301970824562707, -0.022752529440111541, -0.022394191906072568, -0.021255878361951062, -0.019393302279828196, -0.016886478718542881, -0.013836430536684995, -0.010361223853106050, -0.006591484944463394, -0.002665565936317155, 0.001275464342459697, 0.005092825309417521, 0.008654850008311749, 0.011841465274590917, 0.014548176385701671, 0.016689426206986688, 0.018201223316688792, 0.019042961289876651, 0.019198381208357294, 0.018675660452129358, 0.017506641810096972, 0.015745246837337051, 0.013465145155917528, 0.010756776112709417, 0.007723840062309154, 0.004479392878420811, 0.001141688626311485, -0.002170078649346380, -0.005339982462341837, -0.008259373919338373, -0.010830557217282604, -0.012970007990380254, -0.014611030342508765, -0.015705770153788771, -0.016226526478563909, -0.016166328657139784, -0.015538773207899238, -0.014377140707818779, -0.012732837794565421, -0.010673232279050818, -0.008278969379415602, -0.005640873626063710, -0.002856553527664500, -0.000026834265658038, 0.002747852704083721, 0.005370995258360709, 0.007753319014958258, 0.009815785813909824, 0.011492173003678219, 0.012731150958433296, 0.013497795530424229, 0.013774493273929109, 0.013561219484126362, 0.012875191572278549, 0.011749922250546383, 0.010233717662138146, 0.008387684262046795, 0.006283324310867826, 0.003999812773708582, 0.001621057822818793, -0.000767347236997687, -0.003081171091507831, -0.005240483245491547, -0.007172383140908554, -0.008813427537033921, -0.010111676574189758, -0.011028293954650051, -0.011538653669060464, -0.011632924035784708, -0.011316118830412747, -0.010607624279109693, -0.009540229002217340, -0.008158700990423423, -0.006517970800651516, -0.004680992876389242, -0.002716366825287035, -0.000695807329823454, 0.001308445056270027, 0.003226179724201707, 0.004991648959431359, 0.006545794666321473, 0.007838194454033614, 0.008828664063258869, 0.009488466505815606, 0.009801093167340614, 0.009762597931815446, 0.009381481548192093, 0.008678139395534967, 0.007683900954968532, 0.006439703144240938, 0.004994451750326167, 0.003403135115410580, 0.001724761684323746, 0.000020197792912962, -0.001650015947868542, -0.003227792151864713, -0.004659494079420105, -0.005897735119564774, -0.006902920847777659, -0.007644484483944344, -0.008101778413755888, -0.008264597354555087, -0.008133322264400958, -0.007718687720230902, -0.007041188742854554, -0.006130155461650219, -0.005022535167821778, -0.003761430832691131, -0.002394452762763960, -0.000971945496911797, 0.000454844825025831, 0.001835596641714852, 0.003122668316617104, 0.004272722114380925, 0.005248162177843576, 0.006018339594106877, 0.006560486855847911, 0.006860354383749922, 0.006912532886871314, 0.006720456790559610, 0.006296095343184246, 0.005659348921651181, 0.004837178114662079, 0.003862502033291890, 0.002772909691220670, 0.001609233980906675, 0.000414041581645497, -0.000769906024675906, -0.001901165407831948, -0.002941044990442539, -0.003854910802244932, -0.004613320774623974, -0.005192951162290093, -0.005577286818932973, -0.005757056020769449, -0.005730399990410974, -0.005502776877353867, -0.005086609356845171, -0.004500693886508907, -0.003769397706347888, -0.002921676615038254, -0.001989952181071211, -0.001008891180284735, -0.000014132577398601, 0.000958991766382216, 0.001876697269289887, 0.002707904681562794, 0.003425276863778077, 0.004006100299408528, 0.004432983601002821, 0.004694352366032693, 0.004784727410211850, 0.004704781367912914, 0.004461176612085595, 0.004066195127045020, 0.003537178100163921, 0.002895799341758980, 0.002167201988627001, 0.001379032128141500, 0.000560405874095270, -0.000259152041390146, -0.001050759947470964, -0.001787184184342184, -0.002443762818329620, -0.002999217281793143, -0.003436325772772713, -0.003742437746853627, -0.003909814939345641, -0.003935790838753386, -0.003822747153675574, -0.003577912336230492, -0.003212993416401785, -0.002743658050835511, -0.002188888608264336, -0.001570234143874397, -0.000910989133812205, -0.000235329764723561, 0.000432560641279413, 0.001069345839998360, 0.001653340745377959, 0.002165238082962834, 0.002588733711954676, 0.002911030869493576, 0.003123208352342977, 0.003220442832479460, 0.003202080909987641, 0.003071561941475896, 0.002836197950977609, 0.002506821849485185, 0.002097319592184942, 0.001624065644771860, 0.001105284094542681, 0.000560359841433201, 0.000009125484808694, -0.000528850236297424, -0.001034947274672293, -0.001492128764321782, -0.001885503916298735, -0.002202801129643487, -0.002434736758218434, -0.002575269035034838, -0.002621730990172647, -0.002574840645573092, -0.002438591168737718, -0.002220027862259672, -0.001928922712789991, -0.001577360593112676, -0.001179253996234489, -0.000749805296090004, -0.000304936916893765, 0.000139289578942291, 0.000567244609490058, 0.000964271897894877, 0.001317181565737385, 0.001614678737960774, 0.001847714105275549, 0.002009746006742852, 0.002096907004167219, 0.002108071492117578, 0.002044824491385029, 0.001911335280223238, 0.001714142804308648, 0.001461862761483392, 0.001164828784166054, 0.000834682161765550, 0.000483925998593740, 0.000125460552453497, -0.000227883269383389, -0.000563795658925073, -0.000870909262856999, -0.001139175997920627, -0.001360187135536317, -0.001527426803455576, -0.001636451679881492, -0.001684992470943874, -0.001672975660262524, -0.001602466894019970, -0.001477540114542411, -0.001304079085075351, -0.001089520173828018, -0.000842547115162114, -0.000572749884052837, -0.000290260767615715, -0.000005381173403155, 0.000271787324682131, 0.000531694720882059, 0.000765665077860444, 0.000966179147256847, 0.001127108176071712, 0.001243891947014572, 0.001313656276814221, 0.001335267482640161, 0.001309323638539731, 0.001238084697878249, 0.001125345675261167, 0.000976258990458714, 0.000797113715033597, 0.000595080778704776, 0.000377934148912837, 0.000153758569481225, -0.000069345376995143, -0.000283548328671139, -0.000481561352316614, -0.000656878246049437, -0.000803983100343503, -0.000918516742461215, -0.000997397336828164, -0.001038892182663637, -0.001042639573678904, -0.001009621396079384, -0.000942088876021349, -0.000843445486235168, -0.000718092430499951, -0.000571243299133416, -0.000408715393446694, -0.000236705827693455, -0.000061560820167541, 0.000110453421068778, 0.000273370118506192, 0.000421724138601977, 0.000550730322629083, 0.000656432310144007, 0.000735817450677950, 0.000786894740519778, 0.000808734131933592, 0.000801466989262860, 0.000766248858509478, 0.000705187025332569, 0.000621236516650982, 0.000518069214751335, 0.000399921568730665, 0.000271426983019702, 0.000137439322056229, 0.000002854088234340, -0.000127566289796932, -0.000249356967950712, -0.000358499459727905, -0.000451549869015331, -0.000525742663600061, -0.000579067066332711, -0.000610314210246149, -0.000619094306052033, -0.000605824164738963, -0.000571686465475047, -0.000518563123569660, -0.000448945962885840, -0.000365828604967228, -0.000272584032349123, -0.000172832651673869, -0.000070305865763902, 0.000031289837955523, 0.000128403456337462, 0.000217760218406138, 0.000296468531144650, 0.000362109765670523, 0.000412808249833617, 0.000447279627497663, 0.000464856578836417, 0.000465491738613502, 0.000449738470059130, 0.000418710921836804, 0.000374025488711351, 0.000317726390511799, 0.000252198560764628, 0.000180071382714710, 0.000104117018254314, 0.000027147141711448, -0.000048088182130861, -0.000118995940709898, -0.000183226726188442, -0.000238749615318076, -0.000283913107803554, -0.000317490431754438, -0.000338708143110164, -0.000347257581417331, -0.000343289373546324, -0.000327391777412823, -0.000300554208881314, -0.000264117778630104, -0.000219715066774411, -0.000169201669906033, -0.000114582260151285, -0.000057933995063949, -0.000001330110803372, 0.000053233576939992, 0.000103906741924272, 0.000149044949497856, 0.000187260510974094, 0.000217462319983746, 0.000238883649294571, 0.000251097355835207, 0.000254018413730855, 0.000247894152903089, 0.000233283008194432, 0.000211022966716673, 0.000182191226994878, 0.000148056842795767, 0.000110028310364557, 0.000069598166140896, 0.000028286691831679, -0.000012413223177511, -0.000051088131137235, -0.000086451240238396, -0.000117383287411682, -0.000142965848616867, -0.000162506184310969, -0.000175553056891817, -0.000181903303379713, -0.000181599287597338, -0.000174917679492114, -0.000162350303974188, -0.000144578058136870, -0.000122439106161612, -0.000096892719738482, -0.000068980234721197, -0.000039784640417051, -0.000010390306964679, 0.000018155708707897, 0.000044879452343343, 0.000068911789142910, 0.000089515073669816, 0.000106104020030281, 0.000118260259226232, 0.000125740319217347, 0.000128477011389261, 0.000126574445796332, 0.000120297118433995, 0.000110053709582710, 0.000096376396848920, 0.000079896615190895, 0.000061318285745045, 0.000041389584008291, 0.000020874325790195, 0.000000524017729422, -0.000018948449136533, -0.000036892585232981, -0.000052740818819573, -0.000066025144314650, -0.000076389469747209, -0.000083597404911355, -0.000087535408131387, -0.000088211381288728, -0.000085748963835814, -0.000080377921496540, -0.000072421149619506, -0.000062278911057702, -0.000050411001395778, -0.000037317578835504, -0.000023519411693731, -0.000009538283954733, 0.000004121739654397, 0.000016991550435446, 0.000028652179052461, 0.000038747470023706, 0.000046993903986995, 0.000053187343852112, 0.000057206603209622, 0.000059013855762422, 0.000058652018744224, 0.000056239347370971, 0.000051961567969763, 0.000046061951828715, 0.000038829788015541, 0.000030587750191730, 0.000021678669346899, 0.000012452221695327, 0.000003252019725938, -0.000005596443768274, -0.000013796601731427, -0.000021090036946349, -0.000027263866219030, -0.000032156106624670, -0.000035658928433894, -0.000037719781474555, -0.000038340460301533, -0.000037574245901964, -0.000035521325378456, -0.000032322744186229, -0.000028153186597604, -0.000023212908194301, -0.000017719158939021, -0.000011897436866734, -0.000005972901266780, -0.000000162251446552, 0.000005333655793588, 0.000010336218246169, 0.000014694346087313, 0.000018288433744639, 0.000021032968627464, 0.000022877753957232, 0.000023807775391314, 0.000023841789731823, 0.000023029757133319, 0.000021449274538926, 0.000019201196577477, 0.000016404650185715, 0.000013191660473528, 0.000009701607868611, 0.000006075730729441, 0.000002451874068818, -0.000001040335292299, -0.000004283732788372, -0.000007177155365100, -0.000009638185206925, -0.000011605042076524, -0.000013037603419542, -0.000013917565218600, -0.000014247788012456, -0.000014050900469913, -0.000013367256554309, -0.000012252360976939, -0.000010773890887184, -0.000009008449384796, -0.000007038188493661, -0.000004947435946560, -0.000002819451929447, -0.000000733429418017, 0.000001238164361723, 0.000003031826677860, 0.000004594780305705, 0.000005886220575305, 0.000006878033995645, 0.000007554995005623, 0.000007914466875845, 0.000007965650064675, 0.000007728435880102, 0.000007231934716903, 0.000006512756173231, 0.000005613122895949, 0.000004578901096601, 0.000003457628489583, 0.000002296615219305, 0.000001141185552533, 0.000000033118183302, -0.000000990668545558, -0.000001899152803076, -0.000002667946210802, -0.000003279724008567, -0.000003724353373815, -0.000003998736284580, -0.000004106393367485, -0.000004056823505075, -0.000003864680371659, -0.000003548811395079, -0.000003131206866384, -0.000002635907089885, -0.000002087913711897, -0.000001512147886406, -0.000000932492985725, -0.000000370953442845, 0.000000153045653294, 0.000000623201057861, 0.000001026706448750, 0.000001354458044511, 0.000001601095747237, 0.000001764891111188, 0.000001847498832724, 0.000001853592772907, 0.000001790410657756, 0.000001667233505382, 0.000001494826511430, 0.000001284867642241, 0.000001049388641653, 0.000000800250692844, 0.000000548673760673, 0.000000304834862491, 0.000000077546377014, -0.000000125978796206, -0.000000300272674786, -0.000000441669721214, -0.000000548281621807, -0.000000619897641839, -0.000000657821438861, -0.000000664657100282, -0.000000644058349094, -0.000000600455333568, -0.000000538773213853, -0.000000464155939282, -0.000000381707256690, -0.000000296259201847, -0.000000212176215381, -0.000000133200709942, -0.000000062343516559, 0.0 }; -void decompressResamplerMQ(const double y[701], float *yi) -{ - double breaks[701]; - double coefs[2800]; - int k; - double s[701]; - double dx[700]; - double dvdf[700]; - double r, dzzdx, dzdxdx; - for (k = 0; k < 700; k++) - { - r = 0.0014285714285714286 * ((double)k + 1.0) - 0.0014285714285714286 * (double)k; - dx[k] = r; - dvdf[k] = (y[k + 1] - y[k]) / r; - } - s[0] = ((dx[0] + 0.0057142857142857143) * dx[1] * dvdf[0] + dx[0] * dx[0] * dvdf[1]) / 0.0028571428571428571; - s[700] = ((dx[699] + 0.0057142857142857828) * dx[698] * dvdf[699] + dx[699] * dx[699] * dvdf[698]) / 0.0028571428571428914; - breaks[0] = dx[1]; - breaks[700] = dx[698]; - for (k = 0; k < 699; k++) - { - r = dx[k + 1]; - s[k + 1] = 3.0 * (r * dvdf[k] + dx[k] * dvdf[k + 1]); - breaks[k + 1] = 2.0 * (r + dx[k]); - } - r = dx[1] / breaks[0]; - breaks[1] -= r * 0.0028571428571428571; - s[1] -= r * s[0]; - for (k = 0; k < 698; k++) - { - r = dx[k + 2] / breaks[k + 1]; - breaks[k + 2] -= r * dx[k]; - s[k + 2] -= r * s[k + 1]; - } - r = 0.0028571428571428914 / breaks[699]; - breaks[700] -= r * dx[698]; - s[700] -= r * s[699]; - s[700] /= breaks[700]; - for (k = 698; k >= 0; k--) - s[k + 1] = (s[k + 1] - dx[k] * s[k + 2]) / breaks[k + 1]; - s[0] = (s[0] - 0.0028571428571428571 * s[1]) / breaks[0]; - for (k = 0; k < 701; k++) - breaks[k] = 0.0014285714285714286 * (double)k; - for (k = 0; k < 700; k++) - { - r = 1.0 / dx[k]; - dzzdx = (dvdf[k] - s[k]) * r; - dzdxdx = (s[k + 1] - dvdf[k]) * r; - coefs[k] = (dzdxdx - dzzdx) * r; - coefs[k + 700] = 2.0 * dzzdx - dzdxdx; - coefs[k + 1400] = s[k]; - coefs[k + 2100] = y[k]; - } - double d = 1.0 / 22437.0; - int low_i, low_ip1, high_i, mid_i; - for (k = 0; k < 22438; k++) - { - low_i = 0; - low_ip1 = 2; - high_i = 701; - r = k * d; - while (high_i > low_ip1) - { - mid_i = ((low_i + high_i) + 1) >> 1; - if (r >= breaks[mid_i - 1]) - { - low_i = mid_i - 1; - low_ip1 = mid_i + 1; - } - else - high_i = mid_i; - } - double xloc = r - breaks[low_i]; - yi[k] = (float)(xloc * (xloc * (xloc * coefs[low_i] + coefs[low_i + 700]) + coefs[low_i + 1400]) + coefs[low_i + 2100]); - } -} -#include "numericSys/libsamplerate/samplerate.h" -void JamesDSPOfflineResampling(float const *in, float *out, size_t lenIn, size_t lenOut, int channels, double src_ratio) -{ - if (lenOut == lenIn && lenIn == 1) - { - memcpy(out, in, channels * sizeof(float)); - return; - } - SRC_DATA src_data; - memset(&src_data, 0, sizeof(src_data)); - src_data.data_in = in; - src_data.data_out = out; - src_data.input_frames = (long)lenIn; - src_data.output_frames = (long)lenOut; - src_data.src_ratio = src_ratio; - int error; - if ((error = src_simple(&src_data, 0, channels))) - { - printf("\n%s\n\n", src_strerror(error)); - } -} -float *decompressedCoefficients = 0; -#define DR_FLAC_IMPLEMENTATION -#include "dr_flac.h" -#define DR_WAV_IMPLEMENTATION -#include "dr_wav.h" -static float NSEEL_CGEN_CALL _eel_flacDecodeFile(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - const char *filename = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - uint32_t channels, fs; - uint64_t frameCount; - float *signal = drflac_open_file_and_read_pcm_frames_f32(filename, &channels, &fs, &frameCount, 0); - float targetFs = *parms[2]; - if (targetFs > FLT_EPSILON) - { - double ratio = targetFs / (double)fs; - if (ratio != 1.0) - { - int compressedLen = (int)ceil(frameCount * ratio); - float *tmpBuf = (float*)malloc(compressedLen * channels * sizeof(float)); - memset(tmpBuf, 0, compressedLen * channels * sizeof(float)); - JamesDSPOfflineResampling(signal, tmpBuf, frameCount, compressedLen, channels, ratio); - frameCount = compressedLen; - free(signal); - signal = tmpBuf; - } - } - else - *parms[2] = (float)fs; - uint32_t channel1BasePointer = (uint32_t)(*parms[4] + NSEEL_CLOSEFACTOR); - frameCount = (frameCount + channel1BasePointer) > NSEEL_RAM_ITEMSPERBLOCK ? (NSEEL_RAM_ITEMSPERBLOCK - channel1BasePointer) : frameCount; - *parms[1] = (float)channels; - *parms[3] = (float)frameCount; - if ((num_param - 4) < (int32_t)channels) - { - free(signal); - return -1; - } - float **ptr = (float**)malloc(channels * sizeof(float*)); - ptr[0] = __NSEEL_RAMAlloc(blocks, (uint64_t)channel1BasePointer); - uint64_t pointer = channel1BasePointer; - uint64_t count = pointer; - int resetCnt = 0; - for (uint32_t i = 1; i < channels; i++) - { - if (count + frameCount * 2 < NSEEL_RAM_ITEMSPERBLOCK) - { - pointer += frameCount; - count = pointer; - resetCnt++; - } - else - { - pointer = NSEEL_RAM_ITEMSPERBLOCK * resetCnt; - count = 0; - } - *parms[i + 4] = (float)pointer; - ptr[i] = __NSEEL_RAMAlloc(blocks, (uint64_t)pointer); - } - channel_split(signal, frameCount, ptr, channels); - free(signal); - free(ptr); - return 1; -} -static float NSEEL_CGEN_CALL _eel_flacDecodeMemory(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - const char *base64String = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - size_t actualSize; - unsigned char *memoryBlk = base64_decode((const unsigned char*)base64String, strlen(base64String), &actualSize); - uint32_t channels, fs; - uint64_t frameCount; - float *signal = drflac_open_memory_and_read_pcm_frames_f32(memoryBlk, actualSize, &channels, &fs, &frameCount, 0); - float targetFs = *parms[2]; - if (targetFs > FLT_EPSILON) - { - double ratio = targetFs / (double)fs; - if (ratio != 1.0) - { - int compressedLen = (int)ceil(frameCount * ratio); - float *tmpBuf = (float*)malloc(compressedLen * channels * sizeof(float)); - memset(tmpBuf, 0, compressedLen * channels * sizeof(float)); - JamesDSPOfflineResampling(signal, tmpBuf, frameCount, compressedLen, channels, ratio); - frameCount = compressedLen; - free(signal); - signal = tmpBuf; - } - } - else - *parms[2] = (float)fs; - free(memoryBlk); - uint32_t channel1BasePointer = (uint32_t)(*parms[4] + NSEEL_CLOSEFACTOR); - frameCount = (frameCount + channel1BasePointer) > NSEEL_RAM_ITEMSPERBLOCK ? (NSEEL_RAM_ITEMSPERBLOCK - channel1BasePointer) : frameCount; - *parms[1] = (float)channels; - *parms[3] = (float)frameCount; - if ((num_param - 4) < (int32_t)channels) - { - free(signal); - return -1; - } - float **ptr = (float**)malloc(channels * sizeof(float*)); - ptr[0] = __NSEEL_RAMAlloc(blocks, (uint64_t)channel1BasePointer); - uint64_t pointer = channel1BasePointer; - uint64_t count = pointer; - int resetCnt = 0; - for (uint32_t i = 1; i < channels; i++) - { - if (count + frameCount * 2 < NSEEL_RAM_ITEMSPERBLOCK) - { - pointer += frameCount; - count = pointer; - resetCnt++; - } - else - { - pointer = NSEEL_RAM_ITEMSPERBLOCK * resetCnt; - count = 0; - } - *parms[i + 4] = (float)pointer; - ptr[i] = __NSEEL_RAMAlloc(blocks, (uint64_t)pointer); - } - channel_split(signal, frameCount, ptr, channels); - free(signal); - free(ptr); - return 1; -} -static float NSEEL_CGEN_CALL _eel_wavDecodeFile(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - const char *filename = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - uint32_t channels, fs; - uint64_t frameCount; - float *signal = drwav_open_file_and_read_pcm_frames_f32(filename, &channels, &fs, &frameCount, 0); - float targetFs = *parms[2]; - if (targetFs > FLT_EPSILON) - { - double ratio = targetFs / (double)fs; - if (ratio != 1.0) - { - int compressedLen = (int)ceil(frameCount * ratio); - float *tmpBuf = (float*)malloc(compressedLen * channels * sizeof(float)); - memset(tmpBuf, 0, compressedLen * channels * sizeof(float)); - JamesDSPOfflineResampling(signal, tmpBuf, frameCount, compressedLen, channels, ratio); - frameCount = compressedLen; - free(signal); - signal = tmpBuf; - } - } - else - *parms[2] = (float)fs; - uint32_t channel1BasePointer = (uint32_t)(*parms[4] + NSEEL_CLOSEFACTOR); - frameCount = (frameCount + channel1BasePointer) > NSEEL_RAM_ITEMSPERBLOCK ? (NSEEL_RAM_ITEMSPERBLOCK - channel1BasePointer) : frameCount; - *parms[1] = (float)channels; - *parms[3] = (float)frameCount; - if ((num_param - 4) < (int32_t)channels) - { - free(signal); - return -1; - } - float **ptr = (float**)malloc(channels * sizeof(float*)); - ptr[0] = __NSEEL_RAMAlloc(blocks, (uint64_t)channel1BasePointer); - uint64_t pointer = channel1BasePointer; - uint64_t count = pointer; - int resetCnt = 0; - for (uint32_t i = 1; i < channels; i++) - { - if (count + frameCount * 2 < NSEEL_RAM_ITEMSPERBLOCK) - { - pointer += frameCount; - count = pointer; - resetCnt++; - } - else - { - pointer = NSEEL_RAM_ITEMSPERBLOCK * resetCnt; - count = 0; - } - *parms[i + 4] = (float)pointer; - ptr[i] = __NSEEL_RAMAlloc(blocks, (uint64_t)pointer); - } - channel_split(signal, frameCount, ptr, channels); - free(signal); - free(ptr); - return 1; -} -static float NSEEL_CGEN_CALL _eel_wavDecodeMemory(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - const char *base64String = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - size_t actualSize; - unsigned char *memoryBlk = base64_decode((const unsigned char*)base64String, strlen(base64String), &actualSize); - uint32_t channels, fs; - uint64_t frameCount; - float *signal = drwav_open_memory_and_read_pcm_frames_f32(memoryBlk, actualSize, &channels, &fs, &frameCount, 0); - float targetFs = *parms[2]; - if (targetFs > FLT_EPSILON) - { - double ratio = targetFs / (double)fs; - if (ratio != 1.0) - { - int compressedLen = (int)ceil(frameCount * ratio); - float *tmpBuf = (float*)malloc(compressedLen * channels * sizeof(float)); - memset(tmpBuf, 0, compressedLen * channels * sizeof(float)); - JamesDSPOfflineResampling(signal, tmpBuf, frameCount, compressedLen, channels, ratio); - frameCount = compressedLen; - free(signal); - signal = tmpBuf; - } - } - else - *parms[2] = (float)fs; - free(memoryBlk); - uint32_t channel1BasePointer = (uint32_t)(*parms[4] + NSEEL_CLOSEFACTOR); - frameCount = (frameCount + channel1BasePointer) > NSEEL_RAM_ITEMSPERBLOCK ? (NSEEL_RAM_ITEMSPERBLOCK - channel1BasePointer) : frameCount; - *parms[1] = (float)channels; - *parms[3] = (float)frameCount; - if ((num_param - 4) < (int32_t)channels) - { - free(signal); - return -1; - } - float **ptr = (float**)malloc(channels * sizeof(float*)); - ptr[0] = __NSEEL_RAMAlloc(blocks, (uint64_t)channel1BasePointer); - uint64_t pointer = channel1BasePointer; - uint64_t count = pointer; - int resetCnt = 0; - for (uint32_t i = 1; i < channels; i++) - { - if (count + frameCount * 2 < NSEEL_RAM_ITEMSPERBLOCK) - { - pointer += frameCount; - count = pointer; - resetCnt++; - } - else - { - pointer = NSEEL_RAM_ITEMSPERBLOCK * resetCnt; - count = 0; - } - *parms[i + 4] = (float)pointer; - ptr[i] = __NSEEL_RAMAlloc(blocks, (uint64_t)pointer); - } - channel_split(signal, frameCount, ptr, channels); - free(signal); - free(ptr); - return 1; -} -unsigned int peakfinder(unsigned int elements, const float *input, float sel, unsigned int extrema, float *peakInds) -{ - unsigned int i, j, k, foundPeak; - unsigned int eleMinus1 = elements - 1; - unsigned int eleMinus2 = elements - 2; - float work, minMag, leftMin, tempMag; - unsigned int *ind = (unsigned int*)malloc((eleMinus2 < 4 ? 4 : eleMinus2) * sizeof(unsigned int)); - float *b_x = (float*)malloc((eleMinus1 < 4 ? 4 : eleMinus1) * sizeof(float)); - unsigned int *peakLoc = (unsigned int*)malloc((eleMinus2 < 4 ? 4 : eleMinus2) * sizeof(unsigned int)); - // Adjust threshold according to extrema - i = 1; - k = 0; - if (extrema) - { - work = input[0]; - for (j = 0; j < eleMinus1; j++) - { - minMag = work; - work = input[i]; - b_x[k] = input[i] - minMag; - i++; - k++; - } - } - else - { - work = -input[0]; - for (j = 0; j < eleMinus1; j++) - { - minMag = work; - work = -input[i]; - b_x[k] = -input[i] - minMag; - i++; - k++; - } - } - // Find derivative - for (i = 0; i < eleMinus1; i++) - { - if (b_x[i] == 0.0f) - b_x[i] = -DBL_EPSILON; - } - i = 0; - j = 0; - while (j < eleMinus2) - { - if (b_x[j] * b_x[j + 1] < 0.0f)// This is so we find the first of repeated values - { - i++; - ind[i] = j + 1; - if (i >= eleMinus2) - break; - else - j++; - } - else - j++; - } - ind[0] = 0; - ind[i + 1] = elements - 1; - // Find where the derivative changes sign - // Include endpoints in potential peaks and valleys as desired - unsigned int indSize = i + 2; - if (extrema) - { - b_x[0] = input[0]; - for (j = 0; j < indSize - 1; j++) - b_x[j + 1] = input[ind[j + 1]]; - b_x[indSize + 1] = input[eleMinus1]; - } - else - { - b_x[0] = -input[0]; - for (j = 0; j < indSize - 1; j++) - b_x[j + 1] = -input[ind[j + 1]]; - b_x[indSize + 1] = -input[eleMinus1]; - } - if (indSize <= 2) - { - if (b_x[0] > b_x[1]) - minMag = b_x[1]; - else - minMag = b_x[0]; - } - else - { - minMag = b_x[0]; - for (k = 2; k <= indSize; k++) - { - work = b_x[k - 1]; - if (minMag > work) - minMag = work; - } - } - leftMin = minMag; - // x only has the peaks, valleys, and possibly endpoints - if (indSize > 2) - { - // Function with peaks and valleys, set initial parameters for loop - tempMag = minMag; - foundPeak = 0; - // Skip the first point if it is smaller so we always start on a maxima - if (b_x[0] >= b_x[1]) - j = -1; - else - j = 0; - k = 0; - i = 1; - // Loop through extrema which should be peaks and then valleys - while (j + 1 < indSize) - { - j += 2; - // This is a peak - // Reset peak finding if we had a peak and the next peak is bigger - // than the last or the left min was small enough to reset. - if (foundPeak) - { - tempMag = minMag; - foundPeak = 0; - } - // Found new peak that was lager than temp mag and selectivity larger - // than the minimum to its left. - work = b_x[j - 1]; - if ((work > tempMag) && (work > leftMin + sel)) - { - i = j; - tempMag = work; - } - // Make sure we don't iterate past the length of our vector - if (j == indSize) - break; - else - { - // Move onto the valley, come down at least sel from peak - if (tempMag > sel + b_x[j]) - { - foundPeak = 1; - // We have found a peak - leftMin = b_x[j]; - peakLoc[k] = i; - k++; - } - else - { - if (b_x[j] < leftMin) // New left minima - leftMin = b_x[j]; - } - } - } - // Check end point - if ((b_x[indSize - 1] > tempMag) && (b_x[indSize - 1] > leftMin + sel)) - { - peakLoc[k] = indSize; - k++; - } - else - { - if ((!foundPeak) && (tempMag > minMag)) - { - // Check if we still need to add the last point - peakLoc[k] = i; - k++; - } - } - // Create output - if (k + 1 > 1) - { - for (j = 0; j < k; j++) - peakInds[j] = (float)ind[peakLoc[j] - 1]; - } - } - else - { - // This is a monotone function where an endpoint is the only peak - if (b_x[0] < b_x[1]) - { - work = b_x[1]; - i = 1; - } - else - { - work = b_x[0]; - i = 0; - } - if (work > minMag + sel) - { - peakInds[0] = (float)ind[i]; - k = 1; - } - } - free(ind); - free(b_x); - free(peakLoc); - return k; -} -static float NSEEL_CGEN_CALL _eel_peakFinder(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - float *input = __NSEEL_RAMAlloc(c->ram_state, (uint32_t)(*parms[0] + NSEEL_CLOSEFACTOR)); - float *output = __NSEEL_RAMAlloc(c->ram_state, (uint32_t)(*parms[4] + NSEEL_CLOSEFACTOR)); - uint32_t n = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - float sel = *parms[2]; - uint32_t maximaMinima = (uint32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - return (float)peakfinder(n, input, sel, maximaMinima, output); -} -static float NSEEL_CGEN_CALL _eel_writeWavFile(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - const char *filename = (const char*)GetStringForIndex(c->m_string_context, *parms[0], 0); - uint32_t channels = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - uint32_t fs = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - uint64_t frameCount = (uint64_t)(*parms[3] + NSEEL_CLOSEFACTOR); - if ((num_param - 4) < (int32_t)channels) - return -1; - float *signal = (float*)malloc((size_t)(channels * frameCount * sizeof(float))); - float **ptr = (float**)malloc(channels * sizeof(float*)); - for (uint32_t i = 0; i < channels; i++) - ptr[i] = __NSEEL_RAMAlloc(blocks, (uint64_t)(uint32_t)(*parms[i + 4] + NSEEL_CLOSEFACTOR)); - channel_join(ptr, channels, signal, frameCount); - drwav pWav; - drwav_data_format format; - format.container = drwav_container_riff; - format.format = DR_WAVE_FORMAT_IEEE_FLOAT; - format.channels = channels; - format.sampleRate = fs; - format.bitsPerSample = 32; - uint32_t fail = drwav_init_file_write(&pWav, filename, &format, 0); - drwav_uint64 framesWritten = drwav_write_pcm_frames(&pWav, frameCount, signal); - drwav_uninit(&pWav); - free(signal); - free(ptr); - return 1; -} -static float NSEEL_CGEN_CALL _eel_writeWavMemory(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - s_str *dest = (s_str*)GetStringForIndex(c->m_string_context, *parms[0], 1); - uint32_t channels = (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR); - uint32_t fs = (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - uint64_t frameCount = (uint64_t)(*parms[3] + NSEEL_CLOSEFACTOR); - if ((num_param - 4) < (int32_t)channels) - return -1; - float *signal = (float*)malloc((size_t)(channels * frameCount * sizeof(float))); - float **ptr = (float**)malloc(channels * sizeof(float*)); - for (uint32_t i = 0; i < channels; i++) - ptr[i] = __NSEEL_RAMAlloc(blocks, (uint64_t)(uint32_t)(*parms[i + 4] + NSEEL_CLOSEFACTOR)); - channel_join(ptr, channels, signal, frameCount); - free(ptr); - drwav pWav; - drwav_data_format format; - format.container = drwav_container_riff; - format.format = DR_WAVE_FORMAT_IEEE_FLOAT; - format.channels = channels; - format.sampleRate = fs; - format.bitsPerSample = 32; - size_t blkSize; - void *memoryBlk; - uint32_t fail = drwav_init_memory_write(&pWav, &memoryBlk, &blkSize, &format, 0); - drwav_uint64 framesWritten = drwav_write_pcm_frames(&pWav, frameCount, signal); - drwav_uninit(&pWav); - free(signal); - size_t outLen; - unsigned char *base64String = base64_encode((unsigned char*)memoryBlk, blkSize, &outLen); - free(memoryBlk); - if (dest) - s_str_destroy(dest); - *dest = s_str_create_from_c_str(base64String); - free(base64String); - return 1; -} -static float NSEEL_CGEN_CALL _eel_listSystemVariable(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *blocks = c->ram_state; - char badStr[128]; - stbsp_snprintf(badStr, 128, "Listing system variables\n"); - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - char isString[16]; - for (int i = 0; i < c->varTable_numBlocks; i++) - { - for (int j = 0; j < NSEEL_VARS_PER_BLOCK; j++) - { - char *valid = GetStringForIndex(c->m_string_context, c->varTable_Values[i][j], 1); - if (!valid) - strncpy(isString, "Is not string", 16); - else - strncpy(isString, "Could be string", 16); - if (c->varTable_Names[i][j]) - { - stbsp_snprintf(badStr, 128, "%s %1.18lf %s\n", c->varTable_Names[i][j], c->varTable_Values[i][j], isString); - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } - } - } - stbsp_snprintf(badStr, 128, "All variables has been printed\n"); - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - return 0; -} -static float NSEEL_CGEN_CALL _eel_linspace(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *vec = __NSEEL_RAMAlloc(c->ram_state, (uint32_t)(*parms[3] + NSEEL_CLOSEFACTOR)); - int32_t n = (int32_t)(*parms[2] + NSEEL_CLOSEFACTOR); - float d = (*parms[1] - *parms[0]) / (float)(n - 1); - for (int32_t i = 0; i < n; i++) - vec[i] = *parms[0] + i * d; - return 0; -} -size_t choose(float *a, float *b, size_t src1, size_t src2) -{ - return (*b >= *a) ? src2 : src1; -} -size_t fast_upper_bound4(float *vec, size_t n, float *value) -{ - size_t size = n; - size_t low = 0; - while (size >= 8) - { - size_t half = size / 2; - size_t other_half = size - half; - size_t probe = low + half; - size_t other_low = low + other_half; - size = half; - low = choose(&vec[probe], value, low, other_low); - - half = size / 2; - other_half = size - half; - probe = low + half; - other_low = low + other_half; - size = half; - low = choose(&vec[probe], value, low, other_low); - - half = size / 2; - other_half = size - half; - probe = low + half; - other_low = low + other_half; - size = half; - low = choose(&vec[probe], value, low, other_low); - } - while (size > 0) { - size_t half = size / 2; - size_t other_half = size - half; - size_t probe = low + half; - size_t other_low = low + other_half; - size = half; - low = choose(&vec[probe], value, low, other_low); - } - return low; -} -static float _eel_lerp(void *opaque, INT_PTR num_param, float **parms) -{ - compileContext *c = (compileContext*)opaque; - float *x = __NSEEL_RAMAlloc(c->ram_state, (uint32_t)(*parms[1] + NSEEL_CLOSEFACTOR)); - float *y = __NSEEL_RAMAlloc(c->ram_state, (uint32_t)(*parms[2] + NSEEL_CLOSEFACTOR)); - uint32_t pts = (uint32_t)(*parms[3] + NSEEL_CLOSEFACTOR); - if (*parms[0] == x[0]) - return y[0]; - if (*parms[0] == x[pts - 1]) - return y[pts - 1]; - size_t j = fast_upper_bound4(x, pts, parms[0]); - if (j <= 0) - return (*parms[0] - x[1]) / (x[0] - x[1]) * (y[0] - y[1]) + y[1]; // Extrapolation to leftmost - else if (j >= pts) - return (*parms[0] - x[pts - 2]) / (x[pts - 1] - x[pts - 2]) * (y[pts - 1] - y[pts - 2]) + y[pts - 2]; // Extrapolation to rightmost - else - return (*parms[0] - x[j - 1]) / (x[j] - x[j - 1]) * (y[j] - y[j - 1]) + y[j - 1]; // Interpolation -} -#define redirect(x) static float redirect_##x(float _input1){return x(_input1); } -#define redirect2(x) static float redirect_##x(float _input1, float _input2){return x(_input1, _input2); } -redirect(sinf); -redirect(cosf); -redirect(tanf); -redirect(asinf); -redirect(acosf); -redirect(atanf); -redirect2(atan2f); -redirect(asinhf); -redirect(acoshf); -redirect(coshf); -redirect(sinhf); -redirect(sqrtf); -redirect(tanhf); -redirect(atanhf) -redirect(logf) -redirect(log10f) -redirect2(hypotf) -redirect2(powf) -redirect(expf) -redirect(roundf) -redirect(floorf) -redirect(ceilf) -static functionType fnTable1[] = { - { "sin", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sinf} }, - { "cos", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_cosf} }, - { "tan", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_tanf} }, - { "sqrt", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sqrtf}, }, - { "asin", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_asinf}, }, - { "acos", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_acosf}, }, - { "atan", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_atanf}, }, - { "atan2", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_atan2f}, }, - { "sinh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL, {(void**)&redirect_sinhf} }, - { "cosh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_coshf} }, - { "tanh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_tanhf} }, - { "asinh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_asinhf}, }, - { "acosh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_acoshf}, }, - { "atanh", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_atanhf}, }, - { "log", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_logf} }, - { "log10", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_log10f} }, - { "hypot", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_hypotf}, }, - { "pow", nseel_asm_2pdd,nseel_asm_2pdd_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK, {(void**)&redirect_powf}, }, - { "exp", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&redirect_expf}, }, - { "abs", nseel_asm_abs,nseel_asm_abs_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(0) | BIF_WONTMAKEDENORMAL }, - { "sqr", nseel_asm_sqr,nseel_asm_sqr_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(1) }, - { "min", nseel_asm_min,nseel_asm_min_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_FPSTACKUSE(3) | BIF_WONTMAKEDENORMAL }, - { "max", nseel_asm_max,nseel_asm_max_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_FPSTACKUSE(3) | BIF_WONTMAKEDENORMAL }, - { "sign", nseel_asm_sign,nseel_asm_sign_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL, }, - { "rand", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&nseel_int_rand}, }, - { "round", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_roundf} }, - { "floor", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_floorf} }, - { "ceil", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&redirect_ceilf} }, - { "expint", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&expint} }, - { "expintFast",nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL, {(void**)&expint_interpolation} }, - { "invsqrt",nseel_asm_1pdd,nseel_asm_1pdd_end,1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(3), {(void**)&invsqrt} }, - { "invsqrtFast",nseel_asm_invsqrt,nseel_asm_invsqrt_end,1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(3), }, - { "circshift",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&__NSEEL_circshift},NSEEL_PProc_RAM}, - { "convolve_c",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&eel_convolve_c},NSEEL_PProc_RAM}, - { "maxVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_max},NSEEL_PProc_RAM}, - { "minVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_min},NSEEL_PProc_RAM}, - { "meanVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_mean},NSEEL_PProc_RAM}, - { "medianVec",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&eel_median},NSEEL_PProc_RAM}, - { "fft",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft},NSEEL_PProc_RAM}, - { "ifft",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft},NSEEL_PProc_RAM}, - { "fft_real",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft_real},NSEEL_PProc_RAM}, - { "ifft_real",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft_real},NSEEL_PProc_RAM}, - { "fft_permute",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_fft_permute},NSEEL_PProc_RAM}, - { "fft_ipermute",_asm_generic2parm,_asm_generic2parm_end,2,{(void**)&eel_ifft_permute},NSEEL_PProc_RAM}, - {"memcpy",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&__NSEEL_RAM_MemCpy},NSEEL_PProc_RAM}, - {"memset",_asm_generic3parm,_asm_generic3parm_end,3,{(void**)&__NSEEL_RAM_MemSet},NSEEL_PProc_RAM}, - {"sleep",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK,{(void**)&_eel_sleep}}, - {"time",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK,{(void**)&_eel_time},NSEEL_PProc_THIS}, - {"time_precise",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK,{(void**)&_eel_time_precise},NSEEL_PProc_THIS}, - {"strlen",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_strlen},NSEEL_PProc_THIS}, - {"base64_encode",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void**)&_eel_base64_encode},NSEEL_PProc_THIS}, - {"base64_encodeF2F",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&_eel_base64_encodeBinaryToTextFile},NSEEL_PProc_THIS}, - {"base64_decode",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void**)&_eel_base64_decode},NSEEL_PProc_THIS}, - {"base64_decodeF2F",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&_eel_base64_decodeBinaryToTextFile},NSEEL_PProc_THIS}, - {"strcmp",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&_eel_strcmp},NSEEL_PProc_THIS}, - {"match",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_match},NSEEL_PProc_THIS}, - {"matchi",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_matchi},NSEEL_PProc_THIS}, - {"stricmp",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&_eel_stricmp},NSEEL_PProc_THIS}, - {"strncmp",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void**)&_eel_strncmp},NSEEL_PProc_THIS}, - {"strnicmp",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void**)&_eel_strnicmp},NSEEL_PProc_THIS}, - {"printf",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_printf},NSEEL_PProc_THIS}, - {"sprintf",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_sprintf},NSEEL_PProc_THIS}, - {"resetStringContainers",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_delete_all_strings},NSEEL_PProc_THIS}, - {"importFLTFromStr",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&_eel_importFloatArrayFromString},NSEEL_PProc_THIS}, - {"arburgCheckMemoryRequirement",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&arburgCheckMemoryRequirement},NSEEL_PProc_RAM}, - {"arburgTrainModel",_asm_generic2parm_retd,_asm_generic2parm_retd_end,5 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&arburgTrainModel},NSEEL_PProc_THIS}, - {"arburgGetPredictionReflectionCoeff",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&arburgGetPredictionReflectionCoeff},NSEEL_PProc_THIS}, - {"arburgPredictBackward",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&arburgPredictBackward},NSEEL_PProc_RAM}, - {"arburgPredictForward",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&arburgPredictForward},NSEEL_PProc_RAM}, - {"stftCheckMemoryRequirement",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftCheckMemoryRequirement},NSEEL_PProc_THIS}, - {"stftInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftInit},NSEEL_PProc_THIS}, - {"stftGetWindowPower",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftGetWindowPower},NSEEL_PProc_THIS}, - {"stftForward",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftForward},NSEEL_PProc_THIS}, - {"stftBackward",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&stftBackward},NSEEL_PProc_THIS}, - {"InitPinkNoise",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&pinkNoiseInit},NSEEL_PProc_THIS}, - {"GeneratePinkNoise",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&pinkNoiseGen},NSEEL_PProc_THIS}, - {"InitPolyphaseFilterbank",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankInit},NSEEL_PProc_THIS}, - {"PolyphaseFilterbankChangeWarpingFactor",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankChangeWarpingFactor},NSEEL_PProc_THIS}, - {"PolyphaseFilterbankGetPhaseCorrector",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankGetPhaseCorrector},NSEEL_PProc_THIS}, - {"PolyphaseFilterbankGetDecimationFactor",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankGetDecimationFactor},NSEEL_PProc_THIS}, - {"PolyphaseFilterbankAnalysisMono",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankAnalysisMono},NSEEL_PProc_THIS}, - {"PolyphaseFilterbankSynthesisMono",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankSynthesisMono},NSEEL_PProc_THIS}, - {"PolyphaseFilterbankAnalysisStereo",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankAnalysisStereo},NSEEL_PProc_THIS}, - {"PolyphaseFilterbankSynthesisStereo",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&PolyphaseFilterbankSynthesisStereo},NSEEL_PProc_THIS}, - {"FIRInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&FIRInit},NSEEL_PProc_RAM}, - {"FIRProcess",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void**)&FIRProcess},NSEEL_PProc_RAM}, - {"fractionalDelayLineInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&fractionalDelayLineInit},NSEEL_PProc_RAM}, - {"fractionalDelayLineClear",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&fractionalDelayLineClear},NSEEL_PProc_RAM}, - {"fractionalDelayLineSetDelay",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&fractionalDelayLineSetDelay},NSEEL_PProc_RAM}, - {"fractionalDelayLineProcess",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_RETURNSONSTACK,{(void**)&fractionalDelayLineProcess},NSEEL_PProc_RAM}, - {"linspace",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_linspace},NSEEL_PProc_THIS}, - {"rank",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void**)&_eel_matRank},NSEEL_PProc_RAM}, - {"det",_asm_generic3parm_retd,_asm_generic3parm_retd_end,3 | BIF_RETURNSONSTACK,{(void**)&_eel_matDeterminant},NSEEL_PProc_RAM}, - {"transpose",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_matTranspose},NSEEL_PProc_THIS}, - {"cholesky",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_cholesky},NSEEL_PProc_THIS}, - {"inv_chol",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_inv_chol},NSEEL_PProc_THIS}, - {"inv",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_matInv},NSEEL_PProc_THIS}, - {"pinv_svd",_asm_generic2parm_retd,_asm_generic2parm_retd_end,5 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_matPinv},NSEEL_PProc_THIS}, - {"pinv_fast",_asm_generic2parm_retd,_asm_generic2parm_retd_end,5 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_matPinvFast},NSEEL_PProc_THIS}, - {"mldivide",_asm_generic2parm_retd,_asm_generic2parm_retd_end,8 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_mldivide},NSEEL_PProc_THIS}, - {"mrdivide",_asm_generic2parm_retd,_asm_generic2parm_retd_end,8 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_mrdivide},NSEEL_PProc_THIS}, - {"quadprog",_asm_generic2parm_retd,_asm_generic2parm_retd_end,12 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_quadprog},NSEEL_PProc_THIS}, - {"lsqlin",_asm_generic2parm_retd,_asm_generic2parm_retd_end,13 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_lsqlin},NSEEL_PProc_THIS}, - {"firls",_asm_generic2parm_retd,_asm_generic2parm_retd_end,7 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_firls},NSEEL_PProc_THIS}, - {"eqnerror",_asm_generic2parm_retd,_asm_generic2parm_retd_end,10 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_eqnerror},NSEEL_PProc_THIS}, - {"unwrap",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_unwrap},NSEEL_PProc_THIS}, - {"zp2sos",_asm_generic2parm_retd,_asm_generic2parm_retd_end,7 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_zp2sos},NSEEL_PProc_THIS}, - {"tf2sos",_asm_generic2parm_retd,_asm_generic2parm_retd_end,6 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_tf2sos},NSEEL_PProc_THIS}, - {"roots",_asm_generic2parm_retd,_asm_generic2parm_retd_end,5 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_roots},NSEEL_PProc_THIS}, - {"cplxpair",_asm_generic2parm_retd,_asm_generic2parm_retd_end,5 | BIF_TAKES_VARPARM_EX | BIF_RETURNSONSTACK,{(void**)&_eel_cplxpair},NSEEL_PProc_THIS}, - {"IIRBandSplitterInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_iirBandSplitterInit},NSEEL_PProc_THIS}, - {"IIRBandSplitterClearState",_asm_generic1parm_retd,_asm_generic1parm_retd_end, 1 | BIF_RETURNSONSTACK,{(void**)&_eel_iirBandSplitterClearState},NSEEL_PProc_RAM}, - {"IIRBandSplitterProcess",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_iirBandSplitterProcess},NSEEL_PProc_THIS}, - {"Conv1DInit",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_initfftconv1d},NSEEL_PProc_THIS}, - {"Conv1DProcess",_asm_generic2parm_retd,_asm_generic2parm_retd_end,2 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_processfftconv1d},NSEEL_PProc_THIS}, - {"Conv1DFree",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_deletefftconv1d},NSEEL_PProc_THIS}, - {"decodeFLACFromFile",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_flacDecodeFile},NSEEL_PProc_THIS}, - {"decodeFLACFromMemory",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_flacDecodeMemory},NSEEL_PProc_THIS}, - {"decodeWavFromFile",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_wavDecodeFile},NSEEL_PProc_THIS}, - {"decodeWavFromMemory",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_wavDecodeMemory},NSEEL_PProc_THIS}, - {"writeWavToFile",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_writeWavFile},NSEEL_PProc_THIS}, - {"writeWavToBase64String",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_writeWavMemory},NSEEL_PProc_THIS}, - {"peakFinder",_asm_generic2parm_retd,_asm_generic2parm_retd_end,5 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_peakFinder},NSEEL_PProc_THIS }, - {"listSystemVariable",_asm_generic2parm_retd,_asm_generic2parm_retd_end,1 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_listSystemVariable},NSEEL_PProc_THIS }, - {"vectorizeAssignScalar",_asm_generic2parm_retd,_asm_generic2parm_retd_end,3 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_vectorizeAssignScalar},NSEEL_PProc_THIS }, - {"vectorizeAdd",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_vectorizeAdd},NSEEL_PProc_THIS }, - {"vectorizeMinus",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_vectorizeMinus},NSEEL_PProc_THIS }, - {"vectorizeMultiply",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_vectorizeMultiply},NSEEL_PProc_THIS }, - {"vectorizeDivide",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_vectorizeDivide},NSEEL_PProc_THIS }, - {"ls",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_ls},NSEEL_PProc_THIS }, - {"cd",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_cd},NSEEL_PProc_THIS }, - {"eval",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_eval},NSEEL_PProc_THIS }, - {"evalFile",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_evalFile},NSEEL_PProc_THIS }, - {"ThreadInit",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_initthread},NSEEL_PProc_THIS }, - {"ThreadCreate",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_createThread},NSEEL_PProc_THIS }, - {"ThreadJoin",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_joinThread},NSEEL_PProc_THIS }, - {"ThreadDelete",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_deletethread},NSEEL_PProc_THIS }, - {"ThreadMutexLock",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_lockThread},NSEEL_PProc_THIS }, - {"ThreadMutexUnlock",_asm_generic1parm_retd,_asm_generic1parm_retd_end,1 | BIF_RETURNSONSTACK,{(void**)&_eel_unlockThread},NSEEL_PProc_THIS }, - {"lerpAt",_asm_generic2parm_retd,_asm_generic2parm_retd_end,4 | BIF_TAKES_VARPARM | BIF_RETURNSONSTACK,{(void**)&_eel_lerp},NSEEL_PProc_THIS }, -}; -void printFunctions() -{ - char badStr[128]; - for (int i = 0; i < sizeof(fnTable1) / sizeof(fnTable1[0]); i++) - { - stbsp_snprintf(badStr, 128, "%s\n", fnTable1[i].name); - EEL_STRING_STDOUT_WRITE(badStr, strlen(badStr)); - } -} - -void NSEEL_start() -{ - // Global memory - if (decompressedCoefficients) - free(decompressedCoefficients); - decompressedCoefficients = (float*)malloc(22438 * sizeof(float)); - decompressResamplerMQ(compressedCoeffMQ, decompressedCoefficients); - initFFTData(); - srand((uint32_t)time(NULL)); -} -void NSEEL_quit() -{ - if (decompressedCoefficients) - free(decompressedCoefficients); - decompressedCoefficients = 0; -} -//--------------------------------------------------------------------------------------------------------------- -static void freeBlocks(llBlock **start) -{ - llBlock *s = *start; - *start = 0; - while (s) - { - llBlock *llB = s->next; - free(s); - s = llB; - } -} -//--------------------------------------------------------------------------------------------------------------- -static void *__newBlock(llBlock **start, int32_t size) -{ - llBlock *llb; - int32_t alloc_size; - if (*start && (LLB_DSIZE - (*start)->sizeused) >= size) - { - void *t = (*start)->block + (*start)->sizeused; - (*start)->sizeused += (size + 7)&~7; - return t; - } - alloc_size = sizeof(llBlock); - if ((int32_t)size > LLB_DSIZE) alloc_size += size - LLB_DSIZE; - llb = (llBlock *)malloc(alloc_size); // grab bigger block if absolutely necessary (heh) - if (!llb) return NULL; - llb->sizeused = (size + 7)&~7; - llb->next = *start; - *start = llb; - return llb->block; -} -//--------------------------------------------------------------------------------------------------------------- -opcodeRec *nseel_createCompiledValue(compileContext *ctx, float value) -{ - opcodeRec *r = newOpCode(ctx, NULL, OPCODETYPE_DIRECTVALUE); - if (r) - { - r->parms.dv.directValue = value; - } - return r; -} -opcodeRec *nseel_createCompiledValuePtr(compileContext *ctx, float *addrValue, const char *namestr) -{ - opcodeRec *r = newOpCode(ctx, namestr, OPCODETYPE_VARPTR); - if (!r) return 0; - r->parms.dv.valuePtr = addrValue; - return r; -} -static int32_t validate_varname_for_function(compileContext *ctx, const char *name) -{ - if (!ctx->function_curName || !ctx->function_globalFlag) return 1; - if (ctx->function_localTable_Size[2] > 0 && ctx->function_localTable_Names[2]) - { - char * const * const namelist = ctx->function_localTable_Names[2]; - const int32_t namelist_sz = ctx->function_localTable_Size[2]; - int32_t i; - const size_t name_len = strlen(name); - for (i = 0; i < namelist_sz; i++) - { - const char *nmchk = namelist[i]; - const size_t l = strlen(nmchk); - if (l > 1 && nmchk[l - 1] == '*') - { - if (name_len >= l && !strncmp(nmchk, name, l - 1) && name[l - 1] == '.') return 1; - } - else - { - if (name_len == l && !strcmp(nmchk, name)) return 1; - } - } - } - return 0; -} -opcodeRec *nseel_resolve_named_symbol(compileContext *ctx, opcodeRec *rec, int32_t parmcnt, int32_t *errOut) -{ - const int32_t isFunctionMode = parmcnt >= 0; - int32_t rel_prefix_len = 0; - int32_t rel_prefix_idx = -2; - int32_t i; - char match_parmcnt[4] = { -1,-1,-1,-1 }; // [3] is guess - unsigned char match_parmcnt_pos = 0; - char *sname = (char *)rec->relname; - const char *prevent_function_calls = NULL; - if (errOut) *errOut = 0; - if (rec->opcodeType != OPCODETYPE_VARPTR || !sname || !sname[0]) return NULL; - if (ctx->function_curName) - { - if (!strncmp(sname, "this.", 5)) - { - rel_prefix_len = 5; - rel_prefix_idx = -1; - } - else if (!strcmp(sname, "this")) - { - rel_prefix_len = 4; - rel_prefix_idx = -1; - } - // scan for parameters/local variables before user functions - if (rel_prefix_idx < -1 && ctx->function_localTable_Size[0] > 0 && ctx->function_localTable_Names[0] && ctx->function_localTable_ValuePtrs) - { - char * const * const namelist = ctx->function_localTable_Names[0]; - const int32_t namelist_sz = ctx->function_localTable_Size[0]; - for (i = 0; i < namelist_sz; i++) - { - const char *p = namelist[i]; - if (p) - { - if (!isFunctionMode && !strncmp(p, sname, NSEEL_MAX_VARIABLE_NAMELEN)) - { - rec->opcodeType = OPCODETYPE_VARPTRPTR; - rec->parms.dv.valuePtr = (float *)(ctx->function_localTable_ValuePtrs + i); - rec->parms.dv.directValue = 0.0f; - return rec; - } - else - { - const size_t plen = strlen(p); - if (plen > 1 && p[plen - 1] == '*' && !strncmp(p, sname, plen - 1) && ((sname[plen - 1] == '.'&&sname[plen]) || !sname[plen - 1])) - { - rel_prefix_len = (int32_t)(sname[plen - 1] ? plen : plen - 1); - rel_prefix_idx = i; - break; - } - } - } - } - } - // if instance name set, translate sname or sname.* into "this.sname.*" - if (rel_prefix_idx < -1 && ctx->function_localTable_Size[1] > 0 && ctx->function_localTable_Names[1]) - { - char * const * const namelist = ctx->function_localTable_Names[1]; - const int32_t namelist_sz = ctx->function_localTable_Size[1]; - const char *full_sname = rec->relname; // include # in checks - for (i = 0; i < namelist_sz; i++) - { - const char *p = namelist[i]; - if (p && *p) - { - const size_t tl = strlen(p); - if (!strncmp(p, full_sname, tl) && (full_sname[tl] == 0 || full_sname[tl] == '.')) - { - rel_prefix_len = 0; // treat as though this. prefixes is present - rel_prefix_idx = -1; - break; - } - } - } - } - if (rel_prefix_idx >= -1) - { - ctx->function_usesNamespaces = 1; - } - } // ctx->function_curName - if (!isFunctionMode) - { - // instance variables - if (rel_prefix_idx >= -1) - { - rec->opcodeType = OPCODETYPE_VALUE_FROM_NAMESPACENAME; - rec->namespaceidx = rel_prefix_idx; - if (rel_prefix_len > 0) - { - memmove(sname, sname + rel_prefix_len, strlen(sname + rel_prefix_len) + 1); - } - } - else - { - // no namespace index, so it must be a global - if (!validate_varname_for_function(ctx, rec->relname)) - { - if (errOut) *errOut = 1; - if (ctx->last_error_string[0]) lstrcatn(ctx->last_error_string, ", ", sizeof(ctx->last_error_string)); - snprintf_append(ctx->last_error_string, sizeof(ctx->last_error_string), "global '%s' inaccessible", rec->relname); - return NULL; - } - } - return rec; - } - if (ctx->func_check) - prevent_function_calls = ctx->func_check(sname, ctx->func_check_user); - ////////// function mode - // first off, while() and loop() are special and can't be overridden - // - if (parmcnt == 1 && !strcmp("while", sname) && !prevent_function_calls) - { - rec->opcodeType = OPCODETYPE_FUNC1; - rec->fntype = FN_WHILE; - return rec; - } - if (parmcnt == 2 && !strcmp("loop", sname) && !prevent_function_calls) - { - rec->opcodeType = OPCODETYPE_FUNC2; - rec->fntype = FN_LOOP; - return rec; - } - // - // resolve user function names before builtin functions -- this allows the user to override default functions - { - _codeHandleFunctionRec *best = NULL; - size_t bestlen = 0; - const char * const ourcall = sname + rel_prefix_len; - const size_t ourcall_len = strlen(ourcall); - int32_t pass; - for (pass = 0; pass < 2; pass++) - { - _codeHandleFunctionRec *fr = pass ? ctx->functions_common : ctx->functions_local; - // sname is [namespace.[ns.]]function, find best match of function that matches the right end - while (fr) - { - int32_t this_np = fr->num_params; - const char *thisfunc = fr->fname; - const size_t thisfunc_len = strlen(thisfunc); - if (this_np < 1) this_np = 1; - if (thisfunc_len == ourcall_len && !strcmp(thisfunc, ourcall)) - { - if (this_np == parmcnt) - { - bestlen = thisfunc_len; - best = fr; - break; // found exact match, finished - } - else - { - if (match_parmcnt_pos < 3) match_parmcnt[match_parmcnt_pos++] = fr->num_params; - } - } - if (thisfunc_len > bestlen && thisfunc_len < ourcall_len && ourcall[ourcall_len - thisfunc_len - 1] == '.' && !strcmp(thisfunc, ourcall + ourcall_len - thisfunc_len)) - { - if (this_np == parmcnt) - { - bestlen = thisfunc_len; - best = fr; - } - else - if (match_parmcnt[3] < 0) match_parmcnt[3] = fr->num_params; - } - fr = fr->next; - } - if (fr) break; // found exact match, finished - } - if (best) - { - switch (parmcnt) - { - case 0: - case 1: rec->opcodeType = OPCODETYPE_FUNC1; break; - case 2: rec->opcodeType = OPCODETYPE_FUNC2; break; - case 3: rec->opcodeType = OPCODETYPE_FUNC3; break; - default: rec->opcodeType = OPCODETYPE_FUNCX; break; - } - if (ourcall != rec->relname) memmove((char *)rec->relname, ourcall, strlen(ourcall) + 1); - if (ctx->function_curName && rel_prefix_idx < 0) - { - // if no namespace specified, and this.commonprefix.func() called, remove common prefixes and set prefixidx to be this - const char *p = ctx->function_curName; - if (*p) p++; - while (*p && *p != '.') p++; - if (*p && p[1]) // we have a dot! - { - while (p[1]) p++; // go to last char of string, which doesn't allow possible trailing dot to be checked - while (--p > ctx->function_curName) // do not check possible leading dot - { - if (*p == '.') - { - const size_t cmplen = p + 1 - ctx->function_curName; - if (!strncmp(rec->relname, ctx->function_curName, cmplen) && rec->relname[cmplen]) - { - const char *src = rec->relname + cmplen; - memmove((char *)rec->relname, src, strlen(src) + 1); - rel_prefix_idx = -1; - ctx->function_usesNamespaces = 1; - break; - } - } - } - } - } - if (ctx->function_curName && rel_prefix_idx < -1 && - strchr(rec->relname, '.') && !validate_varname_for_function(ctx, rec->relname)) - { - if (errOut) *errOut = 1; - if (ctx->last_error_string[0]) lstrcatn(ctx->last_error_string, ", ", sizeof(ctx->last_error_string)); - snprintf_append(ctx->last_error_string, sizeof(ctx->last_error_string), "namespaced function '%s' inaccessible", rec->relname); - return NULL; - } - rec->namespaceidx = rel_prefix_idx; - rec->fntype = FUNCTYPE_EELFUNC; - rec->fn = best; - return rec; - } - } - if (prevent_function_calls) - { - if (ctx->last_error_string[0]) lstrcatn(ctx->last_error_string, ", ", sizeof(ctx->last_error_string)); - snprintf_append(ctx->last_error_string, sizeof(ctx->last_error_string), "'%.30s': %s", sname, prevent_function_calls); - if (errOut) *errOut = 0; - return NULL; - } - // convert legacy pow() to FN_POW - if (!strcmp("pow", sname)) - { - if (parmcnt == 2) - { - rec->opcodeType = OPCODETYPE_FUNC2; - rec->fntype = FN_POW; - return rec; - } - if (match_parmcnt_pos < 3) match_parmcnt[match_parmcnt_pos++] = 2; - } - else if (!strcmp("__denormal_likely", sname) || !strcmp("__denormal_unlikely", sname)) - { - if (parmcnt == 1) - { - rec->opcodeType = OPCODETYPE_FUNC1; - rec->fntype = !strcmp("__denormal_likely", sname) ? FN_DENORMAL_LIKELY : FN_DENORMAL_UNLIKELY; - return rec; - } - } - for (i = 0; fnTable1 + i; i++) - { - if (i >= (int32_t)(sizeof(fnTable1) / sizeof(fnTable1[0]))) - break; - functionType *f = fnTable1 + i; - if (!strcmp(f->name, sname)) - { - const int32_t pc_needed = (f->nParams&FUNCTIONTYPE_PARAMETERCOUNTMASK); - if ((f->nParams&BIF_TAKES_VARPARM_EX) == BIF_TAKES_VARPARM ? (parmcnt >= pc_needed) : (parmcnt == pc_needed)) - { - rec->fntype = FUNCTYPE_FUNCTIONTYPEREC; - rec->fn = (void *)f; - switch (parmcnt) - { - case 0: - case 1: rec->opcodeType = OPCODETYPE_FUNC1; break; - case 2: rec->opcodeType = OPCODETYPE_FUNC2; break; - case 3: rec->opcodeType = OPCODETYPE_FUNC3; break; - default: rec->opcodeType = OPCODETYPE_FUNCX; break; - } - return rec; - } - if (match_parmcnt_pos < 3) match_parmcnt[match_parmcnt_pos++] = (f->nParams&FUNCTIONTYPE_PARAMETERCOUNTMASK); - } - } - if (ctx->last_error_string[0]) lstrcatn(ctx->last_error_string, ", ", sizeof(ctx->last_error_string)); - if (match_parmcnt[3] >= 0) - { - if (match_parmcnt_pos < 3) match_parmcnt[match_parmcnt_pos] = match_parmcnt[3]; - match_parmcnt_pos++; - } - if (!match_parmcnt_pos) - snprintf_append(ctx->last_error_string, sizeof(ctx->last_error_string), "'%.30s' undefined", sname); - else - { - int32_t x; - snprintf_append(ctx->last_error_string, sizeof(ctx->last_error_string), "'%.30s' needs ", sname); - for (x = 0; x < match_parmcnt_pos; x++) - snprintf_append(ctx->last_error_string, sizeof(ctx->last_error_string), "%s%d", x == 0 ? "" : x == match_parmcnt_pos - 1 ? " or " : ",", match_parmcnt[x]); - lstrcatn(ctx->last_error_string, " parms", sizeof(ctx->last_error_string)); - } - if (errOut) *errOut = match_parmcnt_pos > 0 ? parmcnt < match_parmcnt[0] ? 2 : (match_parmcnt[0] < 2 ? 4 : 1) : 0; - return NULL; -} -opcodeRec *nseel_setCompiledFunctionCallParameters(compileContext *ctx, opcodeRec *fn, opcodeRec *code1, opcodeRec *code2, opcodeRec *code3, opcodeRec *postCode, int32_t *errOut) -{ - opcodeRec *r; - int32_t np = 0, x; - if (!fn || fn->opcodeType != OPCODETYPE_VARPTR || !fn->relname || !fn->relname[0]) - { - return NULL; - } - fn->parms.parms[0] = code1; - fn->parms.parms[1] = code2; - fn->parms.parms[2] = code3; - for (x = 0; x < 3; x++) - { - opcodeRec *prni = fn->parms.parms[x]; - while (prni && np < NSEEL_MAX_EELFUNC_PARAMETERS) - { - const int32_t isMP = prni->opcodeType == OPCODETYPE_MOREPARAMS; - np++; - if (!isMP) break; - prni = prni->parms.parms[1]; - } - } - r = nseel_resolve_named_symbol(ctx, fn, np < 1 ? 1 : np, errOut); - if (postCode && r) - { - if (code1 && r->opcodeType == OPCODETYPE_FUNC1 && r->fntype == FN_WHILE) - { - // change while(x) (postcode) to be - // while ((x) ? (postcode;1) : 0); - r->parms.parms[0] = - nseel_createIfElse(ctx, r->parms.parms[0], - nseel_createSimpleCompiledFunction(ctx, FN_JOIN_STATEMENTS, 2, postCode, nseel_createCompiledValue(ctx, 1.0f)), - NULL); // NULL defaults to 0.0f - } - else - { - snprintf_append(ctx->last_error_string, sizeof(ctx->last_error_string), "syntax error following function"); - *errOut = -1; - return NULL; - } - } - return r; -} -eelStringSegmentRec *nseel_createStringSegmentRec(compileContext *ctx, const char *str, int32_t len) -{ - eelStringSegmentRec *r = newTmpBlock(ctx, sizeof(eelStringSegmentRec)); - if (r) - { - r->_next = 0; - r->str_start = str; - r->str_len = len; - } - return r; -} -opcodeRec *nseel_eelMakeOpcodeFromStringSegments(compileContext *ctx, eelStringSegmentRec *rec) -{ - if (ctx && ctx->onString) - { - return nseel_createCompiledValue(ctx, ctx->onString(ctx->caller_this, rec)); - } - return NULL; -} -opcodeRec *nseel_createMoreParametersOpcode(compileContext *ctx, opcodeRec *code1, opcodeRec *code2) -{ - opcodeRec *r = code1 && code2 ? newOpCode(ctx, NULL, OPCODETYPE_MOREPARAMS) : NULL; - if (r) - { - r->parms.parms[0] = code1; - r->parms.parms[1] = code2; - } - return r; -} -opcodeRec *nseel_createIfElse(compileContext *ctx, opcodeRec *code1, opcodeRec *code2, opcodeRec *code3) -{ - opcodeRec *r = code1 ? newOpCode(ctx, NULL, OPCODETYPE_FUNC3) : NULL; - if (r) - { - if (!code2) code2 = nseel_createCompiledValue(ctx, 0.0f); - if (!code3) code3 = nseel_createCompiledValue(ctx, 0.0f); - if (!code2 || !code3) return NULL; - r->fntype = FN_IF_ELSE; - r->parms.parms[0] = code1; - r->parms.parms[1] = code2; - r->parms.parms[2] = code3; - } - return r; -} -opcodeRec *nseel_createMemoryAccess(compileContext *ctx, opcodeRec *code1, opcodeRec *code2) -{ - if (code2 && (code2->opcodeType != OPCODETYPE_DIRECTVALUE || code2->parms.dv.directValue != 0.0f)) - { - code1 = nseel_createSimpleCompiledFunction(ctx, FN_ADD, 2, code1, code2); - } - return nseel_createSimpleCompiledFunction(ctx, FN_MEMORY, 1, code1, 0); -} -opcodeRec *nseel_createSimpleCompiledFunction(compileContext *ctx, int32_t fn, int32_t np, opcodeRec *code1, opcodeRec *code2) -{ - opcodeRec *r = code1 && (np < 2 || code2) ? newOpCode(ctx, NULL, np >= 2 ? OPCODETYPE_FUNC2 : OPCODETYPE_FUNC1) : NULL; - if (r) - { - r->fntype = fn; - r->parms.parms[0] = code1; - r->parms.parms[1] = code2; - if (fn == FN_JOIN_STATEMENTS) - { - r->fn = r; // for joins, fn is temporarily used for tail pointers - if (code1 && code1->opcodeType == OPCODETYPE_FUNC2 && code1->fntype == fn) - { - opcodeRec *t = (opcodeRec *)code1->fn; - // keep joins in the form of dosomething->morestuff. - // in this instance, code1 is previous stuff to do, code2 is new stuff to do - r->parms.parms[0] = t->parms.parms[1]; - code1->fn = (t->parms.parms[1] = r); - return code1; - } - } - } - return r; -} -// these are bitmasks; on request you can tell what is supported, and compileOpcodes will return one of them -#define RETURNVALUE_IGNORE 0 // ignore return value -#define RETURNVALUE_NORMAL 1 // pointer -#define RETURNVALUE_FPSTACK 2 -#define RETURNVALUE_BOOL 4 // P1 is nonzero if true -#define RETURNVALUE_BOOL_REVERSED 8 // P1 is zero if true -static int32_t compileOpcodes(compileContext *ctx, opcodeRec *op, unsigned char *bufOut, int32_t bufOut_len, int32_t *computTable, const namespaceInformation *namespacePathToThis, - int32_t supportedReturnValues, int32_t *rvType, int32_t *fpStackUsage, int32_t *canHaveDenormalOutput); -static unsigned char *compileCodeBlockWithRet(compileContext *ctx, opcodeRec *rec, int32_t *computTableSize, const namespaceInformation *namespacePathToThis, - int32_t supportedReturnValues, int32_t *rvType, int32_t *fpStackUse, int32_t *canHaveDenormalOutput); -_codeHandleFunctionRec *eel_createFunctionNamespacedInstance(compileContext *ctx, _codeHandleFunctionRec *fr, const char *nameptr) -{ - size_t n; - _codeHandleFunctionRec *subfr = - fr->isCommonFunction ? - ctx->isSharedFunctions ? newDataBlock(sizeof(_codeHandleFunctionRec), 8) : - newCtxDataBlock(sizeof(_codeHandleFunctionRec), 8) : // if common function, but derived version is in non-common context, set ownership to VM rather than us - newTmpBlock(ctx, sizeof(_codeHandleFunctionRec)); - if (!subfr) return 0; - // fr points to functionname()'s rec, nameptr to blah.functionname() - *subfr = *fr; - n = strlen(nameptr); - if (n > sizeof(subfr->fname) - 1) n = sizeof(subfr->fname) - 1; - memcpy(subfr->fname, nameptr, n); - subfr->fname[n] = 0; - subfr->next = NULL; - subfr->startptr = 0; // make sure this code gets recompiled (with correct member ptrs) for this instance! - // subfr->derivedCopies already points to the right place - fr->derivedCopies = subfr; - return subfr; -} -static void combineNamespaceFields(char *nm, const namespaceInformation *namespaceInfo, const char *relname, int32_t thisctx) // nm must be NSEEL_MAX_VARIABLE_NAMELEN+1 bytes -{ - const char *prefix = namespaceInfo ? - thisctx < 0 ? (thisctx == -1 ? namespaceInfo->namespacePathToThis : NULL) : (thisctx < MAX_SUB_NAMESPACES ? namespaceInfo->subParmInfo[thisctx] : NULL) - : NULL; - int32_t lfp = 0, lrn = relname ? (int32_t)strlen(relname) : 0; - if (prefix) while (prefix[lfp] && prefix[lfp] != ':' && lfp < NSEEL_MAX_VARIABLE_NAMELEN) lfp++; - if (!relname) relname = ""; - while (*relname == '.') // if relname begins with ., then remove a chunk of context from prefix - { - relname++; - while (lfp > 0 && prefix[lfp - 1] != '.') lfp--; - if (lfp > 0) lfp--; - } - if (lfp > NSEEL_MAX_VARIABLE_NAMELEN - 3) lfp = NSEEL_MAX_VARIABLE_NAMELEN - 3; - if (lfp > 0) memcpy(nm, prefix, lfp); - if (lrn > NSEEL_MAX_VARIABLE_NAMELEN - lfp - (lfp > 0)) lrn = NSEEL_MAX_VARIABLE_NAMELEN - lfp - (lfp > 0); - if (lrn > 0) - { - if (lfp > 0) nm[lfp++] = '.'; - memcpy(nm + lfp, relname, lrn); - lfp += lrn; - } - nm[lfp++] = 0; -} -//--------------------------------------------------------------------------------------------------------------- -static void *nseel_getBuiltinFunctionAddress(compileContext *ctx, - int32_t fntype, void *fn, - NSEEL_PPPROC *pProc, void ***replList, - void **endP, int32_t *abiInfo, int32_t preferredReturnValues, const float *hasConstParm1, const float *hasConstParm2) -{ - const float *firstConstParm = hasConstParm1 ? hasConstParm1 : hasConstParm2; - static void *pow_replptrs[4] = { (void**)&redirect_powf, }; - switch (fntype) - { -#define RF(x) *endP = nseel_asm_##x##_end; return (void*)nseel_asm_##x - case FN_MUL_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(mul_op); - case FN_DIV_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(div_op); - case FN_OR_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(or_op); - case FN_XOR_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(xor_op); - case FN_AND_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(and_op); - case FN_MOD_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(mod_op); - case FN_ADD_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(add_op); - case FN_SUB_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(sub_op); - case FN_POW_OP: - *abiInfo = BIF_LASTPARMONSTACK | BIF_CLEARDENORMAL; - *replList = pow_replptrs; - RF(2pdds); - case FN_POW: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK;//BIF_FPSTACKUSE(2) might be safe, need to look at pow()'s implementation, but safer bet is to disallow fp stack caching for this expression - *replList = pow_replptrs; - RF(2pdd); - case FN_ADD: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK_LAZY | BIF_FPSTACKUSE(2) | BIF_WONTMAKEDENORMAL; - // for x +- non-denormal-constant, we can set BIF_CLEARDENORMAL - if (firstConstParm && fabsf(*firstConstParm) > 1.0e-10) *abiInfo |= BIF_CLEARDENORMAL; - RF(add); - case FN_SUB: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK | BIF_FPSTACKUSE(2) | BIF_WONTMAKEDENORMAL; - // for x +- non-denormal-constant, we can set BIF_CLEARDENORMAL - if (firstConstParm && fabsf(*firstConstParm) > 1.0e-10) *abiInfo |= BIF_CLEARDENORMAL; - RF(sub); - case FN_MULTIPLY: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK_LAZY | BIF_FPSTACKUSE(2); - // for x*constant-greater-than-eq-1, we can set BIF_WONTMAKEDENORMAL - if (firstConstParm && fabsf(*firstConstParm) >= 1.0f) *abiInfo |= BIF_WONTMAKEDENORMAL; - RF(mul); - case FN_DIVIDE: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK | BIF_FPSTACKUSE(2); - // for x/constant-less-than-eq-1, we can set BIF_WONTMAKEDENORMAL - if (firstConstParm && fabsf(*firstConstParm) <= 1.0f) *abiInfo |= BIF_WONTMAKEDENORMAL; - RF(div); - case FN_MOD: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK | BIF_FPSTACKUSE(1) | BIF_CLEARDENORMAL; - RF(mod); - case FN_ASSIGN: - *abiInfo = BIF_FPSTACKUSE(1) | BIF_CLEARDENORMAL; - RF(assign); - case FN_AND: *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK_LAZY | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; RF(and); - case FN_OR: *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK_LAZY | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; RF(or ); - case FN_XOR: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK_LAZY | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(xor); - case FN_SHR: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(shr); - case FN_SHL: - *abiInfo = BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK | BIF_FPSTACKUSE(2) | BIF_CLEARDENORMAL; - RF(shl); - case FN_NOTNOT: *abiInfo = BIF_LASTPARM_ASBOOL | BIF_RETURNSBOOL | BIF_FPSTACKUSE(1); RF(bnotnot); - case FN_UMINUS: *abiInfo = BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_WONTMAKEDENORMAL; RF(uminus); - case FN_NOT: *abiInfo = BIF_LASTPARM_ASBOOL | BIF_RETURNSBOOL | BIF_FPSTACKUSE(1); RF(bnot); - case FN_EQ: - *abiInfo = BIF_TWOPARMSONFPSTACK_LAZY | BIF_RETURNSBOOL | BIF_FPSTACKUSE(2); - RF(equal); - case FN_EQ_EXACT: - *abiInfo = BIF_TWOPARMSONFPSTACK_LAZY | BIF_RETURNSBOOL | BIF_FPSTACKUSE(2); - RF(equal_exact); - case FN_NE: - *abiInfo = BIF_TWOPARMSONFPSTACK_LAZY | BIF_RETURNSBOOL | BIF_FPSTACKUSE(2); - RF(notequal); - case FN_NE_EXACT: - *abiInfo = BIF_TWOPARMSONFPSTACK_LAZY | BIF_RETURNSBOOL | BIF_FPSTACKUSE(2); - RF(notequal_exact); - case FN_LOGICAL_AND: - *abiInfo = BIF_RETURNSBOOL; - RF(band); - case FN_LOGICAL_OR: - *abiInfo = BIF_RETURNSBOOL; - RF(bor); -#ifdef GLUE_HAS_FXCH - case FN_GT: - *abiInfo = BIF_TWOPARMSONFPSTACK | BIF_RETURNSBOOL | BIF_FPSTACKUSE(2); - RF(above); - case FN_GTE: - *abiInfo = BIF_TWOPARMSONFPSTACK | BIF_RETURNSBOOL | BIF_REVERSEFPORDER | BIF_FPSTACKUSE(2); - RF(beloweq); - case FN_LT: - *abiInfo = BIF_TWOPARMSONFPSTACK | BIF_RETURNSBOOL | BIF_REVERSEFPORDER | BIF_FPSTACKUSE(2); - RF(above); - case FN_LTE: - *abiInfo = BIF_TWOPARMSONFPSTACK | BIF_RETURNSBOOL | BIF_FPSTACKUSE(2); - RF(beloweq); -#else - case FN_GT: - *abiInfo = BIF_RETURNSBOOL | BIF_LASTPARMONSTACK; - RF(above); - case FN_GTE: - *abiInfo = BIF_RETURNSBOOL | BIF_LASTPARMONSTACK; - RF(aboveeq); - case FN_LT: - *abiInfo = BIF_RETURNSBOOL | BIF_LASTPARMONSTACK; - RF(below); - case FN_LTE: - *abiInfo = BIF_RETURNSBOOL | BIF_LASTPARMONSTACK; - RF(beloweq); -#endif -#undef RF -#define RF(x) *endP = _asm_##x##_end; return (void*)_asm_##x - case FN_MEMORY: - { - //static void *replptrs[4] = { (void**)&__NSEEL_RAMAlloc, }; - //*replList = replptrs; - *abiInfo = BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(1) | BIF_CLEARDENORMAL; -//#ifdef GLUE_MEM_NEEDS_PPROC -// *pProc = NSEEL_PProc_RAM; -//#endif - RF(megabuf); - } - break; -#undef RF - case FUNCTYPE_FUNCTIONTYPEREC: - if (fn) - { - functionType *p = (functionType *)fn; - // if prefers fpstack or int32_t, or ignoring value, then use fp-stack versions - if ((preferredReturnValues&(RETURNVALUE_BOOL | RETURNVALUE_FPSTACK)) || !preferredReturnValues) - { - static functionType min2 = { "min", nseel_asm_min_fp,nseel_asm_min_fp_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK_LAZY | BIF_FPSTACKUSE(2) | BIF_WONTMAKEDENORMAL }; - static functionType max2 = { "max", nseel_asm_max_fp,nseel_asm_max_fp_end, 2 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_TWOPARMSONFPSTACK_LAZY | BIF_FPSTACKUSE(2) | BIF_WONTMAKEDENORMAL }; - if (p->afunc == (void*)nseel_asm_min) p = &min2; - else if (p->afunc == (void*)nseel_asm_max) p = &max2; - } - *replList = p->replptrs; - *pProc = p->pProc; - *endP = p->func_e; - *abiInfo = p->nParams & BIF_NPARAMS_MASK; - if (firstConstParm) - { - const char *name = p->name; - if (!strcmp(name, "min") && *firstConstParm < -1.0e-10) *abiInfo |= BIF_CLEARDENORMAL; - else if (!strcmp(name, "max") && *firstConstParm > 1.0e-10) *abiInfo |= BIF_CLEARDENORMAL; - } - return p->afunc; - } - break; - } - return 0; -} -static void *nseel_getEELFunctionAddress(compileContext *ctx, - opcodeRec *op, - int32_t *customFuncParmSize, int32_t *customFuncLocalStorageSize, - float ***customFuncLocalStorage, int32_t *computTableTop, - void **endP, int32_t *isRaw, int32_t wantCodeGenerated, - const namespaceInformation *namespacePathToThis, int32_t *rvMode, int32_t *fpStackUse, int32_t *canHaveDenormalOutput, - opcodeRec **ordered_parmptrs, int32_t num_ordered_parmptrs -) // if wantCodeGenerated is false, can return bogus pointers in raw mode -{ - _codeHandleFunctionRec *fn = (_codeHandleFunctionRec*)op->fn; - namespaceInformation local_namespace = { NULL }; - char prefix_buf[NSEEL_MAX_VARIABLE_NAMELEN + 1], nm[NSEEL_MAX_FUNCSIG_NAME + 1]; - if (!fn) return NULL; - // op->relname ptr is [whatever.]funcname - if (fn->parameterAsNamespaceMask || fn->usesNamespaces) - { - if (wantCodeGenerated) - { - char *p = prefix_buf; - combineNamespaceFields(nm, namespacePathToThis, op->relname, op->namespaceidx); - lstrcpyn_safe(prefix_buf, nm, sizeof(prefix_buf)); - local_namespace.namespacePathToThis = prefix_buf; - // nm is full path of function, prefix_buf will be the path not including function name (unless function name only) - while (*p) p++; - while (p >= prefix_buf && *p != '.') p--; - if (p > prefix_buf) *p = 0; - } - if (fn->parameterAsNamespaceMask) - { - int32_t x; - for (x = 0; x < MAX_SUB_NAMESPACES && x < fn->num_params; x++) - { - if (fn->parameterAsNamespaceMask & (((uint32_t)1) << x)) - { - if (wantCodeGenerated) - { - const char *rn = NULL; - char tmp[NSEEL_MAX_VARIABLE_NAMELEN + 1]; - if (x < num_ordered_parmptrs && ordered_parmptrs[x]) - { - if (ordered_parmptrs[x]->opcodeType == OPCODETYPE_VARPTR) - { - rn = ordered_parmptrs[x]->relname; - } - else if (ordered_parmptrs[x]->opcodeType == OPCODETYPE_VALUE_FROM_NAMESPACENAME) - { - const char *p = ordered_parmptrs[x]->relname; - if (*p == '#') p++; - combineNamespaceFields(tmp, namespacePathToThis, p, ordered_parmptrs[x]->namespaceidx); - rn = tmp; - } - } - if (!rn) - { - // todo: figure out how to give correct line number/offset (ugh) - stbsp_snprintf(ctx->last_error_string, sizeof(ctx->last_error_string), "parameter %d to %s() must be namespace", x + 1, fn->fname); - return NULL; - } - lstrcatn(nm, ":", sizeof(nm)); - local_namespace.subParmInfo[x] = nm + strlen(nm); - lstrcatn(nm, rn, sizeof(nm)); - } - ordered_parmptrs[x] = NULL; // prevent caller from bothering generating parameters - } - } - } - if (wantCodeGenerated) - { - _codeHandleFunctionRec *fr = fn; - // find namespace-adjusted function (if generating code, otherwise assume size is the same) - fn = 0; // if this gets re-set, it will be the new function - while (fr && !fn) - { - if (!strcmp(fr->fname, nm)) fn = fr; - fr = fr->derivedCopies; - } - if (!fn) // generate copy of function - { - fn = eel_createFunctionNamespacedInstance(ctx, (_codeHandleFunctionRec*)op->fn, nm); - } - } - } - if (!fn) return NULL; - if (!fn->startptr && fn->opcodes && fn->startptr_size > 0) - { - int32_t sz; - fn->tmpspace_req = 0; - fn->rvMode = RETURNVALUE_IGNORE; - fn->canHaveDenormalOutput = 0; - sz = compileOpcodes(ctx, fn->opcodes, NULL, 128 * 1024 * 1024, &fn->tmpspace_req, wantCodeGenerated ? &local_namespace : NULL, RETURNVALUE_NORMAL | RETURNVALUE_FPSTACK, &fn->rvMode, &fn->fpStackUsage, &fn->canHaveDenormalOutput); - if (!wantCodeGenerated) - { - // don't compile anything for now, just give stats - if (computTableTop) *computTableTop += fn->tmpspace_req; - *customFuncParmSize = fn->num_params; - *customFuncLocalStorage = fn->localstorage; - *customFuncLocalStorageSize = fn->localstorage_size; - *rvMode = fn->rvMode; - *fpStackUse = fn->fpStackUsage; - if (canHaveDenormalOutput) *canHaveDenormalOutput = fn->canHaveDenormalOutput; - if (sz <= NSEEL_MAX_FUNCTION_SIZE_FOR_INLINE && !(0 & OPTFLAG_NO_INLINEFUNC)) - { - *isRaw = 1; - *endP = ((char *)1) + sz; - return (char *)1; - } - *endP = (void*)nseel_asm_fcall_end; - return (void*)nseel_asm_fcall; - } - if (sz <= NSEEL_MAX_FUNCTION_SIZE_FOR_INLINE && !(0 & OPTFLAG_NO_INLINEFUNC)) - { - void *p = newTmpBlock(ctx, sz); - fn->tmpspace_req = 0; - if (p) - { - fn->canHaveDenormalOutput = 0; - if (fn->isCommonFunction) ctx->isGeneratingCommonFunction++; - sz = compileOpcodes(ctx, fn->opcodes, (unsigned char*)p, sz, &fn->tmpspace_req, &local_namespace, RETURNVALUE_NORMAL | RETURNVALUE_FPSTACK, &fn->rvMode, &fn->fpStackUsage, &fn->canHaveDenormalOutput); - if (fn->isCommonFunction) ctx->isGeneratingCommonFunction--; - // recompile function with native context pointers - if (sz > 0) - { - fn->startptr_size = sz; - fn->startptr = p; - } - } - } - else - { - unsigned char *codeCall; - fn->tmpspace_req = 0; - fn->fpStackUsage = 0; - fn->canHaveDenormalOutput = 0; - if (fn->isCommonFunction) ctx->isGeneratingCommonFunction++; - codeCall = compileCodeBlockWithRet(ctx, fn->opcodes, &fn->tmpspace_req, &local_namespace, RETURNVALUE_NORMAL | RETURNVALUE_FPSTACK, &fn->rvMode, &fn->fpStackUsage, &fn->canHaveDenormalOutput); - if (fn->isCommonFunction) ctx->isGeneratingCommonFunction--; - if (codeCall) - { - void *f = GLUE_realAddress(nseel_asm_fcall, nseel_asm_fcall_end, &sz); - fn->startptr = newTmpBlock(ctx, sz); - if (fn->startptr) - { - memcpy(fn->startptr, f, sz); - EEL_GLUE_set_immediate(fn->startptr, (INT_PTR)codeCall); - fn->startptr_size = sz; - } - } - } - } - if (fn->startptr) - { - if (computTableTop) *computTableTop += fn->tmpspace_req; - *customFuncParmSize = fn->num_params; - *customFuncLocalStorage = fn->localstorage; - *customFuncLocalStorageSize = fn->localstorage_size; - *rvMode = fn->rvMode; - *fpStackUse = fn->fpStackUsage; - if (canHaveDenormalOutput) *canHaveDenormalOutput = fn->canHaveDenormalOutput; - *endP = (char*)fn->startptr + fn->startptr_size; - *isRaw = 1; - return fn->startptr; - } - return 0; -} -// returns true if does something (other than calculating and throwing away a value) -static char optimizeOpcodes(compileContext *ctx, opcodeRec *op, int32_t needsResult) -{ - opcodeRec *lastJoinOp = NULL; - char retv, retv_parm[3], joined_retv = 0; - while (op && op->opcodeType == OPCODETYPE_FUNC2 && op->fntype == FN_JOIN_STATEMENTS) - { - if (!optimizeOpcodes(ctx, op->parms.parms[0], 0) || OPCODE_IS_TRIVIAL(op->parms.parms[0])) - { - // direct value, can skip ourselves - memcpy(op, op->parms.parms[1], sizeof(*op)); - } - else - { - joined_retv |= 1; - lastJoinOp = op; - op = op->parms.parms[1]; - } - } - goto start_over; -#define RESTART_DIRECTVALUE(X) { op->parms.dv.directValue = (X); goto start_over_directvalue; } -start_over_directvalue: - op->opcodeType = OPCODETYPE_DIRECTVALUE; - op->parms.dv.valuePtr = NULL; -start_over: // when an opcode changed substantially in optimization, goto here to reprocess it - retv = retv_parm[0] = retv_parm[1] = retv_parm[2] = 0; - if (!op || // should never really happen - OPCODE_IS_TRIVIAL(op) || // should happen often (vars) - op->opcodeType < 0 || op->opcodeType >= OPCODETYPE_INVALID // should never happen (assert would be appropriate heh) - ) return joined_retv; - if (!needsResult) - { - if (op->fntype == FUNCTYPE_EELFUNC) - { - needsResult = 1; // assume eel functions are non-const for now - } - else if (op->fntype == FUNCTYPE_FUNCTIONTYPEREC) - { - functionType *pfn = (functionType *)op->fn; - if (!pfn || !(pfn->nParams&NSEEL_NPARAMS_FLAG_CONST)) needsResult = 1; - } - else if (op->fntype >= FN_NONCONST_BEGIN && op->fntype < FUNCTYPE_SIMPLEMAX) - { - needsResult = 1; - } - } - if (op->opcodeType >= OPCODETYPE_FUNC2) retv_parm[1] = optimizeOpcodes(ctx, op->parms.parms[1], needsResult); - if (op->opcodeType >= OPCODETYPE_FUNC3) retv_parm[2] = optimizeOpcodes(ctx, op->parms.parms[2], needsResult); - retv_parm[0] = optimizeOpcodes(ctx, op->parms.parms[0], needsResult || - (FNPTR_HAS_CONDITIONAL_EXEC(op) && (retv_parm[1] || retv_parm[2] || op->opcodeType <= OPCODETYPE_FUNC1))); - if (op->opcodeType != OPCODETYPE_MOREPARAMS) - { - if (op->fntype >= 0 && op->fntype < FUNCTYPE_SIMPLEMAX) - { - if (op->opcodeType == OPCODETYPE_FUNC1) // within FUNCTYPE_SIMPLE - { - if (op->parms.parms[0]->opcodeType == OPCODETYPE_DIRECTVALUE) - { - switch (op->fntype) - { - case FN_NOTNOT: RESTART_DIRECTVALUE(fabsf(op->parms.parms[0]->parms.dv.directValue) >= NSEEL_CLOSEFACTOR ? 1.0f : 0.0f); - case FN_NOT: RESTART_DIRECTVALUE(fabsf(op->parms.parms[0]->parms.dv.directValue) >= NSEEL_CLOSEFACTOR ? 0.0f : 1.0f); - case FN_UMINUS: RESTART_DIRECTVALUE(-op->parms.parms[0]->parms.dv.directValue); - } - } - else if (op->fntype == FN_NOT || op->fntype == FN_NOTNOT) - { - if (op->parms.parms[0]->opcodeType == OPCODETYPE_FUNC1) - { - switch (op->parms.parms[0]->fntype) - { - case FN_UMINUS: - case FN_NOTNOT: // ignore any NOTNOTs UMINUS or UPLUS, they would have no effect anyway - op->parms.parms[0] = op->parms.parms[0]->parms.parms[0]; - goto start_over; - case FN_NOT: - op->fntype = op->fntype == FN_NOT ? FN_NOTNOT : FN_NOT; // switch between FN_NOT and FN_NOTNOT - op->parms.parms[0] = op->parms.parms[0]->parms.parms[0]; - goto start_over; - } - } - else if (op->parms.parms[0]->opcodeType == OPCODETYPE_FUNC2) - { - int32_t repl_type = -1; - switch (op->parms.parms[0]->fntype) - { - case FN_EQ: repl_type = FN_NE; break; - case FN_NE: repl_type = FN_EQ; break; - case FN_EQ_EXACT: repl_type = FN_NE_EXACT; break; - case FN_NE_EXACT: repl_type = FN_EQ_EXACT; break; - case FN_LT: repl_type = FN_GTE; break; - case FN_LTE: repl_type = FN_GT; break; - case FN_GT: repl_type = FN_LTE; break; - case FN_GTE: repl_type = FN_LT; break; - } - if (repl_type != -1) - { - const int32_t oldtype = op->fntype; - memcpy(op, op->parms.parms[0], sizeof(*op)); - if (oldtype == FN_NOT) op->fntype = repl_type; - goto start_over; - } - } - } - } - else if (op->opcodeType == OPCODETYPE_FUNC2) // within FUNCTYPE_SIMPLE - { - const int32_t dv0 = op->parms.parms[0]->opcodeType == OPCODETYPE_DIRECTVALUE; - const int32_t dv1 = op->parms.parms[1]->opcodeType == OPCODETYPE_DIRECTVALUE; - if (dv0 && dv1) - { - int32_t reval = -1; - switch (op->fntype) - { - case FN_MOD: - { - int32_t a = (int32_t)op->parms.parms[1]->parms.dv.directValue; - if (a) - { - a = (int32_t)op->parms.parms[0]->parms.dv.directValue % a; - if (a < 0) a = -a; - } - RESTART_DIRECTVALUE((float)a); - } - break; - case FN_SHL: RESTART_DIRECTVALUE(((int32_t)op->parms.parms[0]->parms.dv.directValue) << ((int32_t)op->parms.parms[1]->parms.dv.directValue)); - case FN_SHR: RESTART_DIRECTVALUE(((int32_t)op->parms.parms[0]->parms.dv.directValue) >> ((int32_t)op->parms.parms[1]->parms.dv.directValue)); - case FN_POW: RESTART_DIRECTVALUE(powf(op->parms.parms[0]->parms.dv.directValue, op->parms.parms[1]->parms.dv.directValue)); - case FN_DIVIDE: RESTART_DIRECTVALUE(op->parms.parms[0]->parms.dv.directValue / op->parms.parms[1]->parms.dv.directValue); - case FN_MULTIPLY: RESTART_DIRECTVALUE(op->parms.parms[0]->parms.dv.directValue * op->parms.parms[1]->parms.dv.directValue); - case FN_ADD: RESTART_DIRECTVALUE(op->parms.parms[0]->parms.dv.directValue + op->parms.parms[1]->parms.dv.directValue); - case FN_SUB: RESTART_DIRECTVALUE(op->parms.parms[0]->parms.dv.directValue - op->parms.parms[1]->parms.dv.directValue); - case FN_AND: RESTART_DIRECTVALUE((float)(((WDL_INT64)op->parms.parms[0]->parms.dv.directValue) & ((WDL_INT64)op->parms.parms[1]->parms.dv.directValue))); - case FN_OR: RESTART_DIRECTVALUE((float)(((WDL_INT64)op->parms.parms[0]->parms.dv.directValue) | ((WDL_INT64)op->parms.parms[1]->parms.dv.directValue))); - case FN_XOR: RESTART_DIRECTVALUE((float)(((WDL_INT64)op->parms.parms[0]->parms.dv.directValue) ^ ((WDL_INT64)op->parms.parms[1]->parms.dv.directValue))); - case FN_EQ: reval = fabsf(op->parms.parms[0]->parms.dv.directValue - op->parms.parms[1]->parms.dv.directValue) < NSEEL_CLOSEFACTOR; break; - case FN_NE: reval = fabsf(op->parms.parms[0]->parms.dv.directValue - op->parms.parms[1]->parms.dv.directValue) >= NSEEL_CLOSEFACTOR; break; - case FN_EQ_EXACT: reval = op->parms.parms[0]->parms.dv.directValue == op->parms.parms[1]->parms.dv.directValue; break; - case FN_NE_EXACT: reval = op->parms.parms[0]->parms.dv.directValue != op->parms.parms[1]->parms.dv.directValue; break; - case FN_LT: reval = op->parms.parms[0]->parms.dv.directValue < op->parms.parms[1]->parms.dv.directValue; break; - case FN_LTE: reval = op->parms.parms[0]->parms.dv.directValue <= op->parms.parms[1]->parms.dv.directValue; break; - case FN_GT: reval = op->parms.parms[0]->parms.dv.directValue > op->parms.parms[1]->parms.dv.directValue; break; - case FN_GTE: reval = op->parms.parms[0]->parms.dv.directValue >= op->parms.parms[1]->parms.dv.directValue; break; - case FN_LOGICAL_AND: reval = fabsf(op->parms.parms[0]->parms.dv.directValue) >= NSEEL_CLOSEFACTOR && fabsf(op->parms.parms[1]->parms.dv.directValue) >= NSEEL_CLOSEFACTOR; break; - case FN_LOGICAL_OR: reval = fabsf(op->parms.parms[0]->parms.dv.directValue) >= NSEEL_CLOSEFACTOR || fabsf(op->parms.parms[1]->parms.dv.directValue) >= NSEEL_CLOSEFACTOR; break; - } - if (reval >= 0) RESTART_DIRECTVALUE((float)reval); - } - else if (dv0 || dv1) - { - float dvalue = op->parms.parms[!dv0]->parms.dv.directValue; - switch (op->fntype) - { - case FN_OR: - case FN_XOR: - if (!(WDL_INT64)dvalue) - { - // replace with or0 - static functionType fr = { "or0",nseel_asm_or0, nseel_asm_or0_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_LASTPARMONSTACK | BIF_RETURNSONSTACK | BIF_CLEARDENORMAL, {0}, NULL }; - op->opcodeType = OPCODETYPE_FUNC1; - op->fntype = FUNCTYPE_FUNCTIONTYPEREC; - op->fn = &fr; - if (dv0) op->parms.parms[0] = op->parms.parms[1]; - goto start_over; - } - break; - case FN_SUB: - if (dv0) - { - if (dvalue == 0.0f) - { - op->opcodeType = OPCODETYPE_FUNC1; - op->fntype = FN_UMINUS; - op->parms.parms[0] = op->parms.parms[1]; - goto start_over; - } - break; - } - // fall through, if dv1 we can remove +0.0f - case FN_ADD: - if (dvalue == 0.0f) - { - memcpy(op, op->parms.parms[!!dv0], sizeof(*op)); - goto start_over; - } - break; - case FN_AND: - if ((WDL_INT64)dvalue) break; - dvalue = 0.0f; // treat x&0 as x*0, which optimizes to 0 - // fall through - case FN_MULTIPLY: - if (dvalue == 0.0f) // remove multiply by 0.0f (using 0.0f direct value as replacement), unless the nonzero side did something - { - if (!retv_parm[!!dv0]) - { - memcpy(op, op->parms.parms[!dv0], sizeof(*op)); // set to 0 if other action wouldn't do anything - goto start_over; - } - else - { - // this is 0.0f * oldexpressionthatmustbeprocessed or oldexpressionthatmustbeprocessed*0.0f - op->fntype = FN_JOIN_STATEMENTS; - if (dv0) // 0.0f*oldexpression, reverse the order so that 0 is returned - { - // set to (oldexpression;0) - opcodeRec *tmp = op->parms.parms[1]; - op->parms.parms[1] = op->parms.parms[0]; - op->parms.parms[0] = tmp; - } - goto start_over; - } - } - else if (dvalue == 1.0f) // remove multiply by 1.0f (using non-1.0f value as replacement) - { - memcpy(op, op->parms.parms[!!dv0], sizeof(*op)); - goto start_over; - } - break; - case FN_POW: - if (dv1) - { - // x^0 = 1 - if (fabsf(dvalue) < 1e-15f) - { - RESTART_DIRECTVALUE(1.0f); - } - // x^1 = x - if (fabsf(dvalue - 1.0f) < 1e-15f) - { - memcpy(op, op->parms.parms[0], sizeof(*op)); - goto start_over; - } - } - else if (dv0) - { - // pow(constant, x) = exp((x) * ln(constant)), if constant>0 - // opcodeRec *parm0 = op->parms.parms[0]; - if (dvalue > 0.0f) - { - static functionType expcpy = { "exp", nseel_asm_1pdd,nseel_asm_1pdd_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK, {(void**)&exp}, }; - // 1^x = 1 - if (fabsf(dvalue - 1.0f) < 1e-15f) - { - RESTART_DIRECTVALUE(1.0f); - } - dvalue = logf(dvalue); - if (fabsf(dvalue - 1.0f) < FLT_EPSILON) - { - // caller wanted e^x - op->parms.parms[0] = op->parms.parms[1]; - } - else - { - // it would be nice to replace 10^x with exp(log(10)*x) or 2^x with exp(log(2),x), but - // doing so breaks rounding. we could maybe only allow 10^x, which is used for dB conversion, - // but for now we should just force the programmer do it exp(log(10)*x) themselves. - break; - /* - parm0->opcodeType = OPCODETYPE_FUNC2; - parm0->fntype = FN_MULTIPLY; - parm0->parms.parms[0] = nseel_createCompiledValue(ctx,dvalue); - parm0->parms.parms[1] = op->parms.parms[1]; - */ - } - op->opcodeType = OPCODETYPE_FUNC1; - op->fntype = FUNCTYPE_FUNCTIONTYPEREC; - op->fn = &expcpy; - goto start_over; - } - } - break; - case FN_MOD: - if (dv1) - { - const int32_t a = (int32_t)dvalue; - if (!a) - { - RESTART_DIRECTVALUE(0.0f); - } - } - break; - case FN_DIVIDE: - if (dv1) - { - if (dvalue == 1.0f) // remove divide by 1.0f (using non-1.0f value as replacement) - { - memcpy(op, op->parms.parms[!!dv0], sizeof(*op)); - goto start_over; - } - else - { - // change to a multiply - if (dvalue == 0.0f) - { - op->fntype = FN_MULTIPLY; - goto start_over; - } - else - { - op->fntype = FN_MULTIPLY; - op->parms.parms[1]->parms.dv.directValue = 1.0f / dvalue; - op->parms.parms[1]->parms.dv.valuePtr = NULL; - goto start_over; - } - } - } - else if (dvalue == 0.0f) - { - if (!retv_parm[!!dv0]) - { - // if 0/x set to always 0. - // this is 0.0f / (oldexpression that can be eliminated) - memcpy(op, op->parms.parms[!dv0], sizeof(*op)); // set to 0 if other action wouldn't do anything - } - else - { - opcodeRec *tmp; - // this is 0.0f / oldexpressionthatmustbeprocessed - op->fntype = FN_JOIN_STATEMENTS; - tmp = op->parms.parms[1]; - op->parms.parms[1] = op->parms.parms[0]; - op->parms.parms[0] = tmp; - // set to (oldexpression;0) - } - goto start_over; - } - break; - case FN_EQ: - if (dvalue == 0.0f) - { - // convert x == 0.0f to !x - op->opcodeType = OPCODETYPE_FUNC1; - op->fntype = FN_NOT; - if (dv0) op->parms.parms[0] = op->parms.parms[1]; - goto start_over; - } - break; - case FN_NE: - if (dvalue == 0.0f) - { - // convert x != 0.0f to !! - op->opcodeType = OPCODETYPE_FUNC1; - op->fntype = FN_NOTNOT; - if (dv0) op->parms.parms[0] = op->parms.parms[1]; - goto start_over; - } - break; - case FN_LOGICAL_AND: - if (dv0) - { - // dvalue && expr - if (fabsf(dvalue) < NSEEL_CLOSEFACTOR) - { - // 0 && expr, replace with 0 - RESTART_DIRECTVALUE(0.0f); - } - else - { - // 1 && expr, replace with 0 != expr - op->fntype = FN_NE; - op->parms.parms[0]->parms.dv.valuePtr = NULL; - op->parms.parms[0]->parms.dv.directValue = 0.0f; - } - } - else - { - // expr && dvalue - if (fabsf(dvalue) < NSEEL_CLOSEFACTOR) - { - // expr && 0 - if (!retv_parm[0]) - { - // expr has no consequence, drop it - RESTART_DIRECTVALUE(0.0f); - } - else - { - // replace with (expr; 0) - op->fntype = FN_JOIN_STATEMENTS; - op->parms.parms[1]->parms.dv.valuePtr = NULL; - op->parms.parms[1]->parms.dv.directValue = 0.0f; - } - } - else - { - // expr && 1, replace with expr != 0 - op->fntype = FN_NE; - op->parms.parms[1]->parms.dv.valuePtr = NULL; - op->parms.parms[1]->parms.dv.directValue = 0.0f; - } - } - goto start_over; - case FN_LOGICAL_OR: - if (dv0) - { - // dvalue || expr - if (fabsf(dvalue) >= NSEEL_CLOSEFACTOR) - { - // 1 || expr, replace with 1 - RESTART_DIRECTVALUE(1.0f); - } - else - { - // 0 || expr, replace with 0 != expr - op->fntype = FN_NE; - op->parms.parms[0]->parms.dv.valuePtr = NULL; - op->parms.parms[0]->parms.dv.directValue = 0.0f; - } - } - else - { - // expr || dvalue - if (fabsf(dvalue) >= NSEEL_CLOSEFACTOR) - { - // expr || 1 - if (!retv_parm[0]) - { - // expr has no consequence, drop it and return 1 - RESTART_DIRECTVALUE(1.0f); - } - else - { - // replace with (expr; 1) - op->fntype = FN_JOIN_STATEMENTS; - op->parms.parms[1]->parms.dv.valuePtr = NULL; - op->parms.parms[1]->parms.dv.directValue = 1.0f; - } - } - else - { - // expr || 0, replace with expr != 0 - op->fntype = FN_NE; - op->parms.parms[1]->parms.dv.valuePtr = NULL; - op->parms.parms[1]->parms.dv.directValue = 0.0f; - } - } - goto start_over; - } - } // dv0 || dv1 - // general optimization of two parameters - switch (op->fntype) - { - case FN_MULTIPLY: - { - opcodeRec *first_parm = op->parms.parms[0], *second_parm = op->parms.parms[1]; - if (second_parm->opcodeType == first_parm->opcodeType) - { - switch (first_parm->opcodeType) - { - case OPCODETYPE_VALUE_FROM_NAMESPACENAME: - if (first_parm->namespaceidx != second_parm->namespaceidx) break; - // fall through - case OPCODETYPE_VARPTR: - if (first_parm->relname && second_parm->relname && !strcmp(second_parm->relname, first_parm->relname)) second_parm = NULL; - break; - case OPCODETYPE_VARPTRPTR: - if (first_parm->parms.dv.valuePtr && first_parm->parms.dv.valuePtr == second_parm->parms.dv.valuePtr) second_parm = NULL; - break; - } - if (!second_parm) // switch from x*x to sqr(x) - { - static functionType sqrcpy = { "sqr", nseel_asm_sqr,nseel_asm_sqr_end, 1 | NSEEL_NPARAMS_FLAG_CONST | BIF_RETURNSONSTACK | BIF_LASTPARMONSTACK | BIF_FPSTACKUSE(1) }; - op->opcodeType = OPCODETYPE_FUNC1; - op->fntype = FUNCTYPE_FUNCTIONTYPEREC; - op->fn = &sqrcpy; - goto start_over; - } - } - } - break; - case FN_POW: - { - opcodeRec *first_parm = op->parms.parms[0]; - if (first_parm->opcodeType == op->opcodeType && first_parm->fntype == FN_POW) - { - // since first_parm is a pow too, we can multiply the exponents. - // set our base to be the base of the inner pow - op->parms.parms[0] = first_parm->parms.parms[0]; - // make the old extra pow be a multiply of the exponents - first_parm->fntype = FN_MULTIPLY; - first_parm->parms.parms[0] = op->parms.parms[1]; - // put that as the exponent - op->parms.parms[1] = first_parm; - goto start_over; - } - } - break; - case FN_LOGICAL_AND: - case FN_LOGICAL_OR: - if (op->parms.parms[0]->fntype == FN_NOTNOT) - { - // remove notnot, unnecessary for input to &&/|| operators - op->parms.parms[0] = op->parms.parms[0]->parms.parms[0]; - goto start_over; - } - if (op->parms.parms[1]->fntype == FN_NOTNOT) - { - // remove notnot, unnecessary for input to &&/|| operators - op->parms.parms[1] = op->parms.parms[1]->parms.parms[0]; - goto start_over; - } - break; - } - } - else if (op->opcodeType == OPCODETYPE_FUNC3) // within FUNCTYPE_SIMPLE - { - if (op->fntype == FN_IF_ELSE) - { - if (op->parms.parms[0]->opcodeType == OPCODETYPE_DIRECTVALUE) - { - int32_t s = fabsf(op->parms.parms[0]->parms.dv.directValue) >= NSEEL_CLOSEFACTOR; - memcpy(op, op->parms.parms[s ? 1 : 2], sizeof(opcodeRec)); - goto start_over; - } - if (op->parms.parms[0]->opcodeType == OPCODETYPE_FUNC1) - { - if (op->parms.parms[0]->fntype == FN_NOTNOT) - { - // remove notnot, unnecessary for input to ? operator - op->parms.parms[0] = op->parms.parms[0]->parms.parms[0]; - goto start_over; - } - } - } - } - if (op->fntype >= FN_NONCONST_BEGIN && op->fntype < FUNCTYPE_SIMPLEMAX) retv |= 1; - // FUNCTYPE_SIMPLE - } - else if (op->fntype == FUNCTYPE_FUNCTIONTYPEREC && op->fn) - { - /* - probably worth doing reduction on: - _divop (constant change to multiply) - _and - _or - abs - maybe: - min - max - also, optimize should (recursively or maybe iteratively?) search transitive functions (mul/div) for more constant reduction possibilities - */ - functionType *pfn = (functionType *)op->fn; - if (!(pfn->nParams&NSEEL_NPARAMS_FLAG_CONST)) retv |= 1; - if (op->opcodeType == OPCODETYPE_FUNC1) // within FUNCTYPE_FUNCTIONTYPEREC - { - if (op->parms.parms[0]->opcodeType == OPCODETYPE_DIRECTVALUE) - { - int32_t suc = 1; - float v = op->parms.parms[0]->parms.dv.directValue; -#define DOF(x) if (!strcmp(pfn->name,#x)) v = x(v); else -#define DOF2(x,y) if (!strcmp(pfn->name,#x)) v = x(y); else - DOF(sinf) - DOF(cosf) - DOF(tanf) - DOF(asinf) - DOF(acosf) - DOF(atanf) - DOF2(sqrtf, fabsf(v)) - DOF(expf) - DOF(logf) - DOF(log10f) - /* else */ suc = 0; -#undef DOF -#undef DOF2 - if (suc) - { - RESTART_DIRECTVALUE(v); - } - } - } - else if (op->opcodeType == OPCODETYPE_FUNC2) // within FUNCTYPE_FUNCTIONTYPEREC - { - const int32_t dv0 = op->parms.parms[0]->opcodeType == OPCODETYPE_DIRECTVALUE; - const int32_t dv1 = op->parms.parms[1]->opcodeType == OPCODETYPE_DIRECTVALUE; - if (dv0 && dv1) - { - if (!strcmp(pfn->name, "atan2")) - { - RESTART_DIRECTVALUE(atan2f(op->parms.parms[0]->parms.dv.directValue, op->parms.parms[1]->parms.dv.directValue)); - } - } - } - // FUNCTYPE_FUNCTIONTYPEREC - } - else - { - // unknown or eel func, assume non-const - retv |= 1; - } - } - // if we need results, or our function has effects itself, then finish - if (retv || needsResult) - { - return retv || joined_retv || retv_parm[0] || retv_parm[1] || retv_parm[2]; - } - // we don't need results here, and our function is const, which means we can remove it - { - int32_t cnt = 0, idx1 = 0, idx2 = 0, x; - for (x = 0; x < 3; x++) if (retv_parm[x]) { if (!cnt++) idx1 = x; else idx2 = x; } - if (!cnt) // none of the parameters do anything, remove this opcode - { - if (lastJoinOp) - { - // replace previous join with its first linked opcode, removing this opcode completely - memcpy(lastJoinOp, lastJoinOp->parms.parms[0], sizeof(*lastJoinOp)); - } - else if (op->opcodeType != OPCODETYPE_DIRECTVALUE) - { - // allow caller to easily detect this as trivial and remove it - op->opcodeType = OPCODETYPE_DIRECTVALUE; - op->parms.dv.valuePtr = NULL; - op->parms.dv.directValue = 0.0f; - } - // return joined_retv below - } - else - { - // if parameters are non-const, and we're a conditional, preserve our function - if (FNPTR_HAS_CONDITIONAL_EXEC(op)) return 1; - // otherwise, condense into either the non-const statement, or a join - if (cnt == 1) - { - memcpy(op, op->parms.parms[idx1], sizeof(*op)); - } - else if (cnt == 2) - { - op->opcodeType = OPCODETYPE_FUNC2; - op->fntype = FN_JOIN_STATEMENTS; - op->fn = op; - op->parms.parms[0] = op->parms.parms[idx1]; - op->parms.parms[1] = op->parms.parms[idx2]; - op->parms.parms[2] = NULL; - } - else - { - // todo need to create a new opcodeRec here, for now just leave as is - // (non-conditional const 3 parameter functions are rare anyway) - } - return 1; - } - } - return joined_retv; -} -static int32_t generateValueToReg(compileContext *ctx, opcodeRec *op, unsigned char *bufOut, int32_t whichReg, const namespaceInformation *functionPrefix, int32_t allowCache) -{ - float *b = NULL; - if (op->opcodeType == OPCODETYPE_VALUE_FROM_NAMESPACENAME) - { - char nm[NSEEL_MAX_VARIABLE_NAMELEN + 1]; - const char *p = op->relname; - combineNamespaceFields(nm, functionPrefix, p + (*p == '#'), op->namespaceidx); - if (!nm[0]) return -1; - b = nseel_int_register_var(ctx, nm, 0, NULL); - if (!b) RET_MINUS1_FAIL("error registering var") - } - else - { - if (op->opcodeType != OPCODETYPE_DIRECTVALUE) allowCache = 0; - b = op->parms.dv.valuePtr; - if (!b && op->opcodeType == OPCODETYPE_VARPTR && op->relname && op->relname[0]) - { - op->parms.dv.valuePtr = b = nseel_int_register_var(ctx, op->relname, 0, NULL); - } - if (b && op->opcodeType == OPCODETYPE_VARPTRPTR) b = *(float **)b; - if (!b && allowCache) - { - int32_t n = 50; // only scan last X items - opcodeRec *r = ctx->directValueCache; - while (r && n--) - { - if (r->parms.dv.directValue == op->parms.dv.directValue && (b = r->parms.dv.valuePtr)) break; - r = (opcodeRec*)r->fn; - } - } - if (!b) - { - ctx->l_stats[3]++; - if (ctx->isGeneratingCommonFunction) - b = newCtxDataBlock(sizeof(float), sizeof(float)); - else - b = newDataBlock(sizeof(float), sizeof(float)); - if (!b) RET_MINUS1_FAIL("error allocating data block") - if (op->opcodeType != OPCODETYPE_VARPTRPTR) op->parms.dv.valuePtr = b; - *b = op->parms.dv.directValue; - if (allowCache) - { - op->fn = ctx->directValueCache; - ctx->directValueCache = op; - } - } - } - GLUE_MOV_PX_DIRECTVALUE_GEN(bufOut, (INT_PTR)b, whichReg); - return GLUE_MOV_PX_DIRECTVALUE_SIZE; -} -unsigned char *compileCodeBlockWithRet(compileContext *ctx, opcodeRec *rec, int32_t *computTableSize, const namespaceInformation *namespacePathToThis, - int32_t supportedReturnValues, int32_t *rvType, int32_t *fpStackUsage, int32_t *canHaveDenormalOutput) -{ - unsigned char *p, *newblock2; - // generate code call - int32_t funcsz = compileOpcodes(ctx, rec, NULL, 1024 * 1024 * 128, NULL, namespacePathToThis, supportedReturnValues, rvType, fpStackUsage, NULL); - if (funcsz < 0) return NULL; - p = newblock2 = newCodeBlock(funcsz + sizeof(GLUE_RET), 32); - if (!newblock2) return NULL; - *fpStackUsage = 0; - funcsz = compileOpcodes(ctx, rec, p, funcsz, computTableSize, namespacePathToThis, supportedReturnValues, rvType, fpStackUsage, canHaveDenormalOutput); - if (funcsz < 0) return NULL; - p += funcsz; - memcpy(p, &GLUE_RET, sizeof(GLUE_RET)); p += sizeof(GLUE_RET); -#ifdef __arm__ - __clear_cache(newblock2, p); -#endif - ctx->l_stats[2] += funcsz + 2; - return newblock2; -} -static int32_t compileNativeFunctionCall(compileContext *ctx, opcodeRec *op, unsigned char *bufOut, int32_t bufOut_len, int32_t *computTableSize, const namespaceInformation *namespacePathToThis, - int32_t *rvMode, int32_t *fpStackUsage, int32_t preferredReturnValues, int32_t *canHaveDenormalOutput) -{ - // builtin function generation - int32_t func_size = 0; - int32_t cfunc_abiinfo = 0; - int32_t local_fpstack_use = 0; // how many items we have pushed onto the fp stack - int32_t parm_size = 0; - int32_t restore_stack_amt = 0; - void *func_e = NULL; - NSEEL_PPPROC preProc = 0; - void **repl = NULL; - int32_t n_params = 1 + op->opcodeType - OPCODETYPE_FUNC1; - const int32_t parm0_dv = op->parms.parms[0]->opcodeType == OPCODETYPE_DIRECTVALUE; - const int32_t parm1_dv = n_params > 1 && op->parms.parms[1]->opcodeType == OPCODETYPE_DIRECTVALUE; - void *func = nseel_getBuiltinFunctionAddress(ctx, op->fntype, op->fn, &preProc, &repl, &func_e, &cfunc_abiinfo, preferredReturnValues, - parm0_dv ? &op->parms.parms[0]->parms.dv.directValue : NULL, - parm1_dv ? &op->parms.parms[1]->parms.dv.directValue : NULL - ); - if (!func) RET_MINUS1_FAIL("error getting funcaddr") - *fpStackUsage = BIF_GETFPSTACKUSE(cfunc_abiinfo); - *rvMode = RETURNVALUE_NORMAL; - if (cfunc_abiinfo & BIF_TAKES_VARPARM) - { -#if defined(__arm__) || defined(__ppc__) || (defined (_M_ARM) && _M_ARM == 7) - const int32_t max_params = 4096; // 32kb max offset addressing for stack, so 4096*4 = 16384, should be safe -#else - const int32_t max_params = 32768; // sanity check, the stack is free to grow on x86/x86-64 -#endif - int32_t x; - // this mode is less efficient in that it creates a list of pointers on the stack to pass to the function - // but it is more flexible and works for >3 parameters. - if (op->opcodeType == OPCODETYPE_FUNCX) - { - n_params = 0; - for (x = 0; x < 3; x++) - { - opcodeRec *prni = op->parms.parms[x]; - while (prni) - { - const int32_t isMP = prni->opcodeType == OPCODETYPE_MOREPARAMS; - n_params++; - if (!isMP || n_params >= max_params) break; - prni = prni->parms.parms[1]; - } - } - } - restore_stack_amt = (sizeof(void *) * n_params + 15)&~15; - if (restore_stack_amt) - { - int32_t offs = restore_stack_amt; - while (offs > 0) - { - int32_t amt = offs; - if (amt > 4096) amt = 4096; - if ((size_t)bufOut_len < ((size_t)(parm_size)+GLUE_MOVE_STACK_SIZE)) RET_MINUS1_FAIL("insufficient size for varparm") - if (bufOut) GLUE_MOVE_STACK(bufOut + parm_size, -amt); - parm_size += GLUE_MOVE_STACK_SIZE; - offs -= amt; - if (offs > 0) // make sure this page is in memory - { - if ((size_t)bufOut_len < ((size_t)(parm_size)+GLUE_STORE_P1_TO_STACK_AT_OFFS_SIZE)) - RET_MINUS1_FAIL("insufficient size for varparm stackchk") - if (bufOut) GLUE_STORE_P1_TO_STACK_AT_OFFS(bufOut + parm_size, 0); - parm_size += GLUE_STORE_P1_TO_STACK_AT_OFFS_SIZE; - } - } - } - if (op->opcodeType == OPCODETYPE_FUNCX) - { - n_params = 0; - for (x = 0; x < 3; x++) - { - opcodeRec *prni = op->parms.parms[x]; - while (prni) - { - const int32_t isMP = prni->opcodeType == OPCODETYPE_MOREPARAMS; - opcodeRec *r = isMP ? prni->parms.parms[0] : prni; - if (r) - { - int32_t canHaveDenorm = 0; - int32_t rvt = RETURNVALUE_NORMAL; - int32_t subfpstackuse = 0; - int32_t lsz = compileOpcodes(ctx, r, bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, rvt, &rvt, &subfpstackuse, &canHaveDenorm); - if (canHaveDenorm && canHaveDenormalOutput) *canHaveDenormalOutput = 1; - if (lsz < 0) RET_MINUS1_FAIL("call coc for varparmX failed") - if (rvt != RETURNVALUE_NORMAL) RET_MINUS1_FAIL("call coc for varparmX gave bad type back"); - parm_size += lsz; - if ((size_t)bufOut_len < ((size_t)(parm_size)+GLUE_STORE_P1_TO_STACK_AT_OFFS_SIZE)) RET_MINUS1_FAIL("call coc for varparmX size"); - if (bufOut) GLUE_STORE_P1_TO_STACK_AT_OFFS(bufOut + parm_size, n_params * sizeof(void *)); - parm_size += GLUE_STORE_P1_TO_STACK_AT_OFFS_SIZE; - if (subfpstackuse + local_fpstack_use > *fpStackUsage) *fpStackUsage = subfpstackuse + local_fpstack_use; - } - else RET_MINUS1_FAIL("zero parameter varparmX") - n_params++; - if (!isMP || n_params >= max_params) break; - prni = prni->parms.parms[1]; - } - } - } - else for (x = 0; x < n_params; x++) - { - opcodeRec *r = op->parms.parms[x]; - if (r) - { - int32_t canHaveDenorm = 0; - int32_t subfpstackuse = 0; - int32_t rvt = RETURNVALUE_NORMAL; - int32_t lsz = compileOpcodes(ctx, r, bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, rvt, &rvt, &subfpstackuse, &canHaveDenorm); - if (canHaveDenorm && canHaveDenormalOutput) *canHaveDenormalOutput = 1; - if (lsz < 0) RET_MINUS1_FAIL("call coc for varparm123 failed") - if (rvt != RETURNVALUE_NORMAL) RET_MINUS1_FAIL("call coc for varparm123 gave bad type back"); - parm_size += lsz; - if ((size_t)bufOut_len < ((size_t)(parm_size)+GLUE_STORE_P1_TO_STACK_AT_OFFS_SIZE)) RET_MINUS1_FAIL("call coc for varparm123 size"); - if (bufOut) GLUE_STORE_P1_TO_STACK_AT_OFFS(bufOut + parm_size, x * sizeof(void *)); - parm_size += GLUE_STORE_P1_TO_STACK_AT_OFFS_SIZE; - if (subfpstackuse + local_fpstack_use > *fpStackUsage) *fpStackUsage = subfpstackuse + local_fpstack_use; - } - else RET_MINUS1_FAIL("zero parameter for varparm123"); - } - if ((size_t)bufOut_len < ((size_t)(parm_size)+GLUE_MOV_PX_DIRECTVALUE_SIZE + GLUE_MOVE_PX_STACKPTR_SIZE)) RET_MINUS1_FAIL("insufficient size for varparm p1") - if (bufOut) GLUE_MOV_PX_DIRECTVALUE_GEN(bufOut + parm_size, (INT_PTR)n_params, 1); - parm_size += GLUE_MOV_PX_DIRECTVALUE_SIZE; - if (bufOut) GLUE_MOVE_PX_STACKPTR_GEN(bufOut + parm_size, 0); - parm_size += GLUE_MOVE_PX_STACKPTR_SIZE; - } - else // not varparm - { - int32_t pn; -#ifdef GLUE_HAS_FXCH - int32_t need_fxch = 0; -#endif - int32_t last_nt_parm = -1, last_nt_parm_type; - if (op->opcodeType == OPCODETYPE_FUNCX) - { - // this is not yet supported (calling conventions will need to be sorted, among other things) - RET_MINUS1_FAIL("funcx for native functions requires BIF_TAKES_VARPARM or BIF_TAKES_VARPARM_EX") - } - // end of built-in function specific special casing - // first pass, calculate any non-trivial parameters - for (pn = 0; pn < n_params; pn++) - { - if (!OPCODE_IS_TRIVIAL(op->parms.parms[pn])) - { - int32_t canHaveDenorm = 0; - int32_t subfpstackuse = 0; - int32_t lsz = 0; - int32_t rvt = RETURNVALUE_NORMAL; - int32_t may_need_fppush = -1; - if (last_nt_parm >= 0) - { - if (last_nt_parm_type == RETURNVALUE_FPSTACK) - { - may_need_fppush = parm_size; - } - else - { - // push last result - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_PUSH_P1)) RET_MINUS1_FAIL("failed on size, pushp1") - if (bufOut) memcpy(bufOut + parm_size, &GLUE_PUSH_P1, sizeof(GLUE_PUSH_P1)); - parm_size += sizeof(GLUE_PUSH_P1); - } - } - if (func == nseel_asm_bnot) rvt = RETURNVALUE_BOOL_REVERSED | RETURNVALUE_BOOL; - else if (pn == n_params - 1) - { - if (cfunc_abiinfo&BIF_LASTPARMONSTACK) rvt = RETURNVALUE_FPSTACK; - else if (cfunc_abiinfo&BIF_LASTPARM_ASBOOL) rvt = RETURNVALUE_BOOL; - else if (func == nseel_asm_assign) rvt = RETURNVALUE_FPSTACK | RETURNVALUE_NORMAL; - } - else if (pn == n_params - 2 && (cfunc_abiinfo&BIF_SECONDLASTPARMST)) - { - rvt = RETURNVALUE_FPSTACK; - } - lsz = compileOpcodes(ctx, op->parms.parms[pn], bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, rvt, &rvt, &subfpstackuse, &canHaveDenorm); - if (lsz < 0) RET_MINUS1_FAIL("call coc failed") - if (func == nseel_asm_bnot && rvt == RETURNVALUE_BOOL_REVERSED) - { - // remove bnot, compileOpcodes() used fptobool_rev - func = nseel_asm_bnotnot; - func_e = nseel_asm_bnotnot_end; - rvt = RETURNVALUE_BOOL; - } - if (canHaveDenorm && canHaveDenormalOutput) *canHaveDenormalOutput = 1; - parm_size += lsz; - if (may_need_fppush >= 0) - { - if (local_fpstack_use + subfpstackuse >= (GLUE_MAX_FPSTACK_SIZE - 1) || (0 & OPTFLAG_NO_FPSTACK)) - { - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_POP_FPSTACK_TOSTACK)) - RET_MINUS1_FAIL("failed on size, popfpstacktostack") - if (bufOut) - { - memmove(bufOut + may_need_fppush + sizeof(GLUE_POP_FPSTACK_TOSTACK), bufOut + may_need_fppush, parm_size - may_need_fppush); - memcpy(bufOut + may_need_fppush, &GLUE_POP_FPSTACK_TOSTACK, sizeof(GLUE_POP_FPSTACK_TOSTACK)); - } - parm_size += sizeof(GLUE_POP_FPSTACK_TOSTACK); - } - else - { - local_fpstack_use++; - } - } - if (subfpstackuse + local_fpstack_use > *fpStackUsage) - *fpStackUsage = subfpstackuse + local_fpstack_use; - last_nt_parm = pn; - last_nt_parm_type = rvt; - if (pn == n_params - 1 && func == nseel_asm_assign) - { - if (!canHaveDenorm) - { - if (rvt == RETURNVALUE_FPSTACK) - { - cfunc_abiinfo |= BIF_LASTPARMONSTACK; - func = nseel_asm_assign_fast_fromfp; - func_e = nseel_asm_assign_fast_fromfp_end; - } - else - { - func = nseel_asm_assign_fast; - func_e = nseel_asm_assign_fast_end; - } - } - else - { - if (rvt == RETURNVALUE_FPSTACK) - { - cfunc_abiinfo |= BIF_LASTPARMONSTACK; - func = nseel_asm_assign_fromfp; - func_e = nseel_asm_assign_fromfp_end; - } - } - } - } - } - pn = last_nt_parm; - if (pn >= 0) // if the last thing executed doesn't go to the last parameter, move it there - { - if ((cfunc_abiinfo&BIF_SECONDLASTPARMST) && pn == n_params - 2) - { - // do nothing, things are in the right place - } - else if (pn != n_params - 1) - { - // generate mov p1->pX - if ((size_t)bufOut_len < ((size_t)(parm_size)+GLUE_SET_PX_FROM_P1_SIZE)) RET_MINUS1_FAIL("size, pxfromp1") - if (bufOut) GLUE_SET_PX_FROM_P1(bufOut + parm_size, n_params - 1 - pn); - parm_size += GLUE_SET_PX_FROM_P1_SIZE; - } - } - // pop any pushed parameters - while (--pn >= 0) - { - if (!OPCODE_IS_TRIVIAL(op->parms.parms[pn])) - { - if ((cfunc_abiinfo&BIF_SECONDLASTPARMST) && pn == n_params - 2) - { - if (!local_fpstack_use) - { - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_POP_STACK_TO_FPSTACK)) RET_MINUS1_FAIL("size, popstacktofpstack 2") - if (bufOut) memcpy(bufOut + parm_size, GLUE_POP_STACK_TO_FPSTACK, sizeof(GLUE_POP_STACK_TO_FPSTACK)); - parm_size += sizeof(GLUE_POP_STACK_TO_FPSTACK); -#ifdef GLUE_HAS_FXCH - need_fxch = 1; -#endif - } - else - { - local_fpstack_use--; - } - } - else - { - if ((size_t)bufOut_len < (size_t)(parm_size)+GLUE_POP_PX_SIZE) RET_MINUS1_FAIL("size, poppx") - if (bufOut) GLUE_POP_PX(bufOut + parm_size, n_params - 1 - pn); - parm_size += GLUE_POP_PX_SIZE; - } - } - } - // finally, set trivial pointers - for (pn = 0; pn < n_params; pn++) - { - if (OPCODE_IS_TRIVIAL(op->parms.parms[pn])) - { - if (pn == n_params - 2 && (cfunc_abiinfo&(BIF_SECONDLASTPARMST))) // second to last parameter - { - int32_t a = compileOpcodes(ctx, op->parms.parms[pn], bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, - RETURNVALUE_FPSTACK, NULL, NULL, canHaveDenormalOutput); - if (a < 0) RET_MINUS1_FAIL("coc call here 2") - parm_size += a; -#ifdef GLUE_HAS_FXCH - need_fxch = 1; -#endif - } - else if (pn == n_params - 1) // last parameter, but we should call compileOpcodes to get it in the right format (compileOpcodes can optimize that process if it needs to) - { - int32_t rvt = 0, a; - int32_t wantFpStack = func == nseel_asm_assign; -#ifdef GLUE_PREFER_NONFP_DV_ASSIGNS // x86-64, and maybe others, prefer to avoid the fp stack for a simple copy - if (wantFpStack && - (op->parms.parms[pn]->opcodeType != OPCODETYPE_DIRECTVALUE || - (op->parms.parms[pn]->parms.dv.directValue != 1.0f && op->parms.parms[pn]->parms.dv.directValue != 0.0f))) - { - wantFpStack = 0; - } -#endif - a = compileOpcodes(ctx, op->parms.parms[pn], bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, - func == nseel_asm_bnot ? (RETURNVALUE_BOOL_REVERSED | RETURNVALUE_BOOL) : - (cfunc_abiinfo & BIF_LASTPARMONSTACK) ? RETURNVALUE_FPSTACK : - (cfunc_abiinfo & BIF_LASTPARM_ASBOOL) ? RETURNVALUE_BOOL : - wantFpStack ? (RETURNVALUE_FPSTACK | RETURNVALUE_NORMAL) : - RETURNVALUE_NORMAL, - &rvt, NULL, canHaveDenormalOutput); - if (a < 0) RET_MINUS1_FAIL("coc call here 3") - if (func == nseel_asm_bnot && rvt == RETURNVALUE_BOOL_REVERSED) - { - // remove bnot, compileOpcodes() used fptobool_rev - func = nseel_asm_bnotnot; - func_e = nseel_asm_bnotnot_end; - rvt = RETURNVALUE_BOOL; - } - parm_size += a; -#ifdef GLUE_HAS_FXCH - need_fxch = 0; -#endif - if (func == nseel_asm_assign) - { - if (rvt == RETURNVALUE_FPSTACK) - { - func = nseel_asm_assign_fast_fromfp; - func_e = nseel_asm_assign_fast_fromfp_end; - } - else - { - // assigning a value (from a variable or other non-computer), can use a fast assign (no denormal/result checking) - func = nseel_asm_assign_fast; - func_e = nseel_asm_assign_fast_end; - } - } - } - else - { - if ((size_t)bufOut_len < ((size_t)(parm_size)+GLUE_MOV_PX_DIRECTVALUE_SIZE)) RET_MINUS1_FAIL("size, pxdvsz") - if (bufOut) - { - if (generateValueToReg(ctx, op->parms.parms[pn], bufOut + parm_size, n_params - 1 - pn, namespacePathToThis, 0/*nocaching, function gets pointer*/) < 0) RET_MINUS1_FAIL("gvtr") - } - parm_size += GLUE_MOV_PX_DIRECTVALUE_SIZE; - } - } - } -#ifdef GLUE_HAS_FXCH - if ((cfunc_abiinfo&(BIF_SECONDLASTPARMST)) && !(cfunc_abiinfo&(BIF_LAZYPARMORDERING)) && - ((!!need_fxch) ^ !!(cfunc_abiinfo&BIF_REVERSEFPORDER)) - ) - { - // emit fxch - if ((size_t)bufOut_len < sizeof(GLUE_FXCH)) RET_MINUS1_FAIL("len,fxch") - if (bufOut) - { - memcpy(bufOut + parm_size, GLUE_FXCH, sizeof(GLUE_FXCH)); - } - parm_size += sizeof(GLUE_FXCH); - } -#endif - if (!*canHaveDenormalOutput) - { - // if add_op or sub_op, and non-denormal input, safe to omit denormal checks - if (func == (void*)nseel_asm_add_op) - { - func = nseel_asm_add_op_fast; - func_e = nseel_asm_add_op_fast_end; - } - else if (func == (void*)nseel_asm_sub_op) - { - func = nseel_asm_sub_op_fast; - func_e = nseel_asm_sub_op_fast_end; - } - // or if mul/div by a fixed value of >= or <= 1.0f - else if (func == (void *)nseel_asm_mul_op && parm1_dv && fabsf(op->parms.parms[1]->parms.dv.directValue) >= 1.0f) - { - func = nseel_asm_mul_op_fast; - func_e = nseel_asm_mul_op_fast_end; - } - else if (func == (void *)nseel_asm_div_op && parm1_dv && fabsf(op->parms.parms[1]->parms.dv.directValue) <= 1.0f) - { - func = nseel_asm_div_op_fast; - func_e = nseel_asm_div_op_fast_end; - } - } - } // not varparm - if (cfunc_abiinfo & (BIF_CLEARDENORMAL | BIF_RETURNSBOOL)) *canHaveDenormalOutput = 0; - else if (!(cfunc_abiinfo & BIF_WONTMAKEDENORMAL)) *canHaveDenormalOutput = 1; - func = GLUE_realAddress(func, func_e, &func_size); - if (!func) RET_MINUS1_FAIL("failrealladdrfunc") - if (bufOut_len < parm_size + func_size) RET_MINUS1_FAIL("funcsz") - if (bufOut) - { - unsigned char *p = bufOut + parm_size; - memcpy(p, func, func_size); - if (preProc) p = preProc(p, func_size, ctx); - if (repl) - { - if (repl[0]) p = EEL_GLUE_set_immediate(p, (INT_PTR)repl[0]); - if (repl[1]) p = EEL_GLUE_set_immediate(p, (INT_PTR)repl[1]); - if (repl[2]) p = EEL_GLUE_set_immediate(p, (INT_PTR)repl[2]); - if (repl[3]) p = EEL_GLUE_set_immediate(p, (INT_PTR)repl[3]); - } - } - if (restore_stack_amt) - { - if ((size_t)bufOut_len < ((size_t)(parm_size + func_size) + GLUE_MOVE_STACK_SIZE)) RET_MINUS1_FAIL("insufficient size for varparm") - if (bufOut) GLUE_MOVE_STACK(bufOut + parm_size + func_size, restore_stack_amt); - parm_size += GLUE_MOVE_STACK_SIZE; - } - if (cfunc_abiinfo&BIF_RETURNSONSTACK) *rvMode = RETURNVALUE_FPSTACK; - else if (cfunc_abiinfo&BIF_RETURNSBOOL) *rvMode = RETURNVALUE_BOOL; - return parm_size + func_size; -} -static int32_t compileEelFunctionCall(compileContext *ctx, opcodeRec *op, unsigned char *bufOut, int32_t bufOut_len, int32_t *computTableSize, const namespaceInformation *namespacePathToThis, - int32_t *rvMode, int32_t *fpStackUse, int32_t *canHaveDenormalOutput) -{ - int32_t func_size = 0, parm_size = 0; - int32_t pn; - int32_t last_nt_parm = -1, last_nt_parm_mode = 0; - void *func_e = NULL; - int32_t n_params; - opcodeRec *parmptrs[NSEEL_MAX_EELFUNC_PARAMETERS]; - int32_t cfp_numparams = -1; - int32_t cfp_statesize = 0; - float **cfp_ptrs = NULL; - int32_t func_raw = 0; - int32_t do_parms; - int32_t x; - void *func; - for (x = 0; x < 3; x++) parmptrs[x] = op->parms.parms[x]; - if (op->opcodeType == OPCODETYPE_FUNCX) - { - n_params = 0; - for (x = 0; x < 3; x++) - { - opcodeRec *prni = op->parms.parms[x]; - while (prni && n_params < NSEEL_MAX_EELFUNC_PARAMETERS) - { - const int32_t isMP = prni->opcodeType == OPCODETYPE_MOREPARAMS; - parmptrs[n_params++] = isMP ? prni->parms.parms[0] : prni; - if (!isMP) break; - prni = prni->parms.parms[1]; - } - } - } - else - { - n_params = 1 + op->opcodeType - OPCODETYPE_FUNC1; - } - *fpStackUse = 0; - func = nseel_getEELFunctionAddress(ctx, op, - &cfp_numparams, &cfp_statesize, &cfp_ptrs, - computTableSize, - &func_e, &func_raw, - !!bufOut, namespacePathToThis, rvMode, fpStackUse, canHaveDenormalOutput, parmptrs, n_params); - if (func_raw) func_size = (int32_t)((char*)func_e - (char*)func); - else if (func) func = GLUE_realAddress(func, func_e, &func_size); - if (!func) RET_MINUS1_FAIL("eelfuncaddr") - *fpStackUse += 1; - if (cfp_numparams > 0 && n_params != cfp_numparams) - { - RET_MINUS1_FAIL("eelfuncnp") - } - // user defined function - do_parms = cfp_numparams > 0 && cfp_ptrs && cfp_statesize > 0; - // if function local/parameter state is zero, we need to allocate storage for it - if (cfp_statesize > 0 && cfp_ptrs && !cfp_ptrs[0]) - { - float *pstate = newDataBlock(sizeof(float)*cfp_statesize, 8); - if (!pstate) RET_MINUS1_FAIL("eelfuncdb") - for (pn = 0; pn < cfp_statesize; pn++) - { - pstate[pn] = 0; - cfp_ptrs[pn] = pstate + pn; - } - } - // first process parameters that are non-trivial - for (pn = 0; pn < n_params; pn++) - { - int32_t needDenorm = 0; - int32_t lsz, sUse = 0; - if (!parmptrs[pn] || OPCODE_IS_TRIVIAL(parmptrs[pn])) continue; // skip and process after - if (last_nt_parm >= 0 && do_parms) - { - if (last_nt_parm_mode == RETURNVALUE_FPSTACK) - { - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_POP_FPSTACK_TOSTACK)) RET_MINUS1_FAIL("eelfunc_size popfpstacktostack") - if (bufOut) memcpy(bufOut + parm_size, GLUE_POP_FPSTACK_TOSTACK, sizeof(GLUE_POP_FPSTACK_TOSTACK)); - parm_size += sizeof(GLUE_POP_FPSTACK_TOSTACK); - } - else - { - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_PUSH_P1PTR_AS_VALUE)) RET_MINUS1_FAIL("eelfunc_size pushp1ptrasval") - // push - if (bufOut) memcpy(bufOut + parm_size, &GLUE_PUSH_P1PTR_AS_VALUE, sizeof(GLUE_PUSH_P1PTR_AS_VALUE)); - parm_size += sizeof(GLUE_PUSH_P1PTR_AS_VALUE); - } - } - last_nt_parm_mode = 0; - lsz = compileOpcodes(ctx, parmptrs[pn], bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, - do_parms ? (RETURNVALUE_FPSTACK | RETURNVALUE_NORMAL) : RETURNVALUE_IGNORE, &last_nt_parm_mode, &sUse, &needDenorm); - // todo: if needDenorm, denorm convert when copying parameter - if (lsz < 0) RET_MINUS1_FAIL("eelfunc, coc fail") - if (last_nt_parm_mode == RETURNVALUE_FPSTACK) sUse++; - if (sUse > *fpStackUse) *fpStackUse = sUse; - parm_size += lsz; - last_nt_parm = pn; - } - // pop non-trivial results into place - if (last_nt_parm >= 0 && do_parms) - { - while (--pn >= 0) - { - if (!parmptrs[pn] || OPCODE_IS_TRIVIAL(parmptrs[pn])) continue; // skip and process after - if (pn == last_nt_parm) - { - if (last_nt_parm_mode == RETURNVALUE_FPSTACK) - { - // pop to memory directly - const int32_t cpsize = GLUE_POP_FPSTACK_TO_PTR(NULL, NULL); - if (bufOut_len < parm_size + cpsize) RET_MINUS1_FAIL("eelfunc size popfpstacktoptr") - if (bufOut) GLUE_POP_FPSTACK_TO_PTR((unsigned char *)bufOut + parm_size, cfp_ptrs[pn]); - parm_size += cpsize; - } - else - { - // copy direct p1ptr to mem - const int32_t cpsize = GLUE_COPY_VALUE_AT_P1_TO_PTR(NULL, NULL); - if (bufOut_len < parm_size + cpsize) RET_MINUS1_FAIL("eelfunc size copyvalueatp1toptr") - if (bufOut) GLUE_COPY_VALUE_AT_P1_TO_PTR((unsigned char *)bufOut + parm_size, cfp_ptrs[pn]); - parm_size += cpsize; - } - } - else - { - const int32_t popsize = GLUE_POP_VALUE_TO_ADDR(NULL, NULL); - if (bufOut_len < parm_size + popsize) RET_MINUS1_FAIL("eelfunc size pop value to addr") - if (bufOut) GLUE_POP_VALUE_TO_ADDR((unsigned char *)bufOut + parm_size, cfp_ptrs[pn]); - parm_size += popsize; - } - } - } - // finally, set any trivial parameters - if (do_parms) - { - const int32_t cpsize = GLUE_MOV_PX_DIRECTVALUE_SIZE + GLUE_COPY_VALUE_AT_P1_TO_PTR(NULL, NULL); - for (pn = 0; pn < n_params; pn++) - { - if (!parmptrs[pn] || !OPCODE_IS_TRIVIAL(parmptrs[pn])) continue; // set trivial values, we already set nontrivials - if (bufOut_len < parm_size + cpsize) RET_MINUS1_FAIL("eelfunc size trivial set") - if (bufOut) - { - if (generateValueToReg(ctx, parmptrs[pn], bufOut + parm_size, 0, namespacePathToThis, 1) < 0) RET_MINUS1_FAIL("eelfunc gvr fail") - GLUE_COPY_VALUE_AT_P1_TO_PTR(bufOut + parm_size + GLUE_MOV_PX_DIRECTVALUE_SIZE, cfp_ptrs[pn]); - } - parm_size += cpsize; - } - } - if (bufOut_len < parm_size + func_size) RET_MINUS1_FAIL("eelfunc size combined") - if (bufOut) memcpy(bufOut + parm_size, func, func_size); - return parm_size + func_size; - // end of EEL function generation -} -#define CHECK_SIZE_FORJMP(x,y) -#define RET_MINUS1_FAIL_FALLBACK(err,j) RET_MINUS1_FAIL(err) -static int32_t compileOpcodesInternal(compileContext *ctx, opcodeRec *op, unsigned char *bufOut, int32_t bufOut_len, int32_t *computTableSize, const namespaceInformation *namespacePathToThis, int32_t *calledRvType, int32_t preferredReturnValues, int32_t *fpStackUse, int32_t *canHaveDenormalOutput) -{ - int32_t rv_offset = 0, denormal_force = -1; - if (!op) RET_MINUS1_FAIL("coi !op") - *fpStackUse = 0; - for (;;) - { - // special case: statement delimiting means we can process the left side into place, and iteratively do the second parameter without recursing - // also we don't need to save/restore anything to the stack (which the normal 2 parameter function processing does) - if (op->opcodeType == OPCODETYPE_FUNC2 && op->fntype == FN_JOIN_STATEMENTS) - { - int32_t fUse1; - int32_t parm_size = compileOpcodes(ctx, op->parms.parms[0], bufOut, bufOut_len, computTableSize, namespacePathToThis, RETURNVALUE_IGNORE, NULL, &fUse1, NULL); - if (parm_size < 0) RET_MINUS1_FAIL("coc join fail") - op = op->parms.parms[1]; - if (!op) RET_MINUS1_FAIL("join got to null") - if (fUse1 > *fpStackUse) *fpStackUse = fUse1; - if (bufOut) bufOut += parm_size; - bufOut_len -= parm_size; - rv_offset += parm_size; - denormal_force = -1; - } - // special case: __denormal_likely(), __denormal_unlikely() - else if (op->opcodeType == OPCODETYPE_FUNC1 && (op->fntype == FN_DENORMAL_LIKELY || op->fntype == FN_DENORMAL_UNLIKELY)) - { - denormal_force = op->fntype == FN_DENORMAL_LIKELY; - op = op->parms.parms[0]; - } - else - { - break; - } - } - if (denormal_force >= 0 && canHaveDenormalOutput) - { - *canHaveDenormalOutput = denormal_force; - canHaveDenormalOutput = &denormal_force; // prevent it from being changed by functions below - } - // special case: BAND/BOR - if (op->opcodeType == OPCODETYPE_FUNC2 && (op->fntype == FN_LOGICAL_AND || op->fntype == FN_LOGICAL_OR)) - { - int32_t fUse1 = 0; - int32_t parm_size; - int32_t retType = RETURNVALUE_IGNORE; - if (preferredReturnValues != RETURNVALUE_IGNORE) retType = RETURNVALUE_BOOL; - *calledRvType = retType; - parm_size = compileOpcodes(ctx, op->parms.parms[0], bufOut, bufOut_len, computTableSize, namespacePathToThis, RETURNVALUE_BOOL, NULL, &fUse1, NULL); - if (parm_size < 0) RET_MINUS1_FAIL("loop band/bor coc fail") - if (fUse1 > *fpStackUse) *fpStackUse = fUse1; - { - int32_t sz2, fUse2 = 0; - unsigned char *destbuf; - const int32_t testsz = op->fntype == FN_LOGICAL_OR ? sizeof(GLUE_JMP_IF_P1_NZ) : sizeof(GLUE_JMP_IF_P1_Z); - if (bufOut_len < parm_size + testsz) RET_MINUS1_FAIL_FALLBACK("band/bor size fail", doNonInlinedAndOr_) - if (bufOut) memcpy(bufOut + parm_size, op->fntype == FN_LOGICAL_OR ? GLUE_JMP_IF_P1_NZ : GLUE_JMP_IF_P1_Z, testsz); - parm_size += testsz; - destbuf = bufOut + parm_size; - sz2 = compileOpcodes(ctx, op->parms.parms[1], bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, retType, NULL, &fUse2, NULL); - CHECK_SIZE_FORJMP(sz2, doNonInlinedAndOr_) - if (sz2 < 0) RET_MINUS1_FAIL("band/bor coc fail") - parm_size += sz2; - if (bufOut) GLUE_JMP_SET_OFFSET(destbuf, (bufOut + parm_size) - destbuf); - if (fUse2 > *fpStackUse) *fpStackUse = fUse2; - return rv_offset + parm_size; - } - } - if (op->opcodeType == OPCODETYPE_FUNC3 && op->fntype == FN_IF_ELSE) // special case: IF - { - int32_t fUse1 = 0; - int32_t use_rv = RETURNVALUE_IGNORE; - int32_t rvMode = 0; - int32_t parm_size = compileOpcodes(ctx, op->parms.parms[0], bufOut, bufOut_len, computTableSize, namespacePathToThis, RETURNVALUE_BOOL | RETURNVALUE_BOOL_REVERSED, &rvMode, &fUse1, NULL); - if (parm_size < 0) RET_MINUS1_FAIL("if coc fail") - if (fUse1 > *fpStackUse) *fpStackUse = fUse1; - if (preferredReturnValues & RETURNVALUE_NORMAL) use_rv = RETURNVALUE_NORMAL; - else if (preferredReturnValues & RETURNVALUE_FPSTACK) use_rv = RETURNVALUE_FPSTACK; - else if (preferredReturnValues & RETURNVALUE_BOOL) use_rv = RETURNVALUE_BOOL; - *calledRvType = use_rv; - { - int32_t csz, hasSecondHalf; - if (rvMode & RETURNVALUE_BOOL_REVERSED) - { - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_JMP_IF_P1_NZ)) RET_MINUS1_FAIL_FALLBACK("if size fail", doNonInlineIf_) - if (bufOut) memcpy(bufOut + parm_size, GLUE_JMP_IF_P1_NZ, sizeof(GLUE_JMP_IF_P1_NZ)); - parm_size += sizeof(GLUE_JMP_IF_P1_NZ); - } - else - { - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_JMP_IF_P1_Z)) RET_MINUS1_FAIL_FALLBACK("if size fail", doNonInlineIf_) - if (bufOut) memcpy(bufOut + parm_size, GLUE_JMP_IF_P1_Z, sizeof(GLUE_JMP_IF_P1_Z)); - parm_size += sizeof(GLUE_JMP_IF_P1_Z); - } - csz = compileOpcodes(ctx, op->parms.parms[1], bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, use_rv, NULL, &fUse1, canHaveDenormalOutput); - if (fUse1 > *fpStackUse) *fpStackUse = fUse1; - hasSecondHalf = preferredReturnValues || !OPCODE_IS_TRIVIAL(op->parms.parms[2]); - CHECK_SIZE_FORJMP(csz, doNonInlineIf_) - if (csz < 0) RET_MINUS1_FAIL("if coc fial") - if (bufOut) GLUE_JMP_SET_OFFSET(bufOut + parm_size, csz + (hasSecondHalf ? sizeof(GLUE_JMP_NC) : 0)); - parm_size += csz; - if (hasSecondHalf) - { - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_JMP_NC)) RET_MINUS1_FAIL_FALLBACK("if len fail", doNonInlineIf_) - if (bufOut) memcpy(bufOut + parm_size, GLUE_JMP_NC, sizeof(GLUE_JMP_NC)); - parm_size += sizeof(GLUE_JMP_NC); - csz = compileOpcodes(ctx, op->parms.parms[2], bufOut ? bufOut + parm_size : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, use_rv, NULL, &fUse1, canHaveDenormalOutput); - CHECK_SIZE_FORJMP(csz, doNonInlineIf_) - if (csz < 0) RET_MINUS1_FAIL("if coc 2 fail") - // update jump address - if (bufOut) GLUE_JMP_SET_OFFSET(bufOut + parm_size, csz); - parm_size += csz; - if (fUse1 > *fpStackUse) *fpStackUse = fUse1; - } - return rv_offset + parm_size; - } - } - { - // special case: while - if (op->opcodeType == OPCODETYPE_FUNC1 && op->fntype == FN_WHILE) - { - *calledRvType = RETURNVALUE_BOOL; - { - unsigned char *jzoutpt; - unsigned char *looppt; - int32_t parm_size = 0, subsz; - if (bufOut_len < parm_size + (int32_t)(GLUE_WHILE_SETUP_SIZE + sizeof(GLUE_WHILE_BEGIN))) RET_MINUS1_FAIL("while size fail 1") - if (bufOut) memcpy(bufOut + parm_size, GLUE_WHILE_SETUP, GLUE_WHILE_SETUP_SIZE); - parm_size += GLUE_WHILE_SETUP_SIZE; - looppt = bufOut + parm_size; - if (bufOut) memcpy(bufOut + parm_size, GLUE_WHILE_BEGIN, sizeof(GLUE_WHILE_BEGIN)); - parm_size += sizeof(GLUE_WHILE_BEGIN); - subsz = compileOpcodes(ctx, op->parms.parms[0], bufOut ? (bufOut + parm_size) : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, RETURNVALUE_BOOL, NULL, fpStackUse, NULL); - if (subsz < 0) RET_MINUS1_FAIL("while coc fail") - if (bufOut_len < parm_size + (int32_t)(sizeof(GLUE_WHILE_END) + sizeof(GLUE_WHILE_CHECK_RV))) RET_MINUS1_FAIL("which size fial 2") - parm_size += subsz; - if (bufOut) memcpy(bufOut + parm_size, GLUE_WHILE_END, sizeof(GLUE_WHILE_END)); - parm_size += sizeof(GLUE_WHILE_END); - jzoutpt = bufOut + parm_size; - if (bufOut) memcpy(bufOut + parm_size, GLUE_WHILE_CHECK_RV, sizeof(GLUE_WHILE_CHECK_RV)); - parm_size += sizeof(GLUE_WHILE_CHECK_RV); - if (bufOut) - { - GLUE_JMP_SET_OFFSET(bufOut + parm_size, (looppt - (bufOut + parm_size))); - GLUE_JMP_SET_OFFSET(jzoutpt, (bufOut + parm_size) - jzoutpt); - } - return rv_offset + parm_size; - } - } - // special case: loop - if (op->opcodeType == OPCODETYPE_FUNC2 && op->fntype == FN_LOOP) - { - int32_t fUse1; - int32_t parm_size = compileOpcodes(ctx, op->parms.parms[0], bufOut, bufOut_len, computTableSize, namespacePathToThis, RETURNVALUE_FPSTACK, NULL, &fUse1, NULL); - if (parm_size < 0) RET_MINUS1_FAIL("loop coc fail") - *calledRvType = RETURNVALUE_BOOL; - if (fUse1 > *fpStackUse) *fpStackUse = fUse1; - { - int32_t subsz; - int32_t fUse2 = 0; - unsigned char *skipptr1, *loopdest; - if (bufOut_len < parm_size + (int32_t)(sizeof(GLUE_LOOP_LOADCNT) + GLUE_LOOP_CLAMPCNT_SIZE + GLUE_LOOP_BEGIN_SIZE)) RET_MINUS1_FAIL("loop size fail") - // store, convert to int32_t, compare against 1, if less than, skip to end - if (bufOut) memcpy(bufOut + parm_size, GLUE_LOOP_LOADCNT, sizeof(GLUE_LOOP_LOADCNT)); - parm_size += sizeof(GLUE_LOOP_LOADCNT); - skipptr1 = bufOut + parm_size; - // compare aginst max loop length, jump to loop start if not above it - if (bufOut) memcpy(bufOut + parm_size, GLUE_LOOP_CLAMPCNT, GLUE_LOOP_CLAMPCNT_SIZE); - parm_size += GLUE_LOOP_CLAMPCNT_SIZE; - // loop code: - loopdest = bufOut + parm_size; - if (bufOut) memcpy(bufOut + parm_size, GLUE_LOOP_BEGIN, GLUE_LOOP_BEGIN_SIZE); - parm_size += GLUE_LOOP_BEGIN_SIZE; - subsz = compileOpcodes(ctx, op->parms.parms[1], bufOut ? (bufOut + parm_size) : NULL, bufOut_len - parm_size, computTableSize, namespacePathToThis, RETURNVALUE_IGNORE, NULL, &fUse2, NULL); - if (subsz < 0) RET_MINUS1_FAIL("loop coc fail") - if (fUse2 > *fpStackUse) *fpStackUse = fUse2; - parm_size += subsz; - if (bufOut_len < parm_size + (int32_t)sizeof(GLUE_LOOP_END)) RET_MINUS1_FAIL("loop size fail 2") - if (bufOut) memcpy(bufOut + parm_size, GLUE_LOOP_END, sizeof(GLUE_LOOP_END)); - parm_size += sizeof(GLUE_LOOP_END); - if (bufOut) - { - GLUE_JMP_SET_OFFSET(bufOut + parm_size, loopdest - (bufOut + parm_size)); - GLUE_JMP_SET_OFFSET(skipptr1, (bufOut + parm_size) - skipptr1); - } - return rv_offset + parm_size; - } - } - } - switch (op->opcodeType) - { - case OPCODETYPE_DIRECTVALUE: - if (preferredReturnValues == RETURNVALUE_BOOL) - { - int32_t w = fabsf(op->parms.dv.directValue) >= NSEEL_CLOSEFACTOR; - int32_t wsz = (w ? sizeof(GLUE_SET_P1_NZ) : sizeof(GLUE_SET_P1_Z)); - *calledRvType = RETURNVALUE_BOOL; - if (bufOut_len < wsz) RET_MINUS1_FAIL("direct int32_t size fail3") - if (bufOut) memcpy(bufOut, w ? GLUE_SET_P1_NZ : GLUE_SET_P1_Z, wsz); - return rv_offset + wsz; - } - else if (preferredReturnValues & RETURNVALUE_FPSTACK) - { -#ifdef GLUE_HAS_FLDZ - if (op->parms.dv.directValue == 0.0f) - { - *fpStackUse = 1; - *calledRvType = RETURNVALUE_FPSTACK; - if (bufOut_len < sizeof(GLUE_FLDZ)) RET_MINUS1_FAIL("direct fp fail 1") - if (bufOut) memcpy(bufOut, GLUE_FLDZ, sizeof(GLUE_FLDZ)); - return rv_offset + sizeof(GLUE_FLDZ); - } -#endif -#ifdef GLUE_HAS_FLD1 - if (op->parms.dv.directValue == 1.0f) - { - *fpStackUse = 1; - *calledRvType = RETURNVALUE_FPSTACK; - if (bufOut_len < sizeof(GLUE_FLD1)) RET_MINUS1_FAIL("direct fp fail 1") - if (bufOut) memcpy(bufOut, GLUE_FLD1, sizeof(GLUE_FLD1)); - return rv_offset + sizeof(GLUE_FLD1); - } -#endif - } - // fall through - case OPCODETYPE_DIRECTVALUE_TEMPSTRING: - case OPCODETYPE_VALUE_FROM_NAMESPACENAME: - case OPCODETYPE_VARPTR: - case OPCODETYPE_VARPTRPTR: -#ifdef GLUE_MOV_PX_DIRECTVALUE_TOSTACK_SIZE - if (OPCODE_IS_TRIVIAL(op)) - { - if (preferredReturnValues & RETURNVALUE_FPSTACK) - { - *fpStackUse = 1; - if (bufOut_len < GLUE_MOV_PX_DIRECTVALUE_TOSTACK_SIZE) RET_MINUS1_FAIL("direct fp fail 2") - if (bufOut) - { - if (generateValueToReg(ctx, op, bufOut, -1, namespacePathToThis, 1 /*allow caching*/) < 0) RET_MINUS1_FAIL("direct fp fail gvr") - } - *calledRvType = RETURNVALUE_FPSTACK; - return rv_offset + GLUE_MOV_PX_DIRECTVALUE_TOSTACK_SIZE; - } - } -#endif - if (bufOut_len < GLUE_MOV_PX_DIRECTVALUE_SIZE) - { - RET_MINUS1_FAIL("direct value fail 1") - } - if (bufOut) - { - if (generateValueToReg(ctx, op, bufOut, 0, namespacePathToThis, !!(preferredReturnValues&RETURNVALUE_FPSTACK)/*cache if going to the fp stack*/) < 0) RET_MINUS1_FAIL("direct value gvr fail3") - } - return rv_offset + GLUE_MOV_PX_DIRECTVALUE_SIZE; - case OPCODETYPE_FUNCX: - case OPCODETYPE_FUNC1: - case OPCODETYPE_FUNC2: - case OPCODETYPE_FUNC3: - if (op->fntype == FUNCTYPE_EELFUNC) - { - int32_t a; - a = compileEelFunctionCall(ctx, op, bufOut, bufOut_len, computTableSize, namespacePathToThis, calledRvType, fpStackUse, canHaveDenormalOutput); - if (a < 0) return a; - rv_offset += a; - } - else - { - int32_t a; - a = compileNativeFunctionCall(ctx, op, bufOut, bufOut_len, computTableSize, namespacePathToThis, calledRvType, fpStackUse, preferredReturnValues, canHaveDenormalOutput); - if (a < 0)return a; - rv_offset += a; - } - return rv_offset; - } - RET_MINUS1_FAIL("default opcode fail") -} -int32_t compileOpcodes(compileContext *ctx, opcodeRec *op, unsigned char *bufOut, int32_t bufOut_len, int32_t *computTableSize, const namespaceInformation *namespacePathToThis, - int32_t supportedReturnValues, int32_t *rvType, int32_t *fpStackUse, int32_t *canHaveDenormalOutput) -{ - int32_t code_returns = RETURNVALUE_NORMAL; - int32_t fpsu = 0; - int32_t codesz; - int32_t denorm = 0; - codesz = compileOpcodesInternal(ctx, op, bufOut, bufOut_len, computTableSize, namespacePathToThis, &code_returns, supportedReturnValues, &fpsu, &denorm); - if (denorm && canHaveDenormalOutput) *canHaveDenormalOutput = 1; - if (codesz < 0) return codesz; - if (fpStackUse) *fpStackUse = fpsu; - if (bufOut) bufOut += codesz; - bufOut_len -= codesz; - if (code_returns == RETURNVALUE_BOOL && !(supportedReturnValues & RETURNVALUE_BOOL) && supportedReturnValues) - { - int32_t stubsize; - void *stub = GLUE_realAddress(nseel_asm_booltofp, nseel_asm_booltofp_end, &stubsize); - if (!stub || bufOut_len < stubsize) RET_MINUS1_FAIL(stub ? "booltofp size" : "booltfp addr") - if (bufOut) - { - memcpy(bufOut, stub, stubsize); - bufOut += stubsize; - } - codesz += stubsize; - bufOut_len -= stubsize; - code_returns = RETURNVALUE_FPSTACK; - } - // default processing of code_returns to meet return value requirements - if (supportedReturnValues & code_returns) - { - if (rvType) *rvType = code_returns; - return codesz; - } - if (rvType) *rvType = RETURNVALUE_IGNORE; - if (code_returns == RETURNVALUE_NORMAL) - { - if (supportedReturnValues & (RETURNVALUE_FPSTACK | RETURNVALUE_BOOL)) - { - if (bufOut_len < GLUE_PUSH_VAL_AT_PX_TO_FPSTACK_SIZE) RET_MINUS1_FAIL("pushvalatpxtofpstack,size") - if (bufOut) - { - GLUE_PUSH_VAL_AT_PX_TO_FPSTACK(bufOut, 0); // always fld qword [eax] but we might change that later - bufOut += GLUE_PUSH_VAL_AT_PX_TO_FPSTACK_SIZE; - } - codesz += GLUE_PUSH_VAL_AT_PX_TO_FPSTACK_SIZE; - bufOut_len -= GLUE_PUSH_VAL_AT_PX_TO_FPSTACK_SIZE; - if (supportedReturnValues & RETURNVALUE_BOOL) - { - code_returns = RETURNVALUE_FPSTACK; - } - else - { - if (rvType) *rvType = RETURNVALUE_FPSTACK; - } - } - } - if (code_returns == RETURNVALUE_FPSTACK) - { - if (supportedReturnValues & (RETURNVALUE_BOOL | RETURNVALUE_BOOL_REVERSED)) - { - int32_t stubsize; - void *stub; - if (supportedReturnValues & RETURNVALUE_BOOL_REVERSED) - { - if (rvType) *rvType = RETURNVALUE_BOOL_REVERSED; - stub = GLUE_realAddress(nseel_asm_fptobool_rev, nseel_asm_fptobool_rev_end, &stubsize); - } - else - { - if (rvType) *rvType = RETURNVALUE_BOOL; - stub = GLUE_realAddress(nseel_asm_fptobool, nseel_asm_fptobool_end, &stubsize); - } - if (!stub || bufOut_len < stubsize) RET_MINUS1_FAIL(stub ? "fptobool size" : "fptobool addr") - if (bufOut) - { - memcpy(bufOut, stub, stubsize); - bufOut += stubsize; - } - codesz += stubsize; - bufOut_len -= stubsize; - } - else if (supportedReturnValues & RETURNVALUE_NORMAL) - { - if (computTableSize) (*computTableSize)++; - if (bufOut_len < GLUE_POP_FPSTACK_TO_WTP_TO_PX_SIZE) RET_MINUS1_FAIL("popfpstacktowtptopxsize") - // generate fp-pop to temp space - if (bufOut) GLUE_POP_FPSTACK_TO_WTP_TO_PX(bufOut, 0); - codesz += GLUE_POP_FPSTACK_TO_WTP_TO_PX_SIZE; - if (rvType) *rvType = RETURNVALUE_NORMAL; - } - else - { - // toss return value that will be ignored - if (bufOut_len < GLUE_POP_FPSTACK_SIZE) RET_MINUS1_FAIL("popfpstack size") - if (bufOut) memcpy(bufOut, GLUE_POP_FPSTACK, GLUE_POP_FPSTACK_SIZE); - codesz += GLUE_POP_FPSTACK_SIZE; - } - } - return codesz; -} -//------------------------------------------------------------------------------ -NSEEL_CODEHANDLE NSEEL_code_compile(NSEEL_VMCTX _ctx, const char *_expression, int32_t lineoffs) -{ - return NSEEL_code_compile_ex(_ctx, _expression, lineoffs, 0); -} -typedef struct topLevelCodeSegmentRec { - struct topLevelCodeSegmentRec *_next; - void *code; - int32_t codesz; - int32_t tmptable_use; -} topLevelCodeSegmentRec; -NSEEL_CODEHANDLE NSEEL_code_compile_ex(NSEEL_VMCTX _ctx, const char *_expression, int32_t lineoffs, int32_t compile_flags) -{ - compileContext *ctx = (compileContext*)_ctx; - const char *endptr; - const char *_expression_end; - codeHandleType *handle; - topLevelCodeSegmentRec *startpts_tail = NULL; - topLevelCodeSegmentRec *startpts = NULL; - _codeHandleFunctionRec *oldCommonFunctionList; - int32_t curtabptr_sz = 0; - void *curtabptr = NULL; - int32_t had_err = 0; - if (!ctx) return 0; - ctx->directValueCache = 0; - ctx->gotEndOfInput = 0; - if (compile_flags & NSEEL_CODE_COMPILE_FLAG_COMMONFUNCS_RESET) - { - ctx->functions_common = NULL; // reset common function list - } - else - { - // reset common compiled function code, forcing a recompile if shared - _codeHandleFunctionRec *a = ctx->functions_common; - while (a) - { - _codeHandleFunctionRec *b = a->derivedCopies; - if (a->localstorage) - { - // force local storage actual values to be reallocated if used again - memset(a->localstorage, 0, sizeof(float *) * a->localstorage_size); - } - a->startptr = NULL; // force this copy to be recompiled - while (b) - { - b->startptr = NULL; // force derived copies to get recompiled - // no need to reset b->localstorage, since it points to a->localstorage - b = b->derivedCopies; - } - a = a->next; - } - } - ctx->last_error_string[0] = 0; - if (!_expression || !*_expression) return 0; - _expression_end = _expression + strlen(_expression); - oldCommonFunctionList = ctx->functions_common; - ctx->isGeneratingCommonFunction = 0; - ctx->isSharedFunctions = !!(compile_flags & NSEEL_CODE_COMPILE_FLAG_COMMONFUNCS); - ctx->functions_local = NULL; - freeBlocks(&ctx->tmpblocks_head); // free blocks - freeBlocks(&ctx->blocks_head); // free blocks - freeBlocks(&ctx->blocks_head_data); // free blocks - memset(ctx->l_stats, 0, sizeof(ctx->l_stats)); - handle = (codeHandleType*)newDataBlock(sizeof(codeHandleType), 8); - if (!handle) - { - return 0; - } - memset(handle, 0, sizeof(codeHandleType)); - ctx->l_stats[0] += (int32_t)(_expression_end - _expression); - ctx->tmpCodeHandle = handle; - endptr = _expression; - while (*endptr) - { - int32_t computTableTop = 0; - int32_t startptr_size = 0; - void *startptr = NULL; - opcodeRec *start_opcode = NULL; - const char *expr = endptr; - int32_t function_numparms = 0; - char is_fname[NSEEL_MAX_VARIABLE_NAMELEN + 1]; - is_fname[0] = 0; - memset(ctx->function_localTable_Size, 0, sizeof(ctx->function_localTable_Size)); - memset(ctx->function_localTable_Names, 0, sizeof(ctx->function_localTable_Names)); - ctx->function_localTable_ValuePtrs = 0; - ctx->function_usesNamespaces = 0; - ctx->function_curName = NULL; - ctx->function_globalFlag = 0; - ctx->errVar = 0; - // single out top level segment - { - int32_t had_something = 0, pcnt = 0, pcnt2 = 0; - int32_t state = 0; - for (;;) - { - int32_t l; - const char *p = nseel_simple_tokenizer(&endptr, _expression_end, &l, &state); - if (!p) - { - if (pcnt || pcnt2) ctx->gotEndOfInput |= 4; - break; - } - if (*p == ';') - { - if (had_something && !pcnt && !pcnt2) break; - } - else if (*p == '/' && l > 1 && (p[1] == '/' || p[1] == '*')) - { - if (l > 19 && !strncmp(p, "//#eel-no-optimize:", 19)) - { - //0 = atoi(p + 19); - } - } - else - { - if (!had_something) - { - expr = p; - had_something = 1; - } - if (*p == '(') pcnt++; - else if (*p == ')') { if (--pcnt < 0) pcnt = 0; } - else if (*p == '[') pcnt2++; - else if (*p == ']') { if (--pcnt2 < 0) pcnt2 = 0; } - } - } - if (!*expr || !had_something) break; - } - // parse - { - int32_t tmplen, funcname_len; - const char *p = expr; - const char *tok1 = nseel_simple_tokenizer(&p, endptr, &tmplen, NULL); - const char *funcname = nseel_simple_tokenizer(&p, endptr, &funcname_len, NULL); - if (tok1 && funcname && tmplen == 8 && !strncmp(tok1, "function", 8) && (isalpha(funcname[0]) || funcname[0] == '_')) - { - int32_t had_parms_locals = 0; - if (funcname_len > (int32_t)(sizeof(is_fname) - 1)) - funcname_len = (int32_t)(sizeof(is_fname) - 1); - memcpy(is_fname, funcname, funcname_len); - is_fname[funcname_len] = 0; - ctx->function_curName = is_fname; // only assigned for the duration of the loop, cleared later //-V507 - while (NULL != (tok1 = nseel_simple_tokenizer(&p, endptr, &tmplen, NULL))) - { - int32_t is_parms = 0, localTableContext = 0; - int32_t maxcnt = 0; - const char *sp_save; - if (tok1[0] == '(') - { - if (had_parms_locals) - { - expr = p - 1; // begin compilation at this code! - break; - } - is_parms = 1; - } - else - { - if (tmplen == 5 && !strncmp(tok1, "local", tmplen)) localTableContext = 0; - else if (tmplen == 6 && !strncmp(tok1, "static", tmplen)) localTableContext = 0; - else if (tmplen == 8 && !strncmp(tok1, "instance", tmplen)) localTableContext = 1; - else if ((tmplen == 7 && !strncmp(tok1, "globals", tmplen)) || - (tmplen == 6 && !strncmp(tok1, "global", tmplen))) - { - ctx->function_globalFlag = 1; - localTableContext = 2; - } - else break; // unknown token! - tok1 = nseel_simple_tokenizer(&p, endptr, &tmplen, NULL); - if (!tok1 || tok1[0] != '(') break; - } - had_parms_locals = 1; - sp_save = p; - while (NULL != (tok1 = nseel_simple_tokenizer(&p, endptr, &tmplen, NULL))) - { - if (tok1[0] == ')') break; - if (*tok1 == '#' && localTableContext != 1 && localTableContext != 2) - { - ctx->errVar = (int32_t)(tok1 - _expression); - lstrcpyn_safe(ctx->last_error_string, "#string can only be in instance() or globals()", sizeof(ctx->last_error_string)); - goto had_error; - } - if (isalpha(*tok1) || *tok1 == '_' || *tok1 == '#') - { - maxcnt++; - if (p < endptr && *p == '*') - { - if (!is_parms && localTableContext != 2) - { - ctx->errVar = (int32_t)(p - _expression); - lstrcpyn_safe(ctx->last_error_string, "namespace* can only be used in parameters or globals()", sizeof(ctx->last_error_string)); - goto had_error; - } - p++; - } - } - else if (*tok1 != ',') - { - ctx->errVar = (int32_t)(tok1 - _expression); - lstrcpyn_safe(ctx->last_error_string, "unknown character in function parameters", sizeof(ctx->last_error_string)); - goto had_error; - } - } - if (tok1 && maxcnt > 0) - { - char **ot = ctx->function_localTable_Names[localTableContext]; - const int32_t osz = ctx->function_localTable_Size[localTableContext]; - maxcnt += osz; - ctx->function_localTable_Names[localTableContext] = (char **)newTmpBlock(ctx, sizeof(char *) * maxcnt); - if (ctx->function_localTable_Names[localTableContext]) - { - int32_t i = osz; - if (osz && ot) memcpy(ctx->function_localTable_Names[localTableContext], ot, sizeof(char *) * osz); - p = sp_save; - while (NULL != (tok1 = nseel_simple_tokenizer(&p, endptr, &tmplen, NULL))) - { - if (tok1[0] == ')') break; - if (isalpha(*tok1) || *tok1 == '_' || *tok1 == '#') - { - char *newstr; - int32_t l = tmplen; - if (*p == '*') // xyz* for namespace - { - p++; - l++; - } - if (l > NSEEL_MAX_VARIABLE_NAMELEN) l = NSEEL_MAX_VARIABLE_NAMELEN; - newstr = newTmpBlock(ctx, l + 1); - if (newstr) - { - memcpy(newstr, tok1, l); - newstr[l] = 0; - ctx->function_localTable_Names[localTableContext][i++] = newstr; - } - } - } - ctx->function_localTable_Size[localTableContext] = i; - if (is_parms) function_numparms = i; - } - } - } - } - } - if (ctx->function_localTable_Size[0] > 0) - { - ctx->function_localTable_ValuePtrs = - ctx->isSharedFunctions ? newDataBlock(ctx->function_localTable_Size[0] * sizeof(float *), 8) : - newTmpBlock(ctx, ctx->function_localTable_Size[0] * sizeof(float *)); - if (!ctx->function_localTable_ValuePtrs) - { - ctx->function_localTable_Size[0] = 0; - function_numparms = 0; - } - else - { - memset(ctx->function_localTable_ValuePtrs, 0, sizeof(float *) * ctx->function_localTable_Size[0]); // force values to be allocated - } - } - { - int32_t nseelparse(compileContext* context); - void nseelrestart(void *input_file, void *yyscanner); - ctx->rdbuf_start = _expression; - ctx->rdbuf = expr; - ctx->rdbuf_end = endptr; - if (!nseelparse(ctx) && !ctx->errVar) - start_opcode = ctx->result; - ctx->rdbuf = NULL; - } - if (start_opcode) - { - int32_t rvMode = 0, fUse = 0; - optimizeOpcodes(ctx, start_opcode, is_fname[0] ? 1 : 0); - startptr_size = compileOpcodes(ctx, start_opcode, NULL, 1024 * 1024 * 256, NULL, NULL, - is_fname[0] ? (RETURNVALUE_NORMAL | RETURNVALUE_FPSTACK) : RETURNVALUE_IGNORE, &rvMode, &fUse, NULL); // if not a function, force return value as address (avoid having to pop it ourselves - // if a function, allow the code to decide how return values are generated - if (is_fname[0]) - { - _codeHandleFunctionRec *fr = ctx->isSharedFunctions ? newDataBlock(sizeof(_codeHandleFunctionRec), 8) : - newTmpBlock(ctx, sizeof(_codeHandleFunctionRec)); - if (fr) - { - memset(fr, 0, sizeof(_codeHandleFunctionRec)); - fr->startptr_size = startptr_size; - fr->opcodes = start_opcode; - fr->rvMode = rvMode; - fr->fpStackUsage = fUse; - fr->tmpspace_req = computTableTop; - if (ctx->function_localTable_Size[0] > 0 && ctx->function_localTable_ValuePtrs) - { - if (ctx->function_localTable_Names[0]) - { - int32_t i; - for (i = 0; i < function_numparms; i++) - { - const char *nptr = ctx->function_localTable_Names[0][i]; - if (nptr && *nptr && nptr[strlen(nptr) - 1] == '*') - { - fr->parameterAsNamespaceMask |= ((uint32_t)1) << i; - } - } - } - fr->num_params = function_numparms; - fr->localstorage = ctx->function_localTable_ValuePtrs; - fr->localstorage_size = ctx->function_localTable_Size[0]; - } - fr->usesNamespaces = ctx->function_usesNamespaces; - fr->isCommonFunction = ctx->isSharedFunctions; - lstrcpyn_safe(fr->fname, is_fname, sizeof(fr->fname)); - if (ctx->isSharedFunctions) - { - fr->next = ctx->functions_common; - ctx->functions_common = fr; - } - else - { - fr->next = ctx->functions_local; - ctx->functions_local = fr; - } - } - continue; - } - if (!startptr_size) continue; // optimized away - if (startptr_size > 0) - { - startptr = newTmpBlock(ctx, startptr_size); - if (startptr) - { - startptr_size = compileOpcodes(ctx, start_opcode, (unsigned char*)startptr, startptr_size, &computTableTop, NULL, RETURNVALUE_IGNORE, NULL, NULL, NULL); - if (startptr_size <= 0) startptr = NULL; - } - } - } - if (!startptr) - { - had_error: - //if (!ctx->last_error_string[0]) - { - int32_t byteoffs = ctx->errVar; - int32_t linenumber; - char cur_err[sizeof(ctx->last_error_string)]; - lstrcpyn_safe(cur_err, ctx->last_error_string, sizeof(cur_err)); - if (cur_err[0]) lstrcatn(cur_err, ": ", sizeof(cur_err)); - else lstrcpyn_safe(cur_err, "syntax error: ", sizeof(cur_err)); - if (_expression + byteoffs >= _expression_end) - { - if (ctx->gotEndOfInput & 4) byteoffs = (int32_t)(expr - _expression); - else byteoffs = (int32_t)(_expression_end - _expression); - } - if (byteoffs < 0) byteoffs = 0; - linenumber = findLineNumber(_expression, byteoffs) + 1; - if (ctx->gotEndOfInput & 4) - { - stbsp_snprintf(ctx->last_error_string, sizeof(ctx->last_error_string), "%d: %smissing ) or ]", linenumber + lineoffs, cur_err); - } - else - { - const char *p = _expression + byteoffs; - int32_t x = 0, right_amt_nospace = 0, left_amt_nospace = 0; - while (x < 32 && p - x > _expression && p[-x] != '\r' && p[-x] != '\n') - { - if (!isspace(p[-x])) left_amt_nospace = x; - x++; - } - x = 0; - while (x < 60 && p[x] && p[x] != '\r' && p[x] != '\n') - { - if (!isspace(p[x])) right_amt_nospace = x; - x++; - } - if (right_amt_nospace < 1) right_amt_nospace = 1; - // display left_amt >>>> right_amt_nospace - if (left_amt_nospace > 0) - stbsp_snprintf(ctx->last_error_string, sizeof(ctx->last_error_string), "%d: %s'%.*s %.*s'", linenumber + lineoffs, cur_err, - left_amt_nospace, p - left_amt_nospace, - right_amt_nospace, p); - else - stbsp_snprintf(ctx->last_error_string, sizeof(ctx->last_error_string), "%d: %s'%.*s'", linenumber + lineoffs, cur_err, right_amt_nospace, p); - } - } - startpts = NULL; - startpts_tail = NULL; - had_err = 1; - break; - } - if (!is_fname[0]) // redundant check (if is_fname[0] is set and we succeeded, it should continue) - // but we'll be on the safe side - { - topLevelCodeSegmentRec *p = newTmpBlock(ctx, sizeof(topLevelCodeSegmentRec)); - p->_next = 0; - p->code = startptr; - p->codesz = startptr_size; - p->tmptable_use = computTableTop; - if (!startpts_tail) startpts_tail = startpts = p; - else - { - startpts_tail->_next = p; - startpts_tail = p; - } - if (curtabptr_sz < computTableTop) - { - curtabptr_sz = computTableTop; - } - } - } - memset(ctx->function_localTable_Size, 0, sizeof(ctx->function_localTable_Size)); - memset(ctx->function_localTable_Names, 0, sizeof(ctx->function_localTable_Names)); - ctx->function_localTable_ValuePtrs = 0; - ctx->function_usesNamespaces = 0; - ctx->function_curName = NULL; - ctx->function_globalFlag = 0; - ctx->tmpCodeHandle = NULL; - if (startpts) - { - curtabptr_sz += 2; // many functions use the worktable for temporary storage of up to 2 float's - handle->workTable_size = curtabptr_sz; - handle->workTable = curtabptr = newDataBlock((curtabptr_sz + MIN_COMPUTABLE_SIZE + COMPUTABLE_EXTRA_SPACE) * sizeof(float), 32); - if (!curtabptr) startpts = NULL; - } - if (startpts || (!had_err && (compile_flags & NSEEL_CODE_COMPILE_FLAG_COMMONFUNCS))) - { - unsigned char *writeptr; - topLevelCodeSegmentRec *p = startpts; - int32_t size = sizeof(GLUE_RET); // for ret at end :) - int32_t wtpos = 0; - // now we build one big code segment out of our list of them, inserting a mov esi, computable before each item as necessary - while (p) - { - if (wtpos <= 0) - { - wtpos = MIN_COMPUTABLE_SIZE; - size += GLUE_RESET_WTP(NULL, 0); - } - size += p->codesz; - wtpos -= p->tmptable_use; - p = p->_next; - } - handle->code = newCodeBlock(size, 32); - if (handle->code) - { - writeptr = (unsigned char *)handle->code; - p = startpts; - wtpos = 0; - while (p) - { - if (wtpos <= 0) - { - wtpos = MIN_COMPUTABLE_SIZE; - writeptr += GLUE_RESET_WTP(writeptr, curtabptr); - } - memcpy(writeptr, (char*)p->code, p->codesz); - writeptr += p->codesz; - wtpos -= p->tmptable_use; - p = p->_next; - } - memcpy(writeptr, &GLUE_RET, sizeof(GLUE_RET)); writeptr += sizeof(GLUE_RET); - ctx->l_stats[1] = size; - handle->code_size = (int32_t)(writeptr - (unsigned char *)handle->code); -#ifdef __arm__ - //__clear_cache(handle->code, writeptr); -#endif - } - handle->blocks = ctx->blocks_head; - handle->blocks_data = ctx->blocks_head_data; - ctx->blocks_head = 0; - ctx->blocks_head_data = 0; - } - else - { - // failed compiling, or failed calloc() - handle = NULL; // return NULL (after resetting blocks_head) - } - ctx->directValueCache = 0; - ctx->functions_local = NULL; - ctx->isGeneratingCommonFunction = 0; - ctx->isSharedFunctions = 0; - freeBlocks(&ctx->tmpblocks_head); // free blocks - freeBlocks(&ctx->blocks_head); // free blocks of code (will be nonzero only on error) - freeBlocks(&ctx->blocks_head_data); // free blocks of data (will be nonzero only on error) - if (handle) - { - handle->ramPtr = ctx->ram_state; - memcpy(handle->code_stats, ctx->l_stats, sizeof(ctx->l_stats)); - nseel_evallib_stats[0] += ctx->l_stats[0]; - nseel_evallib_stats[1] += ctx->l_stats[1]; - nseel_evallib_stats[2] += ctx->l_stats[2]; - nseel_evallib_stats[3] += ctx->l_stats[3]; - nseel_evallib_stats[4]++; - } - else - { - ctx->functions_common = oldCommonFunctionList; // failed compiling, remove any added common functions from the list - // remove any derived copies of functions due to error, since we may have added some that have been freed - while (oldCommonFunctionList) - { - oldCommonFunctionList->derivedCopies = NULL; - oldCommonFunctionList = oldCommonFunctionList->next; - } - } - memset(ctx->l_stats, 0, sizeof(ctx->l_stats)); - return (NSEEL_CODEHANDLE)handle; -} -//------------------------------------------------------------------------------ -void NSEEL_code_execute(NSEEL_CODEHANDLE code) -{ - codeHandleType *h = (codeHandleType *)code; - INT_PTR codeptr = (INT_PTR)h->code; - INT_PTR tabptr = (INT_PTR)h->workTable; - GLUE_CALL_CODE(tabptr, codeptr, (INT_PTR)h->ramPtr); -} -int32_t NSEEL_code_geterror_flag(NSEEL_VMCTX ctx) -{ - compileContext *c = (compileContext*)ctx; - if (c) return (c->gotEndOfInput ? 1 : 0); - return 0; -} -char *NSEEL_code_getcodeerror(NSEEL_VMCTX ctx) -{ - compileContext *c = (compileContext*)ctx; - if (ctx && c->last_error_string[0]) return c->last_error_string; - return 0; -} -//------------------------------------------------------------------------------ -void NSEEL_code_free(NSEEL_CODEHANDLE code) -{ - codeHandleType *h = (codeHandleType *)code; - if (h != NULL) - { - nseel_evallib_stats[0] -= h->code_stats[0]; - nseel_evallib_stats[1] -= h->code_stats[1]; - nseel_evallib_stats[2] -= h->code_stats[2]; - nseel_evallib_stats[3] -= h->code_stats[3]; - nseel_evallib_stats[4]--; - freeBlocks(&h->blocks); - freeBlocks(&h->blocks_data); - } -} -//------------------------------------------------------------------------------ -void NSEEL_VM_freevars(NSEEL_VMCTX _ctx) -{ - if (_ctx) - { - compileContext *ctx = (compileContext*)_ctx; - free(ctx->varTable_Values); - free(ctx->varTable_Names); - ctx->varTable_Values = 0; - ctx->varTable_Names = 0; - ctx->varTable_numBlocks = 0; - if (ctx->numberOfConvolver) - { - for (uint32_t i = 0; i < ctx->numberOfConvolver; i++) - { - void *ptr = ctx->convolverSink[i]; - int32_t convType = ctx->convolverType[i]; - if (convType == 1) - { - FFTConvolver1x1 *conv = (FFTConvolver1x1*)ptr; - FFTConvolver1x1Free(conv); - free(conv); - } - if (convType == 2) - { - FFTConvolver2x2 *conv = (FFTConvolver2x2*)ptr; - FFTConvolver2x2Free(conv); - free(conv); - } - if (convType == 4) - { - FFTConvolver2x4x2 *conv = (FFTConvolver2x4x2*)ptr; - FFTConvolver2x4x2Free(conv); - free(conv); - } - } - if (ctx->convolverMap) - free(ctx->convolverMap); - if (ctx->convolverType) - free(ctx->convolverType); - if (ctx->convolverSink) - free(ctx->convolverSink); - ctx->convolverMap = 0; - ctx->convolverType = 0; - ctx->convolverSink = 0; - ctx->numberOfConvolver = 0; - } - if (ctx->numberOfThreads) - { - for (uint32_t i = 0; i < ctx->numberOfThreads; i++) - { - thread_delete(ctx, i); - free(ctx->codePtrThreadSink[i]); - } - ctx->numberOfThreads = 0; - } - if (ctx->m_string_context) - { - Freeel_string_context_state(ctx->m_string_context); - free(ctx->m_string_context); - ctx->m_string_context = 0; - } - } -} -void NSEEL_init_string(NSEEL_VMCTX _ctx) -{ - if (_ctx) - { - compileContext *ctx = (compileContext*)_ctx; - ctx->m_string_context = (eel_string_context_state*)malloc(sizeof(eel_string_context_state)); - Initeel_string_context_state(ctx->m_string_context); - } -} -NSEEL_VMCTX NSEEL_VM_alloc() // return a handle -{ - // Context - compileContext *ctx = (compileContext*)calloc(1, sizeof(compileContext)); - if (ctx) - { - ctx->caller_this = ctx; - ctx->scanner = ctx; - ctx->onString = addStringCallback; - NSEEL_init_string((NSEEL_VMCTX)ctx); - } - return ctx; -} -void NSEEL_VM_SetFunctionValidator(NSEEL_VMCTX _ctx, const char * (*validateFunc)(const char *fn_name, void *user), void *user) -{ - if (_ctx) - { - compileContext *ctx = (compileContext*)_ctx; - ctx->func_check = validateFunc; - ctx->func_check_user = user; - } -} -void NSEEL_VM_free(NSEEL_VMCTX _ctx) // free when done with a VM and ALL of its code have been freed, as well -{ - if (_ctx) - { - compileContext *ctx = (compileContext*)_ctx; - NSEEL_VM_freevars(_ctx); - freeBlocks(&ctx->pblocks); - // these should be 0 normally but just in case - freeBlocks(&ctx->tmpblocks_head); // free blocks - freeBlocks(&ctx->blocks_head); // free blocks - freeBlocks(&ctx->blocks_head_data); // free blocks - ctx->scanner = 0; - free(ctx); - } -} -int32_t *NSEEL_code_getstats(NSEEL_CODEHANDLE code) -{ - codeHandleType *h = (codeHandleType *)code; - if (h) - { - return h->code_stats; - } - return 0; -} -void NSEEL_VM_SetStringFunc(NSEEL_VMCTX ctx, float(*onString)(void *caller_this, eelStringSegmentRec *list)) -{ - if (ctx) - { - compileContext *c = (compileContext*)ctx; - c->onString = onString; - } -} -void *NSEEL_PProc_RAM(void *data, int32_t data_size, compileContext *ctx) -{ - if (data_size > 0) data = EEL_GLUE_set_immediate(data, (INT_PTR)ctx->ram_state); - return data; -} -void *NSEEL_PProc_THIS(void *data, int32_t data_size, compileContext *ctx) -{ - if (data_size > 0) data = EEL_GLUE_set_immediate(data, (INT_PTR)ctx->caller_this); - return data; -} -void NSEEL_VM_remove_unused_vars(NSEEL_VMCTX _ctx) -{ - compileContext *ctx = (compileContext*)_ctx; - int32_t wb; - if (ctx) for (wb = 0; wb < ctx->varTable_numBlocks; wb++) - { - int32_t ti; - char **plist = ctx->varTable_Names[wb]; - if (!plist) break; - for (ti = 0; ti < NSEEL_VARS_PER_BLOCK; ti++) - { - if (plist[ti]) - { - varNameHdr *v = ((varNameHdr*)plist[ti]) - 1; - if (!v->refcnt && !v->isreg) - { - plist[ti] = NULL; - } - } - } - } -} -void NSEEL_VM_remove_all_nonreg_vars(NSEEL_VMCTX _ctx) -{ - compileContext *ctx = (compileContext*)_ctx; - int32_t wb; - if (ctx) for (wb = 0; wb < ctx->varTable_numBlocks; wb++) - { - int32_t ti; - char **plist = ctx->varTable_Names[wb]; - if (!plist) break; - for (ti = 0; ti < NSEEL_VARS_PER_BLOCK; ti++) - { - if (plist[ti]) - { - varNameHdr *v = ((varNameHdr*)plist[ti]) - 1; - if (!v->isreg) - { - plist[ti] = NULL; - } - } - } - } -} -void NSEEL_VM_clear_var_refcnts(NSEEL_VMCTX _ctx) -{ - compileContext *ctx = (compileContext*)_ctx; - int32_t wb; - if (ctx) for (wb = 0; wb < ctx->varTable_numBlocks; wb++) - { - int32_t ti; - char **plist = ctx->varTable_Names[wb]; - if (!plist) break; - for (ti = 0; ti < NSEEL_VARS_PER_BLOCK; ti++) - { - if (plist[ti]) - { - varNameHdr *v = ((varNameHdr*)plist[ti]) - 1; - v->refcnt = 0; - } - } - } -} -float *nseel_int_register_var(compileContext *ctx, const char *name, int32_t isReg, const char **namePtrOut) -{ - int32_t match_wb = -1, match_ti = -1; - int32_t wb; - int32_t ti = 0; - for (wb = 0; wb < ctx->varTable_numBlocks; wb++) - { - char **plist = ctx->varTable_Names[wb]; - if (!plist) return NULL; // error! - for (ti = 0; ti < NSEEL_VARS_PER_BLOCK; ti++) - { - if (!plist[ti]) - { - if (match_wb < 0) - { - match_wb = wb; - match_ti = ti; - } - } - else if (!strncmp(plist[ti], name, NSEEL_MAX_VARIABLE_NAMELEN)) - { - varNameHdr *v = ((varNameHdr*)plist[ti]) - 1; - if (isReg < 0) - { - float *p; - return (ctx->varTable_Values && NULL != (p = ctx->varTable_Values[wb])) ? p + ti : NULL; - } - v->refcnt++; - if (isReg) v->isreg = isReg; - if (namePtrOut) *namePtrOut = plist[ti]; - break; - } - } - if (ti < NSEEL_VARS_PER_BLOCK) break; - } - if (isReg < 0) return NULL; - if (wb == ctx->varTable_numBlocks && match_wb >= 0 && match_ti >= 0) - { - wb = match_wb; - ti = match_ti; - } - if (wb == ctx->varTable_numBlocks) - { - ti = 0; - // add new block - if (!(ctx->varTable_numBlocks&(NSEEL_VARS_MALLOC_CHUNKSIZE - 1)) || !ctx->varTable_Values || !ctx->varTable_Names) - { - void *nv = realloc(ctx->varTable_Values, (ctx->varTable_numBlocks + NSEEL_VARS_MALLOC_CHUNKSIZE) * sizeof(float *)); - if (!nv) return NULL; - ctx->varTable_Values = (float **)nv; - nv = realloc(ctx->varTable_Names, (ctx->varTable_numBlocks + NSEEL_VARS_MALLOC_CHUNKSIZE) * sizeof(char **)); - if (!nv) return NULL; - ctx->varTable_Names = (char ***)nv; - } - ctx->varTable_numBlocks++; - ctx->varTable_Values[wb] = (float *)newCtxDataBlock(sizeof(float)*NSEEL_VARS_PER_BLOCK, 8); - ctx->varTable_Names[wb] = (char **)newCtxDataBlock(sizeof(char *)*NSEEL_VARS_PER_BLOCK, 1); - if (ctx->varTable_Values[wb]) - { - memset(ctx->varTable_Values[wb], 0, sizeof(float)*NSEEL_VARS_PER_BLOCK); - } - if (ctx->varTable_Names[wb]) - { - memset(ctx->varTable_Names[wb], 0, sizeof(char *)*NSEEL_VARS_PER_BLOCK); - } - } - if (!ctx->varTable_Names[wb] || !ctx->varTable_Values[wb]) return NULL; - if (!ctx->varTable_Names[wb][ti]) - { - size_t l = strlen(name); - char *b; - varNameHdr *vh; - if (l > NSEEL_MAX_VARIABLE_NAMELEN) l = NSEEL_MAX_VARIABLE_NAMELEN; - b = newCtxDataBlock((int32_t)(sizeof(varNameHdr) + l + 1), 1); - if (!b) return NULL; // malloc fail - vh = (varNameHdr *)b; - vh->refcnt = 1; - vh->isreg = isReg; - b += sizeof(varNameHdr); - memcpy(b, name, l); - b[l] = 0; - ctx->varTable_Names[wb][ti] = b; - ctx->varTable_Values[wb][ti] = 0.0f; - if (namePtrOut) *namePtrOut = b; - } - return ctx->varTable_Values[wb] + ti; -} -//------------------------------------------------------------------------------ -void NSEEL_VM_enumallvars(NSEEL_VMCTX ctx, int32_t(*func)(const char *name, float *val, void *ctx), void *userctx) -{ - compileContext *tctx = (compileContext*)ctx; - int32_t wb; - if (!tctx) return; - for (wb = 0; wb < tctx->varTable_numBlocks; wb++) - { - int32_t ti; - char **plist = tctx->varTable_Names[wb]; - if (!plist) break; - for (ti = 0; ti < NSEEL_VARS_PER_BLOCK; ti++) - { - if (plist[ti] && !func(plist[ti], tctx->varTable_Values[wb] + ti, userctx)) break; - } - if (ti < NSEEL_VARS_PER_BLOCK) - break; - } -} -//------------------------------------------------------------------------------ -float *NSEEL_VM_regvar(NSEEL_VMCTX _ctx, const char *var) -{ - compileContext *ctx = (compileContext*)_ctx; - if (!ctx) return 0; - return nseel_int_register_var(ctx, var, 1, NULL); -} -float *NSEEL_VM_getvar(NSEEL_VMCTX _ctx, const char *var) -{ - compileContext *ctx = (compileContext*)_ctx; - if (!ctx) return 0; - return nseel_int_register_var(ctx, var, -1, NULL); -} -int32_t NSEEL_VM_get_var_refcnt(NSEEL_VMCTX _ctx, const char *name) -{ - compileContext *ctx = (compileContext*)_ctx; - int32_t wb; - if (!ctx) return -1; - for (wb = 0; wb < ctx->varTable_numBlocks; wb++) - { - int32_t ti; - if (!ctx->varTable_Values[wb] || !ctx->varTable_Names[wb]) break; - for (ti = 0; ti < NSEEL_VARS_PER_BLOCK; ti++) - { - if (ctx->varTable_Names[wb][ti] && !stricmp(ctx->varTable_Names[wb][ti], name)) - { - varNameHdr *h = ((varNameHdr *)ctx->varTable_Names[wb][ti]) - 1; - return h->refcnt; - } - } - } - return -1; -} -opcodeRec *nseel_createFunctionByName(compileContext *ctx, const char *name, int32_t np, opcodeRec *code1, opcodeRec *code2, opcodeRec *code3) -{ - int32_t i; - for (i = 0; fnTable1 + i; i++) - { - if (i >= (int32_t)(sizeof(fnTable1) / sizeof(fnTable1[0]))) - break; - functionType *f = fnTable1 + i; - if ((f->nParams&FUNCTIONTYPE_PARAMETERCOUNTMASK) == np && !strcmp(f->name, name)) - { - opcodeRec *o = newOpCode(ctx, NULL, np == 3 ? OPCODETYPE_FUNC3 : np == 2 ? OPCODETYPE_FUNC2 : OPCODETYPE_FUNC1); - if (o) - { - o->fntype = FUNCTYPE_FUNCTIONTYPEREC; - o->fn = f; - o->parms.parms[0] = code1; - o->parms.parms[1] = code2; - o->parms.parms[2] = code3; - } - return o; - } - } - return NULL; -} -#include -//------------------------------------------------------------------------------ -opcodeRec *nseel_translate(compileContext *ctx, const char *tmp, size_t tmplen) // tmplen 0 = null term -{ - // this depends on the string being nul terminated eventually, tmplen is used more as a hint than anything else - if ((tmp[0] == '0' || tmp[0] == '$') && toupper(tmp[1]) == 'X') - { - char *p; - return nseel_createCompiledValue(ctx, (float)strtoul(tmp + 2, &p, 16)); - } - else if (tmp[0] == '$') - { - if (tmp[1] == '~') - { - char *p = (char*)tmp + 2; - uint32_t v = strtoul(tmp + 2, &p, 10); - if (v > 53) v = 53; - return nseel_createCompiledValue(ctx, (float)((((WDL_INT64)1) << v) - 1)); - } - else if (!tmplen ? !stricmp(tmp, "$E") : (tmplen == 2 && !strnicmp(tmp, "$E", 2))) - return nseel_createCompiledValue(ctx, (float)2.71828182845904523536); - else if (!tmplen ? !stricmp(tmp, "$PI") : (tmplen == 3 && !strnicmp(tmp, "$PI", 3))) - return nseel_createCompiledValue(ctx, (float)3.141592653589793238463); - else if (!tmplen ? !stricmp(tmp, "$PHI") : (tmplen == 4 && !strnicmp(tmp, "$PHI", 4))) - return nseel_createCompiledValue(ctx, (float)1.618033988749894848205); - else if (!tmplen ? !stricmp(tmp, "$EPS") : (tmplen == 4 && !strnicmp(tmp, "$EPS", 4))) - return nseel_createCompiledValue(ctx, (float)FLT_EPSILON); - else if (!tmplen ? !stricmp(tmp, "$DBL_MAX") : (tmplen == 4 && !strnicmp(tmp, "$DBL_MAX", 4))) - return nseel_createCompiledValue(ctx, (float)FLT_MAX); - else if (!tmplen ? !stricmp(tmp, "$MEMBLKLIMIT") : (tmplen == 12 && !strnicmp(tmp, "$MEMBLKLIMIT", 12))) - return nseel_createCompiledValue(ctx, (float)NSEEL_RAM_ITEMSPERBLOCK); - else if ((!tmplen || tmplen == 4) && tmp[1] == '\'' && tmp[2] && tmp[3] == '\'') - return nseel_createCompiledValue(ctx, (float)tmp[2]); - else return NULL; - } - else if (tmp[0] == '\'') - { - char b[64]; - int32_t x, sz; - uint32_t rv = 0; - if (!tmplen) // nul terminated tmplen, calculate a workable length - { - // faster than strlen(tmp) if tmp is large, we'll never need more than ~18 chars anyway - while (tmplen < 32 && tmp[tmplen]) tmplen++; - } - sz = tmplen > 0 ? nseel_filter_escaped_string(b, sizeof(b), tmp + 1, tmplen - 1, '\'') : 0; - if (sz > 4) - { - if (ctx->last_error_string[0]) lstrcatn(ctx->last_error_string, ", ", sizeof(ctx->last_error_string)); - snprintf_append(ctx->last_error_string, sizeof(ctx->last_error_string), "multi-byte character '%.5s...' too long", b); - return NULL; // do not allow 'xyzxy', limit to 4 bytes - } - for (x = 0; x < sz; x++) rv = (rv << 8) + ((unsigned char*)b)[x]; - return nseel_createCompiledValue(ctx, (float)rv); - } - return nseel_createCompiledValue(ctx, (float)atof(tmp)); -} \ No newline at end of file diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/atox.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/atox.c new file mode 100644 index 00000000..0909e3ce --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/atox.c @@ -0,0 +1,210 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include "xpre.h" + +#define UPPER_BOUND (XMAX_10EX + 100) + +xpr +strtox (const char *q, char **endptr) +{ + xpr s, f; + unsigned short pc[XDIM + 1]; + unsigned short *pn, *pf, *pa, *pb; + unsigned short sfg, ibex, fbex; + unsigned long n; + long j; + int idex = 0, fdex = 0, c, m; + short noip, nofp; + const char *ptr; + + pn = (unsigned short *) &s; + pf = (unsigned short *) &f; + for (j = 0; j <= XDIM; pn[j] = pf[j] = pc[j] = 0, ++j); + sfg = 0; + m = XDIM + 1; + if ((endptr)) + *endptr = (char *) q; + /* Skip the leading spaces if there are some */ + while ((isspace (*q))) + q++; + /* Sign */ + if (*q == '+') + ++q; + else if (*q == '-') + { + sfg = 0x8000; + ++q; + } + /* Integer part */ + for (ptr = q; (c = *q - '0') >= 0 && c <= 9; ++q) + { + if (pn[0]) + ++idex; + else + { + xlshift (1, pn, m); + for (j = 0; j < m; ++j) + pc[j] = pn[j]; + xlshift (2, pn, m); + for (n = (unsigned int) c, pa = pn + XDIM, pb = pc + XDIM; + pa >= pn; pa--, pb--) + { + n += *pa + *pb; + *pa = n; + n >>= 16; + } + } + } + for (j = 0; j < m && pn[j] == 0; ++j); + if (j == m) + ibex = 0; + else + { + ibex = xBias + xMax_p - 1; + if (j) + { + j <<= 4; + ibex -= j; + xlshift (j, pn, m); + } + while (pn[0]) + { + xrshift (1, pn, m); + ++ibex; + } + pn[0] = ibex | sfg; + } + noip = ptr == q; + /* End Integer part */ + if (*q == '.') + { + /* Fractionary part */ + for (j = 0; j <= XDIM; ++j) + pc[j] = 0; + for (ptr = ++q; (c = *q - '0') >= 0 && c <= 9 && pf[0] == 0; + --fdex, ++q) + { + xlshift (1, pf, m); + for (j = 0; j < m; ++j) + pc[j] = pf[j]; + xlshift (2, pf, m); + for (n = (unsigned int) c, pa = pf + XDIM, pb = pc + XDIM; + pa >= pf; pa--, pb--) + { + n += *pa + *pb; + *pa = n; + n >>= 16; + } + } + for (j = 0; j < m && pf[j] == 0; ++j); + if (j == m) + fbex = 0; + else + { + fbex = xBias + xMax_p - 1; + if (j) + { + j <<= 4; + fbex -= j; + xlshift (j, pf, m); + } + while (pf[0]) + { + xrshift (1, pf, m); + ++fbex; + } + pf[0] = fbex | sfg; + } + nofp = ptr == q; + } /* end if (*q == '.') */ + else + nofp = 1; + if ((noip) && (nofp)) + /* Error ! */ + return xNaN; + else + { + /* + Added on August 4th 2007: + If the decimal digits after the radix character ('.') + are too much with respect to the given precision, + all the meaningless ones must be neglected. + The absence of this loop produced a VERY hazardous bug + (thanks to Shina Tan + for the bug notification) + */ + for(; *q >= '0' && *q <= '9'; q++); + /* + End addition + */ + if ((endptr)) + *endptr = (char *) q; + } + /* Exponent */ + if (*q == 'e' || *q == 'E') + { + ++q; + sfg = 0; + if (*q == '+') + ++q; + else if (*q == '-') + { + sfg = 1; + ++q; + } + for (ptr = q, j = 0; (c = *q - '0') >= 0 && c <= 9 + && j <= UPPER_BOUND; ++q) + { + j <<= 1; + m = j; + j <<= 2; + j += c + m; + } + if (ptr != q && (endptr)) + *endptr = (char *) q; + if (sfg) + j = -j; + idex += j; + fdex += j; + } + /* + Remark: s and f have the same sign (see above). + */ + if (idex > XMAX_10EX || fdex > XMAX_10EX) + return ((s.nmm[0] & xM_sgn) ? xMinf : xPinf); + else + { + if (idex) + s = xmul (s, xpwr (xTen, idex)); + if (fdex) + f = xmul (f, xpwr (xTen, fdex)); + return xadd (s, f, 0); + } +} + +xpr +atox (const char *q) +{ + return strtox (q, NULL); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/constant.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/constant.c new file mode 100644 index 00000000..eeef4daa --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/constant.c @@ -0,0 +1,72 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"xpre.h" + +const unsigned short xM_sgn = 0x8000; +const unsigned short xM_exp = 0x7fff; +const short xBias = 16383; + +const short xD_bias = 15360; +const short xD_max = 2047; +const short xD_lex = 12; + +const short xF_bias = 16256; +const short xF_max = 255; +const short xF_lex = 9; + +const short xMax_p = 16 * XDIM; +const short xK_lin = -8 * XDIM; + +const xpr xZero = { {0x0, 0x0} }; +const xpr xOne = { {0x3fff, 0x8000} }; +const xpr xTwo = { {0x4000, 0x8000} }; +const xpr xTen = { {0x4002, 0xa000} }; +const xpr xPinf = { {0x7fff, 0x0} }; +const xpr xMinf = { {0xffff, 0x0} }; +const xpr xVSV = { {0x3ff2, 0x8000} }; +const xpr xVGV = { {0x4013, 0x8000} }; +const xpr xEmax = { {0x400c, 0xb16c} }; +const xpr xEmin = { {0xc00c, 0xb16c} }; +const xpr xE2min = { {0xc00c, 0xfffb} }; /* -16382.75 */ +const xpr xE2max = { {0x400c, 0xfffb} }; /* +16382.75 */ +/* const xpr HPA_MIN = pow(xTwo, RealNumber(-16381));*/ // Similar to DBL_MIN +/* const xpr HPA_MAX = pow(xTwo, RealNumber(16381));*/ // Similar to DBL_MAX +/* static xpr xpzero = { {0x0, 0x0} }; */ +/* static xpr xnzero = { {0x0, 0x0} }; */ + +#if XDIM == 11 +#include"mp/const11.h" +#elif XDIM == 15 +#include"mp/const15.h" +#elif XDIM == 19 +#include"mp/const19.h" +#elif XDIM == 23 +#include"mp/const23.h" +#elif XDIM == 27 +#include"mp/const27.h" +#elif XDIM == 31 +#include"mp/const31.h" +#else +/* We assume XDIM == 7 (default) */ +#include"mp/const07.h" +#endif diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxaop.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxaop.c new file mode 100644 index 00000000..f13c0fc5 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxaop.c @@ -0,0 +1,170 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +cxpr +cxadd (cxpr z1, cxpr z2, int k) +{ + cxpr w; + + w.re = xadd (z1.re, z2.re, k); + w.im = xadd (z1.im, z2.im, k); + return w; +} + +cxpr +cxsum (cxpr z1, cxpr z2) +{ + cxpr w; + + w.re = xadd (z1.re, z2.re, 0); + w.im = xadd (z1.im, z2.im, 0); + return w; +} + +cxpr +cxsub (cxpr z1, cxpr z2) +{ + cxpr w; + + w.re = xadd (z1.re, z2.re, 1); + w.im = xadd (z1.im, z2.im, 1); + return w; +} + +cxpr +cxmul (cxpr z1, cxpr z2) +{ + cxpr w; + + w.re = xadd (xmul (z1.re, z2.re), xmul (z1.im, z2.im), 1); + w.im = xadd (xmul (z1.im, z2.re), xmul (z1.re, z2.im), 0); + return w; +} + +/* Multiplication by a real number */ +cxpr +cxrmul (xpr c, cxpr z) +{ + cxpr w; + + w.re = xmul (c, z.re); + w.im = xmul (c, z.im); + return w; +} + +/* Multiplication by +i */ +cxpr +cxdrot (cxpr z) +{ + cxpr y; + + y.re = z.im; + y.im = z.re; + y.re.nmm[0] ^= xM_sgn; + return y; +/* MS-VC requires a more explicit coding, + signaled on 2010-04-09 by A.Haumer + + z.im.nmm[0] ^= xM_sgn; + return (cxpr) + { + z.im, z.re}; +*/ +} + +/* Multiplication by -i */ +cxpr +cxrrot (cxpr z) +{ + cxpr y; + + y.re = z.im; + y.im = z.re; + y.im.nmm[0] ^= xM_sgn; + return y; +/* MS-VC requires a more explicit coding, + signaled on 2010-04-09 by A.Haumer + + z.re.nmm[0] ^= xM_sgn; + return (cxpr) + { + z.im, z.re}; +*/ +} + +cxpr +cxdiv (cxpr z1, cxpr z2) +{ + int tv = cxrec (z2, &z2); + + if (!xsigerr (!tv, XEDIV, "cxdiv()")) + { + cxpr w; + + w.re = xadd (xmul (z1.re, z2.re), xmul (z1.im, z2.im), 1); + w.im = xadd (xmul (z1.im, z2.re), xmul (z1.re, z2.im), 0); + return w; + } + else + return cxZero; +} + +cxpr +cxinv (cxpr z) +{ + int tv = cxrec (z, &z); + + if (!xsigerr (!tv, XEDOM, "cxinv()")) + return z; + else + return cxZero; +} + +cxpr +cxsqr (cxpr z) +{ + cxpr w; + + w.re = xadd (xmul (z.re, z.re), xmul (z.im, z.im), 1); + w.im = xmul (xTwo, xmul (z.im, z.re)); + return w; +} + +cxpr +cxsqrt (cxpr z) +{ + xpr mod, arg; + cxpr w; + + if (xsgn (&z.re) == 0 && xsgn (&z.im) == 0) + return cxZero; + else + { + mod = xsqrt (cxabs (z)); + arg = xpr2 (cxarg (z), -1); + w.re = xmul (mod, xcos (arg)); + w.im = xmul (mod, xsin (arg)); + return w; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxbasic.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxbasic.c new file mode 100644 index 00000000..4e8d7f8b --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxbasic.c @@ -0,0 +1,251 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +cxpr +cxreset (xpr re, xpr im) +{ + cxpr y; + + y.re = re; + y.im = im; + return y; +/* MS-VC requires a more explicit coding, + signaled on 2010-04-09 by A.Haumer + + return (cxpr) + { + re, im}; +*/ +} + +cxpr +cxconv (xpr x) +{ + cxpr y; + + y.re = x; + y.im = xZero; + return y; +/* MS-VC requires a more explicit coding, + signaled on 2010-04-09 by A.Haumer + + return (cxpr) + { + x, xZero}; +*/ +} + +xpr +cxre (cxpr z) +{ + return z.re; +} + +xpr +cxim (cxpr z) +{ + return z.im; +} + +cxpr +cxswap (cxpr z) +{ + cxpr y; + + y.re = z.im; + y.im = z.re; + return y; +/* MS-VC requires a more explicit coding, + signaled on 2010-04-09 by A.Haumer + + return (cxpr) + { + z.im, z.re}; +*/ +} + +cxpr +cxneg (cxpr z) +{ + z.re.nmm[0] ^= xM_sgn; + z.im.nmm[0] ^= xM_sgn; + return z; +} + +cxpr +cxconj (cxpr z) +{ + return (z.im.nmm[0] ^= xM_sgn, z); +} + +#define XBOUND XDIM * 16 + 8 + +xpr +cxabs (cxpr z) +{ + xpr x; + int ea, eb; + + if (xprcmp (&z.re, &xZero) == 0 && xprcmp (&z.im, &xZero) == 0) + return xZero; + else + { + ea = (z.re.nmm[0] &= xM_exp) - xBias; + eb = (z.im.nmm[0] &= xM_exp) - xBias; + if (ea > eb + XBOUND) + return z.re; + else if (eb > ea + XBOUND) + return z.im; + else + { + z.re.nmm[0] -= eb; + z.im.nmm[0] = xBias; + x = xsqrt (xadd (xmul (z.re, z.re), xmul (z.im, z.im), 0)); + x.nmm[0] += eb; + return x; + } + } +} + +xpr +cxarg (cxpr z) +{ + int rs, is; + + rs = xsgn (&z.re); + is = xsgn (&z.im); + if (rs > 0) + return xatan (xdiv (z.im, z.re)); + else if (rs < 0) + { + z.re.nmm[0] ^= xM_sgn; + z.im.nmm[0] ^= xM_sgn; + if (is >= 0) + return xadd (xPi, xatan (xdiv (z.im, z.re)), 0); + else + return xadd (xatan (xdiv (z.im, z.re)), xPi, 1); + } + else /* z.re is zero ! */ + { + if (!xsigerr (is == 0, XEDOM, "cxarg()")) + return (is > 0 ? xPi2 : xneg (xPi2)); + else + return xneg (xPi2); /* Dummy value :) */ + } +} + +int +cxrec (cxpr z, cxpr *w) +{ + xpr x; + int sa, sb, ea, eb; + + if (xprcmp (&z.re, &xZero) == 0 && xprcmp (&z.im, &xZero) == 0) + return 0; + else + { + sa = z.re.nmm[0] & xM_sgn; + sb = z.im.nmm[0] & xM_sgn; + ea = (z.re.nmm[0] &= xM_exp) - xBias; + eb = (z.im.nmm[0] &= xM_exp) - xBias; + if (ea > eb + XBOUND) + x = z.re; + else if (eb > ea + XBOUND) + x = z.im; + else + { + z.re.nmm[0] -= eb; + z.im.nmm[0] = xBias; + x = xsqrt (xadd (xmul (z.re, z.re), xmul (z.im, z.im), 0)); + x.nmm[0] += eb; + z.re.nmm[0] += eb; + z.im.nmm[0] += eb; + } + w->re = xdiv (xdiv (z.re, x), x); + w->im = xdiv (xdiv (z.im, x), x); + w->re.nmm[0] |= sa; + w->im.nmm[0] |= xM_sgn ^ sb; + return 1; + } +} + +cxpr +cxfloor (cxpr z) +{ + cxpr w; + + w.re = xfloor (z.re); + w.im = xfloor (z.im); + return w; +} + +cxpr +cxceil (cxpr z) +{ + cxpr w; + + w.re = xceil (z.re); + w.im = xceil (z.im); + return w; +} + +cxpr +cxround (cxpr z) +{ + cxpr w; + + w.re = xround (z.re); + w.im = xround (z.im); + return w; +} + +cxpr +cxtrunc (cxpr z) +{ + cxpr w; + + w.re = xtrunc (z.re); + w.im = xtrunc (z.im); + return w; +} + +cxpr +cxfrac (cxpr z) +{ + cxpr w; + + w.re = xfrac (z.re); + w.im = xfrac (z.im); + return w; +} + +cxpr +cxfix (cxpr z) +{ + cxpr w; + + w.re = xfix (z.re); + w.im = xfix (z.im); + return w; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxconstant.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxconstant.c new file mode 100644 index 00000000..f53a3c83 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxconstant.c @@ -0,0 +1,27 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" + +const cxpr cxZero = { {{0x0, 0x0}}, {{0x0, 0x0}} }; +const cxpr cxOne = { {{0x3fff, 0x8000}}, {{0x0, 0x0}} }; +const cxpr cxIU = { {{0x0, 0x0}}, {{0x3fff, 0x8000}} }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxconvf.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxconvf.c new file mode 100644 index 00000000..bc7336c8 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxconvf.c @@ -0,0 +1,177 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include +#include +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +cxpr +strtocx (const char *q, char **endptr) +{ + cxpr z = cxZero; + char *ptr, *ptr2; + + z.re = strtox (q, &ptr); + if ((endptr)) + *endptr = ptr; + if (ptr != q) + { + if (*ptr == CX1I_CHAR) + { + z.im = z.re; + z.re = xZero; + if ((endptr)) + *endptr = ptr + 1; + } + else + { + while (isspace (*ptr)) + ptr++; + if (*ptr == '+' || *ptr == '-') + { + z.im = strtox (ptr, &ptr2); + if (*ptr2 != CX1I_CHAR) + z.im = xZero; + else + { + if ((endptr)) + *endptr = ptr2 + 1; + } + } + /* + else + : we have successfully read a real number + but there is no another number after it. + : So, we leave z.im set to zero and return z. + */ + } + } + else + /* + : q does not contain any valid number + ==> z.re is xNaN. Then we set z.im to + xNaN and return z. + We remark that, if endptr is + not NULL, then *endptr == q. + */ + z.im = xNaN; + return z; +} + +cxpr +atocx (const char *s) +{ + return strtocx (s, NULL); +} + +char * +cxpr_asprint (cxpr z, int sc_not, int sign, int lim) +{ + char *str1, *str2, *t; + + str1 = xpr_asprint (z.re, sc_not, sign, lim); + str2 = xpr_asprint (z.im, sc_not, 1, lim); + if (!str1 || !str2) + { + if ((str1)) + free ((void*)str1); + if ((str2)) + free ((void*)str2); + return NULL; + } + else + { + size_t n = strlen (str1) + strlen (str2) + 2; + + if (!(t = (char*)malloc (n * sizeof (char)))) + return NULL; + else + { + strcpy (t, str1); + strcat (t, str2); + for (n = 0; t[n] != '\0'; n++); + t[n] = CX1I_CHAR; + t[n + 1] = '\0'; + return t; + } + } +} + +char * +cxtoa (cxpr z, int lim) +{ + return cxpr_asprint (z, 1, 0, lim); +} + +cxpr +dctocx (double re, double im) +{ + cxpr z; + + z.re = dbltox (re); + z.im = dbltox (im); + return z; +} + +cxpr +fctocx (float re, float im) +{ + cxpr z; + + z.re = flttox (re); + z.im = flttox (im); + return z; +} + +cxpr +ictocx (long re, long im) +{ + cxpr z; + + z.re = inttox (re); + z.im = inttox (im); + return z; +} + +cxpr uctocx (unsigned long re, unsigned long im) +{ + cxpr z; + + z.re = uinttox (re); + z.im = uinttox (im); + return z; +} + +void +cxtodc (const cxpr *z, double *re, double *im) +{ + *re = xtodbl (z->re); + *im = xtodbl (z->im); +} + +void +cxtofc (const cxpr *z, float *re, float *im) +{ + *re = xtoflt (z->re); + *im = xtoflt (z->im); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxexp.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxexp.c new file mode 100644 index 00000000..13fbb190 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxexp.c @@ -0,0 +1,123 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +cxpr +cxexp (cxpr z) +{ + cxpr w; + + w.re = xmul (xexp (z.re), xcos (z.im)); + w.im = xmul (xexp (z.re), xsin (z.im)); + return w; +} + +cxpr +cxexp10 (cxpr z) +{ + cxpr w; + + z.im = xmul (xLn10, z.im); + w.re = xmul (xexp10 (z.re), xcos (z.im)); + w.im = xmul (xexp10 (z.re), xsin (z.im)); + return w; +} + +cxpr +cxexp2 (cxpr z) +{ + cxpr w; + + z.im = xmul (xLn2, z.im); + w.re = xmul (xexp2 (z.re), xcos (z.im)); + w.im = xmul (xexp2 (z.re), xsin (z.im)); + return w; +} + +cxpr +cxlog (cxpr z) +{ + xpr mod; + cxpr w; + + mod = cxabs (z); + if (xsigerr (xsgn (&mod) <= 0, XEDOM, "cxlog()")) + return cxZero; + else + { + w.re = xlog (mod); + w.im = cxarg (z); + return w; + } +} + +cxpr +cxlog10 (cxpr z) +{ + xpr mod; + cxpr w; + + mod = cxabs (z); + if (xsigerr (xsgn (&mod) <= 0, XEDOM, "cxlog10()")) + return cxZero; + else + { + w.re = xlog10 (mod); + w.im = xmul (cxarg (z), xLog10_e); + return w; + } +} + +cxpr +cxlog2 (cxpr z) +{ + xpr mod; + cxpr w; + + mod = cxabs (z); + if (xsigerr (xsgn (&mod) <= 0, XEDOM, "cxlog2()")) + return cxZero; + else + { + w.re = xlog2 (mod); + w.im = xmul (cxarg (z), xLog2_e); + return w; + } +} + +cxpr +cxlog_sqrt (cxpr z) +{ + xpr mod; + cxpr w; + + mod = cxabs (z); + if (xsigerr (xsgn (&mod) <= 0, XEDOM, "cxlog_sqrt()")) + return cxZero; + else + { + w.re = xpr2 (xlog (mod), -1); + w.im = xpr2 (cxarg (z), -1); + return w; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxhypb.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxhypb.c new file mode 100644 index 00000000..55ac009e --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxhypb.c @@ -0,0 +1,114 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +cxpr +cxsinh (cxpr z) +{ + cxpr w; + + w = cxsub (cxexp (z), cxexp (cxneg (z))); + w.re = xpr2 (w.re, -1); + w.im = xpr2 (w.im, -1); + return w; +} + +cxpr +cxcosh (cxpr z) +{ + cxpr w; + + w = cxsum (cxexp (z), cxexp (cxneg (z))); + w.re = xpr2 (w.re, -1); + w.im = xpr2 (w.im, -1); + return w; +} + +cxpr +cxtanh (cxpr z) +{ + if (xsigerr (xprcmp (&z.re, &xEmax) > 0, XFPOFLOW, NULL)) + return cxOne; + else if (xsigerr (xprcmp (&z.re, &xEmin) < 0, XFPOFLOW, NULL)) + return cxneg (cxOne); + else + { + cxpr w; + + if (xsigerr (!cxrec (cxcosh (z), &w), XEDOM, "cxtanh()")) + return cxZero; + else + return cxmul (cxsinh (z), w); + } +} + +cxpr +cxasinh (cxpr z) +{ + cxpr w; + xpr ls, rs; + + /* In this way, cxasinh() works fine also with real numbers */ + /* very near to -oo. */ + w = cxsqrt (cxsum (cxOne, cxsqr (z))); + ls = cxabs (cxsum (z, w)); + rs = xmul (xVSV, cxabs (z)); + if (xprcmp (&ls, &rs) < 0) + return cxneg (cxlog (cxsub (w, z))); + else + return cxlog (cxsum (z, w)); +} + +cxpr +cxacosh (cxpr z) +{ + cxpr w; + xpr ls, rs; + + w = cxsqrt (cxsub (cxsqr (z), cxOne)); + ls = cxabs (cxsum (z, w)); + rs = xmul (xVSV, cxabs (z)); + if (xprcmp (&ls, &rs) < 0) + return cxneg (cxlog (cxsub (z, w))); + else + return cxlog (cxsum (z, w)); +} + +cxpr +cxatanh (cxpr z) +{ + cxpr w; + xpr t; + int errcond; + + t = xadd (xabs (z.re), xOne, 1); + errcond = xsgn (&z.im) == 0 && xsgn (&t) == 0; + if (xsigerr (errcond, XEDOM, "cxatanh()")) + return cxZero; + else + { + w = cxdiv (cxsum (cxOne, z), cxsub (cxOne, z)); + w = cxlog_sqrt (w); + return w; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxidiv.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxidiv.c new file mode 100644 index 00000000..3203241d --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxidiv.c @@ -0,0 +1,131 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +cxpr +cxgdiv (cxpr z1, cxpr z2) +{ + xpr mod2; + + z1.re = xround (z1.re); + z1.im = xround (z1.im); + z2.re = xround (z2.re); + z2.im = xround (z2.im); + mod2 = xadd (xmul (z2.re, z2.re), xmul (z2.im, z2.im), 0); + if (xsigerr (xprcmp (&mod2, &xPinf) >= 0, XFPOFLOW, NULL) || + xsigerr (xsgn (&mod2) <= 0, XEDIV, "cxgdiv()")) + return cxZero; + else + { + cxpr w; + + w.re = xadd (xmul (z1.re, z2.re), xmul (z1.im, z2.im), 0); + w.im = xadd (xmul (z2.re, z1.im), xmul (z2.im, z1.re), 1); + w.re = xround (xdiv (w.re, mod2)); + w.im = xround (xdiv (w.im, mod2)); + return w; + } +} + +cxpr +cxidiv (cxpr z1, cxpr z2) +{ + xpr mod2; + + z1.re = xround (z1.re); + z1.im = xround (z1.im); + z2.re = xround (z2.re); + z2.im = xround (z2.im); + mod2 = xadd (xmul (z2.re, z2.re), xmul (z2.im, z2.im), 0); + if (xsigerr (xprcmp (&mod2, &xPinf) >= 0, XFPOFLOW, NULL) || + xsigerr (xsgn (&mod2) <= 0, XEDIV, "cxidiv()")) + return cxZero; + else + { + cxpr w; + + w.re = xadd (xmul (z1.re, z2.re), xmul (z1.im, z2.im), 0); + w.im = xadd (xmul (z2.re, z1.im), xmul (z2.im, z1.re), 1); + w.re = xfix (xdiv (w.re, mod2)); + w.im = xfix (xdiv (w.im, mod2)); + return w; + } +} + +cxpr +cxgmod (cxpr z1, cxpr z2) +{ + xpr mod2; + + z1.re = xround (z1.re); + z1.im = xround (z1.im); + z2.re = xround (z2.re); + z2.im = xround (z2.im); + mod2 = xadd (xmul (z2.re, z2.re), xmul (z2.im, z2.im), 0); + if (xsigerr (xprcmp (&mod2, &xPinf) >= 0, XFPOFLOW, NULL) || + xsigerr (xsgn (&mod2) <= 0, XEDIV, "cxgmod()")) + return cxZero; + else + { + cxpr w, z; + + w.re = xadd (xmul (z1.re, z2.re), xmul (z1.im, z2.im), 0); + w.im = xadd (xmul (z2.re, z1.im), xmul (z2.im, z1.re), 1); + w.re = xround (xdiv (w.re, mod2)); + w.im = xround (xdiv (w.im, mod2)); + z.re = xadd (xmul (w.re, z2.re), xmul (w.im, z2.im), 1); + z.im = xadd (xmul (w.im, z2.re), xmul (w.re, z2.im), 0); + w.re = xround (xadd (z1.re, z.re, 1)); + w.im = xround (xadd (z1.im, z.im, 1)); + return w; + } +} + +cxpr +cxmod (cxpr z1, cxpr z2) +{ + xpr mod2; + + z1.re = xround (z1.re); + z1.im = xround (z1.im); + z2.re = xround (z2.re); + z2.im = xround (z2.im); + mod2 = xadd (xmul (z2.re, z2.re), xmul (z2.im, z2.im), 0); + if (xsigerr (xprcmp (&mod2, &xPinf) >= 0, XFPOFLOW, NULL) || + xsigerr (xsgn (&mod2) <= 0, XEDIV, "cxmod()")) + return cxZero; + else + { + cxpr w, z; + + w.re = xadd (xmul (z1.re, z2.re), xmul (z1.im, z2.im), 0); + w.im = xadd (xmul (z2.re, z1.im), xmul (z2.im, z1.re), 1); + w.re = xfix (xdiv (w.re, mod2)); + w.im = xfix (xdiv (w.im, mod2)); + z.re = xadd (xmul (w.re, z2.re), xmul (w.im, z2.im), 1); + z.im = xadd (xmul (w.im, z2.re), xmul (w.re, z2.im), 0); + w.re = xround (xadd (z1.re, z.re, 1)); + w.im = xround (xadd (z1.im, z.im, 1)); + return w; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxpow.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxpow.c new file mode 100644 index 00000000..450acc45 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxpow.c @@ -0,0 +1,123 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +static void +unit_root (int i, int n, xpr *a, xpr *b) +{ + /* + We assume n != 0 + */ + i %= n; + *a = xdiv (xmul (xpr2 (inttox (i), 1), xPi), inttox (n)); + *b = xsin (*a); + *a = xcos (*a); + if (x_exp (b) < -80) + *b = xZero; + if (x_exp (a) < -80) + *a = xZero; +} + +cxpr +cxpwr (cxpr z, int n) +{ + xpr mod, arg; + cxpr w; + + mod = cxabs (z); + if (xsgn (&mod) <= 0) + { + int dummy; + + dummy = xsigerr (n <= 0, XEBADEXP, "cxpwr()"); + return cxZero; + } + else + { + arg = xmul (inttox (n), cxarg (z)); + mod = xpwr (mod, n); + w.re = xmul (mod, xcos (arg)); + w.im = xmul (mod, xsin (arg)); + return w; + } + return w; +} + +cxpr +cxroot (cxpr z, int i, int n) +{ + xpr mod, arg, e, a, b; + cxpr w, zz; + + if (xsigerr (n == 0, XEBADEXP, "cxroot()")) + return cxZero; + else + { + mod = cxabs (z); + if (xsgn (&mod) <= 0) + { + int dummy; + + dummy = xsigerr (n < 0, XEBADEXP, "cxroot()"); + return cxZero; + } + else /* mod > 0 */ + { + arg = xdiv (cxarg (z), inttox (n)); + e = xdiv (xOne, inttox (n)); /* 1/n */ + /* x^e = exp(e*log(x)) for any x > 0 */ + mod = xexp (xmul (e, xlog (mod))); + w.re = xmul (mod, xcos (arg)); + w.im = xmul (mod, xsin (arg)); + unit_root (i, n, &a, &b); + zz.re = xadd (xmul (w.re, a), xmul (w.im, b), 1); + zz.im = xadd (xmul (w.im, a), xmul (w.re, b), 0); + return zz; + } + } +} + +cxpr +cxpow (cxpr z1, cxpr z2) +{ + xpr mod, arg, a, b; + cxpr w; + + mod = cxabs (z1); + if (xsgn (&mod) <= 0) + { + int dummy; + + dummy = xsigerr (xsgn (&z2.re) <= 0, XEBADEXP, "cxpow()"); + return cxZero; + } + else + { + arg = cxarg (z1); + a = xadd (xmul (z2.re, xlog (mod)), xmul (z2.im, arg), 1); + b = xadd (xmul (z2.re, arg), xmul (z2.im, xlog (mod)), 0); + w.re = xmul (xexp (a), xcos (b)); + w.im = xmul (xexp (a), xsin (b)); + return w; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxprcmp.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxprcmp.c new file mode 100644 index 00000000..5bea235e --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxprcmp.c @@ -0,0 +1,97 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +cxprcmp_res +cxprcmp (const cxpr* z1, const cxpr* z2) +{ + cxprcmp_res r; + + r.re = xprcmp (&z1->re, &z2->re); + r.im = xprcmp (&z1->im, &z2->im); + return r; +} + +int +cxis0 (const cxpr* z) +{ + return (xis0 (&z->re) && xis0 (&z->im)); +} + +int +cxnot0 (const cxpr* z) +{ + return (xnot0 (&z->re) || xnot0 (&z->im)); +} + +int +cxeq (cxpr z1, cxpr z2) +{ + return (xprcmp (&z1.re, &z2.re) == 0 && xprcmp (&z1.im, &z2.im) == 0); +} + +int +cxneq (cxpr z1, cxpr z2) +{ + return (xprcmp (&z1.re, &z2.re) != 0 || xprcmp (&z1.im, &z2.im) != 0); +} + +int +cxgt (cxpr z1, cxpr z2) +{ + int rs = xprcmp (&z1.re, &z2.re); + int is = xprcmp (&z1.im, &z2.im); + + if (rs > 0) + return (is >= 0); + else if (is > 0) + return (rs >= 0); + else + return 0; +} + +int +cxge (cxpr z1, cxpr z2) +{ + return (xprcmp (&z1.re, &z2.re) >= 0 && xprcmp (&z1.im, &z2.im) >= 0); +} + +int +cxlt (cxpr z1, cxpr z2) +{ + int rs = xprcmp (&z1.re, &z2.re); + int is = xprcmp (&z1.im, &z2.im); + + if (rs < 0) + return (is <= 0); + else if (is < 0) + return (rs <= 0); + else + return 0; +} + +int +cxle (cxpr z1, cxpr z2) +{ + return (xprcmp (&z1.re, &z2.re) <= 0 && xprcmp (&z1.im, &z2.im) <= 0); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxpre.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxpre.h new file mode 100644 index 00000000..d17770d1 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxpre.h @@ -0,0 +1,176 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#ifndef _CXPRE_H_ +#define _CXPRE_H_ + +#include +#include"xpre.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct + { + xpr re, im; + } cxpr; + + typedef struct + { + int re, im; + } cxprcmp_res; + + extern const cxpr cxZero; + extern const cxpr cxOne; + extern const cxpr cxIU; + + cxpr cxreset (xpr re, xpr im); + cxpr cxconv (xpr x); + xpr cxre (cxpr z); + xpr cxim (cxpr z); + cxpr cxswap (cxpr z); + + xpr cxabs (cxpr z); + xpr cxarg (cxpr z); + int cxrec (cxpr z, cxpr *w); + + cxpr cxadd (cxpr z1, cxpr z2, int k); + cxpr cxsum (cxpr z1, cxpr z2); + cxpr cxsub (cxpr z1, cxpr z2); + cxpr cxmul (cxpr z1, cxpr z2); + /* Multiplication by a real number */ + cxpr cxrmul (xpr c, cxpr z); + + /* Multiplication by +i */ + cxpr cxdrot (cxpr z); + + /* Multiplication by -i */ + cxpr cxrrot (cxpr z); + cxpr cxdiv (cxpr z1, cxpr z2); + + cxpr cxgdiv (cxpr z1, cxpr z2); + cxpr cxidiv (cxpr z1, cxpr z2); + cxpr cxgmod (cxpr z1, cxpr z2); + cxpr cxmod (cxpr z1, cxpr z2); + cxpr cxpwr (cxpr z, int n); + cxpr cxsqr (cxpr z); + cxpr cxpow (cxpr z1, cxpr z2); + cxpr cxroot (cxpr z, int i, int n); + cxpr cxsqrt (cxpr z); + + cxprcmp_res cxprcmp (const cxpr* z1, const cxpr* z2); + int cxis0 (const cxpr* z); + int cxnot0 (const cxpr* z); + int cxeq (cxpr z1, cxpr z2); + int cxneq (cxpr z1, cxpr z2); + int cxgt (cxpr z1, cxpr z2); + int cxge (cxpr z1, cxpr z2); + int cxlt (cxpr z1, cxpr z2); + int cxle (cxpr z1, cxpr z2); + + cxpr cxconj (cxpr z); + cxpr cxneg (cxpr z); + cxpr cxinv (cxpr z); + + cxpr cxexp (cxpr z); + cxpr cxexp10 (cxpr z); + cxpr cxexp2 (cxpr z); + cxpr cxlog (cxpr z); + cxpr cxlog10 (cxpr z); + cxpr cxlog2 (cxpr z); + cxpr cxlog_sqrt (cxpr z); + cxpr cxsin (cxpr z); + cxpr cxcos (cxpr z); + cxpr cxtan (cxpr z); + cxpr cxsinh (cxpr z); + cxpr cxcosh (cxpr z); + cxpr cxtanh (cxpr z); + cxpr cxasin (cxpr z); + cxpr cxacos (cxpr z); + cxpr cxatan (cxpr z); + cxpr cxasinh (cxpr z); + cxpr cxacosh (cxpr z); + cxpr cxatanh (cxpr z); + + cxpr cxfloor (cxpr z); + cxpr cxceil (cxpr z); + cxpr cxround (cxpr z); + cxpr cxtrunc (cxpr z); + cxpr cxfrac (cxpr z); + cxpr cxfix (cxpr z); + +/* Conversion's functions */ + cxpr strtocx (const char *q, char **endptr); + cxpr atocx (const char *s); + char *cxpr_asprint (cxpr z, int sc_not, int sign, int lim); + char *cxtoa (cxpr z, int lim); + cxpr dctocx (double re, double im); + cxpr fctocx (float re, float im); + cxpr ictocx (long re, long im); + cxpr uctocx (unsigned long re, unsigned long im); + void cxtodc (const cxpr *z, double *re, double *im); + void cxtofc (const cxpr *z, float *re, float *im); + +/* Output functions */ + +#define CX1I_CHAR 'i' +#define CX1I_STR "i" + + void cxpr_print (FILE * stream, cxpr z, int sc_not, int sign, + int lim); + void cxprcxpr (cxpr z, int m); + void cxprint (FILE * stream, cxpr z); + +/* Special output functions and related macros */ + +#define XFMT_STD 0 +#define XFMT_RAW 1 +#define XFMT_ALT 2 + +#define CXDEF_LDEL '(' +#define CXDEF_RDEL ')' +#define CX_SEPARATOR ", " /* TO BE USED WITH THE ALT FORMAT */ +#define CX_EMPTY_SEP " " /* TO BE USED WITH THE RAW FORMAT */ +#define CX_SEP_L 2 /* LENGTH OF THE SEPARATOR */ + + int cxfout (FILE * pf, xoutflags ofs, cxpr z); + int cxout (xoutflags ofs, cxpr z); + unsigned long + cxsout (char *s, unsigned long n, xoutflags ofs, cxpr z); + +#define CXRESET(re, im) (cxpr){re, im} +#define CXCONV(x) (cxpr){x, xZero} +#define CXRE(z) (z).re +#define CXIM(z) (z).im +#define CXSWAP(z) (cxpr){(z).im, (z).re} + +#define cxconvert cxconv +#define cxdiff cxsub +#define cxprod cxmul +#define cxipow cxpwr + +#ifdef __cplusplus +} +#endif +#endif /* _CXPRE_H_ */ diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxtrig.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxtrig.c new file mode 100644 index 00000000..39e5eeab --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxtrig.c @@ -0,0 +1,131 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +cxpr +cxsin (cxpr z) +{ + cxpr w1, w2; + + w1 = cxdrot (z); /* Now w1= i*z, where i={0,1} */ + w2 = cxrrot (z); /* Now w2= -i*z, where i={0,1} */ + w1 = cxsub (cxexp (w1), cxexp (w2)); + w2.re = xpr2 (w1.im, -1); + w1.re.nmm[0] ^= xM_sgn; + w2.im = xpr2 (w1.re, -1); /* Now w2= (exp(i*z)-exp(-i*z))/2i */ + return w2; +} + +cxpr +cxcos (cxpr z) +{ + cxpr w1, w2; + + w1 = cxdrot (z); /* Now w1= i*z, where i={0,1} */ + w2 = cxrrot (z); /* Now w2= -i*z, where i={0,1} */ + w1 = cxsum (cxexp (w1), cxexp (w2)); + w2.re = xpr2 (w1.re, -1); + w2.im = xpr2 (w1.im, -1); + return w2; +} + +cxpr +cxtan (cxpr z) +{ + if (xsigerr (xprcmp (&z.im, &xEmax) > 0, XFPOFLOW, NULL)) + return cxIU; + else if (xsigerr (xprcmp (&z.im, &xEmin) < 0, XFPOFLOW, NULL)) + return cxneg (cxIU); + else + { + cxpr w; + + if (xsigerr (!cxrec (cxcos (z), &w), XEDOM, "cxtan()")) + return cxZero; + else + return cxmul (cxsin (z), w); + } +} + +cxpr +cxasin (cxpr z) +{ + cxpr w; + xpr ls, rs; + + w = cxsqrt (cxsub (cxOne, cxsqr (z))); + ls = cxabs (cxsum (cxdrot (z), w)); + rs = xmul (xVSV, cxabs (z)); + if (xprcmp (&ls, &rs) < 0) + w = cxdrot (cxlog (cxsub (w, cxdrot (z)))); + else + w = cxrrot (cxlog (cxsum (cxdrot (z), w))); + return w; +} + +cxpr +cxacos (cxpr z) +{ + cxpr w; + xpr ls, rs; + + w = cxsqrt (cxsub (cxOne, cxsqr (z))); + ls = cxabs (cxsum (z, cxdrot (w))); + rs = xmul (xVSV, cxabs (z)); + if (xprcmp (&ls, &rs) < 0) + w = cxdrot (cxlog (cxsub (z, cxdrot (w)))); + else + w = cxrrot (cxlog (cxsum (z, cxdrot (w)))); + return w; +} + +cxpr +cxatan (cxpr z) +{ + cxpr w; + xpr mod; + int errcond; + + mod = xadd (xabs (z.im), xOne, 1); + errcond = xsgn (&z.re) == 0 && xsgn (&mod) == 0; + if (xsigerr (errcond, XEDOM, "cxatan()")) + return cxZero; + else + { + /* In this way, cxatan() works fine also with complex numbers */ + /* very far from the origin. */ + mod = cxabs (z); + if (xprcmp (&mod, &xVGV) > 0) + { + w = cxsqrt (cxsum (cxOne, cxsqr (z))); + w = cxdiv (cxsum (cxOne, cxdrot (z)), w); + w = cxrrot (cxlog (w)); + } + else + { + w = cxdiv (cxsum (cxOne, cxdrot (z)), cxsub (cxOne, cxdrot (z))); + w = cxrrot (cxlog_sqrt (w)); + } + return w; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/read_item.cc b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/read_item.cc new file mode 100644 index 00000000..55cb6c1e --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/read_item.cc @@ -0,0 +1,61 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include +using namespace std; + +int +hpa_read_item (istream& is, char* buff, unsigned size) +{ + if (size == 0 || !buff) + return 0; + else /* size > 0 */ + { + unsigned i, n; + char ch; + + i = 0; + while ((is.get (ch))) + { + if (!isspace (ch)) + { + i = 1; + break; + } + } + if (i == 0) + return 0; + else + { + i = n = 0; + do + { + if(n + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include "xcomplex.h" + +using namespace std; + +#define BUFF_SIZE 10240 /* 10 Kb */ + + const xcomplex cxZERO = cxZero; + const xcomplex cxONE = cxOne; + const xcomplex cxI = cxIU; + +xoutflags xcomplex::ioflags = { XFMT_STD, XOUT_FIXED, 0, 0, 6, ' ', CXDEF_LDEL, CXDEF_RDEL }; + +ostream& +operator<< (ostream& os, const xcomplex& x) +{ + char buffer[BUFF_SIZE]; + + cxsout (buffer, BUFF_SIZE, x.ioflags, x.br); + return os << buffer; +} + +istream& +operator>> (istream& is, xcomplex& x) +{ + double_complex z; + istream& res = is >> z.re >> z.im; + + x.br = dctocx (z.re, z.im); + return res; +} + +xcomplex +operator+ (const xcomplex& x1, const xcomplex& x2) +{ + return xcomplex(cxadd (x1.br, x2.br, 0)); +} + +xcomplex +operator- (const xcomplex& x1, const xcomplex& x2) +{ + return xcomplex(cxadd (x1.br, x2.br, 1)); +} + +xcomplex +operator* (const xcomplex& x1, const xcomplex& x2) +{ + return xcomplex(cxmul (x1.br, x2.br)); +} + +xcomplex +operator/ (const xcomplex& x1, const xcomplex& x2) +{ + return xcomplex(cxdiv (x1.br, x2.br)); +} + +xcomplex +operator% (const xcomplex& x1, int n) +{ + cxpr z; + + z.re = xpr2 (x1.br.re, n); + z.im = xpr2 (x1.br.im, n); + return xcomplex (z); +} + +int +operator== (const xcomplex& x1, const xcomplex& x2) +{ + cxprcmp_res t; + + t.re = xprcmp (&x1.br.re, &x2.br.re); + t.im = xprcmp (&x1.br.im, &x2.br.im); + return (t.re == 0 && t.im == 0); +} + +int +operator!= (const xcomplex& x1, const xcomplex& x2) +{ + cxprcmp_res t; + + t.re = xprcmp (&x1.br.re, &x2.br.re); + t.im = xprcmp (&x1.br.im, &x2.br.im); + return (t.re != 0 || t.im != 0); +} + +int +operator<= (const xcomplex& x1, const xcomplex& x2) +{ + cxprcmp_res t; + + t.re = xprcmp (&x1.br.re, &x2.br.re); + t.im = xprcmp (&x1.br.im, &x2.br.im); + return (t.re <= 0 && t.im <= 0); +} + +int +operator>= (const xcomplex& x1, const xcomplex& x2) +{ + cxprcmp_res t; + + t.re = xprcmp (&x1.br.re, &x2.br.re); + t.im = xprcmp (&x1.br.im, &x2.br.im); + return (t.re >= 0 && t.im >= 0); +} + +int +operator< (const xcomplex& x1, const xcomplex& x2) +{ + cxprcmp_res t; + + t.re = xprcmp (&x1.br.re, &x2.br.re); + t.im = xprcmp (&x1.br.im, &x2.br.im); + if (t.re < 0) + return (t.im <= 0); + else if (t.im < 0) + return (t.re <= 0); + else + return 0; +} + +int +operator> (const xcomplex& x1, const xcomplex& x2) +{ + cxprcmp_res t; + + t.re = xprcmp (&x1.br.re, &x2.br.re); + t.im = xprcmp (&x1.br.im, &x2.br.im); + if (t.re > 0) + return (t.im >= 0); + else if (t.im > 0) + return (t.re >= 0); + else + return 0; +} + +unsigned long +sget (string s, unsigned long startp, xcomplex& x) +{ + const char *startptr; + char *tail; + + if (startp >= s.length()) + { + x.br = cxZero; + return 0; + } + else + { + startptr = s.c_str() + startp; + x.br = strtocx (startptr, &tail); + return tail - startptr; + } +} + +const char* +bget (const char* buff, xcomplex& x) +{ + char* tail; + + if (!buff) + { + cerr << "*** HPA::xcomplex::bget(): the first argument is the null pointer" << endl; + return 0; + } + else + { + x.br = strtocx (buff, &tail); + return (const char*) tail; + } +} + +xcomplex +rmul (const xreal& x, const xcomplex& z) +{ + return xcomplex (cxrmul (x._2xpr(), z.br)); +} + +xcomplex +gdiv (const xcomplex& x1, const xcomplex& x2) +{ + return cxgdiv (x1.br, x2.br); +} + +xcomplex +gmod (const xcomplex& x1, const xcomplex& x2) +{ + return cxgmod (x1.br, x2.br); +} + +xcomplex +idiv (const xcomplex& x1, const xcomplex& x2) +{ + return cxidiv (x1.br, x2.br); +} + +xcomplex +mod (const xcomplex& x1, const xcomplex& x2) +{ + return cxmod (x1.br, x2.br); +} + +xcomplex +conj (const xcomplex& z) +{ + return cxconj (z.br); +} + +xcomplex +inv (const xcomplex& z) +{ + return cxinv (z.br); +} + +xcomplex +swap (const xcomplex& z) +{ + return cxswap (z.br); +} + +xcomplex +drot (const xcomplex& z) +{ + return cxdrot (z.br); +} + +xcomplex +rrot (const xcomplex& z) +{ + return cxrrot (z.br); +} + +xreal +abs (const xcomplex& s) +{ + return xreal (cxabs (s.br)); +} + +xreal +arg (const xcomplex& s) +{ + return xreal (cxarg (s.br)); +} + +/* + Some stuff must be added here +*/ + +xcomplex +frac (const xcomplex& x) +{ + return cxfrac (x.br); +} + +xcomplex +trunc (const xcomplex& x) +{ + return cxtrunc (x.br); +} + +xcomplex +round (const xcomplex& x) +{ + return cxround (x.br); +} + +xcomplex +ceil (const xcomplex& x) +{ + return cxceil (x.br); +} + +xcomplex +floor (const xcomplex& x) +{ + return cxfloor (x.br); +} + +xcomplex +fix (const xcomplex& x) +{ + return cxfix (x.br); +} + +xcomplex +tan (const xcomplex& x) +{ + return cxtan (x.br); +} + +xcomplex +sin (const xcomplex& x) +{ + return cxsin (x.br); +} + +xcomplex +cos (const xcomplex& x) +{ + return cxcos (x.br); +} + +xcomplex +atan (const xcomplex& a) +{ + return cxatan (a.br); +} + +xcomplex +asin (const xcomplex& a) +{ + return cxasin (a.br); +} + +xcomplex +acos (const xcomplex& a) +{ + return cxacos (a.br); +} + +xcomplex +sqr (const xcomplex& u) +{ + return cxsqr (u.br); +} + +xcomplex +sqrt (const xcomplex& u) +{ + return cxsqrt (u.br); +} + +xcomplex +root (const xcomplex& u, int i, int n) +{ + return cxroot (u.br, i, n); +} + +xcomplex +exp (const xcomplex& u) +{ + return cxexp (u.br); +} + +xcomplex +exp2 (const xcomplex& u) +{ + return cxexp2 (u.br); +} + +xcomplex +exp10 (const xcomplex& u) +{ + return cxexp10 (u.br); +} + +xcomplex +log (const xcomplex& u) +{ + return cxlog (u.br); +} + +xcomplex +log2 (const xcomplex& u) +{ + return cxlog2 (u.br); +} + +xcomplex +log10 (const xcomplex& u) +{ + return cxlog10 (u.br); +} + +xcomplex +log_sqrt (const xcomplex& u) +{ + return cxlog_sqrt (u.br); +} + +xcomplex +tanh (const xcomplex& v) +{ + return cxtanh (v.br); +} + +xcomplex +sinh (const xcomplex& v) +{ + return cxsinh (v.br); +} + +xcomplex +cosh (const xcomplex& v) +{ + return cxcosh (v.br); +} + +xcomplex +atanh (const xcomplex& v) +{ + return cxatanh (v.br); +} + +xcomplex +asinh (const xcomplex& v) +{ + return cxasinh (v.br); +} + +xcomplex +acosh (const xcomplex& v) +{ + return cxacosh (v.br); +} + +xcomplex +pow (const xcomplex& x, const xcomplex& y) +{ + return cxpow (x.br, y.br); +} + +extern int +hpa_read_item (istream& is, char* buff, unsigned size); + +int +xcomplex::getfrom (istream& is) +{ + char buffer[BUFF_SIZE]; + int n = hpa_read_item (is, buffer, BUFF_SIZE); + + br = atocx (buffer); + return n; +} + +int +xcomplex::print (ostream& os, int sc_not, int sign, int lim) const +{ + char* s = cxpr_asprint (br, sc_not, sign, lim); + + if (!s) + return -1; + else + { + os << s; + free ((void*) s); + return 0; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xcomplex.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xcomplex.h new file mode 100644 index 00000000..5eac2151 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xcomplex.h @@ -0,0 +1,391 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#ifndef _XCOMPLEX_H_ +#define _XCOMPLEX_H_ + +#include "../cxpre.h" +#include +#include +#include "xreal.h" + +using std::istream; +using std::ostream; +using std::string; + + struct double_complex { + double re, im; + }; + + struct float_complex { + float re, im; + }; + +typedef struct xcomplex +{ + friend ostream& operator<< (ostream& os, const xcomplex& x); + friend istream& operator>> (istream& is, xcomplex& x); + friend xcomplex operator+ (const xcomplex& x1, const xcomplex& x2); + friend xcomplex operator- (const xcomplex& x1, const xcomplex& x2); + friend xcomplex operator* (const xcomplex& x1, const xcomplex& x2); + friend xcomplex operator/ (const xcomplex& x1, const xcomplex& x2); + friend xcomplex operator% (const xcomplex& x1, int n); + friend int operator== (const xcomplex& x1, const xcomplex& x2); + friend int operator!= (const xcomplex& x1, const xcomplex& x2); + friend int operator<= (const xcomplex& x1, const xcomplex& x2); + friend int operator>= (const xcomplex& x1, const xcomplex& x2); + friend int operator< (const xcomplex& x1, const xcomplex& x2); + friend int operator> (const xcomplex& x1, const xcomplex& x2); + /* Friend functions */ + friend unsigned long sget (string s, unsigned long startptr, xcomplex& x); + friend const char* bget (const char* buff, xcomplex& x); + friend xcomplex rmul (const xreal& x, const xcomplex& z); + friend xcomplex gdiv (const xcomplex& x1, const xcomplex& x2); + friend xcomplex gmod (const xcomplex& x1, const xcomplex& x2); + friend xcomplex idiv (const xcomplex& x1, const xcomplex& x2); + friend xcomplex mod (const xcomplex& x1, const xcomplex& x2); + friend xcomplex conj (const xcomplex& z); + friend xcomplex inv (const xcomplex& z); + friend xcomplex swap (const xcomplex& z); + friend xcomplex drot (const xcomplex& z); + friend xcomplex rrot (const xcomplex& z); + friend xreal abs (const xcomplex& s); + friend xreal arg (const xcomplex& s); + friend xcomplex frac (const xcomplex& x); + friend xcomplex trunc (const xcomplex& x); + friend xcomplex round (const xcomplex& x); + friend xcomplex ceil (const xcomplex& x); + friend xcomplex floor (const xcomplex& x); + friend xcomplex fix (const xcomplex& x); + friend xcomplex tan (const xcomplex& x); + friend xcomplex sin (const xcomplex& x); + friend xcomplex cos (const xcomplex& x); + friend xcomplex atan (const xcomplex& a); + friend xcomplex asin (const xcomplex& a); + friend xcomplex acos (const xcomplex& a); + friend xcomplex sqr (const xcomplex& u); + friend xcomplex sqrt (const xcomplex& u); + friend xcomplex root (const xcomplex& u, int i, int n); + friend xcomplex exp (const xcomplex& u); + friend xcomplex exp2 (const xcomplex& u); + friend xcomplex exp10 (const xcomplex& u); + friend xcomplex log (const xcomplex& u); + friend xcomplex log2 (const xcomplex& u); + friend xcomplex log10 (const xcomplex& u); + friend xcomplex log_sqrt (const xcomplex& u); + friend xcomplex tanh (const xcomplex& v); + friend xcomplex sinh (const xcomplex& v); + friend xcomplex cosh (const xcomplex& v); + friend xcomplex atanh (const xcomplex& v); + friend xcomplex asinh (const xcomplex& v); + friend xcomplex acosh (const xcomplex& v); + friend xcomplex pow (const xcomplex& x, const xcomplex& y); + + xcomplex (const cxpr* px = &cxZero) : br(*px) { } + xcomplex (cxpr x) : br(x) { } + xcomplex (xpr x, xpr y = xZero) { + br.re = x, br.im = y; + } + xcomplex (xreal x, xreal y = xZERO) { + br.re = x._2xpr(), br.im = y._2xpr(); + } + xcomplex (double x, double y = 0.0) { + br = dctocx (x, y); + } + xcomplex (float x, float y = 0.0) { + br = fctocx (x, y); + } + xcomplex (int m, int n = 0) { + br = ictocx (m, n); + } + xcomplex (long m, long n = 0) { + br = ictocx (m, n); + } + xcomplex (unsigned int u, unsigned int v = 0U) { + br = uctocx (u, v); + } + xcomplex (unsigned long u, unsigned long v = 0U) { + br = uctocx (u, v); + } + xcomplex (const char* str, char** endptr = 0) { + br = strtocx (str, endptr); + } + xcomplex (string str) { + br = atocx (str.c_str ()); + } + xcomplex (const xcomplex& x) { + br = x.br; + } + /* Assignment operators */ + xcomplex& operator= (const xcomplex& x) { + br = x.br; + return *this; + } + xcomplex& operator+= (const xcomplex& x) { + br = cxadd (br, x.br, 0); + return *this; + } + xcomplex& operator-= (const xcomplex& x) { + br = cxadd (br, x.br, 1); + return *this; + } + xcomplex& operator*= (const xcomplex& x) { + br = cxmul (br, x.br); + return *this; + } + xcomplex& operator*= (const xreal& x) { + br = cxrmul (x._2xpr(), br); + return *this; + } + xcomplex& operator/= (const xcomplex& x) { + br = cxdiv (br, x.br); + return *this; + } + xcomplex& operator%= (int n) { + br.re = xpr2 (br.re, n); + br.im = xpr2 (br.im, n); + return *this; + } + /* Increment operators */ + xcomplex& operator++ () { + br = cxadd (br, cxOne, 0); + return *this; + } + xcomplex& operator-- () { + br = cxadd (br, cxOne, 1); + return *this; + } + xcomplex& operator++ (int dummy) { + br = cxadd (br, cxOne, 0); + return *this; + } + xcomplex& operator-- (int dummy) { + br = cxadd (br, cxOne, 1); + return *this; + } + /* Destructor */ + ~xcomplex (void) { + br = cxZero; + } + /* Integer exponent power */ + xcomplex operator() (int n) const { + return cxpwr (br, n); + } + /* Negation */ + xcomplex operator-() const { + return cxneg (br); + } + int operator!() const { + return cxis0 (&br); + } + /* Functions for conversions */ + double_complex _2dcomplex () const { + double_complex z; + + cxtodc (&br, &z.re, &z.im); + return z; + } + float_complex _2fcomplex() const { + float_complex z; + + cxtofc (&br, &z.re, &z.im); + return z; + } + cxpr _2cxpr() const { + return br; + } + string _2string() const { + char* s = cxpr_asprint (br, 1, 1, (XDIM * 48) / 10 - 2); + string str(s); + + free ((void*) s); + return str; + } + /* Real and imaginary part */ + xreal real () const { + return xreal (br.re); + } + xreal imag () const { + return xreal (br.im); + } + xpr _real () const { + return br.re; + } + xpr _imag () const { + return br.im; + } + double dreal () const { + return xtodbl (br.re); + } + double dimag () const { + return xtodbl (br.im); + } + double freal () const { + return xtoflt (br.re); + } + double fimag () const { + return xtoflt (br.im); + } + string sreal () const { + char* s = xpr_asprint (br.re, 1, 1, (XDIM * 48) / 10 - 2); + string str(s); + + free ((void*) s); + return str; + } + string simag () const { + char* s = xpr_asprint (br.im, 1, 1, (XDIM * 48) / 10 - 2); + string str(s); + + free ((void*) s); + return str; + } + void real (const xreal& x) { + br.re = x._2xpr(); + } + void imag (const xreal& x) { + br.im = x._2xpr(); + } + void real (xpr x) { + br.re = x; + } + void imag (xpr x) { + br.im = x; + } + void real (const xpr* px) { + br.re = *px; + } + void imag (const xpr* px) { + br.im = *px; + } + void real (double x) { + br.re = dbltox(x); + } + void imag (double x) { + br.im = dbltox(x); + } + void real (float x) { + br.re = flttox(x); + } + void imag (float x) { + br.im = flttox(x); + } + void real (int x) { + br.re = inttox(x); + } + void imag (int x) { + br.im = inttox(x); + } + void real (long x) { + br.re = inttox(x); + } + void imag (long x) { + br.im = inttox(x); + } + void real (unsigned int x) { + br.re = uinttox(x); + } + void imag (unsigned int x) { + br.im = uinttox(x); + } + void real (unsigned long x) { + br.re = uinttox(x); + } + void imag (unsigned long x) { + br.im = uinttox(x); + } + void real (const char* str, char** endptr = 0) { + br.re = strtox (str, endptr); + } + void imag (const char* str, char** endptr = 0) { + br.im = strtox (str, endptr); + } + void real (string str) { + br.re = atox (str.c_str ()); + } + void imag (string str) { + br.im = atox (str.c_str ()); + } + int getfrom (istream& is); + int print (ostream& os, int sc_not, int sign, int lim) const; + char* asprint (int sc_not, int sign, int lim) const { + return cxpr_asprint (br, sc_not, sign, lim); + } + static void set_fmt (short format) { + ioflags.fmt = format; + } + static void set_notation (short notat) { + ioflags.notat = notat; + } + static void set_signflag (short onoff) { + ioflags.sf = onoff; + } + static void set_mfwd (short wd) { + ioflags.mfwd = wd; + } + static void set_lim (short lim) { + ioflags.lim = lim; + } + static void set_padding (signed char ch) { + ioflags.padding = ch; + } + static void set_ldelim (signed char ch) { + ioflags.ldel = ch; + } + static void set_rdelim (signed char ch) { + ioflags.rdel = ch; + } + static short get_fmt (void) { + return ioflags.fmt; + } + static short get_notation (void) { + return ioflags.notat; + } + static short get_signflag (void) { + return ioflags.sf; + } + static short get_mfwd (void) { + return ioflags.mfwd; + } + static short get_lim (void) { + return ioflags.lim; + } + static signed char get_padding (void) { + return ioflags.padding; + } + static signed char get_ldelim (void) { + return ioflags.ldel; + } + static signed char get_rdelim (void) { + return ioflags.rdel; + } + cxpr br; /* binary representation */ + static xoutflags ioflags; /* output flags */ +} ComplexNumber; + + extern const xcomplex cxZERO, cxONE, cxI; +#define xi cxI +#define xj cxI +#define _i cxI +#define _j cxI + +#endif /* _XCOMPLEX_H_ */ diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xreal.cc b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xreal.cc new file mode 100644 index 00000000..04c9d734 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xreal.cc @@ -0,0 +1,376 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include "xreal.h" + +using namespace std; + +#define BUFF_SIZE 5120 /* 5 Kb */ + +const xreal xZERO = xZero; +const xreal xONE = xOne; +const xreal xTWO = xTwo; +const xreal xTEN = xTen; +const xreal xINF = xPinf; +const xreal x_INF = xMinf; +const xreal xNAN = xNaN; +const xreal xPI = xPi; +const xreal xPI2 = xPi2; +const xreal xPI4 = xPi4; +const xreal xEE = xEe; +const xreal xSQRT2 = xSqrt2; +const xreal xLN2 = xLn2; +const xreal xLN10 = xLn10; +const xreal xLOG2_E = xLog2_e; +const xreal xLOG2_10 = xLog2_10; +const xreal xLOG10_E = xLog10_e; +const xreal x_floatMin = HPA_MIN; +const xreal x_floatMax = HPA_MAX; +xoutflags xreal::ioflags = { -1, XOUT_FIXED, 0, 0, 6, ' ', -1, -1 }; + +ostream& operator<< (ostream& os, const xreal& x) +{ + char buffer[BUFF_SIZE]; + + xsout (buffer, BUFF_SIZE, x.ioflags, x.br); + return os << buffer; +} + +istream& operator>> (istream& is, xreal& x) +{ + double f; + istream& res = is >> f; + + x.br = dbltox (f); + return res; +} + +xreal operator+ (const xreal& x1, const xreal& x2) +{ + return xreal(xadd (x1.br, x2.br, 0)); +} + +xreal operator- (const xreal& x1, const xreal& x2) +{ + return xreal(xadd (x1.br, x2.br, 1)); +} + +xreal operator* (const xreal& x1, const xreal& x2) +{ + return xreal(xmul (x1.br, x2.br)); +} + +xreal operator/ (const xreal& x1, const xreal& x2) +{ + return xreal(xdiv (x1.br, x2.br)); +} + +xreal operator% (const xreal& x, int n) +{ + return xpr2 (x.br, n); +} + +int operator== (const xreal& x1, const xreal& x2) +{ + return (xprcmp (&x1.br, &x2.br) == 0); +} + +int operator!= (const xreal& x1, const xreal& x2) +{ + return (xprcmp (&x1.br, &x2.br) != 0); +} + +int operator<= (const xreal& x1, const xreal& x2) +{ + return (xprcmp (&x1.br, &x2.br) <= 0); +} + +int operator>= (const xreal& x1, const xreal& x2) +{ + return (xprcmp (&x1.br, &x2.br) >= 0); +} + +int operator< (const xreal& x1, const xreal& x2) +{ + return (xprcmp (&x1.br, &x2.br) < 0); +} + +int operator> (const xreal& x1, const xreal& x2) +{ + return (xprcmp (&x1.br, &x2.br) > 0); +} + +unsigned long sget (string s, unsigned long startp, xreal& x) +{ + const char *startptr; + char *tail; + + if (startp >= s.length()) + { + x.br = xZero; + return 0; + } + else + { + startptr = s.c_str() + startp; + x.br = strtox (startptr, &tail); + return tail - startptr; + } +} + +const char* bget (const char* buff, xreal& x) +{ + char* tail; + + if (!buff) + { + cerr << "*** HPA::xreal::bget(): the first argument is the null pointer" << endl; + return 0; + } + else + { + x.br = strtox (buff, &tail); + return (const char*) tail; + } +} + +int compare (const xreal& x1, const xreal& x2) +{ + return xprcmp (&x1.br, &x2.br); +} + +int isNaN (const xreal& x) +{ + return xisNaN (&x.br); +} + +xreal abs (const xreal& s) +{ + return xabs (s.br); +} + +xreal frexp (const xreal& s, int *p) +{ + return xfrexp (s.br, p); +} + +xreal qfmod (const xreal& s, const xreal& t, xreal& q) +{ + return xfmod (s.br, t.br, &q.br); +} + +xreal fmod (const xreal& s, const xreal& t) +{ + xpr q; + + return xfmod (s.br, t.br, &q); +} + +xreal sfmod (const xreal& s, int *p) +{ + return xsfmod (s.br, p); +} + +xreal frac (const xreal& x) +{ + return xfrac (x.br); +} + +xreal trunc (const xreal& x) +{ + return xtrunc (x.br); +} + +xreal round (const xreal& x) +{ + return xround (x.br); +} + +xreal ceil (const xreal& x) +{ + return xceil (x.br); +} + +xreal floor (const xreal& x) +{ + return xfloor (x.br); +} + +xreal fix (const xreal& x) +{ + return xfix (x.br); +} + +xreal tan (const xreal& x) +{ + return xtan (x.br); +} + +xreal sin (const xreal& x) +{ + return xsin (x.br); +} + +xreal cos (const xreal& x) +{ + return xcos (x.br); +} + +xreal atan (const xreal& a) +{ + return xatan (a.br); +} + +xreal asin (const xreal& a) +{ + return xasin (a.br); +} + +xreal acos (const xreal& a) +{ + return xacos (a.br); +} + +xreal atan2 (const xreal& y, const xreal& x) +{ + return xatan2 (y.br, x.br); +} + +xreal sqrt (const xreal& u) +{ + return xsqrt (u.br); +} + +xreal exp (const xreal& u) +{ + return xexp (u.br); +} + +xreal exp2 (const xreal& u) +{ + return xexp2 (u.br); +} + +xreal exp10 (const xreal& u) +{ + return xexp10 (u.br); +} + +xreal log (const xreal& u) +{ + return xlog (u.br); +} + +xreal log2 (const xreal& u) +{ + return xlog2 (u.br); +} + +xreal log10 (const xreal& u) +{ + return xlog10 (u.br); +} + +xreal tanh (const xreal& v) +{ + return xtanh (v.br); +} + +xreal sinh (const xreal& v) +{ + return xsinh (v.br); +} + +xreal cosh (const xreal& v) +{ + return xcosh (v.br); +} + +xreal atanh (const xreal& v) +{ + return xatanh (v.br); +} + +xreal asinh (const xreal& v) +{ + return xasinh (v.br); +} + +xreal acosh (const xreal& v) +{ + return xacosh (v.br); +} + +xreal pow (const xreal& x, const xreal& y) +{ + return xpow (x.br, y.br); +} + +extern int hpa_read_item (istream& is, char* buff, unsigned size); + +int xreal::getfrom (istream& is) +{ + char buffer[BUFF_SIZE]; + int n = hpa_read_item (is, buffer, BUFF_SIZE); + + br = atox (buffer); + return n; +} + +int xreal::print (ostream& os, int sc_not, int sign, int lim) const +{ + char* s = xpr_asprint (br, sc_not, sign, lim); + + if (!s) + return -1; + else + { + os << s; + free ((void*) s); + return 0; + } +} + +extern "C" { + +extern int xErrNo; + +} + +int xmatherrcode () +{ +#ifdef XERR_DFL + return xErrNo; +#else + return -1; +#endif +} + +void clear_xmatherr () +{ +#ifdef XERR_DFL + xErrNo = 0; +#else + cerr << "*** HPA: Feature not available, sorry" << endl; +#endif +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xreal.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xreal.h new file mode 100644 index 00000000..4970a046 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/cxxsrc/xreal.h @@ -0,0 +1,244 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#ifndef _XREAL_H_ +#define _XREAL_H_ + +#include "../xpre.h" +#include +#include +#include + +using std::ostream; +using std::istream; +using std::string; + +typedef struct xreal +{ + friend ostream& operator<< (ostream& os, const xreal& x); + friend istream& operator>> (istream& is, xreal& x); + friend xreal operator+ (const xreal& x1, const xreal& x2); + friend xreal operator- (const xreal& x1, const xreal& x2); + friend xreal operator* (const xreal& x1, const xreal& x2); + friend xreal operator/ (const xreal& x1, const xreal& x2); + friend xreal operator% (const xreal& x1, int n); + friend int operator== (const xreal& x1, const xreal& x2); + friend int operator!= (const xreal& x1, const xreal& x2); + friend int operator<= (const xreal& x1, const xreal& x2); + friend int operator>= (const xreal& x1, const xreal& x2); + friend int operator< (const xreal& x1, const xreal& x2); + friend int operator> (const xreal& x1, const xreal& x2); + /* Friend functions */ + friend unsigned long sget (string s, unsigned long startptr, xreal& x); + friend const char* bget (const char* buff, xreal& x); + friend int compare (const xreal& x1, const xreal& x2); + friend int isNaN (const xreal& x); + friend xreal abs (const xreal& s); + friend xreal frexp (const xreal& s, int *p); + friend xreal qfmod (const xreal& s, const xreal& t, xreal& q); + friend xreal fmod (const xreal& s, const xreal& t); + friend xreal sfmod (const xreal& s, int *p); + friend xreal frac (const xreal& x); + friend xreal trunc (const xreal& x); + friend xreal round (const xreal& x); + friend xreal ceil (const xreal& x); + friend xreal floor (const xreal& x); + friend xreal fix (const xreal& x); + friend xreal tan (const xreal& x); + friend xreal sin (const xreal& x); + friend xreal cos (const xreal& x); + friend xreal atan (const xreal& a); + friend xreal atan2 (const xreal& y, const xreal& x); + friend xreal asin (const xreal& a); + friend xreal acos (const xreal& a); + friend xreal sqrt (const xreal& u); + friend xreal exp (const xreal& u); + friend xreal exp2 (const xreal& u); + friend xreal exp10 (const xreal& u); + friend xreal log (const xreal& u); + friend xreal log2 (const xreal& u); + friend xreal log10 (const xreal& u); + friend xreal tanh (const xreal& v); + friend xreal sinh (const xreal& v); + friend xreal cosh (const xreal& v); + friend xreal atanh (const xreal& v); + friend xreal asinh (const xreal& v); + friend xreal acosh (const xreal& v); + friend xreal pow (const xreal& x, const xreal& y); + + xreal (const xpr* px = &xZero) : br(*px) { } + xreal (xpr x) : br(x) { } + xreal (double x) { + br = dbltox (x); + } + xreal (float x) { + br = flttox (x); + } + xreal (int n) { + br = inttox (n); + } + xreal (long n) { + br = inttox (n); + } + xreal (unsigned int u) { + br = uinttox (u); + } + xreal (unsigned long u) { + br = uinttox (u); + } + xreal (const char* str, char** endptr = 0) { + br = strtox (str, endptr); + } + xreal (string str) { + br = atox (str.c_str ()); + } + xreal (const xreal& x) { + br = x.br; + } + /* Assignment operators */ + xreal& operator= (const xreal& x) { + br = x.br; + return *this; + } + xreal& operator+= (const xreal& x) { + br = xadd (br, x.br, 0); + return *this; + } + xreal& operator-= (const xreal& x) { + br = xadd (br, x.br, 1); + return *this; + } + xreal& operator*= (const xreal& x) { + br = xmul (br, x.br); + return *this; + } + xreal& operator/= (const xreal& x) { + br = xdiv (br, x.br); + return *this; + } + xreal& operator%= (int n) { + br = xpr2 (br, n); + return *this; + } + /* Increment operators */ + xreal& operator++ () { + br = xadd (br, xOne, 0); + return *this; + } + xreal& operator-- () { + br = xadd (br, xOne, 1); + return *this; + } + xreal& operator++ (int dummy) { + br = xadd (br, xOne, 0); + return *this; + } + xreal& operator-- (int dummy) { + br = xadd (br, xOne, 1); + return *this; + } + /* Destructor */ + ~xreal (void) { + br = xZero; + } + /* Integer exponent power */ + xreal operator() (int n) const { + return xpwr (br, n); + } + /* Negation */ + xreal operator-() const { + return xneg (br); + } + int operator!() const { + return xis0 (&br); + } + int isneg() const { + return x_neg ((xpr*)&br); + } + int exp() const { + return x_exp ((xpr*)&br); + } + /* Functions for conversions */ + double _2double () const { + return xtodbl(br); + } + float _2float() const { + return xtoflt(br); + } + xpr _2xpr() const { + return br; + } + string _2string() const { + char* s = xpr_asprint (br, 1, 1, (XDIM * 48) / 10 - 2); + string str(s); + + free ((void*) s); + return str; + } + int getfrom (istream& is); + int print (ostream& os, int sc_not, int sign, int lim) const; + char* asprint (int sc_not, int sign, int lim) const { + return xpr_asprint (br, sc_not, sign, lim); + } + static void set_notation (short notat) { + ioflags.notat = notat; + } + static void set_signflag (short onoff) { + ioflags.sf = onoff; + } + static void set_mfwd (short wd) { + ioflags.mfwd = wd; + } + static void set_lim (short lim) { + ioflags.lim = lim; + } + static void set_padding (signed char ch) { + ioflags.padding = ch; + } + static short get_notation (void) { + return ioflags.notat; + } + static short get_signflag (void) { + return ioflags.sf; + } + static short get_mfwd (void) { + return ioflags.mfwd; + } + static short get_lim (void) { + return ioflags.lim; + } + static signed char get_padding (void) { + return ioflags.padding; + } + xpr br; /* binary representation */ + static xoutflags ioflags; /* output flags */ +} RealNumber; + + int xmatherrcode (); + void clear_xmatherr (); + + extern const xreal xZERO, xONE, xTWO, xTEN; + extern const xreal xINF, x_INF, xNAN; + extern const xreal xPI, xPI2, xPI4, xEE, xSQRT2; + extern const xreal xLN2, xLN10, xLOG2_E, xLOG2_10, xLOG10_E, x_floatMin, x_floatMax; + +#endif /* _XREAL_H_ */ diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/hpa.txt b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/hpa.txt new file mode 100644 index 00000000..e3a00b40 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/hpa.txt @@ -0,0 +1,4604 @@ +HIGH PRECISION ARITHMETIC LIBRARY PROGRAMMER'S MANUAL +Copyright (C) 2005 - 2010 Ivano Primi +Last Update: 2010-07-21 + + +------------------------------------------------------------------------ + + 1. Summary + 2. License + 3. General Technical Comments + 4. General overview + 5. Dealing with runtime errors + 6. Compiling and linking + 7. Real arithmetic + 7.1. Real constants + 7.2. Extended Precision Floating Point Arithmetic + 7.3. Extended Precision Math Library + 7.4. Applications of Extended Precision Arithmetic + 8. Complex Arithmetic + 8.1. Complex constants + 8.2. Extended Precision Complex Arithmetic + 8.3. Extended Precision Complex Math Library + 9. The C++ interface + 10. Compiling and linking with the C++ wrapper + 11. The xreal class + 12. The xcomplex class + 13. Acknowledgments + 14. GNU Free Documentation License + + +------------------------------------------------------------------------ + +Permission is granted to copy, distribute and/or modify this document under +the terms of the GNU Free Documentation License, Version 1.3 or any later +version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. +A copy of the license is included in the +section "GNU Free Documentation License" (#GNUFDL). + + + 1. Summary + ========== + +The High Precision Arithmetic (HPA) library implements a high +precision floating point arithmetic together with a +comprehensive set of support functions. The general +areas covered by these functions include: + +- Extended Precision Arithmetic, +- Extended Precision Math Library, +- Applications of High Precision Computation. + +The math library support includes evaluation of +trigonometric, inverse trigonometric, hyperbolic, +logarithm, and exponential functions at the same +precision as the floating point math itself. +The HPA library also supports high precision complex +arithmetic and includes an Extended Precision +Complex Math Library. + + + 2. License + ========== + +The HPA library has been derived +from a branch of the source code of the CCMath library, +which is a work by Daniel A. Atkinson. +Since Daniel A. Atkinson released the code of the CCMath Library +under GNU Lesser General Public License, it has been possible +for Ivano Primi to modify, complete and redistribute this source code +under the same terms. + +The HPA (abbreviation of High Precision Arithmetic) Library is then +copyrighted by Ivano Primi and +Daniel A. Atkinson. As for the CCMath Library, its source code +is released 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. + +The HPA library 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 this library; if not, see http://www.gnu.org/licenses/. +Write to the email address + + . + +if you want to ask for additional information, report bugs or submit patches. + + + 3. General Technical Comments + ============================= + +The functions forming the HPA library are all implemented in a portable +fashion in the C language. +The IEEE 754 standard for floating point hardware and software is assumed +in the PC/Unix version of this library. The normal configuration of the library +employs a floating point mantissa of 112 bits, which corresponds approximately to a +32 decimal digit precision. Higher precision is available as an option. +An extended floating point number is represented as a combination of the +following elements: + +- sign bit(s): 0 -> positive, 1 -> negative ; +- exponent(e): 15-bit biased integer (bias=16383) ; +- mantissa(m): 7 words of 16 bit length with the leading 1 explicitly represented . + +The range of representable numbers is then given by + + + 2^16384 > x > 2^[-16383] + +or + + + 1.19*10^4932 > x > 1.68*10^-[4932]. + +Special values of the exponent are: + +- all ones -> infinity (floating point overflow) +- all zeros -> number = zero. + +Underflow in operations is handled by a flush to zero. Thus, a number with +the exponent zero and nonzero mantissa is invalid (not-a-number). +From the point of view of the HPA library, a complex number is simply +a structure formed by two extended floating point numbers, representing +respectively the real and the imaginary part of the complex number. + + + 4. General overview + =================== + +The HPA library is composed by two modules. The first one is formed +by the functions for real arithmetic, i.e. by the functions +operating on real arguments. The second one is formed by all functions +which manipulate complex arguments. +The lists of the functions which compose the HPA library +are in the header files xpre.h and cxpre.h. +xpre.h is the header file for real arithmetic, it contains the definition +of an extended precision real number (struct xpr), +and the declarations of the functions provided by the library +to manipulate real arguments. +The numeric type struct xpr can be used to declare and define +real variables, just as in + + + struct xpr q; + +The size of a variable of type struct xpr is given by +(2 x XDIM + 2) bytes, where XDIM is a constant defined in the file +xpre.h (namely, in the file hpaconf.h which is included by +xpre.h). + +cxpre.h is the header file for complex arithmetic, it contains +the definition of an extended precision complex number +(struct cxpr), and the declarations of the functions supplied +by the library to manipulate complex arguments. +The numeric type struct cxpr can be used to declare and define +complex variables, just as in + + + struct cxpr q; + +The size of a variable of type struct cxpr is given by +(4 x XDIM + 4) bytes, where XDIM is the same constant as above. + +Before declaring or defining variables of type struct xpr +and before using anyone of the functions declared in the header file +xpre.h, you have to insert the line + + + #include + +in your source code file. +Similarly, before declaring or defining variables of type struct cxpr +and before using anyone of the functions declared in the header file +cxpre.h, you have to add the line + + + #include + +to your source code file. + +After including in your source code the header file xpre.h or, +if you also need functions handling complex arguments, the header file +cxpre.h, you can start to use the HPA library +by defining all variables and calling +all functions which are necessary for your computations. +In fact, the HPA library DOES NOT REQUIRE that a special initialization +routine must be called before any other function of the library. +Moreover, variables of type struct xpr or struct cxpr +DO NOT NEED to be initialized before they can be used. + +When the HPA library was written, a sort of namespace was created +for all the identifiers used by the library. +This has been achieved by sticking to the following rules: + +1. Identifiers of functions and types are lowercase; the unique +exception to this rule is the function xisNaN(). Their names start +by x, if they are defined in xpre.h, or by cx, if they are defined +in cxpre.h, with the only exception of a few functions, +which have a name ending by tox or tocx: + + strtox(), strtocx(), atox(), atocx(), + + + dbltox(), dctocx(), flttox(), fctocx(), + + + inttox(), ictocx(), uinttox(), uctocx(); + +2. The names of the macros defined by the HPA library are all uppercase +and start by X or CX; +3. The names of the global constants defined by the HPA library start +by x (real constants) or by cx (complex constants) and the letter +which immediately follows this prefix is always uppercase, just as in +xZero, xPi, cxOne, cxIU (IU stays for imaginary +unit); +4. The unique global variable defined by the HPA library is an +error indicator of int type, whose name is xErrNo. + +This is a trivial program showing the use of the HPA library: + + + + #include + #include + + int main (void) + { + struct xpr s; + int i, n; + + do + { + printf ("Give me a number, n = ? \t"); + scanf ("%d", &n); + s = xZero; + for (i = 0; i <= n; i++) + s = xadd (s, xpr2(xOne, i), 0); + printf ("The sum 2^0 + 2^1 + ... + 2^n is equal to\n"); + xprxpr (s, 30); + putchar ('\n'); + } while (n > 0); + return 0; + } + + +This program takes in input from the user an integer value n +and prints on the screen the sum of the first n powers of 2. +In the program we use the functions xpr2() and xprxpr(). +xpr2(x, n), where n is an integer, returns x* 2^n, while +xprxpr(x, m), where m is an integer, prints on the screen +the number x with m decimal digits after the decimal point (.) . + +The HPA library is NOT thread safe. Some of the HPA internal +data could get corrupted if multiple HPA functions are active at the +same time. This is due to the fact that some functions of the HPA library +use static variables to store information. +The user should then guarantee that only one thread is performing +HPA functions. This can usually be achieved by a call to the operating +system to obtain a semaphore, mutex, or critical code section; +the operating system will then guarantee that only one HPA thread will be +active at a time. + + + 5. Dealing with runtime errors + ============================== + +During the use of the HPA library it could happen to pass +to a function an illegal argument, namely, an argument whose +value is not compatible with the mathematical definition of the function. +For example, this occurs when a negative value is passed to +the function xsqrt(). This function computes and returns +the (real) square root of its argument, but the square root of a number +is defined only for non-negative numbers. +So, if x is less than zero, xsqrt(x) can not +be computed and a mathematical error occurs, a so called domain error. +Another type of mathematical error occurs when the second argument +of the division function (xdiv()) is zero: since it is impossible +to divide a number by zero, a division by zero error occurs. +What exactly happens when a mathematical error is detected during the +execution of a function depends on the way the HPA library was compiled +when it was installed on the system where you are working. +If, during the installation process, the default setting was left +unchanged, then, whenever a runtime error occurs within a function of the HPA +library, this function will set an external error indicator to +a suitable value. This value can be looked up later +to know what exactly went wrong. +The name of the variable of type int used as error indicator +is xErrNo. Before any function of the HPA library is +executed, the value of xErrNo is 0. +If a mathematical error occurs when the first HPA function is called, +then xErrNo is set to a suitable positive value, +which indicates the exact type of the error. +After, xErrNo is modified if and only if, during the execution of +an HPA function, another mathematical error occurs. xErrNo is never +reset to 0 by the HPA library; therefore, in order to detect +possible errors, one has to +set xErrNo to zero before calling any function of the HPA library. +An example of error handling is given by: + + + + #include + #include + + extern int xErrNo; + + int main (void) + { + int n; + struct xpr sr; + + do + { + printf ("Give me a number, n = ? \t"); + scanf ("%d", &n); + xErrNo = 0; + sr = xsqrt (inttox (n)); + if (xErrNo == 0) + { + printf ("The square root of %d is\n", n); + xprxpr (sr, 30); + putchar ('\n'); + } + else + fprintf (stderr, "*** Error: Out of domain\n"); + } while (n != 0); + return 0; + } + + +In this program xErrNo is reset to zero, at each execution of the +do {...} while(); loop, before the call of the xsqrt() function. + +However, the HPA library could be compiled to deal differently with +runtime errors. +For example, in case of error a suitable message could be +printed on stderr and the library could also cause the +termination of the calling program via exit(1). +Finally, the library could also be compiled to ignore +any mathematical error (sigh !). To know how the routines of +the HPA library deal with errors is sufficient to examine the file +hpaconf.h (which is automatically included by xpre.h and +cxpre.h). This file defines the macro: + +- XERR_DFL to mean that, in case of error, +xErrNo is suitably set; +- XERR_WARN to mean that, in case of error, +a suitable message is printed on stderr; +- XERR_EXIT to mean that, in case of error, +the calling program is terminated +through a call to exit(1) after +printing a message on stderr; +- XERR_IGN to mean that, in case of error, +nothing is done or signaled. + +When the macro XERR_DFL is defined, the header file xpre.h +also defines the macros XENONE, XEDIV, XEDOM, +XEBADEXP, XFPOFLOW and XNERR: + + + #define XENONE 0 /* No error */ + #define XEDIV 1 /* Division by zero */ + #define XEDOM 2 /* Out of domain */ + #define XEBADEXP 3 /* Bad exponent */ + #define XFPOFLOW 4 /* Floating point overflow */ + + #define XNERR 4 /* Number of the non-null error codes */ + +These macros can be used, together with xErrNo, to recover the exact +type of the error occurred during the execution of a routine +of the HPA library. + + + 6. Compiling and linking + ======================== + +Together with the HPA library is installed a little and simple +program called hpaconf. +You can use it to quickly compile and build your programs. +If PREFIX is the root directory chosen to install the HPA library +(the default value for PREFIX is /usr/local), then hpaconf +should be installed inside PREFIX/bin. You can know where hpaconf +is installed by launching the command + + + which hpaconf + +in your console or terminal. +In the following it is assumed that the directory PREFIX/bin +is included in your PATH environment variable (This is surely +true if the command which was able to find hpaconf). + +hpaconf recognizes four options: + +-v + to return the version of HPA installed on your system, +-c + to return the flags needed to compile with HPA, +-l + to return the flags needed to link against HPA, +-n + to print a newline at the end of the output. + +The option -v cannot be used together with the options -c and -l, +but it may be used together with -n: + + + hpaconf -v + +prints on the standard output (console) +the version of HPA installed on your system, + + + hpaconf -v -n + +or + + + hpaconf -n -v + +(order does not matter) behaves exactly the same but +also prints a newline to force the following output to be written on the next line. + +The options -c and -l cannot be used together with -v, but they +can be used both at the same time and can also be accompanied by the option +-n. Of course, order does not matter. + + + hpaconf -c + +prints on the standard output the flags needed to compile with HPA, + + + hpaconf -l + +prints on the standard output the flags needed to link against HPA, + + + hpaconf -c -l + +or + + + hpaconf -l -c + +prints both the flags to compile with HPA and the flags to link against HPA. + +If the option -n is added, then the information printed is followed +by a newline. +An example will show the usefulness of hpaconf. +To compile the source file example.c you should tell the compiler +where looking for the header files of HPA and for the library itself; +to do this it is sufficient to specify the related paths through the options +-I and -L, at least if you are using GCC/G++ as C/C++ compiler. +But in this way you are constrained to remember the path +where HPA was installed, and this is quite uncomfortable. +With hpaconf you can simply use the command + + + cc -c $(hpaconf -c) example.c + +or + + + cc -c `hpaconf -c` example.c + +to compile the file example.c and obtain the object file example.o. +The previous one is the right form of the command +for a shell sh compatible, like ash, bash or ksh. +If you are using another shell, probably the +right form to obtain the expansion of the command hpaconf -c +will be another one (see the manual of your preferred shell for this). +On GNU/Linux, bash is the default shell for all users. If this is +not true for your machine, ask your system administrator. +Once you have obtained the object file example.o, you may do the linkage +by using the command (for a shell sh-compatible): + + + cc example.o $(hpaconf -l) -o example + +or + + + cc example.o `hpaconf -l` -o example + +If you want, you may also compile and build at the same time by using + + + cc example.c $(hpaconf -c -l) -o example + +or + + + cc example.c `hpaconf -c -l` -o example + +which will compile example.c and build the program example. +Naturally, compiling and building at the same time is only +possible when the source code of your program is entirely contained in one +file. + +The hpaconf program may also tell you which options were used +to compile the HPA library for the system where you are working. +This information is displayed, together with hints about usage, when +hpaconf is called with no options. This is the output obtained +on my personal machine: + + + ivano@darkstar[~]$ hpaconf + *** Usage: hpaconf [-v] [-n] or + *** hpaconf [-c] [-l] [-n] + + *** Meaning of the options: + -v returns the current version of the HPA library, + -c returns the flags to compile with HPA library, + -l returns the flags to link against HPA library, + -n adds a newline at the end of the output. + + ----- Features of the HPA library (including build options) ----- + + Size of an extended precision floating point value (in bytes): 16 + Number of bits available for the sign: 1 + Number of bits available for the exponent: 15 + Number of bits available for the mantissa: 112 + Decimal digits of accuracy: ~33 + Dynamic range supported: 2^16384 > x > 2^(-16383) i.e. + 1.19*10^4932 > x > 1.68*10^-(4932) + In case of floating point error + the global (extern) variable 'xErrNo' is suitably set + +The first value shown after the header Features of the HPA library +is the size of a variable of struct xpr type. When I installed the +HPA library on my machine, I chose to compile it by setting XDIM +to 7. Then a variable of type struct xpr turns out to have a size of +16 = 2 * 7 + 2 bytes. +Since XDIM could have been set to another value on the system +where you are working (XDIM could also have the values +11, 15, 19, 23, 27 and 31), the first value shown by hpaconf +could differ on your machine. +The next 2 values (bits available for sign and exponent) are +the same for all installations. +The decimal digits of accuracy depend on the value of XDIM, +namely, they increase together with XDIM till to a maximum of +149 when XDIM is 31. As you can see, the value of XDIM +determines the accuracy provided by the mathematical functions of +the HPA library. Even if a larger value for XDIM implies +a greater accuracy, together with XDIM increase the memory +and the time requested by the routines of the HPA library +to perform their computations. + +The dynamic range supported by the HPA library is always the same, or almost. +The HPA library can be compiled to deal differently with +the error conditions (see previous section (#runtime_errors)). +In the last line of the output of hpaconf, you can find +information about the way runtime errors are handled. +This information can also be retrieved from the file +hpaconf.h, as explained in the previous section. + +The file hpaconf.h also defines the macro HPA_VERSION, a string +containing the version number of the release of the +HPA library currently in use. + + + 7. Real arithmetic + ================== + +The first module of the HPA library is made of functions for +Extended Precision Floating Point Arithmetic, functions of the +Extended Precision Math Library, and of applications of the Extended +Precision Arithmetic. They are all declared in the file xpre.h +together with some macros and numerical constants. +The header file xpre.h also defines the structure xoutflags: + + + struct xoutflags + { + short fmt, notat, sf, mfwd, lim; + signed char padding, ldel, rdel; + }; + +A structure of such kind is used by the output functions +xfout(), xout() and xsout() to know how they have to print +numbers. + +The field notat refers to the notation: it can +be equal to XOUT_SCIENTIFIC (scientific notation) or to XOUT_FIXED +(floating point notation). + +Both XOUT_SCIENTIFIC and XOUT_FIXED are +macros defined inside xpre.h. + +The field sf refers to the sign: if sf is not zero, then every non-negative +number is printed with a plus sign (+) ahead. + +The field mfwd indicates the minimum field width to use in +printing numbers. When mfwd is zero no minimum field width is used. +When mfwd is negative, then the actual minimum field width is given +by -mfwd and the printed number is left adjusted on the +field boundary (default is right justification). + +lim has a different meaning depending on the notation in use. +Together with the scientific notation, lim gives the number of +decimal digits to the right of the decimal point +(lim+1 = total digits displayed). Otherwise, lim + 1 is the +number of significant digits displayed. When lim is negative, +the default value (6) is used. + +Finally, padding defines the padding character to use together +with a non-zero minimum field width. +If padding is negative, then the default padding char (i.e. the +blank character) is used. + +The fields fmt, ldel and rdel are ignored by the functions +xfout(), xout() and xsout(). They are only used by the +functions cxfout(), cxout() and cxsout() to +format and print complex numbers. + +fmt specifies the format to use in printing complex numbers. +The possible values for fmt are XFMT_STD, XFMT_RAW and XFMT_ALT +(these macros are declared inside cxpre.h). +If fmt == XFMT_STD, then the complex number (a, b) is printed +using the notation a+bi or a-bi (depending on the sign of b). +Of course, a and b are printed according to the rules +exposed above. +If fmt == XFMT_RAW, then (a, b) is printed in the form + + + ab + +just like in + + + 1.0 2.5 + +assuming that a = 1.0 and b = 2.5. +Finally, if fmt == XFMT_ALT, then (a,b) is printed +as + + + a, b + +where and are the characters +given by the fields ldel and rdel respectively. +If ldel < 0 or rdel < 0, then ( or ) is used as +default / . + +Care that none of the functions xfout(), xout(), xsout(), +cxfout(), cxout() or cxsout() adds a newline at the end +of the printed number. + + + 7.1. Real constants + =================== + +The header file xpre.h defines several constants. Between the +constants defined in xpre.h there are those ones +corresponding to particular mathematical values: + + + extern const struct xpr xZero, xOne, xTwo, xTen; + extern const struct xpr xPinf, xMinf, xNaN; + extern const struct xpr xPi, xPi2, xPi4, xEe, xSqrt2; + extern const struct xpr xLn2, xLn10, xLog2_e, xLog2_10, + xLog10_e; + +xZero (= 0), xOne (= 1), xTwo (= 2)and xTen (= 10) +do not need a comment. +xPi, xPi2, xPi4, xEe, xSqrt2, xLn2, xLn10, xLog2_e, xLog2_10, xLog10_e +represent, respectively, the values PI (= 3.14159...), PI/2, PI/4, +e (= 2.7182818...), square root of 2 (= 1.4142135...), natural +logarithm of 2 and 10, base-2 logarithm of e and 10, 10-base +logarithm of e. + +xPinf, xMinf and xNan are special values: xPinf represents the value ++oo (plus infinity), xMinf the value -oo (minus infinity) and xNaN +is used to mean an invalid number (NaN stays for Not a Number). +xPinf and xMinf are usually returned by a function to signal a +floating point overflow, positive and negative respectively, while +xNaN is returned by the functions converting ASCII strings to floating +point numbers to indicate that the string given to them as argument +does not contain any valid number. +xPinf, xMinf and xNaN should never be used as arguments for functions, +since this has unpredictable results. + + + 7.2. Extended Precision Floating Point Arithmetic + ================================================= + +The arithmetic functions support the basic computations and input/output +operations for extended precision floating point mathematics. Some +of the operations supply capabilities designed to enhance the computational +efficiency of this arithmetic (e.g., xpwr). +What follows is their complete list including the synopsis for each of them. + + + + + +xadd - Add or subtract two extended precision numbers. + + + struct xpr xadd(struct xpr s,struct xpr t,int f) + + +- s = structure containing first number; +- t = structure containing second number; +- f = control flag: if 0, then s and t are added, +else they are subtracted (s-t). + +The value returned by xadd() is the result +of the addition/subtraction. xadd() can return xPinf or xMinf to +signal a floating point overflow. + +------------------------------------------------------------------------- +xmul - Multiply two extended precision numbers. + + + struct xpr xmul(struct xpr s,struct xpr t) + + +- s = structure containing first number; +- t = structure containing second number. + +The value returned by xmul() is the product s*t. +It can be xPinf or xMinf in case of overflow. + +------------------------------------------------------------------------- +xdiv - Divide one extended precision number by a second. + + + struct xpr xdiv(struct xpr s,struct xpr t) + + +- s = structure containing numerator; +- t = structure containing denominator. + +The value returned by xdiv() is the quotient s/t. + +------------------------------------------------------------------------- +xneg - Change sign (unary minus). + + + struct xpr xneg(struct xpr s) + + +- s = structure containing input number. + +The value returned by xneg() is a structure containing +its argument with the changed sign. + +------------------------------------------------------------------------- +xabs - Compute absolute value. + + + struct xpr xabs(struct xpr s) + + +- s = structure containing input number. + +The value returned by xabs() is a structure containing +the absolute value of its argument. + +------------------------------------------------------------------------- +x_exp - Extract the binary exponent. + + + int x_exp(const struct xpr *p) + + +- p = pointer to an extended precision number. + +The value returned by x_exp() is the binary exponent +(power of 2) of the number pointed to by p. + +------------------------------------------------------------------------- +x_neg - Test the sign of an extended precision number. + + + int x_neg(const struct xpr *p) + + +- p = pointer to an extended precision number. + +The value returned by x_neg() is a sign flag, with +0 meaning positive input, 1 negative input. The input +is, of course, the number pointed to by p. Note that +neither x_exp() nor x_neg() alter the input number. + +------------------------------------------------------------------------- +xpwr - Raise to integer powers. + + + struct xpr xpwr(struct xpr s,int n) + + +- s = structure containing input number; +- n = power desired. + +The return value is the nth power of the first argument. + +------------------------------------------------------------------------- +xpr2 - Multiplication by a power of 2. + + + struct xpr xpr2(struct xpr s,int m) + + +- s = structure containing input number; +- m = power of two desired. + +The return value is the product of +the first argument by the mth power of two. +xpr2() returns xZero in case of underflow, xPinf or +xMinf in case of overflow. + +------------------------------------------------------------------------- +xpow - Power function. + + + struct xpr xpow (struct xpr x, struct xpr y) + + +- x = base; +- y = exponent. + +The return value is the +power of the first argument raised to the second one. +Note that the first argument must be greater than zero. + +------------------------------------------------------------------------- +xprcmp - Compare two extended precision numbers. + + + int xprcmp (const struct xpr *p, const struct xpr *q) + + +- p = pointer to first number; +- q = pointer to second number. + +The value returned by xprcmp() is a comparison flag, with + 1 meaning *p greater than *q, 0 meaning *p equal +to *q, and -1 meaning *p less than *q. Note that +the input numbers are not altered by xprcmp(). + +------------------------------------------------------------------------- +xeq - Check if two numbers are or are not equal. + + + int xeq (struct xpr x1, struct xpr x2) + + +- x1 = first number; +- x2 = second number. + +The return value is 0 if x1 and x2 are different, else a +non-null value. + +------------------------------------------------------------------------- +xneq - Check if two numbers are or are not equal. + + + int xneq (struct xpr x1, struct xpr x2) + + +- x1 = first number; +- x2 = second number. + +The return value is 0 if x1 and x2 are equal, else +a non-null value. + +------------------------------------------------------------------------- +xgt - Check if a number is greater than another one. + + + int xgt (struct xpr x1, struct xpr x2) + + +- x1 = first number; +- x2 = second number. + +The return value is 0 if x1 is less or equal to x2, +else a non-null value. + +------------------------------------------------------------------------- +xge - Check if a number is greater or equal to another one. + + + int xge (struct xpr x1, struct xpr x2) + + +- x1 = first number; +- x2 = second number. + +The return value is 0 if x1 is less than x2, +else a non-null value. + +------------------------------------------------------------------------- +xlt - Check if a number is less than another one. + + + int xlt (struct xpr x1, struct xpr x2) + + +- x1 = first number; +- x2 = second number. + +The return value is 0 if x1 is greater or equal to x2, +else a non-null value. + +------------------------------------------------------------------------- +xle - Check if a number is less or equal to another one. + + + int xle (struct xpr x1, struct xpr x2) + + +- x1 = first number; +- x2 = second number. + +The return value is 0 if x1 is greater than x2, +else a non-null value. + +------------------------------------------------------------------------- +xisNaN - Check if a number is valid or not. + + + int xisNaN (const struct xpr *u) + + +- u = pointer to a structure containing a number. + +The return value is 0 if *u is a valid number, +else a non-null value. + +Remark: +A number is considered invalid (not-a-number) when its +exponent is zero but not its mantissa. + +------------------------------------------------------------------------- +xisPinf - Check if a number is equal to +oo. + + + int xisPinf (const struct xpr *u) + + +- u = pointer to a structure containing a number. + +The return value is 1 if *u is equal to +xPinf (+oo), 0 otherwise. + +------------------------------------------------------------------------- +xisMinf - Check if a number is equal to -oo. + + + int xisMinf (const struct xpr *u) + + +- u = pointer to a structure containing a number. + +The return value is 1 if *u is equal to +xMinf (-oo), 0 otherwise. + +------------------------------------------------------------------------- +xisordnumb - Check if a given number is an ordinary number. + + + int xisordnumb (const struct xpr *u) + + +- u = pointer to a structure containing a number. + +The return value is 1 if *u is a valid number +and is neither xPinf (+oo) nor xMinf (-oo), +else 0. + +------------------------------------------------------------------------- +xis0 - Compare a number with zero. + + + int xis0 (const struct xpr *u) + + +- u = pointer to a structure containing a number. + +The return value is 0 if *u is not zero, else a non-zero value. + +------------------------------------------------------------------------- +xnot0 - Compare a number with zero. + + + int xnot0 (const struct xpr *u) + + +- u = pointer to a structure containing a number. + +The return value is 0 if *u is zero, else a non-zero value. + +------------------------------------------------------------------------- +xsgn - Obtain the sign of a number. + + + int xsgn (const struct xpr *u) + + +- u = pointer to a structure containing a number. + +The return value is 0 when *u is zero or +is an invalid number (not-a-number), 1 if *u is positive, +-1 if *u is negative. + +Remark: +xPinf is considered a positive value, xMinf a negative value. + +------------------------------------------------------------------------- +xtodbl - Cast extended precision numbers to double precision ones. + + + double xtodbl(struct xpr s) + + +- s = structure containing extended precision input. + +The return value is the double precision float corresponding +to s. + +------------------------------------------------------------------------- +dbltox - Convert double precision numbers to extended precision ones. + + + struct xpr dbltox(double y) + + +- y = double precision floating point input. + +The return value is a structure containing extended equivalent +of y. + +------------------------------------------------------------------------- +xtoflt - Cast extended precision numbers to single precision ones. + + + float xtoflt(struct xpr s) + + +- s = structure containing extended precision input. + +The return value is the single precision float corresponding +to s. + +------------------------------------------------------------------------- +flttox - Convert single precision numbers to extended precision ones. + + + struct xpr flttox(float y) + + +- y = single precision floating point input. + +The return value is a structure containing extended equivalent +of y. + +------------------------------------------------------------------------- +inttox - Convert signed integers to extended precision numbers. + + + struct xpr inttox(long n) + + +- n = integer input. + +The return value is a structure containing extended equivalent +of n. + +------------------------------------------------------------------------- +uinttox - Convert unsigned integers to extended precision numbers. + + + struct xpr uinttox(unsigned long n) + + +- n = integer input. + +The return value is a structure containing extended equivalent +of n. + +------------------------------------------------------------------------- +strtox - Convert a floating point number, +expressed as a decimal ASCII string +in a form consistent with C, into the extended precision format. + + + struct xpr strtox (const char* s, char** endptr) + + +- s = pointer to a null terminated ASCII string expressing a +decimal number; +- endptr = NULL, or address of a pointer defined +outside strtox(). + +The value returned by strtox() is a structure containing +the input number in the extended precision format. + +Remarks: +The strtox() function converts the initial portion of the string pointed to +by s to its extended precision representation. + +The expected form of the (initial portion of the) string is: optional +leading white space as recognized by the standard library function +isspace(), an optional plus (+) or minus sign (-), and +then a decimal number. +A decimal number consists of a nonempty sequence of decimal digits possibly +containing a radix character (decimal point, i.e. '.'), optionally +followed by a decimal exponent. A decimal exponent consists of an +E or e, followed by an optional plus or minus sign, followed by +a non-empty sequence of decimal digits, and indicates multiplication by +a power of 10. + +This function returns the converted value, if any. +If the correct value would cause overflow, then xPinf +or xMinf is returned, according to the sign of the value. +If the correct value would cause underflow, xZero is returned. +If no conversion is performed, xNaN is returned. + +If endptr is not NULL, a pointer to the character after the last character +used in the conversion is stored in the location referenced by +endptr. +If no conversion is performed, the value of s is +stored in the location referenced by endptr. + +------------------------------------------------------------------------- +atox - Convert a floating point number, +expressed as a decimal ASCII string +in a form consistent with C, into the extended precision format. + + + struct xpr atox(const char *s) + + +- s = pointer to a null terminated ASCII string expressing a +decimal number. + + +Remark: +The call atox(s) is equivalent to strtox(s, NULL). + +------------------------------------------------------------------------- +xfmod - This function is the extended precision analog of the +fmod function from the C standard library. + + + struct xpr xfmod(struct xpr s,struct xpr t,struct xpr* q) + + +- s = structure containing argument of fmod; +- t = structure containing base number (t must be different from zero); +- q = pointer to store for output integer m. + +The return value is the extended number with same sign as s +and absolute value less than that of t, satisfying +s = m*t + x if s*t>0, or +s = -m*t + x if s*t<0. + +------------------------------------------------------------------------- +xfrexp - This function is the extended precision analog of the +frexp function from the C standard library. + + + struct xpr xfrexp(struct xpr s,int *p) + + +- s = structure containing argument; +- p = pointer to store for output exponent e. + +The return value is the extended number satisfying +x = s*2^(-e) with (-1 < x < +1). + +------------------------------------------------------------------------- +xfrac - This function returns the fractional part of the +input number. + + + struct xpr xfrac (struct xpr s) + + +- s = structure containing argument. + +The return value is the fractional part of the number s, with +the same sign as s. + +Remark: +The fractional part of the number s is 0 if s is an +integer number, otherwise is given by (-)0.xyz..., where +xyz... are the digits of s following the radix character +(.) in the decimal representation. xfrac(s) has always +the same sign as s. + +------------------------------------------------------------------------- +xtrunc - This function returns the integer part of the input number. + + + struct xpr xtrunc (struct xpr s) + + +- s = structure containing argument. + +The return value is the integer part of the number s, with +the same sign as s. + +Remark: + +The integer part of the number s is given by (-)xyz..., where +xyz... are the digits of s before the radix character (.) in +its decimal representation. + +------------------------------------------------------------------------- +xfix - Obtain the integer part of a number (2nd method). + + + struct xpr xfix (struct xpr s) + + +- s = structure containing argument. + +Remark: + +xfix() is provided as an alternative to xtrunc(). xfix() tries +to take into account possible rounding errors and cancel their +effects. The use of xfix() is strongly suggested whenever the argument +is presumed to be an integer number, but it is reasonable to expect +that some rounding errors make its actual value a bit different from +that one it should be. +For instance, when sizeof(struct xpr) == 64, on my machine I +obtain + + + xtrunc (xdiv (inttox(100), inttox(100))) == xZero + + +while the expect result is xOne. This happens since +xdiv (inttox(100), inttox(100)) returns a number a bit lower +than 1. On the other hand + + + xfix (xdiv (inttox(100), inttox(100))) == xOne . + + +Since xfix() introduces another type of rounding error +to give the correct answer in the cases similar to the previous +one, it is not always the right choice. + +------------------------------------------------------------------------- +xround - Round an extended precision number to its nearest integer +value (halfway cases are rounded away from zero). + + + struct xpr xround (struct xpr s) + + +- s = structure containing argument. + +The return value is the integer value nearest to s. + +------------------------------------------------------------------------- +xceil - Round an extended precision number to the smallest integral +value not less than it. + + + struct xpr xceil (struct xpr s) + + +- s = structure containing argument. + +The return value is the smallest integral value not less than +the argument. + +------------------------------------------------------------------------- +xfloor - Round an extended precision number to the largest integral +value not greater than it. + + + struct xpr xfloor (struct xpr s) + + +- s = structure containing argument. + +The return value is the largest integral value not greater than +the argument. + +------------------------------------------------------------------------- +xpr_print - Print an extended precision number in scientific or +floating point format to a given file. + + + void xpr_print (FILE* stream, struct xpr u, int sc_not, + int sign, int lim) + + +- stream = file where the number must be printed; +- u = structure containing number to print; +- sc_not = zero to mean floating point format, +not zero to mean scientific format; +- sign = not zero to put a plus sign (+) before the number if +it is non-negative (in case of negative number a minus sign (-) +is printed even if the parameter sign is zero); +- lim = number of decimal digits to the right of the +decimal point (lim+1 = total digits displayed) in +case of scientific format, otherwise number of significant digits - 1 +(lim+1 = total of significant digits). + +------------------------------------------------------------------------- +xpr_asprint - Convert an extended precision number to a string. + + + char* xpr_asprint (struct xpr u, int sc_not, int sign, int lim) + + +- u = structure containing number to print; +- sc_not = zero to mean floating point format, not zero to mean scientific format; +- sign = not zero to put a plus sign (+) before the number if +it is non-negative (in case of negative number a minus sign (-) +is printed even if the parameter sign is zero); +- lim = number of decimal digits to the right of the +decimal point (lim+1 = total digits displayed) in +case of scientific format, otherwise number of significant digits - 1 +(lim+1 = total of significant digits). + +xpr_asprint() returns the string with the converted number. +The memory for this string is calloc'ed inside the function. + +------------------------------------------------------------------------- +xprxpr - Print an extended precision number in scientific format. + + + void xprxpr(struct xpr u,int lim) + + +- u = structure containing number to print; +- lim = number of decimal digits to the right of the +decimal point (lim+1 = total digits displayed). + +Remark: + + + xprxpr(u, lim) + + +is equivalent to + + + xpr_print(stdout, u, 1, 0, lim) + +------------------------------------------------------------------------- +xtoa - This function converts an extended precision number to a +string. Scientific format is always used. + + + char* xtoa (struct xpr u,int lim) + + +- u = structure containing number to print; +- lim = number of decimal digits to the right of the +decimal point (lim+1 = total digits displayed). + +Remark: + + + xtoa(u, lim) + + +is equivalent to + + + xpr_asprint(u, 1, 0, lim) + +------------------------------------------------------------------------- +xbprint - Print an extended precision number in binary format. + + + void xbprint (FILE* stream, struct xpr u) + + +- stream = file where the number must be printed; +- u = structure containing number to print. + +The xbprint() function supports a bit oriented analysis of +rounding error effects. It always prints a newline (\n) +at the end of the binary string. + +------------------------------------------------------------------------- +xprint - Print an extended precision number as a string of +hexadecimal numbers. + + + void xprint(FILE* stream, struct xpr u) + + +- stream = file where the number must be printed; +- u = structure containing number to print. + +The xprint() function supports a bit oriented analysis of +rounding error effects. It always prints a newline (\n) +at the end. + +------------------------------------------------------------------------- +xfout - Print an extended precision number on file according to +a given set of I/O flags. + + + int xfout (FILE * stream, struct xoutflags ofs, struct xpr x) + + +- stream = file where the number must be printed; +- ofs = structure containing all I/O flags; +- x = structure containing number to print. + +The return value is 0 in case of success, +-1 to mean a failure. + +Remark: +For the definition of struct xoutflags and the meaning +of its fields see section "Real Arithmetic" (#real_arith). +xfout() does not add any newline +at the end of the printed number. + +------------------------------------------------------------------------- +xout - Print an extended precision number on stdout according to +a given set of I/O flags. + + + int xout (struct xoutflags ofs, struct xpr x) + + +- ofs = structure containing all I/O flags; +- x = structure containing number to print. + +The return value is 0 in case of success, -1 to mean a failure. + +Remark: +For the definition of struct xoutflags and the meaning +of its fields see section "Real Arithmetic" (#real_arith). +xout() does not add any newline +at the end of the printed number. + +------------------------------------------------------------------------- +xsout - Write an extended precision number on a string according to +a given set of I/O flags. + + + int xsout (char* s, unsigned long n, struct xoutflags ofs, + struct xpr x) + + +- s = pointer to a buffer of characters (char); +- n = size of the buffer; +- ofs = structure containing all I/O flags; +- x = structure containing number to print. + +The return value is the number of non-null characters written +to the buffer or, if it is greater or equal than n, which would have been +written to the buffer if enough space had been available. + +Remarks: +For the definition of struct xoutflags and the meaning of its fields +see section "Real Arithmetic" (#real_arith). +xsout() always adds a null character ('\0') at the end of +the written number. +xsout() does not write more than n bytes (including +the trailing '\0'). Thus, a return value of n or more +means that the output was truncated. In this case, the contents of the +buffer pointed to by the first argument of xsout() are +completely unreliable. + + + 7.3. Extended Precision Math Library + ==================================== + +The Extended Precision Math Library +provides the elementary functions normally +supported in a C math library. +They are designed to provide full precision accuracy. + + + + + +xsqrt - Compute the square root of an extended precision number. + + + struct xpr xsqrt(struct xpr x) + + +- x = structure containing the input number. + +The return value is the square root of the +input number. A negative argument results in a domain error. + +------------------------------------------------------------------------- +xexp - Compute the exponential function. + + + struct xpr xexp(struct xpr x) + + +- x = structure containing function argument. + +The return value is e (the base of natural logarithms) +raised to x. + +------------------------------------------------------------------------- +xexp2 - Compute the base-2 exponential function. + + + struct xpr xexp2(struct xpr x) + + +- x = structure containing function argument. + +The return value is 2 raised to x. + +------------------------------------------------------------------------- +xexp10 - Compute the base-10 exponential function. + + + struct xpr xexp10(struct xpr x) + + +- x = structure containing function argument. + +The return value is 10 raised to x. + +------------------------------------------------------------------------- +xlog - Compute natural (base e) logarithms. + + + struct xpr xlog(struct xpr x) + + +- x = structure containing function argument. + +This function returns the natural logarithm of +its argument. A null or negative argument results in a +domain error. + +------------------------------------------------------------------------- +xlog2 - Compute base-2 logarithms. + + + struct xpr xlog2(struct xpr x) + + +- x = structure containing function argument. + +This function returns the base-2 logarithm of +its argument. A null or negative argument results in a +domain error. + +------------------------------------------------------------------------- +xlog10 - Compute base-10 logarithms. + + + struct xpr xlog10(struct xpr x) + + +- x = structure containing function argument. + +This function returns the base-10 logarithm of +its argument. A null or negative argument results in a +domain error. + +------------------------------------------------------------------------- +xtan - Tangent function. + + + struct xpr xtan(struct xpr x) + + +- x = structure containing function argument. + +The return value is the tangent of x, where x is +given in radians. +xtan(x) returns xPinf if x is equal to xPi2 +(up to an integer multiple of xPi), +xMinf if x is equal to -xPi2 (up to an +integer multiple of xPi). In both cases a +domain error is produced. + +------------------------------------------------------------------------- +xcos - Cosine function. + + + struct xpr xcos(struct xpr x) + + +- x = structure containing function argument. + +The return value is the cosine of x, where x is +given in radians. + +------------------------------------------------------------------------- +xsin - Sine function. + + + struct xpr xsin(struct xpr x) + + +- x = structure containing function argument. + +The return value is the sine of x, where x is +given in radians. + +------------------------------------------------------------------------- +xatan - Arc tangent function. + + + struct xpr xatan(struct xpr x) + + +- x = structure containing function argument. + +This function returns the arc tangent of x in radians and +the value is mathematically defined to be between -Pi/2 +and Pi/2 (inclusive). + +------------------------------------------------------------------------- +xasin - Arc sine function. + + + struct xpr xasin(struct xpr x) + + +- x = structure containing function argument. + +This function returns the arc sine of x in radians and +the value is mathematically defined to be between -Pi/2 +and Pi/2 (inclusive). If x falls outside the range +-1 to 1, a domain error is produced. + +------------------------------------------------------------------------- +xacos - Arc cosine function. + + + struct xpr xacos(struct xpr x) + + +- x = structure containing function argument. + +This function returns the arc cosine of x in radians and +the value is mathematically defined to be between zero +and Pi (inclusive). If x falls outside the range +-1 to 1, a domain error is produced. + +------------------------------------------------------------------------- +xatan2 - arc tangent function of two variables. + + + struct xpr xatan2 (struct xpr y, struct xpr x) + + +- y = structure containing first argument; +- x = structure containing second argument. + +This function returns the principal value of the arc tangent of y/x, +using the signs of the two arguments to determine the +quadrant of the result, a real number in the range [-xPi,xPi) +(-xPi is included, xPi is excluded). If x and y +are both zero, a domain error is produced and the dummy value +zero is returned. If x is zero and y is positive, then +xPi2 (i.e. PI/2) is returned. +If x is zero and y is negative, the function +returns -xPi2 (i.e. -PI/2). + +------------------------------------------------------------------------- +xtanh - Hyperbolic tangent function. + + + struct xpr xtanh(struct xpr x) + + +- x = structure containing function argument. + +The return value is the hyperbolic tangent of x. + +------------------------------------------------------------------------- +xcosh - Hyperbolic cosine function. + + + struct xpr xcosh(struct xpr x) + + +- x = structure containing function argument. + +The return value is the hyperbolic cosine of x. + +------------------------------------------------------------------------- +xsinh - Hyperbolic sine function. + + + struct xpr xsinh(struct xpr x) + + +- x = structure containing function argument. + +The return value is the hyperbolic sine of x. + +------------------------------------------------------------------------- +xatanh - Hyperbolic arc tangent function. + + + struct xpr xatanh(struct xpr x) + + +- x = structure containing function argument. + +This function returns the hyperbolic arc tangent of x. +If the absolute value of x is greater than 1, +then a domain error is produced. + +------------------------------------------------------------------------- +xasinh - Hyperbolic arc sine function. + + + struct xpr xasinh(struct xpr x) + + +- x = structure containing function argument. + +This function returns the hyperbolic arc sine of x. + +------------------------------------------------------------------------- +xacosh - Hyperbolic arc cosine function. + + + struct xpr xacosh(struct xpr x) + + +- x = structure containing function argument. + +This function returns the hyperbolic arc cosine of x. +If x is less than 1, a domain error is produced. + + + 7.4. Applications of Extended Precision Arithmetic + ================================================== + +The Tchebycheff expansion supplied with the library can be used to +compute the Tchebycheff expansion coefficients of a function to an accuracy +of 32 digits at least. This ability is useful in developing high accuracy function +approximations, since the effect of rounding error on coefficients used in +double precision can effectively be eliminated with these inputs. +The functions provided to this purpose are xchcof() and +xevtch(). + + + + + +xchcof - Compute the Tchebycheff expansion coefficients of a +specified function f(x). + + + struct xpr* xchcof(int m,struct xpr (*xfunc)(struct xpr)) + + +- m = index of the last coefficient (the computed coefficients will +be m+1, indexed from 0 to m); +- xfunc = pointer to user defined function returning extended +precision values of the function f(); + +The return value is the array of the computed coefficients. +The equality + + + f(x) = c[0]/2 + Sum(k=1 to m) c[k]*Tk(x) + +holds, where Tk is the kth Tchebycheff polynomial. + +Remarks: +The memory needed by the returned array is malloc'ed +inside the function xchcof(). +To avoid memory leaks it should be explicitly freed through a call to free(). +In case of insufficient memory xchcof() will return NULL. + +If m <= XMAX_DEGREE (= 50), then the array returned by xchcof() +will have exactly m+1 elements, indexed from 0 to m. +If m > XMAX_DEGREE, then xchcof() will behave as if +m were equal to XMAX_DEGREE, namely, +the array returned by xchcof() will have only +XMAX_DEGREE + 1 elements, indexed from 0 to XMAX_DEGREE. +In other words, a value of m greater than XMAX_DEGREE is +ignored and replaced by XMAX_DEGREE. +XMAX_DEGREE is a macro declared inside the header file +xpre.h . + +------------------------------------------------------------------------- +xevtch - Evaluate an extended precision Tchebycheff expansion. + + + struct xpr xevtch(struct xpr x,struct xpr *a,int m) + + +- x = structure containing function argument; +- a = structure array containing expansion coefficients; +- m = maximum index of coefficient array (dimension=m+1). + +The return value is the number given by the formula + + + f(x) = Sum(k=0 to m) a[k]*Tk(x), + +where Tk is the kth Tchebycheff polynomial. + + + 8. Complex Arithmetic + ===================== + +The second module of the HPA library is formed by +functions for Extended Precision Complex Arithmetic and functions +of the Extended Precision Complex Math Library. +They are all declared in the file cxpre.h together with some +macros and numerical constants. + + + 8.1. Complex constants + ====================== + +The header file cxpre.h defines the constants +cxZero (= 0), cxOne (= 1) and cxIU (= imaginary unit): + + + extern const struct cxpr cxZero; + extern const struct cxpr cxOne; + extern const struct cxpr cxIU; + +which require no explanation. + + + 8.2. Extended Precision Complex Arithmetic + ========================================== + +The functions for complex arithmetic support the basic computations +and input/output operations with extended precision complex values. +Some of the functions supply capabilities designed to enhance the +computational efficiency of the complex arithmetic (e.g., cxpwr and cxpow). +What follows is the complete list of the functions +with related synopses. + + + + + +cxreset - Make a new complex number from its real +and imaginary parts. + + + struct cxpr cxreset (struct xpr re, struct xpr im) + + +- re = structure containing real part; +- im = structure containing imaginary part. + +The value returned by cxreset() is the complex +number having re as its real part, im +as its imaginary part. + +Remark: +cxreset() is also available in the form of a macro: + + + #define CXRESET(re, im) (struct cxpr){re, im} + +------------------------------------------------------------------------- +cxconv - Convert a real number into a complex one. + + + struct cxpr cxconv (struct xpr x) + + +- re = structure containing real part. + +The value returned by cxconv() is the complex +number having x as its real part, zero +as its imaginary part. + +Remark: +cxconv() is also available in the form of a macro: + + + #define CXCONV(x) (struct cxpr){x, xZero} + +------------------------------------------------------------------------- +cxre - Obtain the real part of a complex number. + + + struct xpr cxre (struct cxpr z) + + +- z = structure containing function argument. + +The value returned by cxre(z) is the real part of z. + +Remark: +cxre() is also available in the form of a macro: + + + #define CXRE(z) (z).re + +------------------------------------------------------------------------- +cxim - Obtain the imaginary part of a complex number. + + + struct xpr cxim (struct cxpr z) + + +- z = structure containing function argument. + +The value returned by cxim(z) is the imaginary part of z. + +Remark: +cxim() is also available in the form of a macro: + + + #define CXIM(z) (z).im + +------------------------------------------------------------------------- +cxswap - Swap the real and the imaginary part +of a complex number. + + + struct cxpr cxswap (struct cxpr z) + + +- z = structure containing function argument. + +The value returned by cxswap(z) is the complex +number {cxim(z), cxre(z)}. + +Remark: +cxswap() is also available in the form of a macro: + + + #define CXSWAP(z) (struct cxpr){(z).im, (z).re} + +------------------------------------------------------------------------- +cxconj - Calculate the complex conjugate of a complex number. + + + struct cxpr cxconj (struct cxpr z) + + +- z = structure containing function argument. + +The cxconj() function returns the complex conjugate value of +its argument, i.e. the value obtained by changing the sign of the +imaginary part. + +------------------------------------------------------------------------- +cxneg - Change sign (unary minus) + + + struct cxpr cxneg (struct cxpr z) + + +- z = structure containing function argument. + +cxneg(z) returns the complex number -z: if +z = a+ib, then cxneg(z) returns -a-ib. + +------------------------------------------------------------------------- +cxinv - Obtain the reciprocal of a complex number. + + + struct cxpr cxinv (struct cxpr z) + + +- z = structure containing function argument. + +The value returned by cxinv() is the +reciprocal of its argument. If z is zero, +then a division-by-zero error is produced. + +------------------------------------------------------------------------- +cxabs - Calculate the absolute value of a complex number. + + + struct xpr cxabs (struct cxpr z) + + +- z = structure containing function argument. + +cxabs(z) returns the absolute value of the complex number z. +The result is a real number. + +------------------------------------------------------------------------- +cxarg - Calculate the argument of a complex number. + + + struct xpr cxarg (struct cxpr z) + + +- z = structure containing function argument. + +cxarg(z) returns the argument or phase angle +of the complex number z. The result is a real number +in the range [-xPi,xPi) (-xPi is included, xPi is excluded). +cxarg(z) is equivalent to xatan2(z.im, z.re). + +------------------------------------------------------------------------- +cxadd - Add/subtract two extended precision complex numbers. + + + struct cxpr cxadd (struct cxpr z1, struct cxpr z2, int k) + + +- z1 = structure containing first number; +- z2 = structure containing second number; +- k = control flag: if 0, then z1 and z2 are added, +else they are subtracted (z1-z2). + +The value returned by cxadd() is the result +of the addition/subtraction. + +------------------------------------------------------------------------- +cxsum - Add two extended precision complex numbers. + + + struct cxpr cxsum (struct cxpr z1, struct cxpr z2) + + +- z1 = structure containing first number; +- z2 = structure containing second number. + +The value returned by cxsum() is the result +of the addition z1 + z2. + +------------------------------------------------------------------------- +cxsub - Subtract two extended precision complex numbers. + + + struct cxpr cxsub (struct cxpr z1, struct cxpr z2) + + +- z1 = structure containing first number; +- z2 = structure containing second number. + +The value returned by cxsub() is the result +of the subtraction z1 - z2. + +------------------------------------------------------------------------- +cxmul - Multiply two extended precision complex numbers. + + + struct cxpr cxmul (struct cxpr z1, struct cxpr z2) + + +- z1 = structure containing first number; +- z2 = structure containing second number. + +The value returned by cxmul() is the +product z1 * z2. + +------------------------------------------------------------------------- +cxrmul - Multiply a complex number by a real one. + + + struct cxpr cxrmul (struct xpr c, struct cxpr z) + + +- c = structure containing a real number; +- z = structure containing a complex number. + +The value returned by cxrmul() is the +product c * z. + +------------------------------------------------------------------------- +cxdrot - Multiply a complex number by the imaginary unit. + + + struct cxpr cxdrot (struct cxpr z) + + +- z = structure containing function argument. + +The value returned by cxdrot(z) is the product of +z times the imaginary unit. + +------------------------------------------------------------------------- +cxrrot - Multiply a complex number by -1i, where +1i is the imaginary unit. + + + struct cxpr cxrrot (struct cxpr z) + + +- z = structure containing function argument. + +The value returned by cxrrot(z) is the product of +z times the negative imaginary unit. + +------------------------------------------------------------------------- +cxdiv - Divide two extended precision complex numbers. + + + struct cxpr cxdiv (struct cxpr z1, struct cxpr z2) + + +- z1 = structure containing first number; +- z2 = structure containing second number. + +The value returned by cxdiv(z1, z2) is +the quotient z1 / z2. If z2 is zero, then a +division-by-zero error is produced. + +------------------------------------------------------------------------- +cxgdiv - Gaussian division between complex numbers having +both real and imaginary part integer. + + + struct cxpr cxgdiv (struct cxpr z1, struct cxpr z2) + + +- z1 = structure containing first number; +- z2 = structure containing second number. + +After eventually rounding z1 and z2 by means of +cxround() (see below), cxgdiv(z1, z2) returns +the quotient of the gaussian division of z1 by z2. +If z2 is zero, then a division-by-zero error is produced. + +If you do not know what gaussian division means, probably +you will never need this function :) + +------------------------------------------------------------------------- +cxgmod - Remainder of the Gaussian division. + + + struct cxpr cxgmod (struct cxpr z1, struct cxpr z2) + + +- z1 = structure containing first number; +- z2 = structure containing second number. + +After eventually rounding z1 and z2 by means of +cxround() (see below), cxgmod(z1, z2) returns +the remainder of the gaussian division of z1 by z2. +If z2 is zero, then a division-by-zero error is produced. + +If you do not know what gaussian division means, probably +you will never need this function :) + +------------------------------------------------------------------------- +cxidiv - Integer division. + + + struct cxpr cxidiv (struct cxpr z1, struct cxpr z2) + + +- z1 = structure containing first number; +- z2 = structure containing second number. + +After eventually rounding z1 and z2 by means of +cxround() (see below), cxidiv(z1, z2) returns +the quotient of the integer division of z1 by z2. +If z2 is zero, then a division-by-zero error is produced. +cxidiv() is a smooth extension of the integer division +between real numbers. + +------------------------------------------------------------------------- +cxmod - Remainder of the integer division. + + + struct cxpr cxmod (struct cxpr z1, struct cxpr z2) + + +- z1 = structure containing first number; +- z2 = structure containing second number. + +After eventually rounding z1 and z2 by means of +cxround() (see below), cxmod(z1, z2) returns +the remainder of the integer division of z1 by z2. +If z2 is zero, then a division-by-zero error is produced. + +------------------------------------------------------------------------- +cxpwr - Raise to integer powers. + + + struct cxpr cxpwr (struct cxpr z, int n) + + +- z = structure containing input number; +- n = exponent. + +The return value is the nth power +of the first argument. + +------------------------------------------------------------------------- +cxpow - Power function. + + + struct cxpr cxpow (struct cxpr z1, struct cxpr z2) + + +- z1 = base; +- z2 = exponent. + +The return value is the power of the first argument +raised to the second one. +Note that the modulus of the first argument must be greater than zero, +if the real part of z2 is less or equal than zero, +otherwise a bad-exponent error is produced. + +------------------------------------------------------------------------- +cxsqr - Square of a number. + + + struct cxpr cxsqr (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the square of its argument. + +------------------------------------------------------------------------- +cxroot - nth root of a complex number. + + + struct cxpr cxroot (struct cxpr z, int i, int n) + + +cxroot(z,i,n) returns the ith branch of +the nth root of z. +If n is zero or negative and the modulus of z is zero, +then a bad-exponent error is produced. + +------------------------------------------------------------------------- +cxsqrt - Principal branch of the square root of a complex number. + + + struct cxpr cxsqrt (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the principal branch of +the square root of its argument. + +------------------------------------------------------------------------- +cxprcmp - Compare two extended precision complex numbers. + + + struct cxprcmp_res cxprcmp (const struct cxpr* z1, + const struct cxpr* z2) + + +- z1 = pointer to first number; +- z2 = pointer to second number. + +The value returned by cxprcmp() is a structure formed by two +comparison flags: + + + struct cxprcmp_res + { + int re, im; + }; + +If the .re field of the returned structure is: + +- +1, then z1->re is greater than z2->re, +- 0, then z1->re is equal to z2->re, +- -1, then z1->re is less than z2->re. + +The meaning of the .im field is the same but refers +to z1->im and z2->im. +Note that the input numbers are not altered by cxprcmp(). + +------------------------------------------------------------------------- +cxis0 - Compare a complex number with zero. + + + int cxis0 (const struct cxpr* z) + + +- z = pointer to an extended precision complex number. + +The return value is 0 if *z is not zero, else a non-zero value. + +------------------------------------------------------------------------- +cxnot0 - Compare a complex number with zero. + + + int cxnot0 (const struct cxpr* z) + + +- z = pointer to an extended precision complex number. + +The return value is 0 if *z is zero, else a non-zero value. + +------------------------------------------------------------------------- +cxeq - Check if two complex numbers are or are not equal. + + + int cxeq (struct cxpr z1, struct cxpr z2) + + +- z1 = first number; +- z2 = second number. + +The return value is 0 if z1 and z2 are different, else a +non-null value. + +------------------------------------------------------------------------- +cxneq - Check if two complex numbers are or are not equal. + + + int cxneq (struct cxpr z1, struct cxpr z2) + + +- z1 = first number; +- z2 = second number. + +The return value is 0 if z1 and z2 are equal, else +a non-null value. + +------------------------------------------------------------------------- +cxgt - Check if a complex number is greater than another one. + + + int cxgt (struct cxpr z1, struct cxpr z2) + + +- z1 = first number; +- z2 = second number. + +The return value is 0 if z1 is not greater than z2, +else a non-null value. + +------------------------------------------------------------------------- +cxge - Check if a complex number is greater or equal to another one. + + + int cxge (struct cxpr z1, struct cxpr z2) + + +- z1 = first number; +- z2 = second number. + +The return value is 0 if z1 is not greater or equal to z2, +else a non-null value. + +------------------------------------------------------------------------- +cxlt - Check if a complex number is less than another one. + + + int cxlt (struct cxpr z1, struct cxpr z2) + + +- z1 = first number; +- z2 = second number. + +The return value is 0 if z1 is not less than z2, +else a non-null value. + +------------------------------------------------------------------------- +cxle - Check if a complex number is less or equal to another one. + + + int cxle (struct cxpr z1, struct cxpr z2) + + +- z1 = first number; +- z2 = second number. + +The return value is 0 if z1 is not less or equal to z2, +else a non-null value. + +------------------------------------------------------------------------- +dctocx - Convert a double precision complex number to +an extended precision number. + + + struct cxpr dctocx (double re, double im) + + +- re = real part of the double precision complex number; +- im = imaginary part of the double precision complex number. + +The value returned by dctocx(re,im) is the +extended precision equivalent of the complex number +(re, im). + +------------------------------------------------------------------------- +cxtodc - Convert an extended precision complex number to +a double precision complex number. + + + void cxtodc (const struct cxpr *z, double *re, double *im) + + +- z = pointer to an extended precision complex number; +- re = pointer to a double precision number; +- im = pointer to a double precision number. + +cxtodc() stores in its second and last argument respectively +the real and the imaginary part of the number +pointed to by its first argument. + +------------------------------------------------------------------------- +fctocx - Convert a single precision complex number to +an extended precision number. + + + struct cxpr fctocx (float re, float im) + + +- re = real part of the single precision complex number; +- im = imaginary part of the single precision complex number. + +The value returned by fctocx(re,im) is the +extended precision equivalent of the complex number +(re, im). + +------------------------------------------------------------------------- +cxtofc - Convert an extended precision complex number to +a single precision complex number. + + + void cxtofc (const struct cxpr *z, float *re, float *im) + + +z = pointer to an extended precision complex number; + +- re = pointer to a single precision number; +- im = pointer to a single precision number. + +cxtofc() stores in its second and last argument respectively +the real and the imaginary part of the number +pointed to by its first argument. + +------------------------------------------------------------------------- +ictocx - Convert an integer complex number to +an extended precision number. + + + struct cxpr ictocx (long re, long im) + + +- re = real part of the integer complex number; +- im = imaginary part of the integer complex number. + +The value returned by ictocx(re,im) is the +extended precision equivalent of the complex number +(re, im). + +------------------------------------------------------------------------- +uctocx - Convert an integer complex number to +an extended precision number. + + + struct cxpr uctocx (unsigned long re, unsigned long im) + + +- re = real part of the integer complex number; +- im = imaginary part of the integer complex number. + +The value returned by uctocx(re,im) is the +extended precision equivalent of the complex number +(re, im). + +------------------------------------------------------------------------- +strtocx - Convert a floating point complex number, +expressed as a decimal ASCII string +in a form consistent with C, into the extended precision format. + + + struct cxpr strtocx (const char *s, char **endptr) + + +- s = pointer to a null terminated ASCII string expressing a +complex number; +- endptr = NULL or address of a pointer defined +outside strtocx(). + +The value returned by strtocx() is +the input number in extended precision format. + +Remarks: +The strtocx() function converts the initial portion of +the string pointed to +by s to its extended precision representation. + +The expected form of the (initial portion of the) string is optional +leading white space as recognized by the standard library function +isspace(), an optional plus (+) or minus sign (-) and +then a decimal number. +A decimal number consists of a nonempty sequence of decimal digits possibly +containing a radix character (decimal point, i.e. '.'), optionally +followed by a decimal exponent. A decimal exponent consists of an +E or e, followed by an optional plus or minus sign, followed by +a non-empty sequence of decimal digits, and indicates multiplication by +a power of 10. + +After this decimal number there can be an i character or, +alternatively, some optional white spaces, +an optional plus (+) or minus sign (-) and +then another decimal number followed by an i character. +Examples of valid representations of complex numbers are: + +"12","34.56",".7895i","-34.56-7.23i", +"-45.7 +23.4i". + +This function returns the converted value, if any. +If the correct value for the real or/and +the imaginary part would cause overflow, then xPinf +or xMinf is returned in the corresponding field, +according to the sign of the value. +If the correct value would cause underflow, xZero is returned. +If no conversion is performed, xNaN is returned. + +If endptr is not NULL, a pointer to the character after the last character +used in the conversion is stored in the location referenced by +endptr. +If no conversion is performed, the value of s is +stored in the location referenced by endptr. + +------------------------------------------------------------------------- +atocx - Convert a floating point complex number, +expressed as a decimal ASCII string +in a form consistent with C, into the extended precision format. + + + struct cxpr atocx (const char *s) + + +- s = pointer to a null terminated ASCII string expressing a +complex number. + +The return value is the input number converted to the +extended precision format. + +Remark: +The call atocx(s) is equivalent to strtocx(s, NULL). + +------------------------------------------------------------------------- +cxpr_asprint - Convert an extended precision complex +number to a string. + + + char *cxpr_asprint (struct cxpr z, int sc_not, int sign, + int lim) + + +- z = structure containing number to print; +- sc_not = zero to mean floating point notation, not zero to mean scientific notation; +- sign = not zero to put a plus sign (+) before the real part +of the number if it is non-negative (in case of negative real part +a minus sign (-) is printed even if the parameter sign is zero); +- lim = number of decimal digits to the right of the +decimal point (lim+1 = total digits displayed) in +case of scientific notation, else number of significant digits - 1 +(lim+1 = total of significant digits). + +cxpr_asprint() returns the string with the converted number. +The memory for this string is calloc'ed inside the function. +cxpr_asprint() uses always the format "a+bi" in +the conversion. + +------------------------------------------------------------------------- +cxtoa - This function converts an extended precision complex +number to a string. +Scientific notation is always used for both real and imaginary part. + + + char *cxtoa (struct cxpr z, int lim) + + +- z = structure containing number to print; +- lim = number of decimal digits to the right of the +decimal point (lim+1 = total digits displayed). + +Remark: + + + cxtoa(z, lim) + +is equivalent to + + + cxpr_asprint(z, 1, 0, lim) + +------------------------------------------------------------------------- +cxfrac - Fractional part of both real and imaginary part. + + + struct cxpr cxfrac (struct cxpr z) + + +- z = structure containing function argument. + +cxfrac(z) returns {xfrac(z.re), xfrac(z.im)}. + +------------------------------------------------------------------------- +cxtrunc - Integer part of both real and imaginary part. + + + struct cxpr cxtrunc (struct cxpr z) + + +- z = structure containing function argument. + +cxtrunc(z) returns {xtrunc(z.re), xtrunc(z.im)}. + +------------------------------------------------------------------------- +cxfix - Integer part of both real and imaginary part (2nd method). + + + struct cxpr cxfix (struct cxpr z) + + +- z = structure containing function argument. + +cxfix(z) returns {xfix(z.re), xfix(z.im)}. + +------------------------------------------------------------------------- +cxround - Rounding real and imaginary part +to the nearest integer values +(halfway cases are rounded away from zero). + + + struct cxpr cxround (struct cxpr z) + + +- z = structure containing function argument. + +cxround(z) returns {xround(z.re), xround(z.im)}. + +------------------------------------------------------------------------- +cxfloor - Rounding real and imaginary part +to the largest integral values not greater than them. + + + struct cxpr cxfloor (struct cxpr z) + + +- z = structure containing function argument. + +cxfloor(z) returns {xfloor(z.re), xfloor(z.im)}. + +------------------------------------------------------------------------- +cxceil - Rounding real and imaginary part +to the smallest integral values not less than them. + + + struct cxpr cxceil (struct cxpr z) + + +- z = structure containing function argument. + +cxceil(z) returns {xceil(z.re), xceil(z.im)}. + +------------------------------------------------------------------------- +cxpr_print - Print an extended precision complex number +in scientific or floating point notation to a given file. + + + void cxpr_print (FILE * stream, struct cxpr z, int sc_not, + int sign, int lim) + + +- stream = file where the number must be printed; +- z = structure containing number to print; +- sc_not = zero to mean floating point notation, not zero to mean scientific notation; +- sign = not zero to put a plus sign (+) before the real part +of the number if it is non-negative (in case of negative real part +a minus sign (-) is printed even if the parameter sign is zero); +- lim = number of decimal digits to the right of the +decimal point (lim+1 = total digits displayed) in +case of scientific notation, else number of significant digits - 1 +(lim+1 = total of significant digits). + +------------------------------------------------------------------------- +cxprcxpr - Print an extended precision complex number +in scientific notation. + + + void cxprcxpr (struct cxpr z, int m) + + +- z = structure containing number to print; +- lim = number of decimal digits to the right of the +decimal point (lim+1 = total digits displayed). + +Remark: + + + cxprcxpr(z, lim) + +is equivalent to + + + cxpr_print(stdout, z, 1, 0, lim) + +------------------------------------------------------------------------- +cxprint - Print an extended precision complex number as a couple +of strings of hexadecimal numbers. + + + void cxprint (FILE * stream, struct cxpr z) + + +- stream = file where the number must be printed; +- z = structure containing number to print. + +The cxprint() function supports a bit oriented analysis of +rounding error effects. It always prints a newline (\n) +at the end. + +------------------------------------------------------------------------- +cxfout - Print an extended precision complex number to a file +according to a given set of I/O flags. + + + int cxfout (FILE * stream, struct xoutflags ofs, struct cxpr z) + + +- stream = file where the number must be printed; +- ofs = structure containing all I/O flags; +- z = structure containing number to print. + +The return value is 0 in case of success, +-1 to mean a failure. + +Remark: +For the definition of struct xoutflags and the meaning +of its fields see section "Real Arithmetic" (#real_arith). +cxfout() does not add any newline +at the end of the printed number. + +------------------------------------------------------------------------- +cxout - Print an extended precision complex number on stdout +according to a given set of I/O flags. + + + int cxout (struct xoutflags ofs, struct cxpr z) + + +- ofs = structure containing all I/O flags; +- z = structure containing number to print. + +The return value is 0 in case of success, -1 to mean a failure. + +Remark: +For the definition of struct xoutflags and the meaning +of its fields see section "Real Arithmetic" (#real_arith). +cxout() does not add any newline +at the end of the printed number. + +------------------------------------------------------------------------- +cxsout - Write an extended precision complex number on a string +according to a given set of I/O flags. + + + unsigned long cxsout (char *s, unsigned long n, + struct xoutflags ofs, struct cxpr z) + + +- s = pointer to a buffer of characters (char); +- n = size of the buffer; +- ofs = structure containing all I/O flags; +- z = structure containing number to print. + +The return value is the number of the non-null characters written +to the buffer or, if it is greater or equal than n, which would have been +written to the buffer if enough space had been available. + +Remark: +For the definition of struct xoutflags and the meaning of its fields +see section "Real Arithmetic" (#real_arith). +cxsout() always adds a null character ('\0') at the end of +the written number. +cxsout() does not write more than n bytes (including +the trailing '\0'). Thus, a return value of n or more +means that the output was truncated. In this case, the contents of the +buffer pointed to by the first argument of cxsout() are +completely unreliable. + + + 8.3. Extended Precision Complex Math Library + ============================================ + +The Extended Precision Complex Math Library +provides the elementary functions normally +supported in a complex math library. +They are designed to provide full precision accuracy. + + + + + +cxexp - Compute the complex exponential function. + + + struct cxpr cxexp (struct cxpr z) + + +- z = structure containing function argument. + +The return value is e (the base of natural logarithms) +raised to z. + +------------------------------------------------------------------------- +cxexp2 - Compute the base-2 complex exponential function. + + + struct cxpr cxexp2 (struct cxpr z) + + +- z = structure containing function argument. + +The return value is 2 raised to z. + +------------------------------------------------------------------------- +cxexp10 - Compute the base-10 complex exponential function. + + + struct cxpr cxexp10 (struct cxpr z) + + +- z = structure containing function argument. + +The return value is 10 raised to z. + +------------------------------------------------------------------------- +cxlog - Compute natural (base e) logarithm of a complex number. + + + struct cxpr cxlog (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the natural logarithm of +its argument. A null argument results in a +domain error. +The imaginary part of the result lies in the interval +[-xPi,xPi) (-xPi is included, xPi is excluded). + +------------------------------------------------------------------------- +cxlog2 - Compute base-2 logarithm of a complex number. + + + struct cxpr cxlog2 (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the base-2 logarithm of +its argument. A null argument results in a +domain error. + +------------------------------------------------------------------------- +cxlog10 - Compute base-10 logarithm of a complex number. + + + struct cxpr cxlog10 (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the base-10 logarithm of +its argument. A null argument results in a +domain error. + +------------------------------------------------------------------------- +cxlog_sqrt - Compute natural (base e) logarithm of the +principal branch of the square root of a complex number. + + + struct cxpr cxlog_sqrt (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the natural logarithm of +the principal branch of the square root of its argument. +A null argument results in a domain error. +The imaginary part of the result lies in the range +[-xPi2,xPi2) (-xPi2 is included, xPi2 is excluded). + +------------------------------------------------------------------------- +cxtan - Complex tangent function. + + + struct cxpr cxtan (struct cxpr z) + + +- z = structure containing function argument. + +The return value is the tangent of the complex number z. +cxtan(z) yields a domain error if the imaginary +part of z is null and the real part is equal, +up to an integer multiple of xPi, to xPi2. + +------------------------------------------------------------------------- +cxcos - Complex cosine function. + + + struct cxpr cxcos (struct cxpr z) + + +- z = structure containing function argument. + +The return value is the cosine of the complex number z. + +------------------------------------------------------------------------- +cxsin - Complex sine function. + + + struct cxpr cxsin (struct cxpr z) + + +- z = structure containing function argument. + +The return value is the sine of the complex number z. + +------------------------------------------------------------------------- +cxatan - Complex arc tangent function. + + + struct cxpr cxatan (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the arc tangent of the complex +number z, i.e. a number w such that +z = tan(w). +If the real part of z is null and the +imaginary part is equal to +1 or -1, +then a domain error is produced. + +------------------------------------------------------------------------- +cxasin - Complex arc sine function. + + + struct cxpr cxasin (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the arc sine of the complex +number z, i.e. a number w such that +z = sin(w). + +------------------------------------------------------------------------- +cxacos - Complex arc cosine function. + + + struct cxpr cxacos (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the arc cosine of the complex +number z, i.e. a number w such that +z = cos(w). + +------------------------------------------------------------------------- +cxtanh - Complex hyperbolic tangent function. + + + struct cxpr cxtanh (struct cxpr z) + + +- z = structure containing function argument. + +The return value is the hyperbolic tangent +of the complex number z. +cxtanh(z) yields a domain error if the real +part of z is null and the imaginary part is equal, +up to an integer multiple of xPi, to xPi2. + +------------------------------------------------------------------------- +cxcosh - Complex hyperbolic cosine function. + + + struct cxpr cxcosh (struct cxpr z) + + +- z = structure containing function argument. + +The return value is the hyperbolic cosine of +the complex number z. + +------------------------------------------------------------------------- +cxsinh - Complex hyperbolic sine function. + + + struct cxpr cxsinh (struct cxpr z) + + +- z = structure containing function argument. + +The return value is the hyperbolic sine of +the complex number z. + +------------------------------------------------------------------------- +cxatanh - Complex hyperbolic arc tangent function. + + + struct cxpr cxatanh (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the hyperbolic arc tangent of +the complex number z, i.e. a number w such that +z = tanh(w). +If the imaginary part of z is null and the +real part is equal to +1 or -1, +then a domain error is produced. + +------------------------------------------------------------------------- +cxasinh - Complex hyperbolic arc sine function. + + + struct cxpr cxasinh (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the hyperbolic arc sine of +the complex number z, i.e. a number w such that +z = sinh(w). + +------------------------------------------------------------------------- +cxacosh - Complex hyperbolic arc cosine function. + + + struct cxpr cxacosh (struct cxpr z) + + +- z = structure containing function argument. + +This function returns the hyperbolic arc cosine of +the complex number z, i.e. a number w such that +z = cosh(w). + +------------------------------------------------------------------------- + + + +FINAL REMARK: +The header file cxpre.h also defines the macros +cxconvert, cxdiff, cxprod and cxipow: + + + #define cxconvert cxconv + #define cxdiff cxsub + #define cxprod cxmul + #define cxipow cxpwr + +This allows to use cxconvert as synonym of cxconv, +cxdiff as synonym of cxsub, cxprod in place +of cxmul, and cxipow for cxpwr. + + + 9. The C++ interface + ==================== + +The HPA library supplies a C++ wrapper allowing to +perform high precision computations with the +same syntax of the normal code. +Using the C++ wrapper permits you to write things like: + + + // Compute the factorial of the integer n + + xreal factorial(xreal n) + { + xreal i; + xreal product = 1; + for (i=2; i <= n; i++) + product *= i; + return product; + } + +Technically, the C++ wrapper is contained in a separate +library. However, this module is distributed together +with the HPA library as an extension to it. +This section of the manual describes +the C++ interface of this extension. +This one is formed by two classes, called xreal +and xcomplex respectively. +The type xreal can be used to declare or define +real variables. In addition, it defines the mathematical +operations and functions which can be used with them. +The same is for the type xcomplex with respect to +complex variables and their manipulation. +Once you have variables of xreal and xcomplex type, +you can use the usual C++ syntax, but all computations +will be performed with the high precision math library. +Of course, this possibility +greatly simplifies the writing of code. +Note the difference between + + + struct xpr x, y; + char buffer[256]; + + while ( (fgets (buffer, 256, stdin)) ) + { + x = atox (buffer); + printf ("The square root of 2 * %s + 1 is ", buffer); + y = xadd (xpr2(x, 1), xOne, 0); + xprxpr (xsqrt (y), 30); + putchar ('\n'); + } + +and its C++ version: + + + xreal x; + + while ( x.getfrom(cin) > 0 ) + cout << "The square root of 2 * " << x << " + 1 is " + << sqrt(2 * x + 1) << endl; + +which is much more compact and easier to understand. + +The use of the C++ wrapper requires however a recent +and ANSI-compliant C++ compiler (for instance g++ 3.x). +Moreover, before declaring or defining variables of xreal +type and before using anyone of the functions or operators +declared in the header file xreal.h, you have to insert the line + + + #include + +in your source code file. + +Similarly, before declaring or defining variables of xcomplex +type and before using anyone of the functions or operators +declared in the header file xcomplex.h, you have to add the line + + + #include + +to your source code file. + +After that, it is recommendable to add the directive + + + using namespace HPA; + +since all objects of the C++ wrapper are declared +or defined within the namespace HPA. +Alternatively, you should always use the prefix +HPA:: in front of any identifiers coming +from the files xreal.h or xcomplex.h. +One has to tell the compiler indeed, where it has to look for +the classes xreal, xcomplex and the related stuff. + +This code comes from a real program: + + + #include + #include + using namespace HPA; + + int main (void) + { + xreal x; + + while ( x.getfrom(cin) > 0 ) + cout << "The square root of 2 * " << x << " + 1 is " + << sqrt(2 * x + 1) << endl; + return 0; + } + +The header files xreal.h and +xcomplex.h make also directly available the standard classes +ostream, istream and string +(see sections "The xreal class" (#xreal_class) + and "The xcomplex class" (#xcomplex_class)). + + + 10. Compiling and linking with the C++ wrapper + ============================================== + +Whenever you have to compile and build a program making use +of the C++ wrapper for the HPA library, you can do it by following +the same instructions given in the section "Compiling and linking" (#comp_link), +just take care to use hpaxxconf in place of +hpaconf, as in + + + c++ -c $(hpaxxconf -c) example.cc + + + + c++ -c `hpaxxconf -c` example.cc + +to compile the file example.cc and obtain the object file example.o, +or in + + + c++ example.o $(hpaxxconf -l) -o example + + + + c++ example.o `hpaxxconf -l` -o example + +to do the linkage. +If you want, you may also compile and build at the same time by using + + + c++ example.cc $(hpaxxconf -c -l) -o example + + + + c++ example.cc `hpaxxconf -c -l` -o example + +All these examples assume that you are working +with bash or with another shell sh-compatible. +In any case, the synopsis of hpaxxconf is the same of hpaconf. + +Warning: +The command hpaxxconf is available only if +the C++ wrapper was also built when the HPA library was installed on +the system where you are working. +It is possible to install the HPA library without +its C++ wrapper. In this case, if you try to launch +the command hpaxxconf, the shell will print +the error message "Command not found" or +something similar. + + + 11. The xreal class + =================== + +The interface of the xreal class is +contained in the header file xreal.h, +whose contents you can find here together +with the necessary explanations. + + + #ifndef _XREAL_H_ + #define _XREAL_H_ + + #include + #include + #include + #include + + using std::ostream; + using std::istream; + using std::string; + + namespace HPA { + + class xreal { + // << and >> are used respectively for the output and the + // input of extended precision numbers. + // The input operator >> reads a double precision + // number and then converts it to an extended precision + // number. This can have undesirable rounding effects. + // To avoid them, use the input function + // xreal::getfrom() (see below). + friend ostream& operator<< (ostream& os, const xreal& x); + friend istream& operator>> (istream& is, xreal& x); + + // +, -, *, / are the usual arithmetic operators + friend xreal operator+ (const xreal& x1, const xreal& x2); + friend xreal operator- (const xreal& x1, const xreal& x2); + friend xreal operator* (const xreal& x1, const xreal& x2); + friend xreal operator/ (const xreal& x1, const xreal& x2); + + // x % n is equal to x * pow (2,n) + friend xreal operator% (const xreal& x1, int n); + + // ==, !=, <=, >=, <, > are the usual comparison operators + friend int operator== (const xreal& x1, const xreal& x2); + friend int operator!= (const xreal& x1, const xreal& x2); + friend int operator<= (const xreal& x1, const xreal& x2); + friend int operator>= (const xreal& x1, const xreal& x2); + friend int operator< (const xreal& x1, const xreal& x2); + friend int operator> (const xreal& x1, const xreal& x2); + + // sget (s, n, x) tries to read an extended precision + // number from the string 's' starting from the position + // 'n'. The retrieved number is converted and stored in + // 'x'. The return value is the number of characters + // composing the decimal representation of this number + // as read from 's'. For example, if s == "12.34dog" and + // n == 0, then 'x' is set to 12.34 and the return value + // is 5. + // If the portion of 's' starting from the position 'n' + // can not be converted to a number, then 'x' is set to + // xNAN and 0 is returned. + // If the exactly converted value would cause overflow, + // then xINF or x_INF is returned, according to the sign + // of the value. + // If 'n' is greater or equal to the length of 's', then 0 + // is returned and 'x' is set to xZERO. + friend unsigned long sget (string s, unsigned long startptr, + xreal& x); + + // bget (buff, x) tries to read an extended precision + // number from the buffer pointed to by 'buff'. + // The retrieved number is converted and stored in 'x'. + // The return value is a pointer to the character after + // the last character used in the conversion. + // For example, if 'buff' is a pointer to the buffer + // "12.34dog", then 'x' is set to 12.34 and the return + // value is a pointer to "dog" (i.e., a pointer + // to the character 'd'). + // If the initial portion of the string pointed to by 'buff' + // can not be converted to a number, then 'x' is set to xNAN + // and 'buff' is returned. + // If the exactly converted value would cause overflow, + // then xINF or x_INF is returned, according to the sign + // of the value. + // If 'buff' is NULL (0), then an error message is printed + // on 'cerr' (standard error device). + friend const char* bget (const char* buff, xreal& x); + + // compare (x1, x2) returns + //+1 to mean x1 > x2 + // 0 to mean x1 == x2 + //-1 to mean x1 < x2 + friend int compare (const xreal& x1, const xreal& x2); + + //isNaN (x) returns 1 when x == xNAN, else 0 + friend int isNaN (const xreal& x); + + // The following functions do not need a particular comment: + // each of them is defined as the corresponding function + // of the standard math library, that is to say the function + // from having the same name. + // However qfmod(), sfmod(), frac() and fix() do not have + // counterparts in the standard math library. + // With respect to fmod(), qfmod() requires one more + // argument, where the quotient of the division of + // the first argument by the second one is stored. + // sfmod (x,&n) stores in the integer variable + // 'n' the integer part of 'x' and, at the same time, + // returns the fractional part of 'x'. + // The usage of sfmod() is strongly discouraged. + // frac() returns the fractional part of its argument. + // Finally, fix() is a frontend to the xfix() + // function (see section "Extended Precision Floating + // Point Arithmetic"). + friend xreal abs (const xreal& s); + friend xreal frexp (const xreal& s, int *p); + friend xreal qfmod (const xreal& s, const xreal& t, xreal& q); + friend xreal fmod (const xreal& s, const xreal& t); + friend xreal sfmod (const xreal& s, int *p); + friend xreal frac (const xreal& x); + friend xreal trunc (const xreal& x); + friend xreal round (const xreal& x); + friend xreal ceil (const xreal& x); + friend xreal floor (const xreal& x); + friend xreal fix (const xreal& x); + friend xreal tan (const xreal& x); + friend xreal sin (const xreal& x); + friend xreal cos (const xreal& x); + friend xreal atan (const xreal& a); + friend xreal atan2 (const xreal& y, const xreal& x); + friend xreal asin (const xreal& a); + friend xreal acos (const xreal& a); + friend xreal sqrt (const xreal& u); + friend xreal exp (const xreal& u); + friend xreal exp2 (const xreal& u); + friend xreal exp10 (const xreal& u); + friend xreal log (const xreal& u); + friend xreal log2 (const xreal& u); + friend xreal log10 (const xreal& u); + friend xreal tanh (const xreal& v); + friend xreal sinh (const xreal& v); + friend xreal cosh (const xreal& v); + friend xreal atanh (const xreal& v); + friend xreal asinh (const xreal& v); + friend xreal acosh (const xreal& v); + friend xreal pow (const xreal& x, const xreal& y); + + public: + // Various constructors. They allow to define + // an extended precision number in several ways. + // In addition, they allow for conversions from other + // numeric types. + xreal (const struct xpr* px = &xZero); + xreal (struct xpr x); + xreal (double x); + xreal (float x); + xreal (int n); + xreal (long n); + xreal (unsigned int u); + xreal (unsigned long u); + + // This constructor requires a special comment. If + // only the first argument is present, the initial portion + // of the string pointed to by this argument is converted + // into an extended precision number, if a conversion is + // possible. If no conversion is possible, then the + // returned number is xNAN. If the second argument is + // present and is not null, it must be the address of a + // valid pointer to 'char'. + // Before returning, the constructor will set this pointer + // so that it points to the character of the string 'str' after the last + // character used in the conversion. + xreal (const char* str, char** endptr = 0); + xreal (string str); + xreal (const xreal& x); + + // Assignment operators. They do not require + // any explanation with the only exception of '%=', + // which combines a '%' operation with an assignment. + // So, x %= n is equivalent to x *= pow(2,n) . + xreal& operator= (const xreal& x); + xreal& operator+= (const xreal& x); + xreal& operator-= (const xreal& x); + xreal& operator*= (const xreal& x); + xreal& operator/= (const xreal& x); + xreal& operator%= (int n); + + // Increment and decrement operators. Both prefixed + // and postfixed versions are defined. + xreal& operator++ (); + xreal& operator-- (); + xreal& operator++ (int dummy); + xreal& operator-- (int dummy); + + // Destructor. You will never have to recall it + // explicitly in your code. + ~xreal (void); + + // Integer exponent power. For any extended precision + // number 'x', x(n) is equal to 'x' raised to 'n'. + xreal operator() (int n) const; + + // This is the usual unary minus. + xreal operator-() const; + + // For any extended precision number 'x', !x evaluates to 1 + // when 'x' is null, else it evaluates to 0. + int operator!() const; + + // x.isneg() returns 1 if 'x' is negative, else it + // returns 0. + int isneg() const; + + // x.exp() returns the exponent part + // of the binary representation of 'x'. + int exp() const; + + // Functions for conversions. x._2double(), x._2float(), + // x._2xpr() and x._2string() convert the extended precision + // number 'x' in a double precision number, in a single + // precision number, in a structure of + // type 'xpr', and in a string, respectively. + double _2double () const; + float _2float() const; + struct xpr _2xpr() const; + string _2string() const; + + // The member function xreal::getfrom() can be used to + // recover an extended precision number from an input + // stream. The input stream is passed as argument to the + // function. + // The return value is 0 in case of input error (in case + // of End-Of-File, for example). + // When it starts to process its input, this function drops + // all the eventual leading white spaces. + // After reading the first non space character, it + // continues to read from the input stream until it finds + // a white space or reaches the End-Of-File. + // Then it tries to convert into an extended + // precision number the (initial portion of the) string just + // read. + // If no conversion can be performed, then x.getfrom(is) + // sets 'x' to the value xNAN. + // If the exactly converted value would cause overflow, + // then 'x' is set to xINF or x_INF, according to the sign + // of the correct value. + int getfrom (istream& is); + + // The member function xreal::print() can be used to write + // an extended precision number to an output stream. + // The output stream is passed to the function as first + // argument. The next three arguments have the same meanings + // of the fields 'notat', 'sf' and 'lim' of the + // structure 'xoutflags', respectively (see section "Real Arithmetic"). + int print (ostream& os, int sc_not, int sign, int lim) const; + + // The function call x.asprint(sc_not, sign, lim) returns + // a buffer of characters with the representation, in form + // of a decimal ASCII string, of the extended precision + // number 'x'. The arguments 'sc_not', 'sign' and 'lim' are + // used to format the string. + // They have the same meanings of the fields 'notat', 'sf' + // and 'lim' of the structure 'xoutflags', respectively (see section + // "Real Arithmetic"). + // The buffer returned by this function is malloc'ed inside + // the function. In case of insufficient memory, the null + // pointer is returned. + char* asprint (int sc_not, int sign, int lim) const; + + // The following static functions are used to set + // or get the values of the fields of the structure + // 'xreal::ioflags'. This structure is a static member + // variable of the class 'xreal' and it is used by the + // output operator << to know how to format its second + // argument. The meaning of the fields of the structure + // 'xreal::ioflags' is explained in the section + // "Real arithmetic". + + // xreal::set_notation (which) sets to 'which' the value + // of 'xreal::ioflags.notat' . + static void set_notation (short notat); + + // xreal::set_signflag (which) sets to 'which' the value + // of 'xreal::ioflags.sf' . + static void set_signflag (short onoff); + + // xreal::set_mfwd (which) sets to 'which' the value + // of 'xreal::ioflags.mfwd' . + static void set_mfwd (short wd); + + // xreal::set_lim (which) sets to 'which' the value + // of 'xreal::ioflags.lim' . + static void set_lim (short lim); + + // xreal::set_padding (which) sets to 'which' the value + // of 'xreal::ioflags.padding' . + static void set_padding (signed char ch); + + // xreal::get_notation () returns the current value + // of 'xreal::ioflags.notat' . + static short get_notation (void); + + // xreal::get_signflag () returns the current value + // of 'xreal::ioflags.sf' . + static short get_signflag (void); + + // xreal::get_mfwd () returns the current value + // of 'xreal::ioflags.mfwd' . + static short get_mfwd (void); + + // xreal::get_lim () returns the current value + // of 'xreal::ioflags.lim' . + static short get_lim (void); + + // xreal::get_padding () returns the current value + // of 'xreal::ioflags.padding' . + static signed char get_padding (void); + private: + struct xpr br; /* binary representation */ + static struct xoutflags ioflags; /* output flags */ + }; + + // xmatherrcode() returns the current value of the global + // variable 'xErrNo' (see section + // "Dealing with runtime errors"), if + // this variable is defined. + // Otherwise xmatherrcode() returns -1. + int xmatherrcode (); + + // clear_xmatherr() resets to 0 the value of the global + // variable 'xErrNo' (see section "Dealing with runtime + // errors"), if this variable is defined. + // Otherwise, clear_xmatherr() prints a suitable warning + // on 'cerr' (standard error device). + void clear_xmatherr (); + + // Some useful constants: + // xZERO == 0 + // xONE == 1 + // xTWO == 2 + // xTEN == 10 + // xINF == +INF + // x_INF == -INF + // xNAN == Not-A-Number + // xPI == Pi Greek + // xPI2 == Pi / 2 + // xPI4 == Pi / 4 + // xEE == e (base of natural logarithms) + // xSQRT2 == square root of 2 + // xLN2 == natural logarithm of 2 + // xLN10 == natural logarithm of 10 + // xLOG2_E == base-2 logarithm of e + // xLOG2_10 == base-2 logarithm of 10 + // xLOG10_E == base-10 logarithm of e + extern const xreal xZERO, xONE, xTWO, xTEN; + extern const xreal xINF, x_INF, xNAN; + extern const xreal xPI, xPI2, xPI4, xEE, xSQRT2; + extern const xreal xLN2, xLN10, xLOG2_E, xLOG2_10, xLOG10_E; + + } /* End namespace HPA */ + + #endif /* _XREAL_H_ */ + + + 12. The xcomplex class + ====================== + +The interface of the xcomplex class is +contained in the header file xcomplex.h, +whose contents you can find here together +with the necessary explanations. + + + #ifndef _XCOMPLEX_H_ + #define _XCOMPLEX_H_ + + #include + #include + #include + #include "xreal.h" + + using std::istream; + using std::ostream; + using std::string; + + namespace HPA { + + struct double_complex { + double re, im; + }; + + struct float_complex { + float re, im; + }; + + class xcomplex { + // << and >> are used respectively for the output and the + // input of extended precision complex numbers. + // The input operator >> reads a couple of double + // precision numbers and then converts it into + // an extended precision complex number. This can have + // undesirable rounding effects. To avoid them, use the + // input function xcomplex::getfrom() (see below). + friend ostream& operator<< (ostream& os, const xcomplex& z); + friend istream& operator>> (istream& is, xcomplex& z); + + // +, -, *, / are the usual arithmetic operators + friend xcomplex + operator+ (const xcomplex& z1, const xcomplex& z2); + friend xcomplex + operator- (const xcomplex& z1, const xcomplex& z2); + friend xcomplex + operator* (const xcomplex& z1, const xcomplex& z2); + friend xcomplex + operator/ (const xcomplex& z1, const xcomplex& z2); + + // z % n is equal to z * pow (2,n) + friend xcomplex + operator% (const xcomplex& z, int n); + + // ==, !=, <=, >=, <, > are the usual comparison operators + friend int + operator== (const xcomplex& z1, const xcomplex& z2); + friend int + operator!= (const xcomplex& z1, const xcomplex& z2); + friend int + operator<= (const xcomplex& z1, const xcomplex& z2); + friend int + operator>= (const xcomplex& z1, const xcomplex& z2); + friend int + operator< (const xcomplex& z1, const xcomplex& z2); + friend int + operator> (const xcomplex& z1, const xcomplex& z2); + + // sget (s, n, z) tries to read an extended precision + // complex number from the string 's' starting from the + // position 'n'. The retrieved number is converted and + // stored in 'z'. The return value is the number of + // characters composing the decimal representation of this + // number as read from 's'. + // For example, if s == "12.34+6.7idog" and n == 0, + // then 'z' is set to 12.34+6.7i and the return value + // is 10. + // If the portion of 's' starting from the position 'n' can + // not be converted to a number, then 'z' is set to + // xNAN + xNANi and 0 is returned. + // If the exactly converted value would cause overflow in + // the real or/and imaginary part, then the real or/and the + // imaginary part of 'z' are set to xINF or x_INF, according + // to the signs of the correct value. + // If 'n' is greater or equal to the length of 's', then 0 + // is returned and 'z' is set to cxZERO. + friend unsigned long sget (string s, unsigned long startptr, + xcomplex& z); + + // bget (buff, z) tries to read an extended precision + // complex number from the buffer pointed to by 'buff'. + // The retrieved number is converted and stored in 'z'. + // The return value is a pointer to the character after + // the last character used in the conversion. + // For example, if 'buff' is a pointer to the buffer + // "12.34+6.7idog", then 'z' is set to 12.34+6.7i and + // the return value is a pointer to "dog" (i.e., + // a pointer to the character 'd'). + // If the initial portion of the string pointed to by 'buff' + // can not be converted to a number, then 'z' is set to + // xNAN + xNANi and 'buff' is returned. + // If the exactly converted value would cause overflow + // in the real or/and imaginary part, then the real or/and + // the imaginary part of 'z' are set to xINF or x_INF, + // according to the signs of the correct value. + // If 'buff' is NULL (0), then an error message is printed + // on 'cerr' (standard error device). + friend const char* bget (const char* buff, xcomplex& z); + + // rmul (x,z) (here 'x' is a real number) returns the + // product x * z. + // It is faster than the * operator. + friend xcomplex rmul (const xreal& x, const xcomplex& z); + + // After eventually rounding 'z1' and 'z2' by recalling + // round() (see below) on them, gdiv(z1, z2) returns + // the quotient of the gaussian division of 'z1' by 'z2'. + // If you do not know what gaussian division means, probably + // you will never need this function :) + friend xcomplex + gdiv (const xcomplex& z1, const xcomplex& z2); + + // After eventually rounding 'z1' and 'z2' by recalling + // round() (see below) on them, gmod(z1, z2) returns + // the remainder of the gaussian division of 'z1' by 'z2'. + // If you do not know what gaussian division means, probably + // you will never need this function :) + friend xcomplex + gmod (const xcomplex& z1, const xcomplex& z2); + + // idiv() is a wrapper to cxidiv() (see section + // "Extended Precision Complex Arithmetic"). + friend xcomplex + idiv (const xcomplex& z1, const xcomplex& z2); + + // mod() is a wrapper to cxmod() (see section + // "Extended Precision Complex Arithmetic"). + friend xcomplex + mod (const xcomplex& z1, const xcomplex& z2); + + // conj() returns the complex conjugate of its argument. + friend xcomplex conj (const xcomplex& z); + + // inv() returns the complex reciprocal of its argument: + // inv(z) == 1/z . + friend xcomplex inv (const xcomplex& z); + + // swap(z) returns the complex number {z.im, z.re}. + friend xcomplex swap (const xcomplex& z); + + // Multiplication by 1i (imaginary unit). + friend xcomplex drot (const xcomplex& z); + + // Multiplication by -1i + friend xcomplex rrot (const xcomplex& z); + + // abs() returns the absolute value (or modulus) of its + // argument. + // The return value of abs() is then an 'xreal' number. + friend xreal abs (const xcomplex& z); + + // arg(z) returns the phase angle (or argument) + // of the complex number 'z'. + // The return value of arg() is an 'xreal' number + // in the range [-xPI, xPI) (-xPI is included, xPI is excluded). + // If 'z' is null, then a domain-error is produced. + friend xreal arg (const xcomplex& z); + + // The next six functions have the same + // meanings of the corresponding real functions, + // but they affect both the real + // and the imaginary part of their argument. + friend xcomplex frac (const xcomplex& z); + friend xcomplex trunc (const xcomplex& z); + friend xcomplex round (const xcomplex& z); + friend xcomplex ceil (const xcomplex& z); + friend xcomplex floor (const xcomplex& z); + friend xcomplex fix (const xcomplex& z); + + // sqr() returns the square of its argument. + friend xcomplex sqr (const xcomplex& z); + + // sqrt() returns the principal branch of the square root + // of its argument. + friend xcomplex sqrt (const xcomplex& z); + + // root (z,i,n) returns the 'i'th branch of the 'n'th root + // of 'z'. If 'n' is zero or negative and 'z' is + // zero, then a bad-exponent error is produced. + friend xcomplex root (const xcomplex& z, int i, int n); + + // These functions do not require any comment, except that + // tan() and tanh() yield a domain-error in the same cases + // as cxtan() and cxtanh(), respectively. + friend xcomplex exp (const xcomplex& z); + friend xcomplex exp2 (const xcomplex& z); + friend xcomplex exp10 (const xcomplex& z); + friend xcomplex tan (const xcomplex& z); + friend xcomplex sin (const xcomplex& z); + friend xcomplex cos (const xcomplex& z); + friend xcomplex tanh (const xcomplex& z); + friend xcomplex sinh (const xcomplex& z); + friend xcomplex cosh (const xcomplex& z); + + // Natural, base-2 and base-10 logarithm of a complex + // number. + // A null argument results in a domain-error. + // The imaginary part of the return value of log() is always + // in the interval [-xPI,xPI) (-xPI is included, xPI is excluded). + friend xcomplex log (const xcomplex& z); + friend xcomplex log2 (const xcomplex& z); + friend xcomplex log10 (const xcomplex& z); + + // log_sqrt(z) returns the natural logarithm of the + // principal branch of the square root of 'z'. + // A null argument results in a domain-error. + // The imaginary part of the return value of log_sqrt() + // is always in the interval [-xPI2,xPI2) (-xPI2 is included, xPI2 is excluded). + friend xcomplex log_sqrt (const xcomplex& z); + + // These functions are self-explanatory. atan(z) + // yields a domain-error if the real part of 'z' is null and + // the imaginary part is equal to '+1' or '-1'. + // Similarly, atanh(z) yields a domain-error if the + // imaginary part of 'z' is null and the + // real part is equal to '+1' or '-1'. + friend xcomplex atan (const xcomplex& z); + friend xcomplex asin (const xcomplex& z); + friend xcomplex acos (const xcomplex& z); + friend xcomplex atanh (const xcomplex& z); + friend xcomplex asinh (const xcomplex& z); + friend xcomplex acosh (const xcomplex& z); + + // The return value of pow() is the power of the first + // argument raised to the second one. + // Note that the modulus of the first argument must be + // greater than zero, if the real part of + // the second argument is less or equal than zero, otherwise + // a bad-exponent error is produced. + friend xcomplex pow (const xcomplex& z1, const xcomplex& z2); + + public: + // Various constructors. They allow to define + // an extended precision complex number in several ways. + // In addition, they allow for conversions from other + // numeric types. + xcomplex (const struct cxpr* pz = &cxZero); + xcomplex (struct cxpr z); + xcomplex (struct xpr x, struct xpr y = xZero); + xcomplex (xreal x, xreal y = xZERO); + xcomplex (double x, double y = 0.0); + xcomplex (float x, float y = 0.0); + xcomplex (int m, int n = 0); + xcomplex (long m, long n = 0); + xcomplex (unsigned int u, unsigned int v = 0U); + xcomplex (unsigned long u, unsigned long v = 0U); + + // This constructor requires a special comment. If + // only the first argument is present, the initial portion + // of the string pointed to by this argument is converted + // into an extended precision complex number, if a + // conversion is possible. If no conversion is possible, + // then the returned number is xNAN + xNANi. + // If the second argument is present and is not null, + // it must be the address of a valid pointer to 'char'. + // Before returning, the constructor will set this pointer + // so that it points to the character after the last + // character used in the conversion. + xcomplex (const char* str, char** endptr = 0); + + xcomplex (string str); + xcomplex (const xcomplex& z); + + // Assignment operators. They do not require + // any explanation with the only exception of '%=', + // which combines a '%' operation with an assignment. + // So, x %= n is equivalent to x *= pow(2,n) . + xcomplex& operator= (const xcomplex& z); + xcomplex& operator+= (const xcomplex& z); + xcomplex& operator-= (const xcomplex& z); + xcomplex& operator*= (const xcomplex& z); + xcomplex& operator*= (const xreal& x); + xcomplex& operator/= (const xcomplex& z); + xcomplex& operator%= (int n); + + // Increment and decrement operators. Both prefixed + // and postfixed versions are defined. These operators + // only act on the real part of their argument. + xcomplex& operator++ (); + xcomplex& operator-- (); + xcomplex& operator++ (int dummy); + xcomplex& operator-- (int dummy); + + // Destructor. You will never have to recall it + // explicitly in your code. + ~xcomplex (void); + + // Integer exponent power. For any extended precision + // complex number 'z', z(n) is equal to 'z' raised to 'n'. + xcomplex operator() (int n) const; + + // This is the usual unary minus. + xcomplex operator-() const; + + // For any extended precision complex number 'z', + // !z evaluates to 1 when + // 'z' is null, else it evaluates to 0. + int operator!() const; + + // Functions for conversions. z._2dcomplex(), z._2fcomplex(), + // z._2cxpr() and z._2string() convert the extended + // precision complex number 'z' in a double precision + // complex number, in a single precision complex + // number, in a structure of type 'cxpr', and in a + // string, respectively. + double_complex _2dcomplex () const; + float_complex _2fcomplex() const; + struct cxpr _2cxpr() const; + string _2string() const; + + // For any extended precision complex number 'z', + // z.real() and z.imag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of an extended precision number. + xreal real () const; + xreal imag () const; + + // For any extended precision complex number 'z', + // z._real() and z._imag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of a structure of 'xpr' type. + struct xpr _real () const; + struct xpr _imag () const; + + // For any extended precision complex number 'z', + // z.dreal() and z.dimag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of a double precision number. + double dreal () const; + double dimag () const; + + // For any extended precision complex number 'z', + // z.freal() and z.fimag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of a single precision number. + double freal () const; + double fimag () const; + + // For any extended precision complex number 'z', + // z.sreal() and z.simag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of a string. + string sreal () const; + string simag () const; + + // The next functions allow to set (or reset) + // the real and the imaginary part of a complex number. + void real (const xreal& x); + void imag (const xreal& x); + void real (struct xpr x); + void imag (struct xpr x); + void real (const struct xpr* px); + void imag (const struct xpr* px); + void real (double x); + void imag (double x); + void real (float x); + void imag (float x); + void real (int n); + void imag (int n); + void real (long n); + void imag (long n); + void real (unsigned int u); + void imag (unsigned int u); + void real (unsigned long u); + void imag (unsigned long u); + void real (const char* str, char** endptr = 0); + void imag (const char* str, char** endptr = 0); + void real (string str); + void imag (string str); + + // The member function xcomplex::getfrom() can be used + // to recover an extended precision complex number from an + // input stream. The input stream is passed as argument to + // the function. + // The return value is 0 in case of input error (in case of + // End-Of-File, for example). + // When it starts to process its input, this function drops + // all eventual leading white spaces. + // After reading the first non space character, it continues + // to read from the input stream until it finds a white + // space or reaches the End-Of-File. + // Then it tries to convert into an extended + // precision complex number the (initial portion of the) + // string which has just been read from the input stream. + // If no conversion can be performed, then z.getfrom(is) + // sets 'z' to the value xNAN + xNANi. + // If the exactly converted value would cause overflow in + // the real or/and in the imaginary part, then the real part + // or/and the imaginary part of 'z' are set to xINF or x_INF, + // according to the signs of the correct value. + int getfrom (istream& is); + + // The member function xcomplex::print() can be used to + // write an extended precision complex number to an output + // stream. The output stream is passed to the function as + // first argument. The next three arguments have the same + // meanings of the fields 'notat', 'sf' + // and 'lim' of the structure 'xoutflags', respectively (see section + // "Real Arithmetic"). + int print (ostream& os, int sc_not, int sign, int lim) const; + + // The function call z.asprint(sc_not, sign, lim) returns + // a buffer of characters with the representation, + // in form of a decimal ASCII string, + // of the extended precision complex number 'z'. + // The arguments 'sc_not', 'sign' and 'lim' are used + // to format the string. + // They have the same meanings of the fields 'notat', 'sf' + // and 'lim' of the structure 'xoutflags', respectively (see section + // "Real Arithmetic"). + // The buffer returned by this function is malloc'ed inside + // the function. In case of insufficient memory, the null + // pointer is returned. + char* asprint (int sc_not, int sign, int lim) const; + + // The following static functions are used to set + // or get the values of the fields of the structure + // 'xcomplex::ioflags'. This structure is a static member + // variable of the class 'xcomplex' and it is used by + // the output operator << to know how to format its second + // argument. The meaning of the + // fields of the structure 'xcomplex::ioflags' is explained + // in the section "Real arithmetic". + + // xcomplex::set_fmt (which) sets to 'which' the value + // of 'xcomplex::ioflags.fmt' . + static void set_fmt (short format); + + // xcomplex::set_notation (which) sets to 'which' the value + // of 'xcomplex::ioflags.notat' . + static void set_notation (short notat); + + // xcomplex::set_signflag (which) sets to 'which' the value + // of 'xcomplex::ioflags.sf' . + static void set_signflag (short onoff); + + // xcomplex::set_mfwd (which) sets to 'which' the value + // of 'xcomplex::ioflags.mfwd' . + static void set_mfwd (short wd); + + // xcomplex::set_lim (which) sets to 'which' the value + // of 'xcomplex::ioflags.lim' . + static void set_lim (short lim); + + // xcomplex::set_padding (which) sets to 'which' the value + // of 'xcomplex::ioflags.padding' . + static void set_padding (signed char ch); + + // xcomplex::set_ldelim (ch) sets to 'ch' the value + // of 'xcomplex::ioflags.ldel' . + static void set_ldelim (signed char ch); + + // xcomplex::set_rdelim (ch) sets to 'ch' the value + // of 'xcomplex::ioflags.rdel' . + static void set_rdelim (signed char ch); + + // xcomplex::get_fmt () returns the current value + // of 'xcomplex::ioflags.fmt' . + static short get_fmt (void); + + // xcomplex::get_notation () returns the current value + // of 'xcomplex::ioflags.notat' . + static short get_notation (void); + + // xcomplex::get_signflag () returns the current value + // of 'xcomplex::ioflags.sf' . + static short get_signflag (void); + + // xcomplex::get_mfwd () returns the current value + // of 'xcomplex::ioflags.mfwd' . + static short get_mfwd (void); + + // xcomplex::get_lim () returns the current value + // of 'xcomplex::ioflags.lim' . + static short get_lim (void); + + // xcomplex::get_padding () returns the current value + // of 'xcomplex::ioflags.padding' . + static signed char get_padding (void); + + // xcomplex::get_ldelim () returns the current value + // of 'xcomplex::ioflags.ldel' . + static signed char get_ldelim (void); + + // xcomplex::get_rdelim () returns the current value + // of 'xcomplex::ioflags.rdel' . + static signed char get_rdelim (void); + private: + struct cxpr br; /* binary representation */ + static struct xoutflags ioflags; /* output flags */ + }; + + // Some useful constants: + // cxZERO == 0 + // cxONE == 1 + // cxI == 1i + extern const xcomplex cxZERO, cxONE, cxI; + + } /* End namespace HPA */ + + #define xi cxI + #define xj cxI + #define _i cxI + #define _j cxI + + #endif /* _XCOMPLEX_H_ */ + + + 13. Acknowledgments + =================== + +A big thanks to Daniel A. Atkinson, +since without his work the HPA library would not exist. +I have also to thank Aurelio Marinho Jargas +, author of txt2tags +(http://txt2tags.sf.net), a free (GPL'ed) and wonderful +text formatting and conversion tool, +which I used extensively in writing this manual +and the web page of the HPA library. + +Last but not least, I want to thank all the +people till now involved in the Free Software +community, starting from those ones directly involved +in the GNU project (http://www.gnu.org). + + + 14. GNU Free Documentation License + ================================== + + + + GNU Free Documentation License + Version 1.3, 3 November 2008 + + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or noncommercially. + Secondarily, this License preserves for the author and publisher a way + to get credit for their work, while not being considered responsible + for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. It + complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for free + software, because free software needs free documentation: a free + program should come with manuals providing the same freedoms that the + software does. But this License is not limited to software manuals; + it can be used for any textual work, regardless of subject matter or + whether it is published as a printed book. We recommend this License + principally for works whose purpose is instruction or reference. + + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. Such a notice grants a + world-wide, royalty-free license, unlimited in duration, to use that + work under the conditions stated herein. The "Document", below, + refers to any such manual or work. Any member of the public is a + licensee, and is addressed as "you". You accept the license if you + copy, modify or distribute the work in a way requiring permission + under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section of + the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could fall + directly within that overall subject. (Thus, if the Document is in + part a textbook of mathematics, a Secondary Section may not explain + any mathematics.) The relationship could be a matter of historical + connection with the subject or with related matters, or of legal, + commercial, philosophical, ethical or political position regarding + them. + + The "Invariant Sections" are certain Secondary Sections whose titles + are designated, as being those of Invariant Sections, in the notice + that says that the Document is released under this License. If a + section does not fit the above definition of Secondary then it is not + allowed to be designated as Invariant. The Document may contain zero + Invariant Sections. If the Document does not identify any Invariant + Sections then there are none. + + The "Cover Texts" are certain short passages of text that are listed, + as Front-Cover Texts or Back-Cover Texts, in the notice that says that + the Document is released under this License. A Front-Cover Text may + be at most 5 words, and a Back-Cover Text may be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed of + pixels) generic paint programs or (for drawings) some widely available + drawing editor, and that is suitable for input to text formatters or + for automatic translation to a variety of formats suitable for input + to text formatters. A copy made in an otherwise Transparent file + format whose markup, or absence of markup, has been arranged to thwart + or discourage subsequent modification by readers is not Transparent. + An image format is not Transparent if used for any substantial amount + of text. A copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, SGML + or XML using a publicly available DTD, and standard-conforming simple + HTML, PostScript or PDF designed for human modification. Examples of + transparent image formats include PNG, XCF and JPG. Opaque formats + include proprietary formats that can be read and edited only by + proprietary word processors, SGML or XML for which the DTD and/or + processing tools are not generally available, and the + machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the material + this License requires to appear in the title page. For works in + formats which do not have any title page as such, "Title Page" means + the text near the most prominent appearance of the work's title, + preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies of + the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document whose + title either is precisely XYZ or contains XYZ in parentheses following + text that translates XYZ in another language. (Here XYZ stands for a + specific section name mentioned below, such as "Acknowledgements", + "Dedications", "Endorsements", or "History".) To "Preserve the Title" + of such a section when you modify the Document means that it remains a + section "Entitled XYZ" according to this definition. + + The Document may include Warranty Disclaimers next to the notice which + states that this License applies to the Document. These Warranty + Disclaimers are considered to be included by reference in this + License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and has + no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License applies + to the Document are reproduced in all copies, and that you add no + other conditions whatsoever to those of this License. You may not use + technical measures to obstruct or control the reading or further + copying of the copies you make or distribute. However, you may accept + compensation in exchange for copies. If you distribute a large enough + number of copies you must also follow the conditions in section 3. + + You may also lend copies, under the same conditions stated above, and + you may publicly display copies. + + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly have + printed covers) of the Document, numbering more than 100, and the + Document's license notice requires Cover Texts, you must enclose the + copies in covers that carry, clearly and legibly, all these Cover + Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on + the back cover. Both covers must also clearly and legibly identify + you as the publisher of these copies. The front cover must present + the full title with all words of the title equally prominent and + visible. You may add other material on the covers in addition. + Copying with changes limited to the covers, as long as they preserve + the title of the Document and satisfy these conditions, can be treated + as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto adjacent + pages. + + If you publish or distribute Opaque copies of the Document numbering + more than 100, you must either include a machine-readable Transparent + copy along with each Opaque copy, or state in or with each Opaque copy + a computer-network location from which the general network-using + public has access to download using public-standard network protocols + a complete Transparent copy of the Document, free of added material. + If you use the latter option, you must take reasonably prudent steps, + when you begin distribution of Opaque copies in quantity, to ensure + that this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you distribute an + Opaque copy (directly or through your agents or retailers) of that + edition to the public. + + It is requested, but not required, that you contact the authors of the + Document well before redistributing any large number of copies, to + give them a chance to provide you with an updated version of the + Document. + + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document under + the conditions of sections 2 and 3 above, provided that you release + the Modified Version under precisely this License, with the Modified + Version filling the role of the Document, thus licensing distribution + and modification of the Modified Version to whoever possesses a copy + of it. In addition, you must do these things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. + B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + D. Preserve all the copyright notices of the Document. + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. + G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. + H. Include an unaltered copy of this License. + I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. + J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no material + copied from the Document, you may at your option designate some or all + of these sections as invariant. To do this, add their titles to the + list of Invariant Sections in the Modified Version's license notice. + These titles must be distinct from any other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text has + been approved by an organization as the authoritative definition of a + standard. + + You may add a passage of up to five words as a Front-Cover Text, and a + passage of up to 25 words as a Back-Cover Text, to the end of the list + of Cover Texts in the Modified Version. Only one passage of + Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document already + includes a cover text for the same cover, previously added by you or + by arrangement made by the same entity you are acting on behalf of, + you may not add another; but you may replace the old one, on explicit + permission from the previous publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this License + give permission to use their names for publicity for or to assert or + imply endorsement of any Modified Version. + + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under this + License, under the terms defined in section 4 above for modified + versions, provided that you include in the combination all of the + Invariant Sections of all of the original documents, unmodified, and + list them all as Invariant Sections of your combined work in its + license notice, and that you preserve all their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name but + different contents, make the title of each such section unique by + adding at the end of it, in parentheses, the name of the original + author or publisher of that section if known, or else a unique number. + Make the same adjustment to the section titles in the list of + Invariant Sections in the license notice of the combined work. + + In the combination, you must combine any sections Entitled "History" + in the various original documents, forming one section Entitled + "History"; likewise combine any sections Entitled "Acknowledgements", + and any sections Entitled "Dedications". You must delete all sections + Entitled "Endorsements". + + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the rules + of this License for verbatim copying of each of the documents in all + other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert a + copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other separate + and independent documents or works, in or on a volume of a storage or + distribution medium, is called an "aggregate" if the copyright + resulting from the compilation is not used to limit the legal rights + of the compilation's users beyond what the individual works permit. + When the Document is included in an aggregate, this License does not + apply to the other works in the aggregate which are not themselves + derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half of + the entire aggregate, the Document's Cover Texts may be placed on + covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic form. + Otherwise they must appear on printed covers that bracket the whole + aggregate. + + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section 4. + Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also include + the original English version of this License and the original versions + of those notices and disclaimers. In case of a disagreement between + the translation and the original version of this License or a notice + or disclaimer, the original version will prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to Preserve + its Title (section 1) will typically require changing the actual + title. + + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, and + will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your license + from a particular copyright holder is reinstated (a) provisionally, + unless and until the copyright holder explicitly and finally + terminates your license, and (b) permanently, if the copyright holder + fails to notify you of the violation by some reasonable means prior to + 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from that + copyright holder, and you cure the violation prior to 30 days after + your receipt of the notice. + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, receipt of a copy of some or all of the same material does + not give you any rights to use it. + + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of the + GNU Free Documentation License from time to time. Such new versions + will be similar in spirit to the present version, but may differ in + detail to address new problems or concerns. See + http://www.gnu.org/copyleft/. + + Each version of the License is given a distinguishing version number. + If the Document specifies that a particular numbered version of this + License "or any later version" applies to it, you have the option of + following the terms and conditions either of that specified version or + of any later version that has been published (not as a draft) by the + Free Software Foundation. If the Document does not specify a version + number of this License, you may choose any version ever published (not + as a draft) by the Free Software Foundation. If the Document + specifies that a proxy can decide which future versions of this + License can be used, that proxy's public statement of acceptance of a + version permanently authorizes you to choose that version for the + Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. A + "Massive Multiauthor Collaboration" (or "MMC") contained in the site + means any set of copyrightable works thus published on the MMC site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or in + part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this License + somewhere other than this MMC, and subsequently incorporated in whole or + in part into the MMC, (1) had no cover texts or invariant sections, and + (2) were thus incorporated prior to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the site + under CC-BY-SA on the same site at any time before August 1, 2009, + provided the MMC is eligible for relicensing. + + + ADDENDUM: How to use this License for your documents + + To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and + license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + + If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, + replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of + free software license, such as the GNU General Public License, + to permit their use in free software. + + + + + diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/xcomplex.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/xcomplex.h new file mode 100644 index 00000000..b5b5f424 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/xcomplex.h @@ -0,0 +1,509 @@ +#ifndef _XCOMPLEX_H_ +#define _XCOMPLEX_H_ + +#include +#include +#include +#include "xreal.h" + +using std::istream; +using std::ostream; +using std::string; + +namespace HPA { + + struct double_complex { + double re, im; + }; + + struct float_complex { + float re, im; + }; + +class xcomplex { + // << and >> are used respectively for the output and the + // input of extended precision complex numbers. + // The input operator >> reads a couple of double + // precision numbers and then converts it into + // an extended precision complex number. This can have + // undesirable rounding effects. To avoid them, use the + // input function xcomplex::getfrom() (see below). + friend ostream& operator<< (ostream& os, const xcomplex& z); + friend istream& operator>> (istream& is, xcomplex& z); + + // +, -, *, / are the usual arithmetic operators + friend xcomplex + operator+ (const xcomplex& z1, const xcomplex& z2); + friend xcomplex + operator- (const xcomplex& z1, const xcomplex& z2); + friend xcomplex + operator* (const xcomplex& z1, const xcomplex& z2); + friend xcomplex + operator/ (const xcomplex& z1, const xcomplex& z2); + + // z % n is equal to z * pow (2,n) + friend xcomplex + operator% (const xcomplex& z, int n); + + // ==, !=, <=, >=, <, > are the usual comparison operators + friend int + operator== (const xcomplex& z1, const xcomplex& z2); + friend int + operator!= (const xcomplex& z1, const xcomplex& z2); + friend int + operator<= (const xcomplex& z1, const xcomplex& z2); + friend int + operator>= (const xcomplex& z1, const xcomplex& z2); + friend int + operator< (const xcomplex& z1, const xcomplex& z2); + friend int + operator> (const xcomplex& z1, const xcomplex& z2); + + // sget (s, n, z) tries to read an extended precision + // complex number from the string 's' starting from the + // position 'n'. The retrieved number is converted and + // stored in 'z'. The return value is the number of + // characters composing the decimal representation of this + // number as read from 's'. + // For example, if s == "12.34+6.7idog" and n == 0, + // then 'z' is set to 12.34+6.7i and the return value + // is 10. + // If the portion of 's' starting from the position 'n' can + // not be converted to a number, then 'z' is set to + // xNAN + xNANi and 0 is returned. + // If the exactly converted value would cause overflow in + // the real or/and imaginary part, then the real or/and the + // imaginary part of 'z' are set to xINF or x_INF, according + // to the signs of the correct value. + // If 'n' is greater or equal to the length of 's', then 0 + // is returned and 'z' is set to cxZERO. + friend unsigned long sget (string s, unsigned long startptr, + xcomplex& z); + + // bget (buff, z) tries to read an extended precision + // complex number from the buffer pointed to by 'buff'. + // The retrieved number is converted and stored in 'z'. + // The return value is a pointer to the character after + // the last character used in the conversion. + // For example, if 'buff' is a pointer to the buffer + // "12.34+6.7idog", then 'z' is set to 12.34+6.7i and + // the return value is a pointer to "dog" (i.e., + // a pointer to the character 'd'). + // If the initial portion of the string pointed to by 'buff' + // can not be converted to a number, then 'z' is set to + // xNAN + xNANi and 'buff' is returned. + // If the exactly converted value would cause overflow + // in the real or/and imaginary part, then the real or/and + // the imaginary part of 'z' are set to xINF or x_INF, + // according to the signs of the correct value. + // If 'buff' is NULL (0), then an error message is printed + // on 'cerr' (standard error device). + friend const char* bget (const char* buff, xcomplex& z); + + // rmul (x,z) (here 'x' is a real number) returns the + // product x * z. + // It is faster than the * operator. + friend xcomplex rmul (const xreal& x, const xcomplex& z); + + // After eventually rounding 'z1' and 'z2' by recalling + // round() (see below) on them, gdiv(z1, z2) returns + // the quotient of the gaussian division of 'z1' by 'z2'. + // If you do not know what gaussian division means, probably + // you will never need this function :) + friend xcomplex + gdiv (const xcomplex& z1, const xcomplex& z2); + + // After eventually rounding 'z1' and 'z2' by recalling + // round() (see below) on them, gmod(z1, z2) returns + // the remainder of the gaussian division of 'z1' by 'z2'. + // If you do not know what gaussian division means, probably + // you will never need this function :) + friend xcomplex + gmod (const xcomplex& z1, const xcomplex& z2); + + // idiv() is a wrapper to cxidiv() (see section + // "Extended Precision Complex Arithmetic"). + friend xcomplex + idiv (const xcomplex& z1, const xcomplex& z2); + + // mod() is a wrapper to cxmod() (see section + // "Extended Precision Complex Arithmetic"). + friend xcomplex + mod (const xcomplex& z1, const xcomplex& z2); + + // conj() returns the complex conjugate of its argument. + friend xcomplex conj (const xcomplex& z); + + // inv() returns the complex reciprocal of its argument: + // inv(z) == 1/z . + friend xcomplex inv (const xcomplex& z); + + // swap(z) returns the complex number {z.im, z.re}. + friend xcomplex swap (const xcomplex& z); + + // Multiplication by 1i (imaginary unit). + friend xcomplex drot (const xcomplex& z); + + // Multiplication by -1i + friend xcomplex rrot (const xcomplex& z); + + // abs() returns the absolute value (or modulus) of its + // argument. + // The return value of abs() is then an 'xreal' number. + friend xreal abs (const xcomplex& z); + + // arg(z) returns the phase angle (or argument) + // of the complex number 'z'. + // The return value of arg() is an 'xreal' number + // in the range [-xPI, xPI) (-xPI is included, xPI is excluded). + // If 'z' is null, then a domain-error is produced. + friend xreal arg (const xcomplex& z); + + // The next six functions have the same + // meanings of the corresponding real functions, + // but they affect both the real + // and the imaginary part of their argument. + friend xcomplex frac (const xcomplex& z); + friend xcomplex trunc (const xcomplex& z); + friend xcomplex round (const xcomplex& z); + friend xcomplex ceil (const xcomplex& z); + friend xcomplex floor (const xcomplex& z); + friend xcomplex fix (const xcomplex& z); + + // sqr() returns the square of its argument. + friend xcomplex sqr (const xcomplex& z); + + // sqrt() returns the principal branch of the square root + // of its argument. + friend xcomplex sqrt (const xcomplex& z); + + // root (z,i,n) returns the 'i'th branch of the 'n'th root + // of 'z'. If 'n' is zero or negative and 'z' is + // zero, then a bad-exponent error is produced. + friend xcomplex root (const xcomplex& z, int i, int n); + + // These functions do not require any comment, except that + // tan() and tanh() yield a domain-error in the same cases + // as cxtan() and cxtanh(), respectively. + friend xcomplex exp (const xcomplex& z); + friend xcomplex exp2 (const xcomplex& z); + friend xcomplex exp10 (const xcomplex& z); + friend xcomplex tan (const xcomplex& z); + friend xcomplex sin (const xcomplex& z); + friend xcomplex cos (const xcomplex& z); + friend xcomplex tanh (const xcomplex& z); + friend xcomplex sinh (const xcomplex& z); + friend xcomplex cosh (const xcomplex& z); + + // Natural, base-2 and base-10 logarithm of a complex + // number. + // A null argument results in a domain-error. + // The imaginary part of the return value of log() is always + // in the interval [-xPI,xPI) (-xPI is included, xPI is excluded). + friend xcomplex log (const xcomplex& z); + friend xcomplex log2 (const xcomplex& z); + friend xcomplex log10 (const xcomplex& z); + + // log_sqrt(z) returns the natural logarithm of the + // principal branch of the square root of 'z'. + // A null argument results in a domain-error. + // The imaginary part of the return value of log_sqrt() + // is always in the interval [-xPI2,xPI2) (-xPI2 is included, xPI2 is excluded). + friend xcomplex log_sqrt (const xcomplex& z); + + // These functions are self-explanatory. atan(z) + // yields a domain-error if the real part of 'z' is null and + // the imaginary part is equal to '+1' or '-1'. + // Similarly, atanh(z) yields a domain-error if the + // imaginary part of 'z' is null and the + // real part is equal to '+1' or '-1'. + friend xcomplex atan (const xcomplex& z); + friend xcomplex asin (const xcomplex& z); + friend xcomplex acos (const xcomplex& z); + friend xcomplex atanh (const xcomplex& z); + friend xcomplex asinh (const xcomplex& z); + friend xcomplex acosh (const xcomplex& z); + + // The return value of pow() is the power of the first + // argument raised to the second one. + // Note that the modulus of the first argument must be + // greater than zero, if the real part of + // the second argument is less or equal than zero, otherwise + // a bad-exponent error is produced. + friend xcomplex pow (const xcomplex& z1, const xcomplex& z2); + + public: + // Various constructors. They allow to define + // an extended precision complex number in several ways. + // In addition, they allow for conversions from other + // numeric types. + xcomplex (const struct cxpr* pz = &cxZero); + xcomplex (struct cxpr z); + xcomplex (struct xpr x, struct xpr y = xZero); + xcomplex (xreal x, xreal y = xZERO); + xcomplex (double x, double y = 0.0); + xcomplex (float x, float y = 0.0); + xcomplex (int m, int n = 0); + xcomplex (long m, long n = 0); + xcomplex (unsigned int u, unsigned int v = 0U); + xcomplex (unsigned long u, unsigned long v = 0U); + + // This constructor requires a special comment. If + // only the first argument is present, the initial portion + // of the string pointed to by this argument is converted + // into an extended precision complex number, if a + // conversion is possible. If no conversion is possible, + // then the returned number is xNAN + xNANi. + // If the second argument is present and is not null, + // it must be the address of a valid pointer to 'char'. + // Before returning, the constructor will set this pointer + // so that it points to the character after the last + // character used in the conversion. + xcomplex (const char* str, char** endptr = 0); + + xcomplex (string str); + xcomplex (const xcomplex& z); + + // Assignment operators. They do not require + // any explanation with the only exception of '%=', + // which combines a '%' operation with an assignment. + // So, x %= n is equivalent to x *= pow(2,n) . + xcomplex& operator= (const xcomplex& z); + xcomplex& operator+= (const xcomplex& z); + xcomplex& operator-= (const xcomplex& z); + xcomplex& operator*= (const xcomplex& z); + xcomplex& operator*= (const xreal& x); + xcomplex& operator/= (const xcomplex& z); + xcomplex& operator%= (int n); + + // Increment and decrement operators. Both prefixed + // and postfixed versions are defined. These operators + // only act on the real part of their argument. + xcomplex& operator++ (); + xcomplex& operator-- (); + xcomplex& operator++ (int dummy); + xcomplex& operator-- (int dummy); + + // Destructor. You will never have to recall it + // explicitly in your code. + ~xcomplex (void); + + // Integer exponent power. For any extended precision + // complex number 'z', z(n) is equal to 'z' raised to 'n'. + xcomplex operator() (int n) const; + + // This is the usual unary minus. + xcomplex operator-() const; + + // For any extended precision complex number 'z', + // !z evaluates to 1 when + // 'z' is null, else it evaluates to 0. + int operator!() const; + + // Functions for conversions. z._2dcomplex(), z._2fcomplex(), + // z._2cxpr() and z._2string() convert the extended + // precision complex number 'z' in a double precision + // complex number, in a single precision complex + // number, in a structure of type 'cxpr', and in a + // string, respectively. + double_complex _2dcomplex () const; + float_complex _2fcomplex() const; + struct cxpr _2cxpr() const; + string _2string() const; + + // For any extended precision complex number 'z', + // z.real() and z.imag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of an extended precision number. + xreal real () const; + xreal imag () const; + + // For any extended precision complex number 'z', + // z._real() and z._imag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of a structure of 'xpr' type. + struct xpr _real () const; + struct xpr _imag () const; + + // For any extended precision complex number 'z', + // z.dreal() and z.dimag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of a double precision number. + double dreal () const; + double dimag () const; + + // For any extended precision complex number 'z', + // z.freal() and z.fimag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of a single precision number. + double freal () const; + double fimag () const; + + // For any extended precision complex number 'z', + // z.sreal() and z.simag() return, respectively, the + // real and the imaginary part of 'z' in the form + // of a string. + string sreal () const; + string simag () const; + + // The next functions allow to set (or reset) + // the real and the imaginary part of a complex number. + void real (const xreal& x); + void imag (const xreal& x); + void real (struct xpr x); + void imag (struct xpr x); + void real (const struct xpr* px); + void imag (const struct xpr* px); + void real (double x); + void imag (double x); + void real (float x); + void imag (float x); + void real (int n); + void imag (int n); + void real (long n); + void imag (long n); + void real (unsigned int u); + void imag (unsigned int u); + void real (unsigned long u); + void imag (unsigned long u); + void real (const char* str, char** endptr = 0); + void imag (const char* str, char** endptr = 0); + void real (string str); + void imag (string str); + + // The member function xcomplex::getfrom() can be used + // to recover an extended precision complex number from an + // input stream. The input stream is passed as argument to + // the function. + // The return value is 0 in case of input error (in case of + // End-Of-File, for example). + // When it starts to process its input, this function drops + // all eventual leading white spaces. + // After reading the first non space character, it continues + // to read from the input stream until it finds a white + // space or reaches the End-Of-File. + // Then it tries to convert into an extended + // precision complex number the (initial portion of the) + // string which has just been read from the input stream. + // If no conversion can be performed, then z.getfrom(is) + // sets 'z' to the value xNAN + xNANi. + // If the exactly converted value would cause overflow in + // the real or/and in the imaginary part, then the real part + // or/and the imaginary part of 'z' are set to xINF or x_INF, + // according to the signs of the correct value. + int getfrom (istream& is); + + // The member function xcomplex::print() can be used to + // write an extended precision complex number to an output + // stream. The output stream is passed to the function as + // first argument. The next three arguments have the same + // meanings of the fields 'notat', 'sf' + // and 'lim' of the structure 'xoutflags', respectively (see section + // "Real Arithmetic"). + int print (ostream& os, int sc_not, int sign, int lim) const; + + // The function call z.asprint(sc_not, sign, lim) returns + // a buffer of characters with the representation, + // in form of a decimal ASCII string, + // of the extended precision complex number 'z'. + // The arguments 'sc_not', 'sign' and 'lim' are used + // to format the string. + // They have the same meanings of the fields 'notat', 'sf' + // and 'lim' of the structure 'xoutflags', respectively (see section + // "Real Arithmetic"). + // The buffer returned by this function is malloc'ed inside + // the function. In case of insufficient memory, the null + // pointer is returned. + char* asprint (int sc_not, int sign, int lim) const; + + // The following static functions are used to set + // or get the values of the fields of the structure + // 'xcomplex::ioflags'. This structure is a static member + // variable of the class 'xcomplex' and it is used by + // the output operator << to know how to format its second + // argument. The meaning of the + // fields of the structure 'xcomplex::ioflags' is explained + // in the section "Real arithmetic". + + // xcomplex::set_fmt (which) sets to 'which' the value + // of 'xcomplex::ioflags.fmt' . + static void set_fmt (short format); + + // xcomplex::set_notation (which) sets to 'which' the value + // of 'xcomplex::ioflags.notat' . + static void set_notation (short notat); + + // xcomplex::set_signflag (which) sets to 'which' the value + // of 'xcomplex::ioflags.sf' . + static void set_signflag (short onoff); + + // xcomplex::set_mfwd (which) sets to 'which' the value + // of 'xcomplex::ioflags.mfwd' . + static void set_mfwd (short wd); + + // xcomplex::set_lim (which) sets to 'which' the value + // of 'xcomplex::ioflags.lim' . + static void set_lim (short lim); + + // xcomplex::set_padding (which) sets to 'which' the value + // of 'xcomplex::ioflags.padding' . + static void set_padding (signed char ch); + + // xcomplex::set_ldelim (ch) sets to 'ch' the value + // of 'xcomplex::ioflags.ldel' . + static void set_ldelim (signed char ch); + + // xcomplex::set_rdelim (ch) sets to 'ch' the value + // of 'xcomplex::ioflags.rdel' . + static void set_rdelim (signed char ch); + + // xcomplex::get_fmt () returns the current value + // of 'xcomplex::ioflags.fmt' . + static short get_fmt (void); + + // xcomplex::get_notation () returns the current value + // of 'xcomplex::ioflags.notat' . + static short get_notation (void); + + // xcomplex::get_signflag () returns the current value + // of 'xcomplex::ioflags.sf' . + static short get_signflag (void); + + // xcomplex::get_mfwd () returns the current value + // of 'xcomplex::ioflags.mfwd' . + static short get_mfwd (void); + + // xcomplex::get_lim () returns the current value + // of 'xcomplex::ioflags.lim' . + static short get_lim (void); + + // xcomplex::get_padding () returns the current value + // of 'xcomplex::ioflags.padding' . + static signed char get_padding (void); + + // xcomplex::get_ldelim () returns the current value + // of 'xcomplex::ioflags.ldel' . + static signed char get_ldelim (void); + + // xcomplex::get_rdelim () returns the current value + // of 'xcomplex::ioflags.rdel' . + static signed char get_rdelim (void); + private: + struct cxpr br; /* binary representation */ + static struct xoutflags ioflags; /* output flags */ +}; + + // Some useful constants: + // cxZERO == 0 + // cxONE == 1 + // cxI == 1i +extern const xcomplex cxZERO, cxONE, cxI; + +} /* End namespace HPA */ + +#define xi cxI +#define xj cxI +#define _i cxI +#define _j cxI + +#endif /* _XCOMPLEX_H_ */ diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/xreal.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/xreal.h new file mode 100644 index 00000000..5aad7f21 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/doc/xreal.h @@ -0,0 +1,354 @@ +#ifndef _XREAL_H_ +#define _XREAL_H_ + +#include +#include +#include +#include + +using std::ostream; +using std::istream; +using std::string; + +namespace HPA { + +class xreal { + // << and >> are used respectively for the output and the + // input of extended precision numbers. + // The input operator >> reads a double precision + // number and then converts it to an extended precision + // number. This can have undesirable rounding effects. + // To avoid them, use the input function + // xreal::getfrom() (see below). + friend ostream& operator<< (ostream& os, const xreal& x); + friend istream& operator>> (istream& is, xreal& x); + + // +, -, *, / are the usual arithmetic operators + friend xreal operator+ (const xreal& x1, const xreal& x2); + friend xreal operator- (const xreal& x1, const xreal& x2); + friend xreal operator* (const xreal& x1, const xreal& x2); + friend xreal operator/ (const xreal& x1, const xreal& x2); + + // x % n is equal to x * pow (2,n) + friend xreal operator% (const xreal& x1, int n); + + // ==, !=, <=, >=, <, > are the usual comparison operators + friend int operator== (const xreal& x1, const xreal& x2); + friend int operator!= (const xreal& x1, const xreal& x2); + friend int operator<= (const xreal& x1, const xreal& x2); + friend int operator>= (const xreal& x1, const xreal& x2); + friend int operator< (const xreal& x1, const xreal& x2); + friend int operator> (const xreal& x1, const xreal& x2); + + // sget (s, n, x) tries to read an extended precision + // number from the string 's' starting from the position + // 'n'. The retrieved number is converted and stored in + // 'x'. The return value is the number of characters + // composing the decimal representation of this number + // as read from 's'. For example, if s == "12.34dog" and + // n == 0, then 'x' is set to 12.34 and the return value + // is 5. + // If the portion of 's' starting from the position 'n' + // can not be converted to a number, then 'x' is set to + // xNAN and 0 is returned. + // If the exactly converted value would cause overflow, + // then xINF or x_INF is returned, according to the sign + // of the value. + // If 'n' is greater or equal to the length of 's', then 0 + // is returned and 'x' is set to xZERO. + friend unsigned long sget (string s, unsigned long startptr, + xreal& x); + + // bget (buff, x) tries to read an extended precision + // number from the buffer pointed to by 'buff'. + // The retrieved number is converted and stored in 'x'. + // The return value is a pointer to the character after + // the last character used in the conversion. + // For example, if 'buff' is a pointer to the buffer + // "12.34dog", then 'x' is set to 12.34 and the return + // value is a pointer to "dog" (i.e., a pointer + // to the character 'd'). + // If the initial portion of the string pointed to by 'buff' + // can not be converted to a number, then 'x' is set to xNAN + // and 'buff' is returned. + // If the exactly converted value would cause overflow, + // then xINF or x_INF is returned, according to the sign + // of the value. + // If 'buff' is NULL (0), then an error message is printed + // on 'cerr' (standard error device). + friend const char* bget (const char* buff, xreal& x); + + // compare (x1, x2) returns + //+1 to mean x1 > x2 + // 0 to mean x1 == x2 + //-1 to mean x1 < x2 + friend int compare (const xreal& x1, const xreal& x2); + + //isNaN (x) returns 1 when x == xNAN, else 0 + friend int isNaN (const xreal& x); + + // The following functions do not need a particular comment: + // each of them is defined as the corresponding function + // of the standard math library, that is to say the function + // from having the same name. + // However qfmod(), sfmod(), frac() and fix() do not have + // counterparts in the standard math library. + // With respect to fmod(), qfmod() requires one more + // argument, where the quotient of the division of + // the first argument by the second one is stored. + // sfmod (x,&n) stores in the integer variable + // 'n' the integer part of 'x' and, at the same time, + // returns the fractional part of 'x'. + // The usage of sfmod() is strongly discouraged. + // frac() returns the fractional part of its argument. + // Finally, fix() is a frontend to the xfix() + // function (see section "Extended Precision Floating + // Point Arithmetic"). + friend xreal abs (const xreal& s); + friend xreal frexp (const xreal& s, int *p); + friend xreal qfmod (const xreal& s, const xreal& t, xreal& q); + friend xreal fmod (const xreal& s, const xreal& t); + friend xreal sfmod (const xreal& s, int *p); + friend xreal frac (const xreal& x); + friend xreal trunc (const xreal& x); + friend xreal round (const xreal& x); + friend xreal ceil (const xreal& x); + friend xreal floor (const xreal& x); + friend xreal fix (const xreal& x); + friend xreal tan (const xreal& x); + friend xreal sin (const xreal& x); + friend xreal cos (const xreal& x); + friend xreal atan (const xreal& a); + friend xreal atan2 (const xreal& y, const xreal& x); + friend xreal asin (const xreal& a); + friend xreal acos (const xreal& a); + friend xreal sqrt (const xreal& u); + friend xreal exp (const xreal& u); + friend xreal exp2 (const xreal& u); + friend xreal exp10 (const xreal& u); + friend xreal log (const xreal& u); + friend xreal log2 (const xreal& u); + friend xreal log10 (const xreal& u); + friend xreal tanh (const xreal& v); + friend xreal sinh (const xreal& v); + friend xreal cosh (const xreal& v); + friend xreal atanh (const xreal& v); + friend xreal asinh (const xreal& v); + friend xreal acosh (const xreal& v); + friend xreal pow (const xreal& x, const xreal& y); + + public: + // Various constructors. They allow to define + // an extended precision number in several ways. + // In addition, they allow for conversions from other + // numeric types. + xreal (const struct xpr* px = &xZero); + xreal (struct xpr x); + xreal (double x); + xreal (float x); + xreal (int n); + xreal (long n); + xreal (unsigned int u); + xreal (unsigned long u); + + // This constructor requires a special comment. If + // only the first argument is present, the initial portion + // of the string pointed to by this argument is converted + // into an extended precision number, if a conversion is + // possible. If no conversion is possible, then the + // returned number is xNAN. If the second argument is + // present and is not null, it must be the address of a + // valid pointer to 'char'. + // Before returning, the constructor will set this pointer + // so that it points to the character of the string 'str' after the last + // character used in the conversion. + xreal (const char* str, char** endptr = 0); + xreal (string str); + xreal (const xreal& x); + + // Assignment operators. They do not require + // any explanation with the only exception of '%=', + // which combines a '%' operation with an assignment. + // So, x %= n is equivalent to x *= pow(2,n) . + xreal& operator= (const xreal& x); + xreal& operator+= (const xreal& x); + xreal& operator-= (const xreal& x); + xreal& operator*= (const xreal& x); + xreal& operator/= (const xreal& x); + xreal& operator%= (int n); + + // Increment and decrement operators. Both prefixed + // and postfixed versions are defined. + xreal& operator++ (); + xreal& operator-- (); + xreal& operator++ (int dummy); + xreal& operator-- (int dummy); + + // Destructor. You will never have to recall it + // explicitly in your code. + ~xreal (void); + + // Integer exponent power. For any extended precision + // number 'x', x(n) is equal to 'x' raised to 'n'. + xreal operator() (int n) const; + + // This is the usual unary minus. + xreal operator-() const; + + // For any extended precision number 'x', !x evaluates to 1 + // when 'x' is null, else it evaluates to 0. + int operator!() const; + + // x.isneg() returns 1 if 'x' is negative, else it + // returns 0. + int isneg() const; + + // x.exp() returns the exponent part + // of the binary representation of 'x'. + int exp() const; + + // Functions for conversions. x._2double(), x._2float(), + // x._2xpr() and x._2string() convert the extended precision + // number 'x' in a double precision number, in a single + // precision number, in a structure of + // type 'xpr', and in a string, respectively. + double _2double () const; + float _2float() const; + struct xpr _2xpr() const; + string _2string() const; + + // The member function xreal::getfrom() can be used to + // recover an extended precision number from an input + // stream. The input stream is passed as argument to the + // function. + // The return value is 0 in case of input error (in case + // of End-Of-File, for example). + // When it starts to process its input, this function drops + // all the eventual leading white spaces. + // After reading the first non space character, it + // continues to read from the input stream until it finds + // a white space or reaches the End-Of-File. + // Then it tries to convert into an extended + // precision number the (initial portion of the) string just + // read. + // If no conversion can be performed, then x.getfrom(is) + // sets 'x' to the value xNAN. + // If the exactly converted value would cause overflow, + // then 'x' is set to xINF or x_INF, according to the sign + // of the correct value. + int getfrom (istream& is); + + // The member function xreal::print() can be used to write + // an extended precision number to an output stream. + // The output stream is passed to the function as first + // argument. The next three arguments have the same meanings + // of the fields 'notat', 'sf' and 'lim' of the + // structure 'xoutflags', respectively (see section "Real Arithmetic"). + int print (ostream& os, int sc_not, int sign, int lim) const; + + // The function call x.asprint(sc_not, sign, lim) returns + // a buffer of characters with the representation, in form + // of a decimal ASCII string, of the extended precision + // number 'x'. The arguments 'sc_not', 'sign' and 'lim' are + // used to format the string. + // They have the same meanings of the fields 'notat', 'sf' + // and 'lim' of the structure 'xoutflags', respectively (see section + // "Real Arithmetic"). + // The buffer returned by this function is malloc'ed inside + // the function. In case of insufficient memory, the null + // pointer is returned. + char* asprint (int sc_not, int sign, int lim) const; + + // The following static functions are used to set + // or get the values of the fields of the structure + // 'xreal::ioflags'. This structure is a static member + // variable of the class 'xreal' and it is used by the + // output operator << to know how to format its second + // argument. The meaning of the fields of the structure + // 'xreal::ioflags' is explained in the section + // "Real arithmetic". + + // xreal::set_notation (which) sets to 'which' the value + // of 'xreal::ioflags.notat' . + static void set_notation (short notat); + + // xreal::set_signflag (which) sets to 'which' the value + // of 'xreal::ioflags.sf' . + static void set_signflag (short onoff); + + // xreal::set_mfwd (which) sets to 'which' the value + // of 'xreal::ioflags.mfwd' . + static void set_mfwd (short wd); + + // xreal::set_lim (which) sets to 'which' the value + // of 'xreal::ioflags.lim' . + static void set_lim (short lim); + + // xreal::set_padding (which) sets to 'which' the value + // of 'xreal::ioflags.padding' . + static void set_padding (signed char ch); + + // xreal::get_notation () returns the current value + // of 'xreal::ioflags.notat' . + static short get_notation (void); + + // xreal::get_signflag () returns the current value + // of 'xreal::ioflags.sf' . + static short get_signflag (void); + + // xreal::get_mfwd () returns the current value + // of 'xreal::ioflags.mfwd' . + static short get_mfwd (void); + + // xreal::get_lim () returns the current value + // of 'xreal::ioflags.lim' . + static short get_lim (void); + + // xreal::get_padding () returns the current value + // of 'xreal::ioflags.padding' . + static signed char get_padding (void); + private: + struct xpr br; /* binary representation */ + static struct xoutflags ioflags; /* output flags */ +}; + + // xmatherrcode() returns the current value of the global + // variable 'xErrNo' (see section + // "Dealing with runtime errors"), if + // this variable is defined. + // Otherwise xmatherrcode() returns -1. + int xmatherrcode (); + + // clear_xmatherr() resets to 0 the value of the global + // variable 'xErrNo' (see section "Dealing with runtime + // errors"), if this variable is defined. + // Otherwise, clear_xmatherr() prints a suitable warning + // on 'cerr' (standard error device). + void clear_xmatherr (); + + // Some useful constants: + // xZERO == 0 + // xONE == 1 + // xTWO == 2 + // xTEN == 10 + // xINF == +INF + // x_INF == -INF + // xNAN == Not-A-Number + // xPI == Pi Greek + // xPI2 == Pi / 2 + // xPI4 == Pi / 4 + // xEE == e (base of natural logarithms) + // xSQRT2 == square root of 2 + // xLN2 == natural logarithm of 2 + // xLN10 == natural logarithm of 10 + // xLOG2_E == base-2 logarithm of e + // xLOG2_10 == base-2 logarithm of 10 + // xLOG10_E == base-10 logarithm of e + extern const xreal xZERO, xONE, xTWO, xTEN; + extern const xreal xINF, x_INF, xNAN; + extern const xreal xPI, xPI2, xPI4, xEE, xSQRT2; + extern const xreal xLN2, xLN10, xLOG2_E, xLOG2_10, xLOG10_E; + +} /* End namespace HPA */ + +#endif /* _XREAL_H_ */ diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/hpaconf.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/hpaconf.c new file mode 100644 index 00000000..b34f32d2 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/hpaconf.c @@ -0,0 +1,91 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include + +/* The macros VERSION, IPATH and LPATH are directly defined on the */ +/* command line to the compiler. */ + +#ifndef VERSION +#define VERSION "unknown" +#endif + +#ifndef IPATH +#define IPATH "" +#endif + +#ifndef LPATH +#define LPATH "" +#endif + +/* The same is for the macros XMANTISSA_SIZE and XERR_... */ + +#ifndef XMANTISSA_SIZE +#define XMANTISSA_SIZE 7 +#endif + +#if !defined(XERR_IGN) && !defined(XERR_WARN) && !defined (XERR_EXIT) +#define XERR_DFL 1 +#endif + +#define XSIZE 2 * (XMANTISSA_SIZE + 1) +#define SGN_NBITS 1 +#define EXP_NBITS 15 +#define MNT_NBITS XMANTISSA_SIZE * 16 +#define PREC_DIGS (XMANTISSA_SIZE * 4816) / 1000 + +#define DYN_RANGE " 2^16384 > x > 2^(-16383)" +#define DYN_RANGE_10 "1.19*10^4932 > x > 1.68*10^-(4932)" + +void library_desc (void) +{ + fprintf (stdout, + "----- Features of the HPA library (including build options) -----\n\n"); + fprintf (stdout, + "Size of an extended precision floating point value (in bytes): %u\n", + XSIZE); + fprintf (stdout, "Number of bits available for the sign: %u\n", + SGN_NBITS); + fprintf (stdout, "Number of bits available for the exponent: %u\n", + EXP_NBITS); + fprintf (stdout, "Number of bits available for the mantissa: %u\n", + MNT_NBITS); + fprintf (stdout, "Decimal digits of accuracy: ~%u\n", + PREC_DIGS); + fprintf (stdout, + "Dynamic range supported: %s i.e.\n \t\t\t %s\n", + DYN_RANGE, DYN_RANGE_10); + fprintf (stdout, "In case of floating point error\n"); +#ifdef XERR_IGN + fprintf (stdout, "nothing is signaled\n\n"); +#elif defined(XERR_WARN) + fprintf (stdout, "a warning message is printed on stderr\n\n"); +#elif defined(XERR_EXIT) + fprintf (stdout, + "the calling process is terminated through a call to exit(1)\n"); + fprintf (stdout, "after printing a suitable message on stderr\n\n"); +#else + fprintf (stdout, + "the global (extern) variable \'xErrNo\' is suitably set\n\n"); +#endif +} \ No newline at end of file diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/hpaconf.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/hpaconf.h new file mode 100644 index 00000000..d5f86617 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/hpaconf.h @@ -0,0 +1,14 @@ +#ifndef _HPACONF_H_ +#define _HPACONF_H_ + +#define HPA_VERSION "1.7" +extern int XLITTLE_ENDIAN; +#define XULONG_BITSIZE (sizeof(unsigned long)*8) +#define XERR_DFL 1 +// Here is the precision +// Available precision = 7, 11, 15, 19, 23, 27, 31 +// 7 = 34 decimal places +// Algorithm become slower when XDIM > 19 +// 31 = 150 decimal places +#define XDIM 15 +#endif diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const07.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const07.h new file mode 100644 index 00000000..28f32070 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const07.h @@ -0,0 +1,76 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +/* Constants file for XDIM=7 +*/ + +const int xItt_div = 2; +const int xK_tanh = 5; +const int xMS_exp = 21; +const int xMS_hyp = 25; +const int xMS_trg = 31; + +const xpr xPi4 = { {0x3ffe, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc} +}; +const xpr xPi2 = { {0x3fff, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc} +}; +const xpr xPi = { {0x4000, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc} +}; +const xpr xEe = { {0x4000, 0xadf8, 0x5458, 0xa2bb, + 0x4a9a, 0xafdc, 0x5620, 0x273d} +}; +const xpr xLn2 = { {0x3ffe, 0xb172, 0x17f7, 0xd1cf, + 0x79ab, 0xc9e3, 0xb398, 0x03f3} +}; +const xpr xLn10 = { {0x4000, 0x935d, 0x8ddd, 0xaaa8, + 0xac16, 0xea56, 0xd62b, 0x82d3} +}; +const xpr xSqrt2 = { {0x3fff, 0xb504, 0xf333, 0xf9de, + 0x6484, 0x597d, 0x89b3, 0x754b} +}; + +const xpr xLog2_e = { {0x3fff, 0xb8aa, 0x3b29, 0x5c17, + 0xf0bb, 0xbe87, 0xfed0, 0x691d} +}; +const xpr xLog2_10 = { {0x4000, 0xd49a, 0x784b, 0xcd1b, + 0x8afe, 0x492b, 0xf6ff, 0x4db0} +}; +const xpr xLog10_e = { {0x3ffd, 0xde5b, 0xd8a9, 0x3728, + 0x7195, 0x355b, 0xaaaf, 0xad34} +}; + +const xpr xRndcorr = { {0x3ffe, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0068} +}; + +const xpr xFixcorr = { {0x3f97, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000} +}; + +const xpr xNaN = { {0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff} +}; +const xpr HPA_MIN = { {0x0001, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xC979 } }; +const xpr HPA_MAX = { {0x7FFC, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9B43 } }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const11.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const11.h new file mode 100644 index 00000000..0ebbcd88 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const11.h @@ -0,0 +1,89 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +/* Constants file for XDIM=11 +*/ + +const int xItt_div = 2; +const int xK_tanh = 6; +const int xMS_exp = 31; +const int xMS_hyp = 35; +const int xMS_trg = 43; + +const xpr xPi4 = { {0x3ffe, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a68} +}; +const xpr xPi2 = { {0x3fff, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a68} +}; +const xpr xPi = { {0x4000, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a68} +}; +const xpr xEe = { {0x4000, 0xadf8, 0x5458, 0xa2bb, + 0x4a9a, 0xafdc, 0x5620, 0x273d, + 0x3cf1, 0xd8b9, 0xc583, 0xce2d} +}; +const xpr xLn2 = { {0x3ffe, 0xb172, 0x17f7, 0xd1cf, + 0x79ab, 0xc9e3, 0xb398, 0x03f2, + 0xf6af, 0x40f3, 0x4326, 0x7299} +}; +const xpr xLn10 = { {0x4000, 0x935d, 0x8ddd, 0xaaa8, + 0xac16, 0xea56, 0xd62b, 0x82d3, + 0x0a28, 0xe28f, 0xecf9, 0xda5e} +}; +const xpr xSqrt2 = { {0x3fff, 0xb504, 0xf333, 0xf9de, + 0x6484, 0x597d, 0x89b3, 0x754a, + 0xbe9f, 0x1d6f, 0x60ba, 0x893c} +}; + +const xpr xLog2_e = { {0x3fff, 0xb8aa, 0x3b29, 0x5c17, + 0xf0bb, 0xbe87, 0xfed0, 0x691d, + 0x3e88, 0xeb57, 0x7aa8, 0xdd69} +}; +const xpr xLog2_10 = { {0x4000, 0xd49a, 0x784b, 0xcd1b, + 0x8afe, 0x492b, 0xf6ff, 0x4daf, + 0xdb4c, 0xd96c, 0x55fe, 0x37b4} +}; +const xpr xLog10_e = { {0x3ffd, 0xde5b, 0xd8a9, 0x3728, + 0x7195, 0x355b, 0xaaaf, 0xad33, + 0xdc32, 0x3ee3, 0x4602, 0x45ca} +}; + +const xpr xRndcorr = { {0x3ffe, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00f8} +}; + +const xpr xFixcorr = { {0x3f57, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000} +}; + +const xpr xNaN = { {0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff} +}; +const xpr HPA_MIN = { {0x0001, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFD, 0x6691 } }; +const xpr HPA_MAX = { {0x7FFC, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x4CB7 } }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const15.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const15.h new file mode 100644 index 00000000..0fda15a9 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const15.h @@ -0,0 +1,102 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +/* Constants file for XDIM=15 +*/ + +const int xItt_div = 3; +const int xK_tanh = 6; +const int xMS_exp = 39; +const int xMS_hyp = 45; +const int xMS_trg = 55; + +const xpr xPi4 = { {0x3ffe, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b14} +}; +const xpr xPi2 = { {0x3fff, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b14} +}; +const xpr xPi = { {0x4000, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b14} +}; +const xpr xEe = { {0x4000, 0xadf8, 0x5458, 0xa2bb, + 0x4a9a, 0xafdc, 0x5620, 0x273d, + 0x3cf1, 0xd8b9, 0xc583, 0xce2d, + 0x3695, 0xa9e1, 0x3641, 0x1464} +}; +const xpr xLn2 = { {0x3ffe, 0xb172, 0x17f7, 0xd1cf, + 0x79ab, 0xc9e3, 0xb398, 0x03f2, + 0xf6af, 0x40f3, 0x4326, 0x7298, + 0xb62d, 0x8a0d, 0x175b, 0x8bab} +}; +const xpr xLn10 = { {0x4000, 0x935d, 0x8ddd, 0xaaa8, + 0xac16, 0xea56, 0xd62b, 0x82d3, + 0x0a28, 0xe28f, 0xecf9, 0xda5d, + 0xf90e, 0x83c6, 0x1e82, 0x01f0} +}; +const xpr xSqrt2 = { {0x3fff, 0xb504, 0xf333, 0xf9de, + 0x6484, 0x597d, 0x89b3, 0x754a, + 0xbe9f, 0x1d6f, 0x60ba, 0x893b, + 0xa84c, 0xed17, 0xac85, 0x8334} +}; + +const xpr xLog2_e = { {0x3fff, 0xb8aa, 0x3b29, 0x5c17, + 0xf0bb, 0xbe87, 0xfed0, 0x691d, + 0x3e88, 0xeb57, 0x7aa8, 0xdd69, + 0x5a58, 0x8b25, 0x166c, 0xd1a1} +}; +const xpr xLog2_10 = { {0x4000, 0xd49a, 0x784b, 0xcd1b, + 0x8afe, 0x492b, 0xf6ff, 0x4daf, + 0xdb4c, 0xd96c, 0x55fe, 0x37b3, + 0xad4e, 0x91b6, 0xac80, 0x82e8} +}; +const xpr xLog10_e = { {0x3ffd, 0xde5b, 0xd8a9, 0x3728, + 0x7195, 0x355b, 0xaaaf, 0xad33, + 0xdc32, 0x3ee3, 0x4602, 0x45c9, + 0xa202, 0x3a3f, 0x2d44, 0xf78f} +}; + +const xpr xRndcorr = { {0x3ffe, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01ae} +}; + +const xpr xFixcorr = { {0x3f17, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000} +}; + +const xpr xNaN = { {0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff} +}; +const xpr HPA_MIN = { {0x0001, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFC, 0xB519 } }; +const xpr HPA_MAX = { {0x7FFC, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0xA573 } }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const19.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const19.h new file mode 100644 index 00000000..dfda1279 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const19.h @@ -0,0 +1,115 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +/* Constants file for XDIM=19 +*/ + +const int xItt_div = 3; +const int xK_tanh = 6; +const int xMS_exp = 39; +const int xMS_hyp = 45; +const int xMS_trg = 55; + +const xpr xPi4 = { {0x3ffe, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34} +}; +const xpr xPi2 = { {0x3fff, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34} +}; +const xpr xPi = { {0x4000, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34} +}; +const xpr xEe = { {0x4000, 0xadf8, 0x5458, 0xa2bb, + 0x4a9a, 0xafdc, 0x5620, 0x273d, + 0x3cf1, 0xd8b9, 0xc583, 0xce2d, + 0x3695, 0xa9e1, 0x3641, 0x1464, + 0x33fb, 0xcc93, 0x9dce, 0x249b} +}; +const xpr xLn2 = { {0x3ffe, 0xb172, 0x17f7, 0xd1cf, + 0x79ab, 0xc9e3, 0xb398, 0x03f2, + 0xf6af, 0x40f3, 0x4326, 0x7298, + 0xb62d, 0x8a0d, 0x175b, 0x8baa, + 0xfa2b, 0xe7b8, 0x7620, 0x6dec} +}; +const xpr xLn10 = { {0x4000, 0x935d, 0x8ddd, 0xaaa8, + 0xac16, 0xea56, 0xd62b, 0x82d3, + 0x0a28, 0xe28f, 0xecf9, 0xda5d, + 0xf90e, 0x83c6, 0x1e82, 0x01f0, + 0x2d72, 0x962f, 0x02d7, 0xb1a8} +}; +const xpr xSqrt2 = { {0x3fff, 0xb504, 0xf333, 0xf9de, + 0x6484, 0x597d, 0x89b3, 0x754a, + 0xbe9f, 0x1d6f, 0x60ba, 0x893b, + 0xa84c, 0xed17, 0xac85, 0x8333, + 0x9915, 0x4afc, 0x8304, 0x3ab9} +}; + +const xpr xLog2_e = { {0x3fff, 0xb8aa, 0x3b29, 0x5c17, + 0xf0bb, 0xbe87, 0xfed0, 0x691d, + 0x3e88, 0xeb57, 0x7aa8, 0xdd69, + 0x5a58, 0x8b25, 0x166c, 0xd1a1, + 0x3247, 0xde1c, 0x43f7, 0x5517} +}; +const xpr xLog2_10 = { {0x4000, 0xd49a, 0x784b, 0xcd1b, + 0x8afe, 0x492b, 0xf6ff, 0x4daf, + 0xdb4c, 0xd96c, 0x55fe, 0x37b3, + 0xad4e, 0x91b6, 0xac80, 0x82e7, + 0x859d, 0x0665, 0x0fde, 0x9dd5} +}; +const xpr xLog10_e = { {0x3ffd, 0xde5b, 0xd8a9, 0x3728, + 0x7195, 0x355b, 0xaaaf, 0xad33, + 0xdc32, 0x3ee3, 0x4602, 0x45c9, + 0xa202, 0x3a3f, 0x2d44, 0xf78e, + 0xa53c, 0x7542, 0x4efa, 0x1403} +}; + +const xpr xRndcorr = { {0x3ffe, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0284} +}; + +const xpr xFixcorr = { {0x3ed7, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000} +}; + +const xpr xNaN = { {0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff} +}; +const xpr HPA_MIN = { {0x0001, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFA, 0xF97A } }; +const xpr HPA_MAX = { {0x7FFC, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x8342 } }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const23.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const23.h new file mode 100644 index 00000000..91f03348 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const23.h @@ -0,0 +1,128 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +/* Constants file for XDIM=23 +*/ + +const int xItt_div = 3; +const int xK_tanh = 7; +const int xMS_exp = 57; +const int xMS_hyp = 65; +const int xMS_trg = 75; + +const xpr xPi4 = { {0x3ffe, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a} +}; +const xpr xPi2 = { {0x3fff, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a} +}; +const xpr xPi = { {0x4000, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a} +}; +const xpr xEe = { {0x4000, 0xadf8, 0x5458, 0xa2bb, + 0x4a9a, 0xafdc, 0x5620, 0x273d, + 0x3cf1, 0xd8b9, 0xc583, 0xce2d, + 0x3695, 0xa9e1, 0x3641, 0x1464, + 0x33fb, 0xcc93, 0x9dce, 0x249b, + 0x3ef9, 0x7d2f, 0xe363, 0x630c} +}; +const xpr xLn2 = { {0x3ffe, 0xb172, 0x17f7, 0xd1cf, + 0x79ab, 0xc9e3, 0xb398, 0x03f2, + 0xf6af, 0x40f3, 0x4326, 0x7298, + 0xb62d, 0x8a0d, 0x175b, 0x8baa, + 0xfa2b, 0xe7b8, 0x7620, 0x6deb, + 0xac98, 0x5595, 0x52fb, 0x4afa} +}; +const xpr xLn10 = { {0x4000, 0x935d, 0x8ddd, 0xaaa8, + 0xac16, 0xea56, 0xd62b, 0x82d3, + 0x0a28, 0xe28f, 0xecf9, 0xda5d, + 0xf90e, 0x83c6, 0x1e82, 0x01f0, + 0x2d72, 0x962f, 0x02d7, 0xb1a8, + 0x105c, 0xcc70, 0xcbc0, 0x2c5f} +}; +const xpr xSqrt2 = { {0x3fff, 0xb504, 0xf333, 0xf9de, + 0x6484, 0x597d, 0x89b3, 0x754a, + 0xbe9f, 0x1d6f, 0x60ba, 0x893b, + 0xa84c, 0xed17, 0xac85, 0x8333, + 0x9915, 0x4afc, 0x8304, 0x3ab8, + 0xa2c3, 0xa8b1, 0xfe6f, 0xdc84} +}; + +const xpr xLog2_e = { {0x3fff, 0xb8aa, 0x3b29, 0x5c17, + 0xf0bb, 0xbe87, 0xfed0, 0x691d, + 0x3e88, 0xeb57, 0x7aa8, 0xdd69, + 0x5a58, 0x8b25, 0x166c, 0xd1a1, + 0x3247, 0xde1c, 0x43f7, 0x5517, + 0x6cd6, 0x24d9, 0x2f75, 0xc16c} +}; +const xpr xLog2_10 = { {0x4000, 0xd49a, 0x784b, 0xcd1b, + 0x8afe, 0x492b, 0xf6ff, 0x4daf, + 0xdb4c, 0xd96c, 0x55fe, 0x37b3, + 0xad4e, 0x91b6, 0xac80, 0x82e7, + 0x859d, 0x0665, 0x0fde, 0x9dd5, + 0x1f3a, 0x3e24, 0xbeab, 0x63ad} +}; +const xpr xLog10_e = { {0x3ffd, 0xde5b, 0xd8a9, 0x3728, + 0x7195, 0x355b, 0xaaaf, 0xad33, + 0xdc32, 0x3ee3, 0x4602, 0x45c9, + 0xa202, 0x3a3f, 0x2d44, 0xf78e, + 0xa53c, 0x7542, 0x4efa, 0x1402, + 0xf3f2, 0x9223, 0x5592, 0xc646} +}; + +const xpr xRndcorr = { {0x3ffe, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x03ee} +}; + +const xpr xFixcorr = { {0x3e97, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000} +}; + +const xpr xNaN = { {0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff} +}; +const xpr HPA_MIN = { {0x0001, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFF9, 0x3DD5 } }; +const xpr HPA_MAX = { {0x7FFC, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x6112 } }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const27.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const27.h new file mode 100644 index 00000000..3aee5451 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const27.h @@ -0,0 +1,141 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +/* Constants file for XDIM=27 +*/ + +const int xItt_div = 4; +const int xK_tanh = 7; +const int xMS_exp = 65; +const int xMS_hyp = 73; +const int xMS_trg = 85; + +const xpr xPi4 = { {0x3ffe, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a, + 0x431b, 0x302b, 0x0a6d, 0xf25f} +}; +const xpr xPi2 = { {0x3fff, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a, + 0x431b, 0x302b, 0x0a6d, 0xf25f} +}; +const xpr xPi = { {0x4000, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a, + 0x431b, 0x302b, 0x0a6d, 0xf25f} +}; +const xpr xEe = { {0x4000, 0xadf8, 0x5458, 0xa2bb, + 0x4a9a, 0xafdc, 0x5620, 0x273d, + 0x3cf1, 0xd8b9, 0xc583, 0xce2d, + 0x3695, 0xa9e1, 0x3641, 0x1464, + 0x33fb, 0xcc93, 0x9dce, 0x249b, + 0x3ef9, 0x7d2f, 0xe363, 0x630c, + 0x75d8, 0xf681, 0xb202, 0xaec4} +}; +const xpr xLn2 = { {0x3ffe, 0xb172, 0x17f7, 0xd1cf, + 0x79ab, 0xc9e3, 0xb398, 0x03f2, + 0xf6af, 0x40f3, 0x4326, 0x7298, + 0xb62d, 0x8a0d, 0x175b, 0x8baa, + 0xfa2b, 0xe7b8, 0x7620, 0x6deb, + 0xac98, 0x5595, 0x52fb, 0x4afa, + 0x1b10, 0xed2e, 0xae35, 0xc138} +}; +const xpr xLn10 = { {0x4000, 0x935d, 0x8ddd, 0xaaa8, + 0xac16, 0xea56, 0xd62b, 0x82d3, + 0x0a28, 0xe28f, 0xecf9, 0xda5d, + 0xf90e, 0x83c6, 0x1e82, 0x01f0, + 0x2d72, 0x962f, 0x02d7, 0xb1a8, + 0x105c, 0xcc70, 0xcbc0, 0x2c5f, + 0x0d68, 0x2c62, 0x2418, 0x410c} +}; +const xpr xSqrt2 = { {0x3fff, 0xb504, 0xf333, 0xf9de, + 0x6484, 0x597d, 0x89b3, 0x754a, + 0xbe9f, 0x1d6f, 0x60ba, 0x893b, + 0xa84c, 0xed17, 0xac85, 0x8333, + 0x9915, 0x4afc, 0x8304, 0x3ab8, + 0xa2c3, 0xa8b1, 0xfe6f, 0xdc83, + 0xdb39, 0x0f74, 0xa85e, 0x439c} +}; + +const xpr xLog2_e = { {0x3fff, 0xb8aa, 0x3b29, 0x5c17, + 0xf0bb, 0xbe87, 0xfed0, 0x691d, + 0x3e88, 0xeb57, 0x7aa8, 0xdd69, + 0x5a58, 0x8b25, 0x166c, 0xd1a1, + 0x3247, 0xde1c, 0x43f7, 0x5517, + 0x6cd6, 0x24d9, 0x2f75, 0xc16b, + 0xe0b3, 0xea90, 0xb9e6, 0x0c4b} +}; +const xpr xLog2_10 = { {0x4000, 0xd49a, 0x784b, 0xcd1b, + 0x8afe, 0x492b, 0xf6ff, 0x4daf, + 0xdb4c, 0xd96c, 0x55fe, 0x37b3, + 0xad4e, 0x91b6, 0xac80, 0x82e7, + 0x859d, 0x0665, 0x0fde, 0x9dd5, + 0x1f3a, 0x3e24, 0xbeab, 0x63ad, + 0x0bd6, 0x1435, 0xee48, 0x0566} +}; +const xpr xLog10_e = { {0x3ffd, 0xde5b, 0xd8a9, 0x3728, + 0x7195, 0x355b, 0xaaaf, 0xad33, + 0xdc32, 0x3ee3, 0x4602, 0x45c9, + 0xa202, 0x3a3f, 0x2d44, 0xf78e, + 0xa53c, 0x7542, 0x4efa, 0x1402, + 0xf3f2, 0x9223, 0x5592, 0xc646, + 0x4a15, 0x18ce, 0x3bd9, 0xfd39} +}; + +const xpr xRndcorr = { {0x3ffe, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0446} +}; + +const xpr xFixcorr = { {0x3e57, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000} +}; + +const xpr xNaN = { {0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff} +}; +const xpr HPA_MIN = { {0x0001, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFF8, 0xE51A } }; +const xpr HPA_MAX = { {0x7FFC, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x8D69 } }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const31.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const31.h new file mode 100644 index 00000000..6841c513 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/mp/const31.h @@ -0,0 +1,154 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +/* Constants file for XDIM=31 +*/ + +const int xItt_div = 4; +const int xK_tanh = 7; +const int xMS_exp = 73; +const int xMS_hyp = 83; +const int xMS_trg = 95; + +const xpr xPi4 = { {0x3ffe, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a, + 0x431b, 0x302b, 0x0a6d, 0xf25f, + 0x1437, 0x4fe1, 0x356d, 0x6d52} +}; +const xpr xPi2 = { {0x3fff, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a, + 0x431b, 0x302b, 0x0a6d, 0xf25f, + 0x1437, 0x4fe1, 0x356d, 0x6d52} +}; +const xpr xPi = { {0x4000, 0xc90f, 0xdaa2, 0x2168, + 0xc234, 0xc4c6, 0x628b, 0x80dc, + 0x1cd1, 0x2902, 0x4e08, 0x8a67, + 0xcc74, 0x020b, 0xbea6, 0x3b13, + 0x9b22, 0x514a, 0x0879, 0x8e34, + 0x04dd, 0xef95, 0x19b3, 0xcd3a, + 0x431b, 0x302b, 0x0a6d, 0xf25f, + 0x1437, 0x4fe1, 0x356d, 0x6d52} +}; +const xpr xEe = { {0x4000, 0xadf8, 0x5458, 0xa2bb, + 0x4a9a, 0xafdc, 0x5620, 0x273d, + 0x3cf1, 0xd8b9, 0xc583, 0xce2d, + 0x3695, 0xa9e1, 0x3641, 0x1464, + 0x33fb, 0xcc93, 0x9dce, 0x249b, + 0x3ef9, 0x7d2f, 0xe363, 0x630c, + 0x75d8, 0xf681, 0xb202, 0xaec4, + 0x617a, 0xd3df, 0x1ed5, 0xd5fd} +}; +const xpr xLn2 = { {0x3ffe, 0xb172, 0x17f7, 0xd1cf, + 0x79ab, 0xc9e3, 0xb398, 0x03f2, + 0xf6af, 0x40f3, 0x4326, 0x7298, + 0xb62d, 0x8a0d, 0x175b, 0x8baa, + 0xfa2b, 0xe7b8, 0x7620, 0x6deb, + 0xac98, 0x5595, 0x52fb, 0x4afa, + 0x1b10, 0xed2e, 0xae35, 0xc138, + 0x2144, 0x2757, 0x3b29, 0x116a} +}; +const xpr xLn10 = { {0x4000, 0x935d, 0x8ddd, 0xaaa8, + 0xac16, 0xea56, 0xd62b, 0x82d3, + 0x0a28, 0xe28f, 0xecf9, 0xda5d, + 0xf90e, 0x83c6, 0x1e82, 0x01f0, + 0x2d72, 0x962f, 0x02d7, 0xb1a8, + 0x105c, 0xcc70, 0xcbc0, 0x2c5f, + 0x0d68, 0x2c62, 0x2418, 0x410b, + 0xe2da, 0xfb8f, 0x7884, 0x02e5} +}; +const xpr xSqrt2 = { {0x3fff, 0xb504, 0xf333, 0xf9de, + 0x6484, 0x597d, 0x89b3, 0x754a, + 0xbe9f, 0x1d6f, 0x60ba, 0x893b, + 0xa84c, 0xed17, 0xac85, 0x8333, + 0x9915, 0x4afc, 0x8304, 0x3ab8, + 0xa2c3, 0xa8b1, 0xfe6f, 0xdc83, + 0xdb39, 0x0f74, 0xa85e, 0x439c, + 0x7b4a, 0x7804, 0x8736, 0x3dfa} +}; + +const xpr xLog2_e = { {0x3fff, 0xb8aa, 0x3b29, 0x5c17, + 0xf0bb, 0xbe87, 0xfed0, 0x691d, + 0x3e88, 0xeb57, 0x7aa8, 0xdd69, + 0x5a58, 0x8b25, 0x166c, 0xd1a1, + 0x3247, 0xde1c, 0x43f7, 0x5517, + 0x6cd6, 0x24d9, 0x2f75, 0xc16b, + 0xe0b3, 0xea90, 0xb9e6, 0x0c4a, + 0x909f, 0xc4bf, 0xaf03, 0x53df} +}; +const xpr xLog2_10 = { {0x4000, 0xd49a, 0x784b, 0xcd1b, + 0x8afe, 0x492b, 0xf6ff, 0x4daf, + 0xdb4c, 0xd96c, 0x55fe, 0x37b3, + 0xad4e, 0x91b6, 0xac80, 0x82e7, + 0x859d, 0x0665, 0x0fde, 0x9dd5, + 0x1f3a, 0x3e24, 0xbeab, 0x63ad, + 0x0bd6, 0x1435, 0xee48, 0x0565, + 0xca54, 0xcff1, 0x62cd, 0x4f60} +}; +const xpr xLog10_e = { {0x3ffd, 0xde5b, 0xd8a9, 0x3728, + 0x7195, 0x355b, 0xaaaf, 0xad33, + 0xdc32, 0x3ee3, 0x4602, 0x45c9, + 0xa202, 0x3a3f, 0x2d44, 0xf78e, + 0xa53c, 0x7542, 0x4efa, 0x1402, + 0xf3f2, 0x9223, 0x5592, 0xc646, + 0x4a15, 0x18ce, 0x3bd9, 0xfd38, + 0xdcbc, 0x6fa2, 0xb8d2, 0xc8ce} +}; + +const xpr xRndcorr = { {0x3ffe, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x06f8} +}; + +const xpr xFixcorr = { {0x3e17, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000} +}; + +const xpr xNaN = { {0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff} +}; +const xpr HPA_MIN = { {0x0001, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFF8, 0x8C5E } }; +const xpr HPA_MAX = { {0x7FFC, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0xB9D0 } }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/prcxpr.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/prcxpr.c new file mode 100644 index 00000000..47b6c9c4 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/prcxpr.c @@ -0,0 +1,170 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include /* for free() */ +#include /* for strcat() */ +#include"cxpre.h" /* Automatically includes "xpre.h" */ + +/* See print.c for the next 2 functions */ +extern void xfileputc (int c, FILE * stream); +extern void xprintfmt (FILE * stream, const char *fmt, ...); + +void +cxpr_print (FILE * stream, cxpr z, int sc_not, int sign, int lim) +{ + xpr_print (stream, z.re, sc_not, sign, lim); + xpr_print (stream, z.im, sc_not, 1, lim); + xfileputc (CX1I_CHAR, stream); +} + +void +cxprcxpr (cxpr z, int lim) +{ + cxpr_print (stdout, z, 1, 0, lim); +} + +void +cxprint (FILE * stream, cxpr z) +{ + int i; + + xprintfmt (stream, "(%04x.", z.re.nmm[0]); + for (i = 0; i < XDIM; ++i) + xprintfmt (stream, "%04x", z.re.nmm[i + 1]); + xprintfmt (stream, " , %04x.", z.im.nmm[0]); + for (i = 0; i < XDIM; ++i) + xprintfmt (stream, "%04x", z.im.nmm[i + 1]); + xprintfmt (stream, ")\n"); +} + +int +cxfout (FILE * fp, xoutflags ofs, cxpr z) +{ + if (ofs.fmt < 0) + ofs.fmt = XFMT_STD; + else if (ofs.fmt > 2) + ofs.fmt = XFMT_ALT; + if (ofs.fmt == XFMT_ALT) + { + if (ofs.ldel < 0) + ofs.ldel = CXDEF_LDEL; + if (ofs.rdel < 0) + ofs.rdel = CXDEF_RDEL; + if (fputc (ofs.ldel, fp) == EOF) + return -1; + } + if ((xfout (fp, ofs, z.re))) + return -1; + else if (ofs.fmt == XFMT_RAW && fprintf (fp, CX_EMPTY_SEP) < 0) + return -1; + else if (ofs.fmt == XFMT_ALT && fprintf (fp, CX_SEPARATOR) < 0) + return -1; + else if ((ofs.sf = ofs.fmt == XFMT_STD ? 1 : ofs.sf, xfout (fp, ofs, z.im))) + return -1; + else + { + if (ofs.fmt == XFMT_STD) + { + if (fputc (CX1I_CHAR, fp) == EOF) + return -1; + } + else if (ofs.fmt == XFMT_ALT) + { + if (fputc (ofs.rdel, fp) == EOF) + return -1; + } + return 0; + } +} + +/* Exactly the same as xfout(), but it prints on stdout */ + +int +cxout (xoutflags ofs, cxpr z) +{ + return cxfout (stdout, ofs, z); +} + +unsigned long +cxsout (char *s, unsigned long n, xoutflags ofs, cxpr z) +{ + char *ptr; + unsigned long u, retval; + + if (!s || n == 0) + return 0; /* Just as xsout() under the same condition */ + else + ptr = s, retval = 0; + /* Remark: we are sure that n >= 1 */ + if (ofs.fmt < 0) + ofs.fmt = XFMT_STD; + else if (ofs.fmt > 2) + ofs.fmt = XFMT_ALT; + /* Optional left delimiter */ + if (ofs.fmt == XFMT_ALT) + { + if (ofs.ldel < 0) + ofs.ldel = CXDEF_LDEL; + if (ofs.rdel < 0) + ofs.rdel = CXDEF_RDEL; + if (n > 1) + *ptr++ = (char) ofs.ldel, n--; + retval++; + } + /* Real part */ + if ((u = xsout (ptr, n, ofs, z.re)) < n) + ptr += u, n -= u; + retval += u; + /* Separator */ + if (ofs.fmt != XFMT_STD) + { + if (n > CX_SEP_L) + { + if (ofs.fmt == XFMT_ALT) + strcat (ptr, CX_SEPARATOR); + else + strcat (ptr, CX_EMPTY_SEP); /* RAW format enabled */ + ptr += CX_SEP_L, n -= CX_SEP_L; + } + retval += CX_SEP_L; + } + /* Imaginary part */ + if ((ofs.sf = ofs.fmt == XFMT_STD ? 1 : ofs.sf, + u = xsout (ptr, n, ofs, z.im)) < n) + ptr += u, n -= u; + retval += u; + /* Optional right delimiter */ + if (ofs.fmt == XFMT_STD) + { + if (n > 1) + *ptr++ = (char) CX1I_CHAR, n--; + retval += 1; + } + else if (ofs.fmt == XFMT_ALT) + { + if (n > 1) + *ptr++ = (char) ofs.rdel, n--; + retval += 1; + } + *ptr = '\0'; /* We have to close the string ! */ + return retval; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/print.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/print.c new file mode 100644 index 00000000..26955141 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/print.c @@ -0,0 +1,165 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include +#include +#include /* for size_t */ +#include "xpre.h" + +void +xfileputc (int c, FILE * stream) +{ + if (fputc (c, stream) == EOF) + { + fprintf (stderr, "*** In file \"%s\" of the HPA library\n", __FILE__); + fprintf (stderr, " xfileputc(): I/O Error on stream %p\n", stream); + } +} + +void +xstrputc (char c, char* buffer) +{ + register char *ptr; + + for (ptr = buffer; *ptr != '\0'; ptr++); + *ptr = c; +} + +void +xprintfmt (FILE * stream, const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + if (vfprintf (stream, fmt, ap) < 0) + { + fprintf (stderr, "*** In file \"%s\" of the HPA library\n", __FILE__); + fprintf (stderr, " xprintfmt(): I/O Error on stream %p\n", stream); + } + va_end (ap); +} + +/* Be really careful to the way you employ this function ! */ + +void +xsprintfmt (char *buffer, const char *fmt, ...) +{ + char ibuff[1024]; + va_list ap; + + va_start (ap, fmt); + vsprintf (ibuff, fmt, ap); + va_end (ap); + strcat (buffer, ibuff); +} + +int +xwprint (const char *buff, short mfwd, char padding, FILE * fp) +{ + unsigned short length = strlen (buff); + register long i; + + if (!buff || !fp) + return -1; + else if (mfwd < 0) + { + if (fprintf (fp, "%s", buff) < 0) + return -1; + else + { + for (i = length; i < -mfwd; i++) + if (fputc (padding, fp) == EOF) + return -1; + return 0; + } + } + else + { + for (i = length; i < mfwd; i++) + if (fputc (padding, fp) == EOF) + return -1; + if (fprintf (fp, "%s", buff) < 0) + return -1; + else + return 0; + } +} + +void +xwsprint (char *dest, const char *src, short mfwd, char padding) +{ + unsigned short length = strlen (src); + register long i; + + if (!dest || !src) + return; + else if (mfwd < 0) + { + strcpy (dest, src); + for (i = length; i < -mfwd; i++) + dest[i] = padding; + dest[i] = '\0'; + } + else + { + for (i = length; i < mfwd; i++) + dest[i - length] = padding; + dest[i - length] = '\0'; + strcat (dest, src); + } +} + +unsigned short +xwsnprint (char *dest, size_t dsize, const char *src, + short mfwd, char padding) +{ + unsigned short n = strlen (src); + register long i; + + if (dsize == 0 || !dest || !src) + return 0; + else if (mfwd < 0) + { + unsigned short l = n; + + strncpy (dest, src, dsize - 1); + if (n >= dsize) + n = dsize - 1; + /* n is the number of chars copied */ + /* from 'src' to 'dest'. */ + for (i = n; i < dsize - 1 && i < -mfwd; i++) + dest[i] = padding; + dest[i] = '\0'; + return (-mfwd > l ? -mfwd : l); + } + else + { + for (i = n; i - n < dsize - 1 && i < mfwd; i++) + dest[i - n] = padding; + dest[i - n] = '\0'; + if (i - n < dsize - 1) + strncat (dest, src, dsize - 1 + n - i); + dest[dsize - 1] = '\0'; + return (mfwd > n ? mfwd : n); + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/prxpr.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/prxpr.c new file mode 100644 index 00000000..ab0c41b2 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/prxpr.c @@ -0,0 +1,472 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include /* for calloc() */ +#include /* for strcpy() */ +#include "xpre.h" /* Automatically includes */ + +const double __Log10_2__ = .3010299956639812; + +/* Source code added by Ivano Primi - 11/28/2004 */ + +/* See print.c for all these functions */ +extern void xfileputc (int c, FILE * stream); +extern void xstrputc (char c, char* buffer); +extern void xprintfmt (FILE * stream, const char *fmt, ...); +extern void xsprintfmt (char *buffer, const char *fmt, ...); + +static int +printed_special_value (FILE* stream, xpr u, int sign) +{ + if ((xisPinf(&u))) + { + if ((sign)) + xfileputc ('+', stream); + xprintfmt (stream, "Inf"); + return 1; + } + else if ((xisMinf(&u))) + { + xprintfmt (stream, "-Inf"); + return 1; + } + else if ((xisNaN(&u))) + { + if ((sign)) + xfileputc ('\?', stream); + xprintfmt (stream, "NaN"); + return 1; + } + else + return 0; +} + + +/* + Remark: 's' must have a size >= 5 ! +*/ + +static int +copied_special_value (char* s, xpr u, int sign) +{ + if ((xisPinf(&u))) + { + if ((sign)) + *s = '+', s++; + strcpy (s, "Inf"); + return 1; + } + else if ((xisMinf(&u))) + { + strcpy (s, "-Inf"); + return 1; + } + else if ((xisNaN(&u))) + { + if ((sign)) + *s = '\?', s++; + strcpy (s, "NaN"); + return 1; + } + else + return 0; +} + +/* sc_not != 0 tells using scientific notation */ +/* sign != 0 tells putting a '+' sign before non negative values */ + +void +xpr_print (FILE * stream, xpr u, int sc_not, int sign, int lim) +{ + char q[5 * XDIM + 4]; + register char *p = q; + register int k, m; + int dig; + unsigned short *pa = (unsigned short *) &u; + + if (lim < 0) + lim = 0; + if (lim >= 5 * XDIM + 2) + lim = 5 * XDIM + 2; + if ((printed_special_value (stream, u, sign))) + return; + if ((*pa & xM_sgn)) + { + *pa ^= xM_sgn; + xfileputc ('-', stream); + } + else + { + if ((sign)) + xfileputc ('+', stream); + } + if ((xis0(&u))) + { + xprintfmt (stream, "0."); + for (k = 0; k < lim; ++k) + xfileputc ('0', stream); + if ((sc_not)) + xprintfmt (stream, "e+0"); + } + else + { + m = ((*pa & xM_exp) - xBias); + m = (int) ((double) (m + 1) * __Log10_2__); + if ((m)) + u = xmul (u, xpwr (xTen, -m)); + while ((*pa & xM_exp) < xBias) + { + --m; + u = xmul (u, xTen); + } + for (*p = 0, k = 0; k <= lim; ++k) + { + u = xsfmod (u, &dig); + ++p, *p = (char) dig; + if (*pa == 0) + break; + u = xmul (xTen, u); + } + for (; k <= lim; ++k) + *++p = 0; + if ((*pa)) + { + u = xsfmod (u, &dig); + if (dig >= 5) + ++(*p); + while (*p == 10) + { + *p = 0; + ++(*--p); + } + } + p = q; + if (*p == 0) + ++p; + else + ++m; + /* Now has come the moment to print */ + if (m > XMAX_10EX) + xprintfmt (stream, "Inf"); + else if ((sc_not)) + { + xprintfmt (stream, "%c.", '0' + *p++); + for (k = 0; k < lim; ++k) + xfileputc ('0'+ *p++, stream); + if (m >= 0) + xprintfmt (stream, "e+%d", m); + else + xprintfmt (stream, "e%d", m); + } + else + { + if (m >= 0) + { + for (k = 0; k <= m; k++) + { + if (k <= lim) + xfileputc ('0' + p[k], stream); + else + xfileputc ('0', stream); + } + if (k <= lim) + { + xfileputc ('.', stream); + for (; k <= lim; k++) + xfileputc ('0' + p[k], stream); + } + } + else + { + xprintfmt (stream, "0."); + for (k = 1; k < -m; k++) + xfileputc ('0', stream); + for (k = 0; k <= lim; ++k) + xfileputc ('0' + *p++, stream); + } + } + } /* End of *pa != 0 */ +} + +#define BUFF_SIZE 5120 /* 5 Kb !!! */ + +char * +xpr_asprint (xpr u, int sc_not, int sign, int lim) +{ + char q[5 * XDIM + 4], *buffer, *ptr; + register char *p = q; + register int k, m; + int dig; + unsigned short *pa = (unsigned short *) &u; + + if (lim < 0) + lim = 0; + if (lim > 5 * XDIM + 2) + lim = 5 * XDIM + 2; + if (!(buffer = (char *) calloc (BUFF_SIZE, sizeof (char)))) + return NULL; + else if((copied_special_value (buffer, u, sign))) + { + for (k = 0; buffer[k] != '\0'; k++); + /* Now k is the length of the buffer. */ + /* We shrink the buffer so that it has the exact */ + /* size to contain all its non null chars. */ + ptr = (char *) realloc (buffer, k + 1); + return (ptr != NULL) ? ptr : buffer; + } + else + { + if ((*pa & xM_sgn)) + { + *pa ^= xM_sgn; + xstrputc ('-', buffer); + } + else + { + if ((sign)) + xstrputc ('+', buffer); + } + if ((xis0(&u))) + { + xsprintfmt (buffer, "0."); + for (k = 0; k < lim; ++k) + xstrputc ('0', buffer); + if ((sc_not)) + xsprintfmt (buffer, "e+0"); + } + else + { + m = ((*pa & xM_exp) - xBias); + m = (int) ((double) (m + 1) * __Log10_2__); + if ((m)) + u = xmul (u, xpwr (xTen, -m)); + while ((*pa & xM_exp) < xBias) + { + --m; + u = xmul (u, xTen); + } + for (*p = 0, k = 0; k <= lim; ++k) + { + u = xsfmod (u, &dig); + ++p, *p = (char) dig; + if (*pa == 0) + break; + u = xmul (xTen, u); + } + for (; k <= lim; ++k) + *++p = 0; + if ((*pa)) + { + u = xsfmod (u, &dig); + if (dig >= 5) + ++(*p); + while (*p == 10) + { + *p = 0; + ++(*--p); + } + } + p = q; + if (*p == 0) + ++p; + else + ++m; + /* Now has come the moment to print */ + if (m > XMAX_10EX) + xsprintfmt (buffer, "Inf"); + else if ((sc_not)) + { + xsprintfmt (buffer, "%c.", '0' + *p++); + for (k = 0; k < lim; ++k) + xstrputc ('0' + *p++, buffer); + if (m >= 0) + xsprintfmt (buffer, "e+%d", m); + else + xsprintfmt (buffer, "e%d", m); + } + else + { + if (m >= 0) + { + for (k = 0; k <= m; k++) + { + if (k <= lim) + xstrputc ('0' + p[k], buffer); + else + xstrputc ('0', buffer); + } + if (k <= lim) + { + xstrputc ('.', buffer); + for (; k <= lim; k++) + xstrputc ('0' + p[k], buffer); + } + } + else + { + xsprintfmt (buffer, "0."); + for (k = 1; k < -m; k++) + xstrputc ('0', buffer); + for (k = 0; k <= lim; ++k) + xstrputc ('0' + *p++, buffer); + } + } + } /* End of *pa != 0 */ + for (k = 0; buffer[k] != '\0'; k++); + /* Now k is the length of the buffer. */ + /* We shrink the buffer so that it has the exact */ + /* size to contain all its non null chars. */ + ptr = (char *) realloc (buffer, k + 1); + return (ptr != NULL) ? ptr : buffer; + } /* End of buffer != 0 */ +} + +char * +xtoa (xpr u, int lim) +{ + return xpr_asprint (u, 1, 0, lim); +} + +void +xbprint (FILE * stream, xpr u) +{ + register int i; + register unsigned short n; + + for (n = 0x8000; n != 0x0; n >>= 1) + { + if ((n & u.nmm[0])) + xfileputc ('1', stream); + else + xfileputc ('0', stream); + } + xfileputc ('.', stream); + for (i = 0; i < XDIM; ++i) + { + for (n = 0x8000; n != 0x0; n >>= 1) + { + if ((n & u.nmm[i + 1])) + xfileputc ('1', stream); + else + xfileputc ('0', stream); + } + xfileputc (' ', stream); + } + xfileputc ('\n', stream); +} + +/* End Additions 11/28/2004 */ + +void +xprxpr (xpr u, int lim) +{ + /* Modified by Ivano Primi - 11/29/2004 */ + xpr_print (stdout, u, 1, 0, lim); +} + +void +xprint (FILE * stream, xpr u) +{ + register int i; + + /* Modified by Ivano Primi - 4/2/2005 */ + xprintfmt (stream, "%04x.", u.nmm[0]); + for (i = 0; i < XDIM; ++i) + xprintfmt (stream, "%04x", u.nmm[i + 1]); + xprintfmt (stream, "\n"); +} + +/* + Special output functions. + Added by Ivano Primi, 01/06/2005 +*/ + +/* See print.c for the next three functions */ + +extern int xwprint (const char *buff, short mfwd, char padding, FILE * fp); +extern void xwsprint (char *dest, const char *src, short mfwd, char padding); +extern unsigned short xwsnprint (char *dest, size_t dsize, const char *src, + short mfwd, char padding); + +int +xfout (FILE * fp, xoutflags ofs, xpr x) +{ + char *str; + int errcode; + + ofs.notat = (ofs.notat <= 0) ? XOUT_FIXED : XOUT_SCIENTIFIC; + ofs.sf = (ofs.sf <= 0) ? 0 : 1; + if (ofs.lim < 0) + ofs.lim = XDEF_LIM; + if (ofs.padding < 0) + ofs.padding = ' '; /* blank */ + str = xpr_asprint (x, ofs.notat, ofs.sf, ofs.lim); + errcode = xwprint (str, ofs.mfwd, ofs.padding, fp); + if ((str)) + free ((void *) str); + return errcode; +} + +/* Exactly the same as xfout(), but it prints on stdout */ + +int +xout (xoutflags ofs, xpr x) +{ + char *str; + int errcode; + + ofs.notat = (ofs.notat <= 0) ? XOUT_FIXED : XOUT_SCIENTIFIC; + ofs.sf = (ofs.sf <= 0) ? 0 : 1; + if (ofs.lim < 0) + ofs.lim = XDEF_LIM; + if (ofs.padding < 0) + ofs.padding = ' '; /* blank */ + str = xpr_asprint (x, ofs.notat, ofs.sf, ofs.lim); + errcode = xwprint (str, ofs.mfwd, ofs.padding, stdout); + if ((str)) + free ((void *) str); + return errcode; +} + +/* + Remark: xsout() returns an 'unsigned short' value + casted to 'unsigned long'. +*/ + +unsigned long +xsout (char *s, unsigned long n, xoutflags ofs, xpr x) +{ + char *str; + unsigned long nw; + + ofs.notat = (ofs.notat <= 0) ? XOUT_FIXED : XOUT_SCIENTIFIC; + ofs.sf = (ofs.sf <= 0) ? 0 : 1; + if (ofs.lim < 0) + ofs.lim = XDEF_LIM; + if (ofs.padding < 0) + ofs.padding = ' '; /* blank */ + str = xpr_asprint (x, ofs.notat, ofs.sf, ofs.lim); + nw = xwsnprint (s, n, str, ofs.mfwd, ofs.padding); + if ((str)) + free ((void *) str); + return nw; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/sfmod.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/sfmod.c new file mode 100644 index 00000000..bd01a105 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/sfmod.c @@ -0,0 +1,57 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xsfmod (xpr s, int *p) +{ + unsigned short *pa, *pb; + short e, k; + + pa = (unsigned short *) &s; + pb = pa + 1; + e = (*pa & xM_exp) - xBias; + if ((xsigerr (e >= 15, XFPOFLOW, NULL))) + { + *p = -1; + return s; + } + else if (e < 0) + { + *p = 0; + return s; + } + *p = *pb >> (15 - e); + xlshift (++e, pb, XDIM); + *pa -= e; + for (e = 0; *pb == 0 && e < xMax_p; ++pb, e += 16); + if (e == xMax_p) + return xZero; + for (k = 0; !((*pb << k) & xM_sgn); ++k); + if ((k += e)) + { + xlshift (k, pa + 1, XDIM); + *pa -= k; + } + return s; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/shift.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/shift.c new file mode 100644 index 00000000..d8d6db7a --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/shift.c @@ -0,0 +1,66 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ +#include "xpre.h" + +void +xlshift (int n, unsigned short *pm, int m) +{ + unsigned short *pa, *pc; + + pc = pm + m - 1; + if (n < 16 * m) + { + pa = pm + n / 16; + m = n % 16; + n = 16 - m; + while (pa < pc) + { + *pm = (*pa++) << m; + *pm++ |= *pa >> n; + } + *pm++ = *pa << m; + } + while (pm <= pc) + *pm++ = 0; +} + +void +xrshift (int n, unsigned short *pm, int m) +{ + unsigned short *pa, *pc; + + pc = pm + m - 1; + if (n < 16 * m) + { + pa = pc - n / 16; + m = n % 16; + n = 16 - m; + while (pa > pm) + { + *pc = (*pa--) >> m; + *pc-- |= *pa << n; + } + *pc-- = *pa >> m; + } + while (pc >= pm) + *pc-- = 0; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xadd.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xadd.c new file mode 100644 index 00000000..1b320742 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xadd.c @@ -0,0 +1,114 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xadd (xpr s, xpr t, int f) +{ + unsigned short pe[XDIM + 1], h, u; + register unsigned short *pa, *pb, *pc, *pf = pe; + register unsigned int n = 0; + short e; + register short k; + + pa = (unsigned short *) &s; + pb = (unsigned short *) &t; + e = *pa & xM_exp; + k = *pb & xM_exp; + if (f) + *pb ^= xM_sgn; + u = (*pb ^ *pa) & xM_sgn; + f = 0; + if (e > k) + { + if ((k = e - k) >= xMax_p) + return s; + xrshift (k, pb + 1, XDIM); + } + else if (e < k) + { + if ((e = k - e) >= xMax_p) + return t; + xrshift (e, pa + 1, XDIM); + e = k; + pc = pa; + pa = pb; + pb = pc; + } + else if (u) + { + for (pc = pa, pf = pb; *(++pc) == *(++pf) && f < XDIM; ++f); + if (f >= XDIM) + return xZero; + if (*pc < *pf) + { + pc = pa; + pa = pb; + pb = pc; + } + pf = pe + f; + } + h = *pa & xM_sgn; + if (u) + { + for (pc = pb + XDIM; pc > pb; --pc) + *pc = ~(*pc); + n = 1L; + } + for (pc = pe + XDIM, pa += XDIM, pb += XDIM; pc > pf;) + { + n += *pa; + pa--; + n += *pb; + pb--; + *pc = n; + pc--; + n >>= 16; + } + if (u) + { + for (; *(++pc) == 0; ++f); + for (k = 0; !((*pc << k) & xM_sgn); ++k); + if ((k += 16 * f)) + { + if ((e -= k) <= 0) + return xZero; + xlshift (k, pe + 1, XDIM); + } + } + else + { + if (n) + { + ++e; + if ((xsigerr (e == (short) xM_exp, XFPOFLOW, NULL))) + return (!h ? xPinf : xMinf); + ++pf; + xrshift (1, pf, XDIM); + *pf |= xM_sgn; + } + } + *pe = e; + *pe |= h; + return *(xpr *) pe; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xchcof.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xchcof.c new file mode 100644 index 00000000..cc67d443 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xchcof.c @@ -0,0 +1,70 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include "xpre.h" + +xpr* +xchcof (int m, xpr (*xfunc) (xpr)) +{ + xpr a, b, *c, *cs; + int i, j, k, n; + + if (m > XMAX_DEGREE) + m = XMAX_DEGREE; + ++m; + n = 2 * m; + if ( !(cs = (xpr*) malloc ((n+1)*sizeof(xpr))) ) + return NULL; + else if ( !(c = (xpr*) malloc (m*sizeof(xpr))) ) + { + free ((void*)cs); + return NULL; + } + else + { + a = xdiv (xPi2, inttox (m)); + b = a; + cs[0] = xOne; + for (j = 0; j < m; ++j) + c[j] = xZero; + for (j = 1; j <= n; b = xadd (b, a, 0), ++j) + cs[j] = xcos (b); + for (j = 1; j < n; j += 2) + { + a = (*xfunc) (cs[j]); + c[0] = xadd (c[0], a, 0); + for (k = 1; k < m; ++k) + { + i = (k * j) % (2 * n); + if (i > n) + i = 2 * n - i; + c[k] = xadd (c[k], xmul (a, cs[i]), 0); + } + } + b = xpr2 (xdiv (xOne, inttox (m)), 1); + for (j = 0; j < m; ++j) + c[j] = xmul (c[j], b); + free ((void*)cs); + return c; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xdiv.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xdiv.c new file mode 100644 index 00000000..984c558a --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xdiv.c @@ -0,0 +1,47 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xdiv (xpr s, xpr t) +{ + xpr a; + unsigned short *pc, e, i; + + pc = (unsigned short *) &t; + e = *pc; + *pc = xBias; + if ((xsigerr (xprcmp (&t, &xZero) == 0, XEDIV, "xdiv()"))) + return xZero; + else + { + a = dbltox (1 / xtodbl (t)); + *pc = e; + pc = (unsigned short *) &a; + *pc += xBias - (e & xM_exp); + *pc |= e & xM_sgn; + for (i = 0; i < xItt_div; ++i) + a = xmul (a, xadd (xTwo, xmul (a, t), 1)); + return xmul (s, a); + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xevtch.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xevtch.c new file mode 100644 index 00000000..c7d5f7fa --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xevtch.c @@ -0,0 +1,40 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xevtch (xpr z, xpr *a, int m) +{ + xpr *p, f, t, tp, w; + + w = xpr2 (z, 1); + t = xZero; + tp = xZero; + for (p = a + m; p > a;) + { + f = xadd (*p--, xadd (xmul (w, t), tp, 1), 0); + tp = t; + t = f; + } + return xadd (*p, xadd (xmul (z, t), tp, 1), 0); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xexp.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xexp.c new file mode 100644 index 00000000..c3030960 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xexp.c @@ -0,0 +1,80 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xexp2 (xpr x) +{ + xpr s, d, f; + unsigned short *pf = (unsigned short *) &x; + int m, k; + + if (xprcmp (&x, &xE2min) < 0) + return xZero; + else if ((xsigerr (xprcmp (&x, &xE2max) > 0, XFPOFLOW, NULL))) + return xPinf; + else + { + m = (*pf & xM_sgn) ? 1 : 0; + x = xsfmod (x, &k); + if ((m)) + k *= -1; + /* -xBias <= k <= +xBias */ + x = xmul (x, xLn2); + if (x_exp (&x) > -xBias) + { + x = xpr2 (x, -1); + s = xmul (x, x); + f = xZero; + for (d = inttox (m = xMS_exp); m > 1; m -= 2, d = inttox (m)) + f = xdiv (s, xadd (d, f, 0)); + f = xdiv (x, xadd (d, f, 0)); + f = xdiv (xadd (d, f, 0), xadd (d, f, 1)); + } + else + f = xOne; + pf = (unsigned short *) &f; + if (-k > *pf) + return xZero; + else + { + *pf += k; + if ((xsigerr (*pf >= xM_exp, XFPOFLOW, NULL))) + return xPinf; + else + return f; + } + } +} + +xpr +xexp (xpr z) +{ + return xexp2 (xmul (z, xLog2_e)); +} + +xpr +xexp10 (xpr z) +{ + return xexp2 (xmul (z, xLog2_10)); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xfmod.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xfmod.c new file mode 100644 index 00000000..9328aa86 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xfmod.c @@ -0,0 +1,68 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +/* + Heavily modified by Ivano Primi - 01/30/2005 +*/ + +xpr +xfmod (xpr s, xpr t, xpr *q) +{ + if ((xsigerr (xprcmp (&t, &xZero) == 0, XEDIV, "xfmod()"))) + return xZero; + else + { + unsigned short *p, mask = 0xffff; + short e, i; + int u; + + *q = xdiv (s, t); + p = (unsigned short *) q; + u = (*p & xM_sgn) ? 0 : 1; + e = (*p &= xM_exp); /* biased exponent of *q */ + e = e < xBias ? 0 : e - xBias + 1; + for (i = 1; e / 16 > 0; i++, e -= 16); + if (i <= XDIM) + { + /* e = 0, ..., 15 */ + mask <<= 16 - e; + p[i] &= mask; + for (i++; i <= XDIM; p[i] = 0, i++); + } + /* Now *q == abs(quotient of (s/t)) */ + return xadd (s, xmul (t, *q), u); + } +} + +xpr +xfrexp (xpr s, int *p) +{ + unsigned short *ps = (unsigned short *) &s, u; + + *p = (*ps & xM_exp) - xBias + 1; + u = *ps & xM_sgn; + *ps = xBias - 1; + *ps |= u; + return s; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xfrac.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xfrac.c new file mode 100644 index 00000000..18dd5828 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xfrac.c @@ -0,0 +1,224 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +/* + All the functions in this file have been created by + Ivano Primi - 12/11/2004 +*/ + +/* + After skipping the first 'skip' bites of the vector 'p', + this function nullifies all the remaining ones. 'k' is + the number of words forming the vector p. + Warning: 'skip' must be positive ! +*/ + +static void +nullify (int skip, unsigned short *p, int k) +{ + int i; + unsigned short mask = 0xffff; + + for (i = 0; skip / 16 > 0; i++, skip -= 16); + if (i < k) + { + /* skip = 0, ..., 15 */ + mask <<= 16 - skip; + p[i] &= mask; + for (i++; i < k; p[i] = 0, i++); + } +} + +static void +canonic_form (xpr *px) +{ + unsigned short *p, u; + short e, i, j, skip; + + p = (unsigned short *) px; + e = (*p & xM_exp); /* biased exponent of x */ + u = (*p & xM_sgn); /* sign of x */ + if (e < xBias - 1) + return; + else + { + unsigned short mask = 0xffff; + + /* e >= xBias - 1 */ + for (i = 1, skip = e + 1 - xBias; skip / 16 > 0; i++, skip -= 16); + if (i <= XDIM) + { + /* skip = 0, ..., 15 */ + mask >>= skip; + if ((p[i] & mask) != mask) + return; + else + { + for (j = i + 1; j <= XDIM && p[j] == 0xffff; j++); + if (j > XDIM) + { + p[i] -= mask; + for (j = i + 1; j <= XDIM; p[j] = 0, j++); + if (!(p[1] & 0x8000)) + { + p[1] = 0x8000; + *p = ++e; + *p |= u; + } + else if ((u)) + *px = xadd (*px, xOne, 1); + else + *px = xadd (*px, xOne, 0); + } + } + } /* end if(i <= XDIM ) */ + } /* end outer else */ +} + +/* + xfrac(x) returns the fractional part of the number x. + xfrac(x) has the same sign as x. +*/ + +xpr +xfrac (xpr x) +{ + unsigned short u, *p; + short e; + int n; + + canonic_form (&x); + p = (unsigned short *) &x; + e = (*p & xM_exp); /* biased exponent of x */ + if (e < xBias) + return x; /* The integer part of x is zero */ + else + { + u = *p & xM_sgn; /* sign of x */ + n = e - xBias + 1; + xlshift (n, p + 1, XDIM); + e = xBias - 1; + /* Now I have to take in account the rule */ + /* of the leading one. */ + while (e > 0 && !(p[1] & xM_sgn)) + { + xlshift (1, p + 1, XDIM); + e -= 1; + } + /* Now p+1 points to the fractionary part of x, */ + /* u is its sign, e is its biased exponent. */ + p[0] = e; + p[0] |= u; + return *(xpr *) p; + } +} + + +/* + xtrunc(x) returns the integer part of the number x. + xtrunc(x) has the same sign as x. +*/ + +xpr +xtrunc (xpr x) +{ + unsigned short *p; + short e; + + canonic_form (&x); + p = (unsigned short *) &x; + e = (*p & xM_exp); /* biased exponent of x */ + if (e < xBias) + return xZero; /* The integer part of x is zero */ + else + { + nullify (e - xBias + 1, p + 1, XDIM); + return *(xpr *) p; + } +} + +xpr +xround (xpr x) +{ + return xtrunc (xadd (x, xRndcorr, x.nmm[0] & xM_sgn)); +} + +xpr +xceil (xpr x) +{ + unsigned short *ps = (unsigned short *) &x; + + if ((*ps & xM_sgn)) + return xtrunc (x); + else + { + xpr y = xfrac (x); + /* y has the same sign as x (see above). */ + + return (xprcmp (&y, &xZero) > 0 ? xadd (xtrunc (x), xOne, 0) : x); + } +} + +xpr +xfloor (xpr x) +{ + unsigned short *ps = (unsigned short *) &x; + + if ((*ps & xM_sgn)) + { + xpr y = xfrac (x); + /* y has the same sign as x (see above). */ + + return (xprcmp (&y, &xZero) < 0 ? xadd (xtrunc (x), xOne, 1) : x); + } + else + return xtrunc (x); +} + +static void +xadd_correction (xpr* px, int k) +{ + short e = (px->nmm[0] & xM_exp) - xBias; + +/* e = (e > 0 ? e : 0); */ + *px = xadd (*px, xpr2 (xFixcorr, e), k); +} + +xpr +xfix (xpr x) +{ + unsigned short *p; + short e; + + xadd_correction (&x, x.nmm[0] & xM_sgn); + p = (unsigned short *) &x; + e = (*p & xM_exp); /* biased exponent of x */ + if (e < xBias) + return xZero; /* The integer part of x is zero */ + else + { + nullify (e - xBias + 1, p + 1, XDIM); + return *(xpr *) p; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xhypb.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xhypb.c new file mode 100644 index 00000000..28dedbe8 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xhypb.c @@ -0,0 +1,82 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xtanh (xpr z) +{ + xpr s, d, f; + int m, k; + + if ((k = x_exp (&z)) > xK_tanh) + { + if (x_neg (&z)) + return xneg (xOne); + else + return xOne; + } + if (k < xK_lin) + return z; + ++k; + if (k > 0) + z = xpr2 (z, -k); + s = xmul (z, z); + f = xZero; + for (d = inttox (m = xMS_hyp); m > 1;) + { + f = xdiv (s, xadd (d, f, 0)); + d = inttox (m -= 2); + } + f = xdiv (z, xadd (d, f, 0)); + for (; k > 0; --k) + f = xdiv (xpr2 (f, 1), xadd (d, xmul (f, f), 0)); + return f; +} + +xpr +xsinh (xpr z) +{ + int k; + + if ((k = x_exp (&z)) < xK_lin) + return z; + else if (k < 0) + { + z = xtanh (xpr2 (z, -1)); + return xdiv (xpr2 (z, 1), xadd (xOne, xmul (z, z), 1)); + } + else + { + z = xexp (z); + return xpr2 (xadd (z, xdiv (xOne, z), 1), -1); + } +} + +xpr +xcosh (xpr z) +{ + if (x_exp (&z) < xK_lin) + return xOne; + z = xexp (z); + return xpr2 (xadd (z, xdiv (xOne, z), 0), -1); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xivhypb.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xivhypb.c new file mode 100644 index 00000000..0ae8b4e7 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xivhypb.c @@ -0,0 +1,64 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xatanh (xpr x) +{ + xpr y = x; + + y.nmm[0] &= xM_exp; /* Now y == abs(x) */ + if ((xsigerr (xprcmp (&y, &xOne) >= 0, XEDOM, "xatanh"))) + return ((x.nmm[0] & xM_sgn) ? xMinf : xPinf); + else + { + y = xdiv (xadd (xOne, x, 0), xadd (xOne, x, 1)); + return xpr2 (xlog (y), -1); + } +} + +xpr +xasinh (xpr x) +{ + xpr y = xmul (x, x); + + y = xsqrt (xadd (xOne, y, 0)); + if ((x.nmm[0] & xM_sgn)) + return xneg (xlog (xadd (y, x, 1))); + else + return xlog (xadd (x, y, 0)); +} + +xpr +xacosh (xpr x) +{ + if ((xsigerr (xprcmp (&x, &xOne) < 0, XEDOM, "xacosh()"))) + return xZero; + else + { + xpr y = xmul (x, x); + + y = xsqrt (xadd (y, xOne, 1)); + return xlog (xadd (x, y, 0)); + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xivtrg.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xivtrg.c new file mode 100644 index 00000000..57eb7a79 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xivtrg.c @@ -0,0 +1,124 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" +#include + +xpr +xatan (xpr z) +{ + xpr s, f; + int k, m; + + if ((k = x_exp (&z)) < xK_lin) + return z; + if (k >= 0) + { + /* k>=0 is equivalent to abs(z) >= 1.0 */ + z = xdiv (xOne, z); + m = 1; + } + else + m = 0; + f = dbltox (atan (xtodbl (z))); + s = xadd (xOne, xmul (z, z), 0); + for (k = 0; k < xItt_div; ++k) + f = xadd (f, xdiv (xadd (z, xtan (f), 1), s), 0); + if (m) + { + if (x_neg (&f)) + return xadd (xneg (xPi2), f, 1); + else + return xadd (xPi2, f, 1); + } + else + return f; +} + +xpr +xasin (xpr z) +{ + xpr u = z; + + u.nmm[0] &= xM_exp; + if ((xsigerr (xprcmp (&u, &xOne) > 0, XEDOM, "xasin()"))) + return ((x_neg (&z)) ? xneg (xPi2) : xPi2); + else + { + if (x_exp (&z) < xK_lin) + return z; + u = xsqrt (xadd (xOne, xmul (z, z), 1)); + if (x_exp (&u) == -xBias) + return ((x_neg (&z)) ? xneg (xPi2) : xPi2); + return xatan (xdiv (z, u)); + } +} + +xpr +xacos (xpr z) +{ + xpr u = z; + + u.nmm[0] &= xM_exp; + if ((xsigerr (xprcmp (&u, &xOne) > 0, XEDOM, "xacos()"))) + return ((x_neg (&z)) ? xPi : xZero); + else + { + if (x_exp (&z) == -xBias) + return xPi2; + u = xsqrt (xadd (xOne, xmul (z, z), 1)); + u = xatan (xdiv (u, z)); + if (x_neg (&z)) + return xadd (xPi, u, 0); + else + return u; + } +} + +/* Kindly added by A.Haumer 2010-04.09 */ + +xpr +xatan2 (xpr y, xpr x) +{ + int rs, is; + + rs = xsgn (&x); + is = xsgn (&y); + if (rs > 0) + return xatan (xdiv (y, x)); + else if (rs < 0) + { + x.nmm[0] ^= xM_sgn; + y.nmm[0] ^= xM_sgn; + if (is >= 0) + return xadd (xPi, xatan (xdiv (y, x)), 0); + else + return xadd (xatan (xdiv (y, x)), xPi, 1); + } + else /* x is zero ! */ + { + if (!xsigerr (is == 0, XEDOM, "xatan2()")) + return (is > 0 ? xPi2 : xneg (xPi2)); + else + return xZero; /* Dummy value :) */ + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xlog.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xlog.c new file mode 100644 index 00000000..222e3c2f --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xlog.c @@ -0,0 +1,87 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include "xpre.h" + +xpr +xlog (xpr z) +{ + xpr f, h; + int k, m; + + if ((xsigerr ((x_neg (&z)) || x_exp (&z) == -xBias, XEDOM, "xlog()"))) + return xMinf; + else if (xprcmp (&z, &xOne) == 0) + return xZero; + else + { + z = xfrexp (z, &m); + z = xmul (z, xSqrt2); + z = xdiv (xadd (z, xOne, 1), xadd (z, xOne, 0)); + h = xpr2 (z, 1); + z = xmul (z, z); + for (f = h, k = 1; x_exp (&h) > -xMax_p;) + { + h = xmul (h, z); + f = xadd (f, xdiv (h, inttox (k += 2)), 0); + } + return xadd (f, xmul (xLn2, dbltox (m - .5)), 0); + } +} + +xpr +xlog2 (xpr z) +{ + xpr f, h; + int k, m; + + if ((xsigerr ((x_neg (&z)) || x_exp (&z) == -xBias, XEDOM, "xlog2()"))) + return xMinf; + else if (xprcmp (&z, &xOne) == 0) + return xZero; + else + { + z = xfrexp (z, &m); + z = xmul (z, xSqrt2); + z = xdiv (xadd (z, xOne, 1), xadd (z, xOne, 0)); + h = xpr2 (z, 1); + z = xmul (z, z); + for (f = h, k = 1; x_exp (&h) > -xMax_p;) + { + h = xmul (h, z); + f = xadd (f, xdiv (h, inttox (k += 2)), 0); + } + return xadd (xmul (f, xLog2_e), dbltox (m - .5), 0); + } +} + +xpr +xlog10 (xpr z) +{ + xpr w = xlog(z); + + if (xprcmp (&w, &xMinf) <= 0) + return xMinf; + else + return xmul (w, xLog10_e); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xmul.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xmul.c new file mode 100644 index 00000000..db127192 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xmul.c @@ -0,0 +1,69 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xmul (xpr s, xpr t) +{ + unsigned short pe[XDIM + 2], *q0, *q1, h; + register unsigned short *pa, *pb, *pc; + unsigned int m, n, p; + short e; + register short k; + + q0 = (unsigned short *) &s; + q1 = (unsigned short *) &t; + e = (*q0 & xM_exp) - xBias; + k = (*q1 & xM_exp) + 1; + if ((xsigerr (e > (short) xM_exp - k, XFPOFLOW, NULL))) + return (((s.nmm[0] & xM_sgn) ^ (t.nmm[0] & xM_sgn)) ? xMinf : xPinf); + if ((e += k) <= 0) + return xZero; + h = (*q0 ^ *q1) & xM_sgn; + for (++q1, k = XDIM, p = n = 0L, pc = pe + XDIM + 1; k > 0; --k) + { + for (pa = q0 + k, pb = q1; pa > q0;) + { + m = *pa--; + m *= *pb++; + n += (m & 0xffffL); + p += (m >> 16); + } + *pc-- = n; + n = p + (n >> 16); + p = 0L; + } + *pc = n; + if (!(*pc & xM_sgn)) + { + --e; + if (e <= 0) + return xZero; + xlshift (1, pc, XDIM + 1); + } + if ((xsigerr (e == (short) xM_exp, XFPOFLOW, NULL))) + return (!h ? xPinf : xMinf); + *pe = e; + *pe |= h; + return *(xpr *) pe; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xneg.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xneg.c new file mode 100644 index 00000000..e1632a19 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xneg.c @@ -0,0 +1,57 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xneg (xpr s) +{ + unsigned short *p = (unsigned short *) &s; + + *p ^= xM_sgn; + return s; +} + +xpr +xabs (xpr s) +{ + unsigned short *p = (unsigned short *) &s; + + *p &= xM_exp; + return s; +} + +int +x_exp (const xpr *ps) +{ + unsigned short *q = (unsigned short *) ps; + + return (*q & xM_exp) - xBias; +} + +int +x_neg (const xpr *ps) +{ + unsigned short *q = (unsigned short *) ps; + + return (*q & xM_sgn); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xprcmp.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xprcmp.c new file mode 100644 index 00000000..25ce5ae8 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xprcmp.c @@ -0,0 +1,195 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +/* + + Modified by Ivano Primi - 11/21/2004 and 03/05/2005 + +*/ + +int +xprcmp (const xpr *pa, const xpr *pb) +{ + register unsigned short e, k, *p, *q, p0, q0; + register int m; + + p = (unsigned short *) pa; + q = (unsigned short *) pb; + for (m = 1; m <= XDIM && p[m] == 0; m++); + if (m > XDIM && (*p & xM_exp) < xM_exp) + /* *pa is actually zero */ + p0 = 0; + else + p0 = *p; + for (m = 1; m <= XDIM && q[m] == 0; m++); + if (m > XDIM && (*q & xM_exp) < xM_exp) + /* *pb is actually zero */ + q0 = 0; + else + q0 = *q; + e = p0 & xM_sgn; + k = q0 & xM_sgn; + if (e && !k) + return -1; + else if (!e && k) + return 1; + else /* *pa and *pb have the same sign */ + { + m = (e) ? -1 : 1; + e = p0 & xM_exp; + k = q0 & xM_exp; + if (e > k) + return m; + else if (e < k) + return -m; + else + { + for (e = 0; *(++p) == *(++q) && e < XDIM; ++e); + if (e < XDIM) + return (*p > *q ? m : -m); + else + return 0; + } + } +} + +int +xeq (xpr x1, xpr x2) +{ + return (xprcmp (&x1, &x2) == 0); +} + +int +xneq (xpr x1, xpr x2) +{ + return (xprcmp (&x1, &x2) != 0); +} + +int +xgt (xpr x1, xpr x2) +{ + return (xprcmp (&x1, &x2) > 0); +} + +int +xge (xpr x1, xpr x2) +{ + return (xprcmp (&x1, &x2) >= 0); +} + +int +xlt (xpr x1, xpr x2) +{ + return (xprcmp (&x1, &x2) < 0); +} + +int +xle (xpr x1, xpr x2) +{ + return (xprcmp (&x1, &x2) <= 0); +} + +/* + xisNaN (&x) returns 1 if and only if x is not a valid number +*/ + +int +xisNaN (const xpr *u) +{ + register unsigned short* p = (unsigned short *) u; + + if ((*p)) + return 0; + else + { + register int i; + + for (i=1; i <= XDIM && p[i] == 0x0; i++); + return (i <= XDIM ? 1 : 0); + } +} + +int +xis0 (const xpr *u) +{ + register unsigned short* p = (unsigned short *) u; + register int m; + + for (m = 1; m <= XDIM && p[m] == 0; m++); + return (m > XDIM && (*p & xM_exp) < xM_exp ? 1 : 0); +} + +int +xnot0 (const xpr *u) +{ + register unsigned short* p = (unsigned short *) u; + register int m; + + for (m = 1; m <= XDIM && p[m] == 0; m++); + return (m > XDIM && (*p & xM_exp) < xM_exp ? 0 : 1); +} + +int +xsgn (const xpr *u) +{ + register unsigned short* p = (unsigned short *) u; + register int m; + + for (m = 1; m <= XDIM && p[m] == 0; m++); + if ((m > XDIM && (*p & xM_exp) < xM_exp) || !*p) + return 0; + else + return ((*p & xM_sgn) ? -1 : 1); +} + +int +xisPinf (const xpr *u) +{ + return (*u->nmm == xM_exp ? 1 : 0); +} + +int +xisMinf (const xpr *u) +{ + return (*u->nmm == (xM_exp | xM_sgn) ? 1 : 0); +} + +int +xisordnumb (const xpr *u) +{ + int isNaN, isfinite; + register unsigned short* p = (unsigned short *) u; + + if ((*p)) + isNaN = 0; + else + { + register int i; + + for (i=1; i <= XDIM && p[i] == 0x0; i++); + isNaN = i <= XDIM; + } + isfinite = (*p & xM_exp) < xM_exp; + return (!isNaN && (isfinite) ? 1 : 0); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xpre.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xpre.h new file mode 100644 index 00000000..1c8fdb8e --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xpre.h @@ -0,0 +1,194 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#ifndef _XPRE_H_ +#define _XPRE_H_ + +#include "hpaconf.h" + +/* This macro has been added by Ivano Primi - 12/21/2004 */ +#define XMAX_10EX 4931 + +/* This macro has been added by Ivano Primi - 05/10/2004 */ +/* It is used in the file xchcof.c */ +#define XMAX_DEGREE 50 + +/* Dealing with errors. Added by Ivano Primi - 01/04/2005 */ +#ifndef XERR_IGN + +#define XENONE 0 +#define XEDIV 1 +#define XEDOM 2 +#define XEBADEXP 3 +#define XFPOFLOW 4 /* Floating point overflow */ + +#define XNERR 4 +#define XEINV 5 /* == XNERR + 1 */ + +#endif /* !XERR_IGN */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct + { + unsigned short nmm[XDIM + 1]; + } xpr; + + extern const unsigned short xM_sgn, xM_exp; + extern const short xBias; + extern const int xItt_div, xK_tanh; + extern const int xMS_exp, xMS_trg, xMS_hyp; + extern const short xMax_p, xK_lin; + extern const short xD_bias, xD_max, xD_lex; + extern const short xF_bias, xF_max, xF_lex; + extern const xpr xZero, xOne, xTwo, xTen; + extern const xpr xPinf, xMinf, xNaN; + extern const xpr xPi, xPi2, xPi4, xEe, xSqrt2; + extern const xpr xLn2, xLn10, xLog2_e, xLog2_10, xLog10_e; + extern const xpr xRndcorr, xFixcorr; + extern const xpr xVSV, xVGV, xEmax, xEmin, xE2min, xE2max, HPA_MIN, HPA_MAX; + + xpr xadd (xpr a, xpr b, int k); + xpr xmul (xpr s, xpr t); + xpr xdiv (xpr s, xpr t); +/* strtox() has been added by Ivano Primi - 12/21/2004 */ + xpr strtox (const char *q, char **endptr); + xpr atox (const char *s); + xpr dbltox (double y); +/* flttox() has been added by Ivano Primi - 11/22/2004 */ + xpr flttox (float y); + xpr inttox (long n); + xpr uinttox (unsigned long n); + int xprcmp (const xpr *p, const xpr *q); + int xeq (xpr x1, xpr x2); + int xneq (xpr x1, xpr x2); + int xgt (xpr x1, xpr x2); + int xge (xpr x1, xpr x2); + int xlt (xpr x1, xpr x2); + int xle (xpr x1, xpr x2); + int xisNaN (const xpr *u); + int xisPinf (const xpr *u); + int xisMinf (const xpr *u); + int xisordnumb (const xpr *u); + int xis0 (const xpr *u); + int xnot0 (const xpr *u); + int xsgn (const xpr *u); + int x_neg (const xpr *p); + int x_exp (const xpr *p); + xpr xsfmod (xpr t, int *p); + xpr xpwr (xpr s, int n); + xpr xpr2 (xpr s, int n); + xpr xneg (xpr s); + xpr xabs (xpr s); + xpr xfrexp (xpr s, int *p); +/* xfmod() has been modified by Ivano Primi - 01/30/2005 */ + xpr xfmod (xpr s, xpr t, xpr *q); +/* xfrac() and xtrunc() have been added by Ivano Primi - 12/11/2004 */ + xpr xfrac (xpr x); + xpr xtrunc (xpr x); +/* xround(), xceil() and xfloor() have been added by Ivano Primi - 01/05/2004 */ + xpr xround (xpr x); + xpr xceil (xpr x); + xpr xfloor (xpr x); +/* xfix() has been added by Ivano Primi - 05/01/2004 */ + xpr xfix (xpr x); + + double xtodbl (xpr s); +/* xtoflt() has been added by Ivano Primi - 11/22/2004 */ + float xtoflt (xpr s); + xpr xtan (xpr x); + xpr xsin (xpr x); + xpr xcos (xpr x); + xpr xatan (xpr a); + xpr xasin (xpr a); + xpr xacos (xpr a); + xpr xatan2 (xpr y, xpr x); + xpr xsqrt (xpr u); + xpr xexp (xpr u); + xpr xexp2 (xpr u); + xpr xexp10 (xpr u); + xpr xlog (xpr u); + xpr xlog2 (xpr u); + xpr xlog10 (xpr u); + xpr xtanh (xpr v); + xpr xsinh (xpr v); + xpr xcosh (xpr v); + xpr xatanh (xpr v); + xpr xasinh (xpr v); + xpr xacosh (xpr v); + xpr xpow (xpr x, xpr y); + + xpr* xchcof (int m, xpr (*xfunc) (xpr)); + xpr xevtch (xpr z, xpr *a, int m); +/* The following 4 functions have been added */ +/* by Ivano Primi 11/29/2004 */ + +#include + + void xpr_print (FILE * stream, xpr u, int sc_not, int sign, int lim); + char *xpr_asprint (xpr u, int sc_not, int sign, int lim); + char *xtoa (xpr u, int lim); + void xbprint (FILE * stream, xpr u); + void xprxpr (xpr u, int m); + void xprint (FILE * stream, xpr u); + void xlshift (int i, unsigned short *p, int k); + void xrshift (int i, unsigned short *p, int k); + +/* The next special output functions have been added by Ivano Primi, */ +/* 01/06/2005. */ + +#define XOUT_FIXED 0 +#define XOUT_SCIENTIFIC 1 + +#define XDEF_LIM 6 + + typedef struct + { + short fmt, notat, sf, mfwd, lim; + signed char padding, ldel, rdel; + } xoutflags; + +/* Special output functions */ +/* Remark: xfout(), xout() and xsout() actually ignore the fields ofs.fmt, */ +/* ofs.ldel and ofs.rdel . */ +/* These fields are only used by cxfout(),cxout() and cxsout()(see cxpre.h).*/ + int xfout (FILE * pf, xoutflags ofs, xpr x); + int xout (xoutflags ofs, xpr x); + unsigned long + xsout (char *s, unsigned long n, xoutflags ofs, xpr x); + +#ifndef XERR_IGN + int xsigerr (int errcond, int errcode, const char *where); +#else +#define xsigerr(errcond, errcode, where) 0 +#endif + +#define xsum(a, b) xadd (a, b, 0) +#define xsub(a, b) xadd (a, b, 1) + +#ifdef __cplusplus +} +#endif +#endif /* _XPRE_H_ */ diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xpwr.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xpwr.c new file mode 100644 index 00000000..5b9c260d --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xpwr.c @@ -0,0 +1,92 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +xpr +xpwr (xpr s, int n) +{ + xpr t; + unsigned k, m; + + t = xOne; + if (n < 0) + { + m = -n; + if ((xsigerr (xprcmp (&s, &xZero) == 0, XEBADEXP, "xpwr()"))) + return xZero; + s = xdiv (xOne, s); + } + else + m = n; + if ((m)) + { + k = 1; + while (1) + { + if ((k & m)) + t = xmul (s, t); + if ((k <<= 1) <= m) + s = xmul (s, s); + else + break; + } + } + else + xsigerr (xprcmp (&s, &xZero) == 0, XEBADEXP, "xpwr()"); + return t; +} + +xpr +xpr2 (xpr s, int m) +{ + unsigned short *p = (unsigned short *) &s; + long e; + + for (e = 1; e <= XDIM && p[e] == 0; e++); + if (e <= XDIM) + { + e = *p & xM_exp; /* biased exponent */ + if (e + m < 0) + return xZero; + else if ((xsigerr (e + m >= xM_exp, XFPOFLOW, NULL))) + return ((s.nmm[0] & xM_sgn) ? xMinf : xPinf); + else + { + *p += m; + return s; + } + } + else /* s is zero or +-Inf */ + return s; +} + +xpr +xpow (xpr x, xpr y) +{ + if (xsigerr ((xis0(&x)) || x_exp (&x) == -xBias, XEDOM, "xpow()")) + return xZero; + else if (x_neg(&x)) + return xexp2(xmul(xlog2(xneg(x)), y)); + else + return xexp2 (xmul (xlog2 (x), y)); +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xsigerr.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xsigerr.c new file mode 100644 index 00000000..398c1a47 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xsigerr.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include +#include "xpre.h" + +#ifdef XERR_EXIT +#define XERR_WARN +#endif /* XERR_EXIT ==> XERR_WARN */ + +/* The source code in this file is compiled only when */ +/* the macro XERR_IGN is not defined. */ +#ifndef XERR_IGN + +#ifdef XERR_WARN + +static const char *errmsg[] = { + "No error", + "Division by zero", + "Out of domain", + "Bad exponent", + "Floating point overflow", + "Invalid error code" +}; + +#else + +int xErrNo = 0; + +#endif /* XERR_WARN */ + +/* + Remarks: + + errcode must come from the evaluation of an error condition. + errcode, which should describe the type of the error, + should always be one between XEDIV, XEDOM, XEBADEXP and XFPOFLOW. +*/ + +int +xsigerr (int errcond, int errcode, const char *where) +{ + if (!errcond) + errcode = 0; + if (errcode < 0 || errcode > XNERR) + errcode = XEINV; +#ifdef XERR_WARN + if ((errcode)) + { + if ((where)) + fprintf (stderr, "*** %s: %s\n", where, errmsg[errcode]); + else + fprintf (stderr, "*** %s\n", errmsg[errcode]); +#ifdef XERR_EXIT + exit (EXIT_FAILURE); +#else + return errcode; +#endif + } + return 0; +#else /* DEFAULT */ + if ((errcode)) + xErrNo = errcode; + return errcode; +#endif +} + +#endif /* XERR_IGN */ diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xsqrt.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xsqrt.c new file mode 100644 index 00000000..a14f1e73 --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xsqrt.c @@ -0,0 +1,54 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" +#include +#include + +xpr +xsqrt (xpr z) +{ + xpr s, h; + short m, e; + unsigned short *pc; + + if ((xsigerr ((x_neg (&z)), XEDOM, "xsqrt()"))) + return xZero; + else + { + pc = (unsigned short *) &z; + if (*pc == 0) + return xZero; + e = *pc - xBias; + *pc = xBias + (e % 2); + e /= 2; + s = dbltox (sqrt (xtodbl (z))); + for (m = 0; m < xItt_div; ++m) + { + h = xdiv (xadd (z, xmul (s, s), 1), xpr2 (s, 1)); + s = xadd (s, h, 0); + } + pc = (unsigned short *) &s; + *pc += e; + return s; + } +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtodbl.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtodbl.c new file mode 100644 index 00000000..3f5f295e --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtodbl.c @@ -0,0 +1,193 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include "xpre.h" + +#define ABS(n) ((n) >= 0 ? (n) : -(n)) + +double +xtodbl (xpr s) +{ + unsigned short pe[4], *pc, u; + short i, e; + + pc = (unsigned short *) &s; + u = *pc & xM_sgn; + e = (*pc & xM_exp) - xD_bias; + if (e >= xD_max) + return (!u ? DBL_MAX : -DBL_MAX); + if (e <= 0) + return 0.; + for (i = 0; i < 4; pe[i] = *++pc, i++); + pe[0] &= xM_exp; + xrshift (xD_lex - 1, pe, 4); + pe[0] |= (e << (16 - xD_lex)); + pe[0] |= u; + /* Change made by Ivano Primi - 11/19/2004 */ + if (XLITTLE_ENDIAN) + { + u = pe[3]; + pe[3] = pe[0]; + pe[0] = u; + u = pe[2]; + pe[2] = pe[1]; + pe[1] = u; + } + return *(double *) pe; +} + +xpr +dbltox (double y) +{ + unsigned short pe[XDIM + 1], *pc, u; + short i, e; + + if (y < DBL_MIN && y > -DBL_MIN) + return xZero; + pc = (unsigned short *) &y; + /* Change made by Ivano Primi - 11/19/2004 */ + if (XLITTLE_ENDIAN) + pc += 3; + u = *pc & xM_sgn; + e = xD_bias + ((*pc & xM_exp) >> (16 - xD_lex)); + /* Change made by Ivano Primi - 11/19/2004 */ + if (XLITTLE_ENDIAN) + for (i = 1; i < 5; pe[i] = *pc--, i++); + else + for (i = 1; i < 5; pe[i] = *pc++, i++); + while (i <= XDIM) + pe[i++] = 0; + pc = pe + 1; + xlshift (xD_lex - 1, pc, 4); + *pc |= xM_sgn; + *pe = e; + *pe |= u; + return *(xpr *) pe; +} + +/* Changed by Ivano Primi - 11/19/2004 */ + +xpr +inttox (long n) +{ + unsigned short pe[XDIM + 1], *pc; + short e; + unsigned long k, h; + + k = ABS (n); + pc = (unsigned short *) &k; + for (e = 0; e <= XDIM; pe[e++] = 0); + if (n == 0) + return *(xpr *) pe; + + if (XULONG_BITSIZE == 64) + { + if (XLITTLE_ENDIAN) + { + pe[1] = *(pc + 3); + pe[2] = *(pc + 2); + pe[3] = *(pc + 1); + pe[4] = *pc; + } + else + { + pe[1] = *pc; + pe[2] = *(pc + 1); + pe[3] = *(pc + 2); + pe[4] = *(pc + 3); + } + } + else + { + if (XLITTLE_ENDIAN) + { + pe[1] = *(pc + 1); + pe[2] = *pc; + } + else + { + pe[1] = *pc; + pe[2] = *(pc + 1); + } + } + + for (e = 0, h = 1; h <= k && e < (XULONG_BITSIZE-1); h <<= 1, ++e); + if (h <= k) + e += 1; + *pe = xBias + e - 1; + if (n < 0) + *pe |= xM_sgn; + xlshift (XULONG_BITSIZE - e, pe + 1, XDIM); + return *(xpr *) pe; +} + +xpr +uinttox(unsigned long n) +{ + unsigned short pe[XDIM + 1], *pc; + short e; + unsigned long h; + + pc = (unsigned short *)&n; + for (e = 0; e <= XDIM; pe[e++] = 0); + if (n == 0) + return *(xpr *)pe; + + if (XULONG_BITSIZE == 64) + { + if (XLITTLE_ENDIAN) + { + pe[1] = *(pc + 3); + pe[2] = *(pc + 2); + pe[3] = *(pc + 1); + pe[4] = *pc; + } + else + { + pe[1] = *pc; + pe[2] = *(pc + 1); + pe[3] = *(pc + 2); + pe[4] = *(pc + 3); + } + } + else + { + if (XLITTLE_ENDIAN) + { + pe[1] = *(pc + 1); + pe[2] = *pc; + } + else + { + pe[1] = *pc; + pe[2] = *(pc + 1); + } + } + + for (e = 0, h = 1; h <= n && e < (XULONG_BITSIZE-1); h <<= 1, ++e); + if (h <= n) + e += 1; + *pe = xBias + e - 1; + xlshift (XULONG_BITSIZE - e, pe + 1, XDIM); + return *(xpr *) pe; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtoflt.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtoflt.c new file mode 100644 index 00000000..1a9dd34b --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtoflt.c @@ -0,0 +1,126 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include +#include +#include "xpre.h" + +/* + An extended floating point number is represented as a combination of the + following elements: + + sign bit(s): 0 -> positive, 1 -> negative ; + exponent(e): 15-bit biased integer (bias=16383) ; + mantissa(m): 7 (or more) words of 16 bit length with the + leading 1 explicitly represented . + + Thus f = (-1)^s*2^[e-16383] *m , with 1 <= m < 2 . + + This format supports a dynamic range of: + + 2^16384 > f > 2^[-16383] or + + 1.19*10^4932 > f > 1.68*10^-[4932]. + + Special values of the exponent are: + + all ones -> infinity (floating point overflow) + all zeros -> number = zero. + + Underflow in operations is handled by a flush to zero. Thus, a number with + the exponent zero and nonzero mantissa is invalid (not-a-number). + +*/ + +float +xtoflt (xpr s) +{ + unsigned short pe[2], *pc, u; + short i, e; + + pc = (unsigned short *) &s; + u = *pc & xM_sgn; + e = (*pc & xM_exp) - xF_bias; + /* + u is the sign of the number s. + e == (exponent of s) + 127 + */ + if (e >= xF_max) + return (!u ? FLT_MAX : -FLT_MAX); + if (e <= 0) + return 0.; + for (i = 0; i < 2; pe[i] = *++pc, i++); + + /* In the IEEE 754 Standard the leading 1 */ + /* is not represented. */ + pe[0] &= xM_exp; + /* Now in pe[0],pe[1] we have 31 bits of mantissa. */ + /* But only the first 23 ones must be put in the */ + /* final float number. */ + xrshift (xF_lex - 1, pe, 2); + /* We have just loaded the mantissa and now we */ + /* are going to load exponent and sign. */ + pe[0] |= (e << (16 - xF_lex)); + pe[0] |= u; + if (XLITTLE_ENDIAN) + { + u = pe[0]; + pe[0] = pe[1]; + pe[1] = u; + } + return *(float *) pe; +} + +xpr +flttox (float y) +{ + unsigned short pe[XDIM + 1], *pc, u; + short i, e; + + if (y < FLT_MIN && y > -FLT_MIN) + return xZero; + pc = (unsigned short *) &y; + if (XLITTLE_ENDIAN) + pc += 1; + u = *pc & xM_sgn; + e = xF_bias + ((*pc & xM_exp) >> (16 - xF_lex)); + /* + Now u is the sign of y and e is the + biased exponent (exponent + bias). + */ + if (XLITTLE_ENDIAN) + for (i = 1; i < 3; pe[i] = *pc--, i++); + else + for (i = 1; i < 3; pe[i] = *pc++, i++); + while (i <= XDIM) + pe[i++] = 0; + pc = pe + 1; + xlshift (xF_lex - 1, pc, 2); + *pc |= xM_sgn; + /* We have just put in pe[1],pe[2] the whole */ + /* mantissa of y with a leading 1. */ + /* Now we have only to put exponent and sign */ + /* in pe[0]. */ + *pe = e; + *pe |= u; + return *(xpr *) pe; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtrig.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtrig.c new file mode 100644 index 00000000..ac0d4e0d --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/eel2/numericSys/HPFloat/xtrig.c @@ -0,0 +1,167 @@ +/* + Copyright (C) 2000 Daniel A. Atkinson + Copyright (C) 2004 Ivano Primi + + This file is part of the HPA Library. + + The HPA Library 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. + + The HPA Library 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 the HPA Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#include "xpre.h" + +/* + renamed ctan to c_tan, suggested on 2010-04-09 by A.Haumer +*/ +static xpr c_tan (xpr u); +static xpr rred (xpr u, int i, int *p); + +/* Added by Ivano Primi - 01/30/2005 */ + +static int +xodd (xpr x) +{ + unsigned short *p = (unsigned short *) &x; + short e, i; + + e = (*p & xM_exp) - xBias; /* exponent of x */ + if (e < 0) + return 0; + else + { + for (i = 1; e / 16 > 0; i++, e -= 16); + /* Now e = 0, ..., 15 */ + return (i <= XDIM ? p[i] & 0x8000 >> e : 0); + } +} + +xpr +xtan (xpr z) +{ + int k, m; + + z = rred (z, 't', &k); + if ((xsigerr (xprcmp (&z, &xPi2) >= 0, XEDOM, "xtan()"))) + return (!k ? xPinf : xMinf); + else + { + if (xprcmp (&z, &xPi4) == 1) + { + m = 1; + z = xadd (xPi2, z, 1); + } + else + m = 0; + if ((k)) + z = xneg (c_tan (z)); + else + z = c_tan (z); + if (m) + return xdiv (xOne, z); + else + return z; + } +} + +xpr +xcos (xpr z) +{ + int k; + + z = rred (z, 'c', &k); + if (x_exp (&z) < xK_lin) + { + if ((k)) + return xneg (xOne); + else + return xOne; + } + z = c_tan (xpr2 (z, -1)); + z = xmul (z, z); + z = xdiv (xadd (xOne, z, 1), xadd (xOne, z, 0)); + if ((k)) + return xneg (z); + else + return z; +} + +xpr +xsin (xpr z) +{ + int k; + + z = rred (z, 's', &k); + if (x_exp (&z) >= xK_lin) + { + z = c_tan (xpr2 (z, -1)); + z = xdiv (xpr2 (z, 1), xadd (xOne, xmul (z, z), 0)); + } + if ((k)) + return xneg (z); + else + return z; +} + +static xpr +c_tan (xpr z) +{ + xpr s, f, d; + int m; + unsigned short k; + + if (x_exp (&z) < xK_lin) + return z; + s = xneg (xmul (z, z)); + for (k = 1; k <= XDIM && s.nmm[k] == 0; k++); + if ((xsigerr (s.nmm[0] == 0xffff && k > XDIM, XFPOFLOW, NULL))) + return xZero; + else + { + f = xZero; + for (d = inttox (m = xMS_trg); m > 1;) + { + f = xdiv (s, xadd (d, f, 0)); + d = inttox (m -= 2); + } + return xdiv (z, xadd (d, f, 0)); + } +} + +static xpr +rred (xpr z, int kf, int *ps) +{ + xpr is, q; + + if (x_neg (&z)) + { + z = xneg (z); + is = xOne; + } + else + is = xZero; + z = xfmod (z, xPi, &q); + if (kf == 't') + q = is; + else if (kf == 's') + q = xadd (q, is, 0); + if (xprcmp (&z, &xPi2) == 1) + { + z = xadd (xPi, z, 1); + if (kf == 'c' || kf == 't') + q = xadd (q, xOne, 0); + } + *ps = (xodd (q)) ? 1 : 0; + return z; +} diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/info.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/info.h new file mode 100644 index 00000000..8fbc2e8d --- /dev/null +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/info.h @@ -0,0 +1,10 @@ +static const unsigned int prec_mtxStrides[2049] = { 115, 159, 127, 106, 91, 84, 60, 50, 35, 37, 39, 38, 43, 41, 43, 37, 29, 39, 34, 39, 36, 44, 31, 35, 26, 33, 28, 33, 32, 30, 24, 22, 18, 21, 23, 31, 25, 29, 29, 25, 19, 26, 22, 33, 34, 34, 33, 30, 32, 25, 27, 30, 37, 33, 29, 35, 33, 30, 23, 30, 44, 36, 43, 41, 42, 38, 36, 35, 43, 48, 49, 48, 51, 50, 45, 43, 52, 57, 58, 57, 54, 52, 53, 56, 59, 62, 58, 67, 62, 59, 56, 61, 64, 67, 63, 70, 67, 65, 65, 69, 71, 70, 68, 70, 64, 60, 57, 61, 66, 66, 67, 68, 64, 61, 61, 65, 72, 70, 72, 76, 69, 69, 68, 68, 73, 75, 75, 81, 78, 74, 67, 76, 80, 81, 80, 85, 77, 80, 75, 80, 82, 80, 78, 78, 78, 76, 73, 78, 79, 76, 76, 75, 71, 73, 73, 76, 73, 72, 69, 69, 70, 71, 71, 69, 71, 66, 69, 65, 66, 73, 69, 66, 67, 63, 62, 63, 61, 63, 65, 61, 57, 59, 54, 59, 61, 61, 58, 58, 59, 53, 60, 62, 61, 63, 62, 68, 70, 70, 69, 70, 66, 64, 61, 59, 60, 59, 62, 68, 66, 61, 64, 67, 68, 65, 69, 72, 70, 67, 66, 68, 74, 74, 75, 72, 69, 67, 69, 74, 74, 72, 76, 75, 76, 76, 74, 79, 75, 78, 81, 78, 75, 78, 80, 82, 81, 77, 78, 73, 71, 71, 71, 73, 72, 72, 74, 73, 72, 72, 69, 72, 70, 70, 68, 67, 69, 69, 66, 65, 66, 65, 66, 65, 67, 67, 63, 63, 62, 61, 63, 62, 64, 62, 61, 62, 61, 58, 61, 62, 64, 63, 60, 60, 60, 58, 57, 60, 57, 57, 53, 51, 51, 51, 53, 57, 57, 57, 53, 54, 56, 54, 56, 55, 55, 57, 55, 51, 53, 51, 53, 53, 52, 51, 46, 43, 46, 43, 47, 47, 48, 47, 47, 46, 46, 45, 48, 47, 49, 48, 45, 49, 47, 47, 45, 47, 46, 44, 43, 42, 38, 38, 40, 44, 45, 43, 41, 42, 39, 41, 38, 44, 42, 39, 41, 39, 40, 38, 37, 39, 39, 38, 39, 36, 35, 37, 36, 36, 33, 35, 37, 34, 34, 34, 36, 35, 35, 36, 35, 33, 35, 31, 33, 32, 32, 32, 31, 30, 27, 29, 31, 29, 31, 26, 28, 27, 24, 23, 22, 28, 29, 19, 27, 26, 21, 22, 27, 23, 25, 23, 18, 25, 21, 21, 21, 22, 14, 14, 16, 19, 15, 17, 13, 14, 13, 14, 13, 13, 13, 11, 15, 12, 17, 17, 17, 18, 12, 18, 16, 17, 28, 15, 10, 12, 22, 9, 21, 10, 9, 9, 11, 7, 7, 14, 13, 15, 9, 6, 5, 4, 8, 5, 6, 7, 4, 9, 6, 4, 4, 9, 10, 10, 4, 5, 5, 2, 3, 7, 7, 8, 4, 5, 4, 2, 6, 6, 6, 6, 6, 5, 4, 2, 6, 4, 6, 6, 4, 4, 2, 5, 3, 6, 6, 5, 6, 4, 2, 1, 3, 4, 6, 4, 4, 2, 2, 1, 3, 4, 6, 4, 4, 2, 2, 1, 3, 4, 5, 4, 4, 2, 2, 1, 3, 4, 5, 4, 3, 4, 2, 4, 6, 4, 4, 7, 5, 2, 3, 1, 2, 3, 5, 4, 3, 2, 1, 1, 1, 3, 4, 4, 3, 2, 1, 1, 11, 18, 18, 18, 18, 17, 16, 16, 15, 12, 3, 4, 2, 2, 1, 1, 1, 1, 2, 3, 3, 3, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 4, 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 1, 3, 1, 3, 1, 1, 1, 8, 7, 1, 11, 5, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 1, 4, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 4, 1, 2, 2, 1, 1, 11, 10, 1, 1, 2, 11, 11, 2, 7, 3, 5, 3, 1, 3, 1, 2, 2, 1, 1, 1, 1, 5, 1, 4, 2, 1, 5, 1, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 1, 5, 1, 1, 1, 1, 6, 7, 4, 3, 2, 2, 2, 1, 1, 5, 5, 5, 5, 3, 1, 1, 1, 2, 1, 5, 5, 5, 3, 9, 8, 10, 9, 9, 1, 1, 1, 1, 1, 9, 2, 13, 11, 20, 13, 24, 21, 21, 22, 22, 21, 20, 14, 18, 13, 7, 4, 4, 3, 3, 12, 1, 1, 1, 1, 1, 7, 5, 4, 2, 3, 3, 6, 8, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 4, 6, 5, 1, 1, 1, 4, 3, 3, 3, 5, 2, 1, 1, 7, 5, 7, 5, 7, 1, 2, 3, 6, 5, 6, 8, 8, 6, 7, 7, 7, 11, 11, 12, 11, 11, 11, 10, 3, 11, 9, 13, 10, 15, 10, 12, 9, 12, 6, 11, 13, 13, 15, 15, 16, 15, 14, 12, 13, 12, 16, 15, 14, 15, 16, 19, 18, 18, 18, 17, 15, 17, 11, 17, 14, 25, 24, 33, 34, 34, 33, 35, 32, 32, 36, 35, 34, 20, 16, 20, 13, 18, 13, 14, 11, 15, 11, 15, 11, 15, 11, 15, 15, 9, 17, 9, 4, 13, 10, 13, 6, 3, 3, 10, 3, 3, 3, 1, 3, 3, 1, 2, 4, 1, 5, 1, 1, 2, 1, 3, 3, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 2, 2, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 4, 4, 8, 7, 6, 4, 1, 2, 1, 3, 1, 5, 1, 4, 2, 9, 3, 10, 4, 11, 4, 7, 8, 8, 8, 9, 17, 14, 16, 15, 14, 7, 19, 6, 23, 24, 22, 20, 18, 18, 18, 8, 9, 5, 5, 5, 5, 5, 4, 5, 3, 4, 4, 4, 8, 7, 6, 7, 12, 7, 11, 7, 7, 8, 11, 9, 9, 8, 11, 11, 12, 8, 2, 7, 1, 10, 7, 7, 7, 7, 7, 7, 4, 8, 4, 7, 9, 8, 8, 8, 8, 8, 8, 8, 9, 3, 3, 3, 6, 7, 8, 7, 6, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 2, 3, 2, 2, 5, 1, 1, 1, 1, 1, 1, 1, 2, 2, 5, 8, 13, 8, 12, 5, 4, 4, 3, 3, 14, 7, 10, 9, 7, 7, 10, 5, 12, 13, 15, 9, 16, 9, 10, 10, 9, 10, 11, 11, 5, 10, 24, 26, 11, 11, 15, 9, 11, 10, 9, 11, 8, 15, 20, 13, 6, 11, 5, 7, 11, 7, 4, 5, 1, 1, 1, 7, 1, 8, 8, 7, 8, 8, 3, 6, 3, 4, 1, 4, 1, 5, 1, 5, 1, 4, 4, 4, 7, 7, 4, 6, 7, 6, 3, 4, 3, 7, 4, 6, 3, 7, 3, 4, 1, 3, 3, 4, 5, 1, 7, 3, 3, 3, 6, 3, 6, 1, 6, 1, 1, 1, 4, 4, 5, 1, 5, 2, 6, 5, 2, 5, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 5, 5, 7, 4, 4, 7, 7, 1, 7, 3, 4, 1, 4, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 11, 17, 15, 17, 16, 15, 15, 18, 21, 21, 6, 11, 13, 13, 10, 2, 11, 1, 7, 7, 7, 5, 1, 1, 1, 5, 1, 1, 5, 5, 5, 4, 4, 2, 3, 3, 3, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 4, 1, 3, 1, 5, 1, 1, 1, 5, 1, 5, 1, 5, 1, 2, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 15, 1, 14, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 5, 1, 1, 1, 1, 1, 9, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, }; +static const unsigned int prec_mtxElementPos[29708] = { 23, 24, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 57, 86, 88, 90, 93, 95, 96, 97, 99, 102, 103, 104, 105, 106, 108, 112, 114, 117, 118, 129, 135, 137, 139, 166, 167, 169, 170, 204, 205, 211, 218, 219, 222, 223, 228, 229, 230, 231, 232, 233, 234, 238, 678, 679, 680, 681, 682, 2000, 2007, 2008, 2009, 2016, 2017, 2026, 2028, 2029, 2030, 2033, 2034, 2037, 2038, 2039, 2042, 2043, 2067, 2074, 2075, 2077, 2078, 2079, 2080, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2096, 2097, 2098, 2099, 2101, 2102, 2109, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 53, 58, 86, 87, 88, 90, 92, 93, 94, 95, 96, 97, 99, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118, 123, 125, 127, 128, 129, 130, 132, 133, 135, 136, 137, 139, 140, 141, 142, 166, 167, 168, 169, 170, 204, 205, 208, 210, 211, 216, 218, 219, 221, 222, 223, 228, 229, 230, 231, 233, 234, 238, 252, 253, 254, 295, 1921, 1924, 1959, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2008, 2015, 2017, 2019, 2020, 2021, 2024, 2026, 2027, 2029, 2030, 2032, 2034, 2035, 2037, 2038, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2057, 2067, 2068, 2069, 2070, 2072, 2073, 2075, 2076, 2077, 2078, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2098, 2099, 2100, 2101, 2102, 2104, 2106, 2107, 2109, 2110, 2129, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 58, 59, 87, 90, 92, 94, 95, 96, 97, 99, 101, 103, 105, 106, 107, 108, 109, 111, 113, 126, 130, 132, 133, 135, 136, 137, 138, 139, 140, 141, 142, 167, 168, 170, 204, 205, 208, 219, 221, 222, 227, 229, 230, 231, 233, 1998, 1999, 2001, 2008, 2015, 2022, 2024, 2026, 2027, 2029, 2030, 2032, 2033, 2034, 2035, 2037, 2038, 2040, 2041, 2043, 2044, 2046, 2065, 2067, 2068, 2070, 2073, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2099, 2100, 2101, 2102, 2107, 2108, 2109, 2110, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 83, 85, 87, 90, 92, 94, 96, 97, 98, 99, 100, 101, 103, 105, 107, 109, 111, 126, 133, 134, 135, 136, 137, 138, 139, 140, 142, 168, 221, 222, 227, 229, 230, 232, 233, 235, 1999, 2027, 2030, 2031, 2033, 2035, 2038, 2041, 2043, 2044, 2046, 2047, 2065, 2066, 2068, 2070, 2073, 2074, 2075, 2076, 2078, 2079, 2080, 2081, 2083, 2084, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2102, 2103, 2107, 2108, 2110, 2129, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 85, 87, 91, 92, 94, 98, 100, 102, 105, 107, 109, 111, 134, 136, 138, 140, 142, 207, 221, 222, 224, 225, 231, 232, 233, 235, 236, 238, 239, 2030, 2031, 2035, 2044, 2046, 2047, 2066, 2068, 2073, 2074, 2076, 2077, 2078, 2079, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2100, 2101, 2102, 2103, 2108, 2110, 2111, 30, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 86, 94, 100, 102, 105, 106, 107, 108, 115, 119, 138, 140, 142, 206, 207, 209, 218, 219, 221, 222, 224, 225, 228, 229, 231, 232, 233, 235, 236, 239, 247, 250, 2044, 2047, 2069, 2074, 2076, 2077, 2079, 2081, 2082, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2098, 2100, 2101, 2103, 2111, 2125, 2128, 2129, 30, 31, 32, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 52, 53, 115, 120, 140, 204, 207, 209, 210, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 232, 233, 235, 236, 245, 251, 2077, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2090, 2091, 2092, 2093, 2094, 2098, 2099, 2101, 2103, 2129, 31, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 54, 55, 56, 115, 204, 207, 209, 210, 218, 219, 221, 222, 224, 225, 228, 229, 230, 232, 233, 235, 236, 2083, 2085, 2086, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 33, 34, 35, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 51, 53, 125, 127, 207, 209, 210, 219, 221, 222, 229, 230, 232, 233, 235, 2084, 2085, 2087, 2089, 2090, 2092, 33, 35, 36, 37, 38, 39, 40, 42, 44, 45, 46, 47, 48, 49, 50, 51, 125, 207, 210, 221, 222, 227, 229, 230, 232, 233, 234, 235, 2082, 2083, 2085, 2086, 2087, 2088, 2090, 2091, 2093, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 50, 51, 125, 126, 207, 224, 225, 227, 231, 232, 233, 234, 235, 236, 238, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2091, 2092, 2094, 34, 36, 38, 39, 40, 41, 42, 43, 45, 46, 48, 50, 51, 52, 53, 107, 126, 221, 224, 225, 231, 232, 233, 235, 236, 238, 2081, 2083, 2084, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2094, 2095, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 50, 51, 52, 53, 54, 206, 209, 221, 224, 225, 231, 232, 233, 235, 236, 238, 239, 2076, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2089, 2090, 2091, 2092, 2093, 2095, 2100, 35, 37, 38, 39, 40, 41, 42, 44, 46, 51, 52, 53, 54, 55, 206, 207, 209, 210, 221, 224, 225, 228, 229, 231, 232, 233, 235, 236, 239, 2082, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2129, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 52, 53, 54, 55, 56, 62, 63, 207, 209, 210, 221, 222, 224, 225, 228, 229, 231, 232, 233, 235, 236, 2082, 2084, 2085, 2086, 2087, 2088, 2090, 2091, 2093, 2094, 34, 36, 38, 40, 41, 42, 43, 44, 45, 47, 53, 54, 55, 56, 57, 63, 207, 209, 210, 221, 222, 224, 225, 229, 230, 231, 232, 233, 234, 235, 2085, 2086, 2088, 2089, 2090, 2091, 2094, 35, 37, 38, 39, 41, 42, 43, 45, 47, 53, 54, 55, 56, 57, 58, 207, 209, 210, 212, 221, 222, 227, 229, 230, 232, 234, 235, 2087, 2089, 35, 36, 37, 38, 39, 40, 42, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 57, 58, 59, 64, 65, 66, 125, 207, 210, 212, 224, 227, 231, 232, 234, 235, 2085, 2086, 2088, 2090, 2091, 36, 37, 38, 40, 41, 42, 43, 44, 46, 49, 50, 57, 58, 59, 60, 65, 212, 224, 225, 227, 231, 232, 233, 234, 235, 236, 238, 2083, 2085, 2086, 2088, 2089, 2091, 2092, 34, 36, 38, 39, 40, 41, 42, 43, 45, 50, 51, 52, 58, 59, 60, 66, 67, 68, 209, 212, 221, 224, 225, 231, 232, 233, 235, 236, 238, 239, 2083, 2084, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 53, 59, 60, 61, 209, 210, 221, 224, 225, 231, 232, 233, 235, 236, 238, 239, 2083, 2084, 2085, 2086, 2087, 2089, 2090, 2092, 2093, 35, 37, 38, 39, 40, 41, 42, 44, 46, 52, 53, 54, 60, 61, 62, 65, 68, 69, 70, 206, 209, 210, 221, 224, 225, 228, 229, 231, 232, 233, 235, 236, 238, 239, 2082, 2084, 2085, 2087, 2088, 2089, 2090, 2092, 2093, 2129, 37, 38, 39, 40, 41, 42, 43, 44, 62, 63, 65, 70, 207, 209, 210, 212, 221, 222, 224, 225, 229, 231, 232, 234, 235, 2085, 2087, 2088, 2090, 2091, 2093, 36, 38, 40, 41, 43, 45, 54, 55, 56, 61, 62, 63, 64, 65, 70, 71, 72, 207, 209, 210, 212, 221, 222, 224, 229, 230, 231, 232, 234, 235, 2085, 2086, 2088, 2090, 2091, 35, 37, 38, 39, 41, 42, 43, 45, 57, 61, 63, 64, 65, 207, 209, 210, 212, 222, 224, 227, 229, 230, 231, 232, 234, 235, 35, 37, 38, 39, 40, 42, 56, 57, 62, 63, 64, 65, 66, 67, 72, 73, 74, 125, 207, 210, 212, 224, 227, 231, 232, 234, 235, 237, 238, 2085, 2086, 2088, 2090, 36, 38, 40, 41, 42, 43, 62, 64, 65, 66, 67, 68, 212, 224, 225, 231, 232, 233, 234, 235, 237, 238, 2083, 2085, 2086, 2088, 2089, 2091, 36, 38, 39, 40, 41, 42, 43, 65, 66, 67, 68, 69, 209, 212, 221, 224, 225, 231, 232, 233, 234, 235, 237, 238, 239, 2083, 2084, 2086, 2087, 2088, 2089, 2091, 2092, 35, 37, 38, 39, 41, 42, 43, 44, 66, 67, 68, 69, 70, 209, 210, 221, 224, 225, 231, 232, 233, 235, 236, 238, 239, 2084, 2086, 2087, 2089, 2090, 2092, 2093, 37, 38, 39, 40, 42, 44, 68, 69, 70, 206, 209, 210, 221, 224, 225, 229, 231, 232, 234, 235, 238, 239, 2084, 2085, 2087, 2088, 2089, 2090, 2092, 2093, 37, 38, 39, 40, 41, 42, 44, 70, 209, 210, 212, 221, 224, 229, 231, 232, 234, 235, 2085, 2087, 2088, 2090, 2091, 2093, 38, 40, 41, 43, 45, 71, 207, 209, 210, 212, 221, 222, 224, 227, 229, 230, 231, 232, 234, 235, 2086, 2088, 37, 38, 39, 41, 42, 43, 72, 207, 209, 210, 212, 224, 227, 231, 232, 234, 235, 237, 37, 39, 40, 42, 72, 73, 74, 125, 207, 209, 210, 212, 224, 227, 231, 232, 234, 235, 237, 238, 2088, 36, 38, 40, 41, 43, 73, 74, 75, 212, 224, 225, 231, 232, 233, 234, 235, 237, 238, 2083, 2086, 2088, 2089, 2091, 36, 38, 39, 40, 41, 42, 43, 74, 75, 76, 209, 210, 212, 221, 224, 225, 231, 232, 233, 234, 235, 237, 238, 239, 2083, 2084, 2086, 2087, 2089, 2091, 2092, 37, 38, 39, 41, 42, 75, 76, 77, 209, 210, 221, 224, 231, 232, 233, 234, 235, 238, 239, 2084, 2086, 2087, 2089, 2090, 2092, 37, 39, 40, 42, 44, 76, 77, 78, 209, 210, 212, 221, 224, 229, 231, 232, 234, 235, 238, 239, 242, 2084, 2085, 2087, 2088, 2089, 2090, 2092, 2093, 37, 39, 40, 41, 42, 44, 69, 70, 71, 77, 78, 79, 85, 86, 87, 209, 210, 212, 221, 224, 229, 231, 232, 234, 235, 2085, 2087, 2088, 2090, 38, 40, 41, 43, 70, 71, 72, 78, 79, 80, 86, 87, 88, 89, 207, 209, 210, 212, 224, 227, 229, 231, 232, 234, 235, 38, 39, 41, 42, 80, 81, 87, 88, 207, 209, 210, 212, 224, 227, 231, 232, 234, 235, 237, 39, 40, 42, 71, 72, 73, 74, 75, 80, 81, 82, 88, 89, 90, 91, 207, 209, 212, 224, 227, 231, 232, 234, 235, 237, 238, 36, 38, 40, 41, 43, 82, 90, 91, 209, 212, 224, 231, 232, 233, 234, 235, 237, 238, 2086, 2088, 2089, 2091, 36, 38, 39, 40, 41, 73, 74, 75, 76, 83, 89, 90, 91, 92, 93, 209, 210, 212, 224, 231, 232, 233, 234, 235, 237, 238, 239, 241, 2084, 2086, 2087, 2089, 2092, 38, 39, 41, 42, 75, 76, 77, 78, 82, 83, 84, 85, 86, 90, 91, 92, 93, 94, 209, 210, 221, 224, 231, 232, 234, 235, 238, 239, 2084, 2086, 2087, 2089, 2090, 2092, 37, 39, 40, 42, 44, 75, 76, 77, 78, 83, 84, 85, 86, 87, 92, 93, 94, 115, 209, 212, 221, 224, 229, 231, 232, 234, 235, 238, 239, 242, 2084, 2085, 2087, 2090, 39, 40, 41, 42, 77, 78, 79, 80, 84, 85, 86, 87, 88, 92, 93, 94, 95, 96, 209, 210, 212, 221, 224, 227, 229, 231, 232, 234, 235, 2085, 2087, 2088, 2090, 38, 40, 41, 78, 79, 80, 85, 86, 87, 88, 89, 93, 94, 95, 96, 97, 207, 209, 210, 212, 214, 224, 227, 229, 231, 232, 233, 234, 235, 237, 38, 39, 41, 42, 79, 80, 81, 82, 86, 87, 88, 89, 90, 94, 95, 96, 97, 98, 207, 209, 210, 212, 214, 224, 227, 231, 232, 233, 234, 235, 237, 238, 39, 40, 42, 87, 88, 89, 90, 91, 95, 96, 97, 98, 207, 209, 211, 212, 215, 224, 227, 231, 232, 234, 235, 237, 238, 38, 40, 41, 80, 81, 82, 83, 84, 89, 90, 91, 96, 97, 98, 99, 100, 209, 212, 224, 231, 232, 233, 234, 235, 237, 238, 2086, 38, 39, 40, 41, 83, 84, 90, 91, 92, 97, 98, 99, 100, 101, 209, 210, 212, 224, 231, 232, 233, 234, 235, 237, 238, 239, 241, 2086, 2087, 2089, 38, 39, 41, 42, 83, 84, 85, 90, 91, 92, 93, 94, 98, 99, 100, 101, 102, 114, 209, 210, 212, 221, 224, 231, 232, 234, 235, 237, 238, 239, 241, 242, 2084, 2087, 2089, 2090, 2092, 39, 40, 42, 84, 85, 86, 91, 92, 93, 94, 95, 99, 100, 101, 102, 103, 115, 208, 209, 212, 221, 224, 229, 231, 232, 234, 235, 238, 239, 242, 2085, 2087, 2090, 39, 40, 42, 85, 92, 93, 94, 95, 96, 100, 101, 102, 103, 104, 115, 206, 209, 211, 212, 214, 221, 224, 227, 229, 231, 232, 234, 235, 2088, 38, 40, 41, 86, 87, 88, 89, 93, 94, 95, 96, 97, 101, 102, 103, 104, 105, 113, 116, 137, 207, 209, 210, 211, 212, 214, 224, 227, 229, 231, 232, 233, 234, 235, 237, 38, 39, 41, 42, 87, 88, 89, 94, 95, 96, 97, 102, 103, 104, 105, 106, 137, 207, 209, 210, 211, 212, 214, 215, 224, 227, 231, 232, 233, 234, 235, 237, 238, 39, 40, 42, 88, 89, 90, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 207, 209, 211, 212, 215, 224, 227, 231, 232, 234, 235, 237, 238, 38, 40, 41, 89, 90, 91, 98, 104, 105, 106, 107, 108, 109, 209, 211, 212, 224, 231, 232, 234, 235, 237, 238, 38, 39, 41, 97, 98, 99, 100, 101, 105, 106, 107, 108, 109, 114, 116, 119, 209, 210, 212, 224, 231, 232, 234, 235, 237, 238, 239, 241, 2086, 2089, 38, 39, 41, 42, 90, 91, 92, 93, 94, 98, 99, 100, 101, 102, 105, 106, 107, 108, 109, 110, 111, 114, 115, 117, 119, 208, 209, 210, 212, 221, 224, 229, 231, 232, 234, 235, 237, 238, 239, 241, 242, 2084, 2087, 2089, 39, 40, 42, 91, 92, 93, 94, 95, 100, 101, 103, 107, 108, 109, 110, 111, 115, 139, 206, 208, 209, 211, 212, 214, 221, 224, 229, 231, 232, 234, 235, 238, 239, 242, 2087, 2090, 39, 40, 42, 92, 93, 94, 95, 96, 101, 102, 103, 104, 106, 108, 109, 110, 111, 112, 113, 115, 116, 118, 137, 139, 140, 206, 208, 209, 211, 212, 214, 221, 224, 227, 229, 231, 232, 233, 234, 235, 237, 242, 243, 38, 40, 41, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 113, 115, 116, 137, 139, 140, 207, 209, 210, 211, 212, 214, 224, 227, 229, 231, 232, 233, 234, 235, 237, 39, 41, 42, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 117, 137, 139, 140, 207, 209, 210, 211, 212, 214, 215, 224, 227, 231, 232, 233, 234, 235, 237, 238, 39, 40, 42, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 111, 112, 113, 114, 115, 116, 117, 118, 139, 140, 207, 209, 211, 212, 214, 215, 224, 227, 231, 232, 234, 235, 237, 238, 38, 40, 41, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 112, 113, 114, 115, 116, 118, 119, 121, 209, 211, 212, 215, 224, 231, 232, 234, 235, 237, 238, 241, 38, 41, 96, 97, 98, 99, 100, 101, 102, 105, 106, 107, 108, 109, 113, 114, 115, 116, 117, 118, 119, 123, 209, 210, 212, 224, 231, 232, 234, 235, 237, 238, 239, 241, 2089, 39, 41, 42, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 121, 208, 209, 210, 212, 214, 221, 224, 229, 231, 232, 234, 235, 237, 238, 239, 241, 242, 2087, 39, 40, 42, 93, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 121, 123, 124, 137, 139, 140, 206, 208, 209, 211, 212, 214, 221, 224, 229, 231, 232, 234, 235, 237, 238, 239, 242, 2087, 39, 40, 93, 94, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 137, 139, 140, 206, 208, 209, 211, 212, 214, 221, 224, 227, 229, 231, 232, 233, 234, 235, 237, 242, 243, 38, 40, 41, 95, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 124, 128, 137, 139, 140, 142, 206, 207, 209, 210, 211, 212, 214, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 243, 39, 41, 42, 96, 97, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 126, 127, 128, 135, 137, 139, 140, 142, 207, 209, 210, 211, 212, 214, 215, 224, 227, 231, 232, 233, 234, 235, 237, 238, 39, 40, 42, 96, 97, 98, 99, 101, 102, 103, 104, 105, 106, 107, 108, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 129, 130, 135, 137, 139, 140, 142, 209, 211, 212, 214, 215, 224, 227, 231, 232, 234, 235, 237, 238, 240, 40, 41, 97, 98, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 130, 131, 139, 140, 209, 211, 212, 215, 224, 231, 232, 234, 235, 237, 238, 241, 38, 41, 99, 100, 103, 104, 105, 106, 107, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 129, 130, 131, 137, 209, 210, 212, 224, 231, 232, 234, 235, 237, 238, 239, 241, 39, 99, 100, 101, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 131, 132, 133, 137, 139, 141, 208, 209, 210, 212, 214, 221, 223, 224, 229, 231, 232, 234, 235, 237, 238, 239, 241, 242, 0, 39, 40, 42, 100, 101, 102, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 133, 134, 135, 137, 139, 140, 142, 206, 208, 209, 211, 212, 214, 221, 224, 229, 231, 232, 233, 234, 235, 237, 238, 239, 242, 2, 39, 40, 100, 101, 102, 103, 104, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 136, 137, 139, 140, 142, 206, 208, 209, 211, 212, 214, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 242, 243, 1, 2, 38, 40, 41, 102, 103, 104, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 134, 135, 137, 139, 140, 142, 144, 206, 207, 209, 210, 211, 212, 214, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 243, 1, 2, 4, 39, 41, 103, 104, 105, 108, 110, 111, 112, 113, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 136, 137, 138, 139, 140, 142, 207, 209, 210, 211, 212, 214, 215, 224, 226, 227, 231, 232, 233, 234, 235, 237, 238, 0, 1, 3, 4, 39, 40, 42, 103, 104, 105, 106, 111, 112, 113, 114, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 139, 140, 142, 209, 211, 212, 214, 215, 224, 227, 231, 232, 234, 235, 237, 238, 240, 0, 1, 3, 4, 40, 41, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 142, 209, 211, 212, 214, 215, 224, 231, 232, 234, 235, 237, 238, 240, 241, 0, 1, 2, 3, 5, 6, 41, 105, 106, 107, 108, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 138, 139, 140, 208, 209, 210, 211, 212, 214, 215, 223, 224, 231, 232, 234, 235, 237, 238, 239, 241, 0, 1, 2, 3, 5, 6, 39, 106, 107, 108, 109, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 140, 141, 142, 208, 209, 210, 211, 212, 214, 221, 223, 224, 229, 231, 232, 234, 235, 237, 238, 239, 241, 242, 0, 2, 3, 5, 39, 40, 107, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 206, 208, 209, 211, 212, 214, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 238, 242, 0, 2, 3, 5, 39, 40, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 141, 142, 143, 206, 208, 209, 211, 212, 214, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 242, 243, 1, 2, 3, 4, 5, 38, 40, 41, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 206, 207, 208, 209, 210, 211, 212, 214, 215, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 243, 1, 2, 4, 5, 39, 41, 110, 111, 112, 113, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 207, 209, 210, 211, 212, 214, 215, 217, 224, 226, 227, 231, 232, 233, 234, 235, 236, 237, 238, 240, 2, 4, 5, 7, 39, 40, 42, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 147, 148, 207, 209, 211, 212, 214, 215, 224, 227, 231, 232, 234, 235, 237, 238, 240, 2, 4, 5, 7, 40, 41, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 209, 211, 212, 214, 215, 224, 231, 232, 234, 235, 237, 238, 240, 241, 0, 2, 4, 5, 7, 41, 112, 113, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 231, 232, 234, 235, 237, 238, 239, 241, 0, 2, 4, 5, 7, 39, 114, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 208, 209, 210, 211, 212, 214, 221, 223, 224, 228, 229, 231, 232, 234, 235, 237, 238, 239, 241, 242, 244, 0, 1, 2, 4, 5, 6, 7, 39, 40, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 206, 208, 209, 211, 212, 214, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 238, 241, 242, 0, 1, 2, 4, 7, 39, 40, 115, 116, 117, 118, 119, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 206, 208, 209, 211, 212, 214, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 242, 243, 0, 1, 2, 3, 4, 6, 7, 38, 40, 41, 117, 118, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 243, 0, 1, 2, 3, 4, 6, 16, 39, 41, 117, 118, 119, 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 207, 209, 210, 211, 212, 214, 215, 217, 224, 226, 227, 231, 232, 233, 234, 235, 236, 237, 238, 240, 0, 1, 2, 3, 4, 6, 7, 16, 17, 39, 40, 42, 119, 120, 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 207, 209, 211, 212, 214, 215, 224, 227, 231, 232, 234, 235, 236, 237, 238, 240, 0, 1, 3, 4, 6, 7, 17, 40, 41, 116, 119, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 209, 211, 212, 214, 215, 223, 224, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 0, 1, 2, 3, 4, 5, 6, 13, 15, 17, 41, 114, 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 231, 232, 234, 235, 237, 238, 239, 241, 244, 0, 1, 2, 3, 5, 6, 15, 39, 117, 121, 122, 123, 124, 125, 126, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 226, 228, 229, 231, 232, 233, 234, 235, 237, 238, 239, 241, 242, 244, 0, 2, 3, 5, 8, 12, 15, 39, 40, 115, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 206, 208, 209, 211, 212, 214, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 238, 241, 242, 0, 2, 3, 5, 6, 8, 15, 16, 39, 40, 123, 124, 125, 126, 127, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 206, 208, 209, 211, 212, 214, 216, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 242, 243, 2, 5, 8, 16, 40, 41, 124, 125, 126, 127, 128, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 243, 2, 8, 16, 39, 41, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 207, 209, 210, 211, 212, 214, 215, 217, 224, 226, 227, 231, 232, 233, 234, 235, 236, 237, 238, 240, 39, 40, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 207, 209, 211, 212, 214, 215, 217, 224, 227, 231, 232, 234, 235, 236, 237, 238, 240, 40, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 209, 211, 212, 214, 215, 223, 224, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 41, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 231, 232, 234, 235, 237, 238, 239, 240, 241, 242, 244, 39, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 206, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 226, 228, 229, 231, 232, 233, 234, 235, 237, 238, 239, 241, 242, 244, 39, 40, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 206, 208, 209, 211, 212, 214, 215, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 237, 238, 241, 242, 243, 0, 39, 40, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 206, 208, 209, 211, 212, 214, 216, 217, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 242, 243, 40, 41, 132, 133, 134, 135, 136, 137, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 243, 244, 39, 41, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 206, 207, 209, 210, 211, 212, 214, 215, 217, 224, 226, 227, 231, 232, 233, 234, 235, 236, 237, 238, 240, 39, 40, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 207, 209, 211, 212, 214, 215, 217, 224, 227, 231, 232, 234, 235, 236, 237, 238, 240, 40, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 208, 209, 210, 211, 212, 214, 215, 223, 224, 230, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 179, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 230, 231, 232, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 39, 132, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 181, 182, 206, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 226, 228, 229, 231, 232, 233, 234, 235, 237, 238, 239, 241, 242, 244, 39, 40, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 206, 208, 209, 211, 212, 214, 215, 221, 223, 224, 226, 227, 228, 229, 231, 232, 233, 234, 235, 237, 238, 241, 242, 243, 245, 39, 40, 133, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 182, 206, 208, 209, 211, 212, 214, 215, 216, 217, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 242, 243, 40, 41, 134, 135, 137, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 183, 184, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 243, 244, 39, 41, 137, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 206, 207, 209, 210, 211, 212, 214, 215, 217, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 40, 135, 139, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 207, 209, 211, 212, 213, 214, 215, 217, 223, 224, 226, 227, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 137, 138, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 186, 187, 208, 209, 210, 211, 212, 214, 215, 217, 221, 223, 224, 230, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 139, 140, 142, 143, 144, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 226, 230, 231, 232, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 137, 141, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 187, 188, 206, 208, 209, 210, 211, 212, 213, 214, 215, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 237, 238, 239, 241, 242, 244, 39, 40, 137, 139, 140, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 189, 190, 206, 208, 209, 211, 212, 214, 215, 219, 221, 223, 224, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 241, 242, 243, 245, 40, 137, 139, 141, 142, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 206, 207, 208, 209, 211, 212, 214, 215, 216, 217, 219, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 242, 243, 40, 41, 137, 139, 140, 143, 144, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 191, 192, 193, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 221, 222, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 243, 244, 39, 41, 137, 139, 142, 143, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 191, 192, 196, 206, 207, 209, 210, 211, 212, 214, 215, 216, 217, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 244, 40, 139, 144, 145, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 193, 194, 207, 209, 210, 211, 212, 213, 214, 215, 217, 221, 223, 224, 226, 227, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 243, 245, 146, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 195, 196, 197, 208, 209, 210, 211, 212, 214, 215, 217, 221, 223, 224, 230, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 194, 195, 208, 209, 210, 211, 212, 214, 215, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 196, 197, 198, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, 219, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 241, 242, 244, 245, 39, 139, 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 196, 197, 201, 204, 206, 208, 209, 211, 212, 214, 215, 216, 217, 219, 221, 223, 224, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 241, 242, 243, 245, 40, 137, 139, 149, 150, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 197, 198, 199, 200, 204, 206, 207, 208, 209, 211, 212, 214, 215, 216, 217, 219, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 239, 242, 243, 40, 41, 137, 139, 150, 151, 152, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 198, 199, 200, 201, 202, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 219, 221, 222, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 243, 244, 39, 41, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 200, 201, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 221, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 244, 40, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 201, 202, 203, 204, 207, 209, 210, 211, 212, 213, 214, 215, 217, 221, 223, 224, 226, 227, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 245, 153, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 208, 209, 210, 211, 212, 213, 214, 215, 217, 221, 223, 224, 226, 230, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 244, 246, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 208, 209, 210, 211, 212, 214, 215, 217, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 249, 154, 155, 156, 157, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 204, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 219, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 250, 39, 156, 157, 158, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 219, 221, 223, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 241, 242, 243, 245, 40, 157, 158, 159, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 208, 209, 210, 211, 212, 214, 215, 216, 217, 219, 221, 222, 223, 224, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 239, 241, 242, 243, 40, 41, 157, 158, 159, 160, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 207, 209, 211, 212, 214, 215, 216, 217, 219, 221, 222, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 243, 244, 41, 158, 159, 160, 161, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 219, 221, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 244, 245, 159, 160, 161, 162, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 217, 219, 221, 223, 224, 226, 227, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 245, 160, 161, 162, 163, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 214, 215, 217, 221, 223, 224, 226, 230, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 244, 246, 249, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 214, 215, 217, 219, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 249, 252, 162, 163, 164, 165, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 219, 221, 223, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 249, 250, 39, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 219, 221, 223, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 241, 242, 243, 245, 250, 40, 164, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 219, 221, 222, 223, 224, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 40, 41, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 243, 244, 41, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 219, 221, 222, 223, 224, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 244, 245, 167, 168, 169, 170, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 220, 221, 223, 224, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 245, 248, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 218, 219, 221, 223, 224, 226, 227, 229, 230, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 244, 246, 248, 249, 251, 252, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 249, 252, 170, 171, 172, 173, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 219, 220, 223, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 247, 249, 250, 170, 171, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 245, 250, 40, 171, 172, 173, 174, 175, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 223, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 246, 40, 41, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 243, 244, 41, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 244, 245, 247, 174, 175, 176, 177, 178, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 248, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, 238, 240, 241, 243, 244, 246, 248, 249, 251, 252, 176, 177, 178, 179, 180, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 226, 227, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 249, 250, 252, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 247, 249, 250, 252, 253, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 249, 250, 40, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 250, 40, 41, 180, 181, 182, 183, 184, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 243, 244, 247, 41, 181, 182, 183, 184, 185, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 244, 245, 247, 248, 258, 261, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 248, 249, 251, 256, 258, 259, 261, 262, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 245, 246, 248, 249, 251, 252, 259, 262, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 247, 249, 250, 252, 259, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 252, 253, 186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 249, 250, 251, 40, 180, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 239, 240, 241, 242, 243, 245, 246, 248, 250, 251, 40, 41, 180, 183, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 243, 244, 251, 252, 41, 180, 181, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 256, 181, 184, 190, 191, 192, 193, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 248, 250, 251, 256, 259, 181, 189, 190, 191, 192, 193, 194, 195, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 243, 244, 245, 246, 248, 249, 251, 252, 254, 256, 257, 259, 192, 193, 194, 195, 196, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 257, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 246, 247, 249, 250, 252, 253, 190, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 249, 250, 251, 253, 40, 195, 196, 197, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 248, 250, 251, 40, 41, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 251, 252, 261, 41, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 249, 250, 251, 253, 256, 258, 259, 261, 262, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 253, 254, 256, 257, 259, 261, 262, 198, 199, 200, 201, 202, 203, 205, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 256, 257, 259, 262, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 253, 254, 255, 256, 257, 259, 260, 262, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 256, 257, 259, 260, 202, 203, 204, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 252, 253, 254, 255, 260, 40, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 255, 256, 257, 258, 267, 268, 40, 197, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 268, 271, 41, 200, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 268, 269, 271, 272, 198, 199, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 257, 258, 259, 260, 261, 264, 265, 268, 269, 272, 199, 202, 203, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 257, 258, 259, 265, 268, 269, 272, 273, 199, 200, 202, 203, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 256, 257, 258, 259, 260, 261, 262, 265, 266, 268, 269, 272, 273, 276, 277, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 258, 259, 260, 261, 262, 264, 265, 266, 268, 269, 270, 272, 273, 274, 277, 200, 201, 203, 204, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263, 265, 266, 268, 269, 270, 273, 274, 277, 278, 40, 200, 201, 203, 204, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 262, 263, 265, 266, 267, 269, 270, 273, 274, 278, 40, 41, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 269, 270, 273, 274, 278, 41, 196, 201, 202, 204, 205, 207, 209, 211, 212, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 263, 264, 265, 266, 267, 269, 270, 271, 274, 196, 202, 205, 207, 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 262, 263, 264, 266, 267, 268, 270, 271, 274, 196, 197, 208, 209, 211, 212, 213, 214, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 264, 265, 266, 267, 270, 271, 197, 208, 209, 211, 212, 213, 214, 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 262, 263, 264, 265, 267, 268, 271, 201, 207, 208, 209, 211, 212, 213, 214, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 267, 268, 201, 202, 206, 208, 209, 210, 211, 212, 213, 214, 216, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 270, 271, 40, 201, 202, 206, 208, 209, 211, 212, 213, 214, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 269, 270, 40, 202, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 270, 271, 272, 273, 41, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 209, 211, 212, 214, 215, 216, 217, 219, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 208, 209, 211, 212, 214, 215, 217, 218, 219, 220, 221, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 273, 274, 275, 276, 277, 208, 209, 211, 212, 213, 214, 215, 216, 217, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 208, 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 275, 276, 277, 278, 206, 208, 209, 211, 212, 213, 214, 216, 217, 220, 221, 223, 224, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 40, 206, 208, 209, 211, 212, 213, 214, 216, 217, 219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 277, 278, 279, 280, 40, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 219, 221, 222, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 278, 279, 280, 281, 282, 41, 207, 209, 211, 212, 214, 215, 216, 217, 219, 221, 223, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 279, 280, 281, 282, 283, 209, 211, 212, 214, 215, 216, 217, 221, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 280, 281, 282, 283, 208, 209, 211, 212, 214, 215, 217, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 208, 209, 211, 212, 213, 214, 215, 217, 222, 223, 224, 225, 226, 228, 229, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 283, 284, 285, 208, 209, 211, 212, 213, 214, 215, 216, 217, 220, 221, 222, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 206, 208, 209, 211, 212, 213, 214, 216, 217, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 284, 285, 286, 287, 40, 206, 208, 209, 211, 212, 213, 214, 216, 217, 220, 221, 223, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 40, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 221, 223, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 207, 209, 211, 212, 214, 215, 216, 217, 221, 223, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 209, 211, 212, 214, 215, 217, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 208, 209, 211, 212, 214, 215, 217, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 208, 209, 211, 212, 213, 214, 215, 217, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 291, 208, 209, 211, 212, 213, 214, 215, 221, 223, 224, 225, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 293, 208, 209, 211, 212, 213, 214, 216, 217, 221, 223, 224, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 40, 206, 208, 209, 211, 212, 214, 216, 217, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 239, 240, 241, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 294, 40, 208, 209, 211, 212, 214, 215, 216, 217, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 243, 244, 245, 246, 247, 248, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 209, 211, 212, 214, 215, 216, 217, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 209, 211, 212, 214, 215, 217, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 297, 209, 211, 212, 214, 215, 217, 223, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 243, 244, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 298, 299, 208, 209, 211, 212, 213, 214, 215, 223, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 255, 256, 257, 258, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 299, 300, 301, 208, 209, 211, 212, 213, 214, 215, 223, 224, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 248, 249, 250, 251, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 300, 208, 209, 211, 212, 213, 214, 216, 217, 221, 223, 224, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 245, 247, 248, 251, 252, 253, 254, 256, 257, 258, 259, 260, 261, 262, 263, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 301, 302, 40, 206, 208, 209, 211, 212, 214, 216, 217, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 239, 240, 241, 242, 243, 245, 250, 251, 252, 253, 254, 255, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 302, 303, 304, 40, 208, 209, 211, 212, 214, 216, 217, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 246, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 304, 209, 211, 212, 214, 215, 216, 217, 224, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 243, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 304, 305, 209, 211, 212, 214, 215, 217, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 248, 251, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 305, 306, 307, 209, 211, 212, 214, 215, 217, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 243, 244, 246, 248, 249, 251, 252, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 305, 306, 307, 208, 209, 211, 212, 213, 214, 215, 223, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 249, 250, 252, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 307, 308, 208, 209, 211, 212, 213, 214, 223, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 247, 249, 250, 252, 253, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 308, 309, 208, 209, 211, 212, 213, 214, 216, 221, 223, 224, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 240, 241, 242, 243, 244, 245, 247, 250, 251, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 208, 209, 211, 212, 214, 216, 217, 221, 223, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 239, 240, 241, 242, 243, 245, 254, 257, 258, 259, 260, 261, 262, 263, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 40, 208, 209, 211, 212, 214, 216, 217, 221, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 257, 258, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 209, 211, 212, 214, 215, 216, 217, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 243, 255, 258, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 209, 211, 212, 214, 215, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 258, 260, 261, 262, 263, 264, 265, 266, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 209, 211, 212, 214, 215, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 243, 244, 248, 249, 251, 261, 263, 264, 265, 266, 267, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 208, 209, 211, 212, 214, 215, 223, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 249, 252, 261, 262, 265, 266, 267, 268, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 208, 209, 211, 212, 213, 214, 223, 226, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 244, 245, 249, 250, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 208, 209, 211, 212, 213, 214, 216, 223, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 240, 241, 242, 243, 244, 245, 250, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 208, 209, 211, 212, 214, 216, 217, 221, 223, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 239, 240, 241, 242, 243, 245, 260, 261, 267, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 40, 208, 209, 211, 212, 214, 216, 217, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 257, 258, 260, 261, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 209, 211, 212, 214, 215, 216, 217, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 243, 258, 260, 261, 269, 270, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 209, 211, 212, 214, 215, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 258, 261, 264, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 209, 211, 212, 214, 215, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 243, 244, 249, 251, 261, 271, 272, 273, 274, 275, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 208, 209, 211, 212, 214, 215, 226, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 249, 252, 261, 264, 272, 273, 274, 275, 276, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 208, 209, 211, 212, 213, 214, 223, 226, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 244, 245, 249, 250, 273, 274, 275, 276, 277, 279, 280, 281, 282, 283, 284, 285, 286, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 208, 209, 211, 212, 214, 216, 223, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 240, 241, 242, 243, 244, 245, 250, 274, 275, 276, 277, 278, 280, 281, 282, 283, 284, 285, 286, 287, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 208, 209, 211, 212, 214, 216, 217, 223, 226, 228, 229, 230, 231, 233, 234, 235, 236, 237, 239, 240, 242, 243, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 209, 211, 212, 214, 216, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 261, 276, 277, 278, 279, 280, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 209, 211, 212, 214, 215, 216, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 258, 261, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 209, 211, 212, 214, 215, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 261, 278, 279, 280, 281, 282, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 209, 211, 212, 214, 215, 228, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 243, 244, 261, 279, 280, 281, 282, 283, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 209, 211, 214, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 249, 280, 281, 282, 283, 284, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 208, 211, 213, 214, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 244, 245, 250, 281, 282, 283, 284, 285, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 208, 209, 211, 212, 214, 223, 228, 229, 230, 231, 233, 234, 235, 236, 237, 240, 241, 242, 245, 282, 283, 284, 285, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 208, 209, 211, 212, 214, 216, 217, 228, 229, 230, 231, 233, 234, 235, 236, 237, 239, 240, 242, 283, 284, 285, 286, 287, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 209, 211, 212, 214, 216, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 261, 284, 285, 286, 287, 288, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 209, 211, 212, 214, 215, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 261, 285, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 209, 211, 212, 214, 215, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 261, 287, 288, 289, 290, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 211, 212, 214, 215, 228, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 243, 244, 288, 289, 290, 291, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 211, 214, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 249, 288, 289, 290, 291, 292, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 211, 213, 214, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 244, 245, 290, 291, 292, 293, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 208, 211, 212, 214, 228, 229, 230, 231, 233, 234, 235, 236, 237, 241, 242, 245, 291, 292, 293, 294, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 208, 209, 211, 212, 214, 216, 228, 229, 230, 231, 233, 234, 235, 236, 237, 239, 240, 242, 292, 293, 294, 295, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 209, 211, 212, 214, 216, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 239, 240, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 209, 211, 212, 214, 215, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 294, 295, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 211, 212, 214, 215, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 295, 296, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 211, 212, 214, 215, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 243, 244, 296, 297, 298, 299, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 211, 214, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 297, 298, 299, 300, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 211, 213, 214, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 244, 298, 299, 300, 301, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 208, 211, 212, 214, 228, 230, 231, 233, 234, 235, 236, 237, 241, 242, 299, 300, 301, 302, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 209, 211, 212, 214, 216, 228, 229, 230, 231, 233, 234, 235, 236, 237, 239, 240, 300, 301, 302, 303, 305, 306, 307, 308, 309, 310, 311, 312, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 209, 211, 212, 214, 216, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 239, 240, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 209, 211, 212, 214, 215, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 302, 303, 304, 305, 307, 308, 309, 310, 311, 312, 313, 314, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 211, 212, 214, 215, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 303, 304, 305, 306, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 211, 212, 214, 231, 232, 233, 234, 236, 237, 238, 240, 241, 243, 244, 304, 305, 306, 307, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 214, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, 305, 306, 307, 308, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 211, 214, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 244, 306, 307, 308, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 211, 212, 214, 228, 230, 231, 233, 234, 235, 236, 237, 241, 242, 308, 309, 310, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 211, 212, 214, 216, 228, 229, 230, 231, 233, 234, 236, 237, 239, 240, 308, 309, 310, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 209, 211, 212, 214, 216, 217, 228, 229, 231, 232, 233, 234, 235, 236, 237, 239, 240, 310, 311, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 211, 212, 214, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 311, 312, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 211, 212, 214, 215, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 211, 212, 214, 231, 232, 233, 234, 236, 237, 238, 240, 241, 243, 244, 313, 314, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 214, 230, 231, 233, 234, 236, 237, 238, 240, 241, 242, 243, 244, 315, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 211, 214, 228, 230, 231, 233, 234, 235, 236, 237, 238, 240, 241, 242, 244, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 211, 212, 214, 228, 230, 231, 233, 234, 236, 237, 241, 242, 316, 317, 320, 321, 322, 323, 324, 325, 326, 327, 328, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 211, 212, 214, 216, 228, 229, 230, 231, 233, 234, 236, 237, 239, 318, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 211, 212, 214, 216, 228, 229, 231, 232, 233, 234, 235, 236, 237, 239, 240, 319, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 211, 212, 214, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 319, 320, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 211, 212, 214, 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 243, 320, 321, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 211, 214, 231, 232, 233, 234, 236, 237, 238, 240, 241, 243, 244, 322, 325, 326, 327, 328, 329, 330, 331, 332, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 214, 230, 231, 233, 234, 236, 237, 238, 240, 241, 242, 243, 244, 322, 323, 326, 327, 328, 329, 330, 331, 332, 333, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 211, 214, 230, 231, 233, 234, 235, 236, 237, 240, 241, 242, 244, 323, 324, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 211, 212, 214, 228, 230, 231, 233, 234, 236, 237, 241, 242, 325, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 211, 212, 214, 216, 228, 229, 230, 231, 233, 234, 236, 237, 239, 325, 326, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 211, 212, 214, 216, 228, 229, 231, 232, 233, 234, 236, 237, 239, 240, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 211, 212, 214, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 211, 212, 214, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 329, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 211, 214, 231, 232, 233, 234, 236, 237, 238, 240, 241, 243, 244, 329, 330, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 214, 231, 233, 234, 236, 237, 238, 240, 241, 243, 244, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 211, 214, 230, 231, 233, 234, 235, 236, 237, 240, 241, 242, 244, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 211, 214, 228, 230, 231, 233, 234, 236, 237, 241, 242, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 211, 212, 214, 216, 228, 229, 230, 231, 233, 234, 236, 237, 239, 337, 338, 339, 340, 341, 342, 343, 344, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 211, 212, 214, 216, 228, 229, 231, 232, 233, 234, 236, 237, 239, 240, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 211, 212, 214, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 211, 212, 214, 231, 232, 233, 234, 236, 237, 238, 240, 243, 340, 341, 342, 343, 344, 345, 346, 347, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 214, 231, 232, 234, 236, 237, 238, 240, 241, 243, 244, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 353, 354, 355, 356, 357, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 214, 231, 233, 234, 236, 237, 238, 240, 241, 244, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 355, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 214, 230, 231, 233, 234, 236, 237, 240, 241, 242, 244, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 211, 214, 228, 230, 231, 233, 234, 236, 237, 242, 345, 346, 347, 348, 349, 350, 351, 352, 353, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 211, 212, 214, 228, 229, 231, 233, 234, 236, 237, 239, 346, 347, 348, 349, 350, 351, 352, 353, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 211, 212, 214, 228, 229, 231, 233, 234, 236, 237, 239, 240, 347, 348, 349, 350, 351, 352, 353, 355, 356, 357, 358, 359, 360, 361, 362, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 211, 212, 214, 229, 231, 232, 233, 234, 236, 237, 238, 239, 240, 348, 349, 350, 351, 352, 353, 354, 355, 357, 358, 359, 360, 361, 362, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 211, 214, 231, 232, 233, 234, 236, 237, 238, 240, 243, 349, 350, 351, 352, 353, 354, 355, 356, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 214, 231, 234, 236, 237, 238, 240, 241, 243, 244, 350, 351, 352, 353, 354, 355, 356, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 214, 231, 233, 234, 236, 237, 238, 240, 241, 244, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 214, 230, 231, 233, 234, 236, 237, 241, 242, 352, 353, 354, 355, 356, 357, 358, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 211, 214, 228, 230, 231, 233, 234, 236, 237, 353, 354, 355, 356, 357, 358, 359, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 211, 212, 214, 228, 229, 231, 233, 234, 236, 237, 239, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 211, 214, 228, 229, 231, 233, 234, 236, 237, 239, 240, 356, 357, 358, 359, 360, 361, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 211, 214, 231, 232, 233, 234, 236, 237, 238, 239, 240, 355, 356, 357, 358, 359, 360, 361, 362, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 211, 214, 231, 232, 234, 236, 237, 238, 240, 243, 357, 358, 359, 360, 361, 362, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 214, 231, 234, 236, 237, 238, 240, 241, 243, 244, 359, 360, 361, 362, 363, 364, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 214, 231, 233, 234, 236, 237, 238, 240, 241, 244, 358, 359, 360, 361, 362, 363, 364, 365, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 214, 230, 231, 233, 234, 236, 237, 241, 242, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 211, 214, 228, 230, 231, 233, 234, 236, 237, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 211, 214, 228, 229, 231, 233, 234, 236, 237, 239, 362, 363, 364, 365, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 211, 214, 228, 229, 231, 233, 234, 236, 237, 239, 240, 363, 364, 365, 366, 367, 368, 369, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 211, 214, 231, 232, 233, 234, 236, 237, 238, 239, 240, 365, 366, 367, 368, 369, 370, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 211, 214, 231, 232, 234, 236, 237, 238, 240, 243, 365, 366, 367, 368, 369, 370, 371, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 214, 231, 234, 236, 237, 238, 240, 241, 243, 367, 368, 369, 370, 371, 372, 373, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 214, 231, 233, 234, 236, 237, 238, 240, 241, 244, 368, 369, 370, 371, 372, 373, 374, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 214, 230, 231, 233, 234, 236, 237, 241, 242, 369, 370, 371, 372, 373, 374, 375, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 211, 228, 230, 231, 233, 234, 236, 237, 370, 371, 372, 373, 374, 375, 376, 377, 381, 382, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 211, 228, 231, 233, 234, 236, 237, 239, 371, 372, 373, 374, 375, 376, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 211, 214, 228, 229, 231, 233, 234, 236, 237, 239, 240, 372, 373, 374, 375, 376, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 211, 214, 231, 232, 233, 234, 236, 237, 238, 239, 240, 373, 374, 375, 376, 377, 378, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 214, 231, 232, 234, 236, 237, 238, 240, 243, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 214, 231, 234, 236, 237, 238, 240, 241, 243, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 231, 233, 234, 236, 237, 238, 240, 241, 244, 376, 377, 378, 379, 380, 381, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 214, 230, 231, 233, 234, 236, 237, 241, 377, 378, 379, 380, 381, 382, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 396, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 211, 228, 230, 231, 233, 234, 236, 237, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 391, 392, 393, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 211, 228, 231, 233, 234, 236, 237, 239, 379, 380, 381, 382, 383, 384, 386, 387, 388, 389, 390, 391, 392, 393, 394, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 211, 214, 228, 229, 231, 233, 234, 236, 237, 239, 240, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 211, 214, 231, 232, 233, 234, 236, 237, 238, 239, 240, 381, 382, 383, 384, 385, 386, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 214, 231, 232, 234, 236, 237, 238, 240, 243, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 401, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 231, 234, 236, 237, 238, 240, 241, 243, 383, 384, 385, 386, 387, 388, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 417, 418, 231, 233, 234, 236, 237, 238, 240, 241, 384, 385, 386, 387, 388, 389, 391, 392, 393, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 230, 231, 233, 234, 236, 237, 241, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 211, 228, 230, 231, 233, 234, 236, 237, 387, 388, 389, 390, 391, 393, 394, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 211, 228, 231, 233, 234, 236, 237, 239, 387, 388, 389, 390, 391, 392, 394, 395, 396, 397, 398, 399, 400, 401, 402, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 211, 214, 228, 229, 231, 233, 234, 236, 237, 239, 240, 388, 389, 390, 391, 392, 393, 395, 396, 397, 398, 399, 400, 401, 402, 403, 407, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 211, 214, 231, 233, 234, 236, 237, 239, 240, 390, 391, 392, 393, 394, 396, 397, 398, 399, 400, 401, 402, 403, 404, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 214, 231, 232, 234, 236, 237, 238, 240, 243, 391, 392, 393, 394, 395, 397, 398, 399, 400, 401, 402, 403, 404, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 231, 234, 236, 237, 238, 240, 241, 243, 391, 392, 393, 394, 395, 396, 399, 400, 401, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 231, 233, 234, 236, 237, 238, 240, 241, 393, 394, 395, 396, 397, 400, 401, 402, 403, 404, 405, 406, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 230, 231, 233, 234, 236, 237, 241, 394, 395, 396, 397, 398, 401, 402, 403, 404, 405, 406, 407, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 211, 228, 230, 231, 233, 234, 236, 237, 395, 396, 397, 398, 399, 402, 403, 404, 405, 406, 407, 408, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 211, 228, 231, 233, 234, 236, 237, 239, 396, 397, 398, 399, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 211, 214, 231, 233, 234, 236, 237, 239, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 410, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 214, 231, 233, 234, 236, 237, 239, 240, 398, 399, 400, 401, 402, 405, 406, 407, 408, 409, 410, 411, 412, 416, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 214, 231, 234, 236, 237, 238, 240, 243, 399, 400, 401, 402, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 231, 234, 236, 237, 238, 240, 241, 243, 400, 401, 402, 403, 404, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 423, 424, 425, 426, 427, 428, 429, 430, 431, 231, 233, 234, 236, 237, 240, 241, 401, 402, 403, 404, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 424, 425, 426, 427, 428, 429, 430, 431, 432, 230, 231, 233, 234, 236, 237, 241, 402, 403, 404, 405, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 424, 425, 426, 427, 428, 429, 430, 431, 432, 230, 231, 233, 234, 236, 237, 403, 404, 405, 406, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 426, 427, 428, 429, 430, 431, 432, 433, 434, 211, 228, 231, 233, 234, 236, 237, 239, 404, 405, 406, 407, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 427, 428, 429, 430, 431, 432, 433, 434, 435, 214, 231, 233, 234, 236, 237, 239, 405, 406, 407, 408, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 428, 429, 430, 431, 432, 433, 434, 435, 436, 214, 231, 233, 234, 236, 237, 239, 240, 407, 408, 409, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 429, 430, 431, 432, 433, 434, 435, 436, 437, 214, 231, 234, 236, 237, 238, 240, 243, 407, 408, 409, 410, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 430, 431, 432, 433, 434, 435, 436, 437, 438, 231, 234, 236, 237, 238, 240, 241, 243, 409, 410, 411, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 233, 234, 236, 237, 240, 241, 410, 411, 412, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 432, 433, 434, 435, 436, 437, 438, 439, 440, 230, 231, 233, 234, 236, 237, 241, 410, 411, 412, 413, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 433, 434, 435, 436, 437, 438, 439, 440, 441, 230, 231, 233, 234, 236, 237, 412, 413, 414, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 211, 228, 231, 233, 234, 236, 237, 239, 413, 414, 415, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 435, 436, 437, 438, 439, 440, 441, 442, 214, 231, 233, 234, 236, 237, 239, 414, 415, 416, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 436, 437, 438, 439, 440, 441, 442, 443, 214, 231, 233, 234, 236, 237, 239, 240, 415, 416, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 437, 438, 439, 440, 441, 442, 443, 444, 231, 234, 236, 237, 238, 240, 243, 416, 417, 418, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 438, 439, 440, 441, 442, 443, 444, 445, 446, 234, 236, 237, 238, 240, 241, 243, 418, 419, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 443, 444, 445, 446, 233, 234, 236, 237, 240, 241, 418, 419, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 443, 444, 445, 446, 447, 230, 231, 233, 234, 237, 420, 421, 426, 427, 428, 429, 430, 431, 433, 434, 435, 436, 437, 438, 441, 442, 443, 444, 445, 446, 447, 448, 230, 231, 233, 234, 236, 237, 420, 421, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 442, 443, 444, 445, 446, 447, 448, 449, 228, 231, 233, 234, 236, 237, 239, 421, 422, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 443, 444, 445, 446, 447, 448, 449, 450, 214, 231, 233, 234, 236, 237, 239, 423, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 444, 445, 446, 447, 448, 449, 450, 451, 214, 231, 233, 234, 236, 237, 239, 240, 424, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 445, 446, 447, 448, 449, 450, 451, 452, 231, 234, 236, 237, 238, 240, 243, 425, 430, 431, 432, 433, 434, 435, 436, 439, 440, 441, 446, 447, 448, 449, 450, 451, 452, 453, 234, 236, 237, 238, 240, 241, 243, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 447, 448, 449, 450, 451, 452, 453, 454, 233, 234, 236, 237, 240, 241, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 448, 449, 450, 451, 452, 453, 454, 455, 230, 231, 233, 234, 434, 435, 436, 437, 438, 439, 441, 442, 443, 444, 445, 446, 449, 450, 451, 452, 453, 454, 455, 456, 230, 231, 233, 234, 236, 434, 435, 436, 437, 438, 439, 440, 441, 444, 445, 446, 450, 451, 452, 453, 454, 455, 456, 228, 231, 233, 234, 236, 237, 239, 436, 437, 438, 439, 440, 441, 446, 451, 452, 453, 454, 455, 456, 457, 458, 231, 233, 234, 236, 237, 239, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 214, 231, 233, 234, 236, 237, 240, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 453, 454, 455, 456, 457, 458, 459, 460, 231, 234, 236, 237, 240, 439, 440, 441, 442, 443, 449, 454, 455, 456, 457, 458, 459, 460, 461, 234, 236, 237, 240, 241, 243, 439, 440, 441, 442, 443, 444, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 233, 234, 236, 237, 241, 440, 441, 442, 443, 444, 445, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 230, 231, 233, 234, 442, 443, 444, 445, 446, 450, 451, 452, 453, 454, 457, 458, 459, 460, 461, 462, 463, 230, 231, 233, 234, 236, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 459, 460, 461, 462, 463, 464, 465, 228, 231, 233, 234, 236, 237, 239, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 459, 460, 461, 462, 463, 464, 465, 231, 233, 234, 236, 237, 239, 445, 446, 447, 448, 449, 453, 454, 455, 456, 457, 460, 461, 462, 463, 464, 465, 466, 214, 231, 233, 234, 236, 237, 240, 446, 447, 448, 449, 450, 451, 453, 454, 455, 456, 457, 458, 462, 463, 464, 465, 466, 467, 231, 234, 236, 237, 240, 447, 448, 449, 450, 451, 452, 453, 454, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 234, 236, 237, 240, 241, 448, 449, 450, 451, 452, 458, 463, 464, 465, 466, 467, 468, 469, 233, 234, 236, 237, 241, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 465, 466, 467, 468, 469, 470, 230, 231, 233, 234, 450, 451, 452, 453, 456, 457, 458, 459, 460, 461, 462, 466, 467, 468, 469, 470, 471, 230, 231, 233, 234, 236, 451, 452, 453, 454, 455, 460, 461, 462, 463, 466, 467, 468, 469, 470, 471, 472, 228, 231, 233, 234, 236, 237, 452, 453, 454, 455, 456, 457, 461, 462, 463, 468, 469, 470, 471, 472, 473, 231, 233, 234, 236, 237, 239, 454, 455, 459, 460, 461, 462, 463, 464, 465, 466, 469, 470, 471, 472, 473, 474, 231, 233, 234, 236, 237, 240, 464, 469, 470, 471, 472, 473, 474, 475, 234, 236, 237, 240, 464, 465, 466, 470, 471, 472, 473, 474, 475, 476, 234, 236, 237, 240, 456, 457, 458, 459, 465, 466, 467, 472, 473, 474, 475, 476, 233, 234, 236, 237, 241, 457, 458, 459, 460, 461, 466, 467, 468, 469, 473, 474, 475, 476, 477, 230, 231, 233, 234, 458, 459, 460, 461, 462, 468, 474, 475, 476, 477, 478, 230, 231, 233, 234, 236, 460, 461, 462, 467, 468, 469, 470, 475, 476, 477, 478, 479, 231, 233, 234, 236, 237, 470, 475, 476, 477, 478, 479, 480, 481, 231, 233, 234, 236, 237, 239, 470, 471, 477, 478, 479, 480, 481, 482, 231, 233, 234, 236, 237, 240, 472, 473, 478, 479, 480, 481, 482, 234, 236, 237, 240, 464, 465, 466, 473, 474, 479, 480, 481, 482, 483, 234, 236, 237, 240, 464, 465, 466, 467, 468, 474, 481, 482, 483, 233, 234, 236, 237, 241, 465, 466, 467, 468, 469, 475, 483, 484, 230, 231, 233, 234, 467, 468, 469, 476, 482, 483, 484, 485, 486, 230, 231, 233, 234, 236, 477, 483, 484, 485, 486, 487, 231, 233, 234, 236, 237, 476, 477, 478, 479, 483, 484, 485, 486, 487, 488, 231, 233, 234, 236, 237, 239, 479, 485, 486, 487, 488, 489, 231, 234, 236, 237, 240, 477, 478, 479, 480, 481, 482, 483, 486, 487, 488, 489, 490, 234, 236, 237, 240, 478, 479, 480, 481, 482, 483, 484, 487, 488, 489, 490, 491, 492, 234, 236, 237, 240, 479, 480, 481, 482, 483, 484, 485, 488, 489, 490, 491, 492, 493, 233, 234, 236, 237, 241, 480, 481, 482, 483, 484, 485, 486, 489, 490, 491, 492, 493, 494, 231, 233, 234, 482, 483, 484, 485, 486, 490, 491, 492, 493, 231, 233, 234, 236, 481, 482, 483, 484, 485, 486, 487, 488, 491, 492, 493, 494, 495, 496, 231, 233, 234, 236, 237, 478, 479, 483, 484, 485, 486, 487, 488, 489, 493, 494, 231, 233, 234, 236, 237, 239, 483, 484, 485, 486, 487, 488, 489, 490, 494, 495, 496, 231, 234, 236, 237, 240, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 234, 236, 237, 240, 486, 487, 488, 489, 490, 491, 492, 495, 496, 497, 498, 236, 237, 240, 490, 496, 497, 498, 499, 500, 501, 233, 234, 237, 481, 482, 483, 484, 485, 489, 490, 491, 492, 231, 233, 234, 480, 481, 482, 483, 484, 485, 486, 487, 491, 492, 493, 494, 497, 498, 499, 500, 501, 502, 503, 231, 233, 234, 236, 484, 485, 486, 487, 493, 231, 233, 234, 236, 237, 486, 487, 488, 492, 493, 494, 495, 496, 498, 499, 500, 501, 502, 503, 504, 505, 231, 233, 234, 236, 237, 239, 487, 488, 495, 502, 231, 234, 236, 237, 495, 496, 497, 504, 505, 234, 236, 237, 240, 487, 488, 489, 490, 497, 236, 237, 240, 497, 498, 499, 504, 505, 506, 507, 508, 233, 234, 237, 490, 491, 499, 500, 231, 233, 234, 491, 492, 493, 500, 231, 233, 234, 236, 491, 492, 493, 494, 495, 499, 500, 501, 502, 503, 231, 233, 234, 236, 237, 493, 494, 495, 500, 501, 502, 503, 504, 231, 233, 234, 236, 237, 493, 494, 495, 496, 501, 502, 503, 504, 505, 506, 234, 236, 237, 495, 496, 497, 503, 504, 505, 234, 236, 237, 240, 497, 505, 236, 237, 240, 505, 506, 233, 234, 237, 507, 231, 233, 234, 506, 507, 508, 509, 510, 231, 233, 234, 236, 509, 231, 233, 234, 236, 237, 510, 231, 233, 234, 236, 237, 511, 512, 234, 236, 237, 512, 234, 236, 237, 240, 511, 512, 513, 514, 515, 236, 237, 240, 513, 514, 515, 233, 234, 237, 515, 233, 234, 516, 524, 231, 233, 234, 236, 515, 516, 517, 518, 519, 231, 233, 234, 236, 237, 516, 517, 518, 519, 520, 231, 233, 234, 236, 237, 517, 518, 519, 520, 521, 234, 236, 237, 520, 234, 236, 237, 240, 521, 236, 237, 240, 521, 522, 234, 523, 233, 234, 524, 231, 233, 234, 236, 524, 525, 526, 231, 233, 234, 236, 237, 525, 526, 231, 233, 234, 236, 237, 526, 527, 528, 234, 236, 237, 528, 234, 236, 237, 240, 529, 237, 240, 530, 531, 234, 531, 233, 234, 530, 531, 532, 533, 231, 233, 234, 532, 533, 534, 231, 233, 234, 236, 237, 534, 231, 233, 234, 236, 237, 535, 234, 236, 237, 535, 536, 537, 234, 236, 237, 240, 537, 237, 537, 538, 539, 234, 539, 233, 234, 538, 539, 540, 541, 231, 233, 234, 541, 231, 233, 234, 236, 237, 542, 231, 233, 234, 236, 237, 543, 234, 236, 237, 544, 237, 240, 544, 545, 237, 546, 545, 546, 547, 548, 549, 233, 234, 548, 231, 233, 234, 548, 549, 550, 231, 233, 234, 236, 237, 550, 231, 234, 236, 237, 551, 234, 236, 237, 551, 552, 553, 237, 552, 553, 554, 237, 554, 555, 233, 234, 556, 231, 233, 234, 557, 231, 233, 234, 236, 237, 558, 234, 236, 237, 559, 234, 236, 237, 560, 237, 561, 237, 562, 563, 233, 234, 564, 231, 233, 234, 565, 231, 233, 234, 236, 237, 566, 234, 236, 237, 567, 234, 236, 237, 568, 237, 569, 237, 570, 571, 233, 234, 572, 231, 233, 234, 573, 231, 233, 234, 236, 574, 234, 236, 237, 575, 234, 236, 237, 576, 237, 577, 237, 578, 579, 233, 234, 580, 231, 233, 234, 581, 231, 233, 234, 236, 582, 234, 236, 237, 583, 234, 237, 584, 237, 584, 585, 586, 237, 586, 585, 586, 587, 588, 233, 234, 587, 588, 589, 590, 231, 233, 234, 589, 231, 234, 236, 590, 234, 236, 237, 589, 590, 591, 592, 234, 237, 591, 592, 593, 237, 593, 593, 594, 595, 595, 234, 596, 231, 234, 597, 231, 234, 236, 598, 599, 234, 236, 237, 599, 234, 237, 600, 237, 601, 602, 603, 604, 231, 234, 605, 231, 234, 236, 606, 234, 236, 237, 607, 234, 237, 608, 237, 609, 610, 611, 603, 604, 605, 606, 611, 612, 618, 619, 620, 621, 622, 231, 234, 602, 603, 604, 605, 606, 607, 608, 613, 614, 618, 619, 620, 621, 622, 623, 624, 231, 234, 236, 603, 604, 605, 606, 607, 608, 609, 614, 619, 620, 621, 622, 623, 624, 625, 234, 236, 237, 604, 605, 606, 607, 608, 609, 610, 615, 620, 621, 622, 623, 624, 625, 626, 237, 605, 606, 607, 608, 609, 610, 611, 615, 616, 617, 621, 622, 623, 624, 625, 626, 627, 237, 606, 607, 608, 609, 610, 611, 612, 617, 618, 622, 623, 624, 625, 626, 627, 628, 607, 608, 609, 610, 611, 612, 613, 617, 618, 623, 624, 625, 626, 627, 628, 629, 608, 609, 610, 611, 612, 613, 614, 619, 620, 624, 625, 626, 627, 628, 629, 630, 609, 610, 611, 612, 613, 614, 615, 620, 625, 626, 627, 628, 629, 630, 631, 611, 612, 613, 614, 615, 620, 621, 622, 628, 629, 630, 631, 234, 236, 622, 234, 236, 237, 623, 237, 624, 237, 625, 626, 627, 628, 629, 236, 630, 234, 237, 631, 237, 631, 632, 632, 633, 634, 634, 635, 636, 637, 638, 237, 639, 237, 640, 641, 642, 643, 644, 645, 646, 237, 647, 237, 648, 649, 650, 650, 651, 652, 651, 652, 653, 652, 653, 654, 653, 654, 655, 237, 654, 655, 656, 237, 656, 657, 658, 659, 659, 660, 661, 662, 237, 663, 237, 664, 665, 666, 667, 668, 669, 670, 670, 671, 672, 671, 672, 673, 672, 673, 674, 673, 674, 675, 675, 676, 677, 678, 679, 680, 681, 681, 682, 683, 683, 684, 685, 686, 687, 688, 689, 689, 690, 691, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 728, 729, 730, 730, 730, 731, 732, 733, 733, 733, 734, 735, 735, 735, 736, 737, 737, 738, 739, 731, 732, 733, 740, 746, 747, 748, 749, 732, 733, 734, 741, 748, 749, 750, 742, 733, 734, 735, 736, 737, 743, 749, 750, 751, 752, 753, 736, 737, 744, 752, 753, 745, 746, 746, 747, 748, 747, 748, 749, 750, 751, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 762, 762, 763, 764, 765, 765, 765, 766, 767, 768, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 785, 786, 787, 786, 787, 788, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 801, 802, 803, 804, 805, 806, 806, 807, 808, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 817, 818, 819, 819, 820, 821, 822, 823, 824, 823, 824, 825, 826, 827, 824, 825, 826, 827, 828, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 843, 844, 845, 846, 847, 844, 845, 846, 847, 848, 845, 846, 847, 848, 849, 848, 847, 848, 849, 850, 849, 850, 851, 851, 852, 853, 854, 855, 856, 856, 857, 858, 858, 859, 860, 861, 862, 861, 862, 863, 864, 864, 864, 865, 866, 867, 867, 868, 859, 860, 861, 862, 863, 869, 875, 876, 877, 878, 879, 860, 861, 862, 863, 864, 870, 877, 878, 879, 880, 871, 872, 873, 874, 864, 865, 866, 867, 868, 874, 880, 881, 882, 883, 884, 865, 866, 867, 868, 869, 875, 881, 882, 883, 884, 885, 876, 877, 868, 869, 870, 877, 884, 885, 886, 877, 878, 879, 870, 871, 879, 886, 887, 879, 880, 881, 881, 881, 882, 883, 883, 883, 884, 885, 886, 886, 887, 888, 889, 888, 889, 890, 891, 892, 891, 890, 891, 892, 893, 893, 894, 894, 893, 894, 895, 896, 897, 896, 895, 896, 897, 898, 899, 898, 899, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 920, 921, 922, 923, 924, 923, 924, 925, 926, 927, 928, 929, 929, 930, 931, 932, 931, 932, 933, 933, 934, 935, 935, 936, 937, 937, 938, 939, 940, 941, 942, 943, 944, 945, 945, 946, 947, 948, 947, 948, 949, 948, 949, 950, 951, 950, 951, 952, 953, 952, 953, 954, 953, 954, 955, 956, 956, 955, 956, 957, 958, 959, 958, 959, 960, 961, 960, 961, 962, 963, 964, 965, 960, 961, 962, 963, 964, 965, 966, 962, 963, 964, 965, 964, 965, 966, 965, 966, 967, 968, 967, 968, 969, 970, 969, 970, 971, 972, 973, 970, 971, 972, 973, 974, 971, 972, 973, 974, 975, 972, 973, 974, 975, 976, 974, 975, 976, 976, 977, 978, 979, 980, 980, 979, 980, 981, 982, 983, 980, 981, 982, 983, 984, 981, 982, 983, 984, 985, 983, 984, 985, 976, 977, 978, 984, 985, 986, 992, 993, 994, 977, 978, 979, 985, 986, 987, 993, 994, 978, 979, 980, 986, 987, 988, 989, 994, 995, 996, 979, 980, 981, 986, 987, 988, 989, 996, 997, 980, 981, 982, 988, 989, 990, 995, 996, 997, 990, 991, 992, 993, 994, 987, 988, 989, 994, 995, 996, 1003, 1004, 1005, 995, 996, 987, 988, 989, 990, 995, 996, 997, 998, 999, 1003, 1004, 1005, 1006, 989, 990, 992, 993, 996, 997, 998, 1006, 1008, 1009, 1012, 988, 989, 990, 991, 992, 993, 995, 996, 997, 998, 999, 1004, 1005, 1006, 1007, 1008, 1009, 1011, 1012, 1013, 989, 990, 991, 992, 999, 1000, 1001, 1002, 1006, 1007, 1008, 1012, 1013, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 999, 1000, 1001, 1002, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1002, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1002, 1003, 1004, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1003, 1004, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 994, 995, 996, 997, 998, 999, 1000, 1001, 1003, 1004, 1005, 1006, 1007, 1008, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1004, 1005, 1006, 1007, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 996, 997, 998, 999, 1000, 1001, 1002, 1005, 1006, 1007, 1008, 1009, 1010, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 998, 999, 1000, 1001, 1002, 1007, 1008, 1009, 1014, 1015, 1016, 1017, 1018, 1019, 998, 999, 1000, 1001, 1002, 1003, 1004, 1008, 1009, 1010, 1011, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1000, 1001, 1002, 1003, 1004, 1009, 1010, 1011, 1016, 1017, 1018, 1019, 1020, 1002, 1003, 1010, 1011, 1018, 1019, 1020, 1005, 1012, 1013, 1014, 1011, 1012, 1013, 1020, 1006, 1014, 1015, 1013, 1014, 1015, 1006, 1007, 1008, 1009, 1015, 1016, 1017, 1022, 1023, 1024, 1025, 1026, 1017, 1018, 1019, 1020, 1021, 1014, 1015, 1021, 1022, 1023, 1030, 1031, 1015, 1022, 1023, 1024, 1031, 1016, 1023, 1024, 1032, 1025, 1026, 1025, 1026, 1033, 1019, 1027, 1028, 1020, 1027, 1028, 1029, 1036, 1037, 1020, 1021, 1028, 1029, 1030, 1036, 1037, 1038, 1030, 1031, 1032, 1033, 1033, 1034, 1035, 1027, 1035, 1043, 1036, 1037, 1038, 1039, 1040, 1040, 1041, 1042, 1041, 1042, 1043, 1042, 1043, 1044, 1044, 1045, 1046, 1043, 1044, 1045, 1046, 1046, 1047, 1048, 1049, 1040, 1047, 1048, 1049, 1056, 1057, 1047, 1048, 1049, 1050, 1051, 1050, 1051, 1052, 1052, 1053, 1054, 1055, 1053, 1054, 1055, 1054, 1055, 1056, 1055, 1056, 1057, 1055, 1056, 1057, 1058, 1065, 1058, 1059, 1059, 1060, 1053, 1054, 1060, 1061, 1062, 1069, 1070, 1054, 1055, 1062, 1070, 1071, 1054, 1055, 1062, 1063, 1064, 1071, 1072, 1055, 1056, 1064, 1072, 1073, 1056, 1057, 1064, 1065, 1066, 1073, 1074, 1066, 1066, 1067, 1068, 1069, 1070, 1061, 1062, 1068, 1069, 1070, 1071, 1062, 1069, 1070, 1071, 1072, 1063, 1070, 1071, 1072, 1073, 1080, 1064, 1070, 1071, 1072, 1073, 1074, 1080, 1081, 1064, 1065, 1071, 1072, 1073, 1074, 1081, 1082, 1065, 1072, 1073, 1074, 1075, 1082, 1066, 1073, 1074, 1075, 1076, 1082, 1083, 1068, 1069, 1076, 1077, 1078, 1085, 1086, 1069, 1070, 1076, 1077, 1078, 1079, 1086, 1069, 1070, 1071, 1077, 1078, 1079, 1080, 1085, 1086, 1087, 1088, 1070, 1071, 1072, 1078, 1079, 1080, 1081, 1086, 1087, 1088, 1089, 1071, 1072, 1073, 1078, 1079, 1080, 1081, 1082, 1087, 1088, 1089, 1090, 1072, 1073, 1074, 1079, 1080, 1081, 1082, 1083, 1089, 1090, 1091, 1072, 1073, 1074, 1075, 1080, 1081, 1082, 1083, 1089, 1090, 1091, 1073, 1074, 1075, 1076, 1081, 1082, 1083, 1084, 1090, 1091, 1092, 1074, 1075, 1076, 1082, 1083, 1084, 1085, 1091, 1092, 1093, 1085, 1086, 1087, 1077, 1078, 1079, 1085, 1086, 1087, 1088, 1093, 1094, 1095, 1096, 1078, 1079, 1080, 1086, 1087, 1088, 1089, 1095, 1096, 1079, 1080, 1081, 1086, 1087, 1088, 1089, 1090, 1094, 1095, 1096, 1097, 1098, 1080, 1081, 1087, 1088, 1089, 1090, 1091, 1096, 1097, 1098, 1080, 1081, 1082, 1083, 1084, 1088, 1089, 1090, 1091, 1092, 1096, 1097, 1098, 1099, 1100, 1082, 1083, 1084, 1089, 1090, 1091, 1092, 1093, 1099, 1100, 1082, 1083, 1084, 1085, 1090, 1091, 1092, 1093, 1094, 1099, 1100, 1101, 1084, 1085, 1091, 1092, 1093, 1094, 1100, 1101, 1102, 1084, 1085, 1086, 1087, 1092, 1093, 1094, 1095, 1096, 1101, 1102, 1103, 1087, 1088, 1095, 1096, 1097, 1104, 1087, 1088, 1089, 1095, 1096, 1097, 1098, 1103, 1104, 1105, 1106, 1087, 1088, 1089, 1090, 1096, 1097, 1098, 1099, 1103, 1104, 1105, 1106, 1107, 1088, 1089, 1090, 1091, 1096, 1097, 1098, 1099, 1100, 1104, 1105, 1106, 1107, 1089, 1090, 1091, 1092, 1093, 1097, 1098, 1099, 1100, 1101, 1105, 1106, 1107, 1108, 1109, 1090, 1091, 1092, 1093, 1094, 1098, 1099, 1100, 1101, 1102, 1103, 1106, 1107, 1108, 1109, 1091, 1092, 1093, 1094, 1095, 1099, 1100, 1101, 1102, 1103, 1106, 1107, 1108, 1109, 1110, 1111, 1092, 1093, 1094, 1095, 1096, 1100, 1101, 1102, 1103, 1104, 1108, 1109, 1110, 1111, 1112, 1093, 1094, 1095, 1096, 1097, 1102, 1103, 1104, 1105, 1109, 1110, 1111, 1112, 1113, 1094, 1095, 1096, 1097, 1102, 1103, 1104, 1105, 1106, 1111, 1112, 1113, 1095, 1096, 1097, 1098, 1103, 1104, 1105, 1106, 1107, 1111, 1112, 1113, 1114, 1096, 1097, 1098, 1104, 1105, 1106, 1107, 1108, 1109, 1112, 1113, 1114, 1098, 1099, 1100, 1101, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1114, 1115, 1116, 1117, 1098, 1099, 1100, 1101, 1102, 1106, 1107, 1108, 1109, 1114, 1115, 1116, 1117, 1118, 1119, 1099, 1100, 1101, 1102, 1103, 1107, 1108, 1109, 1110, 1115, 1116, 1117, 1118, 1119, 1100, 1101, 1102, 1103, 1104, 1105, 1108, 1109, 1110, 1111, 1116, 1117, 1118, 1119, 1120, 1101, 1102, 1103, 1104, 1105, 1106, 1109, 1110, 1111, 1112, 1113, 1117, 1118, 1119, 1120, 1121, 1102, 1103, 1104, 1105, 1106, 1107, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1117, 1118, 1119, 1120, 1121, 1122, 1103, 1104, 1105, 1106, 1107, 1108, 1110, 1111, 1112, 1113, 1114, 1115, 1118, 1119, 1120, 1121, 1122, 1123, 1104, 1105, 1106, 1107, 1108, 1109, 1111, 1112, 1113, 1114, 1115, 1116, 1119, 1120, 1121, 1122, 1123, 1124, 1105, 1106, 1107, 1108, 1109, 1110, 1112, 1113, 1114, 1115, 1116, 1117, 1120, 1121, 1122, 1123, 1124, 1125, 1106, 1107, 1108, 1109, 1110, 1113, 1114, 1115, 1116, 1117, 1118, 1121, 1122, 1123, 1124, 1125, 1126, 1107, 1108, 1109, 1110, 1111, 1115, 1116, 1117, 1118, 1119, 1123, 1124, 1125, 1126, 1127, 1107, 1108, 1109, 1110, 1111, 1112, 1116, 1117, 1118, 1119, 1120, 1123, 1124, 1125, 1126, 1127, 1128, 1109, 1110, 1111, 1112, 1118, 1119, 1120, 1125, 1126, 1127, 1128, 1109, 1110, 1111, 1112, 1113, 1114, 1118, 1119, 1120, 1121, 1122, 1123, 1126, 1127, 1128, 1129, 1130, 1110, 1111, 1112, 1113, 1114, 1116, 1119, 1120, 1121, 1127, 1128, 1129, 1130, 1133, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1106, 1107, 1108, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1108, 1109, 1110, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1141, 1142, 1143, 1144, 1107, 1108, 1109, 1110, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1141, 1142, 1143, 1109, 1110, 1111, 1112, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1143, 1144, 1145, 1110, 1111, 1112, 1113, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1143, 1144, 1145, 1146, 1111, 1112, 1113, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1127, 1128, 1129, 1130, 1131, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1145, 1146, 1147, 1148, 1112, 1113, 1114, 1115, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1128, 1129, 1130, 1131, 1132, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1145, 1146, 1147, 1113, 1114, 1115, 1116, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1147, 1148, 1149, 1150, 1113, 1114, 1115, 1116, 1117, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1147, 1148, 1149, 1150, 1115, 1116, 1117, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1149, 1150, 1151, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1123, 1126, 1127, 1128, 1129, 1130, 1135, 1136, 1137, 1138, 1139, 1142, 1143, 1144, 1145, 1146, 1123, 1124, 1126, 1127, 1128, 1129, 1130, 1131, 1135, 1136, 1137, 1138, 1139, 1140, 1142, 1143, 1144, 1145, 1146, 1147, 1128, 1129, 1130, 1131, 1134, 1137, 1138, 1139, 1142, 1144, 1145, 1146, 1147, 1128, 1129, 1130, 1131, 1132, 1133, 1136, 1137, 1138, 1139, 1140, 1141, 1144, 1145, 1146, 1147, 1148, 1149, 1129, 1130, 1131, 1132, 1133, 1139, 1140, 1143, 1145, 1146, 1147, 1148, 1149, 1130, 1131, 1132, 1133, 1134, 1139, 1140, 1141, 1142, 1146, 1147, 1148, 1149, 1150, 1131, 1132, 1133, 1134, 1135, 1141, 1147, 1148, 1149, 1150, 1151, 1132, 1133, 1134, 1135, 1136, 1140, 1141, 1142, 1143, 1144, 1148, 1149, 1150, 1151, 1152, 1133, 1134, 1135, 1136, 1137, 1143, 1149, 1150, 1151, 1152, 1153, 1134, 1135, 1136, 1137, 1138, 1142, 1143, 1144, 1145, 1146, 1150, 1151, 1152, 1153, 1154, 1135, 1136, 1137, 1138, 1139, 1145, 1151, 1152, 1153, 1154, 1155, 1136, 1137, 1138, 1139, 1140, 1144, 1145, 1146, 1147, 1148, 1152, 1153, 1154, 1155, 1156, 1137, 1138, 1139, 1140, 1141, 1147, 1153, 1154, 1155, 1156, 1157, 1138, 1139, 1140, 1141, 1142, 1146, 1147, 1148, 1149, 1150, 1154, 1155, 1156, 1157, 1158, 1138, 1139, 1140, 1141, 1142, 1143, 1147, 1148, 1149, 1150, 1155, 1156, 1157, 1158, 1159, 1140, 1141, 1142, 1148, 1149, 1150, 1151, 1157, 1158, 1140, 1141, 1142, 1143, 1144, 1145, 1148, 1149, 1150, 1151, 1152, 1153, 1157, 1158, 1159, 1160, 1161, 1142, 1143, 1144, 1150, 1151, 1152, 1153, 1159, 1160, 1151, 1152, 1153, 1154, 1144, 1145, 1146, 1147, 1152, 1153, 1154, 1155, 1160, 1161, 1162, 1163, 1164, 1148, 1149, 1150, 1153, 1154, 1155, 1156, 1163, 1164, 1165, 1145, 1146, 1147, 1148, 1149, 1154, 1155, 1156, 1162, 1163, 1164, 1165, 1166, 1150, 1151, 1155, 1156, 1157, 1158, 1156, 1157, 1158, 1159, 1160, 1161, 1152, 1153, 1154, 1158, 1159, 1160, 1167, 1168, 1169, 1170, 1161, 1162, 1163, 1155, 1162, 1170, 1162, 1163, 1164, 1164, 1164, 1165, 1166, 1165, 1166, 1167, 1167, 1167, 1168, 1161, 1169, 1177, 1178, 1170, 1162, 1163, 1171, 1179, 1180, 1172, 1173, 1174, 1175, 1175, 1175, 1176, 1177, 1176, 1177, 1178, 1177, 1178, 1178, 1179, 1180, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1200, 1201, 1201, 1202, 1202, 1203, 1204, 1205, 1204, 1205, 1205, 1206, 1206, 1207, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1216, 1217, 1218, 1219, 1220, 1220, 1221, 1228, 1229, 1220, 1221, 1222, 1229, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1232, 1216, 1217, 1223, 1224, 1225, 1232, 1233, 1216, 1217, 1224, 1225, 1233, 1234, 1224, 1225, 1226, 1234, 1227, 1228, 1229, 1229, 1229, 1230, 1239, 1231, 1232, 1233, 1234, 1240, 1241, 1233, 1234, 1235, 1236, 1242, 1233, 1235, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1236, 1237, 1238, 1229, 1230, 1231, 1232, 1233, 1234, 1238, 1245, 1246, 1247, 1237, 1238, 1239, 1240, 1232, 1233, 1234, 1237, 1238, 1239, 1240, 1241, 1242, 1247, 1248, 1239, 1240, 1241, 1242, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1237, 1238, 1239, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1255, 1256, 1257, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1255, 1256, 1239, 1240, 1241, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1256, 1257, 1258, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1242, 1243, 1244, 1245, 1248, 1250, 1251, 1253, 1254, 1256, 1257, 1258, 1259, 1260, 1247, 1248, 1251, 1252, 1253, 1254, 1255, 1242, 1243, 1244, 1245, 1246, 1247, 1251, 1252, 1253, 1254, 1255, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1248, 1249, 1251, 1252, 1254, 1255, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1256, 1257, 1258, 1259, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1255, 1256, 1257, 1258, 1259, 1260, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1248, 1249, 1250, 1251, 1252, 1253, 1257, 1258, 1259, 1260, 1261, 1262, 1265, 1266, 1267, 1268, 1269, 1270, 1249, 1250, 1251, 1252, 1253, 1254, 1257, 1258, 1259, 1260, 1261, 1262, 1266, 1267, 1268, 1269, 1270, 1271, 1250, 1251, 1252, 1253, 1254, 1255, 1259, 1260, 1261, 1262, 1263, 1264, 1266, 1267, 1268, 1269, 1270, 1271, 1253, 1254, 1255, 1262, 1269, 1270, 1271, 1272, 1254, 1255, 1256, 1263, 1264, 1269, 1270, 1271, 1272, 1262, 1263, 1264, 1265, 1266, 1263, 1264, 1265, 1266, 1267, 1264, 1265, 1266, 1267, 1268, 1265, 1266, 1267, 1268, 1269, 1266, 1267, 1268, 1269, 1270, 1268, 1269, 1270, 1271, 1268, 1269, 1270, 1271, 1272, 1270, 1271, 1272, 1270, 1271, 1272, 1273, 1271, 1272, 1273, 1274, 1272, 1273, 1274, 1275, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1281, 1273, 1274, 1275, 1276, 1277, 1281, 1282, 1277, 1278, 1279, 1280, 1282, 1283, 1275, 1276, 1277, 1278, 1281, 1282, 1283, 1271, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1288, 1276, 1277, 1278, 1280, 1282, 1283, 1284, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1289, 1277, 1278, 1281, 1282, 1283, 1284, 1285, 1277, 1278, 1279, 1281, 1282, 1283, 1284, 1277, 1278, 1279, 1281, 1282, 1284, 1292, 1293, 1277, 1278, 1279, 1282, 1283, 1284, 1285, 1286, 1287, 1293, 1294, 1277, 1278, 1279, 1280, 1286, 1287, 1293, 1294, 1295, 1278, 1279, 1280, 1286, 1287, 1288, 1294, 1295, 1296, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1280, 1281, 1282, 1288, 1289, 1290, 1291, 1296, 1297, 1298, 1299, 1281, 1282, 1283, 1289, 1290, 1291, 1292, 1297, 1298, 1299, 1300, 1281, 1282, 1283, 1284, 1290, 1291, 1292, 1293, 1298, 1299, 1300, 1301, 1282, 1283, 1284, 1291, 1292, 1299, 1300, 1301, 1283, 1293, 1284, 1285, 1293, 1294, 1301, 1302, 1303, 1295, 1287, 1288, 1289, 1294, 1295, 1296, 1297, 1298, 1304, 1305, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1294, 1295, 1300, 1301, 1302, 1303, 1304, 1302, 1303, 1304, 1305, 1296, 1302, 1303, 1304, 1305, 1306, 1312, 1313, 1304, 1305, 1306, 1313, 1297, 1304, 1305, 1306, 1307, 1313, 1314, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1315, 1300, 1301, 1308, 1309, 1310, 1316, 1317, 1318, 1300, 1301, 1302, 1309, 1310, 1311, 1317, 1318, 1301, 1302, 1309, 1310, 1311, 1312, 1318, 1319, 1302, 1303, 1310, 1311, 1312, 1313, 1319, 1320, 1303, 1304, 1311, 1312, 1313, 1314, 1320, 1321, 1304, 1305, 1311, 1312, 1313, 1314, 1321, 1322, 1305, 1306, 1312, 1313, 1314, 1315, 1322, 1323, 1306, 1307, 1313, 1314, 1315, 1316, 1322, 1323, 1324, 1314, 1315, 1316, 1317, 1318, 1319, 1310, 1318, 1319, 1311, 1318, 1319, 1320, 1321, 1328, 1311, 1312, 1319, 1320, 1321, 1328, 1329, 1312, 1313, 1319, 1320, 1321, 1322, 1329, 1330, 1313, 1320, 1321, 1322, 1323, 1330, 1331, 1314, 1321, 1322, 1323, 1324, 1331, 1322, 1323, 1324, 1325, 1323, 1324, 1325, 1326, 1325, 1326, 1327, 1328, 1319, 1326, 1327, 1328, 1329, 1320, 1327, 1328, 1329, 1320, 1328, 1329, 1330, 1328, 1329, 1330, 1331, 1329, 1330, 1331, 1332, 1330, 1331, 1332, 1333, 1332, 1333, 1334, 1335, 1332, 1333, 1334, 1335, 1327, 1335, 1336, 1335, 1336, 1337, 1336, 1337, 1338, 1337, 1338, 1337, 1338, 1339, 1340, 1341, 1341, 1342, 1340, 1341, 1342, 1343, 1344, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1352, 1351, 1353, 1351, 1352, 1353, 1354, 1357, 1345, 1346, 1353, 1354, 1355, 1357, 1358, 1362, 1345, 1346, 1347, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1362, 1363, 1346, 1347, 1354, 1355, 1356, 1358, 1363, 1364, 1347, 1348, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1364, 1365, 1352, 1353, 1355, 1356, 1357, 1350, 1358, 1359, 1360, 1353, 1357, 1358, 1359, 1360, 1361, 1362, 1358, 1359, 1361, 1353, 1354, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1369, 1370, 1371, 1354, 1355, 1362, 1363, 1364, 1370, 1371, 1354, 1355, 1356, 1362, 1363, 1364, 1365, 1370, 1371, 1372, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1358, 1359, 1360, 1361, 1367, 1368, 1375, 1376, 1377, 1378, 1367, 1368, 1369, 1370, 1371, 1360, 1361, 1362, 1363, 1368, 1369, 1370, 1371, 1372, 1377, 1378, 1379, 1363, 1364, 1365, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1379, 1380, 1381, 1362, 1363, 1364, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1379, 1380, 1381, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1364, 1365, 1366, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1389, 1371, 1372, 1373, 1374, 1375, 1381, 1387, 1388, 1389, 1390, 1391, 1373, 1374, 1382, 1383, 1390, 1373, 1374, 1375, 1376, 1380, 1383, 1389, 1390, 1391, 1392, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1383, 1384, 1385, 1386, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1376, 1377, 1378, 1379, 1380, 1386, 1392, 1393, 1394, 1395, 1396, 1375, 1376, 1381, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1397, 1378, 1379, 1380, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1395, 1396, 1382, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1398, 1380, 1381, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1384, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1383, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1385, 1386, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1402, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1386, 1387, 1388, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1402, 1403, 1404, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1402, 1403, 1404, 1405, 1406, 1387, 1388, 1389, 1390, 1391, 1397, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1390, 1391, 1398, 1399, 1406, 1407, 1390, 1391, 1392, 1397, 1398, 1399, 1400, 1401, 1406, 1407, 1408, 1398, 1399, 1400, 1401, 1402, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1394, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1410, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1402, 1403, 1404, 1405, 1404, 1405, 1406, 1407, 1408, 1406, 1407, 1408, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1410, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1415, 1416, 1417, 1415, 1416, 1417, 1418, 1419, 1425, 1418, 1419, 1420, 1418, 1419, 1420, 1421, 1420, 1420, 1421, 1422, 1423, 1422, 1421, 1422, 1423, 1424, 1425, 1424, 1423, 1424, 1425, 1426, 1427, 1426, 1425, 1426, 1427, 1428, 1426, 1427, 1428, 1429, 1428, 1429, 1430, 1431, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1422, 1423, 1424, 1431, 1438, 1439, 1440, 1423, 1424, 1432, 1440, 1424, 1425, 1433, 1440, 1441, 1442, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1433, 1434, 1435, 1436, 1437, 1438, 1436, 1437, 1438, 1435, 1436, 1437, 1438, 1437, 1438, 1439, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1438, 1439, 1440, 1441, 1438, 1439, 1440, 1441, 1442, 1443, 1442, 1443, 1444, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1443, 1444, 1445, 1443, 1444, 1445, 1446, 1446, 1447, 1448, 1449, 1440, 1448, 1449, 1448, 1449, 1450, 1451, 1448, 1449, 1450, 1451, 1452, 1451, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1451, 1452, 1453, 1454, 1455, 1456, 1453, 1454, 1455, 1454, 1455, 1456, 1457, 1458, 1459, 1454, 1455, 1457, 1456, 1457, 1458, 1459, 1460, 1461, 1459, 1457, 1458, 1459, 1460, 1461, 1462, 1461, 1462, 1463, 1463, 1464, 1465, 1466, 1464, 1465, 1466, 1467, 1464, 1465, 1466, 1467, 1468, 1467, 1466, 1467, 1468, 1469, 1470, 1469, 1471, 1467, 1468, 1469, 1470, 1471, 1472, 1469, 1470, 1471, 1472, 1473, 1472, 1473, 1471, 1472, 1473, 1474, 1475, 1473, 1474, 1475, 1476, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1482, 1483, 1484, 1485, 1486, 1483, 1484, 1485, 1486, 1487, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1485, 1486, 1487, 1488, 1487, 1488, 1489, 1490, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1491, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1493, 1494, 1495, 1492, 1493, 1494, 1495, 1495, 1495, 1496, 1497, 1498, 1497, 1498, 1499, 1500, 1500, 1501, 1502, 1503, 1504, 1504, 1505, 1505, 1506, 1497, 1498, 1499, 1500, 1501, 1507, 1513, 1514, 1515, 1516, 1517, 1498, 1499, 1500, 1501, 1502, 1503, 1507, 1508, 1509, 1510, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1509, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1500, 1501, 1502, 1503, 1504, 1508, 1509, 1510, 1511, 1512, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1501, 1502, 1503, 1504, 1505, 1506, 1509, 1510, 1511, 1512, 1513, 1517, 1518, 1519, 1520, 1521, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1512, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1513, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1512, 1513, 1514, 1515, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1513, 1514, 1515, 1516, 1517, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1514, 1515, 1516, 1517, 1518, 1519, 1508, 1509, 1510, 1511, 1512, 1518, 1524, 1525, 1526, 1527, 1528, 1509, 1510, 1511, 1512, 1513, 1514, 1519, 1525, 1526, 1527, 1528, 1529, 1530, 1509, 1510, 1511, 1512, 1513, 1514, 1520, 1525, 1526, 1527, 1528, 1529, 1530, 1512, 1513, 1514, 1515, 1521, 1527, 1528, 1529, 1530, 1531, 1514, 1522, 1513, 1514, 1515, 1516, 1517, 1523, 1529, 1530, 1531, 1532, 1533, 1524, 1518, 1523, 1524, 1525, 1526, 1527, 1534, 1517, 1518, 1519, 1526, 1533, 1534, 1535, 1518, 1519, 1520, 1527, 1534, 1535, 1536, 1519, 1520, 1528, 1535, 1536, 1529, 1530, 1531, 1530, 1531, 1532, 1533, 1534, 1533, 1534, 1533, 1534, 1535, 1536, 1537, 1534, 1535, 1536, 1537, 1538, 1535, 1536, 1537, 1538, 1539, 1536, 1537, 1538, 1539, 1538, 1539, 1540, 1541, 1540, 1541, 1540, 1541, 1542, 1541, 1542, 1543, 1542, 1543, 1544, 1543, 1544, 1543, 1544, 1545, 1546, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1555, 1556, 1557, 1558, 1558, 1559, 1560, 1561, 1560, 1560, 1561, 1562, 1562, 1561, 1562, 1563, 1564, 1565, 1564, 1565, 1566, 1565, 1566, 1567, 1568, 1569, 1568, 1567, 1568, 1569, 1570, 1571, 1570, 1569, 1570, 1571, 1572, 1573, 1572, 1572, 1573, 1574, 1575, 1576, 1577, 1577, 1578, 1579, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1585, 1586, 1585, 1586, 1587, 1588, 1589, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1596, 1597, 1598, 1598, 1599, 1598, 1599, 1600, 1599, 1600, 1601, 1600, 1601, 1602, 1601, 1602, 1603, 1602, 1603, 1604, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1630, 1631, 1632, 1638, 1639, 1640, 1646, 1647, 1648, 1649, 1640, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1641, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1642, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1643, 1648, 1649, 1650, 1651, 1652, 1653, 1644, 1636, 1637, 1638, 1639, 1645, 1652, 1653, 1654, 1655, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1758, 1759, 1766, 1774, 1775, 1767, 1759, 1760, 1768, 1775, 1776, 1769, 1770, 1771, 1772, 1773, 1765, 1766, 1767, 1768, 1774, 1781, 1782, 1783, 1784, 1775, 1767, 1768, 1769, 1776, 1783, 1784, 1785, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1900, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2009, 2017, 2025, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2028, 2029, 2030, 2031, 2032, 2029, 2030, 2031, 2032, 2033, 2031, 2032, 2033, 2034, 2033, 2033, 2034, 2035, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2084, 2085, 2086, 2086, 2086, 2087, 2088, 2088, }; +static const float prec_correctionMatrix[29708] = { -4.86586309023095964e-08, -6.51431548703840235e-08, 4.6523584273927554e-07, 1.68667872912919847e-06, 2.37164567806757987e-06, 1.60866784426616505e-06, 5.06628680341236759e-07, -2.05787983986738254e-07, -3.49125684806494974e-07, 3.55931319973024074e-07, -5.10185418534092605e-06, -2.36471441894536838e-05, 0.999963819980621338, -2.36471441894536838e-05, -5.10185418534092605e-06, 3.55931319973024074e-07, -3.49125684806494974e-07, -2.05787983986738254e-07, 5.06628680341236759e-07, 1.60866784426616505e-06, 2.37164567806757987e-06, 1.68667872912919847e-06, 4.6523584273927554e-07, -6.51431548703840235e-08, -4.86586309023095964e-08, -5.85320734103333962e-08, 4.0207378759760104e-08, -6.96740940497875272e-08, -6.16935551533970283e-08, 7.1420188874071755e-08, -5.83230352901864535e-08, -1.24528156675296486e-07, 6.40039914401313581e-08, 4.97526428944183863e-08, 6.21819111756849452e-08, -8.94763161340961233e-08, -7.04486851077490428e-08, 7.71209798244854028e-08, -9.21583662716329854e-08, -9.84976153972638713e-08, 5.23204661817544547e-08, -4.97968102308732341e-08, -5.12599882540598628e-08, 6.46873417053939193e-08, 1.02617029540397198e-07, -9.91506396985641913e-08, 6.23415701284102397e-08, 5.11360731536569801e-08, 6.77227731671337096e-08, -6.73078304203045263e-08, -4.98088077449665434e-08, 6.9417268377947039e-08, 6.94537831691377505e-08, 4.70132555108193628e-08, 6.48697664473729674e-08, 7.14459673645251314e-08, -7.12903798216757423e-08, -3.94711143769654882e-08, 1.04451785887249571e-07, 2.03675341481357464e-07, 2.37463027019657602e-07, 1.20447339213569649e-07, -7.5007768884916004e-08, -1.71237360291343066e-07, -1.27894338675105246e-07, 4.46620589400481549e-08, -5.69646232406739728e-08, -8.78322197195302579e-08, -1.03862362266227137e-07, -9.0467558777618251e-08, -5.68862503769196337e-08, -4.38350156173328287e-08, -6.38628918636641174e-08, -7.44224237791968335e-08, -2.80120815432383097e-08, 7.02179008271741623e-08, 9.82456924703001278e-08, -6.76452103220981371e-08, 5.20456886476949876e-08, 9.3253291311157227e-08, 6.47631068773080187e-08, 4.48272743369670934e-08, 8.42651033394758997e-08, -6.82033771681744838e-08, -7.02877329672446649e-08, -2.86911294722358434e-08, -6.60588739265222102e-08, -8.02468278493506659e-08, -4.01338269284678972e-08, -6.17761273247197096e-08, -8.34272739780317352e-08, 1.36510124093547347e-07, 1.2490865231029602e-07, 7.62671490406319208e-08, 1.06049888870529685e-07, -1.89349350421252893e-07, -2.16848320633289404e-07, 1.52607483983047132e-07, 6.89010107635112945e-07, 7.69562916502763983e-07, 6.04370100631967944e-08, -4.70800074481303454e-07, 6.04370100631967944e-08, 7.69562916502763983e-07, 6.89010107635112945e-07, 1.52607483983047132e-07, -2.16848320633289404e-07, -1.89349350421252893e-07, 1.06049888870529685e-07, 7.62671490406319208e-08, 1.2490865231029602e-07, 1.36510124093547347e-07, -8.34272739780317352e-08, -6.17761273247197096e-08, -4.01338269284678972e-08, 9.86733965646635625e-08, -1.99882336460177612e-07, -3.54479112729677581e-07, -2.77517898439327837e-07, -7.69556038449081825e-07, 2.86389393977515283e-07, 1.77506433374219341e-06, 7.64514993534248788e-07, -2.54436668001289945e-06, -1.00000298023223877, 3.23355550335691078e-07, 1.28755368677957449e-06, -4.13964045264947345e-07, -6.27042993528448278e-07, 9.65929700669221347e-08, -4.00927035570930457e-07, -3.65112242661780328e-07, -1.47922492033103481e-07, -6.50365663545926509e-08, -5.81256358600512613e-08, -8.29860411499794282e-08, -5.22085521481585602e-08, 9.90638042708269495e-08, -1.28784407138482493e-07, 1.05806840622335585e-07, -9.27819669982454798e-08, -7.79403563910818775e-08, 1.46539235856835148e-07, 5.96880838088509336e-08, -1.28971038293457241e-07, 1.45646453120207298e-07, -9.37780555432254914e-08, 1.60877618782251375e-07, -5.50337766469510825e-08, -1.29855180830418249e-07, 1.45491270586717292e-07, 1.04580749393790029e-07, -1.49712334973628458e-07, -1.04872569295366702e-07, 7.77013156039174646e-08, 5.11521278667714796e-08, -1.16266853922297742e-07, 4.79731454561260762e-08, 5.98334892742968805e-08, -4.96706107355748827e-08, -6.6262764164548571e-08, -3.5760322703026759e-08, 5.66873303853299149e-08, -7.04091860370681388e-08, -6.62771668658024282e-08, 4.33070894700904319e-08, 6.52185079275113821e-08, -7.41161159112380119e-08, -9.88225679066090379e-08, 1.67984836707546492e-07, 5.83350932004123024e-08, -1.76804689999698894e-07, 1.14944782581005711e-07, 5.16302485209507722e-08, -6.24912033231339592e-08, -6.58673826592348632e-08, 4.52919266535900533e-08, 1.19254750075015181e-07, 7.19343589139498363e-08, -5.85308050915500644e-08, -8.72431087373115588e-08, 7.18568884394699126e-08, 7.61211751409973658e-08, -1.18855489006364223e-07, 3.06357748058871948e-08, 6.55822631756564078e-08, -9.17751563633828482e-08, 5.1196160200106533e-08, 9.76696767907014873e-08, -6.95132555961208709e-08, -1.26897376162560249e-07, -9.76623582005231583e-08, 8.15077854099399701e-08, 2.43602869431924773e-07, 3.24262799722419004e-07, 2.13142655525189184e-07, -1.62763029720736085e-07, -1.20277292126047541e-07, 3.96967436699924292e-08, -2.95161584062952898e-08, -3.85099205857386551e-08, -1.64101443544950598e-08, 3.0584306642822412e-08, 2.59331631724535328e-08, -6.0240076038553525e-08, 2.41672051259911314e-08, 3.94772214917793463e-08, 7.41341921184357489e-08, 3.93400370057861437e-08, -5.74495544469755259e-08, -8.48074961368183722e-08, 6.19117912492583855e-08, 6.14656912034661218e-08, 6.63433894487752696e-08, -3.03152383196447772e-08, -8.68908145434943435e-08, 9.46662552792076895e-08, -4.86282587530695309e-08, -6.458222401306557e-08, -5.56388926042927778e-08, 9.82128298687712231e-08, -8.4230265429141582e-08, -6.02661245352464903e-08, 1.30994180835841689e-07, 1.12273852437283495e-07, -1.4193710740073584e-07, 8.95461624850213411e-08, 5.94290590072432678e-08, -9.36639921178539225e-08, -9.62208446253498551e-08, 7.54741549258142186e-08, 8.97557157486517099e-08, -5.26780787879488344e-08, -1.47476782785815885e-07, -7.70652377468650229e-08, 4.01780262393458543e-08, 6.40457784584214096e-08, 4.88220308625386679e-08, -1.43440843203279655e-07, -7.35206384661069023e-08, 4.9364590637424044e-08, 6.10431953873558086e-08, 6.27803515840241744e-08, 1.09931299618892808e-07, -1.86745353403239278e-07, -6.12185786508234742e-08, 1.61435451673241914e-07, 1.69838642705144593e-07, -4.34333003340725554e-07, -7.35405876639561029e-07, -2.28825271619825799e-07, 8.03119633019377943e-07, 1.29783859392773593e-06, 2.32577278325152292e-07, -1.35069240059237927e-06, -1.05119704585376894e-06, 6.64888887058623368e-07, 1.28349995520693483e-06, 5.13728139139857376e-07, -3.07994667991806637e-07, -4.69272009695487213e-07, -1.4493436140128324e-07, 5.25103516224589839e-08, 1.4904274792115757e-07, 2.77358992661902448e-07, 1.27874912436709565e-07, -1.06529455479176249e-07, -1.29164760664934875e-07, 9.40043989317018713e-08, 7.27582900594825333e-08, 1.21630719718268665e-07, -8.33111784004358924e-08, -8.25622521460900316e-08, 3.94434600536897051e-08, 1.27555495055275969e-07, 3.54272088998186518e-07, 1.05460674149071565e-06, 1.96372457139659673e-06, 1.17180456982168835e-06, -4.46385143959560082e-07, -1.17713383929185511e-07, 1.34105175675358623e-06, 1.56907890414004214e-06, 2.79611384712552535e-07, 6.0660659073619172e-07, 1.00000381469726562, 4.23676510763471015e-06, 8.14718760011601262e-07, -7.44338137792510679e-07, -5.56590435962789343e-08, 1.30047638435826229e-07, 1.91845458630268695e-07, 1.06696347756951582e-06, 1.76884805114241317e-06, 1.24476457585842581e-06, 3.11354284576736973e-07, -7.15582544330573e-08, -6.21113258603145368e-08, -4.90488609727890434e-08, -5.35629709474960691e-08, -7.97301922261794971e-08, -6.76401938903836708e-08, 1.24177674365455459e-07, -1.11158612980943872e-07, 6.84795011807182163e-08, 5.93732814024861e-08, -1.36215490442737064e-07, 1.07297985607601731e-07, -9.02816310599519056e-08, 1.28151526723740972e-07, -1.56660675543207617e-07, 7.31637825879261072e-08, 1.47272771755524445e-07, -9.36922077698909561e-08, -1.25332235256792046e-07, 8.57463788861423382e-08, -2.69603948055419096e-08, 5.08039690316763881e-08, 4.56775346435733809e-08, -5.49719487707989174e-08, -9.26474115203745896e-08, 1.12815754960138293e-07, 1.02942337321110244e-07, -1.06795333465470321e-07, -8.18230248000872962e-08, 1.010670374057554e-07, 7.63614522725220013e-08, -4.93306941962146084e-08, -6.35234442825094447e-08, 6.96596842431063124e-08, 7.71753931871899113e-08, -5.80796921667570132e-08, 1.80772712354837495e-08, 2.92771566989813437e-08, -6.16052275859146903e-08, 4.75714152514683519e-08, -6.0981946603533288e-08, -8.82342661157053954e-08, -6.88442938212574518e-08, 1.23891439329781861e-07, 1.75549601522106968e-07, 9.88867228102208173e-08, -9.97028664073695836e-08, 5.23965653087543615e-08, 5.66207987162670179e-08, -6.52346230367584212e-08, -3.76995856754547276e-08, -6.82843719346237776e-08, -5.05408301876286714e-08, 6.69993767132837093e-08, -4.56688482586287137e-08, -7.27224431784634362e-08, 8.8245634799477557e-08, 1.15412639445366949e-07, -9.1416040959302336e-08, -5.9848545674867637e-08, 6.43781561393552693e-08, 7.8215840915163426e-08, -6.07253625162229582e-08, -6.72841622417763574e-08, 5.71326452813991637e-08, 1.19931399922279525e-07, -9.18858802378963446e-08, -7.39444416808510141e-08, 8.37052596125431592e-08, 7.65345049558163737e-08, -7.28764462110120803e-08, -7.07860365878332232e-08, 7.48496020719358057e-08, 1.60232303869634052e-07, -1.16559704110841267e-07, -9.45490725712261337e-08, 1.13624132325185201e-07, 1.85788621820393018e-07, 7.07509784092508198e-08, 8.29585076189687243e-08, 1.55925476974516641e-07, -2.13677736837780685e-07, -7.44224109894275898e-07, -5.56439204046910163e-07, 3.9893077996566717e-07, 1.18181424113572575e-06, 6.83763971665030112e-07, -8.58037196849181782e-07, -1.37617689688340761e-06, -6.81964920090649684e-08, 1.07544644833978964e-06, 7.62741819926304743e-07, -7.02272942021409108e-08, -4.17347422398961498e-07, -2.40527526784717338e-07, -5.5241393681626505e-08, -8.86414781575695088e-08, 1.90630160545879335e-07, 1.57984416659928684e-07, -6.25328695491589315e-08, -1.466860481968979e-07, 1.2674691163283569e-07, 9.04027999126810755e-08, -3.21569011418887385e-08, -6.24128801973711234e-08, 7.76435271632180957e-08, 9.98244118477487064e-08, -2.01053950377172441e-07, -7.61221556899727148e-08, -6.62392309891401965e-08, -7.90912793036113726e-07, -5.04867273320996901e-07, 9.20432455586706055e-07, 1.61304228640801739e-06, 5.73235467982158298e-07, -1.50940854837244842e-06, -1.48450749293260742e-06, -0.999999701976776123, 1.27748748468548001e-07, -7.96070025899098255e-07, -2.86809751059990958e-07, 1.46684911328520684e-07, -1.64036606520312489e-07, -2.22209123990069202e-07, -2.07726031931088073e-07, -1.52920136997636291e-07, -1.36043524889828404e-07, -8.66287876988280914e-08, -4.04645703611095087e-08, 5.58747110801505187e-08, -7.90190028965298552e-08, -6.95100581538099505e-08, 1.01032377131105022e-07, -1.11151678083842853e-07, 6.50522267164888035e-08, -7.97534056573567796e-08, -7.99284620711659954e-08, 6.25796943154455221e-08, 4.16940615366456768e-08, -7.53771303152461769e-08, 8.81856365708699741e-08, -1.39726381576110725e-07, 1.39699167789331113e-07, -1.23771442872566695e-07, 7.61322098696837202e-08, 5.62581625729308143e-08, -4.72767140990981716e-08, -6.04241989776710398e-08, 5.87152584330397076e-08, 9.508452336604023e-08, -6.64566357500007143e-08, -1.02898461307177058e-07, 5.07076478584167489e-08, 7.34293905679805903e-08, -6.44294644303045061e-08, 4.50421957509661297e-08, -1.57277444401415778e-08, -4.34190390308231144e-08, -4.5193381481567485e-08, 5.57899788589111267e-08, 6.70595809992846625e-08, -1.06374415054233395e-07, -1.10086219251570583e-07, 8.0564987570141966e-08, 4.2407684475165297e-08, -7.12328258600791742e-08, 8.20004046886424476e-08, 4.08031901599770208e-08, -7.63112240065311198e-08, 4.68999274971793056e-08, -5.74575622636075423e-08, 8.45056717935221968e-08, -5.39695577117527137e-08, -7.76805677560332697e-08, 7.45650652334006736e-08, 4.46924097730061476e-08, 4.59729641022477153e-08, 5.69125440108564362e-08, -8.68128040565352421e-08, 5.33316075745915441e-08, 9.75864367092071916e-08, 9.20170748486270895e-08, -8.17732797031567316e-08, -1.43633997140568681e-07, 1.58352506218761846e-07, 9.20465481613064185e-08, 7.79673570150407613e-08, 2.20255202521002502e-07, -5.26671442457882222e-07, -7.18187720849527977e-07, 9.23547645470534917e-07, 9.11867630293272668e-07, -2.74366612984522362e-07, -1.21960579235746991e-06, -6.15027033745718654e-07, 6.09638163950876333e-07, 8.35840182844549417e-07, 1.88159987146718777e-07, -2.85261648969026282e-07, -2.41713507875829237e-07, -7.10860632580079255e-08, -8.97541667654877529e-08, -8.23821935114210646e-08, 1.07874306820576749e-07, 1.77847866211777728e-07, -1.34516469074696943e-07, -8.07082258802438446e-08, 4.02326918447215576e-08, 6.3369398617396655e-08, -8.64252953647337563e-08, 7.16996808591829904e-08, 1.32688469989261648e-07, -1.14557714425700397e-07, 2.61986855321083567e-07, 1.49618017530883662e-06, 1.46802756262331968e-06, 5.01609861203178298e-07, 7.62469483106542611e-07, 1.52848963352880673e-06, 1.09525615243910579e-06, -5.69721805732115172e-07, -4.19441732901759678e-07, 3.207018380635418e-06, 1.00000500679016113, 2.42627766056102701e-06, 2.32753052387124626e-07, 8.09785944966279203e-08, 5.89890944979742926e-08, -8.76787922265975794e-08, 2.06801303193060448e-07, 1.11802717128739459e-06, 1.65842470778443385e-06, 9.93020194073324092e-07, 1.61582832447493274e-07, 3.74807811454047624e-08, -5.85424793086986028e-08, -4.74955257345754944e-08, 6.92758987952402094e-08, -8.6458832981861633e-08, -6.45992770387238124e-08, 4.2367492625317027e-08, -6.83902783293888206e-08, -9.24113763289824419e-08, 1.20202003017766401e-07, -6.54704308544751257e-08, 5.66736098051023873e-08, -5.17855696102742513e-08, 7.29535187815599784e-08, -7.78173898652312346e-08, 7.98157486769923707e-08, -5.9878161096094118e-08, -5.68627704922164412e-08, -1.88713080717661796e-08, -3.04179010868210753e-08, 9.20427467576701019e-08, 9.82178747221951198e-08, -7.08878715727223607e-08, -1.5373011308383866e-07, -1.32865366708756483e-07, 8.15145781984938367e-08, 6.99061430964320607e-08, -5.77993120032260776e-08, -5.16456175603252632e-08, -3.4549976213327227e-09, 1.4666208691949123e-08, 2.79548970638643368e-08, -7.69573418324398517e-08, 5.89504942638541252e-08, 6.31791436944695306e-08, 7.27951459111864096e-08, -4.52375239490265812e-08, 4.4970832391300064e-08, 8.21230798919714289e-08, -1.5556976507014042e-07, -6.48809859171706194e-08, 9.02579060380048759e-08, 8.0593089535341278e-08, 1.71107259916425392e-07, 1.85730954171958729e-07, -2.44545702798859566e-07, -6.83243968069291441e-07, -3.68580771237247973e-07, 5.29387875758402515e-07, 9.07064418242953252e-07, 1.73587608287562034e-07, -8.08027550647238968e-07, -7.84159965405706316e-07, 1.24793729128214181e-07, 6.8211971893106238e-07, 3.84633978001147625e-07, -1.03276427410037286e-07, -1.98170283738363651e-07, -6.80522589391330257e-08, -5.87628754544766707e-08, -9.45369080795899208e-08, 1.63356133953129756e-07, 7.50512967329086678e-08, -8.11491247532103444e-08, -8.53285371249512536e-08, 5.96692757426353637e-08, -7.29771585383787169e-08, -5.22368779343196366e-08, -1.26124945154515444e-07, 1.25332576317305211e-07, -1.59656764253668371e-07, 2.0210700313327834e-07, -7.9747388781470363e-07, -1.80382912162713183e-07, 1.2719497135549318e-06, 1.4412595419344143e-06, 6.54016929502176936e-08, -9.25806716622901149e-07, -1.09487281463316322e-07, 6.33203057986975182e-07, -1.0000002384185791, -6.75382239023747388e-07, -1.42427637683795183e-07, 1.06177253655914683e-07, -4.89995173325041833e-08, -9.39834237101422332e-08, -1.12030953403063904e-07, -3.4338353316343273e-07, -3.58695018576327129e-07, -1.14542352491753263e-07, 3.22793312079738826e-08, -1.9764879510830724e-08, 5.98167986254338757e-08, -4.78933941394643625e-08, -4.99172294610161771e-08, -6.55489671430586895e-08, 2.81923853151511139e-08, 1.27025892027177179e-08, 4.07426270498945087e-08, 3.67712580384704779e-08, -5.38512772152444086e-08, 8.30073858537616616e-08, -3.87267213852737768e-08, -2.32854646675662025e-09, -3.83217972910188109e-08, 5.31049515473114297e-08, 5.01298416111239931e-08, 5.36597539735339524e-08, -5.72605287629812665e-08, -5.55359207510264241e-08, 8.85319337839973741e-08, 8.31825133218444535e-08, 6.94716817406515474e-08, 9.05240540305385366e-08, -1.35703686510169064e-07, -2.04920226565263874e-07, -1.54420789044706908e-07, 6.4601600513469748e-08, 6.91544101982799475e-08, -7.71556543099904957e-08, 3.69031525337959465e-08, -5.53785177714871679e-08, -6.99880828847199155e-08, 4.5034603601834533e-08, -3.63842218575882725e-08, 7.3355224117221951e-08, -7.80808662170784373e-08, -7.35851060085224162e-08, 7.58787734866928076e-08, 1.08230899797945312e-07, 2.05595611646458565e-07, -4.28739753033369198e-07, -5.00664668834360782e-07, 1.09286737881575391e-07, 7.00274711107340408e-07, 4.22038795022672275e-07, -3.79767129743413534e-07, -6.70115582579455804e-07, -1.9053379674005555e-07, 3.72965132555691525e-07, 4.0626539998811495e-07, 6.59029097960228682e-08, -1.22035714866797207e-07, -6.47093685302024824e-08, -9.61523838327593694e-08, 5.45756471126424003e-08, 4.82006150548386358e-08, -1.04419996205251664e-07, -3.62645025120400533e-08, 9.38442283882068295e-08, -6.62379378013611131e-08, -1.84152838755835546e-07, -5.98062754875172686e-08, -8.14138090277083393e-08, 8.03274389227226493e-08, -1.73876543385631521e-07, 2.64184933485012152e-07, -2.24631889977899846e-07, -3.37761832724936539e-07, 8.986202146843425e-07, 1.70450539371813647e-06, 6.61271371882321546e-07, -5.81889594286622014e-07, -3.28634342849909444e-07, 4.40150330405231216e-07, 7.60310143732567667e-08, 0.999999284744262695, -5.04965953496139264e-07, -9.65346771408803761e-08, 1.14484002722292644e-07, 1.11572013850036456e-07, 5.3424159318637976e-08, 3.95289063703785359e-08, 4.720299884297674e-08, 6.5952526995260996e-08, -8.14646341495972592e-08, 6.09005113005878229e-08, 4.92051412948057987e-08, 4.36133404946303926e-08, 5.12315061484969192e-08, -5.85241508588296711e-08, -6.06450925033641397e-08, 9.50507370589548373e-08, 8.58931343827862293e-08, 9.17411497880493698e-08, 1.51826753835848649e-07, 6.71923885420255829e-08, -1.17767172014282551e-07, -2.1607807809687074e-07, -1.56731459810544038e-07, 4.72486547664630052e-08, 4.645404061420777e-08, 2.73004108208851903e-09, -4.31210338547316496e-08, -5.83328265690852277e-08, 1.42596547902940074e-07, 1.06535580357558501e-07, -1.53534088553897163e-07, -3.89633243003117968e-07, -1.88382060173353238e-07, 3.36309113890820299e-07, 4.42360942543018609e-07, -4.30784183436117019e-07, -2.9085214237056789e-07, 7.45530783774484007e-08, 2.42808113171122386e-07, 1.15151244983735523e-07, -4.89817431059691444e-08, -4.8211582281965093e-08, 6.82672407492646016e-08, -5.62520270364075259e-08, 5.22952525727760076e-08, -3.39697763251933793e-08, 6.33510168768225412e-08, -1.2218296774335613e-07, -1.05522225624099519e-07, 1.89723166954536282e-07, -8.61417049691226566e-07, -4.09438683846019558e-07, 1.24147061342227971e-06, 1.22623089282569708e-06, -1.12235987614894839e-07, -3.90677143968787277e-07, 2.06869799512787722e-07, 2.12438393987213203e-07, -6.76279967137816129e-07, -1.00000119209289551, -5.95988467466668226e-07, -1.08440360691020032e-07, -8.39868334878701717e-08, 6.40089865555637516e-08, -2.08136583523810259e-07, -3.44603563462442253e-07, -1.83071250603461522e-07, 4.796347852220606e-08, 5.62962512162812345e-08, -7.68395267414234695e-08, 7.2113905957849056e-08, 7.2525310201854154e-08, 2.58937529196145988e-08, 3.89138783418729872e-08, -7.50241113678384863e-08, -9.17642708486710035e-08, 6.61096350995649118e-08, 6.79762450772614102e-08, 6.92244128686070326e-08, 1.5860783264542988e-07, 1.21990964885299036e-07, -1.87521123962142156e-07, -1.37015035761578474e-07, 5.60133628368930658e-08, 4.42843877124232677e-08, 8.08650568728808139e-08, -1.46282786772644613e-07, -2.20639464032501564e-07, 2.57304236583877355e-07, 1.39651177732957876e-07, -1.54239913285891816e-07, -2.09356613822819781e-07, -5.56781607485845598e-08, 8.77661037179677805e-08, 1.05513571213577961e-07, 5.06129680388767156e-08, -6.15682509419457347e-08, -1.62413670068417559e-07, 2.59672759739260073e-07, -3.55668305473955115e-07, -1.05836238617484923e-06, 1.15538796308101155e-06, 4.82759219266881701e-07, -2.61724750316716381e-07, 2.71810307594932965e-07, 1.25981600263003202e-07, 5.00423595894972095e-08, 1.00000035762786865, 2.98402540011011297e-07, -5.57189885341813351e-08, 5.78721888189193123e-08, 5.01293122567858518e-08, -3.38470549365865736e-08, -9.18346430012206838e-08, 4.63216309753988753e-08, 7.23309909744784818e-08, 3.75568163235584507e-08, -4.91903335841925582e-08, -5.27346415424290171e-08, 1.40178244123490003e-07, 1.49163284390851913e-07, -9.47703000520050409e-08, -6.09741661605767149e-08, 8.64792824017968087e-08, 6.82193359580196557e-08, 5.82593919773444213e-08, -1.54915568373326096e-07, 1.15395955901931302e-07, 5.7775086048650337e-08, -7.35933980422487366e-08, 5.40889395495014469e-08, -1.56648098936784663e-07, -1.13234868592826388e-07, 2.32951506973222422e-07, 1.86084363917871087e-07, -6.83198265960527351e-07, -9.59759063334786333e-07, 5.34589275957841892e-07, -1.20660374136605242e-07, 1.3441707835681882e-07, 1.17311635960959393e-07, -1.32602266944559233e-07, -1.72082323501854262e-07, -1.00000011920928955, -1.09959749750032643e-07, -8.47918357749222196e-08, 5.29072892163640063e-08, -8.85164652686398767e-08, 4.01684623341225233e-08, -5.2117982818344899e-08, -5.45204770219243073e-08, -2.51584015842354347e-08, 8.0248909739566443e-08, 8.4612125306193775e-08, -1.09735019293566438e-07, -6.06166565830790205e-08, 7.22878468195631285e-08, 1.14631340863979858e-07, -7.99549653152098472e-08, -8.44675653866033826e-08, 1.5554793719729787e-07, 1.48341726458056655e-07, -6.61553016811922134e-08, -2.01412206024542684e-07, 1.62197679287601204e-07, 1.37894375029645744e-07, -5.81306842661888368e-08, 1.06234651298109384e-07, -6.80597125324311492e-08, -1.98915785176723148e-07, 1.03931547812408098e-07, 3.64566488997297711e-07, -4.94363519010221353e-08, -6.79274933190754382e-07, -5.26482835994102061e-07, 1.51517255631006265e-07, 2.27524751039709372e-07, -8.13952851785870735e-08, 1.12926038298155618e-07, -1.00901722532853455e-07, 0.999999940395355225, -1.0377705450537178e-07, 4.51513493260335963e-08, 4.66002241239493742e-08, -6.03489951345181908e-08, 4.82002242563339678e-08, 3.77370987791891821e-08, -6.26273930492970976e-08, -6.504142646690525e-08, -1.46024476066486386e-07, -9.72030562707004719e-08, 5.04969008829903032e-08, 1.20376967061019968e-07, 5.64898101629296434e-08, -5.47861702671070816e-08, -5.67831683895292372e-08, -1.58123270921350922e-07, -8.26733597136808385e-08, 1.36946226803047466e-07, 2.65421078893268714e-07, 8.63376286019956751e-08, -2.35011469840173959e-07, -2.4866778858267935e-07, 2.32263644761587784e-07, 1.22383170264583896e-07, -9.52009671095765952e-08, 1.11538078328976553e-07, -1.89562399555143202e-07, 3.62869712944302591e-07, 2.83615747775911586e-07, -2.20673854300912353e-07, -5.28681255218543811e-07, -1.94464192304621974e-07, 1.83608349857422581e-07, -1.02344536401233199e-07, 5.58036887809976179e-08, -7.00159503708164266e-08, 2.20605727463407675e-07, -0.999999701976776123, 1.9067383050241915e-07, 4.64449954051815439e-08, 1.06769766361480833e-08, 4.76042423258604686e-08, -4.37745200088102138e-08, 5.68217828345041198e-08, 3.60657708142753108e-08, -1.08240065799236618e-07, -1.66701667581037327e-07, -1.18481615629661974e-07, 1.07163288021183689e-07, 6.36243555618420942e-08, -7.29812370536819799e-08, 7.41653991553903325e-08, -1.64206085173645988e-07, -1.92689000755308371e-07, 2.87987575120496331e-07, 2.31700639119480911e-07, -1.23705149235320278e-07, -3.33799761165209929e-07, -1.17530461807291431e-07, 2.01263191001999076e-07, 2.25026354883084423e-07, -8.60985807094039046e-08, -6.0374759414116852e-08, 1.29672457660490181e-07, -9.63734834158458398e-08, -1.5356060600879573e-07, 2.69021654730750015e-07, 4.54714012221302255e-07, 1.25881854273757199e-07, -3.23344778507816955e-07, -3.09615217020109412e-07, 1.19339532034246076e-07, 1.35385235466856102e-07, -1.06988956360964949e-07, -7.73023671740702412e-08, -3.21294805871730205e-07, 0.999999523162841797, -3.50109218061334104e-07, -1.30741071302509226e-07, -3.98042594440539688e-08, 5.73086644806153345e-08, -3.78644458010057861e-08, 9.25961458619894984e-08, 9.04912695887105656e-08, -1.04847345028247219e-07, -1.59475646910323121e-07, -1.08688226418962586e-07, 9.34189685608544096e-08, 7.08986291897417686e-08, -7.24937265772496175e-08, -6.86482408696065249e-08, -1.23660841566675117e-08, 8.00553152657812461e-08, 7.06447522702546848e-08, -8.75447128123596485e-08, -2.27404058250613161e-07, -9.67469730994707788e-08, 2.13705448004475329e-07, 3.05839080283476505e-07, -2.94446152793170768e-07, -2.55650348890412715e-07, 4.53745769846136682e-08, 2.08282500580025953e-07, 9.62615800403909816e-08, -8.07638116384623572e-08, 7.1575154692027354e-09, 1.01603504276681633e-07, -1.75700463955763553e-07, 1.07201799437461887e-07, 5.21874824244150659e-07, 4.0800793499329302e-07, -8.60371400790427288e-08, -3.176897394041589e-07, 1.74965762766987609e-07, -1.19707124213164207e-07, 1.26083662621567782e-07, 4.90994636948016705e-07, -0.999999344348907471, 3.76085978359697037e-07, 8.67967671069891367e-08, -1.08217204086713537e-08, -2.79271823444560141e-08, 7.15818018193203898e-08, 4.59521132256668352e-08, -4.86930389342887793e-08, 8.57849684621214692e-08, 6.82837892895804544e-08, 5.52142154219836812e-08, 7.89957965707799303e-08, -1.37767884211825731e-07, -1.77587637040232948e-07, -1.05722158139087696e-07, 6.89963925992742588e-08, 5.22111420764304057e-08, -8.27102937250856485e-08, 8.17885066339840705e-08, -1.81495707352041791e-07, -1.95533957025872951e-07, 5.91879469880041142e-08, 2.77800353387647192e-07, 1.4259484260037425e-07, -1.67782630455803883e-07, -2.59400735558301676e-07, -6.79198208786147006e-08, 1.40248744173732121e-07, 1.42547264658787753e-07, -7.23372082234163827e-08, -6.4883771244694799e-08, 8.21584222876481363e-08, -1.44931178169827035e-07, -1.29969052409251162e-07, 4.07365035925977281e-07, 6.52164828807144659e-07, 1.95393255353337736e-07, -2.38957909459713846e-07, -1.1134488886455074e-07, 1.462305192490021e-07, -1.43727234558355121e-07, -8.89529232495078759e-08, -6.95830735253366583e-08, -4.3246279801678611e-07, 0.99999922513961792, -5.42043153473059647e-07, -9.59873247552422981e-08, -1.08709812707274978e-07, -8.24933863441401627e-08, -5.12757232229432702e-08, 8.53463149041999714e-08, 6.15343438425952627e-08, -4.14891019318019971e-08, -3.92828169992753828e-08, 9.37504154308044235e-08, 7.27453368654096266e-08, 7.3304292413922667e-08, 1.41416578003372706e-07, -8.96298715247212385e-08, -1.5510336481838749e-07, -8.0172192440386425e-08, 5.9259789964016818e-08, 2.36429702482610082e-08, 6.83722589656099444e-08, -7.01065090424890514e-08, -1.67481516655243468e-07, -6.60333370205989922e-08, 1.61828992872870003e-07, 1.88488556318588962e-07, -1.87581051136476162e-07, -1.19772707307674864e-07, 1.09223172728434292e-07, 5.06870634353617788e-08, -5.16171496656170348e-08, 8.02503379304653208e-08, -3.20248062735117855e-07, 6.4300257918148418e-07, 5.37360165253630839e-07, -5.88616408947473246e-08, -1.60856458819580439e-07, 7.04507669979648199e-08, 1.07724254405638931e-07, -1.27958145412776503e-07, -6.3634509217536106e-08, -5.23855987921706401e-07, -1.00000083446502686, -4.91435685034957714e-07, -7.65439054362104798e-08, -7.72715509356203256e-08, -7.08456724396455684e-08, 8.83691910757988808e-08, 7.50469553167931736e-08, -5.88001007884031424e-08, -6.90485819632158382e-08, 6.58959038446482737e-08, 5.53951977622091363e-08, 1.23368749882502016e-07, 9.50772900409901922e-08, -5.02400894220045302e-08, -1.28250562170251214e-07, -4.88804872134096513e-08, 6.18119599948840914e-08, 8.32666771088952373e-08, -7.51126876252783404e-08, -1.05161369390316395e-07, 1.18953018102274655e-07, 5.54716557132906019e-08, -7.97165284893708304e-08, -9.9691320087913482e-08, 6.00070677592157153e-08, -8.04068136517344101e-08, 1.17884056294315087e-07, -1.92903954143730516e-07, -5.2084072876823484e-07, 5.63204821446561255e-07, 2.33538472116379126e-07, -1.21623415338945051e-07, 1.00274441194869723e-07, -4.87962310558032186e-08, 6.90376893430766359e-08, 9.80301777531167318e-08, 2.6801740204973612e-07, 1.0000004768371582, 3.99227246816735715e-07, 1.12385592387909128e-07, -9.42727638175711036e-08, 5.7920846785464164e-08, 6.87812757860228885e-08, -5.28721812997900997e-08, -2.75621019341087958e-08, -1.88727646843744878e-08, -2.73539537687383927e-08, 7.96208681208554481e-08, 6.6871713499949692e-08, -1.2895617373942514e-07, 8.59722817381225468e-08, 9.89046426980166871e-08, -6.5797365778053063e-08, 6.2985080262478732e-08, -7.55013829234485456e-08, -6.08707964033783355e-08, 1.21466513292034506e-07, 8.72199947821172827e-08, -3.75795735862993752e-07, -5.08250707298429916e-07, 2.90700739924432128e-07, -7.13027006327138224e-08, 5.08796347276074812e-08, 5.30291544009742211e-08, -7.39817949124699226e-08, -1.40444043950083142e-07, -1.19974018275570415e-07, -1.00424713878055627e-07, -6.13174151453677041e-08, 5.71897622592132393e-08, -1.52147819676429208e-07, -4.19146914509838098e-07, -1.0000004768371582, -3.45586641969930497e-07, -1.06428934998348268e-07, -8.29873769703226571e-08, -1.61284560817875899e-07, -1.29316248376198928e-07, 5.81896948403937131e-08, -7.99702277731739741e-08, 5.20890566235721053e-08, -6.0763547082842706e-08, 4.44596643944805692e-08, -6.59170282801824214e-08, -6.74997480132333294e-08, -1.33199009155759995e-07, 1.07836008567119279e-07, 1.31906745082233101e-07, 7.31253706476309162e-08, 6.95542397011195135e-08, -1.1632864271859944e-07, 6.93959094633100904e-08, 5.56490533654141473e-08, -1.10017154497654701e-07, 5.96146279008280544e-08, 1.99381460674885602e-07, -3.96187346041187993e-07, -2.9616001029353356e-07, 8.79490897887080791e-08, 1.23559274811668729e-07, -5.40175832952627388e-08, 5.73497764833064139e-08, 5.80851242659718991e-08, 8.0034801896999852e-08, 3.45435864801402204e-07, 1.0000004768371582, 3.41335038456236362e-07, 9.26517103039259382e-08, 1.04710672133023763e-07, -5.00677792558690271e-08, 5.6549492200019813e-08, 3.92304251306541119e-08, -6.39256185763770191e-08, -1.00764381727458385e-07, -1.64601630103788921e-07, -9.07434767327686131e-08, 6.77253453318371612e-08, 1.26228613339662843e-07, 4.41168097609079268e-08, -7.08686371808653348e-08, -1.1493782636762262e-07, 7.05988654203792976e-08, 1.49027798101997178e-07, -1.13447455873938452e-07, -1.12239099792077468e-07, 1.44763674825298949e-07, 7.38386418674963352e-08, 5.97682259240173153e-08, -1.13579368132832315e-07, 2.12130458976389491e-07, 1.5292917510123516e-07, -1.47568528063857229e-07, -3.11023541144095361e-07, -1.01248055273117643e-07, 1.10620497650870675e-07, -6.67425936740073666e-08, -7.64664775942947017e-08, -1.56004588802716171e-07, -1.02217420305805717e-07, -1.17782185782289162e-07, -1.0000002384185791, -1.21706108302532812e-07, -1.02737381268980243e-07, -1.78952276996824367e-07, -1.17159451917814295e-07, 5.17926892484865675e-08, -3.99740400780501659e-08, -3.76140327773555327e-08, 6.23094678076085984e-08, 3.57470462120090815e-08, -1.22646099498524563e-07, -1.65303220001078444e-07, -9.85979440315531974e-08, 1.17420171363846748e-07, 5.76803529384051217e-08, -8.35917575159328408e-08, -4.9966558890446322e-08, -8.7636308876426483e-08, -1.03629965053642081e-07, 1.73382304069491511e-07, 1.37222500029565708e-07, -7.11493299832000048e-08, -1.93507005974424828e-07, -7.18256245590964681e-08, 1.05030991903731774e-07, 1.13359853060046589e-07, 7.26592688238270057e-08, -6.38683061993106094e-08, -9.20979630336660193e-08, 1.65975961863296106e-07, 2.67397922470991034e-07, 5.85285420129366685e-08, -2.02161814399914874e-07, -1.76866919332496764e-07, 7.89379726029437734e-08, 7.73421220401360188e-08, -6.77549678584909998e-08, 8.11269700307093444e-08, 1.03339736767793511e-07, 1.00000011920928955, 9.17797322586011433e-08, 4.93612972718437959e-08, 2.80446315059634799e-08, -3.50513467139990098e-08, 9.22105911627113528e-08, 8.09835398740688106e-08, -1.07933715298713651e-07, -1.46781275134344469e-07, -8.1806554419472377e-08, 9.92991644466201251e-08, 6.11938801853284531e-08, -8.0845573791066272e-08, -7.16958297175551706e-08, -5.72573064516745944e-08, -1.41303914347190585e-07, -5.9107886585252345e-08, 1.31577664319593168e-07, 1.88528005651278363e-07, -1.66092434028541902e-07, -1.3740624638103327e-07, 1.37297604396735551e-07, 6.3900010616180225e-08, 6.08636057108924433e-08, -1.04274342049848201e-07, 7.54027169591608981e-08, 3.23977246807771735e-07, 2.40132891349276179e-07, -6.21704074887929892e-08, -1.91201024790643714e-07, 1.16686102558105631e-07, -5.30058770209507202e-08, -1.32526906782004517e-07, -1.83981555323953216e-07, -1.17868566462675517e-07, 1.50358260952998535e-07, -0.999999821186065674, 4.98551493421928171e-08, 5.71332563481519173e-08, -1.29928665160150558e-07, -1.61762741868187732e-07, -9.92831488133560924e-08, -2.76158491629985292e-08, 7.24659301454266824e-08, 3.9476869773125145e-08, -4.59192825985610398e-08, 8.41431457843100361e-08, 5.73095420008939982e-08, 4.13415648381487699e-08, 7.00436544320837129e-08, -1.32352894866016868e-07, -1.53376106482028263e-07, -6.63368524556062766e-08, 9.05545078921932145e-08, 6.24102938218129566e-08, -4.73578971593724418e-08, -6.80676421893622319e-08, 5.70427118873340078e-08, -1.04350917240481067e-07, -1.10121895602333097e-07, 1.83573902745592932e-07, 9.50387288867204916e-08, -1.00712895800825208e-07, -1.60221503620050498e-07, 7.12883050368873228e-08, 6.43060573679576919e-08, -4.87330638065941457e-08, -9.91416868600936141e-08, -8.58202042763878126e-08, 2.5895784006024769e-07, 4.07355912557250122e-07, 1.16320890697352297e-07, -1.49139339100656798e-07, -6.56889724837128597e-08, 9.2148241037648404e-08, 0.999999821186065674, -2.15992031371570192e-07, 6.10423285252181813e-08, 7.8295514072124206e-08, -4.822192778419776e-08, 9.01853667301111273e-08, 6.12223658436050755e-08, -4.76097348212078941e-08, -4.00627904184602812e-08, -3.28663247728400165e-08, 9.05374051285434689e-08, 6.12600885574465792e-08, 1.22827501058964117e-07, -8.58668443015631055e-08, -1.28249311615036277e-07, 5.95275864156974421e-08, 7.06619474044600793e-08, -1.49006780247873394e-07, 6.79437519579551008e-08, 9.80837526753930433e-08, -1.17324859161271888e-07, -6.43439079794916324e-08, 9.34230897087218182e-08, 5.08671291754581034e-08, -2.10490185281742015e-07, 4.17950843711878406e-07, 3.45379447708182852e-07, -1.00641564415582252e-07, 6.24261673465298372e-08, -9.39799065236002207e-08, -1.59494859985898074e-07, -9.46311189409243525e-08, -7.57843068299735023e-08, -5.32270746589347254e-07, -1.00000095367431641, -6.22403433681029128e-07, -1.01557034781762923e-07, -8.79876580484051374e-08, -1.4258817770951282e-07, -9.91508031233934162e-08, -6.64364776525872003e-08, 9.16252673732742551e-08, 6.89943107090584817e-08, -5.62820154925702809e-08, -4.70478909164739889e-08, -4.80065160957110493e-08, 7.65700605143138091e-08, 9.35496942133795528e-08, 6.43925091026176233e-08, -6.68051072238995403e-08, -1.14933669692618423e-07, 9.72408003008240485e-08, 9.59945651857196935e-08, -5.05707262732357776e-08, -6.76119711329192796e-08, 8.53498676178787719e-08, -4.24507859975165047e-08, -5.15633153952421708e-08, -5.73143097426509485e-08, 7.77324302703163994e-08, -1.30815280385832011e-07, -3.46032464904055814e-07, 3.76770259435943444e-07, 1.57476634399245086e-07, -7.81599354127138213e-08, 5.64244011513892474e-08, 8.13781895203646854e-08, 5.67024756037426414e-08, -3.28912221903010504e-07, 0.999999523162841797, -2.57406441050989088e-07, -8.99795722375529294e-08, 6.09113683935902372e-08, 6.01935497002159536e-08, -6.50675602287265065e-08, -5.22087582055519306e-08, 5.08147586231189052e-08, -6.62213395230537571e-08, 5.63362867467276374e-08, 4.95730390071003058e-08, -5.48572742786745948e-08, -9.98487479364484898e-08, 1.37428614266354998e-07, 1.25026375030756753e-07, -5.51426317940695299e-08, 8.29446946681855479e-08, 5.78091920999668218e-08, -2.58340776326804189e-07, -3.45852811278746231e-07, 2.02026953388667607e-07, -1.23755881986653549e-07, -1.30591644165178877e-07, 6.22688247631231206e-08, -1.45112224458898709e-07, -5.92242429320322117e-07, -1.0000007152557373, -4.3877105326828314e-07, -1.02631808829301008e-07, -9.28060188698509592e-08, -1.16001956484979019e-07, -5.50195444759538077e-08, 5.51625660705212795e-08, -7.14366166221225285e-08, 4.98451413477596361e-08, -7.13615406766621163e-08, 5.4636984714306891e-08, -7.38314795967198734e-08, -9.1198103291389998e-08, -1.40426550387928728e-07, 1.35682753921173571e-07, 1.49083078326839313e-07, -4.97898078322123183e-08, -4.56045796681792126e-08, 4.76219383926945738e-08, 4.59481483972012938e-08, -7.33026652710577764e-08, 5.55152510628431628e-08, -8.2069760765079991e-08, 1.38020610052080883e-07, -2.78478268000981188e-07, -2.07900484383571893e-07, 6.05880998705288221e-08, 8.58841602280335792e-08, 6.08369390420193668e-08, 6.84920991034232429e-08, 4.14694397932180436e-07, 1.0000007152557373, 5.20552021043840796e-07, 1.32330612245823431e-07, -5.5260091613718032e-08, 3.73175943479964189e-08, 2.55808085825037779e-09, -1.17743134353531786e-07, -1.65729957757321245e-07, -7.16797714517269924e-08, 9.64919095736149757e-08, 1.46846133475264651e-07, -5.38287920903712802e-08, -7.08057754650326387e-08, -6.93411266183829866e-08, 5.17433385027743498e-08, 1.04493999231181078e-07, -7.24313196087678079e-08, -6.78344491689131246e-08, 1.12418319986318238e-07, -5.80659929028115585e-08, 1.50212628113877145e-07, 1.06087384210695745e-07, -1.07420291328708117e-07, -2.22108269554155413e-07, -7.48326627331152849e-08, 7.18258093002077658e-08, -1.6858298579336406e-07, -4.16997977481514681e-07, -1.00000059604644775, -4.09126073463994544e-07, -1.16633245283992437e-07, 6.27389766805208637e-08, -4.46413004340229236e-08, -3.32463692132023425e-08, 6.91161616828139813e-08, 4.06546121212159051e-08, -1.29895241229860403e-07, -1.6188749896173249e-07, -8.26667800879476999e-08, 6.35185770647694881e-08, 1.30537600284696964e-07, -4.24280948152500059e-08, -8.15747682736400748e-08, -4.39305232191600226e-08, -5.62725261943342048e-08, -6.99205600085406331e-08, 1.17945496924676263e-07, 8.91844322836732317e-08, -6.15984987462070421e-08, -1.53912111500176252e-07, 4.74400927430451702e-08, 5.9287266651608661e-08, 3.1886617790632954e-08, -8.51869970119878417e-08, 1.14738277545711753e-07, 1.9050530397635157e-07, -1.46532713074520871e-07, -1.2745707067551848e-07, 4.91814837744186661e-08, 3.91116010689529503e-08, 5.60127801918497426e-08, 2.63027772007262683e-07, 1.00000035762786865, 2.52215187401816365e-07, 9.10749946569922031e-08, 5.67898439385317033e-08, 2.83496852659936849e-08, -3.15414361296006973e-08, 9.58551211738267739e-08, 8.10478439916550997e-08, -1.10952960596932826e-07, -1.40106763524272537e-07, -6.69555717536240991e-08, 9.79814203105888737e-08, 5.19379099728212168e-08, -7.97363242099891067e-08, -6.58778560591599671e-08, -1.33106524913273461e-07, 7.11392686980616418e-08, 1.19859450364856457e-07, -1.23005634122819174e-07, -9.998330341431938e-08, 1.01995183854342031e-07, 5.25078540647427872e-08, -7.1016351910202502e-08, 5.88607136364771577e-08, 2.35854102470511862e-07, 1.71837754692205635e-07, -1.37776282826962415e-07, 7.90339527156902477e-08, -9.73858291786200425e-08, -1.00000011920928955, -7.46792139239005337e-08, -2.37253132695514068e-08, 7.77016779807127023e-08, 3.67456856054104719e-08, -4.33158362511676387e-08, 8.76132801863604982e-08, 5.76701566501469642e-08, 8.14744112176413182e-08, -1.23893116210638254e-07, -1.36813255835477321e-07, 6.17227016164179076e-08, 9.32715238377568312e-08, -3.90328516175486584e-08, -5.53029373406843661e-08, -6.58931185171240941e-08, -7.13122929596465838e-08, 1.35051863026092178e-07, 6.8762496141516749e-08, -7.42710852819072898e-08, -1.18455510289550148e-07, 4.97658376730214513e-08, 4.74793004912044125e-08, -7.24028126342091127e-08, -6.15083166621843702e-08, 1.91230043355972157e-07, 2.97568647056323243e-07, 8.32729654121067142e-08, -1.09279270077422552e-07, 7.37074117296288023e-08, 1.00000011920928955, 7.69071064610216126e-08, 4.92794534068252688e-08, -5.51838184037478641e-08, -4.99929448949387734e-08, 8.48767172101361211e-08, 1.1772544183941136e-07, -8.59035935718566179e-08, -1.15001029143968481e-07, 7.5101119989540166e-08, 6.53427960628505389e-08, -1.04153883739854791e-07, 5.0573035537126998e-08, 7.03938596302577935e-08, -9.07931791971350322e-08, -5.39471258775847673e-08, 5.95471831843497057e-08, -1.58382718495886365e-07, 3.06554596818386926e-07, 2.53506783565171645e-07, -7.34494989274026011e-08, 5.16598106514720712e-08, -0.999999940395355225, -6.15700415096398501e-08, 9.54988266244072292e-08, 6.37539585568447364e-08, -6.65891235485105426e-08, -4.55868125470715313e-08, -4.19649310856584634e-08, 7.88347875868566916e-08, -5.00468999575787166e-08, 8.92680134256806923e-08, 5.92151145895059017e-08, -6.65808386202115798e-08, -9.99005180801759707e-08, 1.19281551747008052e-07, 9.82107692948375188e-08, -6.42153707985926303e-08, 4.43831531526939216e-08, 5.8783065526313294e-08, -9.67279376595797658e-08, -2.56373112961227889e-07, 2.82450770328068756e-07, 1.17459478587988997e-07, -5.79683607782044419e-08, 0.999999880790710449, -8.49926919954668847e-08, 6.56522018971372745e-08, 5.48813083867116802e-08, -7.6546733396298805e-08, 3.16445287751321302e-08, -7.36515417543159856e-08, -4.72171670651277964e-08, -7.59700071739644045e-08, 1.71169062923581805e-07, 1.39064226800655888e-07, -5.69660834059959598e-08, 6.3388810644937621e-08, -1.92059275150313624e-07, -2.52989849514051457e-07, 1.59054721393658838e-07, 7.11273457909555873e-08, -0.999999880790710449, 8.50109600492032769e-08, 5.25386205652011995e-08, -7.71660566556420235e-08, 2.81729342077596812e-08, 2.86997874354710802e-08, -8.84927473521202046e-08, 5.62709487894608174e-08, -7.40290104772611812e-08, -1.02115336630959064e-07, -1.44046708783207578e-07, 1.49721444131500903e-07, 1.52179453039025248e-07, -6.4898586060735397e-08, -5.40071951604659262e-08, -2.14151718580524175e-08, -6.55620624456787482e-08, 1.06927181775517965e-07, -2.09563992825678724e-07, -1.52509386452948092e-07, 7.03400644397333963e-08, -1.15110161402753874e-07, 0.999999821186065674, -9.83942527454928495e-08, -5.95302687145249365e-08, 4.01311801567771909e-08, 2.91362267645922657e-09, -1.24101958931532863e-07, -1.68026375035879028e-07, -6.65556783019383147e-08, 1.02893622511146532e-07, 1.44422031667090778e-07, -6.90529233793313324e-08, -8.05854440955044993e-08, -3.3634382390346218e-08, 8.79248034379997989e-08, -5.2267232319991308e-08, -5.31627719624339079e-08, 7.95533381392488081e-08, -4.529380248641246e-08, 1.1745825645448349e-07, 8.36222540101516643e-08, -8.11117857324461511e-08, -1.71100950296931842e-07, -6.18744238067847618e-08, 4.77915662600025826e-08, 1.05341790401780599e-07, -0.999999821186065674, 1.27752784351287119e-07, 5.6058858888263785e-08, 3.77987028343795828e-08, -7.56342117824715388e-08, -2.9453905980858508e-08, 7.20434769618805149e-08, 4.09015612490293279e-08, -1.29543352045402571e-07, -1.56869347733845643e-07, -7.2251189919825265e-08, 7.16063297545588284e-08, 1.27806615068948304e-07, -5.5673027077318693e-08, -8.95387515242873633e-08, -4.55917792407944944e-08, -4.71933709889071906e-08, -5.62505881873676117e-08, 9.21673901643771387e-08, 7.02667222185482387e-08, -1.2495370071974321e-07, 2.02346530642216749e-08, 3.03629441589237103e-08, -5.74680711906694341e-08, 9.31966823713992198e-08, 1.50348114402731881e-07, -1.12552356767992023e-07, -9.06936605815644725e-08, -1.45103314252992277e-07, 0.999999821186065674, -1.04278264245749597e-07, 6.3752452206244925e-08, 2.9230216469500192e-08, -2.37597799213062899e-08, 1.01967238208544586e-07, -9.91916024872807611e-08, -1.24867980844101112e-07, -4.67256064951016015e-08, 6.41631743292236933e-08, 1.04736535888605431e-07, -7.9011527986949659e-08, -6.24048865915938222e-08, -1.05680939554986253e-07, 5.76786511885529762e-08, 9.80654206728104327e-08, -8.8961201072379481e-08, -7.06336678035768273e-08, 8.77269741295094718e-08, -4.38161791294078284e-08, 1.89570997122245899e-07, 1.36706773901096312e-07, -1.06967796398294013e-07, 5.31836477080105396e-08, 9.22732397157233208e-08, -0.999999821186065674, 1.46020965985371731e-07, 8.51837782533948484e-08, 5.17446210324123967e-08, -4.21016395080187067e-08, -3.38233370200669015e-08, 9.27101879710789945e-08, 8.19158003650954925e-08, -1.1940275612687401e-07, -1.24461195127878455e-07, 7.3712811854420579e-08, 8.86858586568450846e-08, -4.77970409917816141e-08, -5.70154874424133595e-08, 6.5719881092718424e-08, -5.36013651242228661e-08, -5.70292684187734267e-08, 1.08800598752623046e-07, 5.75468952490609809e-08, -5.5724921566024932e-08, -9.22879976883450581e-08, 3.70731463306128717e-08, 3.47042607984349161e-08, -6.64414301354554482e-08, 1.45229236636623682e-07, 2.35225328992783034e-07, 6.68963764383079251e-08, -8.53852455406922672e-08, 5.87873714152920002e-08, -1.04500863074008521e-07, -1.08628285033773864e-07, -4.45078356392514252e-08, 7.88677709806506755e-08, 1.00000011920928955, 8.97089051932198345e-08, -9.06469566075429611e-08, -1.20885346177601605e-07, -8.15574736634516739e-08, 8.33221776019854588e-08, 4.82384265865221096e-08, -6.17712174744156073e-08, -5.09535205139854952e-08, 8.86891626805663691e-08, 1.09076040644140448e-07, -8.85422508645206108e-08, -1.05276946271715133e-07, 8.956965302786557e-08, 6.30327292583388044e-08, -9.42189473107646336e-08, 3.17526698268011387e-08, 5.18595832943447022e-08, -7.0926581940966571e-08, -1.23698214338219259e-07, 2.48683875270216959e-07, 2.03511902441277925e-07, -5.7626262872645384e-08, 1.52436484768259106e-07, 2.68031584482741891e-07, 1.96536646512868174e-07, 2.1515926107440464e-07, -0.999999701976776123, 1.61973972012674494e-07, 1.67820118690542586e-07, 2.50376814392438973e-07, 1.8917322108791268e-07, 7.10963874439585197e-08, -5.75922705081666209e-08, 1.00420976423265529e-07, 6.11211063983319036e-08, -7.59742277978148195e-08, 2.54715804004490565e-08, -6.03454353154120327e-08, 9.33578689910063986e-08, -4.94268945772091683e-08, -7.24785920169779274e-08, 1.44274906688224291e-07, 1.03487039382343937e-07, -7.78214683805344976e-08, -2.05009314413473476e-07, 2.26257498070481233e-07, 9.43316607049382583e-08, 0.999999880790710449, -1.14648614157886186e-07, -7.99365835746357334e-08, -8.39590867940387398e-08, -8.11830886959796771e-08, 7.07929643795068841e-08, 5.23825285370094207e-08, -8.51696171366711496e-08, 3.22576738653879147e-08, -7.52181890106840001e-08, -5.79719241500242788e-08, -7.63926948366133729e-08, 1.87555016850637912e-07, 1.42552949000673834e-07, -7.08972223151249636e-08, -1.54501705651455268e-07, -2.05945454467837408e-07, 1.24109689636497933e-07, 4.40450200756004051e-08, 2.12879854188940953e-07, 3.25853676486076438e-07, 2.26260624458518578e-07, 5.67583384736281005e-08, -8.24098904672609933e-08, -1.00000011920928955, -1.31514624968076532e-07, 2.21418915202775679e-07, 3.35442337018321268e-07, 2.27660606810786703e-07, 6.27922318585660832e-08, -6.41484092511745985e-08, 5.01996524349124229e-08, -9.16663509542559041e-08, 5.43338032343854138e-08, -7.434690729724025e-08, -1.11948800451955321e-07, -1.48436257063622179e-07, 1.61100757622989477e-07, 1.53694585947050655e-07, -8.01523114546398574e-08, -6.23195788307384646e-08, -4.69594922947180748e-08, 8.69759517740931187e-08, -1.6663999247157335e-07, -1.18584281949551951e-07, 6.06830923288725899e-08, 1, -1.08734759862727515e-07, -9.07628745494548639e-08, 4.46706991397149977e-08, -9.396631384106513e-08, 5.30196828663065389e-08, -1.28294786350124923e-07, -1.70616658579092473e-07, -6.31004368756293843e-08, 1.0760690827282815e-07, 1.4071618181787926e-07, -8.5772043689757993e-08, -9.17395865940306976e-08, 6.20728499711731274e-08, -4.60339180108348955e-08, -4.89945648496359354e-08, 5.34950466146710824e-08, -3.60225698159410967e-08, 9.64253601409836847e-08, 6.94604409545718227e-08, -6.38298018884597695e-08, -1.3644317675698403e-07, 6.40744843849461176e-08, 2.50661344125546748e-07, 3.5651351026899647e-07, 2.20410797169279249e-07, -0.999999940395355225, 1.01196000912295858e-07, 2.5716673235365306e-07, 3.48330956967402017e-07, 2.48688536430563545e-07, 7.07311684777778282e-08, 6.46198046183599217e-08, 4.19616128510824637e-08, -7.76009301262092777e-08, 7.93091174955407041e-08, -1.24155292269279016e-07, -1.51018582528195111e-07, -6.26721927687867719e-08, 7.92506469338150055e-08, 1.24900452647125348e-07, -7.30476870103302645e-08, -1.04427208214019629e-07, -5.80877745903762843e-08, 5.77465115725317446e-08, -6.48888587306828413e-08, 6.97325930332226562e-08, 6.0817257008238812e-08, -8.0336562291449809e-08, 4.72153445230105717e-08, 7.45146380154437793e-08, 1.2455969056190952e-07, -9.02397658819609205e-08, -7.2285594399090769e-08, -1.22215539022363373e-07, -2.07006706887113978e-07, -1.62805562808898685e-07, -5.02450276940180629e-08, -8.44191134774519014e-08, -3.77374561821852694e-07, 0.999999463558197021, -3.51813952192969737e-07, -1.0525755556045624e-07, -4.96860650400776649e-08, -1.75482625763834221e-07, -2.34070796523155877e-07, -1.77666521494757035e-07, -8.42942426970694214e-08, 7.20539787835150491e-08, 3.4635469603472302e-08, -2.54579504144203383e-08, 9.87911548122610839e-08, -1.00874466113509698e-07, -1.21115093065782276e-07, 6.80055407542567991e-08, 9.44653564260988787e-08, -9.40060402854214772e-08, -6.9123665014103608e-08, -1.02417388347930682e-07, 3.68301726894060266e-08, 7.6339233601174783e-08, -6.78519711527769687e-08, -5.22616971920797369e-08, 7.35781000571478216e-08, -3.59737910571311659e-08, 1.57872051431695581e-07, 1.14660672068112035e-07, -8.70003162845023326e-08, 4.0890732577736344e-08, 5.81891015372093534e-08, 1.57794886490592035e-07, 2.12913022323846235e-07, 1.48632906871171144e-07, 1.07699634099844843e-07, 2.91473611468973104e-07, -0.999999523162841797, 3.25402140788355609e-07, 8.13322031945062918e-08, 2.02109518454562931e-07, 2.83163103631522972e-07, 1.76696531184461492e-07, 6.09898265224728675e-08, 9.43301827760478773e-08, -2.44671465310375424e-08, -3.30841416484872752e-08, 9.11659583380242111e-08, 7.77985889044430223e-08, -1.19705134693504078e-07, -1.17110396047337417e-07, 8.56013429029189865e-08, 8.8308532042447041e-08, -5.56260353334891988e-08, -5.94203974912943522e-08, 6.9438655714293418e-08, -4.08127007744951698e-08, -4.4343806848701206e-08, 9.41874063187242427e-08, -5.52755601290755294e-08, 1.14302594056425733e-07, 1.94821311083615001e-07, 5.71762583945201186e-08, -6.94072710416548944e-08, -1.53674832858996524e-07, -2.16022826293738035e-07, -1.56232928816280037e-07, -6.28478176167845959e-08, -8.29087056786192989e-08, -2.37723767781972128e-07, 0.999999642372131348, -2.62990511146199424e-07, -9.22166876193841745e-08, -6.54604122019009083e-08, -1.72771947859473585e-07, -2.72461505801402382e-07, -2.11925510029686848e-07, -7.8780608703254984e-08, 8.81140920228062896e-08, 4.73898325026311795e-08, -6.43084803186866338e-08, -4.66543603749869362e-08, 9.02132271107802808e-08, -3.62998697767125122e-08, 1.08686187161310954e-07, -8.58765147881968005e-08, -9.51361229795111285e-08, 1.02871425156081386e-07, 6.19226057096966542e-08, -7.78864261974376859e-08, 2.63735078220861396e-08, 4.5409056070866427e-08, -5.40680602512111363e-08, -1.00340947994936869e-07, 2.1131539540419908e-07, 1.71617969613180321e-07, 1.69850153497463907e-07, 2.3270337123904028e-07, 1.35211905671894783e-07, 5.95544200621134223e-08, 1.78107484316569753e-07, -0.999999761581420898, 1.52938696373894345e-07, 8.53900345987312903e-08, 8.72747705216170289e-08, 2.22081510514726688e-07, 2.90931041035946691e-07, 1.99680812329461332e-07, 6.34336672078461561e-08, -5.59357253848702385e-08, 1.03215029412240256e-07, 5.49951053585573391e-08, -1.01870647029045358e-07, 3.27836957580984745e-08, 2.91491115689268554e-08, -6.51843024002118909e-08, 7.97013228748255642e-08, -6.98037680990637455e-08, -8.0780999667240394e-08, 5.67739064649686043e-08, 1.5756097582197981e-07, 1.11150157522388326e-07, -4.90582579004694708e-08, -6.55457554898930539e-08, -1.7141002217613277e-07, 1.89137068673517206e-07, 7.97332759816526959e-08, -1.86721791806121473e-07, -3.15780738446846954e-07, -2.32536876865196973e-07, -4.42038334824701451e-08, -1.18466644494219508e-07, -4.32870592703693546e-07, 0.999999403953552246, -3.80839480840222677e-07, -1.06857974913054932e-07, -8.10905333992195665e-08, -2.62704730857876712e-07, -3.85271960112731904e-07, -2.92524049427811406e-07, -1.05868842581458011e-07, -8.00672452783146582e-08, 7.34584801875826088e-08, 4.75795332022244111e-08, -1.02419257075325731e-07, 4.57190516556238435e-08, 3.58399852018465026e-08, -7.59878275857772678e-08, -8.46299599288613535e-08, -9.86354962151381187e-08, 5.78456287314565998e-08, 1.894134840085826e-07, 1.41258837516033964e-07, -7.10389969071911764e-08, -2.23349481132117944e-08, -1.28058076143133803e-07, -1.6934838242832484e-07, 1.06804499466761627e-07, 5.74395428998286661e-08, 2.05726948365736462e-07, -0.999999642372131348, 2.89002770159640932e-07, 7.22260580232614302e-08, 5.77740379981150909e-08, 1.36227129132748814e-07, 1.62845566364921979e-07, 1.10791702923052071e-07, -5.27894847834886605e-08, 6.99471272014307033e-08, -5.14887510405515059e-08, -1.00638921196605224e-07, 4.06237816719112743e-08, 5.4848367625481842e-08, -7.07516605302771495e-08, -1.18058807174747926e-07, -1.50475472082689521e-07, 1.70820996459042362e-07, 1.54674168584278959e-07, -9.22583609508365043e-08, -6.82027305742849421e-08, 7.27209368278636248e-08, -1.39485266004157893e-07, -1.02569572391075781e-07, -6.97568651730762213e-08, -2.90483114895323524e-07, -4.0359347508456267e-07, -2.50426126058300724e-07, -5.7078253234976728e-08, 1.11983837314255652e-07, 1.0000002384185791, 1.08882105109842087e-07, -1.11355859644390875e-07, -3.69689217905033729e-07, -5.31817534010770032e-07, -3.73292010635850602e-07, -1.20066772524296539e-07, 4.66484095795749454e-08, -1.06764858287533571e-07, 5.20943679305219121e-08, -1.31372416944941506e-07, -1.71024950645914942e-07, -5.80495793656155001e-08, 1.12798652196488547e-07, 1.37449958970137232e-07, -9.9227683847402659e-08, -9.9731245484235842e-08, 4.40279031010959443e-08, 8.06086575266817817e-08, 5.94129545561372652e-08, -5.20842142748279002e-08, -1.10838826117287681e-07, 1.15651900500779448e-07, 1.03473446699808846e-07, 2.0722525562177907e-07, -0.999999761581420898, 1.4257798852668202e-07, 7.80247617626628198e-08, 1.87809803264826769e-07, 2.73253903060322045e-07, 2.10816423873438907e-07, 8.664451911499782e-08, 7.15300245701655513e-08, 4.26169002309961797e-08, -8.64687308421707712e-08, 7.69906947084564308e-08, -1.23370597293614992e-07, -1.46196029504608305e-07, -5.26764978303617681e-08, 8.73793055689020548e-08, 1.22471661256895459e-07, -8.58793924862766289e-08, -1.12077380265418469e-07, -6.0684264724386594e-08, 5.80935335392496199e-08, 4.62351437136021559e-08, 5.06874577865801257e-08, -4.45313190766682965e-08, 6.3210372047706187e-08, 1.05943740891234484e-07, -7.5095492491072946e-08, -6.46081801392028865e-08, -9.95657671865046723e-08, -1.23432258192224253e-07, -5.47218803603755077e-08, -1.18785976610524813e-07, -4.26356280058826087e-07, 0.999999344348907471, -4.73238003451115219e-07, -1.64116173095862905e-07, -9.39627184948221839e-08, -2.44656064296577824e-07, -3.29959050304751145e-07, -2.38085277715072152e-07, -7.79108120241289726e-08, 5.64928051005608722e-08, 9.45505291838344419e-08, 6.52012630553144845e-08, -3.6329275587831944e-08, -2.63424286828239929e-08, 9.57143413415906252e-08, -9.77556098291643139e-08, -1.09757927191367344e-07, 9.33271735448215622e-08, 1.14665283490467118e-07, -4.86603575211574935e-08, -8.81924364648511983e-08, -6.85296157598713762e-08, 4.96420931028751511e-08, 3.95442150136204873e-08, -5.10733144665209693e-08, 7.65594165841321228e-08, -5.66230653475940926e-08, -4.65302747443274711e-08, 5.8804470626228067e-08, 1.32062595525894722e-07, 9.87514567896141671e-08, -7.33352578663470922e-08, 6.90223487254115753e-08, 1.37776780206877447e-07, 1.34767233817001397e-07, 1.25903142134120571e-07, 3.02154404607790639e-07, -0.999999582767486572, 2.96891784046238172e-07, 1.05406606110136636e-07, 9.99792817424349778e-08, 2.89641093331738375e-07, 3.9027003140290617e-07, 2.87629745798767544e-07, 1.24737383089268405e-07, 7.36968317482933344e-08, 4.2783490528108814e-08, 9.89725137401364918e-08, -2.68480757625866318e-08, -3.3089808226804962e-08, 8.91964901938990806e-08, 7.44126893437169201e-08, -1.19803502229842707e-07, -1.09186913732628454e-07, 9.85383437068776402e-08, 8.80155965887752245e-08, -6.126577289933266e-08, -5.98365090809238609e-08, 6.85779397713304206e-08, -5.81799248777770117e-08, 6.64440733544324758e-08, -5.30197077353022905e-08, 9.43340623393851274e-08, 1.66045666105674172e-07, -5.83574575330203515e-08, -9.61239763341836806e-08, -7.16664345645767753e-08, -2.19893223629696877e-07, 0.999999701976776123, -2.22997641685651615e-07, -6.55179164255059732e-08, -8.07930149449020973e-08, -2.58876440284439013e-07, -3.73407090137334308e-07, -2.57727293728748919e-07, -9.3300982939581445e-08, 6.72885462904559972e-08, -2.76235958551751537e-08, 1.1540517164121411e-07, -5.63358142358083569e-08, -8.98008778449366218e-08, 5.82056145503884181e-08, -4.63046134768774209e-08, 8.96709053677113843e-08, -4.30245847837795736e-08, 1.03787726857262896e-07, -8.80413608683738858e-08, -8.77513315344913281e-08, 1.17164809410041926e-07, 6.18140703068092989e-08, 3.05264542532768246e-08, -8.55834159096957592e-08, 1.79744148454119568e-07, 1.47269872741162544e-07, 2.1282507134401385e-07, 3.06931497107143514e-07, 1.8722809613791469e-07, 4.70735983526537893e-08, -7.66009691233193735e-08, -2.22692818852010532e-07, -1.00000035762786865, -2.15426965155529615e-07, -6.98023114864554373e-08, 1.94824437471652345e-07, 4.68391135655110702e-07, 6.49941512165241875e-07, 4.8416052322863834e-07, 1.66345543561874365e-07, -5.5896823170087373e-08, 6.13518267300605658e-08, -4.94646315019053873e-08, -5.31808055370674992e-08, 1.13511454458148364e-07, 5.95159690419677645e-08, -5.96139884123658703e-08, -1.04680239587651158e-07, 4.6231509287508743e-08, 3.01811375891247735e-08, -7.03220592868092353e-08, 7.17880581646568317e-08, -7.98857513473194558e-08, -7.98952797254059988e-08, 7.11729768454461009e-08, 1.73452164631271444e-07, 1.15274801260056847e-07, -5.94363385175711301e-08, -5.41471045778507687e-08, -1.43301022603736783e-07, 1.64292202953220112e-07, 6.95916710924393556e-08, -6.68376003432058496e-08, -1.2301553908855567e-07, -9.62509147939272225e-08, 6.60222738702032075e-08, 1.81712820790380647e-07, 1.0000002384185791, 1.94774116835105815e-07, -1.39636370022344636e-07, -4.13633642892818898e-07, -5.62052775876509259e-07, -4.18374412447519717e-07, -1.78525937144513591e-07, -2.26539729197838824e-08, -7.43839407846280665e-08, 8.7638518664334697e-08, 5.4963319229273111e-08, -6.05724181923505967e-08, -1.10237060368945095e-07, 3.41454686747511005e-08, 1.62577187268198031e-08, 3.75537041463758214e-08, -7.79428219743749651e-08, -9.73437721540904022e-08, -1.03618589264442562e-07, 6.72201991847032332e-08, 2.03409584287328471e-07, 1.45231325632266817e-07, -8.20711889559788688e-08, -2.35508110790760838e-08, -1.07497974966008769e-07, -1.42750806730873592e-07, 9.33675963210589543e-08, 1.21355824944657797e-07, 1.7382583905600768e-07, 1.37946145173373225e-07, -1.45219786418238073e-07, -4.07437028115964495e-07, -1.00000059604644775, -4.48493437943398021e-07, -1.97632331833119679e-07, 6.50957900916182552e-08, 1.89252801874317811e-07, 4.97192218062991742e-07, 6.95362246005970519e-07, 5.10446454882185208e-07, 1.89011984730313998e-07, -5.45895666448359407e-08, 7.37118313054452301e-08, -5.42743627818254026e-08, -1.03916789839786361e-07, 4.51497363940234209e-08, 5.59680799483430746e-08, -6.93527724138220947e-08, -1.27884376865949889e-07, -1.55793983935836877e-07, 1.82449866770184599e-07, 1.5781986917318136e-07, -1.05214908785455918e-07, -7.45122505918516254e-08, 6.34867873827715812e-08, -1.17469262761460413e-07, -8.58214121990386047e-08, 6.31585876931239909e-08, 1.10877643066942255e-07, 7.85122011848216061e-08, 1, -1.66216324259949033e-07, -4.02186913106561406e-07, -5.20858748132013716e-07, -3.85508343470064574e-07, -1.6940856539804372e-07, -4.3001570304568304e-08, 7.45191641726705711e-08, -4.34701057372421928e-08, -9.12228443894491647e-08, 5.28902255325647275e-08, -1.45246374927410216e-07, -1.87147406904841773e-07, 9.9527198926807614e-08, 1.19597530101600569e-07, -1.19584811386630463e-07, -1.11094486499041523e-07, 7.01734279573429376e-08, 5.32774500072719093e-08, -9.43537443731656822e-08, -5.40490638911705901e-08, -2.52122873689586413e-07, -1.0000004768371582, -3.40999520176410442e-07, -7.90053888977126917e-08, 1.63176025580469286e-07, 5.24526512890588492e-07, 7.36527510980522493e-07, 5.16323837018717313e-07, 1.90399347843595024e-07, 8.90209292947474751e-08, -4.57463507075317466e-08, 6.08449255423693103e-08, 7.17143961992405821e-08, 3.95483432669152535e-08, -8.79007018284028163e-08, 7.642854171763247e-08, -1.2969171336862928e-07, -1.50600243387088994e-07, 8.45533563165190571e-08, 1.09598445874325989e-07, -1.06296056401333772e-07, -1.24253858757583657e-07, -6.42947881601685367e-08, 6.07581753797603596e-08, 4.22342587569346506e-08, -3.53728708546441339e-08, 5.61731248183150456e-08, 9.34416064524157264e-08, -6.35171346630158951e-08, -5.63530413444368605e-08, 6.25838580958770763e-08, 1.63934544161747908e-07, 1.98811193286019261e-07, 1.36326292476951494e-07, 5.87673341101435653e-08, -2.1688568097033567e-07, -7.68610561863170005e-07, 0.999998867511749268, -7.64152048304822529e-07, -2.09104925374958839e-07, -8.71981100658558717e-08, -2.01203562255614088e-07, -4.54606578159655328e-07, -6.59205284136987757e-07, -5.11676489622914232e-07, -1.92351549799241184e-07, -3.88899259462505142e-08, 7.78292985614825739e-08, 5.74897498495374748e-08, -8.8055621461080591e-08, 6.49483027359565313e-08, 4.61160070130972599e-08, 9.34217965209427348e-08, 5.86310342498563841e-08, -4.19232613069198123e-08, -2.6311903766895739e-08, 8.44240517494654341e-08, 5.56240422611153917e-08, -1.22195331186958356e-07, -1.18062004617058847e-07, 1.03160836317783833e-07, 1.17494302287468599e-07, -5.74036320699633507e-08, -9.24074896602178342e-08, -6.83145344737567939e-08, 5.11249211854192254e-08, 3.82612519445046928e-08, -3.70965729246108822e-08, 7.04651199612271739e-08, -4.68292427058258909e-08, 1.13327871531510027e-07, 8.81692514553833462e-08, -6.34292973700212315e-08, -6.18342141933680978e-08, -2.46766035161272157e-07, -3.5632641015581612e-07, -2.37258248603211541e-07, -7.29830489376581681e-08, -1.80210292910487624e-07, -1.0000002384185791, 4.51456401151517639e-08, 2.14499664252798539e-07, 5.04997274219931569e-07, 6.48744787667965284e-07, 4.96188761189841898e-07, 2.05345941139967181e-07, 1.18596652498581534e-07, 2.44081199696211115e-08, -4.14768202006143838e-08, 6.05174790280216257e-08, 1.03261463380022178e-07, -4.88133764520171098e-08, -6.32282208812284807e-08, 7.95943719822389539e-08, -3.39561374573804642e-08, 8.84075177509657806e-08, 7.79075506329718337e-08, -1.23059095358257764e-07, -1.06531906851614622e-07, 1.08807270748911833e-07, 8.69801581870888185e-08, -6.93366786208571284e-08, -6.12791595244743803e-08, 6.78577194435092679e-08, 3.9057272971376733e-08, -4.24944204269195325e-08, 8.63403926132377819e-08, 1.47579783060791669e-07, -5.00780679146828334e-08, 1.07796516601865733e-07, 3.03072056340170093e-07, 4.55472417115743156e-07, 3.41906513767753495e-07, 1.2302119500873232e-07, 1.59870211291490705e-07, 1.00000035762786865, 3.36988449589625816e-07, 1.44825506254164793e-07, -5.31946788839832152e-08, -1.84372154876655259e-07, -5.39513223429821664e-07, -7.13044698841258651e-07, -5.17408295763743808e-07, -2.56269487408644636e-07, -1.13672420809507457e-07, 9.55561105797642085e-08, 7.84838363188100629e-08, -5.36018411878558254e-08, -6.23753280137862021e-08, 3.64911478811791312e-08, 2.31845884712811312e-08, -5.59783437381611293e-08, 5.35701900616913917e-08, 1.09858696362152841e-07, -7.03481219943569158e-08, -1.00935494629084133e-07, 6.80092711036195396e-08, -4.62325466799029527e-08, 8.94765719294809969e-08, -4.93743073093355633e-08, 9.8067587828154501e-08, -9.92822251077996043e-08, -8.86976181391219143e-08, 5.0621437708286976e-08, 1.38186180720367702e-07, 8.22464514271814551e-08, -8.87917508407554124e-08, 5.40632179024669313e-08, 5.04623827168870775e-08, -7.45251469425056712e-08, 1.58004013428580947e-07, 1.3045008984136075e-07, -1.19762759709374222e-07, -2.98533706200032611e-07, -3.94325496699821088e-07, -2.80379765627003508e-07, -8.32778113135645981e-08, -6.16064639302749129e-08, -3.6992636864852102e-07, -8.70383416895492701e-07, -1.00000107288360596, -7.44917258543864591e-07, -3.3118985243163479e-07, -1.21241967576679599e-07, 8.07571893801650731e-08, 2.66665608705807244e-07, 7.06873777289729333e-07, 9.8921907465410186e-07, 6.83333439610578353e-07, 1.98696938014109037e-07, 7.63855965146831295e-08, 9.61668433774320874e-08, -6.82610021840446279e-08, 4.46211849691735551e-08, 4.2179330250746716e-08, -5.35468558382490301e-08, 1.16437028907512286e-07, 5.51550556338042952e-08, -7.18142203481875185e-08, -1.16479206724307005e-07, 5.33479855846508144e-08, 3.01196685370541672e-08, -7.38211056727777759e-08, 7.15308985377305362e-08, -8.75185293125468888e-08, -8.14052327768877149e-08, 8.14778431390550395e-08, 1.86433268822838727e-07, 1.18350612865469884e-07, -7.0498508364380541e-08, -1.22883022868336411e-07, 1.46939299838777515e-07, 6.27611740355860093e-08, 1.34192973177960084e-07, 4.34452545050589833e-07, 6.13740155586128822e-07, 4.54513553904689616e-07, 1.93317646335344762e-07, 6.34729673265610472e-08, 3.26390278360122466e-07, 1.05859214727388462e-06, 1.00000154972076416, 1.08776021079393104e-06, 3.56230799525292241e-07, 6.49440679012514011e-08, -6.65110064801410772e-08, -2.72820557256636675e-07, -6.20298465037194546e-07, -8.91097101884952281e-07, -7.68020129271462793e-07, -3.70415790484912577e-07, -6.3414525186544779e-08, 5.48683587453524524e-08, -4.3458367571247436e-08, 4.95158900548631209e-08, 5.09881310506443697e-08, -7.23900797083842917e-08, 9.28282162249161047e-08, 5.26486871876841178e-08, -7.16710388815045008e-08, -1.22214700581935176e-07, 3.64490659876537393e-08, 1.81640444907316123e-08, 3.78715547810770659e-08, -8.02431969759709318e-08, -1.05675816541861423e-07, -1.08480989524650795e-07, 7.38039389602818119e-08, 2.14604938264528755e-07, 1.47849334553029621e-07, -9.35141244440274022e-08, -2.60431249898829265e-08, -9.32113763951747387e-08, -1.25299607134365942e-07, 8.21727326183463447e-08, -2.22566484353592386e-07, -6.29924443273921497e-07, -8.73230021625204245e-07, -6.08515563271794235e-07, -1.99182522919727489e-07, -6.51686065111789503e-08, -1.16160286722788442e-07, -1.76897913206630619e-07, -1.0000002384185791, -2.57649560353456764e-07, -1.19437046919301793e-07, 3.16794540822229465e-07, 7.67596702644368634e-07, 9.26194616113207303e-07, 6.05160778377467068e-07, 2.28871343210812483e-07, 8.70032224042915914e-08, 7.85611646847428347e-08, 8.18541110447768006e-08, 3.89940595368898357e-08, 5.02422743409169925e-08, -5.23689926978931908e-08, 7.90803653671900975e-08, -6.43627089402798447e-08, -1.15767171848801809e-07, 3.75284265885511559e-08, 3.61927163794462103e-08, 5.60731479026799207e-08, -7.01376663414521317e-08, -1.33087681319921103e-07, -1.5909917294720799e-07, 1.91959969697563793e-07, 1.59446784664396546e-07, -1.18359558598513104e-07, -8.14687766137467406e-08, 5.66250584199678997e-08, -1.01836093335805344e-07, -7.47516537558112759e-08, 5.40283267014274315e-08, 3.61610204890894238e-07, 1.0313106031389907e-06, 1.45094463732675649e-06, 1.05693231944314903e-06, 3.99695039732250734e-07, 8.37466558323285426e-08, -5.21789154106500064e-08, -6.08229342446975352e-08, -1.37857384174822073e-07, 0.999999761581420898, -2.14069075354927918e-07, -7.64779954920413729e-08, -1.14339314905009815e-07, -3.6196982478031714e-07, -5.99776285525877029e-07, -5.35456308625725796e-07, -2.55671039894878049e-07, 7.63385656910031685e-08, 5.19331813109147333e-08, -8.1478795266320958e-08, 8.12269504990581481e-08, -5.02630008725191146e-08, -9.9939690301198425e-08, 5.46864562522841879e-08, 5.24007539581816673e-08, -1.47843493891741673e-07, -1.871345318704698e-07, 1.08301499324170436e-07, 1.19605132908873202e-07, -1.38113861680722039e-07, -1.30891862681892235e-07, 4.64576785930148617e-08, 6.24964542339512263e-08, -8.41680574126257852e-08, -7.99136969931169006e-08, -4.91832508942025015e-07, -1.39326789394544903e-06, -1.95815687220601831e-06, -1.41295390676532406e-06, -4.93028551318275277e-07, -8.67691909434142872e-08, 1.40181199981270765e-07, 3.28597707266453654e-07, -0.999999582767486572, 3.00494491511926753e-07, 1.10691857457823062e-07, 2.08592254580253211e-07, 4.20026935898931697e-07, 3.99571973730417085e-07, 1.75369478938591783e-07, 7.2884375867943163e-08, 1.15664342104082607e-07, 9.68956896940653678e-08, 9.94015110222790099e-08, 7.73073765003573499e-08, 4.02363475870970433e-08, -9.39599615890074347e-08, 7.72760841982744751e-08, -1.30884544091713906e-07, -1.47598981925511907e-07, 9.51734193677111762e-08, 1.11027958382692304e-07, -1.1814542943966444e-07, -1.31675122361230024e-07, -6.60289529719193524e-08, 6.47713989110343391e-08, -3.92205024013492221e-08, 8.37234281902965449e-08, -5.49974465968716686e-08, -4.9817558078757429e-08, 1.12054763690139225e-07, 6.29626640602509724e-07, 1.69410361650079722e-06, 2.34534832088684198e-06, 1.74443857758888043e-06, 6.79472179854201386e-07, 1.14051474042753398e-07, -6.1132212181291834e-08, -2.73098237357771723e-07, -7.48590480270650005e-07, 0.999998927116394043, -7.91151080647978233e-07, -3.39019265993556473e-07, -1.21347895287726715e-07, -7.6669770976423024e-08, 7.63416210247669369e-08, -7.00906213069174555e-08, -3.71098053619789425e-07, -3.6065145536667842e-07, -6.14199180404284562e-08, 8.20309722371348471e-08, -9.72992211245582439e-08, 4.91881806397032051e-08, 9.26593912708995049e-08, 4.68475072068486043e-08, -6.75034641517413547e-08, 5.70001255084662262e-08, -2.78526695041136918e-08, 8.48826289256976452e-08, 5.68479556761758431e-08, -1.24169076798352762e-07, -1.13706079218900413e-07, 1.16681846407118428e-07, 1.21437921052347519e-07, -6.60696031218321878e-08, -9.63403223863679159e-08, -6.82817571373561805e-08, 5.36906483716848015e-08, 3.96844050953859551e-08, 5.24967553872102144e-08, 9.98736879864736693e-08, 7.96450621010080795e-08, -5.585880202829685e-08, 1.31719929186147056e-07, -9.74052056790242204e-08, -7.27796191313245799e-07, -2.06682580028427765e-06, -2.81635516330425162e-06, -1.98754355551500339e-06, -7.34398156509996625e-07, -1.7389864126471366e-07, 7.30333198362131952e-08, 3.65361245258100098e-07, 8.82686265413212823e-07, -0.999998807907104492, 8.49261823532287963e-07, 2.89524791696749162e-07, -5.25424184161238372e-08, 1.42023367288857116e-07, 3.14814769808435813e-07, 2.26868635877508495e-07, 7.64806102893089701e-08, 1.24101461551617831e-07, 1.70623337680808618e-07, -7.49305755221030267e-08, 6.74773090736380254e-08, 1.04791354260669323e-07, -6.27693808041840384e-08, 3.21653352841622109e-08, -9.85067472036860181e-10, -4.39451248723798926e-08, 6.66034196683540358e-08, 1.087161436430506e-07, -5.67618094748922886e-08, -6.89599772840665537e-08, 8.63807869677657436e-08, -3.43322064111362124e-08, 9.00413326121451973e-08, 7.73978143797648954e-08, -1.26623959317839763e-07, -1.01194956414474291e-07, 1.30529954844860185e-07, 1.04032864101100131e-07, -4.37507843287221476e-08, -5.0665619255596539e-08, -4.47393837532672478e-08, 7.13809455987757246e-08, 3.39967591855838691e-08, 7.5308015823338792e-08, 1.31542378767335322e-07, -6.70588704565489024e-08, -8.70340386427415069e-08, 1.61627625061555591e-07, 7.53797451125137741e-07, 2.12582290259888396e-06, 3.05183402815600857e-06, 2.27046348300063983e-06, 8.30547833174932748e-07, 1.20082233934226679e-07, -5.72721283731425501e-08, -4.05493409516566317e-07, -1.11697579541214509e-06, 0.99999845027923584, -1.1897109288838692e-06, -6.35316155239706859e-07, -2.90010262915529893e-07, 2.2656080034266779e-07, 7.93119312447743141e-08, -3.13503676352411276e-07, -4.19242695670618559e-07, -1.96419193798647029e-07, -7.75380470940945088e-08, -1.11845686490141816e-07, -7.63958212246507173e-08, -7.06464007294016483e-08, -1.11996115492729587e-07, -7.19187411846178293e-08, 5.46618110774943489e-08, 3.6971758987647263e-08, -5.94887978877522983e-08, 5.90704836156419333e-08, 1.15668058242590632e-07, -7.99886734625943063e-08, -1.0957584350990146e-07, 7.43594128493896278e-08, -4.77105039919933915e-08, 9.18317795139955706e-08, -5.22266923042025155e-08, 9.74350342630714295e-08, -1.06129306232105591e-07, -8.71454375328539754e-08, 6.39569535110240395e-08, 1.53271599856452667e-07, 8.65612577172214515e-08, -9.76665361918094277e-08, 5.48254455168262211e-08, 5.05020416596835275e-08, -6.23994154125284695e-08, 1.43020926657300151e-07, 1.17730706961083342e-07, 1.40638661605407833e-07, -1.4516224666749622e-07, -7.68945596973935608e-07, -1.91140588867710903e-06, -2.54872247751336545e-06, -1.88123578936938429e-06, -7.76366164245700929e-07, -1.84559780791460071e-07, 5.3876966887855815e-08, 8.42695655478564731e-08, 2.16865942093136255e-07, -0.999999761581420898, -2.46584363594593015e-07, -7.37330410061076691e-08, 2.41357184904700262e-07, 3.41176843221546733e-07, 3.98760676034726202e-07, 7.89871990036772331e-07, 1.15237139652890619e-06, 8.73203589435433969e-07, 2.8738881496792601e-07, 7.85860621022038686e-08, 1.17984761516254366e-07, -8.15879488413884246e-08, 6.33308019359901664e-08, 6.69902178174197616e-08, -3.27138920397374022e-08, -3.29243725616379379e-08, -3.43962369697692338e-08, 1.34178691268971306e-07, 6.0241767130264634e-08, -7.85385694257456635e-08, -1.24663444012185209e-07, 5.96137965658272151e-08, 4.55324276060764532e-08, -5.08657258535549772e-08, -7.26002440387674142e-08, 7.27301170400096453e-08, -9.50170218061430205e-08, -8.21970829179008433e-08, 9.34924386797320039e-08, 2.01067066996074573e-07, 1.21190169011242688e-07, -8.81238406691409182e-08, 6.34073984429051052e-08, -1.0634256142338927e-07, 1.32851639023101598e-07, 5.77329224427103327e-08, -1.14365235504010343e-07, -8.8403112386004068e-08, 1.06559440382625326e-07, 8.43825091578764841e-07, 2.45405453824787401e-06, 3.39054145115369465e-06, 2.41285397351020947e-06, 8.80983918705169344e-07, 2.07122653250735311e-07, 7.0875330493436195e-08, -7.72243069491196366e-08, -3.68642076864489354e-07, -9.12643770334398141e-07, 0.999998509883880615, -1.50032406054378953e-06, -7.4382961656738189e-07, 2.36935605357757595e-07, 4.9665867862813684e-08, -2.49833362886420218e-07, -5.71852126540761674e-07, -8.01530404714867473e-07, -7.13938959506776882e-07, -3.76458615392039064e-07, -8.3806057205038087e-08, -5.12680742303928128e-08, -1.00963234217488207e-07, -8.48827781396721548e-08, 5.20572633888605196e-08, -9.33551973503199406e-08, 5.67285916019955039e-08, 6.54490648344108195e-08, -4.90933587116160197e-08, -7.32861877850154997e-08, 9.97475595454488939e-08, 5.30260422237915918e-08, -8.03391273507259029e-08, -1.31184322071931092e-07, 4.2848686376828482e-08, 2.04296224382005676e-08, 3.72725708075449802e-08, -8.06062345759528398e-08, -1.15257954291791975e-07, -1.14163348996498826e-07, 8.12957594575891562e-08, 2.27936652663629502e-07, 1.52160183120031434e-07, -1.05228082247776911e-07, -2.74570073344193588e-08, -8.02006567823809746e-08, -1.08807419962886343e-07, 7.7076848015167343e-08, 6.22762996727033169e-08, 6.9292788396069227e-08, 6.13190920262240979e-08, 5.32234984973456449e-08, -5.97532689994295652e-08, -2.08025966230707127e-07, -7.57030250042589614e-07, -1.96112296180217527e-06, -2.78882703241833951e-06, -2.12197255677892826e-06, -8.0661504853196675e-07, -1.0912064141166411e-07, 2.35824003880225064e-07, 2.45001643861542107e-07, -1.0000002384185791, -4.38414190284674987e-07, 2.70453341499887756e-07, 2.12908489061192086e-07, 2.28622042186543695e-07, 6.7671197712115827e-07, 1.42700150718155783e-06, 1.76061871570709627e-06, 1.28697342915984336e-06, 5.92934100041020429e-07, 2.25969159828309785e-07, 9.12414179765619338e-08, 1.09548842885942577e-07, 8.36403089010673284e-08, 5.86497961307941296e-08, -5.12432833943421429e-08, 5.78273322560107772e-08, 6.50946105906768935e-08, -5.18390308457128413e-08, 6.5787624237145792e-08, -8.25373902557657857e-08, -1.29233626466884743e-07, 4.39480132286007574e-08, 4.1485275659169929e-08, 5.38539310923624726e-08, -6.92912962563241308e-08, -1.3872215731680626e-07, -1.62517352464419673e-07, 2.03473575766111026e-07, 1.6103342659334885e-07, -1.44494208598189289e-07, -1.12858863587916858e-07, 5.77100500720462151e-08, -9.00290260119618324e-08, -6.81016274484136375e-08, -8.81790782614189084e-08, -1.28298367485513154e-07, 1.20779532153392211e-07, 7.99285942321148468e-07, 2.00512022274779156e-06, 2.64496702584438026e-06, 1.95692882698494941e-06, 8.39759763948677573e-07, 1.83045258950187417e-07, -9.06030237501909141e-08, -3.25836879255803069e-07, -1.74460114976682235e-06, -5.16170848641195334e-06, 0.999992549419403076, -5.52061555936234072e-06, -2.04103957912593614e-06, -3.52470209463717765e-07, -1.03384508065573755e-07, -6.9101332655918668e-07, -1.80416884631995345e-06, -2.4221153580583632e-06, -1.80817426098656142e-06, -7.55021574150305241e-07, -1.83928136721078772e-07, -5.91876343492003798e-08, -6.08925390110925946e-08, -5.7668327002602382e-08, -8.3163342878833646e-08, -8.22255259436133201e-08, 1.66551181735030696e-08, 4.06416056364378164e-08, 8.78282833127741469e-08, -5.49381802272819186e-08, -1.05008595596700616e-07, 6.1749425128709845e-08, 4.94136145334778121e-08, -1.52549574750082684e-07, -1.89965589925122913e-07, 1.16244862624625966e-07, 1.20068762043956667e-07, -1.53203799868606438e-07, -1.41541221410079743e-07, 5.11234112821057352e-08, 5.76006300434528384e-08, -7.75304798139586637e-08, 1.23291187037466443e-07, 1.1305860425636638e-07, -6.02733507548691705e-08, -1.0718532195141961e-07, -6.39618917830375722e-07, -1.84284624538122443e-06, -2.52939526035333984e-06, -1.77434333181736292e-06, -6.70958684167999309e-07, -2.05860885671427241e-07, 4.20515732457715785e-07, 6.38476535641530063e-07, 7.11483664872503141e-07, -0.999999105930328369, 9.33500643895968096e-07, 6.06722551310667768e-07, 3.07903661678210483e-07, 2.59738129670950002e-07, 3.74540974235060276e-07, 9.75926809587690514e-07, 2.25089752348139882e-06, 3.06205038214102387e-06, 2.39217115449719131e-06, 1.10459859570255503e-06, 3.18132492793665733e-07, 5.80945531680754357e-08, 1.0143868678369472e-07, 9.6128580651111406e-08, -4.46973409395923227e-08, 8.19857604028584319e-08, 4.08397866635823448e-08, -9.76914549255525344e-08, 7.51002460219751811e-08, -1.33821885128782014e-07, -1.4640144740951655e-07, 1.05894493174218951e-07, 1.13063116202738456e-07, -1.30811429244204191e-07, -1.40282068628039269e-07, -6.80491538673777541e-08, 7.18653083708886697e-08, 7.79633424485837168e-08, -8.80657466950651724e-08, -9.99463836137692851e-08, -6.06948304948673467e-08, 1.77679822854770464e-07, 6.24480946953553939e-07, 1.58943385031307116e-06, 2.29361012316076085e-06, 1.74757451532059349e-06, 6.18950991793099092e-07, 1.2492832013322186e-07, 1.80579164066330122e-07, -1.96038797639630502e-07, -2.21281629819713999e-06, -5.6760063671390526e-06, 0.999992609024047852, -5.3527587624557782e-06, -2.09263953365734778e-06, -3.80515132292202907e-07, -8.57836823797697434e-08, -4.16384750678844284e-07, -1.36130086048069643e-06, -2.91452306555584073e-06, -3.78649838239653036e-06, -2.88483420263219159e-06, -1.32111108541721478e-06, -4.33886555128992768e-07, -1.29244867252964468e-07, -5.87640549554180325e-08, -1.07180547104235302e-07, -8.18544876324267534e-08, -6.10623445140845433e-08, 5.46350733543476963e-08, -5.0166065079793043e-08, 5.31496233691086672e-08, 9.62843103025079472e-08, 4.45662102777077962e-08, -7.28303177766065346e-08, 6.7008819826241961e-08, -4.43428191942984995e-08, 5.5920988728530574e-08, 7.99695314412929292e-08, 5.51082521837997774e-08, -1.2910989255487948e-07, -1.11585805484537559e-07, 1.30434059997242002e-07, 1.2612889577212627e-07, -7.46918829008791363e-08, -1.00858315477125871e-07, -6.85756020857297699e-08, 5.96672151687016594e-08, 4.48247661211098603e-08, -5.54365264804346225e-08, 9.55837862193220644e-08, 7.38494208007978159e-08, -5.19371887719444203e-08, 6.65399113586317981e-08, 1.23578416832970106e-07, 7.85633886835057638e-08, -7.78909310383824049e-08, -4.72146666652406566e-07, -1.05029562291747425e-06, -1.34729680212331004e-06, -1.08875815385545138e-06, -4.89578212636843091e-07, 8.67887166577929747e-08, 3.78078397034187219e-07, 5.0277503760298714e-07, 1.36044013743230607e-06, 3.38838776769989636e-06, -0.999995231628417969, 3.83915357815567404e-06, 1.90860464499564841e-06, 6.58168403333547758e-07, 1.9097205949947238e-07, 4.07483781827977509e-07, 1.71644819602079224e-06, 3.97345274905092083e-06, 5.23049811818054877e-06, 3.97991652789642103e-06, 1.76507012383808615e-06, 5.17677563038887456e-07, 1.70980769098605379e-07, 8.81119035511801485e-08, 8.18602714502958406e-08, 1.11100874278236006e-07, 7.70808838979064603e-08, -7.14255818934361741e-08, 7.32967819772056828e-08, 3.44704673693740915e-08, -7.64662075880551129e-08, -4.70444909694833768e-08, 7.12389933710255718e-08, 1.12889765091495065e-07, -6.75421176765667042e-08, -7.65382850431706174e-08, 9.90064776829058246e-08, -3.39109291758177278e-08, 8.96731648936111014e-08, 7.3993149385387369e-08, -1.35141462465071527e-07, -1.00934457236689923e-07, 4.40193872464078595e-08, 1.43584628631288069e-07, 1.06093338558821415e-07, -5.50323555614795623e-08, -5.4531970050675227e-08, -4.35556941624781757e-08, 7.83529046088915493e-08, -6.00006018203202984e-08, 7.66050618494773516e-08, 1.22487676890159491e-07, -4.82803912404961011e-08, -7.47309840676280146e-08, -8.84684112634204212e-08, -9.36726820555122686e-08, -5.00120513891033625e-08, 3.93043677604509867e-07, 1.15268801437196089e-06, 1.46243849030724959e-06, 9.75712509898585267e-07, 5.13045449679339072e-07, 3.64512658279636526e-07, 6.61598846818378661e-08, -7.67504332088719821e-07, -3.24309462484961841e-06, -7.58333362682606094e-06, 0.999990165233612061, -7.11375241735368036e-06, -2.90593243335024454e-06, -8.78918513080861885e-07, -4.50364979087680695e-07, -6.37443747564248042e-07, -1.91676235772320069e-06, -4.31997341365786269e-06, -5.75052899876027368e-06, -4.49429353466257453e-06, -2.08599567486089654e-06, -6.02841964791878127e-07, -1.21414529985486297e-07, -7.96450123630165763e-08, -1.10978973566489003e-07, -6.11908532732741151e-08, -6.96223665386241919e-08, -1.05838566355487274e-07, 9.51726306652744825e-08, 7.91987844195318758e-08, -5.57258026390172745e-08, -6.30367864573599945e-08, 6.33793391102699388e-08, 1.20296235195382906e-07, -9.34668449303899251e-08, -1.22488287956912245e-07, 8.31498638831362769e-08, -4.22890025220112875e-08, 9.66022213333417312e-08, -3.74849342676952801e-08, -5.3398817811967092e-08, 1.01179949751895037e-07, -1.11943890601651219e-07, -8.5797793758501939e-08, 7.73860620029154234e-08, 1.68650416298987693e-07, 9.04146801872229844e-08, -1.08064163839571847e-07, 5.99696576841779461e-08, 5.52669803255412262e-08, 5.90396460609099449e-08, -6.98487312433826446e-08, -5.24655519029693096e-08, 1.35967496817102074e-07, 1.07610972577276698e-07, 1.003496237217405e-07, 1.24066289686197706e-07, 6.98786308817034296e-08, -6.79976963624540076e-08, -5.65583953004988871e-08, -2.64095518787144101e-07, -5.40272253601870034e-07, -3.4646691915440897e-07, 9.66452020634278597e-08, 2.24295817474740034e-07, 1.92021545331044763e-07, 4.89744763854105258e-07, 1.9118958789476892e-06, 4.85880309497588314e-06, -0.999993085861206055, 5.50674894839175977e-06, 2.36558912547479849e-06, 5.53833672256587306e-07, 2.6769308192342578e-07, 7.96658468971145339e-07, 2.61149739344546106e-06, 5.68475843465421349e-06, 7.34812556402175687e-06, 5.62993818675749935e-06, 2.65071480498590972e-06, 8.80408094872109359e-07, 2.50195029138922109e-07, 9.87222321668923541e-08, 1.6120864643198729e-07, -7.93720289493649034e-08, 1.00627133292618964e-07, 8.62026681147654017e-08, -9.20758722600112378e-08, 4.56704078999337071e-08, -3.34191696538255201e-08, -3.41814470061763132e-08, 1.40862482567172265e-07, 5.7933615238425773e-08, -9.17008904366412025e-08, -1.38770204216598358e-07, 6.52738734174818092e-08, 4.72715306898408016e-08, -5.26254062549469381e-08, -7.37460723598815093e-08, 7.46304920085094636e-08, -1.04629954478241416e-07, -8.56871409382620186e-08, 1.04309584969541902e-07, 2.16124348639823438e-07, 1.2519002723365702e-07, -1.00393897639605711e-07, 6.76702782698157534e-08, 8.31722317684580048e-08, -7.03593698858639982e-08, 6.42648316784288909e-08, -8.92983749167797214e-08, 1.25290299024527485e-07, -7.43751940035508596e-08, -1.26268417943720124e-07, -8.70901217808750516e-08, -5.461880192569879e-08, -1.24272176549311553e-07, -5.95480969423078932e-07, -8.32648197501839604e-07, -4.34494552337127971e-07, 8.03605573196364276e-08, -4.53784650744637474e-07, -1.50002392729220446e-06, -2.93077368951344397e-06, 0.999996423721313477, -2.72995271188847255e-06, -1.36468577238701982e-06, -4.92334947921335697e-07, -2.94732359407134936e-07, -8.63071136336657219e-07, -3.07819323097646702e-06, -6.99305974194430746e-06, -9.21514219953678548e-06, -7.0539808803005144e-06, -3.21081211041018832e-06, -9.95755385702068452e-07, -3.18985371450253297e-07, -1.34264894313673722e-07, -7.97729740042996127e-08, -1.77339416040922515e-07, -7.49956612366986519e-08, 8.66437375179884839e-08, 9.1380478295377543e-08, -7.45574553207006829e-08, -7.35112166694307234e-08, 1.06957124046402896e-07, 5.20864631425865809e-08, -9.26798122691252502e-08, -1.45237933679709386e-07, 4.55110225061616802e-08, 2.04815702176119885e-08, 5.91695688001436793e-08, -4.1804700146030882e-08, -7.3205868034165178e-08, -1.23799551943193364e-07, -1.20049577390091144e-07, 8.88012294808504521e-08, 2.41570859316198039e-07, 1.55804869450548722e-07, -1.1964124269070453e-07, -3.11455998769361031e-08, -1.0526374438768471e-07, 1.31095433175687504e-07, -8.30622894909538445e-08, 7.03432476711896015e-08, -6.96385029641533038e-08, -9.05148738183925161e-08, 7.26006419426994398e-08, 4.56130209158800426e-08, 1.01500361893158697e-07, 1.35531067257943505e-07, 1.16118897608430416e-07, -1.42258514301829564e-07, -4.99175541790464194e-07, -5.51179880403651623e-07, -2.47823777499434073e-07, 8.77308323765646492e-08, 9.35078716679527133e-08, 1.05416802398394793e-06, 2.94385381494066678e-06, -0.999996066093444824, 2.81182565231574699e-06, 1.17041088287805906e-06, 4.042603904963471e-07, 3.78880628204569803e-07, 1.00162708349671448e-06, 3.04754166791099124e-06, 6.59628813082235865e-06, 8.70324038260150701e-06, 6.83005600876640528e-06, 3.22441951539076399e-06, 9.84164557848998811e-07, 2.35269581594366173e-07, 1.03046389199334953e-07, 1.59838009494706057e-07, 1.50727743175593787e-07, 1.57431671254926187e-07, 1.16702210561925313e-07, -7.97902757199153712e-08, 7.18474808536484488e-08, -9.38329591804176744e-08, -1.42180425655169529e-07, 4.69265870606250246e-08, 4.25341006859980553e-08, 5.09034840945332689e-08, -6.80661571550444933e-08, -1.446944537519812e-07, -1.67512368420830171e-07, 2.14560074596192862e-07, 1.6299021865506802e-07, -1.63184822099537996e-07, -1.25863820699123607e-07, 6.14614705796157068e-08, -1.54539435470724129e-07, 1.40958576366756461e-07, -1.02745964625228225e-07, 6.76549802847148385e-08, -7.77511459659763204e-08, -5.69760629787197104e-08, -1.31240994960535318e-07, -1.67037626397359418e-07, -1.28263053511545877e-07, -8.06880109394114697e-08, 9.05970409803558141e-08, 1.65672517482562398e-07, 4.1089862179433112e-07, 1.03526042494195281e-06, 1.51897268096945481e-06, 1.26929182897583814e-06, 6.40151256448007189e-07, 1.45206882962156669e-07, -1.81939640242489986e-07, -4.32197026611902402e-07, -1.027898861138965e-06, -2.33852892961294856e-06, 0.999996721744537354, -2.61273430623987224e-06, -1.17368369956238894e-06, -3.32487331888842164e-07, -2.27880065040153568e-07, -8.88028864665102446e-07, -3.06713104691880289e-06, -6.59379156786599196e-06, -8.47359842737205327e-06, -6.53863799016107805e-06, -3.13767736770387273e-06, -1.0600651876302436e-06, -2.81108839317312231e-07, -5.03695822828831297e-08, -1.89488702062590164e-07, -1.68470776884532825e-07, -7.65844703209950239e-08, 9.12505981887079543e-08, -6.69757156401828979e-08, -1.179609085966149e-07, 5.18765119750241865e-08, 6.06404810810090567e-08, 4.33348645856312942e-08, -1.5656556229259877e-07, -1.92205959592683939e-07, 1.25129716366245702e-07, 1.19698455591787933e-07, -1.73915864820628485e-07, -1.59720045189715165e-07, 3.06789686987940513e-08, 3.1615702056342343e-08, -1.95936848967903643e-07, 1.04276153933824389e-07, 7.38078824724652804e-08, -1.11582593831371923e-07, 5.9712633060371445e-08, -5.19046174929371773e-08, -6.70048692086311348e-08, 5.37371640518813365e-08, 1.49124275594658684e-07, 2.05459627977688797e-07, 1.29417870198267337e-07, -1.10876349879163172e-07, -6.21167714598414022e-07, -1.4847350939817261e-06, -1.87960608855064493e-06, -1.27506893932149978e-06, -4.97520204589818604e-07, -2.16376790262984287e-07, -9.48550678003812209e-08, 2.63738911598920822e-07, 1.09929737845959608e-06, 2.34109984376118518e-06, -0.99999701976776123, 2.26237671085982583e-06, 1.07096718693355797e-06, 4.41186415400807164e-07, 3.73286525245930534e-07, 9.38467337618931197e-07, 3.12222414322604891e-06, 6.9404272835527081e-06, 9.07533376448554918e-06, 6.98197027304559015e-06, 3.26854933518916368e-06, 1.09922643787285779e-06, 3.77432570530800149e-07, 9.51672234350553481e-08, 4.55740867266740679e-08, 2.01791550580310286e-07, 1.6666596991399274e-07, 4.32901359204151959e-08, 9.28242371855958481e-08, 4.98081007549444621e-08, -6.06464993779809447e-08, -9.81023333679331699e-08, 5.34335988788825489e-08, 5.3335242000684957e-08, 3.63555336946319585e-08, 6.41413464563811431e-08, -1.38371262892178493e-07, -1.45163028264505556e-07, 1.18999253118090564e-07, 1.15965804070583545e-07, -1.47134031180939928e-07, -1.5268402364654321e-07, -7.3515693088666012e-08, 7.45182973105329438e-08, -2.08954347158396558e-07, 5.33206545583198022e-08, 1.03986828037250234e-07, -1.21347383696956967e-07, 8.46070946636245935e-08, -4.9659760747999826e-08, 7.21905664136102132e-08, -6.4956552137118706e-08, -1.60259375547866512e-07, -2.29847302080088411e-07, -1.72204337900438986e-07, 8.98668446325245895e-08, 2.06193902840823284e-07, 7.30695774109335616e-07, 1.84391979018982965e-06, 2.62791922978067305e-06, 2.05094124794413801e-06, 8.19547608443826903e-07, 1.29967048678736319e-07, -1.74771955130381684e-07, -8.29875716590322554e-07, -2.01630018636933528e-06, 0.999997317790985107, -2.05246487894328311e-06, -8.76693491136393277e-07, -2.83746487639291445e-07, -3.64838911082188133e-07, -1.09155405425553909e-06, -3.27496422869444359e-06, -7.00451710144989192e-06, -9.19559806789038703e-06, -7.20578600521548651e-06, -3.39703160534554627e-06, -1.06124946341878967e-06, -3.51954696498069097e-07, -2.25503640649549197e-07, -1.41501132588928158e-07, -1.30342385773474234e-07, -2.25321457492100308e-07, -1.57183379201342177e-07, 5.97456661921569321e-08, 1.07275702987408295e-07, 5.53844969886085892e-08, -4.53554633850217215e-08, -5.90641597852936684e-08, 8.52429593578563072e-08, -4.70900403115592781e-08, 5.27936485639202147e-08, 7.51747322169649124e-08, 5.51565868533998582e-08, -1.33247766598287853e-07, -1.07992256914712925e-07, 1.48147847767177154e-07, 1.33791033363195311e-07, -8.57420587863089168e-08, -1.08791248010220443e-07, -7.22474737813172396e-08, 6.17865865137900983e-08, 4.65938505556096061e-08, -1.56095268266653875e-07, 1.26720777871014434e-07, -1.183942828220097e-07, 6.38592538848570257e-08, 8.86852049575281853e-08, 6.94409294510478503e-08, 6.52242420073889662e-08, 1.74823298948467709e-07, 2.40676627072389238e-07, 1.95030580130151066e-07, 1.13891829300882819e-07, 6.87429775325654191e-08, -2.7488283649290679e-07, -1.18620835110050393e-06, -2.71935505224973895e-06, -3.55219140146800783e-06, -2.69250858764280565e-06, -1.18986724828573642e-06, -3.08214055166899925e-07, 1.28243129893235164e-07, 4.39697487308876589e-07, 9.42245947044284549e-07, -0.999998748302459717, 1.00162026228645118e-06, 5.09185838382109068e-07, 1.86737096896649746e-07, 2.54505579277974903e-07, 1.03703723652870394e-06, 3.34574087901273742e-06, 7.02516308592748828e-06, 9.05728120415005833e-06, 7.13746476321830414e-06, 3.51223570760339499e-06, 1.12296982024417957e-06, 2.12468890481432027e-07, 7.72492327882901009e-08, 2.32685735568338714e-07, 2.67124789843364852e-07, 1.2838107465995563e-07, 6.25397973408325925e-08, 8.72090524239865772e-08, 5.64053017626520159e-08, -5.20669871661993966e-08, 7.49492770069082326e-08, 1.1770189445314827e-07, -7.79440370024531148e-08, -8.49352659315627534e-08, 1.0759814017546887e-07, -5.53786954071711079e-08, 5.07082589251695026e-08, 8.02368234076311637e-08, -4.06435773925295507e-08, -3.60075631533618434e-08, 9.74051843627421476e-08, -1.28783256059250562e-07, -9.17948881351549062e-08, 6.11965091934507655e-08, 1.59741134098112525e-07, 1.07129537241235084e-07, -7.6930874115532788e-08, -6.95792579108456266e-08, 8.02146757905575214e-08, 1.99079707385863003e-07, 1.33691628434462473e-07, -8.78798402936808998e-08, 4.90483671455876902e-08, 6.68918502810811333e-08, 1.12711340705118346e-07, -9.43695539490363444e-08, -2.2504019625557703e-07, -3.04854836485901615e-07, -2.1330521349227638e-07, 6.30492280606631539e-08, 1.08027300882440613e-07, 3.31810412035338231e-07, 1.38892517043132102e-06, 3.40807127940934151e-06, 4.58369049738394096e-06, 3.48198250321729574e-06, 1.53165615301986691e-06, 4.25646817348024342e-07, 1.06618728068497148e-07, 8.66218030637355696e-08, 1.78082444790561567e-07, 3.36321278382456512e-07, 1.0000004768371582, 3.91175348113392829e-07, 1.44957994052674621e-07, -5.9346550784766805e-08, -2.64209944589310908e-07, -9.86136910796631128e-07, -3.3113112749560969e-06, -7.11437996869790368e-06, -9.09511345525970683e-06, -7.00117470842087641e-06, -3.46059073308424558e-06, -1.32318348278204212e-06, -4.10226363101173774e-07, -2.27088705173628114e-07, -3.20292855349180172e-07, -1.51697179262555437e-07, -6.72092781428546004e-08, 6.58819274690358725e-08, 1.24752418173557089e-07, -1.06382351816591836e-07, -1.34736424683978839e-07, 9.06757335883412452e-08, -3.68357007118902402e-08, 9.41332345405498927e-08, -4.36827001237816148e-08, -5.70973170965771715e-08, 1.02754221131817758e-07, -1.21093393090632162e-07, -8.55955448741951841e-08, 9.28947514466926805e-08, 1.88345779861265328e-07, 9.90157573710348515e-08, -1.15437494230263837e-07, 6.19722086980800668e-08, 5.83881103466410423e-08, -4.53614141804337123e-08, 1.18478830302137794e-07, -5.89785820181987219e-08, -6.07929422358211013e-08, 8.49058565677296428e-08, -5.47411147522325336e-08, 1.19945383403319283e-07, 9.83997594516949903e-08, 1.0034968056515936e-07, 2.39701279269866063e-07, 3.05263711197767407e-07, 2.49596325829770649e-07, 1.57273461809381843e-07, 6.62720864852417435e-08, -7.84549243348919845e-08, -4.97049313707975671e-07, -1.94713652490463573e-06, -4.56367342849262059e-06, -6.01447663939325139e-06, -4.50215020464383997e-06, -1.96952964870433789e-06, -5.85549230436299695e-07, -1.8002430124397506e-07, -2.19568150328086631e-07, -7.68806046380632324e-07, -1.71401904935919447e-06, -1.00000226497650146, -1.73621344856655924e-06, -8.16820431737141917e-07, -1.7137374186404486e-07, 2.65698616885856609e-07, 1.00350177945074392e-06, 3.08817425320739858e-06, 6.7050123107037507e-06, 8.80725383467506617e-06, 6.80247467244043946e-06, 3.13586406264221296e-06, 1.0545328450461966e-06, 4.96245434078446124e-07, 2.9105689236530452e-07, 8.65884359768642753e-08, 8.20210814822530665e-08, 2.60171390209507081e-07, 2.79200037311966298e-07, 1.09665279524051584e-07, -5.0028479137154136e-08, -5.58015429419356224e-08, 5.52965957467677072e-08, 1.34531205731036607e-07, 4.81926143436339771e-08, -1.10314779533382534e-07, -1.58724930088283145e-07, 5.68557254609913798e-08, 1.58644706260702151e-08, -5.36431770115086692e-08, 7.50372493030226906e-08, -4.69581884487979551e-08, -7.11000822661844722e-08, 7.77125350737151166e-08, -1.15928095567596756e-07, -8.94992098210423137e-08, 1.18316116015648731e-07, 2.37685071624582633e-07, 1.38146333483746275e-07, -4.10551166396544431e-08, -9.42653102242729801e-08, 7.44441450706290198e-08, -4.01487447732051805e-08, 9.91172939279749698e-08, -6.82922802752727875e-08, 8.49504786515353771e-08, -8.47961061367641378e-08, 1.11847739958648162e-07, -8.7086874600572628e-08, -2.88310189944240847e-07, -4.04325248837267281e-07, -2.58754937476624036e-07, 1.41927742447478522e-07, 5.62061757136689266e-07, 2.21989171222958248e-06, 5.37929827260086313e-06, 7.27429687685798854e-06, 5.52144683751976117e-06, 2.38052780332509428e-06, 6.85392819832486566e-07, 2.90599814434244763e-07, 4.39044953282063943e-07, 1.31325680285954149e-06, 2.87438660961925052e-06, 1.00000369548797607, 2.86425733975192998e-06, 1.35011248403316131e-06, 4.14069461385224713e-07, -1.53955554083040624e-07, -1.07195501186652109e-06, -3.17970739160955418e-06, -6.50186984785250388e-06, -8.5005176515551284e-06, -6.86690464135608636e-06, -3.3883191008499125e-06, -9.99923145172942895e-07, -1.87843923526997969e-07, -1.60988065545097925e-07, -2.75061921684027766e-07, -2.66066336962467176e-07, -2.19968654846525169e-07, -2.04617279564445198e-07, -1.52164645328412007e-07, -6.24136688998078171e-08, -7.22018000942625804e-08, 1.1339403016563665e-07, 5.14103284388056636e-08, -1.02597624618283589e-07, -1.51918342794488126e-07, 7.84172584644693416e-08, 6.20032523102054256e-08, -6.53516565307654673e-08, 6.4348171235906193e-08, -4.26550492704791395e-08, -7.24914528404951852e-08, -1.2940607518885372e-07, -1.2169681440354907e-07, 1.02051238570766145e-07, 2.60180883060456836e-07, 1.59644855557417031e-07, -5.48891847529375809e-08, -1.56149184249443351e-07, -7.62601430892573262e-08, 8.7573837959098455e-08, 5.06956219226140092e-08, -7.02336180324891757e-08, 7.65168479688327352e-08, -4.30517737015634339e-08, -6.34460306514483818e-08, -8.3831771746645245e-08, 6.42030855146913382e-08, 1.44686893577272713e-07, 2.83302199477475369e-07, 3.90682515671869623e-07, 3.33754201164992992e-07, 1.83391023256262997e-07, 5.77521284128579282e-08, -1.42918466394803545e-07, -7.54008965486718807e-07, -2.64686332229757681e-06, -5.98690348851960152e-06, -7.95750838733511046e-06, -6.12887652096105739e-06, -2.74098624686303083e-06, -7.83887685429363046e-07, -3.05048274640284944e-07, -5.93598429077246692e-07, -1.93664482139865868e-06, -4.29419696956756525e-06, -1.00000560283660889, -4.28553221354377456e-06, -1.93305390894238371e-06, -5.50182562619738746e-07, 5.37790079135902488e-08, 9.93662752080126666e-07, 3.37910705638932995e-06, 6.93624542691395618e-06, 8.72230430104536936e-06, 6.85115310261608101e-06, 3.56139207724481821e-06, 1.37124220600526314e-06, 3.70851125808258075e-07, 1.06204232963591494e-07, 3.09889315985856229e-07, 3.56689099589857506e-07, 2.35763280898027006e-07, 1.14253751348769583e-07, 5.5343576832456165e-08, -4.81029616139494465e-08, 1.00859253393537074e-07, -9.35347230779370875e-08, -1.48196193094918272e-07, 5.54001040597995598e-08, 4.64003093725295912e-08, 5.49164766994181264e-08, -6.5638836588277627e-08, -1.52476260950606957e-07, -1.74469136027255445e-07, 2.29005934215820162e-07, 1.69102023050982098e-07, -1.78799311356669932e-07, -1.34977938159863697e-07, 7.07910743358297623e-08, 4.85018460949504515e-08, -7.79184929911025392e-08, 7.15993593303210218e-08, -5.16321208010595001e-08, -6.91631996119212999e-08, -5.1195804928738653e-08, -1.22649552736220357e-07, -3.63189741392488941e-07, -4.78421611660451163e-07, -3.04907644022023305e-07, -5.86594524065731093e-08, 1.13177804905717494e-07, 7.42173995149641996e-07, 3.07676191368955187e-06, 7.13938879925990477e-06, 9.38027005759067833e-06, 7.12303653926937841e-06, 3.20819299304275773e-06, 1.00255556390038691e-06, 4.75325862225872697e-07, 8.91494153165695025e-07, 2.69562838184356224e-06, 5.87550675845704973e-06, 1.0000077486038208, 6.07394758844748139e-06, 2.83598205896851141e-06, 7.78814410296035931e-07, -7.3336828165793122e-08, -9.31542842863564147e-07, -3.1628969736630097e-06, -6.77656180414487608e-06, -8.64461435412522405e-06, -6.60123987472616136e-06, -3.18284537570434622e-06, -1.19919013741309755e-06, -4.88991872771293856e-07, -2.04676297244077432e-07, -1.47112558579465258e-07, -2.71952842467726441e-07, -3.74950644754790119e-07, -2.98302296641850262e-07, -1.46046971849500551e-07, 1.02752920838611317e-07, -7.37889180868478434e-08, -1.26471633166147512e-07, 6.07244814432306157e-08, 6.71902711246730178e-08, 4.67439882356757153e-08, -1.62014330840065668e-07, -1.96832488086329249e-07, 1.35160590275518189e-07, 1.21979681466655165e-07, -1.90705264913049177e-07, -1.71541145732589939e-07, 3.48363826674358279e-08, 3.40532828602135851e-08, -8.55121626841537363e-08, 8.66498481855160207e-08, -9.52920089503095369e-08, 6.66836967866402119e-08, -5.20237648515831097e-08, -5.99210210339151672e-08, 7.92260763660124212e-08, 1.62283129157003714e-07, 3.39292256512635504e-07, 4.95603330818994436e-07, 4.50015107844592421e-07, 2.14203907944465755e-07, -2.8019212550134398e-07, -9.83687755251594353e-07, -3.60022340828436427e-06, -8.38089908938854933e-06, -1.11372019091504626e-05, -8.50495689519448206e-06, -3.81408676730643492e-06, -1.15017212465318153e-06, -5.32764431682153372e-07, -1.16658929982804693e-06, -3.60603849003382493e-06, -7.64397373131942004e-06, -1.00000989437103271, -7.6944625106989406e-06, -3.69899476027057972e-06, -1.12849750166787999e-06, 9.04005162283283425e-07, 2.84710199593973812e-06, 6.14827695244457573e-06, 8.1366997619625181e-06, 6.43349494566791691e-06, 3.09328038383682724e-06, 1.02385024547402281e-06, 3.45747764640691457e-07, 1.82686036964696541e-07, 1.92010162436417886e-07, 3.11481841208660626e-07, 4.06301836619604728e-07, 3.29660508668894181e-07, 1.66300239357042301e-07, 6.24665688064851565e-08, 5.23737320179407106e-08, 1.02191286543984461e-07, 5.19322504999308876e-08, -6.82832705933833495e-08, -1.05088417967635905e-07, 6.60809860164590646e-08, 6.68241426637905533e-08, -5.34533697305050737e-08, 4.94819580865168973e-08, 6.99427502581784211e-08, -1.41522505714419822e-07, -1.44589222372815129e-07, 1.32171649624979182e-07, 1.19466278647450963e-07, -1.62127463454453391e-07, -1.63139262099321058e-07, -7.63413936510914937e-08, 8.03936828219775634e-08, -1.0064669453413444e-07, 1.29002543758360844e-07, -1.11821719883664628e-07, 5.93637103918354114e-08, -5.26848076276564825e-08, 6.73818192353792256e-08, -1.90177885883713316e-07, -4.70093681315120193e-07, -5.46369733456231188e-07, -3.60969210078110336e-07, -1.7764298831934866e-07, 2.48358361432110542e-07, 1.17722015602339525e-06, 4.17579531131195836e-06, 9.48164415603969246e-06, 1.25273836601991206e-05, 9.6068943093996495e-06, 4.39708719568443485e-06, 1.41854684443387669e-06, 6.62605202705890406e-07, 1.32085733639542013e-06, 4.25589360020239837e-06, 9.23536390473600477e-06, 1.00001192092895508, 9.21257287700427696e-06, 4.43954968432080932e-06, 1.468207528887433e-06, 7.0249782879727718e-08, -1.10629855498700636e-06, -3.02158446174871642e-06, -5.89875298828701489e-06, -7.68313566368306056e-06, -6.2960584727989044e-06, -3.23470362673106138e-06, -1.11889050913305255e-06, -3.41866183362071752e-07, -1.8812185942351789e-07, -2.41560627500803093e-07, -3.5617307503343909e-07, -4.31242114018459688e-07, -3.6264239611227822e-07, -1.96671408048132434e-07, -6.55628298318333691e-08, 6.94843365067754348e-08, 1.17050717562960926e-07, 5.70835148039350315e-08, -5.28365404761643731e-08, -6.39096313648224168e-08, 9.82313395070377737e-08, -4.71453951433886687e-08, 5.65132936003465147e-08, 7.28335010080627399e-08, 2.25655227836796257e-08, 3.67864068095968832e-08, -1.46250329180475092e-07, -1.09850816443213262e-07, 1.64193608043206041e-07, 1.39490126116470492e-07, -9.69744178291875869e-08, -1.14037334242311772e-07, -6.95054822585916554e-08, 8.67022720285604009e-08, 8.44608365468957345e-08, -4.7491383270426013e-08, 1.10852468537814275e-07, -9.26283760804835765e-08, 1.67488252600378473e-07, -1.14970944764536398e-07, 6.45158237944087887e-08, 3.75926560991501901e-08, -5.38264437466295931e-08, 8.28311002010195807e-08, 6.63090844454927719e-08, 1.56672740558860824e-07, 4.44841418811847689e-07, 6.54150483114790404e-07, 4.72549146479650517e-07, 1.54804780549966381e-07, -2.60686505271223723e-07, -1.25478732115880121e-06, -4.5196425162430387e-06, -1.02295252872863784e-05, -1.3497506188286934e-05, -1.03396023405366577e-05, -4.69800716018653475e-06, -1.52818358856166014e-06, -8.22518018139817286e-07, -1.51811036630533636e-06, -4.44893612439045683e-06, -9.62235026236157864e-06, -1.00001251697540283, -9.66957304626703262e-06, -4.51981259175227024e-06, -1.56959242758603068e-06, -4.45692961648092023e-07, 8.41225300973746926e-07, 3.35440995513636153e-06, 6.5309195633744821e-06, 7.90833837527316064e-06, 6.17685918768984266e-06, 3.24549796459905338e-06, 1.24736698126071133e-06, 3.74719462570283213e-07, 1.33583668571191083e-07, 2.31531558370079438e-07, 4.2539906530691951e-07, 4.88952537125442177e-07, 3.70905041791047552e-07, 2.06413758974122175e-07, 9.64896287314331857e-08, -5.51856231822966947e-08, 8.45362535528693115e-08, 1.27293304785780492e-07, -9.01078394122123427e-08, -9.46535863022290869e-08, 1.21681765108405671e-07, -5.85286024090692081e-08, 5.52838379519471346e-08, 8.24019679157572682e-08, -4.77253330188887048e-08, -4.06136422270719777e-08, 1.01500823745936941e-07, -1.3523845154850278e-07, -8.96569787300904864e-08, 7.67218750752363121e-08, 1.77911758214577276e-07, 1.12108118344167451e-07, -9.13962878712482052e-08, -7.67638042020735156e-08, 5.43861808921519696e-08, 8.1009140728838247e-08, 2.57862268426833907e-07, -1.45399127404743922e-07, 1.8134898027710733e-07, -1.18626630296603253e-07, 2.53243448433693175e-09, 5.76914089833735488e-08, 1.05270714811922517e-07, -5.40843920759925822e-08, -2.26122523372396245e-07, -4.91480477649020031e-07, -6.66036953589355107e-07, -5.1931908728874987e-07, -1.96157984078126901e-07, 3.23455452644338948e-07, 1.44061493756453274e-06, 5.1202932809246704e-06, 1.14670028779073618e-05, 1.5092704416019842e-05, 1.16458741103997454e-05, 5.34636319571291097e-06, 1.66173015259118984e-06, 8.34309162200952414e-07, 1.76207095137215219e-06, 5.00826581628643908e-06, 1.04578884929651394e-05, 1.00001370906829834, 1.09345610326272435e-05, 5.08827861267491244e-06, 1.25583676435780944e-06, -5.37211860773822991e-07, -2.55686450145731214e-06, -6.10380357102258131e-06, -7.92381615610793233e-06, -6.036179001966957e-06, -2.94414417112420779e-06, -1.14667614070640411e-06, -4.66819443545318791e-07, -2.04693890282214852e-07, -2.11414985074043216e-07, -4.18862384776730323e-07, -5.59746638373326277e-07, -4.38442441463848809e-07, -2.09608089107859996e-07, -7.65793544132975512e-08, -7.25112982991049648e-08, 7.36205407747547724e-08, 1.34373863147629891e-07, -1.21687733667386055e-07, -1.50308963497991499e-07, 1.01106728322974959e-07, -3.91282490852518094e-08, 9.71921139125697664e-08, -4.99060810454921011e-08, -6.22406304273681599e-08, 1.05058774124699994e-07, -1.31250928347981244e-07, -8.60678710523643531e-08, 1.09370340339864924e-07, 2.09490735869621858e-07, 1.07262721371625958e-07, -1.26666279243181634e-07, 6.62615988744619244e-08, 6.27990104362652346e-08, 1.19153121147519414e-07, -2.09289268582324439e-07, 1.67983259302673105e-07, 5.19125578080092964e-08, -1.54059662804684194e-07, 5.73278917670450028e-08, -5.82280286209879705e-08, -5.26805052913914551e-08, 1.135224252379885e-07, 9.41108311280913767e-08, 2.36703129985471605e-07, 5.50333311366557609e-07, 7.39488484668981982e-07, 5.89968010444863467e-07, 2.56073633408959722e-07, -4.1532214822836977e-07, -1.69891291079693474e-06, -5.98037240706617013e-06, -1.33655448735225946e-05, -1.75199620571220294e-05, -1.35350173877668567e-05, -6.36585582469706424e-06, -2.10383336707309354e-06, -9.35987600314547308e-07, -1.93500477507768665e-06, -5.92209016758715734e-06, -1.20822205644799396e-05, -1.0000152587890625, -1.21815301099559292e-05, -6.46473426968441345e-06, -2.28334010898834094e-06, 1.22029928206757177e-06, 2.47202615355490707e-06, 4.79168147649033926e-06, 6.5375343183404766e-06, 5.41919780516764149e-06, 2.70790769718587399e-06, 9.05596721167967189e-07, 3.20700166867027292e-07, 2.32308536851633107e-07, 3.0455342425739218e-07, 4.63770589931300492e-07, 5.76413981434598099e-07, 4.88764726469526067e-07, 2.69962498578024679e-07, 1.00555048732076102e-07, -5.4003315597128676e-08, -5.97375091615504061e-08, 6.0650251043625758e-08, 1.44857580153257004e-07, 4.94205849577156187e-08, -1.20651506563262956e-07, -1.64972604466129269e-07, 9.62931565595681604e-08, 5.60350912337526097e-08, -4.78237467405051575e-08, -4.81605511026828026e-08, -5.40184501574003662e-08, 7.85355922516828286e-08, -5.16780644943537482e-08, -7.52531548187107546e-08, 7.987883776650051e-08, -1.28323861758872226e-07, -9.3986436411341856e-08, 1.33385967160393193e-07, 2.60358831383200595e-07, 1.48732269167339837e-07, -4.73077506057961727e-08, -1.03275063167984626e-07, 7.98885508856983506e-08, 1.3799191833641089e-07, -2.65041137481603073e-07, 1.20199217690242222e-07, 1.05913713355221262e-07, -1.63774757311330177e-07, 8.75532677468982001e-08, -7.19627166745340219e-08, -7.74042305806688091e-08, 1.09153617700030736e-07, -6.30868228768122208e-08, -2.92187593231574283e-07, -6.53629797398025403e-07, -8.09072218999062898e-07, -5.89736259826167952e-07, -2.69303455979752471e-07, 4.91913112909969641e-07, 2.03322997549548745e-06, 6.92367484589340165e-06, 1.53511282405816019e-05, 2.00700906134443358e-05, 1.54052504512947053e-05, 7.18917362974025309e-06, 2.50820858127553947e-06, 1.24485291053133551e-06, 1.9844842427119147e-06, 6.15684075455646962e-06, 1.34505371534032747e-05, 1.00001704692840576, 1.260044336959254e-05, 5.89685168961295858e-06, 2.47733350988710299e-06, 1.07106609448237577e-06, -5.00197472774743801e-07, -2.4947173642431153e-06, -4.42133296019164845e-06, -5.22499840371892788e-06, -4.20443848270224407e-06, -2.30719660976319574e-06, -8.99262715847726213e-07, -2.73477013479350717e-07, -1.4813485904596746e-07, -3.07592983972426737e-07, -5.64849813144974178e-07, -6.72319288241851609e-07, -5.24430390669294866e-07, -2.8205568014527671e-07, -1.16000705929764081e-07, -7.34260439116951602e-08, 1.23585238043233403e-07, 5.20564711337101471e-08, -1.1692189616496762e-07, -1.68389490795561869e-07, 8.63304805420739285e-08, 6.64919710402500641e-08, -7.11031873379397439e-08, 6.69202933067936101e-08, -4.61269742402237171e-08, -7.53187947566402727e-08, -1.41710714274267957e-07, -1.29939081716656801e-07, 1.12898611348555278e-07, 2.81370773791422835e-07, 1.69493972634882084e-07, -6.37274553128008847e-08, -1.72072986970306374e-07, -8.28447141998367442e-08, 9.6776425095868035e-08, 2.21433495539713476e-07, -2.4936358045124507e-07, 5.27792458626663574e-08, 1.54578543742900365e-07, -1.56989273136787233e-07, 8.65483826828494784e-08, -4.4720842140577588e-08, -4.84915929632734333e-08, -3.38976633429410867e-08, -5.99266769540918176e-08, -7.58621752083854517e-08, 6.51591633982206986e-08, 2.39401060753152706e-07, 6.6178171209685388e-07, 9.12467271518835332e-07, 6.52905782771995291e-07, 2.30170300596910238e-07, -4.71910141186526744e-07, -2.03003082788200118e-06, -6.88579802954336628e-06, -1.5221523426589556e-05, -2.00324066099710763e-05, -1.55154775711707771e-05, -7.15475516699370928e-06, -2.29488500735897105e-06, -1.18102775559236761e-06, -1.65864696555217961e-06, -3.6311960229795659e-06, -7.78103003540309146e-06, -1.00001108646392822, -9.12886844162130728e-06, -3.93955360777908936e-06, -6.10731319738988532e-07, 6.13828916584679973e-08, 4.20128145606213366e-07, 2.3522934498032555e-06, 5.45033753951429389e-06, 6.92144885761081241e-06, 5.31707109985291027e-06, 2.68782082457619254e-06, 1.07753010070155142e-06, 4.35669306853014859e-07, 2.29334986556750664e-07, 3.01966622373583959e-07, 5.50918059616378741e-07, 7.02151794484962011e-07, 5.67458812383847544e-07, 3.02435665844313917e-07, 1.18931218651141535e-07, -4.66422669376242993e-08, 1.11265499924684264e-07, -1.06405344979521033e-07, -1.63979620992904529e-07, 6.00923470983616426e-08, 4.6426098521124004e-08, 5.55853674200079695e-08, -6.73061322231660597e-08, -1.58773048042348819e-07, -1.77423018499212048e-07, 2.53114052384262322e-07, 1.82578432372793031e-07, -5.45145795172174985e-08, -1.93917884416805464e-07, -1.44091288234449166e-07, 7.93786156805253995e-08, 2.56988215596720693e-07, -2.1698028263017477e-07, 1.66105863286247768e-07, -1.3430420153781597e-07, 9.52210328364344605e-08, -5.21140961495802912e-08, -7.56121281142441148e-08, -6.66386128500562336e-08, -5.34904884830211813e-08, 8.24339849714306183e-08, -1.17567971358312207e-07, -2.9429011760839785e-07, -6.25014479282981483e-07, -8.68246331720001763e-07, -7.05620493590686237e-07, -2.98729275982623221e-07, 4.53287782420375152e-07, 1.84576003903202945e-06, 6.0578013290069066e-06, 1.30543530758586712e-05, 1.7017940990626812e-05, 1.33636858663521707e-05, 6.42046779830707237e-06, 1.92274092114530504e-06, 4.73410210588554037e-07, 9.85665565167437308e-07, 2.4446680981782265e-06, 3.53880568582098931e-06, 1.00000381469726562, 3.60798458132194355e-06, 2.63058836935670115e-06, 9.27175676679325989e-07, -6.28194186447217362e-07, -1.84327063834643923e-06, -4.1766706999624148e-06, -8.19972683530068025e-06, -1.06538245745468885e-05, -8.59559713717317209e-06, -4.41526481154141948e-06, -1.63655840879073367e-06, -5.79207096507161623e-07, -2.9964510872559913e-07, -3.54769724708603462e-07, -5.63086871352425078e-07, -6.79392485380958533e-07, -5.43471514902194031e-07, -2.96496608598317835e-07, -1.24615397112393111e-07, 1.15003707890082296e-07, -8.26609394266597519e-08, -1.38601436106000619e-07, 6.65108288444571372e-08, 6.85994265836598061e-08, 2.33131416393916879e-08, 3.66949066687993763e-08, -1.68799076050163421e-07, -1.98701442855053756e-07, 1.58737506694706099e-07, 1.37595549176694476e-07, -6.17799216229286685e-08, -2.00319661303183238e-07, -1.74502076788485283e-07, 6.2068565398476494e-08, 6.88772914259061508e-08, -5.29888239952924778e-08, 2.6370150862931041e-07, -1.27444494069095526e-07, -6.93748702929042338e-08, 1.99684947688183456e-07, -7.37445517984269827e-08, -7.96801558067272708e-08, 9.37074133844362223e-08, -7.73298012290979386e-08, 5.95403299996632995e-08, -7.6027696138680767e-08, -5.74115475160397182e-08, -3.44683286357394536e-08, 6.44386588533052418e-08, 3.22015296205790946e-07, 7.06468995304021519e-07, 8.80802360825327924e-07, 6.49557193810323952e-07, 2.77625673561487929e-07, -3.08064500131877139e-07, -1.39885571570630418e-06, -4.86427279611234553e-06, -1.05930112113128416e-05, -1.35816408146638423e-05, -1.04098180599976331e-05, -5.16396494276705198e-06, -2.13843463825469371e-06, -1.08660867681464879e-06, -2.01719694814528339e-06, -7.42720339985680766e-06, -1.63430595421232283e-05, -1.00002026557922363, -1.48986046042409725e-05, -7.11398161001852714e-06, -2.82756286651419941e-06, -6.05600007475004531e-07, 1.93390542335691862e-06, 6.2260251070256345e-06, 1.20560753202880733e-05, 1.51256208482664078e-05, 1.21207085612695664e-05, 6.38805659036734141e-06, 2.48072956310352311e-06, 8.62510773913527373e-07, 3.5912066209675686e-07, 3.50654289604790392e-07, 5.55093549792218255e-07, 6.8086472992945346e-07, 5.41706583589984803e-07, 2.82132077700225636e-07, 1.11525125134903647e-07, 6.16258262198243756e-08, 1.13245889110658027e-07, 5.55696573201203137e-08, -7.65117107448531897e-08, -1.14301371922920225e-07, 7.42334833603308653e-08, 7.04861733424877457e-08, -5.57138584156291472e-08, 5.22202512343028502e-08, 7.06936944538938405e-08, -1.49858294662408298e-07, -1.48956019074830692e-07, 1.42729760455040378e-07, 1.21187724744231673e-07, -1.76734545220824657e-07, -1.70141390753997257e-07, -7.11133765207705437e-08, 1.10303524536448094e-07, -2.99266460501712572e-08, 2.30028646797109104e-07, -5.99833214209866128e-08, -1.16855787268832501e-07, 1.53597724761311838e-07, -1.11776039091182611e-07, 7.45334318708046339e-08, 6.19569604509706551e-08, 5.99297180770008708e-08, 5.75894318899372593e-08, -7.13116392603296845e-08, -2.69465687097181217e-07, -6.62736681533715455e-07, -9.11592792363080662e-07, -7.13233703208970837e-07, -3.01333614061150001e-07, 3.27125519561377587e-07, 1.06471759409032529e-06, 3.38888457918073982e-06, 7.58180158300092444e-06, 1.00629549706354737e-05, 7.6698033808497712e-06, 3.407917120057391e-06, 1.45447404520382406e-06, 1.87289742825669236e-06, 3.73189868696499616e-06, 9.17987381399143487e-06, 1.94067924894625321e-05, 1.00002622604370117, 2.11215483432170004e-05, 1.00838951766490936e-05, 2.9433979307214031e-06, 9.85101848982594674e-08, -2.49025220000476111e-06, -7.94332208897685632e-06, -1.59274422912858427e-05, -2.01323746296111494e-05, -1.60370200319448486e-05, -8.38067262520780787e-06, -3.26205395140277687e-06, -1.16132252969691763e-06, -4.76564309792593122e-07, -3.84827529842368676e-07, -5.28458656390284887e-07, -6.33322429166582879e-07, -5.24897586728911847e-07, -2.92097979581740219e-07, -1.10546281462120533e-07, 7.86425786714062269e-08, 1.26038031567077269e-07, 5.50927374831644556e-08, -6.83367531451040122e-08, -7.8498544553440297e-08, 1.05576461351120088e-07, 6.74012170520654763e-08, -5.12234379357323633e-08, 6.01225735863408772e-08, 7.58333698058777372e-08, -5.29641539515068871e-08, 3.85469718366948655e-08, 4.98501862011835328e-08, -1.51806133885656891e-07, -1.10367707861769304e-07, 4.94529608374705276e-08, 1.76160099840672046e-07, 1.3823105859955831e-07, -1.15376664666655415e-07, -1.24304918358575378e-07, -7.20280723953692359e-08, 9.20458020914338704e-08, 8.73732730610754516e-08, -5.37114814846972877e-08, 1.34499956061517878e-07, -1.23137638752268685e-07, 1.26121790344768669e-07, -7.93147734157173545e-08, -5.44912701627708884e-08, 7.23517175060806039e-08, 6.46524043190765951e-08, 7.29861895365502278e-08, 6.02725833687145496e-08, -5.14849780586246197e-08, 9.52683194554992951e-08, 3.28990068965140381e-07, 6.96915037678991212e-07, 8.70200551617017481e-07, 6.58128612940345192e-07, 3.35694153363874648e-07, 1.21024712029793591e-07, -1.53834335492319951e-07, -8.12611517631012248e-07, -2.31228295888286084e-06, -4.66839674118091352e-06, -6.22569859842769802e-06, -5.21222364113782533e-06, -2.52567747338616755e-06, -5.16497891567269107e-07, -5.28353609752230113e-07, -2.87075181404361501e-06, -7.73617193772224709e-06, -1.4029648809810169e-05, -1.00001728534698486, -1.40807778734597377e-05, -7.53799031372182071e-06, -2.48332571572973393e-06, 4.5748120669486525e-07, 3.57843578058236744e-06, 9.97408278635703027e-06, 1.95225766219664365e-05, 2.47281950578326359e-05, 1.98559228010708466e-05, 1.04664877653704025e-05, 4.08738605983671732e-06, 1.42997384955378948e-06, 5.4759254908276489e-07, 4.12988839570971322e-07, 5.48630112007231219e-07, 6.17622731624578591e-07, 4.81245592709456105e-07, 2.70364353127661161e-07, 1.22168231087016466e-07, -5.96519669215922477e-08, 9.51712877395038959e-08, 1.38820979600495775e-07, -1.03982948473912984e-07, -1.06236051067298831e-07, 1.35303054094038089e-07, -6.07047567768859153e-08, 5.91281299477941502e-08, 8.47475263299202197e-08, -5.24433509951904853e-08, -4.19790318062496226e-08, 1.06590576365306333e-07, -1.4600296083244757e-07, -9.10417909949501336e-08, 9.0984869416388392e-08, 1.96300604216048669e-07, 1.17457112480678916e-07, -1.03131839068737463e-07, -7.9057080881739239e-08, 5.79054812988033518e-08, 8.27688282356575655e-08, -2.09296473485665047e-07, -1.09199220332811819e-07, 7.73589050595546723e-08, -6.23362907958835422e-08, 5.93436197959817946e-08, -5.3338020222781779e-08, 7.493942177916324e-08, 5.53116983326162881e-08, 6.1889736002740392e-08, 9.82057457576956949e-08, -6.99918771829288744e-08, -2.79631308330863249e-07, -7.18221542683750158e-07, -9.81233483798860107e-07, -7.12213477527257055e-07, -2.54413777156514698e-07, 4.04199738568422617e-07, 1.65898597970226547e-06, 3.38019117407384329e-06, 3.9928249861986842e-06, 3.10488007926323917e-06, 1.9980554952780949e-06, 1.19704554890631698e-06, 7.46877049095928669e-07, 2.11129554372746497e-06, 7.81740345701109618e-06, 1.66970658028731123e-05, 1.00002086162567139, 1.59433457156410441e-05, 7.86245982453692704e-06, 2.65859466708207037e-06, -3.16788032250769902e-07, -4.01026500185253099e-06, -1.14705762825906277e-05, -2.22634062083670869e-05, -2.80129788734484464e-05, -2.24720606638584286e-05, -1.19114665722008795e-05, -4.71867042506346479e-06, -1.68629730978864245e-06, -6.28881082320731366e-07, -4.0805369394547597e-07, -5.37327650818042457e-07, -6.40282564745575655e-07, -5.03951810060243588e-07, -2.6343343506596284e-07, -1.11644972378144303e-07, -7.91867620364428149e-08, 8.25390031877759611e-08, 1.47034569408788229e-07, -1.34807166318751115e-07, -1.60082421984952816e-07, 1.26415429235748888e-07, -3.30939080583902978e-08, -3.9157374231990616e-08, 1.01146575559596386e-07, -5.39910054442316323e-08, -6.40960848841132247e-08, 1.10563249222650484e-07, -1.44535604817974672e-07, -8.90097240358045383e-08, 1.27133873206730641e-07, 2.36122076557876426e-07, 1.25612515944339975e-07, -6.01514074105580221e-08, -1.08936490050837165e-07, 7.49281383605193696e-08, 6.52588596494751982e-08, -7.91664547250547912e-08, -4.42613838913530344e-08, -1.05016741969166105e-08, 8.45818206585136068e-08, 1.04070608131223707e-07, 8.63130651396204485e-08, 1.38610488420454203e-07, 3.59885007128468715e-07, 7.19116883374226745e-07, 9.74236513684445526e-07, 8.19046647393406602e-07, 3.83615429200290237e-07, -1.864137999518789e-07, -4.33013241263324744e-07, -1.47888340507051907e-06, -3.54605344909941778e-06, -4.64538379674195312e-06, -3.24641541737946682e-06, -1.31957983739994233e-06, -9.21080356874881545e-07, -1.65470123647537548e-06, -3.3976518807321554e-06, -8.47488536237506196e-06, -1.73869211721466854e-05, -1.0000227689743042, -1.8250553694088012e-05, -9.09826121642254293e-06, -2.88020237348973751e-06, 3.88671452355993097e-07, 4.17747196479467675e-06, 1.19395053843618371e-05, 2.32180555030936375e-05, 2.92463064397452399e-05, 2.35012339544482529e-05, 1.24874686662224121e-05, 4.95473204864538275e-06, 1.78707489340013126e-06, 7.05560239566693781e-07, 4.69549348736109096e-07, 5.65374648431316018e-07, 6.57945292914519086e-07, 5.3850266112931422e-07, 2.92281214342438034e-07, 1.1250619280644969e-07, -5.72379299512704165e-08, -6.3672459305053053e-08, 6.75054820931109134e-08, 1.57442840986732335e-07, 4.97555454614939663e-08, -1.37505452357800095e-07, -1.83045173685059126e-07, 1.09837827722003567e-07, 6.17234192645810253e-08, -5.66015216918458464e-08, -5.67439784049383888e-08, -5.48239604825084825e-08, 8.20543348822866392e-08, -5.46277298951736157e-08, -7.59301457264882629e-08, 8.84058337646820291e-08, -1.38969468821414921e-07, -9.88559492043350474e-08, 1.47691778806802176e-07, 2.8002187946185586e-07, 1.49652166214764293e-07, -7.39282270956209686e-08, -1.45620859370865219e-07, -2.64933426308289199e-08, 8.30524911066277127e-08, 7.38187964088865556e-08, -4.35727542935637757e-08, -3.29550147171175922e-08, 6.13317183706385549e-08, -7.63911316425947007e-08, 9.28533339106252242e-08, -7.28729006027606374e-08, -3.91311402836436173e-07, -8.60624993492820067e-07, -1.05646120118763065e-06, -7.97175175648590084e-07, -4.23589114006972522e-07, -1.39461448611655214e-07, 2.07020860898410319e-07, 8.26997279546048958e-07, 2.18212585423316341e-06, 4.50752395408926532e-06, 6.1846048993174918e-06, 5.15019428348750807e-06, 2.41317184190847911e-06, 6.57488044453202747e-07, 9.64351784205064178e-07, 3.52275969817128498e-06, 9.54184361035004258e-06, 1.83647334779379889e-05, 1.00002312660217285, 1.84145246748812497e-05, 9.43408940656809136e-06, 3.12542147185013164e-06, -3.63878854159338516e-07, -4.25930875280755572e-06, -1.1961430573137477e-05, -2.30560417548986152e-05, -2.89853214781032875e-05, -2.33623632084345445e-05, -1.25150600069900975e-05, -5.01118984175263904e-06, -1.79527944510482484e-06, -7.00425403010740411e-07, -5.0300502607569797e-07, -6.3579528841728461e-07, -7.23031291727238568e-07, -5.85060092817002442e-07, -3.31220462612691335e-07, -1.3337451321149274e-07, -7.47412798318691785e-08, 1.36513364168422413e-07, 5.39128954812895245e-08, -1.3311354507550277e-07, -1.87033279530623986e-07, 9.77057510453960276e-08, 7.19336412657867186e-08, -8.33803781574715686e-08, 7.01912554745831585e-08, -4.8051397527615336e-08, -7.52645874513291346e-08, -1.53064718233508756e-07, -1.38574549168879457e-07, 1.24385763911050162e-07, 3.0372257242561318e-07, 1.78597815647663083e-07, -7.58036904358050379e-08, -1.91625957768337685e-07, -9.00996539598963864e-08, 1.12834463550370856e-07, -5.32495896266027557e-08, -7.01759503840548859e-08, 6.64528414517917554e-08, 1.25245037452259567e-07, 3.88442941812172648e-07, 9.1834976956306491e-07, 1.21646655770746293e-06, 8.83397831330512417e-07, 3.58888826212933054e-07, 9.03995598378060095e-08, -1.62598354336296325e-07, -9.97498887045367155e-07, -3.13244140670576598e-06, -6.20620403424254619e-06, -7.77057448431150988e-06, -6.27918871032306924e-06, -3.49862762050179299e-06, -1.60506044721842045e-06, -1.23297309073677752e-06, -3.12644783662108239e-06, -9.14283828024053946e-06, -1.84136879397556186e-05, -1.00002336502075195, -1.84438777068862692e-05, -9.384917575516738e-06, -3.14631824949174188e-06, 3.08954554384399671e-07, 4.22354287366033532e-06, 1.19045325845945626e-05, 2.28657099796691909e-05, 2.8661577744060196e-05, 2.30857567657949403e-05, 1.24174257507547736e-05, 5.04218178321025334e-06, 1.84944315151369665e-06, 7.30733574982878054e-07, 5.29173064478527522e-07, 6.93687184138980228e-07, 7.95086862126481719e-07, 6.3022150698088808e-07, 3.58341850414944929e-07, 1.63509469075506786e-07, 4.86442708336198848e-08, -4.58267699343650747e-08, 1.22098299470962957e-07, -1.20348360610478267e-07, -1.77711413584802358e-07, 9.1431765270044707e-08, 9.20934510872939427e-08, -6.75530458238426945e-08, 5.75884655518166255e-08, -6.64794370663912559e-08, -1.67679246487750788e-07, -1.85701907184920856e-07, 2.73323053079366218e-07, 1.91835567875386914e-07, -6.60153673948116193e-08, -2.14613919524708763e-07, -1.56602609990841302e-07, 9.21226543937336828e-08, -6.10736705652925593e-08, -1.4210596077646187e-07, -4.37422414734101039e-07, -9.48300225900311489e-07, -1.28714623315318022e-06, -1.01705370525451144e-06, -4.21887591528502526e-07, 2.75274771865952061e-07, 1.11886322429199936e-06, 3.69629037777485792e-06, 7.78846606408478692e-06, 9.81851553660817444e-06, 7.47825015423586592e-06, 3.70672273675154429e-06, 1.69343866218696348e-06, 1.58273974193434697e-06, 3.42179509971174411e-06, 8.94369077286683023e-06, 1.7660566300037317e-05, 1.00002241134643555, 1.78938771568937227e-05, 9.15193868422647938e-06, 3.0383948796952609e-06, -3.81943266347661847e-07, -4.25517191615654156e-06, -1.18422431114595383e-05, -2.26841948460787535e-05, -2.84562902379548177e-05, -2.29684992518741637e-05, -1.23825602713623084e-05, -5.04357376485131681e-06, -1.87334921974979807e-06, -7.64349522341944976e-07, -5.62280945359816542e-07, -7.46554633224150166e-07, -8.75629780239250977e-07, -6.9108017441976699e-07, -3.69061666560810409e-07, -1.63531069574673893e-07, -7.72183881281307549e-08, 1.2988343200959207e-07, -9.32980270818006829e-08, -1.5288628674170468e-07, 7.52634505829519185e-08, 7.22026314292634197e-08, 2.46777194234937269e-08, 3.6486628829379697e-08, -1.76464453716107528e-07, -2.04990413976702257e-07, 1.74821494169918878e-07, 1.44312650718347868e-07, -7.35493372872042528e-08, -2.20634802872154978e-07, -1.88987485216784989e-07, 6.95865836064513132e-08, 7.66351107017726463e-08, -5.68500126973958686e-08, -5.22854080031720514e-08, 1.57940064582362538e-07, 5.03643491356342565e-07, 1.04061939509847434e-06, 1.35308573590009473e-06, 1.09445852558565093e-06, 5.13404643243120518e-07, -4.34018090800236678e-07, -1.41304735734593123e-06, -4.27633813160355203e-06, -9.10569815459894016e-06, -1.18839616334298626e-05, -9.35954994929488748e-06, -4.61611489299684763e-06, -1.81341260940826032e-06, -1.42721353313390864e-06, -3.18959700962295756e-06, -8.36677463667001575e-06, -1.63257864187471569e-05, -1.00002062320709229, -1.64425255206879228e-05, -8.47042701934697106e-06, -2.82873952528461814e-06, 4.56878410659555811e-07, 4.30364025305607356e-06, 1.17733752631465904e-05, 2.23521983571117744e-05, 2.79791329376166686e-05, 2.26513202505884692e-05, 1.22941619338234887e-05, 5.04133458889555186e-06, 1.88393823918886483e-06, 7.94364666489855153e-07, 6.06978801442892291e-07, 7.94618188137974357e-07, 9.42956091876112623e-07, 7.78475452989368932e-07, 4.2636915509319806e-07, 1.60325129172633751e-07, 5.13457294459840341e-08, 7.3625749053007894e-08, 1.27159225371542561e-07, 5.99751643903800868e-08, -8.68976073320482101e-08, -1.25702015907336317e-07, 8.50705603738788341e-08, 7.58957483526501164e-08, -6.01637211161687446e-08, 5.45486251724014437e-08, 7.10403185166796902e-08, -1.5720819135367492e-07, -1.51708050566412567e-07, 1.58422835738747381e-07, 1.25812647411294165e-07, -1.96820337805547751e-07, -1.86483276820581523e-07, -8.1235910442956083e-08, 4.11102440978083905e-08, 9.6421935324997321e-08, 3.66102383964062028e-08, -6.47488107574645255e-08, 5.74180347712172079e-08, -1.504381543782074e-07, -5.53169002159847878e-07, -1.16580224585050019e-06, -1.44453167649771785e-06, -1.11511531031283084e-06, -5.76750608161091805e-07, -9.86416424098024436e-08, 5.44291197002166882e-07, 1.90235709851549473e-06, 5.22627487953286618e-06, 1.05631270344019867e-05, 1.36769795062718913e-05, 1.09573102236026898e-05, 5.58711963094538078e-06, 2.2065787561587058e-06, 1.46243962717562681e-06, 2.88564478978514671e-06, 7.43556029192404822e-06, 1.44714958878466859e-05, 1.00001823902130127, 1.4561114767275285e-05, 7.49853415982215665e-06, 2.47322486757184379e-06, -5.49876972399943043e-07, -4.30463751399656758e-06, -1.17078143375692889e-05, -2.21294430957641453e-05, -2.76147966360440478e-05, -2.23626702791079879e-05, -1.22032442959607579e-05, -5.05264597450150177e-06, -1.89917795978544746e-06, -8.15409634924435522e-07, -6.65471588945365511e-07, -8.74766385550174164e-07, -1.00161332738935016e-06, -8.22326398974837502e-07, -4.83477890611538896e-07, -2.09144701557306689e-07, -5.56474617496860446e-08, -5.57472645823509083e-08, 9.85903341188532067e-08, 1.43541612374065153e-07, 5.92271049981718534e-08, -7.94343080201542762e-08, -8.75862085081280384e-08, 1.20237757528229849e-07, 7.32182030560579733e-08, -5.45899290216311783e-08, 6.32444709935953142e-08, 7.64491332461147977e-08, -6.15390263192239217e-08, 4.21083967694357852e-08, 5.31901278577606718e-08, -1.6181078876797983e-07, -1.11545197967188869e-07, 6.36653112451313064e-08, 1.95625091237161541e-07, 1.44818045555439312e-07, -1.30491216054906545e-07, -1.33299096205519163e-07, -7.46248005611960252e-08, 9.77128280510441982e-08, 9.23614464909405797e-08, -5.54423884580046433e-08, 6.93631037052000465e-08, 5.71279059613516438e-08, 5.90975233194512839e-08, 1.52251999452346354e-07, 5.40793394065985922e-07, 1.26143788747867802e-06, 1.62732328590209363e-06, 1.16142382466932759e-06, 4.87936290483048651e-07, 1.2719569042474177e-07, -4.00982656856285757e-07, -2.0747493181261234e-06, -6.22261404714663513e-06, -1.23760119095095433e-05, -1.5621226339135319e-05, -1.23744530355907045e-05, -6.37229550193296745e-06, -2.53718644671607763e-06, -1.47441176068241475e-06, -2.52291306424012873e-06, -6.27876943326555192e-06, -1.21108250823454e-05, -1.0000152587890625, -1.22055489555350505e-05, -6.29436181043274701e-06, -1.99257124222640414e-06, 7.42626127703260863e-07, 4.34728508480475284e-06, 1.15971633931621909e-05, 2.18474233406595886e-05, 2.72475226665847003e-05, 2.20829479076201096e-05, 1.20938357213162817e-05, 5.05426714880741201e-06, 1.92314223568246234e-06, 8.26118366603623144e-07, 6.9379069600472576e-07, 9.574605428497307e-07, 1.09649613477813546e-06, 8.64852211179822916e-07, 4.91919251999206608e-07, 2.31906724934560771e-07, 8.53524610988642962e-08, -6.66632757884144667e-08, 1.08553059874338942e-07, 1.52065425140790467e-07, -1.31297639427430113e-07, -1.36899458880179736e-07, 1.35953257540677441e-07, 6.60928591855736158e-08, -6.44965183482781867e-08, 6.25808027621133078e-08, 8.64789910792751471e-08, -5.93864974973712378e-08, -4.47532215730461758e-08, 1.13134163370887109e-07, -1.58493790536340384e-07, -9.27583627685635292e-08, 1.07950413053004013e-07, 2.18813326569033961e-07, 1.25219642654883501e-07, -1.16352886436743574e-07, -8.29029289661775692e-08, 5.48772973729683144e-08, 7.49658966014976613e-08, 1.24068764151274991e-08, -7.17343411338333681e-08, 5.64726896357115038e-08, 9.16944955520193616e-08, -7.16222814389766427e-08, -2.28829307502564916e-07, -5.85904558647598606e-07, -1.25766166547691682e-06, -1.75472393948439276e-06, -1.40181919050519355e-06, -5.10944289544568164e-07, 1.36113953885796946e-07, 6.3555052065566997e-07, 2.18696504816762172e-06, 6.7954015321447514e-06, 1.40595630000461824e-05, 1.79126818693475798e-05, 1.40763140734634362e-05, 7.14414954927633516e-06, 2.79412506642984226e-06, 1.44688897307787556e-06, 2.07804282581491861e-06, 4.93646984978113323e-06, 9.4178176368586719e-06, 1.00001180171966553, 9.4625838755746372e-06, 4.89752846988267265e-06, 1.48030494528939016e-06, -9.27789585603022715e-07, -4.40830990555696189e-06, -1.14800604933407158e-05, -2.14683259400771931e-05, -2.67500654445029795e-05, -2.17256329051451758e-05, -1.19452215585624799e-05, -5.02824059367412701e-06, -1.94872723113803659e-06, -8.57021234423882561e-07, -7.12512303380208323e-07, -1.00592774288088549e-06, -1.20000549941323698e-06, -9.57442807703046128e-07, -5.15323563377023675e-07, -2.2363356322330219e-07, -1.02261935808201088e-07, -9.09224198153424368e-08, 9.43202707048840239e-08, 1.64256391599337803e-07, -1.52087167748504726e-07, -1.75275602032343158e-07, 1.5192493663107598e-07, -3.91243801800555957e-08, -3.38689822854121303e-08, -6.87575720803579316e-08, 4.72965133724301268e-08, 8.56748840760701569e-08, -6.49309512823492696e-08, -6.87947050437287544e-08, 1.19152488764484588e-07, -1.59190562953881454e-07, -9.33356787413686106e-08, 1.45212709412589902e-07, 2.61705395132594276e-07, 1.35903064801823348e-07, -6.97845550234887924e-08, -1.19551017974117713e-07, 7.62733520787151065e-08, 6.56339480542555975e-08, 9.36252604333276395e-08, 7.93981485003314447e-08, 2.31830625807560864e-07, 7.22645495443430264e-07, 1.37181973514088895e-06, 1.72311126789281843e-06, 1.4695328900415916e-06, 8.02390104581718333e-07, -9.17434306302311597e-07, -2.8211447897774633e-06, -7.72281600802671164e-06, -1.55937905219616368e-05, -2.00452250282978639e-05, -1.59791925398167223e-05, -8.17144882603315637e-06, -3.11917597173305694e-06, -1.38637415147968568e-06, -1.5510821640418726e-06, -3.41498684974794742e-06, -6.43353587292949669e-06, -1.0000079870223999, -6.412618859030772e-06, -3.27959151036338881e-06, -8.59494264204840874e-07, 1.11935014501796104e-06, 4.43562248619855382e-06, 1.1347335203026887e-05, 2.10691941902041435e-05, 2.6190877179033123e-05, 2.13049388548824936e-05, 1.17633217087131925e-05, 4.97276141686597839e-06, 1.95285724657878745e-06, 9.12840448563656537e-07, 7.79380968651821604e-07, 1.04935020317498129e-06, 1.25955659768806072e-06, 1.06187007986591198e-06, 6.00191185640142066e-07, 2.30767838615975052e-07, 6.3170375597110251e-08, -6.47960760602472874e-08, -7.05073546214407543e-08, 7.66080461289675441e-08, 1.75447226524738653e-07, 5.25698773401472863e-08, -1.56940672013661242e-07, -2.04371545464709925e-07, 1.28995125692199508e-07, 7.10996133079788706e-08, -6.61277894664635824e-08, -6.77565736850738176e-08, -5.50829319934109662e-08, 8.74864412025999627e-08, -5.85879149639367824e-08, -7.70181358689114859e-08, 9.88385906453004282e-08, -1.53300248939558514e-07, -1.06711858904873225e-07, 1.6398708169163001e-07, 3.06081858525431016e-07, 1.591438660852873e-07, -8.82902995158474369e-08, -1.65919090022725868e-07, -3.06533429750288633e-08, 9.40009527994334348e-08, 6.74126283684017835e-08, 4.61599576340177009e-08, -6.6994999770031427e-08, 8.90229401306896762e-08, -5.04456494354599272e-08, -1.87085873903924949e-07, -7.41584699426312e-07, -1.60771242008195259e-06, -1.93347273125255015e-06, -1.3709075119550107e-06, -6.56190877634799108e-07, -1.4563539707523887e-07, 7.43333544050983619e-07, 3.09193910652538761e-06, 8.7682583398418501e-06, 1.73331718542613089e-05, 2.19571538764284924e-05, 1.74645992956357077e-05, 9.00616214494220912e-06, 3.44145314556953963e-06, 1.3495802022589487e-06, 1.05335220723645762e-06, 1.97304848370549735e-06, 3.63285630555765238e-06, 1.00000452995300293, 3.60582475877890829e-06, 1.78007940121460706e-06, 2.46614462184879812e-07, -1.34364154291688465e-06, -4.49386652690009214e-06, -1.12815869215410203e-05, -2.08360688702668995e-05, -2.58573945757234469e-05, -2.10754551517311484e-05, -1.17094332381384447e-05, -4.97563723911298439e-06, -1.93209939425287303e-06, -9.16435965336859226e-07, -8.68803851972188568e-07, -1.17123124709905824e-06, -1.3150303175279987e-06, -1.07573032437358052e-06, -6.54565894819825189e-07, -3.08630063727832749e-07, -9.55264241042641515e-08, -4.21468264732993703e-08, -6.99393822856109182e-08, 1.64080745435057906e-07, 6.51544596053099667e-08, -1.48048258097333019e-07, -2.0729139293962362e-07, 1.15378981035973993e-07, 8.30124236017582007e-08, -9.66557962556180428e-08, 7.57405231865959649e-08, -5.04764052777773031e-08, -7.47493160702106252e-08, -1.6484536047300935e-07, -1.48576958736157394e-07, 1.37268514777133532e-07, 3.29517803265844123e-07, 1.89188668286988104e-07, -9.01069370229379274e-08, -2.15200230968548567e-07, -1.00432728800115001e-07, 1.25089854918769561e-07, -4.76195154419656319e-08, -6.23689473400190764e-08, 9.86068471320322715e-08, 2.37324869090116408e-07, 6.89766409323055996e-07, 1.58057491717045195e-06, 2.14308033719134983e-06, 1.61366313022881513e-06, 5.94528387409809511e-07, -1.11195369356664742e-07, -9.1515306621658965e-07, -3.24327538692159578e-06, -9.36519063543528318e-06, -1.87518726306734607e-05, -2.38147877098526806e-05, -1.89309121196856722e-05, -9.75766943156486377e-06, -3.70269958693825174e-06, -1.31784338464058237e-06, -6.41335475393134402e-07, -7.59059844313014764e-07, -1.25462906908069272e-06, -1.00000154972076416, -1.22033623028983129e-06, -5.13578754635091173e-07, 2.72142074209114071e-07, 1.55613815877586603e-06, 4.59981038147816435e-06, 1.13302176032448187e-05, 2.08008859772235155e-05, 2.57410829362925142e-05, 2.09775771509157494e-05, 1.1725081094482448e-05, 5.07496542923036031e-06, 2.00494855562283192e-06, 9.0299175781183294e-07, 8.44619421513925772e-07, 1.25420660879171919e-06, 1.46046397730970057e-06, 1.13693442926887656e-06, 6.26278676918445854e-07, 2.95831341645680368e-07, 1.32463981117325602e-07, 2.03334789006248684e-08, -4.70171315214429342e-08, 1.38396956117503578e-07, -1.36518522708684031e-07, -1.98202812384806748e-07, 1.07914303271172685e-07, 1.05699072605602851e-07, -7.7190605907162535e-08, 6.1132389816975774e-08, -6.46243734081508592e-08, -1.75898534848784038e-07, -1.94581360801748815e-07, 2.96461337256914703e-07, 2.02278911842768139e-07, -7.98962247472445597e-08, -2.39642702126730001e-07, -1.73060129782243166e-07, 9.9348120841113996e-08, -5.5566214740565556e-08, -8.44211243133941025e-08, -3.12481489572746796e-07, -8.06680418463656679e-07, -1.60608124133432284e-06, -2.14515944207960274e-06, -1.78357527147454675e-06, -8.38238690903381212e-07, 1.11781287159828935e-06, 3.70443990505009424e-06, 1.02361327662947588e-05, 2.0244813640601933e-05, 2.56970924965571612e-05, 2.05148189706960693e-05, 1.06429433799348772e-05, 4.01886245526839048e-06, 1.27502926261513494e-06, 2.12335706351041154e-07, -4.26760550453764154e-07, -1.05331241684325505e-06, 0.999998629093170166, -1.14424426556070102e-06, -7.53743449877219973e-07, -7.96201504726923304e-07, -1.76517232830519788e-06, -4.66676647192798555e-06, -1.12782809083000757e-05, -2.06411441467935219e-05, -2.55505619861651212e-05, -2.08204291993752122e-05, -1.16117862489772961e-05, -5.03876754009979777e-06, -2.07560378839843906e-06, -1.01365901628014399e-06, -8.88998954451380996e-07, -1.25259691685641883e-06, -1.53289624904573429e-06, -1.27739963318163063e-06, -7.09155983713571914e-07, -2.83373879028658848e-07, -9.25907102100609336e-08, 4.26841673117905884e-08, 1.13286361624886922e-07, 4.12714449282702844e-08, -1.39298080625849252e-07, -1.91684890182841627e-07, 8.33932247701341112e-08, 7.90067176126285631e-08, 3.19485771171912347e-08, 4.51225972142310638e-08, -5.40141229521395871e-08, -1.80762583568139235e-07, -2.08869266771216644e-07, 1.95865084151591873e-07, 1.53806013258872554e-07, -8.61710489630240772e-08, -2.43430037016878487e-07, -2.04912026902093203e-07, 7.84390508101751038e-08, 8.32052791110982071e-08, -7.02895590620755684e-08, 4.85332805055804783e-08, 3.22384067885650438e-07, 9.6030191798490705e-07, 1.83459735580981942e-06, 2.25692065214389004e-06, 1.77398624146007933e-06, 8.54661607263551559e-07, -1.15780630949302576e-06, -4.04622596761328168e-06, -1.12126081148744561e-05, -2.20434667426161468e-05, -2.78652369161136448e-05, -2.22379003389505669e-05, -1.15958100650459528e-05, -4.40376061305869371e-06, -1.27312887343578041e-06, 2.29725529266033845e-07, 1.60886304456653306e-06, 3.25080713992065284e-06, -0.999995827674865723, 3.4068505101458868e-06, 1.97459416995116044e-06, 1.28216174744011369e-06, 1.9585097561503062e-06, 4.74481203127652407e-06, 1.11683639261173084e-05, 2.02425235329428688e-05, 2.50592220254475251e-05, 2.05478208954446018e-05, 1.15408265628502704e-05, 4.97437804369837977e-06, 2.00247632164973766e-06, 1.03642139492876595e-06, 1.01368755167641211e-06, 1.36222149649256608e-06, 1.57166198277991498e-06, 1.31944432268937817e-06, 7.9605842984165065e-07, 3.65345670161332237e-07, 1.36101533598775859e-07, -7.80156881319271633e-08, 8.61915268046686833e-08, 1.43530684226789162e-07, 6.64116726056818152e-08, -9.79414878088391561e-08, -1.38096439172841201e-07, 1.00585744178260938e-07, 8.4819127721402765e-08, -6.54580674108728999e-08, 6.23283398226703866e-08, 8.09972462434416229e-08, -4.25361115219402564e-08, -1.53887071974168066e-07, -1.42979615702643059e-07, 1.96921021711204958e-07, 1.53453783013901557e-07, -5.70594060889106913e-08, -2.0500080211149907e-07, -1.92130556797565077e-07, -7.67037917626112176e-08, 5.71980116603754141e-08, 1.19986637514557515e-07, 5.81379708819440566e-08, -4.45150476480193902e-08, -5.71010723149356636e-08, 5.48239000863759429e-08, 8.52760564384880126e-08, -4.89148668236794038e-08, -4.82959485736955685e-08, -2.38572198441033834e-07, -9.34093463911267463e-07, -1.98680186258570757e-06, -2.45837304646556731e-06, -1.84100110800500261e-06, -8.20145487523404881e-07, 5.62137678628005233e-08, 1.28374392716068542e-06, 4.3561726670304779e-06, 1.19482128866366111e-05, 2.34341150644468144e-05, 2.9633776648552157e-05, 2.3675833290326409e-05, 1.23626550703193061e-05, 4.70893837700714357e-06, 1.33310686578624882e-06, -4.79338552850094857e-07, -2.42238229475333355e-06, -4.74747685075271875e-06, 0.999994039535522461, -4.90513366457889788e-06, -2.846519691956928e-06, -1.64890514042781433e-06, -2.07249877348658629e-06, -4.82408631796715781e-06, -1.13042788143502548e-05, -2.0321551346569322e-05, -2.49824570346390828e-05, -2.04729094548383728e-05, -1.16277242341311648e-05, -5.1232900659670122e-06, -2.05586434276483487e-06, -1.00829845450789435e-06, -1.0394700211691088e-06, -1.49188497289287625e-06, -1.69487634593679104e-06, -1.35105358367582085e-06, -7.83139398663479369e-07, -3.64832146715343697e-07, -1.41857512403475994e-07, -3.55809675056661945e-08, 9.17037255021568853e-08, 7.56712097427225672e-08, -6.0363433362908836e-08, 1.1393820642524588e-07, 1.60852493991114898e-07, 6.2989229832055571e-08, -9.29604340171863441e-08, -9.77236496169098245e-08, 1.40552913308056304e-07, 8.20588113015219278e-08, -5.92250763986612583e-08, 6.7292468486357393e-08, 7.78561002334754448e-08, -7.48525508242892101e-08, 4.55277948674392974e-08, 6.05465118042047834e-08, -1.68930966992775211e-07, -1.09556076210992615e-07, 8.244870031148821e-08, 2.19037090687379532e-07, 1.51338895193475764e-07, -1.49943787164374953e-07, -1.44315905004077649e-07, -7.71016743783548009e-08, 1.05485277401839994e-07, 9.7512383945286274e-08, -6.64154100604719133e-08, 6.60067485114268493e-08, 5.4899885526538128e-08, -1.01449074918491533e-07, 6.29331111667852383e-08, 1.789472605651099e-07, 3.2341412747882714e-07, 8.75235969033383299e-07, 1.95075494957563933e-06, 2.60629826698277611e-06, 2.02649653147091158e-06, 8.81086009485443356e-07, -7.69176580206476501e-08, -1.37383028686599573e-06, -4.62829575553769246e-06, -1.25217293316381983e-05, -2.43471640715142712e-05, -3.07452064589597285e-05, -2.46536965278210118e-05, -1.2936701750732027e-05, -4.89755302623962052e-06, -1.3191636298870435e-06, 6.42186819277412724e-07, 2.9619561701110797e-06, 5.85600582780898549e-06, -0.999992668628692627, 5.9302351473888848e-06, 3.43238411915081087e-06, 1.98918019123084377e-06, 2.27870282287767623e-06, 4.96227130497572944e-06, 1.15526063382276334e-05, 2.08441470022080466e-05, 2.56290622928645462e-05, 2.09261525014881045e-05, 1.18509296953561716e-05, 5.28968575963517651e-06, 2.21013465306896251e-06, 1.07327923615230247e-06, 1.01910143257555319e-06, 1.50788764585740864e-06, 1.80255858595046448e-06, 1.46396860145614482e-06, 8.3482524360078969e-07, 3.77797505279886536e-07, 1.36974762199315592e-07, -7.4760627910563926e-08, 1.24909249166194058e-07, 1.70444238278832927e-07, -1.53770557176358125e-07, -1.5648186035832623e-07, 1.57279217205541499e-07, 7.31126661435155256e-08, -6.70336532948567765e-08, 6.69964492772123776e-08, 8.78491093203592754e-08, -7.87100020716025028e-08, -6.74331630534652504e-08, 5.06650046361301065e-08, 9.70672076050504984e-08, -1.82075481802712602e-07, -9.82934551529979217e-08, 1.27040237885012175e-07, 2.44864793330634711e-07, 1.32702126620642957e-07, -1.34890697722767072e-07, -8.81378099393259618e-08, 7.05268732303920842e-08, 1.01469218805050332e-07, 5.01608887759630306e-08, -6.16259470120894548e-08, 5.3529102927996064e-08, 8.71576659733364068e-08, 6.67676687271523406e-08, 5.18861433818074147e-08, 6.86524117554654367e-08, -1.11942668468145712e-07, -4.71656477429860388e-07, -1.10988401047507068e-06, -2.06685217563062906e-06, -2.6557195269560907e-06, -2.14218539440480527e-06, -9.87121779871813487e-07, 7.54202176267426694e-08, 1.48100082242308417e-06, 4.97839982926961966e-06, 1.34502124637947418e-05, 2.60158594755921513e-05, 3.27258239849470556e-05, 2.62701905739959329e-05, 1.39122321343165822e-05, 5.31939895154209808e-06, 1.32442255562637001e-06, -9.40754944167565554e-07, -3.6292842651164392e-06, -7.1358736022375524e-06, 0.999990999698638916, -7.34119248591014184e-06, -4.14401119996909983e-06, -2.27700138566433452e-06, -2.47627849603304639e-06, -5.09686333316494711e-06, -1.14792792373918928e-05, -2.05687883862992749e-05, -2.53963826253311709e-05, -2.08504352485761046e-05, -1.17995332402642816e-05, -5.22142045156215318e-06, -2.23096139961853623e-06, -1.1968636499659624e-06, -1.13098906240338692e-06, -1.55222437570046168e-06, -1.84891212029469898e-06, -1.54553367792686913e-06, -8.98867938303737901e-07, -4.11545613587804837e-07, -1.78411042384141183e-07, -6.22965501406724798e-08, 1.13638073173660814e-07, -1.01950064390621264e-07, 1.08142295118796028e-07, 1.83228110017807921e-07, -1.85215483838874206e-07, -2.15210562259926519e-07, 1.48625403539881518e-07, 6.20966034148295876e-08, -6.6678317978130508e-08, -5.34405337759835675e-08, -7.02316143019743322e-08, 5.23669037022500561e-08, 8.95458143190808187e-08, -7.57530926875915611e-08, -7.87869751661673945e-08, 1.23148680586382397e-07, -1.75278799474654079e-07, -9.5229339081015496e-08, 1.70312532077332435e-07, 2.95245115466968855e-07, 1.5042968470879714e-07, -7.9461166535566008e-08, -1.29997658859792864e-07, 7.92056269460772455e-08, 6.51165876774939534e-08, 8.86744047079446318e-08, 7.42833279332444363e-08, -4.30404654139238119e-08, -9.00521399671561085e-08, 9.29622103740257444e-08, 3.21636662192759104e-07, 1.15960347102372907e-06, 2.30187538363679778e-06, 2.83058625427656807e-06, 2.18662285078607965e-06, 9.96455355561920442e-07, -1.12572216437456518e-07, -1.63784545748058008e-06, -5.34222272108308971e-06, -1.42934613904799335e-05, -2.76034861599327996e-05, -3.4688007872318849e-05, -2.78048810287145898e-05, -1.47528235174831934e-05, -5.75282911086105742e-06, -1.50916673646861454e-06, 1.05113940662704408e-06, 3.97999565393547527e-06, 7.58538817535736598e-06, -0.999990463256835938, 7.88259421824477613e-06, 4.50838388132979162e-06, 2.3732015961286379e-06, 2.47342927650606725e-06, 5.19040941071580164e-06, 1.16033143058302812e-05, 2.04775878955842927e-05, 2.51468136411858723e-05, 2.07734865398379043e-05, 1.19137439469341189e-05, 5.26894427821389399e-06, 2.15621662391640712e-06, 1.16618025458592456e-06, 1.23786253425350878e-06, 1.70004943811363773e-06, 1.93436198969720863e-06, 1.59557941969978856e-06, 9.41311554925050586e-07, 4.1467990286037093e-07, 1.49188466025407251e-07, 5.41766702610857465e-08, -7.94857015762318042e-08, -8.12771432379122416e-08, -7.27373432596323255e-08, -7.91998218119260855e-08, 8.69872280873096315e-08, 1.97062277607074066e-07, 5.53075167886163399e-08, -1.82301661766359757e-07, -2.32098770425182011e-07, 1.54265947571730067e-07, 8.31972002401926147e-08, -7.95812695741915377e-08, -8.28767952043563128e-08, -5.33453281548190716e-08, 9.40676301297571626e-08, -6.65668551391718211e-08, -8.45441761043730367e-08, 1.04235844844424719e-07, -1.70423575696077023e-07, -1.13065091511543869e-07, 1.87109307603350317e-07, 3.39143980454537086e-07, 1.68843428127729567e-07, -1.12255165163333004e-07, -2.03449019409163157e-07, -5.50373258079162042e-08, 8.54248654036382504e-08, 7.56106786070631642e-08, 6.22108160541756661e-08, 4.16970422634221904e-08, -6.13358466239333211e-08, 8.37263485209405189e-08, 1.3667562370756059e-07, -1.16072584432913573e-07, -1.90506113995070336e-07, -3.78897595965099754e-07, -1.09503378098452231e-06, -2.31059971156355459e-06, -2.97577003038895782e-06, -2.32585693993314635e-06, -1.0655228379619075e-06, 8.19711871713479923e-08, 1.67655912264308427e-06, 5.45802913620718755e-06, 1.43629167723702267e-05, 2.75645197689300403e-05, 3.46913584508001804e-05, 2.79072028206428513e-05, 1.47962837218074128e-05, 5.73112311030854471e-06, 1.58358625412802212e-06, -8.91087495347164804e-07, -3.86599140256294049e-06, -7.42954898669268005e-06, 0.99999082088470459, -7.5552825364866294e-06, -4.45754494649008848e-06, -2.49132153840037063e-06, -2.58347131421032827e-06, -5.45346938451984897e-06, -1.2455690921342466e-05, -2.20440269913524389e-05, -2.68631465587532148e-05, -2.20485799218295142e-05, -1.27433740999549627e-05, -5.8277378229831811e-06, -2.43647946263081394e-06, -1.19016510780056706e-06, -1.19552908017794834e-06, -1.75068385033227969e-06, -2.02997125597903505e-06, -1.65035623922449304e-06, -9.88222495834634174e-07, -4.76059625498237438e-07, -1.65663081475031504e-07, -4.43915553205442848e-08, -7.60484155648555316e-08, 1.85173078648404044e-07, 7.02111933037485869e-08, -1.72156674693724199e-07, -2.35578582419293525e-07, 1.3992365666126716e-07, 9.95408200310521352e-08, -1.14215438884457399e-07, -4.7749530551755015e-08, 9.11465249942011724e-08, -5.17186578008477227e-08, -7.79102506953677221e-08, 6.37612700415957079e-08, -1.89128982697184256e-07, -1.68001719202948152e-07, 1.4902302325481287e-07, 3.58855743343156064e-07, 1.99573221948412538e-07, -1.12718858247262688e-07, -2.5423739202778961e-07, -1.31137397829661495e-07, 6.30269596513244323e-08, 1.09808446779879887e-07, -5.47515135451703827e-08, -8.42431688852229854e-08, -1.12938693064279505e-07, 1.45045845556524e-07, 4.81407482766371686e-07, 1.22900962651328882e-06, 2.38981533584592398e-06, 3.03212527796858922e-06, 2.37921335610735696e-06, 1.08959750377835007e-06, -5.34735917767648061e-08, -1.59893636464403244e-06, -5.31820023752516136e-06, -1.39396515805856325e-05, -2.64821173914242536e-05, -3.31970150000415742e-05, -2.68460826191585511e-05, -1.44174628076143563e-05, -5.58072179046575911e-06, -1.43337376812269213e-06, 8.92316961653705221e-07, 3.67606503459683154e-06, 7.23100220056949183e-06, -0.999990999698638916, 7.31894124328391626e-06, 4.27453869633609429e-06, 2.60026695286796894e-06, 2.99718749374733306e-06, 6.11864015809260309e-06, 1.37212391564389691e-05, 2.44672719418304041e-05, 3.00514529953943565e-05, 2.46404488279949874e-05, 1.40760021167807281e-05, 6.39708059679833241e-06, 2.79870027952711098e-06, 1.44329681006638566e-06, 1.27955240714072715e-06, 1.7417166873201495e-06, 2.04903494704922196e-06, 1.67004327522590756e-06, 9.5588472959207138e-07, 4.55013662303827005e-07, 2.26399095026863506e-07, 1.00593183560704347e-07, -8.10491158631521103e-08, -8.87684521444498387e-08, -4.54542963268522726e-08, 1.6241968125996209e-07, -1.55831656911686878e-07, -2.23547289124326198e-07, -5.59034774028077663e-08, 1.32260424834385049e-07, 1.27601751387373952e-07, -8.76809167493775021e-08, 4.66915892616270867e-08, 7.56990132799728599e-08, -4.43651835269065487e-08, -6.25930738351598848e-08, -2.04657993663204252e-07, -2.2791959963797126e-07, 4.97387944164984219e-08, 3.07235922036852571e-07, 2.03476545834746503e-07, -1.04630586861276242e-07, -2.77151855243573664e-07, -2.02037426788592711e-07, 8.94102214488157188e-08, 3.48400241989565984e-08, 8.31387581001763465e-08, 4.92420255682191055e-08, -1.06785392972597037e-07, -4.39061494716952438e-07, -1.26547342915728223e-06, -2.50077277996751945e-06, -3.16509908770967741e-06, -2.49229128712613601e-06, -1.13690555281209527e-06, 7.84277673915312334e-08, 1.6132769360410748e-06, 5.2582067837647628e-06, 1.38376490212976933e-05, 2.62839930655900389e-05, 3.27742454828694463e-05, 2.63825531874317676e-05, 1.42655635499977507e-05, 5.70727206650190055e-06, 1.52780648932093754e-06, -8.78364062373293564e-07, -3.42010139320336748e-06, -6.59705074212979525e-06, 0.99999159574508667, -6.94962454872438684e-06, -3.99493683289620094e-06, -2.37727931562403683e-06, -3.13145051222818438e-06, -6.81377696309937164e-06, -1.49048619277891703e-05, -2.60709239228162915e-05, -3.20419931085780263e-05, -2.65964772552251816e-05, -1.53653927554842085e-05, -6.88758882461115718e-06, -2.88060959974245634e-06, -1.49884670008759713e-06, -1.38587336095952196e-06, -1.80266738425416406e-06, -2.07220614356629085e-06, -1.73619559973303694e-06, -1.02491344478039537e-06, -4.36668898373682168e-07, -1.41030582767598389e-07, -4.76882924260735308e-08, 8.55027337820501998e-08, 7.94422803096495045e-08, 5.28702805979719415e-08, 1.29750134192363475e-07, 4.4878497362788039e-08, -1.60600706067270949e-07, -2.15088405752794642e-07, 1.14982462662283069e-07, 1.19901301331992727e-07, -4.436360967474684e-08, -5.68835538672374241e-08, 4.3910908686939365e-08, 4.97304881719173864e-08, -5.89629607361530361e-08, -1.95322300555744732e-07, -2.20927191207920259e-07, 2.19501657738874201e-07, 1.64945419101059088e-07, -1.01642299910054135e-07, -2.71183097311222809e-07, -2.23707942836881557e-07, 9.29271806171527714e-08, 9.63626476391254982e-08, -8.17144680809178681e-08, -7.21737123399179836e-08, -4.5525183622885379e-08, 5.89117021831953025e-08, 1.51799369518812455e-07, 4.73829601332909078e-07, 1.30510227336344542e-06, 2.56067323789466172e-06, 3.23460426443489268e-06, 2.57292504102224484e-06, 1.22742699204536621e-06, -1.61156310696242144e-06, -5.07314416609006003e-06, -1.30801636260002851e-05, -2.48699652729555964e-05, -3.11774274450726807e-05, -2.51217388722579926e-05, -1.34982856252463534e-05, -5.4212332543102093e-06, -1.60304261953569949e-06, 6.98603798809926957e-07, 3.13439386445679702e-06, 5.83633482165168971e-06, -0.999992728233337402, 6.17463092567049898e-06, 3.84613394999178126e-06, 2.40719850808090996e-06, 3.16703653879812919e-06, 7.37432628739043139e-06, 1.66951285791583359e-05, 2.90840052912244573e-05, 3.53048526449128985e-05, 2.91649848804809153e-05, 1.70597104443004355e-05, 7.87323915574233979e-06, 3.30432544615177903e-06, 1.59013734446489252e-06, 1.41410873766290024e-06, 1.86498027687775902e-06, 2.09632730729936156e-06, 1.71531905834854115e-06, 1.0561337830949924e-06, 5.34278854047443019e-07, 2.03599597625725437e-07, 1.03601607293057896e-07, 1.6518656309472135e-07, 7.38367660346739285e-08, -1.13718790828443161e-07, -1.55050216221752635e-07, 1.22241957001278934e-07, 9.86979955541755771e-08, -6.7303687956155045e-08, 7.48884474432998104e-08, 9.49312521925094188e-08, -4.29185309513968605e-09, -3.80239306707608193e-08, -1.61473693083280523e-07, -1.45704575515992474e-07, 2.23953151134992368e-07, 1.65861294476599141e-07, -7.00204054737696424e-08, -2.28483173714266741e-07, -2.08114769861822424e-07, -7.82224205408965645e-08, 6.89875108150772576e-08, 1.36829257257886638e-07, 6.66549269112692855e-08, -4.94329590594588808e-08, -6.60343175695743412e-08, 6.64306369912992523e-08, 1.07767760937349522e-07, -1.56596740907843923e-07, -4.89033709527575411e-07, -1.34569654619554058e-06, -2.62921389548864681e-06, -3.28653140968526714e-06, -2.57715373663813807e-06, -1.25393330563383643e-06, -1.0297756602994923e-07, 1.35227287501038518e-06, 4.50515744887525216e-06, 1.14053145807702094e-05, 2.13161511055659503e-05, 2.66801689576823264e-05, 2.16912449104711413e-05, 1.17365580081241205e-05, 4.58850900031393394e-06, 1.19433821055281442e-06, -9.27693918129079975e-07, -3.7231657188385725e-06, -7.12243718226091005e-06, 0.999991357326507568, -7.03496425558114424e-06, -4.37883682025130838e-06, -3.08356038658530451e-06, -4.03031299356371164e-06, -8.6000582086853683e-06, -1.92662246263353154e-05, -3.39496764354407787e-05, -4.14280839322600514e-05, -3.40943370247259736e-05, -1.97727404156466946e-05, -9.13543954084161669e-06, -3.93384880226221867e-06, -1.87394482509262161e-06, -1.47125581406726269e-06, -1.8427660961606307e-06, -2.0868437786702998e-06, -1.67710197729320498e-06, -9.53586550167528912e-07, -4.43331202859553741e-07, -2.16944272324326448e-07, -1.07795685266864893e-07, 9.12626703097885184e-08, 1.1332262062069276e-07, -6.71126159090817964e-08, 1.32908752448201994e-07, 1.79262528376966657e-07, 5.75674015124150174e-08, -1.27518063663956127e-07, -1.3021050904171716e-07, 5.21916696527569002e-08, 1.58338082201225916e-07, 9.01770462746753765e-08, -6.55541114724655927e-08, 7.66106538208077836e-08, 8.54344506251436542e-08, -7.90494070201930299e-08, 6.32953600643304526e-08, 7.76889805820246693e-08, -6.17198949726116552e-08, -1.79331465233190102e-07, -1.10141698428378731e-07, 1.03242292937011371e-07, 2.47594499569459003e-07, 1.61026804335051565e-07, -1.7246490813249693e-07, -1.56965299424882687e-07, -7.88403440310503356e-08, 1.19181194691009296e-07, 1.09491459454602591e-07, -7.26121172078819654e-08, 6.11787029924926173e-08, 5.35050368455358694e-08, 5.4762157475352069e-08, -1.09838900641534565e-07, -1.10506370276652888e-07, 1.60690788675310614e-07, 5.03129456319584278e-07, 1.36155415475514019e-06, 2.68604753728141077e-06, 3.40682800015201792e-06, 2.6750087727123173e-06, 1.2494558632170083e-06, 9.74963825228769565e-08, -1.16544777029048419e-06, -4.02909017793717794e-06, -1.04641549114603549e-05, -1.95101365534355864e-05, -2.41844245465472341e-05, -1.96170149138197303e-05, -1.07602727439370938e-05, -4.22234825236955658e-06, -7.87904070875811158e-07, 1.51140420712181367e-06, 4.61097215520567261e-06, 8.84428936842596158e-06, -0.999988794326782227, 9.1962474471074529e-06, 5.35342405783012509e-06, 3.43287024406890851e-06, 4.66306846647057682e-06, 9.89369345916202292e-06, 2.13564253499498591e-05, 3.71030073438305408e-05, 4.54109431302640587e-05, 3.77046017092652619e-05, 2.19934281631140038e-05, 1.00940906122559682e-05, 4.28189196099992841e-06, 2.02993123821215704e-06, 1.54372082761256024e-06, 1.83281724730477436e-06, 2.06097888622025494e-06, 1.72205568560457323e-06, 1.0375030115028494e-06, 4.64642965880557313e-07, 1.48870100247222581e-07, -6.57473293586008367e-08, -6.41597637240920449e-08, -8.63982236865012965e-08, 1.47555041962732503e-07, 1.95916683765062771e-07, -1.84827712246260489e-07, -1.83937430620062514e-07, 1.86211906338940025e-07, 8.39997795765157207e-08, 5.03991799405412166e-08, -9.56237258264991397e-08, 6.36954737842643226e-08, 8.80339996456314111e-08, -9.20799010373229976e-08, -7.74475665821228176e-08, 5.30097388207195763e-08, 1.03069538681666018e-07, -1.99983901438827161e-07, -9.96293252342184132e-08, 1.55326887352202903e-07, 2.85490557416778756e-07, 1.57275678702717414e-07, -6.32094696584317717e-08, -1.33448224914900493e-07, -7.47969011172244791e-08, 8.29972464089223649e-08, 1.13035483195744746e-07, 5.50834649004627863e-08, -6.80104648154156166e-08, 8.48325996116727765e-08, 6.43308339931536466e-08, -6.52457075034362788e-08, 7.9715661627233203e-08, 7.30167286633331969e-08, -1.76231836235274386e-07, -5.54494704374519642e-07, -1.44103432830888778e-06, -2.75937645710655488e-06, -3.4988674997293856e-06, -2.82926521322224289e-06, -1.37966605961992173e-06, -6.93824517838947941e-08, 1.30113789964525495e-06, 4.07638526667142287e-06, 1.04061264210031368e-05, 1.95451175386551768e-05, 2.42973655986133963e-05, 1.96040873561287299e-05, 1.07218193079461344e-05, 4.36539858128526248e-06, 9.39468463911907747e-07, -1.63138781772431685e-06, -4.7739922592882067e-06, -8.56374936120118946e-06, 0.99998927116394043, -9.16991757549112663e-06, -5.66357812203932554e-06, -3.52581741935864557e-06, -4.61111631011590362e-06, -1.02880921986070462e-05, -2.25417406909400597e-05, -3.87905893148854375e-05, -4.70648010377772152e-05, -3.90678724215831608e-05, -2.30081568588502705e-05, -1.07125943031860515e-05, -4.56415409644250758e-06, -2.14210172089224216e-06, -1.62296964845154434e-06, -1.91472531696490478e-06, -2.10544612855301239e-06, -1.71747126387344906e-06, -1.04655941868259106e-06, -5.36513311999442521e-07, -2.45797679099268862e-07, -6.999790258532812e-08, 9.08621942130594107e-08, 1.02559681636194e-07, -8.96919090109804529e-08, -4.82200377405206382e-08, 1.43103605410033197e-07, 2.19731489892183163e-07, -2.19570637227661791e-07, -2.52226243446784792e-07, 1.75685656245150312e-07, 7.06337175415683305e-08, -8.37874338799338148e-08, -7.05301133052671503e-08, 5.27540890971067711e-08, -8.80417445614511962e-08, 4.99567036627013294e-08, 9.04739181351033039e-08, -8.82623112374858465e-08, -8.9340872477805533e-08, 1.2959391426647926e-07, -1.9773018777868856e-07, -1.01536855368067336e-07, 1.97659062450838974e-07, 3.34299244286739849e-07, 1.66837494930405228e-07, -9.36598425482770836e-08, -1.47163632391311694e-07, 8.63976552523126884e-08, 6.99212989729858236e-08, 8.45836396479171526e-08, 7.24850437450186291e-08, 5.7359425653658036e-08, -7.04164051512634614e-08, -4.56567974538302224e-08, -5.59315402881566115e-08, -6.71136177743392182e-08, 1.69699305274662038e-07, 5.64149786441703327e-07, 1.5294440345314797e-06, 2.90991943074914161e-06, 3.59398723048798274e-06, 2.85397254629060626e-06, 1.45836372666963143e-06, 2.0174572057385376e-07, -1.26609097605978604e-06, -4.11975906899897382e-06, -1.02077592600835487e-05, -1.89521215361310169e-05, -2.36743817367823794e-05, -1.92259158211527392e-05, -1.04235914477612823e-05, -4.11811424783081748e-06, -9.12480572878848761e-07, 1.67222185609716689e-06, 5.46613273399998434e-06, 9.99067015072796494e-06, -0.999987959861755371, 9.93560115603031591e-06, 6.25650909569230862e-06, 4.18799118051538244e-06, 5.13272789248730987e-06, 1.0759678843896836e-05, 2.36182495427783579e-05, 4.09211970691103488e-05, 4.96510547236539423e-05, 4.10834581998642534e-05, 2.41596171690616757e-05, 1.13047772174468264e-05, 4.86175849800929427e-06, 2.28222506848396733e-06, 1.69713666764437221e-06, 1.97153735825850163e-06, 2.15929139812942594e-06, 1.74990418599918485e-06, 1.02498324849875644e-06, 4.69592038143673562e-07, 1.93563820971576206e-07, 7.92073180377883546e-08, -6.56175629387689696e-08, -8.27088300070499827e-08, -7.91843106640044425e-08, -8.34637248203762283e-08, -9.18067044608505967e-08, 1.00980187767163443e-07, 2.27146898623686866e-07, 5.94168376721881941e-08, -2.17406821434451558e-07, -2.7148772119289788e-07, 1.8613944519074721e-07, 9.89372850312975061e-08, -9.65996491686382797e-08, -1.02621193320828752e-07, -5.033513517105348e-08, -2.37179929030162384e-08, 1.16044198250619957e-07, -7.04314189192700724e-08, -9.07886246181988099e-08, 1.10905361339064257e-07, -1.94695530808530748e-07, -1.25069661294219259e-07, 2.12646341424260754e-07, 3.8003909708095307e-07, 1.84913361067629012e-07, -1.33052495243646263e-07, -2.35184316466074961e-07, -6.4441735503351083e-08, 9.86507018296833849e-08, 8.82818227410098189e-08, 6.38158823562662292e-08, 4.22491659435308975e-08, -6.0618766895004228e-08, 7.96710111217180383e-08, 2.2089496454213986e-08, -6.62827872588422906e-08, 1.09704330952808959e-07, 1.15476034068251465e-07, -4.8839890354201998e-08, -1.92632924722602183e-07, -5.69706628539279336e-07, -1.53506482547527412e-06, -3.00552937915199436e-06, -3.7737845559604466e-06, -2.95194695354439318e-06, -1.42695500926492969e-06, -2.03185578584452742e-07, 1.15224861474416684e-06, 3.9946626202436164e-06, 9.99905114440480247e-06, 1.8315111447009258e-05, 2.27128421101951972e-05, 1.85913686436833814e-05, 1.02464191513718106e-05, 3.90338800571043976e-06, 4.66096992113307351e-07, -2.15409750126127619e-06, -6.20233231529709883e-06, -1.17096788017079234e-05, 0.999985396862030029, -1.19659644042258151e-05, -7.14817952029989101e-06, -4.63863898403360508e-06, -5.80147843720624223e-06, -1.17135650725685991e-05, -2.4926690457505174e-05, -4.2927083995891735e-05, -5.22637928952462971e-05, -4.34530229540541768e-05, -2.56446855928516015e-05, -1.20312524813925847e-05, -5.18109118274878711e-06, -2.39239739130425733e-06, -1.71743783994315891e-06, -1.99031615011335816e-06, -2.20025253838684876e-06, -1.80507629465864738e-06, -1.09450104446295882e-06, -5.35779633992206072e-07, -2.18286132280809397e-07, -4.77595634151839477e-08, 9.12025797106252867e-08, 7.82016584821576544e-08, 3.59820440110070194e-08, -4.78834287775953271e-08, -8.59540136843861546e-08, 2.1383674209118908e-07, 7.77929187734116567e-08, -2.03843953272553335e-07, -2.71278253194395802e-07, 1.8845921090360207e-07, 1.47410617046261905e-07, -6.05730079428212775e-08, -1.11180277428957197e-07, -5.03705983589952666e-08, 9.93242892377566022e-08, -5.88690021174897993e-08, -8.50339532121324737e-08, 6.79219738231040537e-08, -2.13424399930772779e-07, -1.85870931090903468e-07, 1.68884184859052766e-07, 4.00008872247781255e-07, 2.17936531043960713e-07, -1.33325883666657319e-07, -2.9154085723348544e-07, -1.5196506808479171e-07, 6.77028140216862084e-08, 1.20078638587983733e-07, 5.54313857037413982e-08, -5.1953826130102243e-08, -4.56903350709580991e-08, -8.02247370756958844e-08, -9.44436493455214077e-08, 2.21277133505282109e-07, 6.4749724515422713e-07, 1.62384151281003142e-06, 3.08556332129228394e-06, 3.91241155739407986e-06, 3.14804037770954892e-06, 1.52604661707300693e-06, 1.34488345793215558e-07, -1.28193494219885906e-06, -4.18534091295441613e-06, -1.05717035694397055e-05, -1.94618369278032333e-05, -2.39736600633477792e-05, -1.9473589418339543e-05, -1.08763842945336364e-05, -4.44865008830674924e-06, -7.35996650291781407e-07, 2.13243538382812403e-06, 5.76159663978614844e-06, 1.03452784969704226e-05, -0.999987006187438965, 1.10424489321303554e-05, 6.755966751370579e-06, 4.28922885475913063e-06, 5.6250482884934172e-06, 1.20199001685250551e-05, 2.56056246143998578e-05, 4.36043083027470857e-05, 5.28162418049760163e-05, 4.39755858678836375e-05, 2.60933811659924686e-05, 1.23247109513613395e-05, 5.38227732249652036e-06, 2.56588236879906617e-06, 1.83758322691573994e-06, 2.04924390345695429e-06, 2.25028634304180741e-06, 1.85786700512835523e-06, 1.11556175852456363e-06, 5.34832736320822733e-07, 2.40159835129816202e-07, 1.11646251355068671e-07, -1.14249374405517301e-07, -1.14436765841219312e-07, -6.20057463152079436e-08, 1.61389181130289217e-07, 5.9664088780664315e-08, -2.01864324367306835e-07, -2.69750273673707852e-07, -6.33268655292340554e-08, 1.62321725838410202e-07, 1.5659230712117278e-07, -1.00237187439233821e-07, -5.29741441823716741e-08, 5.63774058548460744e-08, 8.66280913669470465e-08, -4.6759325300627097e-08, -6.51050626743199246e-08, -2.28636224619549466e-07, -2.50559992309717927e-07, 5.90423567814468697e-08, 3.41453187502338551e-07, 2.21207756112562492e-07, -1.22802475743810646e-07, -3.11812385689336224e-07, -2.22591950205242028e-07, 1.11780082079349086e-07, 4.9379298872054278e-08, -5.23118686146517575e-08, 4.96884382528151036e-08, 1.3394958386925282e-07, -1.99581194237907766e-07, -6.69106157147325575e-07, -1.74026706645236118e-06, -3.2503583042853279e-06, -4.03949752580956556e-06, -3.26110034620796796e-06, -1.6531292885701987e-06, -1.61666733333731827e-07, 1.46992385907651624e-06, 4.57099758932599798e-06, 1.12357274701935239e-05, 2.07156972464872524e-05, 2.56943985732505098e-05, 2.08403580472804606e-05, 1.14759250209317543e-05, 4.76810919280978851e-06, 1.25881319945619907e-06, -1.45662022532633273e-06, -4.93504921905696392e-06, -8.82235872268211097e-06, 0.999989330768585205, -9.00859504326945171e-06, -5.88151715419371612e-06, -4.14378700952511281e-06, -5.51627090317197144e-06, -1.19005680971895345e-05, -2.57742885878542438e-05, -4.40721050836145878e-05, -5.32899284735321999e-05, -4.43287426605820656e-05, -2.63726979028433561e-05, -1.24886564663029276e-05, -5.40610926691442728e-06, -2.56766429629351478e-06, -1.93090977518295404e-06, -2.19247021959745325e-06, -2.3420129764417652e-06, -1.90401055988331791e-06, -1.16592718768515624e-06, -5.65657728657242842e-07, -2.10206721362737881e-07, 9.16790270366618643e-08, 1.07316040498517395e-07, 8.35586391190190625e-08, 6.78294256317713007e-08, 1.54449793399180635e-07, 5.16003986206214904e-08, -1.90270256439362129e-07, -2.50739333296223776e-07, 1.42667659019934945e-07, 1.44901875387404289e-07, -5.56314141419989028e-08, -6.00017884266890178e-08, 5.22861149931941327e-08, 5.64657121060463396e-08, -6.80480169990005379e-08, -2.16279886444681324e-07, -2.38554434872639831e-07, 2.48138462666247506e-07, 1.79433200742096233e-07, -1.19712694868212566e-07, -3.05105459119658917e-07, -2.47894064386855462e-07, 1.06429020263476559e-07, 1.07692478934495739e-07, -9.72411626776192861e-08, -6.74919249377126107e-08, -8.10253411032135773e-08, -5.48730945126862935e-08, 7.43414858561664005e-08, 2.29084477609831083e-07, 6.85665554556180723e-07, 1.80494737378467107e-06, 3.41391842084703967e-06, 4.21137019657180645e-06, 3.33128718921216205e-06, 1.68130657129950123e-06, 2.23830241452560585e-07, -1.48501305829995545e-06, -4.8266501835314557e-06, -1.16811615953338332e-05, -2.12093000300228596e-05, -2.6323148631490767e-05, -2.16122025449294597e-05, -1.19949772852123715e-05, -4.80354856335907243e-06, -1.1801488426499418e-06, 1.15721161364490399e-06, 4.28466137236682698e-06, 8.21392768557416275e-06, -0.999989926815032959, 8.27409803605405614e-06, 5.25369750903337263e-06, 4.07069728680653498e-06, 5.92041624258854426e-06, 1.24220841826172546e-05, 2.6362757125752978e-05, 4.49863837275188416e-05, 5.45113834959920496e-05, 4.54430810350459069e-05, 2.71470125881023705e-05, 1.30088592413812876e-05, 5.72610360904945992e-06, 2.66628899225906935e-06, 1.89708623565820744e-06, 2.20693209485034458e-06, 2.45141154664452188e-06, 1.99614260054659098e-06, 1.195271124743158e-06, 6.00251041760202497e-07, 2.82398360695879092e-07, 1.00708454908726708e-07, -1.15824043689372047e-07, -1.19930390951594745e-07, 1.28913782759809692e-07, 1.96787780737395224e-07, 8.51308286087260058e-08, -1.36295525976493082e-07, -1.804695841656212e-07, 1.52330130731570534e-07, 1.20200382980328868e-07, -7.15041679200112412e-08, 7.64752670079360541e-08, 8.4580889847529761e-08, -6.27190175350733625e-08, 5.457061291735954e-08, 5.23872927260526922e-08, -6.95073651968414197e-08, -1.93468920883788087e-07, -1.64558116466650972e-07, 5.05872961298337032e-08, 2.44126539428179967e-07, 1.68603378369880375e-07, -9.59783008624981449e-08, -2.64074031974814716e-07, -2.3222393963351351e-07, -8.3761982239138888e-08, 7.96261332425274304e-08, 1.5334391889609833e-07, 7.3308584092046658e-08, -5.821348736390064e-08, -7.8750851173481351e-08, 5.3965152346791001e-08, 7.84780809226504061e-08, 6.99545381621646811e-08, -7.22803576991282171e-08, -2.58381533058127388e-07, -7.24042877209285507e-07, -1.84705766059778398e-06, -3.52718416252173483e-06, -4.42268037659232505e-06, -3.50499067280907184e-06, -1.70041187175229425e-06, -1.61521043651191576e-07, 1.55484963215712924e-06, 5.08932726006605662e-06, 1.24770567708765157e-05, 2.25209532800363377e-05, 2.76687769655836746e-05, 2.27073487621964887e-05, 1.29143372760154307e-05, 5.47793160876608454e-06, 1.50851519720163196e-06, -7.23655148249235936e-07, -2.77320441455231048e-06, -5.27635165781248361e-06, 0.99999314546585083, -5.91750858802697621e-06, -3.80811138711578678e-06, -3.15448028231912758e-06, -5.57022076463908888e-06, -1.26720451589790173e-05, -2.69131087407004088e-05, -4.55155386589467525e-05, -5.49935903109144419e-05, -4.58990871265996248e-05, -2.74438025371637195e-05, -1.31336009872029535e-05, -5.85270663577830419e-06, -2.87813236354850233e-06, -2.08610049412527587e-06, -2.27262398766470142e-06, -2.46807394432835281e-06, -2.05392734642373398e-06, -1.2476029951358214e-06, -5.92375442920456408e-07, -2.52547920354118105e-07, -1.11593003282450809e-07, 7.944179003516183e-08, 1.05688535256831528e-07, 8.01054724774985516e-08, -1.53012660319973293e-08, -5.70078420025765809e-08, 1.67779305115800526e-07, 2.15152212490465899e-07, 6.42678870121926593e-08, -1.57661347088833281e-07, -1.56819055519008543e-07, 6.60628387549877516e-08, 1.93061580944231537e-07, 1.06449107306616497e-07, 3.79412234963183437e-08, -1.00353013010590075e-07, 7.83705331741657574e-08, 9.04102961385433446e-08, -8.71122267653845483e-08, 7.56967466486457852e-08, 8.61459739098791033e-08, -7.30552329741840367e-08, -2.00722922727436526e-07, -1.14404187456784712e-07, 1.3172655144444434e-07, 2.93579745402894332e-07, 1.91586124742570973e-07, -4.96367853486390231e-08, -1.8014070235494728e-07, -1.58658224336249987e-07, -7.27434681380145776e-08, 1.41877123382982973e-07, 1.33642458877147874e-07, -6.37357260302451323e-08, -3.44658168671685416e-08, 5.91219233569972857e-08, -5.65452964451651496e-08, -7.71105490571244445e-08, -8.24396906295987719e-08, -6.22609448441835411e-08, 5.93101496804138151e-08, 2.79597401231512777e-07, 8.11162692571087973e-07, 1.97484928321500774e-06, 3.65799178325687535e-06, 4.58506656286772341e-06, 3.70947282135603018e-06, 1.8293941366209765e-06, 9.48202298900469032e-08, -1.81614325356349582e-06, -5.59324189453036524e-06, -1.36309308800264262e-05, -2.4761258828220889e-05, -3.04416298604337499e-05, -2.47844091063598171e-05, -1.39992171170888469e-05, -6.25068287263275124e-06, -2.45874730353534687e-06, -5.90149795698380331e-07, 3.81126994852820644e-07, 7.86086104653804796e-07, -0.999999046325683594, 1.12748955416464014e-06, 1.39391158882062882e-06, 2.22142716665985063e-06, 5.02734155816142447e-06, 1.22361752801225521e-05, 2.65934231720166281e-05, 4.51325686299242079e-05, 5.44743561476934701e-05, 4.55471745226532221e-05, 2.74169469776097685e-05, 1.31874276121379808e-05, 5.78513936488889158e-06, 2.77259550784947351e-06, 2.11473980016307905e-06, 2.43936096921970602e-06, 2.62314392784901429e-06, 2.13686962524661794e-06, 1.31099045574956108e-06, 6.40426037534780335e-07, 2.46782150270519196e-07, 4.97698167123417079e-08, -1.0095342162230736e-07, -1.19557881816945155e-07, -7.02347193737296038e-08, 5.05114208237955609e-08, -1.26936697597557213e-07, 1.72381930951814866e-07, 2.32031439395541383e-07, -2.20708898268640041e-07, -2.13030787676871114e-07, 2.37102597111515934e-07, 1.07913493252453918e-07, -4.99810504095421493e-08, -5.22481755638182221e-08, 5.72436249512975337e-08, -1.01723607315307163e-07, 7.77673605512063659e-08, 1.00362569810386049e-07, -1.00992252782816649e-07, -8.11016676038889273e-08, 6.38141059994268289e-08, 1.13311294569484744e-07, -2.2916235309367039e-07, -1.0887193724329336e-07, 1.82844360097078606e-07, 3.26954449292315985e-07, 1.7492921244866011e-07, -7.79211930534984276e-08, -1.51571811102257925e-07, -7.5380974351446639e-08, 9.40062960808063508e-08, 1.2527129911177326e-07, 6.07230958848958835e-08, -7.63404983672444359e-08, 7.84872042913775658e-08, 5.16421003737832507e-08, -5.84353436750006949e-08, 9.79631025188609783e-08, 1.14967342312866094e-07, -5.96501337213339866e-08, -2.5410088255739538e-07, -8.2605407669689157e-07, -2.10392772714840248e-06, -3.86384317607735284e-06, -4.75006436317926273e-06, -3.81726931664161384e-06, -1.93241521628806368e-06, -1.22178093420188816e-07, 2.0342095012892969e-06, 6.17200294072972611e-06, 1.46678376040654257e-05, 2.64683130808407441e-05, 3.27624074998311698e-05, 2.69440897682216018e-05, 1.52148277265951037e-05, 6.67520498609519564e-06, 2.91324499812617432e-06, 1.78538550699158804e-06, 1.86525028311734786e-06, 2.5503331926302053e-06, 1.00000309944152832, 2.63661286226124503e-06, 1.0300935855411808e-06, -1.28916167341230903e-06, -4.95918266096850857e-06, -1.2332948244875297e-05, -2.65334601863287389e-05, -4.49441831733565778e-05, -5.42476991540752351e-05, -4.53476823167875409e-05, -2.73641144303837791e-05, -1.33440462377620861e-05, -6.03420176048530266e-06, -2.93393304673372768e-06, -2.14441388379782438e-06, -2.45529690801049583e-06, -2.70728082796267699e-06, -2.23670122068142518e-06, -1.38349548706173664e-06, -7.14935026735474821e-07, -3.26409491435697419e-07, -1.02598782802942878e-07, 6.5024757134324318e-08, 8.64774136744017596e-08, 9.21075482551714231e-08, 5.32381640994117333e-08, 6.66519923697705963e-08, -1.23375968996697338e-07, -7.15427503905630147e-08, 1.63601825420300884e-07, 2.58692665511262021e-07, -2.68035506678643287e-07, -3.04668532180585316e-07, 2.1529544369514042e-07, 8.56579589481043513e-08, -1.05077603507197637e-07, -9.24582437278331781e-08, 5.55776402677565784e-08, -1.02730943751794257e-07, 5.6926634073306559e-08, 1.00451622131458862e-07, -9.63458504088521295e-08, -9.21126286357321078e-08, 1.50146135524664714e-07, -2.25389456431912549e-07, -1.1323187010248148e-07, 2.26204932118889701e-07, 3.75521381101862062e-07, 1.75217209630318393e-07, -1.3156409295334015e-07, -1.97726251371932449e-07, 6.00744556322752032e-08, 8.94688341190885694e-08, 7.36169596393665415e-08, 7.89843781490162655e-08, 6.69746498260792578e-08, 4.59476545699999406e-08, -5.36527302585909638e-08, -6.10965926739481802e-08, -1.02030860205104545e-07, -8.36776408164041641e-08, 1.10868633385052817e-07, 3.05100257946833153e-07, 8.47123374114744365e-07, 2.16031594391097315e-06, 4.04497950512450188e-06, 4.98613007948733866e-06, 3.94728886021766812e-06, 1.95393226931628305e-06, 1.1922936948849383e-07, -2.15641466638771817e-06, -6.73625436320435256e-06, -1.59814317157724872e-05, -2.84348589048022404e-05, -3.48919493262656033e-05, -2.88275023194728419e-05, -1.66713216458447278e-05, -7.61689625505823642e-06, -3.5697223665920319e-06, -3.0469045668723993e-06, -5.07470940647181123e-06, -8.1563530329731293e-06, -1.00000953674316406, -7.60199418436968699e-06, -4.05569790018489584e-06, -4.06230441285515553e-07, 4.16362991018104367e-06, 1.21600496640894562e-05, 2.65445542027009651e-05, 4.47969432570971549e-05, 5.40225191798526794e-05, 4.52428939752280712e-05, 2.73124915111111477e-05, 1.32432141981553286e-05, 5.96987092649214901e-06, 3.00428200716851279e-06, 2.31244416681875009e-06, 2.62155185737356078e-06, 2.8239164748811163e-06, 2.28986641559458803e-06, 1.36420908347645309e-06, 6.63436253489635419e-07, 3.17735782573436154e-07, 1.51433269479639421e-07, -7.77877247060132504e-08, -9.15037574600319203e-08, -5.76905954119411035e-08, -6.29637781912606442e-08, -7.93382568531342258e-08, -9.39195814453341882e-08, -1.06754306727907533e-07, 1.22907380273318267e-07, 2.73805426331819035e-07, 7.0518169081879023e-08, -2.63722171212066314e-07, -3.27640265140871634e-07, 2.26921940793545218e-07, 1.17939947585909977e-07, -1.23201530755068234e-07, -1.33502751964442723e-07, 5.50964003309672989e-08, -6.32612042750224646e-08, -3.24023616826707439e-08, 1.24676489576813765e-07, -7.85709275419321784e-08, -9.49486960166723293e-08, 1.30197392422815028e-07, -2.21978126546673593e-07, -1.41493984529006411e-07, 2.41947248014184879e-07, 4.29407691626693122e-07, 2.04187756480678217e-07, -1.59318886971959728e-07, -2.74240449016360799e-07, -7.44069907909761241e-08, 1.17246599984355271e-07, 1.05504675218526245e-07, 6.76954883260805218e-08, 4.47020589433577697e-08, -5.27427665986124339e-08, 7.4805058147831005e-08, 5.56500481252442114e-08, 7.22994712987201638e-08, 7.8912336221037549e-08, 7.82887852324165578e-08, -8.33075759487655887e-08, -3.44054313927699695e-07, -9.35567015858396189e-07, -2.25996700464747846e-06, -4.19602247347938828e-06, -5.23610742675373331e-06, -4.18208492192206904e-06, -2.00869271793635562e-06, 2.44360126089304686e-06, 7.41255871616885997e-06, 1.77334877662360668e-05, 3.17330413963645697e-05, 3.88465559808537364e-05, 3.18674101436045021e-05, 1.84160144272027537e-05, 8.80631614563753828e-06, 4.86200133309466764e-06, 4.98977260576793924e-06, 8.84579912963090464e-06, 1.4949574506317731e-05, 1.00001811981201172, 1.47417076732381247e-05, 7.95439882494974881e-06, 2.04166076400724705e-06, -3.34203241436625831e-06, -1.1458559129096102e-05, -2.56459679803811014e-05, -4.34442081314045936e-05, -5.23810012964531779e-05, -4.39680152339860797e-05, -2.67528557742480189e-05, -1.31269962366786785e-05, -5.93576032770215534e-06, -2.93925995720201172e-06, -2.26916836254531518e-06, -2.66662550529872533e-06, -2.97073756883037277e-06, -2.50427001446951181e-06, -1.55754526076634647e-06, -7.37335994926979765e-07, -2.61368967358066584e-07, -6.36168380196977523e-08, 1.31548020476657257e-07, 1.23523946626846737e-07, -4.55482087602376851e-08, -9.92920590192625241e-08, 2.53740068956176401e-07, 9.11089585997615359e-08, -2.47207140091632027e-07, -3.25510455922994879e-07, -5.2065502131881658e-08, 2.37895321220094047e-07, 1.87359646020013315e-07, -6.90670418634908856e-08, -1.35890658725656976e-07, -6.06500236699503148e-08, 1.07538852489597048e-07, -6.60659438267430232e-08, -8.85475941458935267e-08, 8.34051476772401656e-08, -2.39658731970848748e-07, -2.08680063451538444e-07, 1.9121057448501233e-07, 4.49466938334808219e-07, 2.39964322190644452e-07, -1.59147504064094392e-07, -3.36640084697137354e-07, -1.73689173266211583e-07, 8.04784292540716706e-08, 1.40753641630908533e-07, 5.81808237143377482e-08, -5.25330570155801979e-08, -1.04853924653980357e-07, -1.06731178561858542e-07, -5.58920589810441015e-08, 7.63466019293446152e-08, 3.34363392084924271e-07, 1.00055012808297761e-06, 2.41241741605335847e-06, 4.36836990047595464e-06, 5.40224664291599765e-06, 4.37232847616542131e-06, 2.16064131564053241e-06, -5.86745230179985811e-08, -2.80167591881763656e-06, -8.14980103314155713e-06, -1.90366299648303539e-05, -3.39259895554278046e-05, -4.17560477217193693e-05, -3.4504271752666682e-05, -1.998747575271409e-05, -9.56462281465064734e-06, -5.68180712434696034e-06, -6.73513659421587363e-06, -1.21900793601525947e-05, -2.01241000468144193e-05, -1.00002431869506836, -2.02204300876474008e-05, -1.15193925012135878e-05, -3.72609702026238665e-06, 2.81597544926626142e-06, 1.13300729935872369e-05, 2.53872294706525281e-05, 4.2872186895692721e-05, 5.1641294703586027e-05, 4.33266286563593894e-05, 2.63645943050505593e-05, 1.29994677990907803e-05, 6.00365683567360975e-06, 3.11282678921998013e-06, 2.46895478994701989e-06, 2.82169708043511491e-06, 3.02007924801728223e-06, 2.47533353103790432e-06, 1.57411966483778087e-06, 8.63078923885041149e-07, 4.17099528249309515e-07, 1.2074467292677582e-07, -9.58547303753221058e-08, -8.1609364599444234e-08, -9.0172335376337287e-08, -9.69801661199198861e-08, -5.5168897006296902e-08, -6.50408082947251387e-08, 1.96549052589034545e-07, 7.35153520281528472e-08, -2.42101179992459947e-07, -3.22353059800661867e-07, -6.97785722536536923e-08, 2.03928607334091794e-07, 1.93348313359820168e-07, -1.29252626379638969e-07, -6.42225899127879529e-08, 6.240296812620727e-08, 9.48808747125440277e-08, -5.25801056028285529e-08, -6.58521202012707363e-08, -4.04362481276621111e-08, -2.48648461820266675e-07, -2.7032908178625803e-07, 7.78012747559841955e-08, 3.89682980994621175e-07, 2.46720105678832624e-07, -1.43988657441695977e-07, -3.53984006551399943e-07, -2.45710452873026952e-07, 1.46671368383977097e-07, 7.59998783905757591e-08, -4.32405578010275349e-08, -5.11796649504958623e-08, 5.67311850829810282e-08, 8.04938196097282344e-08, 1.18800841164556914e-07, 7.96279380210762611e-08, -1.11619506526494661e-07, -3.45762998676946154e-07, -1.01482714853773359e-06, -2.52677637035958469e-06, -4.60156343251583166e-06, -5.61854540137574077e-06, -4.47622142019099556e-06, -2.21619075091439299e-06, 2.96021312351513188e-06, 8.84117889654589817e-06, 2.05854703381191939e-05, 3.62998289347160608e-05, 4.43950120825320482e-05, 3.67546344932634383e-05, 2.15970267163356766e-05, 1.06561901702661999e-05, 6.6769262048183009e-06, 8.5709070845041424e-06, 1.63322474691085517e-05, 2.72708621196215972e-05, 1.00003266334533691, 2.68331823463086039e-05, 1.53919445438077673e-05, 5.75441890759975649e-06, -1.74467868419014849e-06, -1.08009635368944146e-05, -2.50436442001955584e-05, -4.23846468038391322e-05, -5.10402169311419129e-05, -4.29192841693293303e-05, -2.62256580754183233e-05, -1.29420377561473288e-05, -5.91290745433070697e-06, -3.0210778731998289e-06, -2.45924638875294477e-06, -2.95845848086173646e-06, -3.25623568642186001e-06, -2.63799711319734342e-06, -1.54893575654568849e-06, -7.25709526250284398e-07, -3.31745013681938872e-07, -1.69885439049721754e-07, -4.78989186092348973e-08, 8.78160406614370004e-08, 1.55102355847702711e-07, 1.08611423854654277e-07, 9.62653530223178677e-08, 1.93458888020359154e-07, 6.68167885464754363e-08, -2.24989989305868221e-07, -2.95437416752974968e-07, -5.66002000823573326e-08, 1.83516789320492535e-07, 1.81739196136732062e-07, -7.14156840331270359e-08, -6.83466012674216472e-08, 7.59626814783587179e-08, 9.36267525730727357e-08, -4.61058391465485329e-08, -6.18169408994617697e-08, -2.32746586448229209e-07, -2.56598411851882702e-07, 2.82191251699259738e-07, 1.94863389424426714e-07, -1.45137917684223794e-07, -3.49442956348866574e-07, -2.7803307034446334e-07, 1.284630286590982e-07, 1.30248778873465199e-07, -1.03450496169443795e-07, -4.90777232187156187e-08, 5.513199852202888e-08, -8.53719015481146926e-08, -1.17395629217753594e-07, -1.04721586069445038e-07, 1.25506929293806024e-07, 4.03317216068899143e-07, 1.07632831713999622e-06, 2.6052537123177899e-06, 4.78561241834540851e-06, 5.90994568483438343e-06, 4.70558279630495235e-06, 2.24628001888049766e-06, -1.73435978467750829e-07, -3.28567034557636362e-06, -9.57543034019181505e-06, -2.22998187382472679e-05, -3.94136768591124564e-05, -4.82303876196965575e-05, -3.98931661038659513e-05, -2.34644267038675025e-05, -1.18194911919999868e-05, -7.92469927546335384e-06, -1.06018796941498294e-05, -2.01248258235864341e-05, -3.36902048729825765e-05, -1.00004076957702637, -3.38016689056530595e-05, -1.94750027731060982e-05, -7.47797002986771986e-06, 1.06883840089722071e-06, 1.02688209153711796e-05, 2.42047535721212626e-05, 4.10929715144447982e-05, 4.95233616675250232e-05, 4.16832153860013932e-05, 2.55798549915198237e-05, 1.2787395462510176e-05, 5.98669703322229907e-06, 3.12045153805229347e-06, 2.49246204475639388e-06, 2.94456231131334789e-06, 3.30041871166031342e-06, 2.81796928902622312e-06, 1.80510812697320944e-06, 9.13541043701115996e-07, 3.56922896571632009e-07, 6.67958985900440894e-08, -8.89708289264490304e-08, -1.28682785316414083e-07, -1.34100091031541524e-07, -8.29535693469551916e-08, 1.60593572218203917e-07, 2.40263432260690024e-07, 1.02587620176564087e-07, -1.63017404020138201e-07, -2.08773812460094632e-07, 2.01433763891145645e-07, 1.58204073841261561e-07, -3.50711779617540742e-08, -6.81644820588189759e-08, 8.91828833005092747e-08, 9.26056742400760413e-08, -8.08945941344063613e-08, 6.33711749742360553e-08, 6.22016713691664336e-08, -7.62781056096173415e-08, -2.13524188552582928e-07, -1.74637364125374006e-07, 7.11464807068296068e-08, 2.82338390888980939e-07, 1.84154387738999503e-07, -1.19999199910125753e-07, -3.04168850107089384e-07, -2.60407546193164308e-07, -9.02703902738721808e-08, 9.16577604925805645e-08, 1.71480351696118305e-07, 8.01075898948511167e-08, -6.72023858783177275e-08, -8.90898732563982776e-08, -2.58161314548033261e-08, 6.49190283752432151e-08, 1.01274643782289786e-07, 1.05245362647110596e-07, 7.93214027794419962e-08, -1.03414592445005837e-07, -4.18839135818416253e-07, -1.16461956167768221e-06, -2.74917397291574161e-06, -4.95091217089793645e-06, -6.09313156019197777e-06, -4.90088132210075855e-06, -2.38608572544762865e-06, 2.00378664771960757e-07, 3.61193292519601528e-06, 1.03821485026855953e-05, 2.38246975641231984e-05, 4.17725241277366877e-05, 5.10652280354406685e-05, 4.24374629801604897e-05, 2.51882102020317689e-05, 1.28309839055873454e-05, 8.84241035237209871e-06, 1.23514973893179558e-05, 2.36711657635169104e-05, 3.92547044612001628e-05, 1.00004708766937256, 3.91620815207716078e-05, 2.30394052778137848e-05, 9.45830561249749735e-06, -2.06052732210082468e-07, -1.00019697129027918e-05, -2.39549444813746959e-05, -4.05121063522528857e-05, -4.87624456582125276e-05, -4.10814864153508097e-05, -2.52080899372231215e-05, -1.25634005598840304e-05, -5.91521074966294691e-06, -3.2255277346848743e-06, -2.7202736418985296e-06, -3.17395438287348952e-06, -3.41583950103085954e-06, -2.79620894616527949e-06, -1.73269643255480332e-06, -9.02851979844854213e-07, -4.52091626357287169e-07, -2.06471924002471496e-07, 1.48531881905000773e-07, 1.64511689604296407e-07, 7.01511453371495008e-08, 2.26783626544602157e-07, 2.68949605697343941e-07, 7.08868412857555086e-08, -2.05405186193274858e-07, -1.96157145637698704e-07, 8.90307489953556797e-08, 2.47672829800649197e-07, 1.361522379283997e-07, -5.27006918105143995e-08, 5.58805481887247879e-08, -1.1024187074326619e-07, 9.06209933759782871e-08, 1.00231638100467535e-07, -1.06843813796331233e-07, 8.40630605125625152e-08, 9.7017938571752893e-08, -8.35728144465974765e-08, -2.24929692649311619e-07, -1.20019393534676055e-07, 1.63158532018314872e-07, 3.40540623255947139e-07, 2.10734029337800166e-07, -7.11080545556797006e-08, -2.13045694863467361e-07, -1.7775201399672369e-07, -7.70903838542835729e-08, 4.97336252180957672e-08, 1.55633784970632405e-07, 1.43817686648617382e-07, -7.57756311031698715e-08, -4.06400353369917866e-08, -4.62524099020811263e-08, 5.58059731758930866e-08, -1.16448525488976884e-07, -1.34121975747802935e-07, -7.97038453015375126e-08, 1.21916940543087549e-07, 4.25414953042491106e-07, 1.20382628665538505e-06, 2.88027922579203732e-06, 5.18556043971329927e-06, 6.3513202803733293e-06, 5.07199138155556284e-06, 2.42991086452093441e-06, -2.73941481054862379e-07, -3.87616955777048133e-06, -1.11414829007117078e-05, -2.56405892287148163e-05, -4.4911466829944402e-05, -5.47294403077103198e-05, -4.53660468338057399e-05, -2.70353175437776372e-05, -1.41311138577293605e-05, -1.02073427115101367e-05, -1.45177154990960844e-05, -2.79674168268684298e-05, -4.66816418338567019e-05, -1.00005614757537842, -4.64867371192667633e-05, -2.71763292403193191e-05, -1.1437723514973186e-05, -9.11612460186006501e-07, 9.16796398087171838e-06, 2.30969490075949579e-05, 3.93358168366830796e-05, 4.73743784823454916e-05, 4.00341414206195623e-05, 2.47507159656379372e-05, 1.24058051369502209e-05, 5.76202774027478881e-06, 3.06442916553351097e-06, 2.67359655481413938e-06, 3.28577789332484826e-06, 3.60936337528983131e-06, 2.98582449431705754e-06, 1.86218596809339942e-06, 9.20156423944717972e-07, 3.52984272922185482e-07, 9.7840498369805573e-08, -1.51597816966386745e-07, -2.37142970149761823e-07, -8.15967808875939227e-08, 1.89977853892742132e-07, 2.712000082283339e-07, -3.00934175356815103e-07, -2.92016352432256099e-07, 7.33175724576540233e-08, 2.82312782928784145e-07, 1.24526025047089206e-07, -7.0378106897805992e-08, -7.04023364050954115e-08, 7.15870811518470873e-08, -1.18592275555329252e-07, 8.89836471174021426e-08, 1.1331696470051611e-07, -1.13283697089627822e-07, -8.31230408948613331e-08, 8.94154652542056283e-08, 1.47996090049673512e-07, -5.95992020180347026e-08, -2.47769577299550292e-07, -1.08701989631754259e-07, 2.25532815534279507e-07, 3.84844895506830653e-07, 2.00134650185646024e-07, -9.65963593557717104e-08, -1.7654269868216943e-07, -7.84902525197139767e-08, 1.03296876829972462e-07, 1.35516614818698145e-07, 6.40420410036313115e-08, -8.36821669736309559e-08, 7.71396173604443902e-08, 1.01183275091898395e-07, 1.41734645353608357e-07, 1.0529330296549233e-07, -1.38858311515832611e-07, -4.62497979469844722e-07, -1.2716919854938169e-06, -3.00105057249311358e-06, -5.36415836904780008e-06, -6.56695328871137463e-06, -5.28200644112075679e-06, -2.55236182056250982e-06, 3.5265838960185647e-07, 4.25028247263981029e-06, 1.18753996503073722e-05, 2.68884068646002561e-05, 4.69458609586581588e-05, 5.74282130401115865e-05, 4.78670663142111152e-05, 2.85788864857750013e-05, 1.49109137055347674e-05, 1.10303408291656524e-05, 1.61032894538948312e-05, 3.07245682051870972e-05, 5.07615804963279516e-05, 1.00006115436553955, 5.11133221152704209e-05, 3.0248376788222231e-05, 1.2811563465220388e-05, 1.27323130527656758e-06, -9.08506626728922129e-06, -2.29079032578738406e-05, -3.89523738704156131e-05, -4.68367798021063209e-05, -3.9515089156338945e-05, -2.45069586526369676e-05, -1.25142596516525373e-05, -6.02625914325471967e-06, -3.22642108585569076e-06, -2.67985728896746878e-06, -3.29746148963749874e-06, -3.71353553418884985e-06, -3.08108133140194695e-06, -1.91319713849225082e-06, -1.0242393955195439e-06, -5.17460989613027778e-07, -1.75453493511668057e-07, 6.31524983418785268e-08, 1.02182212913248804e-07, 2.9272834467519715e-07, 3.68766194469571928e-07, 7.05325859939875954e-08, -3.35933350470440928e-07, -3.88076841772999614e-07, 2.66680018512488459e-07, 1.02526769296673592e-07, -1.37850548753704061e-07, -1.19573314805165865e-07, 7.79297906206011248e-08, -9.71809299699089024e-08, -5.14851770105906326e-08, 8.76083348089196079e-08, 1.27518575254725874e-07, -1.11682162184933986e-07, -1.09260170688685321e-07, 5.1596238392903615e-08, 1.54713148958762758e-07, -2.74091689789202064e-07, -1.34618289848731365e-07, 2.62483382584832725e-07, 4.33193548587951227e-07, 1.95684705772691814e-07, -1.64792837153981964e-07, -2.41288290681040962e-07, 7.1699723491747136e-08, 5.36566169273555715e-08, 9.07025636820435466e-08, 7.28253652937382867e-08, 7.37760430524758704e-08, 6.43124948851436784e-08, -6.66405455262975011e-08, -1.04053114569069294e-07, -1.3056370562480879e-07, -1.02132233337215439e-07, 1.47622245094680693e-07, 4.78200831821595784e-07, 1.30731655190174934e-06, 3.11296844301978126e-06, 5.57664498046506196e-06, 6.77762000123038888e-06, 5.38740368938306347e-06, 2.60465117207786534e-06, -2.92979137839211035e-07, -4.33168588642729446e-06, -1.24250072985887527e-05, -2.80970907624578103e-05, -4.85322780150454491e-05, -5.89268565818201751e-05, -4.91937644255813211e-05, -2.97983660857426003e-05, -1.58398488565580919e-05, -1.16270448415889405e-05, -1.69399809237802401e-05, -3.26802728523034602e-05, -5.39419925189577043e-05, -1.00006437301635742, -5.35800099896732718e-05, -3.19015562126878649e-05, -1.39390358526725322e-05, -1.87405328233580803e-06, 8.9781742644845508e-06, 2.30904952331911772e-05, 3.93105183320585638e-05, 4.73667387268505991e-05, 4.00017815991304815e-05, 2.46502131631132215e-05, 1.23948193504475057e-05, 6.0007523643434979e-06, 3.45229818776715547e-06, 2.95730183097475674e-06, 3.3936910313059343e-06, 3.71478472516173497e-06, 3.16300224767473992e-06, 1.98197426470869686e-06, 9.4556861540695536e-07, 3.95196337876768666e-07, 1.94121483332310163e-07, -1.86433425142240594e-07, -2.46609772602823796e-07, 2.69946582420743653e-07, -3.53160544364072848e-07, -4.2142144707213447e-07, 2.95402998062854749e-07, 1.57547205503760779e-07, -1.51723099861555966e-07, -1.68347611406716169e-07, 6.62235848380987591e-08, -9.09629704892722657e-08, -6.42362465441692621e-08, 6.01796443788771285e-08, 1.16619574441756413e-07, -1.0145204498712701e-07, -1.12483007796981838e-07, 1.46007977264162037e-07, -2.58798905861112871e-07, -1.6145557424351864e-07, 2.8267757556932338e-07, 4.96634868341061519e-07, 2.32143293033004738e-07, -1.91264163618143357e-07, -3.23945329228081391e-07, -8.7639016044249729e-08, 1.39664336984424153e-07, 1.24378274790615251e-07, 6.6673848664322577e-08, 4.34712710273288394e-08, 6.88163339646052918e-08, 7.12817183057268267e-08, 1.18807029991785384e-07, 1.33384745026887686e-07, 1.04678761658760777e-07, -1.57042165938037215e-07, -5.33744696440408006e-07, -1.38778250402538106e-06, -3.19722676067613065e-06, -5.72900489714811556e-06, -7.05563479641568847e-06, -5.64608171771396883e-06, -2.6291606900485931e-06, 4.96363213642325718e-07, 4.60379169453517534e-06, 1.28070887512876652e-05, 2.91031647066120058e-05, 5.06562355440109968e-05, 6.15672834101133049e-05, 5.1101425924571231e-05, 3.0753595638088882e-05, 1.66089193953666836e-05, 1.26782415463821962e-05, 1.82825187948765233e-05, 3.46776650985702872e-05, 5.73593024455476552e-05, 1.00006890296936035, 5.7475757785141468e-05, 3.40426013281103224e-05, 1.47836854011984542e-05, 2.20414949581027031e-06, -8.84501696418737993e-06, -2.29749912250554189e-05, -3.89731649192981422e-05, -4.69488804810680449e-05, -4.00017815991304815e-05, -2.50897119258297607e-05, -1.27279381558764726e-05, -5.91104162595001981e-06, -3.18196566695405636e-06, -2.92659433398512192e-06, -3.63689423465984873e-06, -3.88598891731817275e-06, -3.16019304591463879e-06, -2.03871900339436252e-06, -1.12107909444603138e-06, -5.01183990309073124e-07, -1.52818628862405603e-07, -7.82581821567873703e-08, 1.82919237090573006e-07, 3.97066884261221276e-07, 1.66209972007891338e-07, -2.84173552245192695e-07, -3.97801926510510384e-07, -5.90736242145339929e-08, 3.02201527802026249e-07, 2.29550764174746291e-07, -1.02489977393815934e-07, -1.86651874400922679e-07, 5.2875435585519881e-08, -8.18270748936811287e-08, 4.56997319986385264e-08, 9.52527372533040761e-08, -9.32624359961664595e-08, -1.08263918718876084e-07, 9.34737940383456589e-08, -2.77781566637713695e-07, -2.39030782722693402e-07, 2.22268397465086309e-07, 5.17088892593164928e-07, 2.717501388360688e-07, -1.90507748243362585e-07, -3.94169148876244435e-07, -2.02070140176147106e-07, 9.51232905777033011e-08, 1.63049620027777564e-07, 5.10425088862120901e-08, 3.36888952290337329e-08, -6.35588293107502977e-08, -1.31183128360135015e-07, -1.43303168442798778e-07, -8.5382168890646426e-08, 1.34597556211701885e-07, 5.18814033512171591e-07, 1.45575029364408692e-06, 3.34055243911279831e-06, 5.82991924602538347e-06, 7.09011419530725107e-06, 5.76792899664724246e-06, 2.87155398837057874e-06, -3.51306340462542721e-07, -4.70742588731809519e-06, -1.28758274513529614e-05, -2.84211619145935401e-05, -4.89691592520102859e-05, -5.98437400185503066e-05, -5.02662260259967297e-05, -3.04279619740555063e-05, -1.61879361257888377e-05, -1.23389072541613132e-05, -1.82957774086389691e-05, -3.456111517152749e-05, -5.63790090382099152e-05, -1.00006747245788574, -5.65345071663614362e-05, -3.38426580128725618e-05, -1.4704104614793323e-05, -1.81268626420205692e-06, 9.83456538961036131e-06, 2.50732919084839523e-05, 4.23285418946761638e-05, 5.0531332817627117e-05, 4.25523940066341311e-05, 2.65962880803272128e-05, 1.38687264552572742e-05, 6.8603790168708656e-06, 3.65859909834398422e-06, 2.85662099486216903e-06, 3.43503961630631238e-06, 3.92704032492474653e-06, 3.28268288285471499e-06, 1.97950453184603248e-06, 9.74422846411471255e-07, 4.57582586932403501e-07, 1.48653043652302586e-07, -6.43534505684328906e-08, 6.7308228324236552e-08, -7.12279017989203567e-08, -4.09848013305236236e-07, -4.58515955870097969e-07, -1.06878978556324e-07, 2.54051229831020464e-07, 2.41404791267996188e-07, -1.7148531128441391e-07, 3.5462587533174883e-08, -7.81476217071030987e-08, 7.07536358390825626e-08, 1.09043021723209677e-07, -6.11447461551506422e-08, -7.24621997960639419e-08, -4.78381672053274087e-08, -2.85621069906483172e-07, -3.07152873801896931e-07, 9.316063653841411e-08, 4.46922115315828705e-07, 2.77081568356152275e-07, -1.73485759091818181e-07, -4.11275493661378277e-07, -2.80204943692297093e-07, 1.7701442800444056e-07, 9.02730548091312812e-08, -5.37927036248220247e-08, -6.7207771792254789e-08, 5.74533665087528789e-08, 5.16564426789045683e-08, 1.1478674366571795e-07, 1.63773265171585081e-07, 1.11887047182790411e-07, -1.85387818874005461e-07, -5.30927422914828639e-07, -1.43333738833462121e-06, -3.39669873028469738e-06, -6.03156149736605585e-06, -7.26729103917023167e-06, -5.74319619772722945e-06, -2.80490371551422868e-06, 1.65802987339702668e-07, 4.24485733674373478e-06, 1.23565187095664442e-05, 2.77090566669357941e-05, 4.72421124868560582e-05, 5.69330950384028256e-05, 4.76472596346866339e-05, 2.93436169158667326e-05, 1.61339939950266853e-05, 1.22677793115144596e-05, 1.79378275788621977e-05, 3.4249806049047038e-05, 5.61518136237282306e-05, 1.00006699562072754, 5.57660205231513828e-05, 3.32357740262523293e-05, 1.42856115417089313e-05, 1.2299772151891375e-06, -1.08998574432916939e-05, -2.70352193183498457e-05, -4.58086724393069744e-05, -5.53250138182193041e-05, -4.69567166874185205e-05, -2.90895932266721502e-05, -1.46417551150079817e-05, -7.03627893017255701e-06, -3.98795236833393574e-06, -3.28812802763422951e-06, -3.54020312443026341e-06, -3.68774271919392049e-06, -3.1246618164004758e-06, -2.07131392926385161e-06, -1.10201472125481814e-06, -4.83860958411241882e-07, -1.37458911808607809e-07, 1.34676525931354263e-07, 3.32760322407921194e-07, 2.05086578830560029e-07, -1.68132132216669561e-07, -2.84625002677785233e-07, 2.66202732746023685e-07, 2.40165121567770257e-07, -1.07457935882848687e-07, -8.78753638744456111e-08, 8.45036822738620685e-08, 1.06902980689937976e-07, -5.31242925205788197e-08, -7.15885661861648259e-08, -2.65392770870676031e-07, -2.86147837869066279e-07, 3.29211076177671202e-07, 2.18529692119773244e-07, -1.75642867361602839e-07, -4.05429148031544173e-07, -3.16024113544699503e-07, 1.54319366174604511e-07, 1.52154882471222663e-07, -1.24454999195222626e-07, -6.28974490268774389e-08, 6.57807035508994886e-08, -1.18006493465827589e-08, -8.34789162240667793e-08, -1.18117192471345334e-07, -1.45783772609320295e-07, -1.31487482235570496e-07, 1.82131529413709359e-07, 5.99855923155701021e-07, 1.50896448758430779e-06, 3.39831535711709876e-06, 6.03226908424403518e-06, 7.44385442885686643e-06, 6.01852661930024624e-06, 2.8662150270974962e-06, -3.54763500354238204e-07, -4.2367601054138504e-06, -1.15704660856863484e-05, -2.60043125308584422e-05, -4.50856095994822681e-05, -5.47724266652949154e-05, -4.55941662949044257e-05, -2.77023264061426744e-05, -1.53902583406306803e-05, -1.23993349916418083e-05, -1.83415340870851651e-05, -3.44374602718744427e-05, -5.62807290407363325e-05, -1.00006735324859619, -5.6410299293929711e-05, -3.37006931658834219e-05, -1.43734805533313192e-05, -7.03313844496733509e-07, 1.24897915156907402e-05, 2.99230250675464049e-05, 4.95749627589248121e-05, 5.92523465456906706e-05, 5.0611062761163339e-05, 3.21385596180334687e-05, 1.66352019732585177e-05, 7.79400033934507519e-06, 3.8988746382528916e-06, 3.06444076159095857e-06, 3.62259447683754843e-06, 3.89065871786442585e-06, 3.08703511109342799e-06, 1.84422265192552004e-06, 9.58355599323112983e-07, 5.47386662219651043e-07, 4.14440251006453764e-07, 3.07344720340552158e-07, -3.92643869417952374e-07, -4.07545797997954651e-07, 2.23116700226455578e-07, 1.75054196915880311e-07, -8.37570084399885673e-08, 6.22138145445205737e-08, -1.081908322930758e-07, 9.23364140703597513e-08, 1.00936347280367045e-07, -9.6877521116311982e-08, 7.6745223509533389e-08, 7.25423987546491844e-08, -9.04521400002522569e-08, -2.45952918476177729e-07, -1.92919983987849264e-07, 9.55261683088792779e-08, 3.32276840708800592e-07, 2.05231174277287209e-07, -1.50903787243805709e-07, -3.55643436478203512e-07, -2.95252590376549051e-07, -9.62938884185859933e-08, 1.09185087637797551e-07, 1.94955177335032204e-07, 8.52145447538532608e-08, -8.71392344947707898e-08, -1.144511969641826e-07, 5.33652340095613908e-08, -6.94112571864025085e-08, 5.55161570048312569e-08, 8.15329315173585201e-08, 1.46235862530375016e-07, 1.49279387073875114e-07, 9.2670020990226476e-08, -1.47515322623803513e-07, -5.59766931473859586e-07, -1.5353450635302579e-06, -3.46040656040713657e-06, -5.95269557379651815e-06, -7.19088211553753354e-06, -5.91730531596112996e-06, -3.17638227897987235e-06, -2.26826912808064662e-07, 3.43765236721083056e-06, 9.6455696620978415e-06, 2.07653611141722649e-05, 3.52130991814192384e-05, 4.29711253673303872e-05, 3.6477427784120664e-05, 2.26585962082026526e-05, 1.2854869055445306e-05, 1.1144277777930256e-05, 1.79925373231526464e-05, 3.45245753123890609e-05, 5.61681117687840015e-05, 1.00006687641143799, 5.59370419068727642e-05, 3.33094903908204287e-05, 1.38022678584093228e-05, -5.04579134030791465e-07, -1.54199060489190742e-05, -3.65672385669313371e-05, -6.09424569120164961e-05, -7.25628633517771959e-05, -6.11702562309801579e-05, -3.82665239158086479e-05, -1.98755660676397383e-05, -9.72771522356197238e-06, -5.00199848829652183e-06, -3.30518514601862989e-06, -3.18249590236518998e-06, -3.38109498443373013e-06, -2.95639097203093115e-06, -1.92539664567448199e-06, -8.58357338984205853e-07, -1.08451736480219552e-07, 2.0053536786690529e-07, 6.0932386247714021e-08, -2.11954485962451145e-07, -1.26347714513030951e-07, 2.65476955974008888e-07, 4.31542304113463615e-07, 2.28438622684734582e-07, -7.09210041804908542e-08, 7.97398058693943312e-08, -1.37407553779667069e-07, 9.82734675858409901e-08, 1.13481959829186962e-07, -1.16299574415279494e-07, -5.34000541563273146e-08, 1.1901496321797822e-07, 1.28522756881466194e-07, -9.00115963986536372e-08, -2.56141220233985223e-07, -1.28592887449485715e-07, 2.05095574301594752e-07, 4.0574761328571185e-07, 2.4082174832074088e-07, -9.46290228398538602e-08, -2.51733069944748422e-07, -1.9773933956912515e-07, -7.72934356518817367e-08, 6.38986321632728504e-08, 1.79987182491458952e-07, 1.64587120821124699e-07, -8.69814371640131867e-08, -4.88882214710884e-08, -4.12651566250588075e-08, -3.34093392950762791e-08, 5.39407629673860356e-08, -6.08939600965641148e-08, -1.33308191152536892e-07, -1.71752006394854106e-07, -1.12226040016594197e-07, 1.878337627658766e-07, 5.58521207949524978e-07, 1.47494631619338179e-06, 3.42048338097811211e-06, 6.02747741140774451e-06, 7.25766858522547409e-06, 5.77016635361360386e-06, 3.00333090308413375e-06, 5.74569583022821462e-07, -2.15706995732034557e-06, -7.21247897672583349e-06, -1.64247103384695947e-05, -2.77501858363393694e-05, -3.31457413267344236e-05, -2.77914150501601398e-05, -1.76645989995449781e-05, -1.09791890281485394e-05, -1.07806008600164205e-05, -1.84501950570847839e-05, -3.60204430762678385e-05, -5.88933398830704391e-05, -1.00007021427154541, -5.87750910199247301e-05, -3.4958975447807461e-05, -1.40221400215523317e-05, 1.84453585916344309e-06, 1.85265271284151822e-05, 4.20938449678942561e-05, 6.97444702382199466e-05, 8.37610350572504103e-05, 7.149590237531811e-05, 4.49914659839123487e-05, 2.2986558178672567e-05, 1.07273890534997918e-05, 5.26538360645645298e-06, 3.5375696825212799e-06, 3.33230127580463886e-06, 3.09485767502337694e-06, 2.35122115554986522e-06, 1.60931085702031851e-06, 1.18430250495293876e-06, 7.88360239312169142e-07, 1.65853379030522774e-07, -4.47991482133147656e-07, -5.12296196575334761e-07, 2.76220532668958185e-07, 9.18637468316774175e-08, -1.47888712831445446e-07, -1.27604835142847151e-07, 1.05941865058412077e-07, -1.27037580455180432e-07, 1.01970343280299858e-07, 1.28574683344595542e-07, -1.34048576683198917e-07, -9.53286658500474005e-08, 1.06856582249292842e-07, 1.71486078670568531e-07, -7.50008979366612039e-08, -2.92822051051189192e-07, -1.22266513358226803e-07, 2.75156764928397024e-07, 4.5955368932482088e-07, 2.33267456906105508e-07, -1.22159136139998736e-07, -2.10324330396360892e-07, -8.13747149663868186e-08, 1.19729293146519922e-07, 1.5416665632983495e-07, 7.43913091127978987e-08, -9.21651874818962824e-08, -7.19264647841555416e-08, 7.3884216078567988e-08, 7.52071613874250033e-08, 1.27313228404091205e-07, 1.63276737907835923e-07, 1.28845826452561596e-07, -1.89900475788817857e-07, -6.10723418503766879e-07, -1.54249300976516679e-06, -3.41299619321944192e-06, -5.96681229581008665e-06, -7.36648416932439432e-06, -6.07985430178814568e-06, -3.15114129989524372e-06, -3.8333922702804557e-07, 2.19558410208264831e-06, 6.24863969278521836e-06, 1.39929634315194562e-05, 2.43138638325035572e-05, 2.97348797175800428e-05, 2.50811226578662172e-05, 1.58404527610400692e-05, 1.01382993307197466e-05, 1.09417924250010401e-05, 1.95604443433694541e-05, 3.82174439437221736e-05, 6.22972875135019422e-05, 1.00007426738739014, 6.21271319687366486e-05, 3.71419664588756859e-05, 1.51879621625994332e-05, -1.77076719864999177e-06, -2.01024558919016272e-05, -4.57327296317089349e-05, -7.488299161195755e-05, -8.89436269062571228e-05, -7.56548979552462697e-05, -4.80419184896163642e-05, -2.51495748671004549e-05, -1.20380727821611799e-05, -5.72183535041403957e-06, -3.37476649292511865e-06, -3.14165163217694499e-06, -3.30666489389841445e-06, -2.59026592175359838e-06, -1.23552467812260147e-06, -3.39728956078033661e-07, -3.07718011072211084e-07, -6.32513661003031302e-07, -5.55448309569328558e-07, 7.83878704169183038e-08, 5.1914463483626605e-07, 2.77219669442274608e-07, -1.10597333957684896e-07, -1.32249127204886463e-07, 1.20167257477987732e-07, -1.06391922827242524e-07, -6.5125391301990021e-08, 9.31536447978942306e-08, 1.38849273412233742e-07, -1.34617692992833327e-07, -1.26286778368012165e-07, 6.35217816125077661e-08, 1.80506560809590155e-07, -3.2733680654928321e-07, -1.57489665753018926e-07, 3.14998999328963691e-07, 5.1540132517402526e-07, 2.2961222612138954e-07, -2.01272285949016805e-07, -2.89316517410043161e-07, -4.79477435533226526e-08, 1.00286136728300335e-07, 6.84480383483787591e-08, 6.22344344947123318e-08, 9.96801787778167636e-08, 7.99298476295007276e-08, 7.19940800308904727e-08, 6.17919084788809414e-08, -8.62803446466386958e-08, -1.41369923767342698e-07, -1.64247879297363397e-07, -1.20582740237296093e-07, 1.78336108547227923e-07, 6.00071302869764622e-07, 1.58726925292285159e-06, 3.54413919012586121e-06, 6.04844308327301405e-06, 7.26677671991637908e-06, 6.02988893660949543e-06, 3.46466686096391641e-06, 9.0961583509852062e-07, -1.82636176759842783e-06, -5.86312398809241131e-06, -1.25179731185198762e-05, -2.0822761143790558e-05, -2.5197301511070691e-05, -2.15871859836624935e-05, -1.41187938424991444e-05, -9.55181894823908806e-06, -1.10458422568626702e-05, -2.04366078833118081e-05, -4.01008328481111676e-05, -6.52537928544916213e-05, -1.00007772445678711, -6.50969523121602833e-05, -3.88151456718333066e-05, -1.56631776917492971e-05, 2.05571313927066512e-06, 2.11793649214087054e-05, 4.84213851450476795e-05, 7.99271219875663519e-05, 9.53375420067459345e-05, 8.10018536867573857e-05, 5.10636018589138985e-05, 2.64126028923783451e-05, 1.26031318359309807e-05, 6.18944568486767821e-06, 3.68942551176587585e-06, 2.90505477096303366e-06, 2.72353304353600834e-06, 2.56014732258336153e-06, 1.96613655134569854e-06, 8.92761704562872183e-07, -1.30145778598489414e-07, -4.71498680099102785e-07, -6.85992276316937932e-08, 3.45262293421910726e-07, 1.26101696196201374e-07, -3.07759336237722891e-07, -3.13394991735549411e-07, -4.98542505056320806e-08, 7.64771073136216728e-08, -9.52050456248798582e-08, -6.84024215047429607e-08, 7.2736426659503195e-08, 1.32578833245133865e-07, -1.22592552997957682e-07, -1.29145746541325934e-07, 1.7356970261062088e-07, -3.09141029219972552e-07, -1.91872842947304889e-07, 3.35105795556955854e-07, 5.87331726364936912e-07, 2.7106989364256151e-07, -2.3393658921122551e-07, -3.92139980931460741e-07, -1.07173775631963508e-07, 1.69220385259905015e-07, 1.50661790598860534e-07, 7.06699054831005924e-08, 4.83057327471669851e-08, 6.57442313922729227e-08, 8.8823206567667512e-08, 1.55283757408142264e-07, 1.7512797967356164e-07, 1.21833721777875326e-07, -1.96413935782402405e-07, -6.30200531759328442e-07, -1.61957359523512423e-06, -3.64498737326357514e-06, -6.34361094853375107e-06, -7.63505522627383471e-06, -6.11157838648068719e-06, -3.24028928844199982e-06, -7.81011010531074135e-07, 1.67509881521255011e-06, 5.85918223805492744e-06, 1.34078918563318439e-05, 2.27818800340173766e-05, 2.73910463874926791e-05, 2.31412250286666676e-05, 1.49867855725460686e-05, 1.00747829492320307e-05, 1.14583081085584126e-05, 2.0964869690942578e-05, 4.09576932725030929e-05, 6.63988539599813521e-05, 1.00007891654968262, 6.61475278320722282e-05, 3.9646503864787519e-05, 1.60933122970163822e-05, -2.14045780921878759e-06, -2.15930485865101218e-05, -4.86902463308069855e-05, -7.97404354671016335e-05, -9.50412359088659286e-05, -8.12000871519558132e-05, -5.17548724019434303e-05, -2.70817035925574601e-05, -1.28752271848497912e-05, -6.13751126365968958e-06, -3.78185632143868133e-06, -3.36708149006881285e-06, -2.92348090624727774e-06, -1.98713951249374077e-06, -1.37103734232368879e-06, -1.25524968552781502e-06, -9.69919369708804879e-07, -2.38374823879894393e-07, 4.36505246170781902e-07, 4.4691398670693161e-07, -1.33843386151966115e-07, 1.25483154533867491e-07, -6.90993431362585397e-08, -4.61324169975796394e-08, 6.70746942432742799e-08, 1.15994964744459139e-07, -1.13139641655379819e-07, -1.23851265243501985e-07, 1.13837756998691475e-07, -3.29011470512341475e-07, -2.8260930662327155e-07, 2.62415682072969503e-07, 6.09269591222982854e-07, 3.16839560809967224e-07, -2.31314700727125455e-07, -4.71478443841988337e-07, -2.40453147171137971e-07, 1.15376941778322362e-07, 1.9470307677238452e-07, 5.36608908419111685e-08, 3.73146349375019781e-08, -7.90348693158193782e-08, -1.5715440326857788e-07, -1.89683589724154444e-07, -1.238488493982004e-07, 2.11699585861424566e-07, 6.61699687043437734e-07, 1.68739757100411225e-06, 3.71410101251967717e-06, 6.41492488284711726e-06, 7.8579996625194326e-06, 6.50566971671651118e-06, 3.46843671650276519e-06, 5.27517954651557375e-07, -2.35279253502085339e-06, -6.73280283081112429e-06, -1.45491330840741284e-05, -2.46001618506852537e-05, -2.98619361274177209e-05, -2.54795031651156023e-05, -1.6566096746828407e-05, -1.09607663034694269e-05, -1.18888165161479264e-05, -2.09596018976299092e-05, -4.042786531499587e-05, -6.54298419249244034e-05, -1.00007784366607666, -6.53875831631012261e-05, -3.92468500649556518e-05, -1.5950939996400848e-05, 2.14384590435656719e-06, 2.15787804336287081e-05, 4.87146680825389922e-05, 7.96779495431110263e-05, 9.47110311244614422e-05, 8.06287062005139887e-05, 5.12131518917158246e-05, 2.68336389126488939e-05, 1.2959043488081079e-05, 6.28841326033580117e-06, 3.6938552057108609e-06, 3.29890804096066859e-06, 3.38790641762898304e-06, 2.56534281106723938e-06, 1.10552275600639405e-06, 2.26645184397966659e-07, 2.464292663262313e-07, 5.14572093379683793e-07, 3.7261585816850129e-07, -1.17715380554272997e-07, -3.46842881526754354e-07, -1.6912224509724183e-07, -5.35767519238561363e-08, -9.81213830186788982e-08, 9.21662746122819954e-08, 1.31494743982329965e-07, -8.03957362904839101e-08, -8.50410017960712139e-08, 7.24651911809814919e-08, -5.75783509759730805e-08, -3.39557118422817439e-07, -3.64425886800745502e-07, 1.06952711576013826e-07, 5.20969251738279127e-07, 3.1757090823703038e-07, -2.13471480492444243e-07, -4.89470039610750973e-07, -3.28378831682130112e-07, 2.14438955481455196e-07, 1.0666723682106749e-07, -6.75585596354721929e-08, -8.34546085570764262e-08, 7.5522336828726111e-08, -2.91954140863026623e-08, 8.60172377770140884e-08, 1.48504724961640022e-07, 1.96190256929185125e-07, 1.56553753072330437e-07, -2.31313251219944505e-07, -7.17672548944392474e-07, -1.79543940248549916e-06, -3.91384901377023198e-06, -6.64937715555424802e-06, -7.99495956016471609e-06, -6.58791077512432821e-06, -3.66620884051371831e-06, -7.7592017078131903e-07, 2.43897579821350519e-06, 7.62290846978430636e-06, 1.65711644513066858e-05, 2.76758109976071864e-05, 3.32449199049733579e-05, 2.81462616840144619e-05, 1.8056800399790518e-05, 1.15171424113214016e-05, 1.18903299153316766e-05, 2.0413814127095975e-05, 3.87379986932501197e-05, 6.19581333012320101e-05, 1.00007331371307373, 6.14932214375585318e-05, 3.70692505384795368e-05, 1.5081181118148379e-05, -2.41508837461879011e-06, -2.15186319110216573e-05, -4.81433708046097308e-05, -7.84366638981737196e-05, -9.32774128159508109e-05, -7.97712273197248578e-05, -5.10354948346503079e-05, -2.6855996111407876e-05, -1.29013178593595512e-05, -6.2222252381616272e-06, -3.60536887455964461e-06, -2.97740416499436833e-06, -3.08756420963618439e-06, -2.97675819638243411e-06, -2.14997044167830609e-06, -9.458922818339488e-07, -5.11046245321722381e-08, 1.93065645248680084e-07, -5.62231292633441626e-08, 1.15586736626482889e-07, 1.92211857097390748e-07, -4.71559253867326333e-08, 1.26408309597536572e-07, 1.40224926781229442e-07, -7.24518756101133476e-08, -4.20750012608550605e-08, 7.0118410633313033e-08, -8.47442365170536505e-08, -3.13100571247559856e-07, -3.32320240659100818e-07, 3.89923826560334419e-07, 2.49774217309095548e-07, -2.17040195593654062e-07, -4.81000256513652857e-07, -3.66937342732853722e-07, 1.88845248771940533e-07, 1.81341292204706406e-07, -1.49440879226858669e-07, -7.89280321100704896e-08, 6.67600303927429195e-08, -4.7800053692981237e-08, -5.32304689215834514e-08, 5.20532879022539419e-08, 4.73151651192438294e-08, -4.90475322578731721e-08, -1.14254213201547827e-07, -1.73676468762096192e-07, -1.81638853291588021e-07, -1.2590693643232953e-07, 2.01457780235614337e-07, 7.13167651156254578e-07, 1.8638456822372973e-06, 4.09424683311954141e-06, 6.96469805916422047e-06, 8.3470222307369113e-06, 6.75509545544628054e-06, 3.54206349584273994e-06, 4.70859191636918695e-07, -2.83804411083110608e-06, -8.3109807746950537e-06, -1.80392853508237749e-05, -3.02875032502925023e-05, -3.65945779776666313e-05, -3.12240772473160177e-05, -2.01541861315490678e-05, -1.25153037515701726e-05, -1.1863965482916683e-05, -1.94303611351642758e-05, -3.68804976460523903e-05, -5.94073571846820414e-05, -1.00007045269012451, -5.88876318943221122e-05, -3.51089438481722027e-05, -1.39188514367560856e-05, 2.82465725831571035e-06, 2.13630773941986263e-05, 4.76288441859651357e-05, 7.75952139520086348e-05, 9.20742895686998963e-05, 7.84541771281510592e-05, 5.00660316902212799e-05, 2.6496274585952051e-05, 1.30843300212291069e-05, 6.78161313771852292e-06, 4.36639948020456359e-06, 3.52419556293170899e-06, 2.89891340798931196e-06, 2.24168593376816716e-06, 1.74213869286177214e-06, 1.28484577999188332e-06, 6.98673886745382333e-07, 1.33541519176105794e-07, -1.30487592286954168e-07, -9.30409456145753211e-08, -1.8494633025056828e-07, -2.21241094777724356e-07, -7.07595546600714442e-08, 1.01154014942039794e-07, 1.22208462016715202e-07, -1.22345795716682915e-07, 9.89227046943597088e-08, 9.29307546471136448e-08, -1.06871524963025877e-07, -2.92033973892102949e-07, -2.22012289441408939e-07, 1.25904975334378832e-07, 4.00395862243385636e-07, 2.35646965052183077e-07, -1.91025705476022267e-07, -4.2333567762398161e-07, -3.39865437126718462e-07, -1.02135423674099002e-07, 1.34492310621681099e-07, 2.28744298169658578e-07, 9.72296732015820453e-08, -1.04414915824690979e-07, -1.36221942170777766e-07, 5.94733613468179101e-08, -7.80193474270163279e-08, 6.46162092721169756e-08, 8.97722998161043506e-08, 1.86766314413944201e-07, 2.27452815693141019e-07, 1.38703953211916087e-07, -2.7525845780473901e-07, -7.46298098874831339e-07, -1.86158865744801005e-06, -4.12593681176076643e-06, -7.09506457496900111e-06, -8.58309158502379432e-06, -7.04509238858008757e-06, -3.76891398445877712e-06, -4.68467902692282223e-07, 3.24649818139732815e-06, 9.34394574869656935e-06, 1.9985986000392586e-05, 3.3171141694765538e-05, 3.96885880036279559e-05, 3.35288568749092519e-05, 2.14283063542097807e-05, 1.31537681227200665e-05, 1.19557962534599937e-05, 1.82309067895403132e-05, 3.29430622514337301e-05, 5.20979629072826356e-05, 1.00006186962127686, 5.2379062253748998e-05, 3.16585428663529456e-05, 1.22575138448155485e-05, -3.83481938115437515e-06, -2.1867175746592693e-05, -4.72503088531084359e-05, -7.63242715038359165e-05, -9.07772191567346454e-05, -7.79224938014522195e-05, -5.00296773680020124e-05, -2.62090125033864751e-05, -1.22788496810244396e-05, -5.79265315536758862e-06, -3.88260286854347214e-06, -3.99033751818933524e-06, -3.76719526684610173e-06, -2.47906359618355054e-06, -1.18560569717374165e-06, -6.37542257209133822e-07, -4.92591368583816802e-07, -2.74795723953502602e-07, 2.39738227492125588e-07, 1.26347771356449812e-07, 1.93404417814235785e-07, 1.80200601107571856e-07, -1.43897224802458368e-07, -7.38664667210287007e-08, 1.37232873953507806e-07, 1.50931541043064499e-07, -1.13414309055315243e-07, -3.11422610366207664e-07, -1.50521529462821491e-07, 2.56767208384189871e-07, 4.93690151870396221e-07, 2.82650006511175889e-07, -1.25627394709226792e-07, -3.02142609598377021e-07, -2.21636753394705011e-07, -7.5883932026954426e-08, 8.09269096180287306e-08, 2.06461393759127532e-07, 1.82841588980409142e-07, -1.12048688549748476e-07, -6.73816202834132127e-08, 5.76799337181910232e-08, -4.68761136573903059e-08, -3.53863782720509334e-08, -5.74742635706115834e-08, -9.81648113906885555e-08, -1.5904292638424522e-07, -2.10517882237581944e-07, -1.91335757904198545e-07, 2.6974660727319133e-07, 8.71976908456417732e-07, 2.06944423553068191e-06, 4.34954154115985148e-06, 7.33657998353010044e-06, 8.8435463112546131e-06, 7.24064602763974108e-06, 3.81565314455656335e-06, 3.33363999516222975e-07, -3.67085931429755874e-06, -1.03816864793770947e-05, -2.22411981667391956e-05, -3.71558198821730912e-05, -4.48356331617105752e-05, -3.81084137188736349e-05, -2.40568188019096851e-05, -1.37246697704540566e-05, -1.1038028787879739e-05, -1.62476553668966517e-05, -2.95762238238239661e-05, -4.64009463030379266e-05, -1.0000540018081665, -4.48435093858279288e-05, -2.67575996986124665e-05, -1.02527883427683264e-05, 4.03329022446996532e-06, 2.13270905078388751e-05, 4.62878379039466381e-05, 7.4398732976987958e-05, 8.76418635016307235e-05, 7.47565136407501996e-05, 4.83920593978837132e-05, 2.64160262304358184e-05, 1.33596249725087546e-05, 6.38888604953535832e-06, 3.26638974001980387e-06, 2.91274341179814655e-06, 3.67956249647249933e-06, 3.49292804457945749e-06, 2.09674794859893154e-06, 7.99204201484826626e-07, 2.73818244522772147e-07, 2.24850523977693229e-07, 1.70998291082469223e-07, -8.52708907927990367e-08, -2.98254178687784588e-07, -1.96033298038855719e-07, 1.26031238778523402e-07, -1.74242060779761232e-07, -1.21670979069676832e-07, 1.31532090108521516e-07, 2.14605151427349483e-07, -8.6160866885620635e-08, -3.53327294533301028e-07, -1.45206271895403916e-07, 3.39191387865867e-07, 5.59536658784054453e-07, 2.7481877395985066e-07, -1.63758855364903866e-07, -2.62149626450991491e-07, -8.68354064209597709e-08, 5.9311076938683982e-08, 1.37443350922694663e-07, 1.73267849845615274e-07, 8.17839804767572787e-08, -1.10921142493225489e-07, -7.82919471475906903e-08, 7.05188938354694983e-08, 5.33159827398321795e-08, 1.33215763753469218e-07, 2.12479676520160865e-07, 2.05517949325439986e-07, 1.09899886524544854e-07, -2.08195984896519803e-07, -7.75179216816468397e-07, -2.094182718792581e-06, -4.55392546427901834e-06, -7.61255114412051626e-06, -9.0644180090748705e-06, -7.39571532903937623e-06, -3.9077472138160374e-06, -2.63287660118294298e-07, 4.07043353334302083e-06, 1.12967518361983821e-05, 2.37581953115295619e-05, 3.90302957384847105e-05, 4.66197598143480718e-05, 3.96628747694194317e-05, 2.55186787398997694e-05, 1.49032357512624003e-05, 1.11716681203688495e-05, 1.43001461765379645e-05, 2.488388963683974e-05, 3.96672803617548198e-05, 1.00004732608795166, 3.98534612031653523e-05, 2.33436694543343037e-05, 7.79798756411764771e-06, -5.57460316485958174e-06, -2.1734784240834415e-05, -4.58138056274037808e-05, -7.40304240025579929e-05, -8.80480874911881983e-05, -7.51214975025504827e-05, -4.75875385745894164e-05, -2.48248652496840805e-05, -1.25080659927334636e-05, -7.2429265856044367e-06, -5.05019806951167993e-06, -3.71743749383313116e-06, -2.91026708509889431e-06, -2.59075818576093297e-06, -2.13894713851914275e-06, -1.28258852782892063e-06, -4.43847795850160765e-07, 2.61851027971715666e-07, 2.81196463447486167e-07, 7.47140802559442818e-08, -1.384329664233519e-07, -1.4645245016708941e-07, 7.7518507168861106e-08, 2.17426006088317081e-07, -4.05705804951139726e-07, -1.98437803078377328e-07, 3.80070531491583097e-07, 6.24713209163019201e-07, 2.71674025498214178e-07, -2.59815578829147853e-07, -3.64556825616091373e-07, -5.48110143938629335e-08, 1.38432071139504842e-07, 9.53261434233354521e-08, 7.73279538179849624e-08, 1.24131034340280166e-07, 1.1896606366690321e-07, -6.51316369726373523e-08, 6.96835016356089909e-08, 5.93105120572090527e-08, -9.62010986427230819e-08, -2.06150048143172171e-07, -2.83239245391087024e-07, -1.93279802829238179e-07, 4.82480153607411921e-08, 3.57706596787465969e-07, 8.85100348568812478e-07, 2.10470079764490947e-06, 4.59611692349426448e-06, 7.85961947258329019e-06, 9.45050487644039094e-06, 7.66635821491945535e-06, 3.94693506677867845e-06, 1.05382113702034985e-07, -4.5313136070035398e-06, -1.25488959383801557e-05, -2.67572286247741431e-05, -4.44044781033881009e-05, -5.31051082361955196e-05, -4.46361445938237011e-05, -2.77270883088931441e-05, -1.51413814819534309e-05, -1.04237597042811103e-05, -1.22017600006074645e-05, -1.93291834875708446e-05, -2.87216444121440873e-05, -1.00003314018249512, -2.79053874692181125e-05, -1.67526177392574027e-05, -5.26757412444567308e-06, 6.41280303170788102e-06, 2.18709537875838578e-05, 4.44981014879886061e-05, 7.01811077306047082e-05, 8.29683849588036537e-05, 7.19831587048247457e-05, 4.72796236863359809e-05, 2.51453639066312462e-05, 1.14756358016165905e-05, 5.18948718308820389e-06, 3.92229458157089539e-06, 4.52803487860364839e-06, 4.22031280322698876e-06, 2.75457978204940446e-06, 1.53650137235672446e-06, 9.962526519302628e-07, 6.39093684640101856e-07, 2.2696322332649288e-07, -1.20974888773162093e-07, -2.19417998437165807e-07, -8.41990939193237864e-08, -7.35998142431526503e-08, -2.09692530006577726e-07, -1.89026962971183821e-07, 2.14219127769865736e-07, -3.63873738251641043e-07, -2.26721667218043876e-07, 4.10736333833483513e-07, 7.15249939275963698e-07, 3.25152029745368054e-07, -2.96131332788718282e-07, -4.89674846448906465e-07, -1.32934047769595054e-07, 2.14637026374475681e-07, 1.89547961326752556e-07, 7.53770521555452433e-08, 5.58274706463635084e-08, 6.09770864912206889e-08, 6.98097224471894151e-08, 1.27128913618435035e-07, 1.76217952230217634e-07, 2.04351707111527503e-07, 1.92498049500500201e-07, 6.36611972026912554e-08, -2.8355268000268552e-07, -9.875278692561551e-07, -2.35597167375090066e-06, -4.85001419292530045e-06, -8.04218234407017007e-06, -9.64977789408294484e-06, -7.92085938883246854e-06, -4.08582354793907143e-06, 1.0340809808440099e-07, 5.22932396052055992e-06, 1.37866545628639869e-05, 2.85604564851382747e-05, 4.69027945655398071e-05, 5.63950889045372605e-05, 4.82540162920486182e-05, 3.05946414300706238e-05, 1.62762207764899358e-05, 9.46753880270989612e-06, 9.37607637752080336e-06, 1.51188469317276031e-05, 2.34878607443533838e-05, 1.00002717971801758, 2.19654393731616437e-05, 1.20085387607105076e-05, 2.54830683843465522e-06, -7.10886797605780885e-06, -2.13674829865340143e-05, -4.40038820670451969e-05, -6.99173106113448739e-05, -8.1588659668341279e-05, -6.90127344569191337e-05, -4.47680940851569176e-05, -2.50844623224111274e-05, -1.3277946891321335e-05, -6.5967838054348249e-06, -3.48768207913963124e-06, -3.24416214425582439e-06, -3.99111604565405287e-06, -3.58879356099350844e-06, -2.13343878385785501e-06, -9.62458557296486106e-07, -4.73565251013496891e-07, -2.90256735979710356e-07, -8.79423041055815702e-08, 1.75694708559603896e-07, 2.99671029324599658e-07, 1.64618242592950992e-07, -1.01972986499276885e-07, 1.52123263319481339e-07, -3.96104695710164378e-07, -3.45762600773014128e-07, 3.13458485834416933e-07, 7.3430635438853642e-07, 3.76690763914666604e-07, -2.91683505793116638e-07, -5.80002392780443188e-07, -2.87359000594733516e-07, 1.57315383830791689e-07, 2.53353107382281451e-07, -4.26878550285891833e-08, 7.50422088913182961e-08, 7.12887384679561364e-08, -6.35103134527525981e-08, -4.77722608138719806e-08, -1.36967614139393845e-07, -2.4719258817640366e-07, -2.54518226938671432e-07, -1.28056868220483011e-07, 2.76338994353864109e-07, 8.78398225268028909e-07, 2.3111435893952148e-06, 5.03316186950542033e-06, 8.40635129861766472e-06, 9.95563368633156642e-06, 8.05171748652355745e-06, 4.14564556194818579e-06, -8.9895472399348364e-08, -5.57283374291728251e-06, -1.5171513041423168e-05, -3.17759149766061455e-05, -5.18481647304724902e-05, -6.14119271631352603e-05, -5.16707077622413635e-05, -3.24597349390387535e-05, -1.74135439010569826e-05, -9.71105328062549233e-06, -7.15548230800777674e-06, -8.18257285573054105e-06, -1.13482037704670802e-05, -1.00001347064971924, -1.15706070573651232e-05, -6.17642626821179874e-06, 5.72203646242996911e-07, 8.86037196323741227e-06, 2.14746578421909362e-05, 4.18211166106630117e-05, 6.6445973061490804e-05, 7.90988997323438525e-05, 6.77961797919124365e-05, 4.30465988756623119e-05, 2.24438099394319579e-05, 1.13875585157074966e-05, 6.74041712045436725e-06, 4.90975162392714992e-06, 4.05749733545235358e-06, 3.62761988981219474e-06, 3.1219085485645337e-06, 2.19292451220098883e-06, 1.150354478340887e-06, 4.4916802721672866e-07, 1.71575010199376266e-07, 1.23925715911354928e-07, -1.27158486407097371e-07, -2.64628340573835885e-07, -2.18461920553636446e-07, -4.84773323705667281e-08, 5.85084585225104092e-08, -8.03418629402585793e-08, -4.10337491985046654e-07, -4.33018811918373103e-07, 1.40123418645998754e-07, 6.35738615528680384e-07, 3.78332231321110157e-07, -2.71928996653514332e-07, -6.03571209012443433e-07, -3.99103640802422888e-07, 4.01099029545548547e-08, 2.59273548408600618e-07, 1.1682551814828912e-07, -1.00096585242681613e-07, -1.15983510795558686e-07, 8.58153725857846439e-08, 6.21287412627680169e-08, -5.63481279414190794e-08, 6.22913063352825702e-08, 1.20541088222125836e-07, 2.16729645785562752e-07, 2.88372859813534888e-07, 2.17770661947724875e-07, -4.10605650813522516e-07, -1.08155757061467739e-06, -2.46887907451309729e-06, -5.15264446221408434e-06, -8.64630965224932879e-06, -1.03817910712677985e-05, -8.42032841319451109e-06, -4.13667112297844142e-06, 5.72717738123174058e-07, 6.52305743642500602e-06, 1.68241713254246861e-05, 3.49486326740588993e-05, 5.75322192162275314e-05, 6.90109736751765013e-05, 5.84979497944004834e-05, 3.62485807272605598e-05, 1.8103230104316026e-05, 8.40986012917710468e-06, 4.60482897324254736e-06, 3.90002651329268701e-06, 4.00737781092175283e-06, 1.00000333786010742, 1.89218656032608123e-06, -6.88606647258893645e-08, -3.14691010316892061e-06, -9.27250403037760407e-06, -2.09146346605848521e-05, -3.98547272197902203e-05, -6.17384648649021983e-05, -7.26657381164841354e-05, -6.32228038739413023e-05, -4.17964292864780873e-05, -2.25202184083173051e-05, -1.07294445115257986e-05, -5.37058258487377316e-06, -4.11955170420696959e-06, -4.42119426224962808e-06, -4.32808610639767721e-06, -3.40949941346480045e-06, -2.27443911171576474e-06, -1.32982813738635741e-06, -5.89762692015938228e-07, -7.00390359043012722e-08, 1.63004145292688918e-07, 1.42342329922939825e-07, 6.46441336016323476e-08, 9.29654859760375984e-08, 1.7445366040647059e-07, 1.44540152291483537e-07, -7.60628822149556072e-08, -3.68413736850925488e-07, -3.93148951616240083e-07, 4.71429530080058612e-07, 2.83810123846706119e-07, -2.87849246660698554e-07, -5.96403253894095542e-07, -4.41474071521952283e-07, 2.36477646353705495e-07, 2.17379707123654953e-07, -1.86356729159342649e-07, -9.66456568107787461e-08, 8.25181416530540446e-08, -5.65035520594392437e-08, -6.34562766776980425e-08, 6.14158750522619812e-08, 5.29083408196129312e-08, -5.97921072653662122e-08, -1.41000199960217287e-07, -2.30766715958452551e-07, -2.54649734188205912e-07, -1.87367220405576518e-07, 2.89901606720377458e-07, 1.03664194739394588e-06, 2.60599131252092775e-06, 5.44119757250882685e-06, 8.93135347723728046e-06, 1.05798781078192405e-05, 8.61615990288555622e-06, 4.35264473708230071e-06, -5.88690625136223389e-07, -7.2172124419012107e-06, -1.86597935680765659e-05, -3.81463687517680228e-05, -6.1714294133707881e-05, -7.33134511392563581e-05, -6.22831139480695128e-05, -3.930469392798841e-05, -2.00735630642157048e-05, -8.49448315420886502e-06, -1.81630798579135444e-06, 2.37354129239975009e-06, 4.98871440868242644e-06, -0.999994099140167236, 5.4072543207439594e-06, 4.89781723445048556e-06, 6.01712508796481416e-06, 1.05284989331266843e-05, 2.08686233236221597e-05, 3.89683809771668166e-05, 5.99886443524155766e-05, 6.95743292453698814e-05, 5.93502154515590519e-05, 3.89988890674430877e-05, 2.18012191908201203e-05, 1.13164751383010298e-05, 5.93235745327547193e-06, 4.10265101891127415e-06, 4.27383110945811495e-06, 4.44943589172908105e-06, 3.52656775248760823e-06, 2.16124340113310609e-06, 1.24645248433807865e-06, 7.83386099101335276e-07, 4.18631486809317721e-07, -2.86614096012272057e-07, -2.60357836623370531e-07, -2.02097950818824756e-07, -3.95366981820188812e-07, -2.77158562766999239e-07, 1.73512873402614787e-07, 5.09843630425166339e-07, 2.8681336061708862e-07, -2.48252348455935135e-07, -5.20771322953805793e-07, -4.00543370915329433e-07, -1.06085586537574272e-07, 1.72027554867781873e-07, 2.74092514018775546e-07, 1.10302558198327461e-07, -1.29407041526974353e-07, -1.61923111363648786e-07, 7.68519470284445561e-08, -7.53749134219106054e-08, -2.91507813443558916e-08, 9.60887334144899796e-08, 8.50889918524444511e-08, 1.58557668328285217e-07, 2.69895309656931204e-07, 3.2574970987298002e-07, 2.11386890214271261e-07, -4.64426328505851416e-08, -4.17530969798463047e-07, -1.11637689315102762e-06, -2.65066410065628588e-06, -5.60316993869491853e-06, -9.34574291022727266e-06, -1.11002291305339895e-05, -8.90952560439473018e-06, -4.27383338319486938e-06, 9.98464088297623675e-07, 8.13828046375419945e-06, 2.08705696422839537e-05, 4.30788750236388296e-05, 7.0207082899287343e-05, 8.34709862829186022e-05, 7.03729165252298117e-05, 4.35184483649209142e-05, 2.13363055081572384e-05, 8.01610531198093668e-06, -6.14876967119926121e-07, -8.55383950693067163e-06, -1.64475695783039555e-05, 0.99997943639755249, -1.81983141374075785e-05, -1.26530085253762081e-05, -9.18316254683304578e-06, -1.05398157757008448e-05, -1.84772852662717924e-05, -3.44394393323455006e-05, -5.38102685823105276e-05, -6.27415938652120531e-05, -5.30355755472555757e-05, -3.4072061680490151e-05, -1.86637826118385419e-05, -9.91446449916111305e-06, -5.67113465876900591e-06, -4.16021248383913189e-06, -4.30676573159871623e-06, -4.73062391392886639e-06, -4.11716200687806122e-06, -2.57759029409498908e-06, -1.16195121790951816e-06, -4.26797129193801084e-07, -2.44703016960556852e-07, -2.0766603370248049e-07, 3.86051596024117316e-07, 3.93291117006810964e-07, -3.18659573395052576e-07, -1.47100124081589456e-07, 3.51520526464810246e-07, 6.31725356470269617e-07, 3.39502122415069607e-07, -1.87341257174011844e-07, -3.91489436424308224e-07, -2.62519137095296173e-07, -7.3408862988344481e-08, 1.06162076463078847e-07, 2.44184292341742548e-07, 2.11315864362404682e-07, -1.30799563180516998e-07, -7.51643014496039541e-08, 6.37423624993971316e-08, -8.55198720728367334e-08, -9.56035535182309104e-08, 4.47137757930704538e-08, 4.23350776657116512e-08, -6.80259830687646172e-08, -1.70502190144361521e-07, -2.59446380823646905e-07, -2.84855957488616696e-07, -2.213275109852475e-07, 3.71374767382803839e-07, 1.20467177566752071e-06, 2.87140778709726874e-06, 5.87299018661724404e-06, 9.60254146775696427e-06, 1.13779888124554418e-05, 9.20893944567069411e-06, 4.41347401647362858e-06, -1.31040610540367197e-06, -9.19591184356249869e-06, -2.29801607929402962e-05, -4.65884950244799256e-05, -7.52944833948276937e-05, -8.96040291991084814e-05, -7.62012059567496181e-05, -4.76963650726247579e-05, -2.32266065722797066e-05, -7.55782048145192675e-06, 3.32408808390027843e-06, 1.34037982206791639e-05, 2.29080760618671775e-05, -0.999972701072692871, 2.3844733732403256e-05, 1.7076787116820924e-05, 1.28123010654235259e-05, 1.30007820189348422e-05, 1.84287146112183109e-05, 3.08788112306501716e-05, 4.79543778055813164e-05, 5.76968086534179747e-05, 5.03749215567950159e-05, 3.26531153405085206e-05, 1.73693533724872395e-05, 8.92428215593099594e-06, 5.45075499758240767e-06, 4.56661700809490867e-06, 4.62067282569478266e-06, 4.56591624242719263e-06, 3.93699065170949325e-06, 2.87257398667861708e-06, 1.72213674431986874e-06, 7.19267120530275861e-07, -1.5290773092146992e-07, 7.96850656570313731e-08, -2.91364045779118896e-07, -5.82911809487995924e-07, -2.64289212736912305e-07, 3.94361620692507131e-07, 6.97470511568099027e-07, 3.37646213210973656e-07, -2.24205678023281507e-07, -3.36789696575579001e-07, -8.77150370115487021e-08, 5.7214361248725254e-08, 8.72102106086458662e-08, 1.61132120979345927e-07, 1.98135268192345393e-07, 9.44407858582962945e-08, -1.21662679930523154e-07, -4.80025938998096535e-08, -7.559472692264535e-08, 6.72175346494441328e-08, 5.55119399336945207e-08, 1.46775093412543356e-07, 3.00548833820357686e-07, 3.52515002077780082e-07, 2.02829795625802944e-07, -5.81331214277724939e-08, -4.23825866846527788e-07, -1.18487344025197672e-06, -2.88095338873972651e-06, -6.06981939199613407e-06, -1.00353390735108405e-05, -1.18581774586346e-05, -9.48285924096126109e-06, -4.41419206254067831e-06, 1.59822093337425031e-06, 1.00690558610949665e-05, 2.52346726483665407e-05, 5.14024468429852277e-05, 8.3028571680188179e-05, 9.83482750598341227e-05, 8.30741628305986524e-05, 5.16385734954383224e-05, 2.49623808485921472e-05, 7.59338172429124825e-06, -5.64877154829446226e-06, -1.99090591195272282e-05, -3.49563742929603904e-05, 0.999957621097564697, -3.59245277650188655e-05, -2.24694922508206218e-05, -1.32943132484797388e-05, -1.26019322124193422e-05, -1.91961917153093964e-05, -3.08242415485437959e-05, -4.33219502156134695e-05, -4.90080201416276395e-05, -4.2807092540897429e-05, -2.91670712613267824e-05, -1.63494387379614636e-05, -8.20636796561302617e-06, -4.59392049378948286e-06, -4.19829575548646972e-06, -5.13310124006238766e-06, -5.34359060111455619e-06, -4.1226321627618745e-06, -2.51226879299792927e-06, -1.4906545402482152e-06, -9.74335307546425611e-07, -5.15212718710245099e-07, 7.87372300692368299e-08, 4.68565644951013383e-07, 2.04015719873495982e-07, -2.73599084721354302e-07, -1.01325454693323991e-07, 5.65820585052279057e-07, 8.38448954709747341e-07, 3.6037781114828249e-07, -3.41430336447956506e-07, -4.83041219467850169e-07, -7.24136342000747391e-08, 1.88919074162186007e-07, 1.23959551956431824e-07, 7.91417349432776973e-08, 1.28735948123903654e-07, 1.28899031892615312e-07, 3.64595287294378068e-08, -8.40765537191145995e-08, -6.62660184502783522e-08, 6.55684573303005891e-08, 5.74257832397506718e-08, -1.21804362152033718e-07, -1.80155794282654824e-07, -2.58156632071404601e-07, -3.36828293256985489e-07, -2.9263267720125441e-07, 4.6459351210614841e-07, 1.36804044359450927e-06, 3.12044585371040739e-06, 6.2767880990577396e-06, 1.02188741948339157e-05, 1.21189350466011092e-05, 9.80962795438244939e-06, 4.56249745184322819e-06, -1.93617006516433321e-06, -1.11272447611554526e-05, -2.72332727035973221e-05, -5.47252420801669359e-05, -8.80712905200198293e-05, -0.000104632868897169828, -8.89282382559031248e-05, -5.55351689399685711e-05, -2.65265534835634753e-05, -7.1649642450211104e-06, 7.48220418245182373e-06, 2.21220889216056094e-05, 3.67126704077236354e-05, -0.999955177307128906, 4.11601649830117822e-05, 2.9272769097588025e-05, 1.72349391505122185e-05, 1.08933782030362636e-05, 1.36212120196432807e-05, 2.59200442087603733e-05, 4.10951506637502462e-05, 4.66833807877264917e-05, 3.83153055736329406e-05, 2.46950803557410836e-05, 1.42533190228277817e-05, 8.09174707683268934e-06, 4.88876594317844138e-06, 3.97288158637820743e-06, 4.66906840301817283e-06, 5.43409487363533117e-06, 4.80580456496682018e-06, 3.03935394185828045e-06, 1.39630844842031365e-06, 5.20931678238412132e-07, 3.18661790288388147e-07, 3.04077076407338609e-07, -1.01764797477699176e-07, -6.86704311192443129e-07, -5.25378823112987448e-07, 3.46952020890967106e-07, 8.09618654784571845e-07, 3.61574194585045916e-07, -4.07270249525026884e-07, -6.38129847629897995e-07, -1.60724198394746054e-07, 2.98513100460695568e-07, 2.56887204841405037e-07, 9.48139557976901415e-08, 9.82569545726619253e-08, -7.89891672070552886e-08, 5.76224969961458555e-08, 6.16075013226691226e-08, 2.10282152579566173e-07, 3.32111028455983615e-07, 3.08478746546825278e-07, 1.62717057605732407e-07, -3.88393317507507163e-07, -1.24304506243788637e-06, -3.11824214804801159e-06, -6.51779055260703899e-06, -1.06014695120393299e-05, -1.23583085951395333e-05, -9.80013919615885243e-06, -4.50884090241743252e-06, 1.89593185950798215e-06, 1.12171082946588285e-05, 2.79415999102639034e-05, 5.64205220143776387e-05, 9.0481567895039916e-05, 0.000106866595160681754, 9.04002008610405028e-05, 5.65025875403080136e-05, 2.75163201877148822e-05, 8.09489029052201658e-06, -7.87656244938261807e-06, -2.58811705862171948e-05, -4.32396445830818266e-05, 0.999951183795928955, -3.9502632716903463e-05, -2.66567767539527267e-05, -1.93884970940416679e-05, -1.68150163517566398e-05, -1.74709639395587146e-05, -2.39928067458095029e-05, -3.64924489986151457e-05, -4.49930957984179258e-05, -3.97006151615642011e-05, -2.55840495810844004e-05, -1.36152393679367378e-05, -7.34052218831493519e-06, -4.97201153848436661e-06, -4.59019975096452981e-06, -4.94476080348249525e-06, -5.06362039232044481e-06, -4.40874919149791822e-06, -3.19127821057918482e-06, -1.91969024854188319e-06, -8.51185461669956567e-07, -1.32282934828253929e-07, -2.95241818548674928e-07, -1.77077808416470361e-07, 6.15474505138990935e-07, 1.07352354916656623e-06, 5.53184577256615739e-07, -3.40203484938683687e-07, -7.26907899206707953e-07, -3.56825012204353698e-07, 2.05251126317307353e-07, 3.07337529648066266e-07, -9.41420381650459603e-08, 9.09463082621186913e-08, 1.03236892812219594e-07, -5.13380342681557522e-08, -4.84258038113694056e-08, -3.35759935410351318e-08, 6.1136468332279037e-08, -6.79218601362663321e-08, -7.16174781700829044e-08, -1.37861732696364925e-07, -3.06319833498491789e-07, -4.28043165356939426e-07, -3.0150587804200768e-07, 5.91770223934418027e-08, 5.74058617530681659e-07, 1.43028546517598443e-06, 3.15762849822931457e-06, 6.41053520666901022e-06, 1.05905792224803008e-05, 1.26587137856404297e-05, 1.01984251159592532e-05, 4.57871919934405014e-06, -2.23595407078391872e-06, -1.16532983156503178e-05, -2.8095390007365495e-05, -5.61725537409074605e-05, -9.02193642104975879e-05, -0.000107198779005557299, -9.12235846044495702e-05, -5.68968425795901567e-05, -2.69887386821210384e-05, -7.65601180319208652e-06, 5.80455753151909448e-06, 1.99929090740624815e-05, 3.75374802388250828e-05, -0.999950945377349854, 4.29709143645595759e-05, 2.53833022725302726e-05, 1.24902398965787143e-05, 1.11156850834959187e-05, 1.82515323103871197e-05, 2.91731375909876078e-05, 3.96744726458564401e-05, 4.4145854189991951e-05, 3.85408966394606978e-05, 2.63416113739367574e-05, 1.48181534314062446e-05, 7.60388911658083089e-06, 4.55460804005269893e-06, 4.37966491517727263e-06, 5.33533830093801953e-06, 5.55366341359331273e-06, 4.37617518400656991e-06, 2.73020873464702163e-06, 1.56122473526920658e-06, 8.73223257258359808e-07, 2.44649584146827692e-07, -4.48822333964926656e-07, -6.76739659866143484e-07, -6.67542110477370443e-08, 5.52523715668939985e-07, 2.88137670167998294e-07, -4.60839032712101471e-07, -8.14655436442990322e-07, -5.02075295116810594e-07, 8.24714376790325332e-08, 3.52587989027597359e-07, 1.45519635452728835e-07, -1.43278924724654644e-07, -1.57091264441078238e-07, 1.15197998695748538e-07, 8.31105992915581737e-08, -8.32469950751146825e-08, -4.4729620896077904e-08, 5.01782579931386863e-08, 6.73663507200217282e-08, -4.15440233325625741e-08, -5.176798012485051e-08, 5.67146685170882847e-08, 4.73445744830769399e-08, 1.32955861431582889e-07, 2.20766708025621483e-07, 2.71276462626701687e-07, 2.86006724081744323e-07, 2.5169848072437162e-07, 8.21386976213034359e-08, -3.79377354420284973e-07, -1.38139705541107105e-06, -3.32580839312868193e-06, -6.61659805700764991e-06, -1.04871360235847533e-05, -1.22253632071078755e-05, -9.93379944702610373e-06, -4.87854640596196987e-06, 1.47259925142861903e-06, 1.05882181742344983e-05, 2.63602905761217698e-05, 5.25424402439966798e-05, 8.34114543977193534e-05, 9.8198703199159354e-05, 8.36151739349588752e-05, 5.33070851815864444e-05, 2.66207662207307294e-05, 7.6399401223170571e-06, -7.30124293113476597e-06, -1.96540095203090459e-05, -2.8405625926097855e-05, 0.99996715784072876, -3.24437642120756209e-05, -2.66404731519287452e-05, -1.78494065039558336e-05, -1.22447872854536399e-05, -1.59036590048344806e-05, -3.03672150039346889e-05, -4.82327122881542891e-05, -5.55794067622628063e-05, -4.67242243757937104e-05, -3.06549700326286256e-05, -1.74957349372562021e-05, -9.49571222008671612e-06, -5.38035465069697239e-06, -4.08279584007686935e-06, -4.54166593044647016e-06, -5.06888545714900829e-06, -4.36634900324861519e-06, -2.80224230664316565e-06, -1.48547928802145179e-06, -8.76938941019034246e-07, -7.32211049125908175e-07, -4.72086895797474426e-07, 2.33721181075452478e-07, 8.03039768015878508e-07, 5.10114375629200367e-07, -2.74702614433408598e-07, -6.85702218561345944e-07, -4.85855025544879027e-07, 3.33689911258261418e-07, 2.66414701854955638e-07, -7.52679767401787103e-08, -2.56314677926638979e-07, -1.23272613450353674e-07, 6.74932039146369789e-08, 1.11228025900800276e-07, -8.45029290985621628e-08, -9.98957716547010932e-08, 7.0854298428457696e-08, 7.07125380472461984e-08, -1.8584323413506354e-08, 6.40581774291604233e-08, -5.43507461259196134e-08, -2.03697524625567894e-07, -3.83658658620333881e-07, -3.96855057260836475e-07, -1.78593097643897636e-07, 1.23455876632760919e-07, 4.90435979827452684e-07, 1.24627013065037318e-06, 2.98528357234317809e-06, 6.2947551668912638e-06, 1.03791862784419209e-05, 1.21849079732783139e-05, 9.67617506830720231e-06, 4.56489487987710163e-06, -1.11910082978283754e-06, -8.52799348649568856e-06, -2.12745999306207523e-05, -4.29945357609540224e-05, -6.91810273565351963e-05, -8.17407853901386261e-05, -6.85169216012582183e-05, -4.14541973441373557e-05, -1.81229734153021127e-05, -8.67261292114562821e-07, 1.88644280569860712e-05, 4.86836070194840431e-05, 8.09287303127348423e-05, -0.999907910823822021, 7.41166804800741374e-05, 4.79638183605857193e-05, 3.20280305459164083e-05, 2.66594233835348859e-05, 2.92852855636738241e-05, 4.18000345234759152e-05, 6.11371578997932374e-05, 7.19053132343105972e-05, 6.2282008002512157e-05, 4.07773150072898716e-05, 2.24005525524262339e-05, 1.18089783427421935e-05, 6.77715979691129178e-06, 4.81561846754630096e-06, 4.35084302807808854e-06, 4.22574976255418733e-06, 3.59334762833896093e-06, 2.3786944893799955e-06, 1.07993139408790739e-06, 1.87268128115647414e-07, 3.08608321120118489e-07, 5.31787406998773804e-07, 9.74075504700522288e-08, -5.92148637679201784e-07, -8.22669960598432226e-07, -5.44218323739187326e-07, -1.10300469202684326e-07, 2.38388665252387e-07, 3.35988460165026481e-07, 1.09518175861467171e-07, -1.82070195364758547e-07, -1.97782924260536674e-07, 1.14828509367725928e-07, 7.29344975525236805e-08, -1.12631880710978294e-07, -5.94648881246939709e-08, 1.13424285075325315e-07, -7.47844619564119739e-10, 6.72296138759520545e-08, 9.38765865043933445e-08, 1.39519798381115834e-07, 2.54210902994600474e-07, 3.83569414452722413e-07, 3.48636632452326012e-07, -4.96500661029131152e-07, -1.39695418965857243e-06, -3.01807449432089925e-06, -5.85448287893086672e-06, -9.42311999097000808e-06, -1.1292017916275654e-05, -9.50141020439332351e-06, -5.16418867846368812e-06, -1.46293501757099875e-07, 5.88431839787517674e-06, 1.50342912093037739e-05, 2.94452547677792609e-05, 4.65189805254340172e-05, 5.54088837816379964e-05, 4.78419169667176902e-05, 2.94913043035194278e-05, 1.12752859422471374e-05, -2.00218323698209133e-06, -1.14058011604356579e-05, -2.25898620556108654e-05, -4.00414464820642024e-05, 0.99994581937789917, -5.02165567013435066e-05, -3.25529472320340574e-05, -1.93491887330310419e-05, -1.99264686671085656e-05, -3.34042888425756246e-05, -5.72599783481564373e-05, -8.42706358525902033e-05, -9.7108139016199857e-05, -8.41302899061702192e-05, -5.60920234420336783e-05, -3.10273280774708837e-05, -1.5521682144026272e-05, -7.79289348429301754e-06, -4.77222056360915303e-06, -3.81595464205020107e-06, -3.20331969305698294e-06, -2.49261620410834439e-06, -1.93228925127186812e-06, -1.41834880196256563e-06, -6.080867365199083e-07, 3.67798179468081798e-07, 8.70078110892791301e-07, 5.03940100315958261e-07, -1.85724033485712425e-07, -4.04953624411064084e-07, -1.85079485959249723e-07, 5.00700316763413866e-08, 2.14701017853258236e-07, 3.14698382908318308e-07, 2.21902126895656693e-07, -4.29966142689863773e-08, -2.00118037696483952e-07, -1.01668540253285755e-07, 6.00737877221035887e-08, 8.60199307339826191e-08, -1.1743912153860947e-07, -1.35907541221058636e-07, 4.79894310956296977e-08, 5.8743548692063996e-08, -1.13987915995039657e-07, -2.27868113711338083e-07, -2.96713864145203843e-07, -2.64437460373301292e-07, -1.6425299520506087e-07, 3.09650289409546531e-07, 1.10723681245872285e-06, 2.78006541520881001e-06, 5.67553433938883245e-06, 9.04405533219687641e-06, 1.04802393252612092e-05, 8.59217925608390942e-06, 5.01394015373080038e-06, 1.65889719028200489e-06, -1.74942090325203026e-06, -6.79990898788673803e-06, -1.46596485137706622e-05, -2.31894864555215463e-05, -2.65921789832646027e-05, -2.28944263653829694e-05, -1.70613311638589948e-05, -1.28944639072869904e-05, -1.00673414635821246e-05, -1.02124377008294687e-05, -1.88925896509317681e-05, -3.55037263943813741e-05, -1.0000450611114502, -3.5891229344997555e-05, -1.7123733414337039e-05, -1.44197304052795516e-06, 1.28814954223344103e-05, 3.47344903275370598e-05, 6.92688554408960044e-05, 0.000107893742097076029, 0.000125684877275489271, 0.000108144340629223734, 7.1803282480686903e-05, 4.02352488890755922e-05, 2.05213655135594308e-05, 9.84740745479939505e-06, 4.91649689138284884e-06, 3.17562762575107627e-06, 2.3813267944206018e-06, 1.27114583392540226e-06, 3.0917047411094245e-07, 3.02920511785487179e-07, 9.06691184354713187e-07, 1.1005187161572394e-06, 4.15070559256491833e-07, -4.89457249841507291e-07, -6.40597249912389088e-07, -1.80407525363079912e-07, 1.1303345814894783e-07, 1.51115287394532061e-07, 2.00047225007438101e-07, 2.17550265801946807e-07, 9.12094080263159412e-08, -8.18561929349925776e-08, -1.12478474534327688e-07, 8.60878159869571391e-08, -4.84837734404663934e-08, -9.11326480945717776e-08, -3.28788232195620367e-08, 6.58814158782661252e-08, -2.61054573513774812e-08, 1.67389387684124813e-07, 3.31856909951966372e-07, 3.94049010310482117e-07, 2.3492394518598303e-07, -7.32062730435245612e-08, -4.71490835707299993e-07, -1.15126056243752828e-06, -2.54190831583400723e-06, -5.11847702000522986e-06, -8.40607390273362398e-06, -1.013691598927835e-05, -8.59808824316132814e-06, -5.15062220074469224e-06, -2.16109060602320824e-06, -3.63289984761649976e-07, 7.93579772562225116e-07, 2.34946719501749612e-06, 4.78417405247455463e-06, 6.07598622082150541e-06, 3.95266397390514612e-06, 7.14793259248835966e-07, 7.14365683052164968e-07, 4.0263466871692799e-06, 6.35553533356869593e-06, 4.60852561445790343e-06, 1.82461394615529571e-06, 1.00000298023223877, 5.26323674421291798e-06, 2.11545739148277789e-06, -7.40805080567952245e-06, -2.20199653995223343e-05, -4.52822423540055752e-05, -8.25530150905251503e-05, -0.000126204962725751102, -0.000147632468724623322, -0.000127635852550156415, -8.44131136545911431e-05, -4.67176942038349807e-05, -2.36437190324068069e-05, -1.13034448077087291e-05, -5.03347109770402312e-06, -2.16955481846525799e-06, -1.44973012083937647e-06, -1.39728490466950461e-06, -6.41583540073042968e-07, 5.7978309087047819e-07, 1.08579365587502252e-06, 4.3891671452911396e-07, -5.60425576168199768e-07, -7.33525268969970057e-07, 3.98694055547821335e-07, 2.94916418397406233e-07, 1.49367266999433923e-07, 1.50884133631734585e-07, 1.36358934810232313e-07, -5.61850868052715668e-08, -4.67753551447458449e-08, 5.58226389557603397e-08, -7.62358780548311188e-08, -8.32969462294386176e-08, 6.60794512441498227e-08, 5.34916502203941491e-08, -4.99363075334713358e-08, 4.19853023458927055e-08, -5.75169991634538746e-08, -8.94655798333587882e-08, -1.47279962448010338e-07, -2.39134095636472921e-07, -3.12415778580543702e-07, -2.68881620968386414e-07, -5.43831788490933832e-08, 3.68546636764222058e-07, 1.16733838240179466e-06, 2.69676615971548017e-06, 5.29577209817944095e-06, 8.36567141959676519e-06, 9.85198857961222529e-06, 8.45998238219181076e-06, 5.49562264495762065e-06, 2.77593221653660294e-06, 7.0328155743482057e-07, -9.53494065925042378e-07, -2.14333817893930245e-06, -3.15165652864379808e-06, -4.69315682494197972e-06, -5.62845434615155682e-06, -3.24654797623225022e-06, 2.43300587499106769e-06, 8.17922136775450781e-06, 1.23544550660881214e-05, 1.81267841981025413e-05, 2.87313559965696186e-05, -0.999961972236633301, 3.61682396032847464e-05, 2.63965976046165451e-05, 2.11016285902587697e-05, 2.76942828350001946e-05, 4.86622266180347651e-05, 8.51804725243709981e-05, 0.000127427309053018689, 0.000147662853123620152, 0.00012785392755176872, 8.52595476317219436e-05, 4.74540138384327292e-05, 2.38801512750796974e-05, 1.14588447104324587e-05, 5.49875494471052662e-06, 2.33427954299259e-06, 4.75642394803799107e-07, 2.05291115662475931e-07, 1.08626875316986116e-06, 1.46289539770805277e-06, 6.26934138381329831e-07, -6.11099494562949985e-07, -1.02747014807391679e-06, -3.47630333408233128e-07, 3.77514567162506864e-07, 3.68347656376499799e-07, 6.96712234571350564e-08, 5.78370809023454058e-08, 7.4508641034753964e-08, -6.80925822393874114e-08, -5.7414222709439855e-08, 5.75259697654928459e-08, -4.55747013461405004e-08, -4.42302123815352388e-08, 1.18605413490513456e-07, 2.16051248003168439e-07, 3.05791417076761718e-07, 3.15524658844879013e-07, 2.01074357164543471e-07, -4.28472219482500805e-07, -1.19128367259691004e-06, -2.72620468422246631e-06, -5.47471927347942255e-06, -8.82577569427667186e-06, -1.03920010587899014e-05, -8.62203705764841288e-06, -5.13573831995017827e-06, -2.16612534131854773e-06, 6.62557937403107644e-08, 2.68740859610261396e-06, 6.42452823740313761e-06, 9.65170147537719458e-06, 9.73392707237508148e-06, 7.58270880396594293e-06, 5.92397555010393262e-06, 3.57105955117731355e-06, -2.76544983535131905e-06, -1.36810112962848507e-05, -2.68791281996527687e-05, -3.81552199542056769e-05, 0.999957501888275146, -3.80052697437349707e-05, -2.92619733954779804e-05, -2.39427663473179564e-05, -2.82891960523556918e-05, -4.68739490315783769e-05, -8.19523629616014659e-05, -0.000123252757475711405, -0.000142733624670654535, -0.000123104473459534347, -8.19392007542774081e-05, -4.57968526461627334e-05, -2.31256726692663506e-05, -1.08825952338520437e-05, -5.29459703102475032e-06, -3.2741206723585492e-06, -1.94184826796117704e-06, -1.40635009415746026e-07, 9.57403358370356727e-07, 4.68739671077855746e-07, -6.84329847899789456e-07, -1.1679492217808729e-06, -5.59169677671889076e-07, 3.50189310438508983e-07, 5.68959933389123762e-07, 1.84967618110931653e-07, -8.92028921839482791e-08, -4.0235889287032478e-08, 8.63146638607759087e-08, 1.04380340815168893e-07, -7.18950090572434419e-08, 1.71973439933026384e-08, -5.09711028939818789e-08, 3.28066001031857013e-08, -6.84825138819178392e-08, -1.93834594597319665e-07, -3.33983734890352935e-07, -3.69659204579875222e-07, -2.44647509362039273e-07, 4.24219535943848314e-07, 1.24298583159543341e-06, 2.84464795186067931e-06, 5.61026217837934382e-06, 8.95896300789900124e-06, 1.06363886516191997e-05, 9.02547890291316435e-06, 5.43221995030762628e-06, 1.92937932297354564e-06, -1.08795973119413247e-06, -4.57131545772426762e-06, -1.01201039797160774e-05, -1.73336557054426521e-05, -2.0741048501804471e-05, -1.59041337610688061e-05, -7.1833510446595028e-06, -1.03150591712619644e-06, 3.04163563669135328e-06, 1.01433843155973591e-05, 2.38251832342939451e-05, 3.99846212530974299e-05, -0.999952793121337891, 4.06588405894581228e-05, 2.93224238703260198e-05, 2.37292606470873579e-05, 2.8283631763770245e-05, 4.56201014458201826e-05, 7.78569228714331985e-05, 0.000116195027658250183, 0.000134730958961881697, 0.000116624942165799439, 7.78647881816141307e-05, 4.36835616710595787e-05, 2.2279471522779204e-05, 1.04567179732839577e-05, 4.3321783778083045e-06, 1.91930735127243679e-06, 1.94634844774554949e-06, 2.21895061258692294e-06, 1.2482204283514875e-06, -2.73114977744626231e-07, -1.03394268080592155e-06, -6.97521613801654894e-07, 1.04947552870271466e-07, 4.81555616715922952e-07, 1.75070795194187667e-07, -2.51230545700309449e-07, -2.84412607243211824e-07, -5.5761997685976894e-08, 9.73591056663281051e-08, 6.88625547695664864e-08, -1.14370230619442736e-07, 3.54405358393705683e-08, 4.69501308941744355e-08, 6.67601867121447867e-08, -5.5863040415715659e-08, -4.65478571243238548e-08, 3.90725816146186844e-08, 6.76196520998928463e-08, 9.21598442005233665e-08, 1.67031913633763907e-07, 3.04614189872154384e-07, 3.85596450769298826e-07, 2.69150234544213163e-07, -5.03391618167370325e-07, -1.33552953229809646e-06, -2.9623458885907894e-06, -5.81572021474130452e-06, -9.26329903450096026e-06, -1.09131842691567726e-05, -9.1222864284645766e-06, -5.3166700126894284e-06, -1.53879102526843781e-06, 2.08727828976407181e-06, 6.47871547698741779e-06, 1.24530342873185873e-05, 1.95861503016203642e-05, 2.43777321884408593e-05, 2.24168361455667764e-05, 1.40426673169713467e-05, 3.90912055081571452e-06, -4.99740826853667386e-06, -1.36762046167859808e-05, -2.53508824243908748e-05, -3.97118928958661854e-05, 0.999951958656311035, -4.3091626139357686e-05, -3.11127514578402042e-05, -2.37550575548084453e-05, -2.71857879852177575e-05, -4.40472285845316947e-05, -7.56025183363817632e-05, -0.000112631008960306644, -0.000130110958707518876, -0.000112300134787801653, -7.48543025110848248e-05, -4.20469768869224936e-05, -2.18570239667315036e-05, -1.12401958176633343e-05, -5.8097607507079374e-06, -2.58235377259552479e-06, -8.1381040217820555e-07, -6.77559341966116335e-07, -1.3308194866112899e-06, -1.52644713580230018e-06, -9.53510095769161126e-07, -8.11952816093253205e-08, 5.10770064465759788e-07, 4.83006601825763937e-07, -2.44421784145743004e-07, -1.158184375071869e-07, 9.87681829656139598e-08, 1.38578357677943131e-07, -9.66335562679887516e-08, -9.53574428308456845e-08, 1.05989769849657023e-07, 7.2965207209563232e-08, -5.12955402598436194e-08, 5.52620136318182631e-08, 6.04973067197533965e-08, -6.03851688651957375e-08, -1.39095405415901041e-07, -2.3793455738996272e-07, -3.15852730636834167e-07, -3.37815549755760003e-07, -2.59781160139027634e-07, 4.16346551901369821e-07, 1.32653815398953157e-06, 3.06353513224166818e-06, 5.96981362832593732e-06, 9.36587730393512174e-06, 1.09757156678824686e-05, 9.28085773921338841e-06, 5.58930514671374112e-06, 1.72604768522433005e-06, -2.44732018472859636e-06, -8.27459371066652238e-06, -1.64468019647756591e-05, -2.45196570176631212e-05, -2.72961588052567095e-05, -2.29318357014562935e-05, -1.50687965287943371e-05, -6.91044306222465821e-06, 1.75728928297758102e-06, 1.22898345580324531e-05, 2.5521059797029011e-05, 3.90814020647667348e-05, -0.999954402446746826, 4.05665050493553281e-05, 3.01133022730937228e-05, 2.39183082157978788e-05, 2.73196110356366262e-05, 4.31986736657563597e-05, 7.32761473045684397e-05, 0.000109112159407231957, 0.000126601764350198209, 0.000109904947748873383, 7.34662316972389817e-05, 4.08044179494027048e-05, 2.02984283532714471e-05, 9.81422635959461331e-06, 5.59544196221395396e-06, 3.95339111491921358e-06, 2.34290314438112546e-06, 5.71536133975314442e-07, -3.58784944864964928e-07, -3.15024777819417068e-07, 9.63369757300824858e-08, 4.38911911260220222e-07, 4.68651904839134659e-07, 9.97095526145130862e-08, -3.16623072649235837e-07, -3.41932434366754023e-07, -8.19334005086602701e-08, 8.61684981146026985e-08, 5.01694614740699762e-08, -7.72014985273017373e-08, -1.43444282230120734e-07, -6.3996282051448361e-08, 7.75803954411458108e-08, 1.18364681611637934e-07, 4.65723104525750387e-08, 6.87912518060329603e-08, 2.17693767012860917e-07, 3.97153598896693438e-07, 4.37548692389100324e-07, 2.46634897393960273e-07, -8.49401615710121405e-08, -5.26034114045614842e-07, -1.32822708565072389e-06, -3.00034139399940614e-06, -6.04028628004016355e-06, -9.69603661360451952e-06, -1.1292750969005283e-05, -9.18150635698111728e-06, -5.14736166223883629e-06, -1.47233890857023653e-06, 2.07702100851747673e-06, 7.50617709854850546e-06, 1.66395930136786774e-05, 2.72850011242553592e-05, 3.17144622385967523e-05, 2.57549691013991833e-05, 1.50163841681205668e-05, 5.88635884923860431e-06, -1.68628980645735282e-06, -1.09062702904338948e-05, -2.40094814216718078e-05, -3.84198647225275636e-05, 0.999954581260681152, -4.00018871005158871e-05, -2.89135568891651928e-05, -2.25831190618919209e-05, -2.63710990111576393e-05, -4.27281083830166608e-05, -7.26675207260996103e-05, -0.000107275816844776273, -0.000123370409710332751, -0.000106870524177793413, -7.23263801774010062e-05, -4.14732785429805517e-05, -2.11876613320782781e-05, -9.33596402319381014e-06, -3.60982221536687575e-06, -2.1684240891772788e-06, -2.44161742557480466e-06, -2.16105536310351454e-06, -1.17381910058611538e-06, -3.5135548159814789e-07, 1.09593528918594529e-07, 3.44324604384382837e-07, 2.94221564445251715e-07, -1.60094757006845612e-07, 1.06750697170809872e-07, 1.15275391010527528e-07, -1.32506698946599499e-07, -1.43001642527451622e-07, 6.71997000267765543e-08, 5.06398230015747686e-08, 4.93833915982122562e-08, -9.03072958635675604e-08, -1.33628773824057134e-07, -1.96123636442280258e-07, -2.95155928142776247e-07, -3.84245197437849129e-07, -3.37948932838116889e-07, -5.08572632895720744e-08, 5.28236000718607102e-07, 1.51875167375692399e-06, 3.21367792821547482e-06, 6.02525733484071679e-06, 9.53667495195986703e-06, 1.14848471639561467e-05, 9.81474477157462388e-06, 5.43886699233553372e-06, 6.70078293296683114e-07, -3.73738589587446768e-06, -8.91800391400465742e-06, -1.69180912052979693e-05, -2.72427059826441109e-05, -3.3279513445449993e-05, -2.89987001451663673e-05, -1.78441696334630251e-05, -7.06332002664566971e-06, 1.37433744384907186e-06, 9.80183540377765894e-06, 2.06715903914300725e-05, 3.26130102621391416e-05, -0.999961137771606445, 3.51568960468284786e-05, 2.65813941950909793e-05, 2.16565331356832758e-05, 2.54416263487655669e-05, 4.11472065025009215e-05, 7.07858271198347211e-05, 0.000105898470792453736, 0.00012237852206453681, 0.000105106846604030579, 6.96249480824917555e-05, 3.95169336115941405e-05, 2.16261796595063061e-05, 1.18280431706807576e-05, 5.84145664106472395e-06, 2.19642242882400751e-06, 9.65176127465383615e-07, 1.1390957297408022e-06, 1.13578278160275659e-06, 7.53119877572316909e-07, 4.90472871206293348e-07, 3.4020584394056641e-07, 1.09398087033696356e-07, -1.47799909200330148e-07, -2.26027211169821385e-07, -1.03162243192400638e-07, -9.07745771883128327e-08, -1.34075321511772927e-07, -7.30052960307148169e-08, 8.14650249481019273e-08, 6.3264224081649445e-08, 1.03745250612519158e-07, 2.57237132927912171e-07, 3.89184918958562776e-07, 3.64001977004591026e-07, 1.89197066902124789e-07, -4.17803505570191192e-07, -1.32893421778135234e-06, -3.23216931974457111e-06, -6.34707430435810238e-06, -9.71175359154585749e-06, -1.10927339846966788e-05, -9.46039745031157508e-06, -6.05199511483078822e-06, -1.87461046152748168e-06, 3.51480821336735971e-06, 1.08506628748727962e-05, 2.03783438337268308e-05, 3.01742547890171409e-05, 3.47497552866116166e-05, 3.01843483612174168e-05, 1.97454501176252961e-05, 9.25197764445329085e-06, 5.59948432510282146e-07, -7.91065031080506742e-06, -1.81552859430667013e-05, -2.88609589915722609e-05, 0.999966084957122803, -2.99411876767408103e-05, -2.24593550228746608e-05, -1.94005933735752478e-05, -2.47947518801083788e-05, -4.08239939133636653e-05, -6.89818989485502243e-05, -0.000102171979960985482, -0.000119045798783190548, -0.000104324833955615759, -6.99194497428834438e-05, -3.80572782887611538e-05, -1.82878611667547375e-05, -9.11849838303169236e-06, -5.94375978835159913e-06, -4.23818664785358123e-06, -2.17247770706308074e-06, -6.86768942159687867e-07, -3.04081140711787157e-07, -2.40466647483117413e-07, -5.70402036714767746e-08, 8.51451389394242142e-08, 8.16621579247112095e-08, 7.56133573531769798e-08, 9.60523678372737777e-08, -6.70012383352514007e-08, -8.62438156445932691e-08, 6.10542016943327326e-08, 5.20231573375440348e-08, -7.58450582338809909e-08, -1.12839458665803249e-07, -2.00089118607138516e-07, -3.7118002182978671e-07, -4.91565685933892382e-07, -3.4518302527430933e-07, 7.38500318675505696e-08, 6.46383284674811875e-07, 1.51194274167210096e-06, 3.19927221426041797e-06, 6.36336790194036439e-06, 1.02861458799452521e-05, 1.18624529932276346e-05, 9.23973584576742724e-06, 4.79596883451449685e-06, 1.07399125681695295e-06, -2.93937546302913688e-06, -1.00448933153529651e-05, -2.17296146729495376e-05, -3.44755389960482717e-05, -3.96109389839693904e-05, -3.30773618770763278e-05, -2.0967449017916806e-05, -1.03939883047132753e-05, -2.6700733997131465e-06, 3.86089368475950323e-06, 1.08718986666644923e-05, 1.81662726390641183e-05, -0.999977648258209229, 2.0760842744493857e-05, 1.64741377375321463e-05, 1.53348046296741813e-05, 2.173696702811867e-05, 3.87776453862898052e-05, 6.75922565278597176e-05, 9.95199297904036939e-05, 0.000113726258859969676, 9.88537140074186027e-05, 6.82617101119831204e-05, 4.03112317144405097e-05, 2.07855428016046062e-05, 8.78169248608173802e-06, 3.24003167406772263e-06, 2.35237143897393253e-06, 2.77375920632039197e-06, 2.1746343463746598e-06, 1.04966261460504029e-06, 4.32059209742874373e-07, 2.89952311050001299e-07, 2.25691096034097427e-07, 5.89812394480304647e-08, -1.42479763098890544e-07, -2.00127530547433707e-07, -1.09430914108088473e-07, -7.08564584783744067e-08, -6.09472223800366919e-08, 4.22114858622535394e-08, 5.49965548657382897e-08, 2.49429579213256147e-08, 1.33546066649614659e-07, 2.6094798499798344e-07, 3.47654577126377262e-07, 3.61609579613286769e-07, 2.92289456638172851e-07, 6.01479968054263736e-08, -4.88933665110380389e-07, -1.55232771703595063e-06, -3.37872143063577823e-06, -6.28011275694007054e-06, -9.94361562334233895e-06, -1.21752964332699776e-05, -1.04732589534251019e-05, -5.43443456990644336e-06, 2.40552509467306663e-07, 5.61544129595858976e-06, 1.25595424833591096e-05, 2.39204509853152558e-05, 3.81495738110970706e-05, 4.57161004305817187e-05, 3.95993993151932955e-05, 2.56848343269666657e-05, 1.35146237880690023e-05, 5.71143664274131879e-06, 6.10144411439250689e-07, -3.33249022332893219e-06, -6.41117185296025127e-06, 0.999992072582244873, -7.96148924564477056e-06, -8.21304820419754833e-06, -1.09805259853601456e-05, -1.87876757991034538e-05, -3.51084527210332453e-05, -6.28471898380666971e-05, -9.49573513935320079e-05, -0.000109482425614260137, -9.31056856643408537e-05, -6.10938514000736177e-05, -3.48625544575043023e-05, -1.97194076463347301e-05, -1.13659789349185303e-05, -5.97101779931108467e-06, -2.57331134889682289e-06, -1.36067387757066172e-06, -1.38221753331890795e-06, -1.23203142265992938e-06, -6.60721582335099811e-07, -1.28537266164130415e-07, 9.13942272973145009e-08, -4.23042649799754145e-08, 1.22983678352284187e-07, 1.38136357463736203e-07, 6.06962231586294365e-08, -5.35132187451381469e-08, 7.34514529199259414e-08, -6.59826255855477939e-08, -6.54190941418164584e-08, 5.97421916381790652e-08, 4.19762322678707278e-08, -6.81757086340439855e-08, -1.11497271859661851e-07, -2.4759282268860261e-07, -4.34505409430130385e-07, -4.81926122120057698e-07, -2.81426082437974401e-07, 7.76397399704364943e-08, 5.94060566072585061e-07, 1.59377191266685259e-06, 3.59964246854360681e-06, 6.80902667227201164e-06, 1.01777377494727261e-05, 1.15830098366132006e-05, 1.00138213383615948e-05, 6.29660098638851196e-06, 1.13402711576782167e-06, -5.83898008699179627e-06, -1.56261739903129637e-05, -2.92595286737196147e-05, -4.42171549366321415e-05, -5.14822750119492412e-05, -4.46862322860397398e-05, -2.97955575661035255e-05, -1.68353599292458966e-05, -9.41944108490133658e-06, -6.59141414871555753e-06, -6.84680571794160642e-06, -8.42902500153286383e-06, -1.00000894069671631, -6.75987121212529019e-06, -1.99920123122865334e-06, 4.94151254315511324e-06, 1.53037599375238642e-05, 3.17812591674737632e-05, 5.69079129491001368e-05, 8.61168227856978774e-05, 0.000101824953162577003, 9.01688763406127691e-05, 6.06433095526881516e-05, 3.28653950418811291e-05, 1.56243622768670321e-05, 7.66588527767453343e-06, 5.06819014844950289e-06, 4.10545408158213831e-06, 2.86225508716597687e-06, 1.50749815475137439e-06, 7.91060699611989548e-07, 6.27196698133047903e-07, 5.1090461283820332e-07, 2.38898252291619428e-07, -8.73070291618205374e-08, -2.50939592660870403e-07, -1.64514503353530017e-07, 3.83686966642926564e-08, -8.43410532525012968e-08, -7.84191271918643906e-08, 8.10602287515393982e-08, 4.26408952591827983e-08, -9.58269907869180315e-08, 6.13497235235627159e-08, 6.43615223339111253e-08, 4.79889230575736292e-08, 1.47370272429725446e-07, 2.64568626562322606e-07, 3.84521001706161769e-07, 4.33120845855228254e-07, 3.23044247352299863e-07, -5.35070398655079771e-07, -1.55700377035827842e-06, -3.58378429154981859e-06, -7.16986687621101737e-06, -1.12565021481714211e-05, -1.25554370242753066e-05, -9.54413735598791391e-06, -4.69194992547272705e-06, 6.18432841292815283e-06, 1.66862482728902251e-05, 3.33089374180417508e-05, 5.1863269618479535e-05, 6.04390843363944441e-05, 5.20854191563557833e-05, 3.49643160006962717e-05, 2.09099598578177392e-05, 1.39204266815795563e-05, 1.32100176415406168e-05, 1.75549103005323559e-05, 2.41595298575703055e-05, 1.00002729892730713, 2.29952402150956914e-05, 1.33780595206189901e-05, 2.00177510123467073e-06, -1.13832611532416195e-05, -2.95093468594131991e-05, -5.39202665095217526e-05, -7.9051875218283385e-05, -9.04835978872142732e-05, -7.95788801042363048e-05, -5.56744453206192702e-05, -3.32382769556716084e-05, -1.76584471773821861e-05, -8.36549770610872656e-06, -3.93938853449071757e-06, -2.80211020253773313e-06, -2.92460231321456376e-06, -2.55402414950367529e-06, -1.49487948419846362e-06, -5.6768436706988723e-07, -1.74300367916657706e-07, -1.47740266243090446e-07, -1.84171440764657746e-07, -5.94779265838951687e-08, 1.80784951453460963e-07, 2.92414512159666629e-07, 1.91084183143175323e-07, -4.80796522595028364e-08, 7.94678527427095105e-08, 7.44553148024351685e-08, -1.13811715607425867e-07, 6.88407908455701545e-08, -1.10956158039243746e-07, -2.63585548054834362e-07, -4.7284345328080235e-07, -5.3821281653654296e-07, -3.08541217464153306e-07, 1.35985743554556393e-07, 7.27253620880219387e-07, 1.65172787092160434e-06, 3.3735386750777252e-06, 6.54369478070293553e-06, 1.08007361632189713e-05, 1.32293771457625553e-05, 1.09819266072008759e-05, 5.23894823345472105e-06, -1.26508689390902873e-06, -8.65440324560040608e-06, -1.97730387299088761e-05, -3.74376359104644507e-05, -5.81078566028736532e-05, -6.8451023253146559e-05, -5.95739948039408773e-05, -4.01427205360960215e-05, -2.41863599512726068e-05, -1.72552827280014753e-05, -1.91932449524756521e-05, -2.85876121779438108e-05, -4.0414022805634886e-05, -1.00004494190216064, -3.72578288079239428e-05, -2.3048676666803658e-05, -9.29835277929669246e-06, 4.4342186811263673e-06, 2.27534474106505513e-05, 4.82975738123059273e-05, 7.43846612749621272e-05, 8.45044487505219877e-05, 7.11121683707460761e-05, 4.69578844786155969e-05, 2.707037674554158e-05, 1.50294354170910083e-05, 8.53115489007905126e-06, 5.24024198966799304e-06, 3.57405338036187459e-06, 2.69067481895035598e-06, 2.15139448300760705e-06, 1.63887636972503969e-06, 1.04710989035083912e-06, 4.65080404410400661e-07, -2.03855023528376478e-07, -1.5992931423625123e-07, -5.77251775268905476e-08, -1.08045341562501562e-07, -5.01199473035285337e-08, 5.99671210466112825e-08, 1.09441664619680523e-07, -4.78367816469926765e-08, -3.29157714418215619e-08, 7.48699093833238294e-08, 9.21272871323708387e-08, 1.90220220019909902e-07, 2.69911737404981977e-07, 3.54104628286222578e-07, 4.60558368331476231e-07, 4.62628804598352872e-07, 1.36904844794116798e-07, -6.88277054905483965e-07, -2.12408531297114678e-06, -4.31772832598653622e-06, -7.40410087018972263e-06, -1.08098365672049113e-05, -1.25452270367532037e-05, -1.07906616904074326e-05, -5.99797976974514313e-06, 5.6100890333254938e-07, 9.36602918955031782e-06, 2.27651016757590696e-05, 4.29457868449389935e-05, 6.55434050713665783e-05, 7.63934367569163442e-05, 6.67603599140420556e-05, 4.63653850601986051e-05, 2.97518708975985646e-05, 2.24492705456214026e-05, 2.4915367248468101e-05, 3.72875401808414608e-05, 5.49643737031146884e-05, 1.00006425380706787, 5.44800568604841828e-05, 3.25890723615884781e-05, 1.19575624921708368e-05, -3.14166663883952424e-06, -1.72667023434769362e-05, -3.70833549823146313e-05, -6.15060853306204081e-05, -7.54069187678396702e-05, -6.6737804445438087e-05, -4.43930548499338329e-05, -2.45418414124287665e-05, -1.26664381241425872e-05, -6.80282118992181495e-06, -4.53325492344447412e-06, -3.95240476791514084e-06, -3.52974984707543626e-06, -2.63553215518186335e-06, -1.6212695754802553e-06, -9.27750079426914454e-07, -5.76158925014169654e-07, -3.73401434217157657e-07, -1.44658059753055568e-07, 1.27956099049697514e-07, 2.78347215498797596e-07, 2.10563158020704577e-07, 7.5779077235438308e-08, 7.94546934912432334e-08, 1.01107161754043773e-07, -3.95808292807942053e-08, -5.13263067603020318e-08, -1.19038766399626184e-07, -3.60863765536123537e-07, -5.33558363713382278e-07, -4.06010457254524226e-07, -1.12600709201160498e-07, 3.15640619419355062e-07, 1.38916936975874705e-06, 3.96158930016099475e-06, 8.11476002127164975e-06, 1.22606033983174711e-05, 1.3379513802647125e-05, 1.02845506262383424e-05, 4.82916721011861227e-06, -1.6199105630221311e-06, -1.04946548162843101e-05, -2.50375178438844159e-05, -4.8032350605353713e-05, -7.43821510695852339e-05, -8.68751230882480741e-05, -7.47416706872172654e-05, -5.02995608258061111e-05, -3.20966792060062289e-05, -2.66717197519028559e-05, -3.29405920638237149e-05, -4.85891978314612061e-05, -6.73699760227464139e-05, -1.00007688999176025, -6.86917919665575027e-05, -4.75252782052848488e-05, -2.29729739658068866e-05, -9.66367252885902417e-08, 1.97377012227661908e-05, 3.71682945115026087e-05, 5.23753624293021858e-05, 6.04041015321854502e-05, 5.50101358385290951e-05, 3.92699876101687551e-05, 2.30422374443151057e-05, 1.20372751553077251e-05, 6.31408784101950005e-06, 4.20946525991894305e-06, 3.95201686842483468e-06, 3.8693642636644654e-06, 3.11965504806721583e-06, 2.00593490262690466e-06, 1.0696088565964601e-06, 4.54162801588609e-07, 1.08626387884669384e-07, -1.0572662034746827e-07, -1.71592077435889223e-07, -2.00221350610263471e-07, -1.36700521125021623e-07, -4.9808637214709961e-08, 5.94445523915965168e-08, 5.17953075984678435e-08, 1.16423166218737606e-07, 1.27354866208406747e-07, 2.19564356029877672e-07, 5.32009266862587538e-07, 7.9314037293443107e-07, 4.7007023340484011e-07, -3.70390722537194961e-07, -1.16998830890224781e-06, -1.92769107343337964e-06, -3.53412747244874481e-06, -7.06986338627757505e-06, -1.18156031021499075e-05, -1.41647660711896606e-05, -1.1443418770795688e-05, -5.19405739396461286e-06, 2.47729030888876878e-06, 1.26360355352517217e-05, 2.84740654024062678e-05, 5.26875264768023044e-05, 8.05926392786204815e-05, 9.5421062724199146e-05, 8.49586722324602306e-05, 5.92714277445338666e-05, 3.72799368051346391e-05, 2.86432659777346998e-05, 3.59014775312971324e-05, 5.84832705499138683e-05, 8.52676384965889156e-05, 1.00009393692016602, 7.59218892198987305e-05, 4.89349986310116947e-05, 2.88100582110928372e-05, 1.30526932480279356e-05, -6.03506123297847807e-06, -2.94993988063652068e-05, -4.90542261104565114e-05, -5.37670093763154e-05, -4.36414411524310708e-05, -2.91601008939323947e-05, -1.78590580617310479e-05, -1.05978015199070796e-05, -6.27979898126795888e-06, -4.21197182731702924e-06, -3.83391943614697084e-06, -4.01600982513627969e-06, -3.55119959749572445e-06, -2.4060416308202548e-06, -1.31863498609163798e-06, -6.39752329334442038e-07, -2.69603845026722411e-07, 5.61268009846571658e-08, 1.31174900275254913e-07, 1.81225701112452953e-07, 1.82678121518620173e-07, 1.19346395877073519e-07, 2.14735322856540733e-08, -3.86606373581344087e-08, -1.23164811682840991e-08, 5.83241046570037724e-08, 4.616772031340588e-08, -6.83157779235443741e-08, -2.32369743002891482e-07, -3.12115503220411483e-07, -2.66205347543291282e-07, -3.57648900717322249e-07, -6.12290534718340496e-07, -4.25244792268131278e-07, 6.69490816562756663e-07, 2.50448101724032313e-06, 4.89712829221389256e-06, 8.13883161754347384e-06, 1.1888770131918136e-05, 1.36978824230027385e-05, 1.12364086817251518e-05, 5.37371715836343355e-06, -2.36700384448340628e-06, -1.35562386276433244e-05, -3.22137821058277041e-05, -6.09452072239946574e-05, -9.20262100407853723e-05, -0.000105286126199644059, -9.07244684640318155e-05, -6.36413606116548181e-05, -4.33939458162058145e-05, -3.57883691322058439e-05, -4.06402141379658133e-05, -5.96866011619567871e-05, -8.95779230631887913e-05, -1.00010919570922852, -9.60190736805088818e-05, -5.83656801609322429e-05, -2.37608164752600715e-05, -4.98551844430039637e-06, 3.74627052224241197e-06, 1.41282143886201084e-05, 3.06256879412103444e-05, 4.26407750637736171e-05, 3.90754648833535612e-05, 2.52733207162236795e-05, 1.31976830743951723e-05, 6.97527502779848874e-06, 4.92878234581439756e-06, 4.72158899356145412e-06, 4.74420266982633621e-06, 4.33265131505322643e-06, 3.5121311157126911e-06, 2.54275960287486669e-06, 1.62277081017236924e-06, 8.55789551224006573e-07, 2.75715677844345919e-07, -1.17974565227996209e-07, -2.89491339344749576e-07, -2.3904678414510272e-07, -1.13957476344239694e-07, -6.85375809439392469e-08, -8.94455851607744989e-08, -7.94025396544384421e-08, -4.74460870591997264e-09, -5.25869019440960983e-08, 4.37093667926546914e-08, 5.16166700492703967e-08, -4.4924941988710998e-08, 4.76386290415575786e-08, 1.62172142381677986e-07, 4.86826309042953653e-07, 7.17812099537695758e-07, 4.38875417785311583e-07, -3.84152762933354097e-08, -1.54135420871170936e-07, -2.99919435065021389e-07, -1.46452509852679214e-06, -4.23959636464132927e-06, -8.55075450090225786e-06, -1.30198668557568453e-05, -1.46349493661546148e-05, -1.13890018837992102e-05, -4.57411670140572824e-06, 3.9115839172154665e-06, 1.51126514538191259e-05, 3.3206408261321485e-05, 6.28878115094266832e-05, 9.86571685643866658e-05, 0.000117232899356167763, 0.000101977406302466989, 6.82679965393617749e-05, 4.28434832429047674e-05, 3.68674118362832814e-05, 4.88490441057365388e-05, 7.21917167538776994e-05, 9.51111505855806172e-05, 1.00010466575622559, 9.57176816882565618e-05, 7.26424332242459059e-05, 4.29727006121538579e-05, 1.40002412081230432e-05, -7.77008517616195604e-06, -1.93870364455506206e-05, -2.37412205024156719e-05, -2.52370155067183077e-05, -2.41362376982579008e-05, -1.93546366062946618e-05, -1.25735105029889382e-05, -6.72581427352270111e-06, -3.56627742803539149e-06, -3.3634801184234675e-06, -4.8037882152129896e-06, -5.53388690605061129e-06, -4.42123246102710254e-06, -2.56283055932726711e-06, -1.273277689506358e-06, -7.04681440311105689e-07, -4.79598782021639636e-07, -2.61016793956514448e-07, 8.49810817271645647e-08, 3.76356013020995306e-07, 3.76405296265147626e-07, 1.71021468986509717e-07, -5.60077957345583854e-08, -4.42778116394038079e-08, 3.19166097995093878e-08, 3.33205569802430546e-08, 2.89697261735000211e-08, 2.70535576163410951e-08, -8.25584081098895695e-08, -8.1322440337316948e-08, -1.80106454195083643e-07, -5.72311364521738142e-07, -8.97420875389798312e-07, -5.02282375691720517e-07, 4.27541749559168238e-07, 1.22897370147256879e-06, 2.04654133995063603e-06, 3.7960601275699446e-06, 7.17189868737477809e-06, 1.1229226402065251e-05, 1.31494771267171018e-05, 1.1089685358456336e-05, 5.88541570323286578e-06, -1.52565542066440685e-06, -1.2004407835775055e-05, -2.72286051767878234e-05, -4.81796851090621203e-05, -7.07307408447377384e-05, -8.2743761595338583e-05, -7.57740344852209091e-05, -5.70747943129390478e-05, -4.08983032684773207e-05, -3.75865638488903642e-05, -5.56679879082366824e-05, -0.000100375102192629129, -0.000153619985212571919, -1.00017142295837402, -0.00013675732770934701, -8.46013062982819974e-05, -4.81320748804137111e-05, -2.53909111052053049e-05, -2.23857250603032298e-06, 2.63363526755711064e-05, 5.20970061188563704e-05, 6.058092913008295e-05, 4.92563485749997199e-05, 3.1443723855772987e-05, 1.85718381544575095e-05, 1.13768655864987522e-05, 7.09138794263708405e-06, 4.34985395258991048e-06, 3.07578307001676876e-06, 3.07609843730460852e-06, 3.21928018820472062e-06, 2.60129945672815666e-06, 1.47538992223417154e-06, 4.76294815143774031e-07, -7.92237031532749825e-08, -1.67774359738359635e-07, 3.8426883008924051e-08, -1.01581747458112659e-07, -2.13075054489308968e-07, -1.61059020342690928e-07, -4.10507396964021609e-08, 5.46688418978646951e-08, 6.91397374907865014e-08, -5.83265915565789328e-08, -4.79382613605139341e-08, 5.28293391255374445e-08, 3.88823586661146692e-08, -6.54103899933033972e-08, -4.38598064533834986e-08, 5.50050955894221261e-08, 1.35427470127069682e-07, 2.13844032259657979e-07, 1.88117525112829753e-07, 1.37836252633860568e-07, 3.36557718583208043e-07, 6.18409615071868757e-07, 3.84508012984952074e-07, -5.42949692317051813e-07, -1.98835391529428307e-06, -4.16055036112084053e-06, -7.58656369725940749e-06, -1.14498861876199953e-05, -1.27018329294514842e-05, -9.6829617177718319e-06, -4.62320031147100963e-06, 5.98669601004075957e-07, 8.03609873401001096e-06, 2.18654386117123067e-05, 4.43465214630123228e-05, 6.83848775224760175e-05, 7.70261103753000498e-05, 6.3741834310349077e-05, 4.30639956903178245e-05, 2.93275788862956688e-05, 2.18966924876440316e-05, 1.45734384204843082e-05, 8.52501671033678576e-06, 1.32683035189984366e-05, 1.00002765655517578, 3.24558241118211299e-05, 1.78332502400735393e-05, -2.84605016531713773e-06, -1.5967598301358521e-05, -2.25517305807443336e-05, -3.18197453452739865e-05, -4.79707232443615794e-05, -6.09408743912354112e-05, -5.72165372432209551e-05, -3.94951603084336966e-05, -2.14484934986103326e-05, -1.04483506220276468e-05, -5.92805372434668243e-06, -4.97177506986190565e-06, -4.66928531750454567e-06, -3.49692641066212673e-06, -1.95911115952185355e-06, -1.09623817934334511e-06, -9.11156803340418264e-07, -8.13770952845516149e-07, -4.85675286654441152e-07, 3.69781957942905137e-07, 3.44246188888064353e-07, 1.06504288055475627e-07, 8.78451800190305221e-08, -4.68261980302031589e-08, -4.94636296366479655e-08, 2.73928719707328128e-08, 5.79200021277870292e-09, 3.94011827609119791e-08, 5.86073269914777484e-08, -2.63341437545250301e-08, -5.54166206256923033e-08, 5.38722986220818711e-08, 5.16968619024282816e-08, -3.25248919352816301e-07, -6.24050073838589014e-07, -6.79543802561966004e-07, -3.96540514202570193e-07, -1.01692272380660143e-07, 8.79723245361674344e-08, 5.58323279165051645e-07, 1.68735664374253247e-06, 3.68000701200799085e-06, 6.83483585817157291e-06, 1.08348358480725437e-05, 1.32298255266505294e-05, 1.11085364551399834e-05, 4.89789181301603094e-06, -2.60589695244561881e-06, -1.03749771369621158e-05, -2.0448740542633459e-05, -3.65423766197636724e-05, -5.76736056245863438e-05, -7.05600032233633101e-05, -6.12369476584717631e-05, -3.49894908140413463e-05, -9.04830903891706839e-06, 7.91388083598576486e-06, 2.13357197935692966e-05, 4.57463502243626863e-05, 8.50978685775771737e-05, -0.999887943267822266, 9.7958916740026325e-05, 5.81170570512767881e-05, 2.86466893157921731e-05, 2.25896328629460186e-05, 3.27481284330133349e-05, 4.93002080474980175e-05, 6.28445341135375202e-05, 6.5023596107494086e-05, 5.468176823342219e-05, 3.87826949008740485e-05, 2.4214332370320335e-05, 1.33079820443526842e-05, 6.2212343436840456e-06, 2.89803438136004843e-06, 2.71487738245923538e-06, 3.64351103598892223e-06, 3.4668810258153826e-06, 2.03937224796391092e-06, 6.75307148867432261e-07, 8.43828971142102091e-08, 2.4035040269154706e-07, 1.84184514750995731e-07, -8.24196106918861915e-08, -2.59778460076631745e-07, -2.14790205177450844e-07, -9.04256012290716171e-08, 6.41603108419985801e-08, 5.820495729835784e-08, -5.20230685197020648e-08, -5.4066980226252781e-08, 5.65255113826879096e-08, 6.16485351656592684e-08, -3.61552530137032591e-08, -3.35091705494505732e-08, 5.6926509728327801e-08, -1.05855086474093696e-07, -8.30444051302947628e-08, 5.0601634882241342e-08, 1.27446682540721667e-07, 4.42366214770117949e-08, -1.01653313322458416e-07, -1.05872565825393394e-07, 1.86121027923036308e-07, 6.02644888658687705e-07, 6.67980145863111829e-07, 2.9130518441888853e-07, -1.55076435248702182e-07, -6.70982217343407683e-07, -1.78492643954086816e-06, -3.95704819311504252e-06, -7.05247612131643109e-06, -9.89770342130213976e-06, -1.08766180346719921e-05, -9.57459451456088573e-06, -6.54478162687155418e-06, -1.51744484355731402e-06, 6.61072726870770566e-06, 1.85341996257193387e-05, 3.33085372403729707e-05, 4.66503661300521344e-05, 5.25541727256495506e-05, 4.94127525598742068e-05, 4.06218641728628427e-05, 2.94320379907730967e-05, 2.03942545340396464e-05, 2.36887517530703917e-05, 4.90490201627835631e-05, 8.6380394350271672e-05, 1.00010132789611816, 7.71376799093559384e-05, 3.91551548091229051e-05, 1.45001549753942527e-05, 1.66172401350195287e-06, -1.26273180285352282e-05, -3.68181026715319604e-05, -6.59517827443778515e-05, -8.0568344856146723e-05, -6.93850088282488286e-05, -4.5177872380008921e-05, -2.54008846241049469e-05, -1.43898587339208461e-05, -8.89459261088632047e-06, -5.63526782570988871e-06, -3.10291488858638331e-06, -1.5024271533548017e-06, -1.14458396183181321e-06, -1.29299269246985205e-06, -1.1123602234874852e-06, -5.62635136702738237e-07, 3.07380986441785353e-07, 2.65254982423357433e-07, 6.10134023304453876e-08, -5.7007589759905386e-08, -3.68934642835938575e-08, 6.77277327554293151e-08, 8.58636468592521851e-08, 6.6159387301922834e-08, -6.22236981939749967e-08, -7.13351653303107014e-08, -3.04402760775701609e-08, 4.41356711178286787e-08, 4.97255285836217809e-08, 2.98030577994268242e-08, -6.24926457248875522e-08, 4.58752609233670228e-08, 7.50409085981118551e-08, -4.92953375896831858e-08, -6.70710704753219034e-08, 1.91745186839398229e-07, 6.79256686453300063e-08, -1.9674881457376614e-07, -3.13873414370391401e-07, -1.82120828640108812e-07, -4.18234158416908031e-08, -2.28523106216016458e-07, -5.50927211406815331e-07, -4.40712824456568342e-07, 1.08882353799799603e-07, 6.952595867915079e-07, 1.4612188579121721e-06, 3.2248860861727735e-06, 6.76789250064757653e-06, 1.09894490378792398e-05, 1.22439942060736939e-05, 8.77001912158448249e-06, 3.58269448952341918e-06, -3.77839313614458661e-07, -4.33022296419949271e-06, -1.21011889859801158e-05, -2.67189625446917489e-05, -4.35647089034318924e-05, -4.90732163598295301e-05, -3.89754532079678029e-05, -2.85638070636196062e-05, -3.22919004247523844e-05, -4.94559280923567712e-05, -7.531964365625754e-05, -0.000111864552309270948, -0.000158298164024017751, -1.0001908540725708, -0.000177976311533711851, -0.000123957477626390755, -6.25706306891515851e-05, -1.49980314745334908e-05, 1.82037983904592693e-05, 4.42895980086177588e-05, 6.74211187288165092e-05, 8.03116272436454892e-05, 7.34351488063111901e-05, 5.1893774070776999e-05, 2.96463749691611156e-05, 1.43266279337694868e-05, 6.33467197985737585e-06, 3.66689369002415333e-06, 3.47008199241827242e-06, 3.06535389427153859e-06, 1.73743592313257977e-06, 5.49805804439529311e-07, 1.72635850503866095e-07, 2.69353421344931121e-07, 3.71745301208648016e-07, 2.73269108674867311e-07, -2.46598688136145938e-07, -2.88438258166934247e-07, -1.60678226279742375e-07, 6.74509550435686833e-08, 7.29354994177811022e-08, -4.22194119664709433e-08, -5.93150524252905598e-08, -2.33610908395576189e-08, 6.26503080525253608e-08, 5.49490053458612238e-08, -2.98267224252413143e-08, -1.90266646882264467e-08, 6.1964868791619665e-08, 1.48152023982106584e-08, 6.19550135638746724e-08, -4.24683292976624216e-08, -1.20129016067949124e-07, 1.43707552524574567e-07, 1.05812922868153692e-07, -1.4722945707035251e-07, -2.23558032530490891e-07, 4.45353578015783569e-07, 5.39216557626787107e-07, 3.68101382264285348e-07, 3.5080324778391514e-07, 4.72019735298090382e-07, 1.80418311401808751e-07, -7.08554694028862286e-07, -1.92206312021880876e-06, -3.37729352395399474e-06, -5.48098023500642739e-06, -8.52086031954968348e-06, -1.10593709905515425e-05, -1.04599157566553913e-05, -6.19203910900978372e-06, -3.25251278354699025e-07, 5.24018378200707957e-06, 1.02362237157649361e-05, 1.64836455951444805e-05, 2.65233138634357601e-05, 3.68646651622839272e-05, 3.76856696675531566e-05, 2.77513863693457097e-05, 2.10838425118708983e-05, 3.39250509568955749e-05, 7.38092712708748877e-05, 0.000135657202918082476, 0.000193212676094844937, 1.00020802021026611, 0.000171464256709441543, 0.000115025562990922481, 6.62959573674015701e-05, 2.7149473680765368e-05, -1.00558381745941006e-05, -4.85193522763438523e-05, -8.1319994933437556e-05, -9.34354175115004182e-05, -7.99227491370402277e-05, -5.48003154108300805e-05, -3.32718991558067501e-05, -1.89737602340755984e-05, -9.8585833256947808e-06, -4.23637402491294779e-06, -1.52659242758090841e-06, -1.05656249616004061e-06, -1.29068257592734881e-06, -1.06085008155787364e-06, -4.50194846735030296e-07, 5.19846246049837646e-08, 2.6356431703788985e-07, 2.09548531415748585e-07, -1.55700604409503285e-07, -1.25831675745757821e-07, 1.13100320220382855e-07, 1.06360104723535187e-07, 3.08519396696738113e-08, -9.51044754060603736e-08, -7.04646723193036451e-08, 5.05631021496810718e-08, 4.79146819998277351e-08, -3.36028485037331848e-08, 6.05173440249018313e-08, 5.13384001976646687e-08, 4.39574101562811848e-08, 5.72393119568914699e-08, -8.87787834358277905e-08, -5.59818325029937114e-08, 1.21766547067636566e-07, 1.62250202606628591e-07, -2.50830964887427399e-07, -4.86200342209031078e-08, 2.16531645946815843e-07, 9.80321104293579992e-08, -3.82068435555993346e-07, -6.51298478260287084e-07, -3.79831163854760234e-07, 2.36164325428944721e-07, 1.33453897888102802e-06, 3.54200892616063356e-06, 6.51967229714500718e-06, 8.93116248334990814e-06, 9.22777144296560436e-06, 7.64226660976419225e-06, 5.67400866202660836e-06, 3.50295727002958301e-06, -7.67342314134111803e-08, -5.58367582925711758e-06, -1.09681996036670171e-05, -1.24527869047597051e-05, -1.09272277768468484e-05, -1.28612600747146644e-05, -1.96385790331987664e-05, -2.63926340267062187e-05, -3.37380661221686751e-05, -5.16697946295607835e-05, -9.28127919905818999e-05, -0.000150662322994321585, -1.00018405914306641, -0.000160084047820419073, -9.98100149445235729e-05, -4.4400279875844717e-05, -6.79224513078224845e-06, 2.26015818043379113e-05, 5.54988109797704965e-05, 9.10205926629714668e-05, 0.000109863038233015686, 9.71582339843735099e-05, 6.52942544547840953e-05, 3.62848913937341422e-05, 1.84492200787644833e-05, 9.46549789659911767e-06, 5.19820878253085539e-06, 2.61900981968210544e-06, 7.20900800388335483e-07, -2.15681936310829769e-07, -2.17743263419833966e-07, 9.68568443227013631e-08, 2.90781173362120171e-07, 2.73853743237850722e-07, 7.17496178026522102e-08, -1.80859558440715773e-07, -2.5996945396400406e-07, -1.10096621597222111e-07, 6.8480950687899167e-08, 1.11704203220597265e-07, 4.51946711166328896e-08, -9.17464930694222858e-08, -8.36391365055533242e-08, 4.55534703291959886e-08, 4.67484611021973251e-08, -3.23525810586033913e-08, 5.23310497158036014e-08, -5.10607414128116943e-08, 3.14745420837425627e-08, 5.37241930942400359e-08, -6.04233960643796308e-08, -7.51130215803641477e-08, 1.30392876940277347e-07, -1.99088702856897726e-07, 3.05063792893633945e-07, 3.10082072019213228e-07, 3.58644371090122149e-07, 6.7477662923920434e-07, 3.41082937893588678e-07, -2.92721097139292397e-07, -7.2029837383524864e-07, -1.18028185625007609e-06, -2.42281112150521949e-06, -5.14952535013435408e-06, -8.74020861374447122e-06, -1.04055861811502837e-05, -8.24511062091914937e-06, -4.32573915531975217e-06, -1.8623010191731737e-06, -1.42075396070140414e-06, -9.05419085484027164e-07, 2.68618464360770304e-06, 8.57727445691125467e-06, 9.83423433353891596e-06, 3.9090809877961874e-06, -6.11562825270084431e-07, 3.96913173972279765e-06, 1.59741994139039889e-05, 2.93633002002025023e-05, 3.96141185774467885e-05, 4.607319351634942e-05, 1.00004911422729492, 4.62399621028453112e-05, 3.47518580383621156e-05, 1.56548194354400039e-05, -8.15178555058082566e-06, -3.5708839277504012e-05, -6.76316922181285918e-05, -9.85701044555753469e-05, -0.000112609981442801654, -9.94226502371020615e-05, -6.97981013217940927e-05, -4.1437670006416738e-05, -2.16341832128819078e-05, -9.81839184532873333e-06, -3.85485736842383631e-06, -1.52182337842532434e-06, -7.89180035098979715e-07, -3.42447350476504653e-07, 1.01209430170001724e-07, 3.68652564475269173e-07, 3.97372161842213245e-07, 2.26891600618728262e-07, -2.36979090573186113e-07, -1.68110460663228878e-07, 3.77340008128612681e-08, 1.34979018184822053e-07, 8.01023034568970616e-08, -6.63158203906277777e-08, -6.4062618321258924e-08, -1.84903665711999565e-08, 6.28851495321214315e-08, -5.26451771065694629e-08, 6.5551880368275306e-08, -5.11287119309145055e-08, 8.23978183461804292e-08, -1.20779390044845059e-07, 2.67088381633584504e-07, 2.16128583474528568e-07, -1.44257327860941587e-07, -4.07205703822910436e-07, -3.18839795454550767e-07, -1.52794058294603019e-07, -2.9325528316803684e-07, -4.80468258956534555e-07, -1.94975910972061683e-07, 5.65431605537014548e-07, 1.5527593859587796e-06, 2.77807930615381338e-06, 4.47800857727997936e-06, 6.62942966300761327e-06, 8.29036525828996673e-06, 8.16092506283894181e-06, 6.19331876805517823e-06, 3.84894747185171582e-06, 3.19647188007365912e-06, 6.35630067336023785e-06, 1.37982451633433811e-05, 2.0649951693485491e-05, 1.95960619748802856e-05, 1.16492665256373584e-05, 4.75515753350919113e-06, 8.0964008475348237e-07, -7.03483874531229958e-06, -2.69574447884224355e-05, -6.12113508395850658e-05, -9.69382745097391307e-05, -1.00010836124420166, -8.63747845869511366e-05, -5.08884513692464679e-05, -2.06411350518465042e-05, 5.41909821549779736e-06, 3.63416111213155091e-05, 7.74808577261865139e-05, 0.000120084674563258886, 0.000138883624458685517, 0.000119839169201441109, 8.08198674349114299e-05, 4.6692515752511099e-05, 2.49664335569832474e-05, 1.23793533930438571e-05, 5.0687976909102872e-06, 8.22405240796797443e-07, -1.13330065687478054e-06, -1.34396088924404467e-06, -7.7536373055409058e-07, -2.58389547980186762e-07, -1.1474471506289774e-07, -2.1793982796225464e-07, -1.58945823613976245e-07, 2.12003868682586472e-07, 1.68076425666185969e-07, 4.33899991492125991e-08, -6.9115152712129202e-08, -5.18716554154252663e-08, 3.84431828592823877e-08, -2.65770534468856567e-08, -3.79909295133984415e-08, -8.54021564578033576e-08, -1.71191373965484672e-07, 2.01345955019860412e-07, 1.9091018543804239e-07, -7.40060386306140572e-08, -1.96694813325848372e-07, 3.99613497847894905e-07, 4.80484231957234442e-07, 2.56744158377841813e-07, 9.8240612089739443e-08, 5.13859532702554134e-08, -2.69653980922157643e-07, -1.1838551472465042e-06, -2.84200882560980972e-06, -5.21122910868143663e-06, -7.4847516771114897e-06, -8.18448006612015888e-06, -7.04207286617020145e-06, -5.54085954718175344e-06, -4.70905115435016342e-06, -4.2357487473054789e-06, -4.02549540012842044e-06, -5.57002022105734795e-06, -1.01719524536747485e-05, -1.44909017762984149e-05, -1.23107893159613013e-05, -2.72631996267591603e-06, 9.44337898545200005e-06, 2.10546513699227944e-05, 3.42365674441680312e-05, 5.45317961950786412e-05, 8.17801774246618152e-05, 1.000099778175354, 9.03834807104431093e-05, 5.88125767535530031e-05, 2.39870823861565441e-05, -6.1369291870505549e-06, -3.57664830517023802e-05, -7.10786407580599189e-05, -0.000108284635643940419, -0.000127244042232632637, -0.00011293364514131099, -7.7858770964667201e-05, -4.47625643573701382e-05, -2.29404085985152051e-05, -1.07700852822745219e-05, -4.59647390016471036e-06, -1.50589369241060922e-06, 1.17811289612745895e-07, 8.67769415435759583e-07, 9.78836624199175276e-07, 7.12113603640318615e-07, 3.13988493871875107e-07, -1.82408612658946367e-07, -1.02630821174898301e-07, 4.83293760566994024e-08, 8.2748286445166741e-08, -6.35660484249456204e-08, -3.37419301388308668e-08, -3.62018326427460124e-08, -1.20710836881698924e-07, -1.53347201603537542e-07, 1.85613771463977173e-07, 1.2765542578563327e-07, -1.53141755276919866e-07, -2.8403385954334226e-07, -1.48934319099680579e-07, -1.4078862875521736e-07, -4.7453394813601335e-07, -5.49271476302237716e-07, -2.22102514157995756e-07, 1.59755089157442853e-07, 4.84272277390118688e-07, 1.12769555471459171e-06, 2.57625015365192667e-06, 5.1144979806849733e-06, 8.05919626145623624e-06, 9.34210584091488272e-06, 7.70513179304543883e-06, 4.68591861135791987e-06, 2.56510224971862044e-06, 1.88651290500274627e-06, 1.7577125390744186e-06, 1.04829098290792899e-06, -4.93804577672563028e-07, -1.50203618431987707e-06, -5.93788399783079512e-07, 4.91239234179374762e-07, -2.60274282481987029e-06, -1.33646308313473128e-05, -3.28258684021420777e-05, -5.86898022447712719e-05, -8.20834538899362087e-05, -1.00008904933929443, -7.46604200685396791e-05, -4.87412908114492893e-05, -2.23028109758161008e-05, 3.19795731229532976e-06, 3.16573532472830266e-05, 6.57970012980513275e-05, 9.91090200841426849e-05, 0.000113455098471604288, 9.87075763987377286e-05, 6.79683871567249298e-05, 3.99802665924653411e-05, 2.12682225537719205e-05, 1.0218808711215388e-05, 4.17620867665391415e-06, 1.19002834253478795e-06, 6.23450944203796098e-08, -1.14880684520812792e-07, -1.27599648180876102e-07, -2.26480722176347626e-07, -2.44157092765817652e-07, -1.24620626706928306e-07, 1.43009742714639287e-07, 9.51929735037992941e-08, -3.63898919886196381e-08, 5.75679663938899466e-08, -4.54894184542808944e-08, -1.55141705704409105e-07, -1.6022445947783126e-07, 2.0416017321167601e-07, 1.02107279076335544e-07, -2.00130756411454058e-07, -2.74899463192923577e-07, 1.96427492937800707e-07, 2.39989219608105486e-07, 1.86995492867936264e-07, 2.9471152629412245e-07, 5.15842032200453104e-07, 4.32518163506756537e-07, -9.13561137849683291e-08, -7.86343491654406535e-07, -1.58196030497492757e-06, -2.82035648524470162e-06, -4.95651966048171744e-06, -7.70401857153046876e-06, -9.30670830712188035e-06, -8.18027729110326618e-06, -5.12513588546426035e-06, -2.15706609196786303e-06, -1.4655167035471095e-07, 1.47612581713474356e-06, 3.60211924999020994e-06, 6.22426478003035299e-06, 8.55616690387250856e-06, 1.01610103229177184e-05, 1.10395012598019093e-05, 1.17214358397177421e-05, 1.44488676596665755e-05, 2.35221923503559083e-05, 4.26867263740859926e-05, 6.68567881803028286e-05, 1.00007879734039307, 6.71047164360061288e-05, 4.15457434428390115e-05, 1.67483685800107196e-05, -4.46771809947676957e-06, -2.73028435913147405e-05, -5.64896763535216451e-05, -8.73352691996842623e-05, -0.000102133686596062034, -8.9452842075843364e-05, -6.10324532317463309e-05, -3.52831775671802461e-05, -1.86768374987877905e-05, -9.36977539822692052e-06, -4.46457943326095119e-06, -1.85118949502793839e-06, -4.61367193338446668e-07, 9.09106461222108919e-08, 1.04719617866066983e-07, -4.649369955700422e-08, -1.26655578469581087e-07, -8.64255866872554179e-08, 9.36645392357604578e-08, 8.3654633442620252e-08, 4.64249900744562183e-08, 3.75188911050372553e-08, 4.52563959640883695e-08, -1.78844430820390698e-07, -1.68284472579216526e-07, 6.32209875561784429e-08, 3.0728648425792926e-07, 2.22889568135542504e-07, -1.29201296772407659e-07, -2.58635083127956023e-07, 1.27772395330794097e-07, -2.10457230309657461e-07, -3.48615003531449474e-07, -2.99105892054285505e-07, -2.64032166796823731e-07, -3.52182922824795241e-07, -2.61022307768143946e-07, 3.52820222815353191e-07, 1.57369242970162304e-06, 3.39303142027347349e-06, 5.76872844249010086e-06, 8.20549848867813125e-06, 9.45833198784384876e-06, 8.4636058090836741e-06, 5.40292558071087115e-06, 1.24683435842598556e-06, -3.12039242089667823e-06, -7.50352910472429357e-06, -1.27321882246178575e-05, -1.85002081707352772e-05, -2.11229689739411697e-05, -1.80654751602560282e-05, -1.31327024064376019e-05, -1.18345433293143287e-05, -1.56959267769707367e-05, -2.40268618654226884e-05, -3.65492123819421977e-05, -5.05405805597547442e-05, -1.00005733966827393, -4.98743866046424955e-05, -3.22703235724475235e-05, -1.28923729789676145e-05, 5.63967296329792589e-06, 2.57758056250168011e-05, 5.01815811730921268e-05, 7.50312829040922225e-05, 8.67547132656909525e-05, 7.63158095651306212e-05, 5.27178235643077642e-05, 3.07714944938197732e-05, 1.62124088092241436e-05, 7.9873634604155086e-06, 3.92262245441088453e-06, 2.16548369280644692e-06, 1.34333197365776869e-06, 7.38423011625854997e-07, 2.73009305828963988e-07, -4.34099014512412396e-08, -4.93046954375131463e-08, 5.9003387065104107e-08, 3.11348919979081984e-08, 5.24566381443491991e-08, 1.12458039325247228e-07, -1.53425474991308874e-07, -1.87768279147348949e-07, 3.10440469775130623e-07, 2.50515824973263079e-07, -1.09356598443355324e-07, -2.75124875770416111e-07, 2.00203430722467601e-07, 1.52458653701614821e-07, 8.96427039265290659e-08, 3.91057398019256652e-07, 6.45349302885733778e-07, 4.94927974159509176e-07, 6.25908853635337437e-08, -2.50390513656384428e-07, -4.95935523758816998e-07, -1.21349273740634089e-06, -2.98621307592839003e-06, -5.9454137044667732e-06, -8.82159019965911284e-06, -9.38661287364084274e-06, -7.4228214543836657e-06, -4.92725075673661195e-06, -2.39244718613917939e-06, 1.77747403995454079e-06, 8.6227755673462525e-06, 1.75580935319885612e-05, 2.61117984337033704e-05, 3.00411593343596905e-05, 2.68989642790984362e-05, 1.94258791452739388e-05, 1.29874961203313433e-05, 1.13662954390747473e-05, 1.59892024385044351e-05, 2.63615493167890236e-05, 3.80977980967145413e-05, 1.00004267692565918, 3.56495947926305234e-05, 2.20146575884427875e-05, 8.10093115433119237e-06, -5.63946514375857078e-06, -2.2272906790021807e-05, -4.39735376858152449e-05, -6.63313912809826434e-05, -7.64762517064809799e-05, -6.67545391479507089e-05, -4.5893859351053834e-05, -2.69745105470065027e-05, -1.45648591569624841e-05, -7.44440148991998285e-06, -3.73099760508921463e-06, -2.07416906050639227e-06, -1.4936008483346086e-06, -1.19462174552609213e-06, -8.16302247130806791e-07, -4.32902993452444207e-07, -1.68563360603002366e-07, 9.43205407111236127e-08, 1.06268714716861723e-07, 5.79765249142383254e-08, 4.45777459390228614e-08, 8.47881267418415518e-08, 7.821929415285922e-08, -1.16523729332129733e-07, -2.00054401489069278e-07, 2.99255617619564873e-07, 2.68416869175780448e-07, -6.64478108092225739e-08, -2.68114121126927785e-07, -5.55805570456868736e-08, 2.0395646060933359e-07, 1.38004793370782863e-07, -6.9996069385069859e-08, -1.42671140679340169e-07, -8.51161416903778445e-08, -1.00083099141556886e-07, -3.58269062417093664e-07, -6.51936659323837375e-07, -5.23091273407771951e-07, 9.90342243767372565e-08, 8.88400847998127574e-07, 1.73480464127351297e-06, 3.02768580695556011e-06, 5.54331836610799655e-06, 9.16415592655539513e-06, 1.11134904727805406e-05, 8.58343628351576626e-06, 3.2242764973489102e-06, -1.38274344863020815e-06, -5.02504235555534251e-06, -1.05261669887113385e-05, -2.03594627237180248e-05, -3.21725710819009691e-05, -3.79161137971095741e-05, -3.31871815433260053e-05, -2.33221744565526024e-05, -1.54801946337101981e-05, -1.19859969345270656e-05, -1.27699868244235404e-05, -1.75567074620630592e-05, -2.42240748775657266e-05, -1.00002741813659668, -2.32224701903760433e-05, -1.38146042445441708e-05, -3.40431097356486134e-06, 7.33567185307038017e-06, 2.06247095775324851e-05, 3.84709783247672021e-05, 5.74810183024965227e-05, 6.65028710500337183e-05, 5.82765060244128108e-05, 3.99943492084275931e-05, 2.33136852330062538e-05, 1.25899696286069229e-05, 6.78812511978321709e-06, 3.97387793782399967e-06, 2.60308047472790349e-06, 1.799719711925718e-06, 1.24069458706799196e-06, 8.35225819173501804e-07, 5.21823835697432514e-07, 2.73500575076468522e-07, 9.78259464545772062e-08, -6.92160782023165666e-08, -9.59479464768264734e-08, -9.13236206656620197e-08, -6.04421330763216247e-08, 5.03901773640791362e-08, 9.16196327693796775e-08, -5.16824272267513152e-08, -1.694352818049083e-07, 2.74336372285688412e-07, 2.50366156251402572e-07, -6.71938025220697455e-08, -3.05592323002201738e-07, -1.69520589565763657e-07, 1.0046768039728704e-07, 1.07919120750921138e-07, 1.2271408422748209e-07, 2.90118464363331441e-07, 3.45179330452083377e-07, 3.01889116371967248e-07, 3.01194404528359883e-07, 3.60143957323089126e-07, 2.05903134542495536e-07, -4.75925872933657956e-07, -1.79303492586768698e-06, -3.62675700671388768e-06, -5.70021802559494972e-06, -7.78877893026219681e-06, -9.47075841395417228e-06, -9.41042981139617041e-06, -6.32254068477777764e-06, -5.81022902679251274e-07, 6.59911256661871448e-06, 1.4953619938751217e-05, 2.52557456406066194e-05, 3.6297617043601349e-05, 4.19333919126074761e-05, 3.71899805031716824e-05, 2.60283522948157042e-05, 1.59569590323371813e-05, 1.03237589428317733e-05, 9.06348850548965856e-06, 1.12169518615701236e-05, 1.46860602399101481e-05, 1.0000159740447998, 1.31185215650475584e-05, 7.2941497819556389e-06, 4.16364230204635533e-07, -7.8028760981396772e-06, -1.91097387869376689e-05, -3.47074164892546833e-05, -5.12077494931872934e-05, -5.89007795497309417e-05, -5.16892359883058816e-05, -3.57559110852889717e-05, -2.09795562113868073e-05, -1.11675617517903447e-05, -5.75002195546403527e-06, -3.38985933012736496e-06, -2.69048086920520291e-06, -2.34920503316971008e-06, -1.72994930380809819e-06, -1.02968874671205413e-06, -5.55427050130674616e-07, -2.96321360337969963e-07, -1.38340368494027643e-07, 6.07771823979419423e-08, 1.00490304077993642e-07, 9.85633903383131837e-08, 7.90437653108710947e-08, 5.73526506286725635e-08, -1.65046600386631326e-07, 2.36486584981321357e-07, 2.33931118032160157e-07, -2.44194012566367746e-07, -1.43678590802664985e-07, 9.48914191667427076e-08, 1.21360614002696821e-07, -7.09043987967561407e-08, -1.68019226975957281e-07, -4.35201457094080979e-07, -5.98907831772521604e-07, -4.65161150486892438e-07, -1.38265605187370966e-07, 1.33745103880755778e-07, 4.51845409088491579e-07, 1.35994264383043628e-06, 3.51461903846939094e-06, 6.94505388310062699e-06, 9.87001749308547005e-06, 9.78063053480582312e-06, 6.94986601956770755e-06, 3.73846955881163012e-06, 5.55779649857868208e-07, -4.58625481769558974e-06, -1.38113491630065255e-05, -2.7625890652416274e-05, -4.2002131522167474e-05, -4.79271329822950065e-05, -4.09700587624683976e-05, -2.76191731245489791e-05, -1.63038021128159016e-05, -9.40518020797753707e-06, -5.91190291743259877e-06, -4.71160001325188205e-06, -4.76982359032263048e-06, -1.00000476837158203, -3.44541308550105896e-06, -8.4634706354336231e-07, 2.91184096568031237e-06, 8.54594327392987907e-06, 1.75423119799233973e-05, 3.08725866489112377e-05, 4.53071588708553463e-05, 5.19091590831521899e-05, 4.52736530860420316e-05, 3.12265401589684188e-05, 1.8600298062665388e-05, 1.03989013950922526e-05, 5.74180376133881509e-06, 3.41157851835305337e-06, 2.53580333264835645e-06, 2.29374745686072856e-06, 1.94721269508590922e-06, 1.32890613713243511e-06, 7.27643850950698834e-07, 3.2928195992099063e-07, 1.06436914393270854e-07, -9.02266563684861467e-08, -1.21631572369551577e-07, -1.07079564770629077e-07, -6.90282675464004569e-08, -8.67783498392782349e-08, -1.60688955475052353e-07, 1.80218677314769593e-07, 1.85124264362457325e-07, -2.1495036151009117e-07, -1.29898495515590184e-07, 8.12773279790235392e-08, -3.99801400874366664e-08, -5.22101473166003416e-08, 5.89384576699103491e-08, 1.00275983072606323e-07, 2.00968202079820912e-07, 5.18685851602640469e-07, 6.78312630952859763e-07, 3.88045691579463892e-07, -2.303779780277182e-07, -8.67602750531659694e-07, -1.53430084992578486e-06, -2.75559909823641647e-06, -5.3953076530888211e-06, -9.18312798603437841e-06, -1.12583184090908617e-05, -8.9868017312255688e-06, -3.57797034666873515e-06, 2.30083787755575031e-06, 8.34175261843483895e-06, 1.64603479788638651e-05, 2.87602724711177871e-05, 4.32708911830559373e-05, 5.11419784743338823e-05, 4.53869688499253243e-05, 3.08624294120818377e-05, 1.7148586266557686e-05, 8.08573349786456674e-06, 2.73850855592172593e-06, -6.45607201477105264e-07, -3.12705810756597202e-06, 0.99999535083770752, -4.90130241814767942e-06, -4.79530035590869375e-06, -5.83318887947825715e-06, -9.3276503321249038e-06, -1.63808545039501041e-05, -2.75683250947622582e-05, -4.00533317588269711e-05, -4.59821530967019498e-05, -4.02143996325321496e-05, -2.75503734883386642e-05, -1.60249928740086034e-05, -8.74779561854666099e-06, -5.03858700540149584e-06, -3.51189419234287925e-06, -2.95671475214476231e-06, -2.54872566074482165e-06, -1.97318559003178962e-06, -1.33061064389039529e-06, -7.98609562480123714e-07, -4.28521616413490847e-07, -1.85414975817366212e-07, 8.33057782756441156e-08, 1.34507132543149055e-07, 1.27458193333040981e-07, 8.99885677085876523e-08, 5.18590113074424153e-08, -1.14266271111773676e-07, -1.54435156218823977e-07, 1.31062463992748235e-07, 1.12484187297923199e-07, -9.91915456438619003e-08, -2.08946872248816362e-07, -9.97666091961946222e-08, 6.00893699242988077e-08, 6.84224730207461107e-08, 5.44890426112942805e-08, 4.92702660892518907e-08, -1.08755578764885286e-07, -2.5124191438408161e-07, -2.70749922037794022e-07, -2.1446912512601557e-07, -2.5128616698566475e-07, -4.51431276360381162e-07, -5.45265834261954296e-07, -1.58472701627943025e-07, 7.81119524617679417e-07, 2.09487257052387577e-06, 3.67801089851127472e-06, 5.70641304875607602e-06, 8.129486559482757e-06, 9.66463085205759853e-06, 8.75025671120965853e-06, 5.38463109478470869e-06, 1.97394811607409792e-07, -7.26036523701623082e-06, -1.82626226887805387e-05, -3.32353483827318996e-05, -4.8315414460375905e-05, -5.45272232557181269e-05, -4.70334889541845769e-05, -3.19235223287250847e-05, -1.77992606040788814e-05, -7.41398844184004702e-06, 3.54421274550986709e-07, 6.92662933943211101e-06, 1.232808153872611e-05, -0.999985158443450928, 1.3493985534296371e-05, 1.04491045931354165e-05, 8.69766790856374428e-06, 9.98134783003479242e-06, 1.51487192852073349e-05, 2.43510130530921742e-05, 3.47866662195883691e-05, 3.96913164877332747e-05, 3.48660032614134252e-05, 2.42882360907969996e-05, 1.44563919093343429e-05, 7.93565777712501585e-06, 4.41840802523074672e-06, 3.06466745314537548e-06, 2.89868103209300898e-06, 2.85651321974000894e-06, 2.33635114454955328e-06, 1.52840709688462084e-06, 8.44058092752675293e-07, 4.08392793360690121e-07, 1.56548537688649958e-07, -8.02946544808946783e-08, -1.29824371697395691e-07, -1.30179600432711595e-07, -9.56326644541150017e-08, -5.86806514490945119e-08, -1.25008369877832592e-07, -1.32313488165891613e-07, 1.79015884782529611e-07, 1.15100213804453233e-07, -1.28292668932772358e-07, -2.16306759170947771e-07, -7.30881524191318022e-08, 7.28226510204876831e-08, 5.53624062149538076e-08, -6.09506187743136252e-08, -7.08539289462351007e-08, 5.34171569199770602e-08, 7.81365514512799564e-08, -6.80152894005914277e-08, -1.5881077786161768e-07, 2.79026068028542795e-07, 5.48688319668144686e-07, 5.36016727892274503e-07, 2.84156556062953314e-07, 1.53911344114021631e-07, 1.72419973409887461e-07, -2.41218316432423308e-07, -1.65774974902888061e-06, -4.09689073421759531e-06, -7.09743881088797934e-06, -9.65851995715638623e-06, -1.01405776149476878e-05, -7.66245557315414771e-06, -3.27653083331824746e-06, 1.71120188952045282e-06, 7.86318923928774893e-06, 1.74504166352562606e-05, 3.24692664435133338e-05, 4.95319727633614093e-05, 5.76845595787744969e-05, 4.99604939250275493e-05, 3.31255287164822221e-05, 1.75899313035188243e-05, 6.47917795504326932e-06, -2.02569003704411443e-06, -1.00147426564944908e-05, -1.73480457306141034e-05, 0.999979019165039062, -1.8955974155687727e-05, -1.41119280669954605e-05, -1.06221477835788392e-05, -1.05058479675790295e-05, -1.43645847856532782e-05, -2.21853570110397413e-05, -3.12882366415578872e-05, -3.53965770045761019e-05, -3.07625050481874496e-05, -2.12314535019686446e-05, -1.2705494555120822e-05, -7.25517429600586183e-06, -4.35212177762878127e-06, -3.1570111787004862e-06, -2.9091183932905551e-06, -2.81242819255567156e-06, -2.34605772675422486e-06, -1.60933348070102511e-06, -9.45648309880198212e-07, -4.86989449655084172e-07, -1.89767661140649579e-07, 1.20915103707375238e-07, 1.6122096724302537e-07, 1.41817821486256435e-07, 9.48322451677086065e-08, 6.20296916054030589e-08, -1.40161276362960052e-07, -1.39239816121516924e-07, 2.38406713037875306e-07, 1.74616985759712406e-07, -1.05359468705046311e-07, -2.12209499750315445e-07, 1.1032503977048691e-07, 7.26163023045955924e-08, 7.92232057733599504e-08, 1.28929144693756825e-07, -2.17621405340651108e-07, -1.7696443421755248e-07, -2.3090663603397843e-07, -6.97882114764070138e-07, -7.19805996141076321e-07, 5.53614029286109144e-07, 6.25803863840701524e-07, 8.51872243856632849e-07, 2.41675661527551711e-06, 5.67904726267443039e-06, 9.23597508517559618e-06, 1.05662866189959459e-05, 8.55958387546706945e-06, 4.25910866397316568e-06, -1.4331201327877352e-06, -8.98809594218619168e-06, -1.96627461264142767e-05, -3.45089174516033381e-05, -5.05113821418490261e-05, -5.80911619181279093e-05, -5.06928336108103395e-05, -3.40981314366217703e-05, -1.8027445548796095e-05, -5.82593338549486361e-06, 3.96390760215581395e-06, 1.32879285956732929e-05, 2.18150253203930333e-05, -0.999974071979522705, 2.32217935263179243e-05, 1.68581900652498007e-05, 1.18089146781130694e-05, 1.04448881756979972e-05, 1.32502855194616131e-05, 2.00345220946474001e-05, 2.82467444776557386e-05, 3.20532344630919397e-05, 2.78789157164283097e-05, 1.91457111213821918e-05, 1.1309849469398614e-05, 6.37265520708751865e-06, 3.88554644814576022e-06, 3.03202909890387673e-06, 3.01091540677589364e-06, 2.98787358588015195e-06, 2.46910826717794407e-06, 1.64471339303418063e-06, 9.30503233576018829e-07, 4.72690487640647916e-07, 2.08774920906762418e-07, -7.81882363298791461e-08, -1.45392192507642903e-07, -1.48014819956188148e-07, -1.12036282473582105e-07, -7.12562524540771847e-08, 5.70184681691898732e-08, 1.01804552343764954e-07, -1.19896768069338577e-07, -1.504046878153531e-07, 2.56655141583905788e-07, 2.15134818404294492e-07, -7.01309375017444836e-08, -2.07178032951560454e-07, 1.51585709318169393e-07, 9.66233670851579518e-08, -6.4020412082754774e-08, 5.13661966294876038e-08, 1.30300776390868123e-07, -1.78265821659806534e-07, -1.3960433875581657e-07, 9.95221256516742869e-08, 2.98222886385701713e-07, 2.77572638651690795e-07, 1.05534518013428169e-07, 2.07918276373675326e-07, 7.6699564033333445e-07, 9.70429027802310884e-07, -1.54096949245285941e-06, -2.73176442533440422e-06, -3.68152745977567974e-06, -5.47698482478153892e-06, -8.30575572763336822e-06, -9.9216895250719972e-06, -8.1694051914382726e-06, -3.97010671804309823e-06, 1.12042948785529006e-06, 7.83868290454847738e-06, 1.82629228220321238e-05, 3.35548756993375719e-05, 4.99718480568844825e-05, 5.736445018555969e-05, 4.95927415613550693e-05, 3.31024639308452606e-05, 1.75704954017419368e-05, 5.91841899222345091e-06, -3.52515348822635133e-06, -1.26442137116100639e-05, -2.09587069548433647e-05, 0.999975085258483887, -2.24398609134368598e-05, -1.65852779900887981e-05, -1.197704750666162e-05, -1.06902407424058765e-05, -1.31318574858596548e-05, -1.92616644199006259e-05, -2.69658830802654848e-05, -3.08445341943297535e-05, -2.71762710326584056e-05, -1.88709382200613618e-05, -1.12060824903892353e-05, -6.30867180007044226e-06, -3.83011547455680557e-06, -2.96487519335641991e-06, -2.91148398900986649e-06, -2.88200885734113399e-06, -2.4151156594598433e-06, -1.65513347383239307e-06, -9.59585122473072261e-07, -4.70910265448765131e-07, -1.65659145068275393e-07, 1.18555796291275328e-07, 1.57460547711707477e-07, 1.3813470900458924e-07, 9.06284682855584833e-08, 5.62946631532668107e-08, 7.20779809171290253e-08, 6.67826256517400907e-08, -9.25372489746223437e-08, -1.61677931487247406e-07, 2.42930326521673123e-07, 2.15116671142823179e-07, -6.36921981822524685e-08, -2.37141222214631853e-07, -6.85098413555351726e-08, 1.52064103531301953e-07, 1.19163090062102128e-07, -5.22380680934020347e-08, 1.46248808619020565e-07, 8.73247927302145399e-08, -7.35804732698852604e-08, -1.00972890493267187e-07, 1.61184246394441288e-07, -3.42495923177921213e-07, -5.76902039028936997e-07, -2.62600451605976559e-07, 2.08883975005846878e-07, -8.75041337167203892e-08, -8.05310548912530066e-07, -5.22594064022996463e-07, 1.286427163904591e-06, 3.97550775232957676e-06, 6.71490897730109282e-06, 8.84231303643900901e-06, 9.45493229664862156e-06, 7.67912479204824194e-06, 3.76470620722102467e-06, -1.44138448376907036e-06, -8.25002007331931964e-06, -1.82553085323888808e-05, -3.27508059854153544e-05, -4.85357850266154855e-05, -5.59249456273391843e-05, -4.86283242935314775e-05, -3.25880464515648782e-05, -1.72986183315515518e-05, -5.83707605983363464e-06, 3.34694436787685845e-06, 1.21776556625263765e-05, 2.02760529646184295e-05, -0.999975919723510742, 2.13358871405944228e-05, 1.52266957229585387e-05, 1.06607640191214159e-05, 9.87177008937578648e-06, 1.30300259115756489e-05, 1.94971544260624796e-05, 2.67245068243937567e-05, 2.97963033517589793e-05, 2.59229145740391687e-05, 1.80767874553566799e-05, 1.08837512016179971e-05, 6.17038267591851763e-06, 3.71786654795869254e-06, 2.88171190732100513e-06, 2.88520641333889216e-06, 2.87346301774960011e-06, 2.36958703681011684e-06, 1.58522323090437567e-06, 9.20496972867113072e-07, 4.8688872311686282e-07, 2.1724969201386557e-07, -8.32221189739357214e-08, -1.48703904301328294e-07, -1.50066057358344551e-07, -1.08353653160975227e-07, -5.74080019077882753e-08, 4.90521401275145763e-08, 4.93893956843294291e-08, -1.6217666143347742e-07, 2.20253483007581963e-07, 2.06205399422287883e-07, -2.44001597593523911e-07, -1.28348801808897406e-07, 1.00164250227408047e-07, 1.0912342673918829e-07, -6.13793105230797664e-08, 7.27047364534882945e-08, -9.74560805389046436e-08, -1.18767580659095984e-07, 1.70151437828280905e-07, 1.24089098108015605e-07, -4.57419666588521068e-08, -4.97994427917092253e-08, 4.46347513616274227e-07, 1.14748752366722329e-06, 9.5354488394150394e-07, -2.94625948527027504e-07, -1.1904493248948711e-06, -1.06872005289915251e-06, -9.66925426837406121e-07, -2.24240716306667309e-06, -5.32954481968772598e-06, -8.84296787262428552e-06, -1.00961306088720448e-05, -7.88339457358233631e-06, -3.6041665225639008e-06, 1.45361184422654333e-06, 7.97476695879595354e-06, 1.77894362423103303e-05, 3.21113220707047731e-05, 4.76252316730096936e-05, 5.47671770618762821e-05, 4.75110027764458209e-05, 3.18191196129191667e-05, 1.69844570336863399e-05, 5.98999622525298037e-06, -2.604318069643341e-06, -1.05778271972667426e-05, -1.78130467247683555e-05, 0.999978423118591309, -1.99649184651207179e-05, -1.50695441334391944e-05, -1.0689121154427994e-05, -9.12995892576873302e-06, -1.14668755486491136e-05, -1.79124090209370479e-05, -2.58924410445615649e-05, -2.95424670184729621e-05, -2.55689246841939166e-05, -1.74969482031883672e-05, -1.04239434222108684e-05, -5.98890801484230906e-06, -3.69153030987945385e-06, -2.84404814010486007e-06, -2.7873895760421874e-06, -2.78477773463237099e-06, -2.34612321037275251e-06, -1.59224646267830394e-06, -9.04681201063795015e-07, -4.40760885567215155e-07, -1.61570639534147631e-07, 9.61540962407525512e-08, 1.3343256455300434e-07, 1.24507451459976437e-07, 9.47701295217484585e-08, 6.59147261217185587e-08, -1.35217646857199725e-07, 1.96852809608571988e-07, 1.92872818161049508e-07, -2.14964558153951657e-07, -1.41982539503260341e-07, 5.16813578599339962e-08, 8.17707217493079952e-08, 4.72556536124102422e-08, -7.05769522824084561e-08, -6.19140223534486722e-08, 5.94016107413608552e-08, 1.46376621046329092e-07, -1.56405207007992431e-07, -2.55229650747423875e-07, -5.66809390534217528e-08, 2.97797100756724831e-07, 1.40942063353577396e-07, -7.43497025723627303e-07, -1.23542463370540645e-06, -4.0456575334246736e-07, 1.18560865303152241e-06, 2.64594791588024236e-06, 3.90637205782695673e-06, 5.57185103389201686e-06, 7.79224228608654812e-06, 9.13523217604961246e-06, 7.88235502113820985e-06, 4.10486381952068768e-06, -1.15540422029880574e-06, -8.0190711742034182e-06, -1.79230246430961415e-05, -3.20537183142732829e-05, -4.73328254884108901e-05, -5.44898248335812241e-05, -4.74890875921119004e-05, -3.20313083648215979e-05, -1.72801774169784039e-05, -6.26853534413385205e-06, 2.41703924075409304e-06, 1.04996397567447275e-05, 1.74504293681820855e-05, -0.999979853630065918, 1.75004643097054213e-05, 1.28459787447354756e-05, 9.95444224827224389e-06, 9.76010687736561522e-06, 1.21130415209336206e-05, 1.71335013874340802e-05, 2.35484349104808643e-05, 2.69808206212474033e-05, 2.39418768614996225e-05, 1.66891950357239693e-05, 9.90019361779559404e-06, 5.58302917852415703e-06, 3.45302396453917027e-06, 2.78338802672806196e-06, 2.81987126982130576e-06, 2.80156450571666937e-06, 2.32320894610893447e-06, 1.57558201863139402e-06, 9.23508935102290707e-07, 4.8559496690359083e-07, 2.07010003805407905e-07, -1.09395408287582541e-07, -1.67204916579066776e-07, -1.48863435356361151e-07, -9.17150018153733981e-08, -7.38928846999442612e-08, -1.33667114710078749e-07, 1.50306647128672921e-07, 1.54382831851762603e-07, -1.81485276584680832e-07, -1.11226370336225955e-07, 8.6410324229291291e-08, -1.01847156486201129e-07, -7.18551120826305123e-08, 1.15277089207665995e-07, -1.3501471585186664e-07, -1.09292514594017121e-07, 1.89213224643935973e-07, 6.10467793649149826e-07, 7.43065470487636048e-07, 3.13907037252647569e-07, -1.81778332830617728e-07, 4.07687480219465215e-07, 3.34120244360747165e-07, -8.28601343982882099e-07, -3.13716350319737103e-06, -6.25536858933628537e-06, -8.96813617146108299e-06, -9.43213126447517425e-06, -7.09862433723174036e-06, -3.1985807709133951e-06, 1.54146005115762819e-06, 8.06969455879880115e-06, 1.81283830897882581e-05, 3.27436282532289624e-05, 4.84102456539403647e-05, 5.54976686544250697e-05, 4.80874950881116092e-05, 3.22766391036566347e-05, 1.74335109477397054e-05, 6.61560898151947185e-06, -1.56196995249047177e-06, -9.12936047825496644e-06, -1.6481544662383385e-05, 0.999979317188262939, -1.88955855264794081e-05, -1.31596270875888877e-05, -8.40392840473214164e-06, -7.36764513931120746e-06, -1.0220006515737623e-05, -1.59217743203043938e-05, -2.19292287511052564e-05, -2.42579244513763115e-05, -2.0971770936739631e-05, -1.46235597640043125e-05, -8.87791611603461206e-06, -5.1471765800670255e-06, -3.24126449413597584e-06, -2.65705352830991615e-06, -2.78110314866353292e-06, -2.85831515611789655e-06, -2.41895941144321114e-06, -1.63866695856995648e-06, -9.29705379348888528e-07, -4.58293470728676766e-07, -1.83716807100609003e-07, 7.18984409786571632e-08, 1.29745288290905592e-07, 1.41536048658963409e-07, 1.1557820300822641e-07, 7.38809688982655643e-08, -9.54219956383894896e-08, -1.26159946489678987e-07, 1.12956897169169679e-07, 9.65338742275889672e-08, -8.23052772602750338e-08, -1.76651141714501136e-07, -8.53387618349188415e-08, 8.26056663072449737e-08, -4.33983586844988167e-08, -1.07717397668238846e-07, -4.56557849304317642e-08, 1.07845735897171835e-07, 1.88418241009458143e-07, -1.4184526264671149e-07, -1.32056641177769052e-07, 9.40797448834018724e-08, 2.43646638864447596e-07, -5.99151405822340166e-07, -1.08082520000607474e-06, -8.58905195855186321e-07, 7.80018694968021009e-07, 1.31207627873664023e-06, 1.80234121671674075e-06, 2.78283687293878756e-06, 4.8633028200129047e-06, 7.80018126533832401e-06, 9.48267643252620474e-06, 7.90842204878572375e-06, 3.7038248592580203e-06, -1.60976333063445054e-06, -8.27827898319810629e-06, -1.8029035345534794e-05, -3.22067680826876312e-05, -4.76957502542063594e-05, -5.50222939637023956e-05, -4.80197486467659473e-05, -3.24592692777514458e-05, -1.75993500306503847e-05, -6.50672109259176068e-06, 1.97306599147850648e-06, 9.0156972873955965e-06, 1.43635206768522039e-05, -0.999983310699462891, 1.56666410475736484e-05, 1.26727163660689257e-05, 9.64072023634798825e-06, 8.07624928711447865e-06, 9.26887332752812654e-06, 1.38672030516318046e-05, 2.00370886886958033e-05, 2.30706173169892281e-05, 2.01388847926864401e-05, 1.38583245643530972e-05, 8.27453732199501246e-06, 4.80613425679621287e-06, 3.12226802634540945e-06, 2.65007656707894057e-06, 2.77674507742631249e-06, 2.80671815744426567e-06, 2.35296170103538316e-06, 1.61545790433592629e-06, 9.54963866206526291e-07, 4.92468188895145431e-07, 1.87885092373107909e-07, -1.29187043285128311e-07, -1.65762514825473772e-07, -1.36577341436350252e-07, -8.6809102128881932e-08, -1.04774066755908279e-07, -1.07835248286392016e-07, 1.53956435156032967e-07, 9.94396458509072545e-08, -1.07336738608410087e-07, -1.85596420010369911e-07, -6.83159200320915261e-08, 5.66781679367522884e-08, 5.08180519886991533e-08, 3.60468312976536254e-08, 4.78872941300778621e-08, -6.85969894220761489e-08, -1.48388679122035683e-07, -8.03288102702026663e-08, 8.01618043055896123e-08, 1.66814359658928879e-07, -1.94325991742516635e-07, -1.47195962085788778e-07, 1.82014545657693816e-07, 3.65866412721516099e-07, 1.25623984104095143e-07, -2.99493962074848241e-07, -3.8413904235312657e-07, 6.04777369517250918e-07, 7.39941185656789457e-07, 4.1254057236983499e-07, -3.49298687751797843e-07, -1.6844915080582723e-06, -3.61548768523789477e-06, -5.90459512750385329e-06, -7.91573529568267986e-06, -8.50816832098644227e-06, -6.90466686137369834e-06, -3.5196178487240104e-06, 1.04265996014873963e-06, 7.23733364793588407e-06, 1.63646200235234573e-05, 2.93076809612102807e-05, 4.3085117795271799e-05, 4.92887047585099936e-05, 4.26432197855319828e-05, 2.84601283055962995e-05, 1.50090027091209777e-05, 4.71442854177439585e-06, -4.38571305494406261e-06, -1.44626064866315573e-05, -2.42009973590029404e-05, 0.999971866607666016, -2.38116026594070718e-05, -1.62912274390691891e-05, -1.13628893814166076e-05, -1.03120810308610089e-05, -1.24216394397080876e-05, -1.72606469277525321e-05, -2.3234475520439446e-05, -2.61253790085902438e-05, -2.29306533583439887e-05, -1.59911960508907214e-05, -9.58002601691987365e-06, -5.43421901966212317e-06, -3.30345460497483145e-06, -2.57535566561273299e-06, -2.59689682025054935e-06, -2.62056823885359336e-06, -2.18130912799097132e-06, -1.45273065754736308e-06, -8.23595598831161624e-07, -4.24718280100933043e-07, -1.93211391774639196e-07, 6.29999092893740453e-08, 1.30799165276584972e-07, 1.38252246983938676e-07, 9.89839037401907262e-08, 4.77115449371012801e-08, 4.89778955170550034e-08, -1.17318968761992437e-07, -1.1357591489513652e-07, 2.04545202109329693e-07, 1.49964023421489401e-07, -8.82009985048171075e-08, -1.83219015070790192e-07, 8.47140171345017734e-08, 5.71517411174227163e-08, 2.85353340956362445e-08, 6.12032522440131288e-08, -1.66786819022490818e-07, -1.03631933257020137e-07, 7.00603450809467176e-08, 1.79447852133307606e-07, 7.28538509520149091e-08, -1.6777784139776486e-07, -1.57051189830781368e-07, 2.09436848308541812e-07, 3.92699092799375649e-07, -6.48766615540807834e-07, -8.6900661244726507e-07, -5.46922308330977103e-07, -1.83738038117553515e-07, -1.43921440098893072e-07, -1.26871739780654025e-07, 1.40696542416662851e-07, 5.06030119140632451e-07, 1.0637146488079452e-06, 2.3626728307135636e-06, 4.75250044473796152e-06, 7.45779334465623833e-06, 8.52408993523567915e-06, 6.83662074152380228e-06, 3.39881603395042475e-06, -5.95982271534012398e-07, -5.50106733498978429e-06, -1.26331724459305406e-05, -2.28952358156675473e-05, -3.40021506417542696e-05, -3.92498186556622386e-05, -3.4279557439731434e-05, -2.30630339501658455e-05, -1.22452347568469122e-05, -4.54685596196213737e-06, 3.7119895068826736e-07, 3.91174080505152233e-06, 7.52714186091907322e-06, -0.999989330768585205, 1.11685285446583293e-05, 8.98769758350681514e-06, 7.021299097687006e-06, 7.95214145909994841e-06, 1.28140336528304033e-05, 2.1325997295207344e-05, 3.06355032080318779e-05, 3.47845016221981496e-05, 3.03332672046963125e-05, 2.09991103474749252e-05, 1.25101241792435758e-05, 6.99222800903953612e-06, 4.00539465772453696e-06, 2.68344251708185766e-06, 2.25242456508567557e-06, 2.05325295610236935e-06, 1.68082453910756158e-06, 1.14860085886903107e-06, 6.60540933949960163e-07, 3.16041223413776606e-07, 1.02040225158361864e-07, -8.35173636914987583e-08, -1.03138020790538576e-07, -9.42326252584280155e-08, -7.56338494056763011e-08, 5.51940573245701671e-08, 8.2810757362494769e-08, -1.00347392617550213e-07, -1.23094991977268364e-07, 2.19858776517867227e-07, 1.82810879323369591e-07, -6.13313275721338869e-08, -1.82484527044834977e-07, 1.19429188316644286e-07, 8.1274428964661638e-08, 4.77231445472625637e-08, 1.13743880092442851e-07, -1.19739866022428032e-07, -1.00778386524780217e-07, 1.60866804321813106e-07, 6.94784176857865532e-08, -1.77318071337140282e-07, -2.31563177521820762e-07, 1.48599937688231876e-07, 4.5363026401901152e-07, 7.69834542779790354e-08, -5.88131058520957595e-07, -6.91344268943794305e-07, -6.6197337389439781e-08, 6.54113193832017714e-07, 7.80921538989787223e-07, 4.2719150883385737e-07, 1.52408773601564462e-07, -8.2082564745178388e-08, -6.40745042801427189e-07, -1.55710904437000863e-06, -2.81126244772167411e-06, -4.55280451205908321e-06, -6.50077026875806041e-06, -7.43168266126303934e-06, -6.31910234005772509e-06, -3.63992035090632271e-06, -3.91043300851379172e-07, 3.37967412633588538e-06, 8.43262478156248108e-06, 1.53564451466081664e-05, 2.26306565309641883e-05, 2.59130883932812139e-05, 2.27368636842584237e-05, 1.60881991178030148e-05, 1.001530654320959e-05, 5.56562372366897762e-06, 2.38658208218112122e-06, 7.83215114097401965e-07, 1.16891169454902411e-06, 1.00000226497650146, 1.77818265001405962e-06, -7.16581610049615847e-07, -4.1881335164362099e-06, -8.79657727637095377e-06, -1.61301268235547468e-05, -2.73284586000954732e-05, -3.96987816202454269e-05, -4.55323643109295517e-05, -3.99557175114750862e-05, -2.76895043498370796e-05, -1.63689092005370185e-05, -8.89252714841859415e-06, -4.72060492029413581e-06, -2.73624459623533767e-06, -1.92812990462698508e-06, -1.51439439832756761e-06, -1.10104292616597377e-06, -6.95276867190841585e-07, -4.00714696979775908e-07, -2.1750547318788449e-07, -9.69069660072818806e-08, 6.68277948534523603e-08, 9.85395445241010748e-08, 8.2714343818679481e-08, 5.43121068119489792e-08, 5.78496184289178927e-08, 5.41542206633494061e-08, -7.73016424204797659e-08, -1.32254399431985803e-07, 2.10617017160075193e-07, 1.85634846161519818e-07, -5.27173149578175071e-08, -2.0458256244637596e-07, -6.74891111884790007e-08, 1.18844937446738186e-07, 9.64523891866519989e-08, 9.99474494278729253e-08, -6.72812774382691714e-08, -7.75871527025628893e-08, 1.55797778234045836e-07, 8.69095515554363374e-08, -1.18583479036260542e-07, -1.99292841784881603e-07, 1.29971269302586734e-07, 5.13322220285772346e-07, 1.99004972500915756e-07, -5.91252728554536588e-07, -8.49670584557316033e-07, -3.09565706402281648e-07, 3.49757328876876272e-07, 3.6931925251337816e-07, -2.34940301879760227e-07, -6.38748019810009282e-07, -4.24265778065091581e-07, 4.03148419536591973e-07, 1.05334675026824698e-06, 2.27494456339627504e-06, 4.16922739532310516e-06, 6.18998774370993488e-06, 7.01024418958695605e-06, 5.8608129620552063e-06, 3.51103653883910738e-06, 1.01427963272726629e-06, -1.53895268795167794e-06, -4.71351722808321938e-06, -9.00521627045236528e-06, -1.36322823891532607e-05, -1.57517424668185413e-05, -1.33421490318141878e-05, -8.2930473581654951e-06, -3.86135889129946008e-06, -9.72136035670700949e-07, 1.6442446622022544e-06, 5.5755349421815481e-06, 1.04453883977839723e-05, -0.999986827373504639, 1.18562120405840687e-05, 9.16224598768167198e-06, 8.75323621585266665e-06, 1.2248559869476594e-05, 2.03489089471986517e-05, 3.33382849930785596e-05, 4.76692912343423814e-05, 5.42708730790764093e-05, 4.74861153634265065e-05, 3.29031863657291979e-05, 1.94851636479143053e-05, 1.05686158349271864e-05, 5.432189027487766e-06, 2.76898504125711042e-06, 1.5406349120894447e-06, 1.0015667157858843e-06, 6.75848411901824875e-07, 3.97500258486616076e-07, 1.83706347911538614e-07, 4.96044876285850478e-08, 3.66705670273859141e-08, -1.35147715241146216e-07, 1.92289093092767871e-07, 1.79109562736812222e-07, -2.09789249083769391e-07, -1.17990985870619625e-07, 7.2984796872788138e-08, 8.43119423166172055e-08, 5.621019383283965e-08, -6.21934930222778348e-08, -7.34179081973707071e-08, 1.30138602116858237e-07, 7.2099979320228158e-08, -9.50844594171940116e-08, -1.72955864741197729e-07, 7.33053511225989496e-08, 4.69030993599517387e-07, 3.13439528554226854e-07, -4.45545538241276518e-07, -8.06629543603776256e-07, -2.71915979510595207e-07, 5.40163114237657283e-07, 8.66711445723922225e-07, 5.42678037618316012e-07, 9.33920460965964594e-08, 2.10812160617024347e-07, 1.17462995774531009e-07, -3.62473031145782443e-07, -1.15709781312034465e-06, -2.3195359517558245e-06, -3.9631431718589738e-06, -5.75837157157366164e-06, -6.60914611216867343e-06, -5.71496411794214509e-06, -3.62443483936658595e-06, -1.30621481275738915e-06, 1.02115916433831444e-06, 3.70086240764067043e-06, 6.97877658240031451e-06, 1.02938593045109883e-05, 1.20083741421694867e-05, 1.08418053059722297e-05, 7.34904369892319664e-06, 3.03084516417584382e-06, -1.0773080703074811e-06, -4.63887772639282048e-06, -7.93665549281286076e-06, -1.12306370283477008e-05, 0.999986529350280762, -1.32174855025368743e-05, -1.12574825834599324e-05, -1.04544669738970697e-05, -1.32497943923226558e-05, -2.10633843380492181e-05, -3.42469174938742071e-05, -4.89905723952688277e-05, -5.58244682906661183e-05, -4.88496771140489727e-05, -3.37897763529326767e-05, -1.99153546418529004e-05, -1.07377554741105996e-05, -5.51133280168869533e-06, -2.8041606583428802e-06, -1.48011702094663633e-06, -8.29097814403212396e-07, -4.8263325425068615e-07, -2.80371295957593247e-07, -1.50459527503699064e-07, -5.13856868167295033e-08, -1.19519938834855566e-07, 1.71286714589768962e-07, 1.70078891414959799e-07, -1.72350340221782972e-07, -1.05708508613133745e-07, 9.63720125923828164e-08, -6.32096543995430693e-08, -5.83027208733710722e-08, 1.10398126196287194e-07, -8.02434527713558055e-08, -1.15023830460359022e-07, 9.08082569139878615e-08, 4.39749385350296507e-07, 4.27789871082495665e-07, -1.76352159542148001e-07, -6.35710421192925423e-07, -2.98826734024260077e-07, 3.95691813537268899e-07, 6.8338459868755308e-07, 3.22672349284403026e-07, -3.57044825705088442e-07, -7.57194300149421906e-07, -5.53479992504435359e-07, -5.0526715256182797e-08, 2.99268947401287733e-07, 5.39725022008497035e-07, 1.06337233773956541e-06, 2.19215939978312235e-06, 3.99938426198787056e-06, 5.92175365454750136e-06, 6.66666801407700405e-06, 5.52998653802205808e-06, 3.31095088768051937e-06, 1.02427384263137355e-06, -1.29498243950365577e-06, -4.25345251642283984e-06, -8.2637852756306529e-06, -1.22939973152824678e-05, -1.37524666570243426e-05, -1.1550268936844077e-05, -7.71196846471866593e-06, -4.19720072386553511e-06, -8.17294335320184473e-07, 3.30359171130112372e-06, 8.26882114779436961e-06, 1.27031362353591248e-05, -0.999985635280609131, 1.28425317598157562e-05, 1.03982420114334673e-05, 9.74418435362167656e-06, 1.2526048521976918e-05, 1.98805391846690327e-05, 3.21933839586563408e-05, 4.59402908745687455e-05, 5.22994996572379023e-05, 4.58044778497423977e-05, 3.17833801091182977e-05, 1.88126050488790497e-05, 1.0154775736737065e-05, 5.18760998602374457e-06, 2.65304606728022918e-06, 1.49592415255028754e-06, 9.58084797275660094e-07, 6.09605251611355925e-07, 3.37618899948211038e-07, 1.58278012918344757e-07, 5.72445131297172338e-08, -6.81334171304115443e-08, -1.16729118815328547e-07, 1.31595982111321064e-07, 1.36647642534626357e-07, -1.51665204839446233e-07, -9.34541830588386802e-08, 7.57078026936142123e-08, -7.30169062990171369e-08, -4.31801829847699992e-08, 1.11856351736605575e-07, -9.37764639274973888e-08, -9.35518400524415483e-08, 8.69202025910453813e-08, 3.16716949555484462e-07, 2.92925818712319597e-07, -1.28818797406893282e-07, -4.86772194108198164e-07, -2.39972195004156674e-07, 3.7315192003006814e-07, 7.22971890354529023e-07, 5.78906906412157696e-07, 1.46863115446649317e-07, -1.89592995525345032e-07, -8.44766674390484695e-08, 3.64234551852860022e-07, 5.67786912597512128e-07, 2.15532935499140876e-07, -4.44882488181974622e-07, -1.22251640277681872e-06, -2.27089162763149943e-06, -3.8296407183224801e-06, -5.64649280931917019e-06, -6.58507769912830554e-06, -5.69763778912601992e-06, -3.45962007486377843e-06, -8.95459891125938157e-07, 1.73368732703238493e-06, 4.87238457935745828e-06, 9.06546483747661114e-06, 1.37002143674180843e-05, 1.60246272571384907e-05, 1.38261648316984065e-05, 8.70598432811675593e-06, 3.85045541406725533e-06, 3.74067951725010062e-07, -2.5525557703076629e-06, -6.07249785389285535e-06, -1.00361885415622965e-05, 0.999987661838531494, -1.16262181109050289e-05, -9.54975166678195819e-06, -8.9595387180452235e-06, -1.16013443403062411e-05, -1.85115150088677183e-05, -3.00410138152074069e-05, -4.29116262239404023e-05, -4.88485311507247388e-05, -4.27222948928829283e-05, -2.95891077257692814e-05, -1.75237746589118615e-05, -9.53341896092751995e-06, -4.96549455419881269e-06, -2.61139030044432729e-06, -1.50733922055223957e-06, -9.94112497210153379e-07, -6.807479167036945e-07, -4.23318311959519633e-07, -2.16207993730677117e-07, -6.42271089645873872e-08, -8.63075442225635925e-08, -1.10772965911110077e-07, 9.76213669900971581e-08, 8.62029523318597057e-08, -6.59526193658166449e-08, -1.47908380654371285e-07, -7.17120727244946465e-08, 7.07204179661857779e-08, -9.09650168523512548e-08, -4.78752788524161588e-08, 6.15572020024046651e-08, 1.13925551659121993e-07, -1.25751526525164081e-07, -9.03489407733104599e-08, 1.11126972512920474e-07, 2.5392358793396852e-07, 1.2539373983599944e-07, -2.39452845107734902e-07, -4.63993870880585746e-07, -2.24058837261509325e-07, 2.67643542883888585e-07, 5.45885768588050269e-07, 4.39572460209092242e-07, 5.50026797441205417e-08, -4.24779528884755564e-07, -7.15684450369735714e-07, -5.65361517601559171e-07, -1.56275874019229377e-07, 7.23688486914397799e-08, 1.12441767896598321e-07, 3.45103217114228755e-07, 1.04319656202278566e-06, 2.30261730393976904e-06, 4.07475044994498603e-06, 5.82300026508164592e-06, 6.44375313640921377e-06, 5.35352864972082898e-06, 3.20814797305501997e-06, 7.94866480191558367e-07, -1.92636343854246661e-06, -5.4565762184211053e-06, -1.00696133813471533e-05, -1.47821501741418615e-05, -1.70127586898161098e-05, -1.50861123984213918e-05, -1.03970787677098997e-05, -5.40025212103500962e-06, -1.12810459995671408e-06, 2.57706255979428533e-06, 6.14712735114153475e-06, 9.42324459174415097e-06, -0.999988913536071777, 1.03319543995894492e-05, 8.55023972690105438e-06, 8.1512198448763229e-06, 1.07368105091154575e-05, 1.72843501786701381e-05, 2.80938402283936739e-05, 4.01248980779200792e-05, 4.57148016721475869e-05, 4.00529752369038761e-05, 2.7777756258728914e-05, 1.64342272910289466e-05, 8.90795308805536479e-06, 4.64384447695920244e-06, 2.51295728048717137e-06, 1.55799750700680306e-06, 1.09036977846699301e-06, 7.44690737519704271e-07, 4.55896071116512758e-07, 2.55578044061621767e-07, 1.29920039171338431e-07, 3.89329528616144671e-08, -1.32301835265025147e-07, -9.40704794061275607e-08, -9.34718542566770338e-08, 1.35716035742916574e-07, 9.23156520116208412e-08, -8.32807458550632873e-08, -1.51504352174924861e-07, -5.25326697697892087e-08, 5.63367628103605966e-08, -1.06961977053288138e-07, -5.56399442075417028e-08, 6.8668221331336099e-08, 1.37633278995963337e-07, -1.29938186432809744e-07, -8.8989231983305217e-08, 1.56104221105124452e-07, 2.64672593175419024e-07, -3.94185462937457487e-07, -5.54354244286514586e-07, -2.81484574315982172e-07, 1.27639921743138984e-07, 3.21447998885560082e-07, 2.93959828923107125e-07, 1.47563440577869187e-07, -8.99932715014983842e-08, -2.69698830379638821e-07, -1.26392535548802698e-07, 3.18166939905495383e-07, 5.96553718423820101e-07, 3.8838606997160241e-07, -8.15627316796962987e-08, -5.45183354461187264e-07, -1.10944665721035562e-06, -2.09585664379119407e-06, -3.73788179786060937e-06, -5.64214315090794116e-06, -6.5260078372375574e-06, -5.48843854630831629e-06, -3.1683109682489885e-06, -5.92943081301200436e-07, 2.17757337850343902e-06, 5.77659739064984024e-06, 1.06650577436084859e-05, 1.57262838911265135e-05, 1.78599675564328209e-05, 1.53425880853319541e-05, 1.0284844393027015e-05, 5.54873349756235257e-06, 1.84428813554404769e-06, -1.40482711685763206e-06, -4.70316945211379789e-06, -7.76540946390014142e-06, 0.999990642070770264, -8.88553131517255679e-06, -7.5666443990485277e-06, -7.4691665759019088e-06, -1.00566248875111341e-05, -1.63393178809201345e-05, -2.66578845184994861e-05, -3.81019453925546259e-05, -4.338420694693923e-05, -3.79950251954142004e-05, -2.63800666289171204e-05, -1.56685400725109503e-05, -8.55095549923134968e-06, -4.48945047537563369e-06, -2.43684598899562843e-06, -1.52638017425488215e-06, -1.11210704289987916e-06, -8.00363409325655084e-07, -4.96281927553354762e-07, -2.54954443335009273e-07, -1.01955485831695114e-07, -1.39592266634736006e-08, 1.36579885179344274e-07, -9.09456261410923616e-08, -9.2633158033095242e-08, 1.7542413388582645e-07, 1.28849123370855523e-07, -7.34344567376865598e-08, -1.534198901254058e-07, 7.74107888901198748e-08, 5.66455007344757178e-08, 7.48917585724484525e-08, -1.1445087011452415e-07, -7.16002972467322252e-08, 1.35710678250688943e-07, -1.38349705025575531e-07, -1.19622441729916318e-07, 1.79148656798133743e-07, 3.30033145701236208e-07, -4.51673457746437634e-07, -5.5864654768811306e-07, -1.84375835488026496e-07, 2.32292606483497366e-07, 2.77470348919450771e-07, 1.15025720504036144e-07, -9.50800327359502262e-08, -3.09772246964712394e-07, -4.38464155649853637e-07, -3.56261352862929925e-07, -2.02817645345021447e-07, -1.76167148424610787e-07, -2.12111970654405013e-07, -6.86680365902248013e-08, 3.78052163796382956e-07, 1.14040255994041217e-06, 2.27871078095631674e-06, 3.85053772333776578e-06, 5.49224341739318334e-06, 6.18800868323887698e-06, 5.23127573615056463e-06, 3.13343571178847924e-06, 7.27045403436932247e-07, -1.94905237549392041e-06, -5.46631918041384779e-06, -1.02774183687870391e-05, -1.53797591337934136e-05, -1.7711934560793452e-05, -1.53347264131298289e-05, -1.01975201687309891e-05, -5.31249270352418534e-06, -1.58629779889452038e-06, 1.56274813889467623e-06, 4.75816614198265597e-06, 7.74033742345636711e-06, -0.999990761280059814, 8.58207749843131751e-06, 7.21436254025320522e-06, 7.1607814788876567e-06, 9.75273542280774564e-06, 1.5891040675342083e-05, 2.59030111919855699e-05, 3.70002489944454283e-05, 4.21278964495286345e-05, 3.68893197446595877e-05, 2.55853938142536208e-05, 1.51604081111145206e-05, 8.25572533358354121e-06, 4.35047559221857227e-06, 2.39933410739467945e-06, 1.52314339629811002e-06, 1.09563632122444687e-06, 7.76109061462193495e-07, 4.91401920044154394e-07, 2.67632060513278702e-07, 1.01554654463598126e-07, 5.40858628994556057e-08, 6.65524240162085334e-08, -9.19780944741432904e-08, -1.0933611349628336e-07, 1.80726388521179615e-07, 1.42241987077795784e-07, -1.78987420440535061e-07, 9.26727068417676492e-08, 6.64806876216061937e-08, 1.06302550761938619e-07, -7.50896660406397132e-08, -6.4322421167162247e-08, 1.29744975652101857e-07, -1.31286967075538996e-07, -1.61944143428627285e-07, 1.45299623000028078e-07, 3.80694302748452174e-07, 6.58449934576310625e-08, -4.8786938577904948e-07, -6.10734844030957902e-07, -1.7175578648220835e-07, 3.25765341813166742e-07, 3.4012208516287501e-07, -1.32767311811221589e-07, -7.00960143262818747e-08, -8.02696007440317771e-08, -1.21534412755863741e-07, 2.19830994296899007e-07, 4.20145596535803634e-07, 3.99692765995496302e-07, 1.79297501290420769e-07, -9.59669961275722017e-08, -4.31522693133956636e-07, -1.01444697975239251e-06, -2.07028415388776921e-06, -3.70635734725510702e-06, -5.48193338545388542e-06, -6.23430150881176814e-06, -5.19881950822309591e-06, -2.95633708446985111e-06, -4.4642436591857404e-07, 2.19684534386033192e-06, 5.49486321688164026e-06, 9.95755181065760553e-06, 1.48026101669529453e-05, 1.72011223185108975e-05, 1.51129597725230269e-05, 1.0178527190873865e-05, 5.34965920451213606e-06, 1.71229407897044439e-06, -1.17303989100037143e-06, -3.96961740989354439e-06, -6.6558955040818546e-06, 0.999991834163665771, -7.84597614256199449e-06, -6.7472487899067346e-06, -6.78591641189996153e-06, -9.33947649173205718e-06, -1.53455894178478047e-05, -2.51274614129215479e-05, -3.59528385160956532e-05, -4.09585845773108304e-05, -3.58937941200565547e-05, -2.49407712544780225e-05, -1.48206681842566468e-05, -8.08433560450794175e-06, -4.24276731791906059e-06, -2.31595709010434803e-06, -1.4716234773004544e-06, -1.07909136204398237e-06, -7.69764540109463269e-07, -4.76590543030397384e-07, -2.58616211112894234e-07, -1.24693215752813558e-07, -3.61054297570717608e-08, 1.40004388526904222e-07, 5.23068344193688972e-08, -6.16034112610464035e-09, -7.41557215633292799e-08, 1.89580305232084356e-07, 1.58781475079194934e-07, -1.87334947554518294e-07, -6.953535347520301e-08, 9.34802599772410758e-08, 7.7644287443945359e-08, 8.31284623359351826e-08, -4.21242809522937023e-08, -4.97148526790169853e-08, 1.23235665228094149e-07, -1.02232675658342487e-07, -1.6572961669680808e-07, 9.37401054557085445e-08, 3.9705312815385696e-07, 1.54279007347213337e-07, -4.6097895278762735e-07, -6.51276309326931369e-07, -1.92768268902909767e-07, 3.93165009882068262e-07, 5.04449928939720849e-07, 1.0890306612054701e-07, -2.1347720746689447e-07, -1.60131023108078807e-07, -5.95958340454671998e-08, -1.31754319454557844e-07, -1.69204341204931552e-07, -1.94561891930788988e-07, -2.52840976600055001e-07, -3.11568584265842219e-07, -2.54693020451668417e-07, 4.07770528454420855e-07, 1.06903132746083429e-06, 2.10537928069243208e-06, 3.60951116817886941e-06, 5.2118080020591151e-06, 5.91171829000813887e-06, 5.06281367051997222e-06, 3.12937959279224742e-06, 7.77363879933545832e-07, -2.00024192054115701e-06, -5.5962368605833035e-06, -1.01845216704532504e-05, -1.47462096720119007e-05, -1.67380439961561933e-05, -1.46426764331408776e-05, -1.00941988421254791e-05, -5.62426839678664692e-06, -2.16140801967412699e-06, 5.47714364529383602e-07, 2.91403284791158512e-06, 4.90045476908562705e-06, -0.999994099140167236, 5.67483994018402882e-06, 5.20582261742674746e-06, 5.87822705711005256e-06, 8.77522143127862364e-06, 1.48010303746559657e-05, 2.43510676227742806e-05, 3.48665817000437528e-05, 3.97291587432846427e-05, 3.48042485711630434e-05, 2.41548459598561749e-05, 1.43349097925238311e-05, 7.83143059379654005e-06, 4.14537998949526809e-06, 2.29388206207659096e-06, 1.46075558404845651e-06, 1.05976187114720233e-06, 7.56186523176438641e-07, 4.71515136268862989e-07, 2.42988789977971464e-07, 8.40283789216300647e-08, -9.59562314051254361e-08, 1.73461529584528762e-07, 1.56336668055701011e-07, -1.83784990781532542e-07, -1.03903204262678628e-07, 6.15171273921077955e-08, 7.0943819707736111e-08, 4.5221696609587525e-08, -4.07834228610681748e-08, -4.60981155470108206e-08, 1.08763309469850356e-07, -7.41797450132253289e-08, -1.29538364035397535e-07, 7.1540767976330244e-08, 3.87707501658951514e-07, 2.6515209583521937e-07, -3.39756525136181153e-07, -6.39095333099248819e-07, -2.38832882359929499e-07, 3.70890404610690894e-07, 5.77514356336905621e-07, 2.39266228163614869e-07, -2.09436635145721084e-07, -2.7901936050511722e-07, -4.64407783340448077e-08, 1.11454966145174694e-07, 9.63090798222765443e-08, 9.15600679718409083e-08, 2.25383615770624601e-07, 3.60171895863459213e-07, 3.61988242048028042e-07, 1.93529174907780543e-07, -7.60011573675001273e-08, -4.37717005752347177e-07, -1.02774981769471196e-06, -2.05123956220631953e-06, -3.62981427315389737e-06, -5.33637512489804067e-06, -5.98315637034829706e-06, -4.85402506456011906e-06, -2.69071074399107601e-06, -4.51573754389755777e-07, 1.96751489056623541e-06, 5.35864728590240702e-06, 1.02388967206934467e-05, 1.54263161675771698e-05, 1.76998601091327146e-05, 1.52719112520571798e-05, 1.03291258710669354e-05, 5.91817661188542843e-06, 2.94725714411470108e-06, 9.85778569884132594e-07, -5.06780622799851699e-07, -1.75267450686078519e-06, 0.999997437000274658, -2.7902553938474739e-06, -3.07199957205739338e-06, -4.36094887845683843e-06, -7.59679687689640559e-06, -1.36593926072237082e-05, -2.29257002501981333e-05, -3.29860013152938336e-05, -3.76367970602586865e-05, -3.3021358831319958e-05, -2.29705055971862748e-05, -1.36564403874217533e-05, -7.45180705052916892e-06, -3.92929496229044162e-06, -2.18737523027812131e-06, -1.44294347137474688e-06, -1.09491793409688398e-06, -7.9929941421141848e-07, -5.04060949424456339e-07, -2.69226347882067785e-07, -1.03541317741928651e-07, 2.495040618555322e-08, -1.07706526364381716e-07, 1.46830643643625081e-07, 1.45028423048643162e-07, -1.52017420873562514e-07, -9.33849690909482888e-08, 7.9963534460603114e-08, -4.96835674823614681e-08, -4.36999343378374761e-08, 8.86842883573990548e-08, -6.73503706138944835e-08, -9.15704063686462177e-08, 7.16509234166551323e-08, 3.40505835083604325e-07, 3.21590789553738432e-07, -1.57307070480783295e-07, -5.11250675572227919e-07, -2.31149186902257497e-07, 3.34986935968117905e-07, 5.91491698287427425e-07, 3.60591315029523685e-07, -9.12167195110669127e-08, -3.19387396530146361e-07, -1.41377100248973875e-07, 1.51060902453536983e-07, 2.08509447929827729e-07, 5.47071259404674493e-08, -1.01990238476901141e-07, -1.70861554238399549e-07, -1.92392732856205839e-07, -2.41617243545988458e-07, -3.12494989884726238e-07, -2.84715810039415373e-07, 3.76818292124880827e-07, 1.04244077192561235e-06, 2.04376010515261441e-06, 3.47863010574656073e-06, 5.07641743752174079e-06, 5.88700140724540688e-06, 5.06377728015650064e-06, 2.89760987470799591e-06, 2.45327782977255993e-07, -2.61738523477106355e-06, -6.11915538684115745e-06, -1.08142903627594933e-05, -1.59621667989995331e-05, -1.86096149263903499e-05, -1.65704350365558639e-05, -1.16095807243254967e-05, -6.99445172358537093e-06, -4.12408417105325498e-06, -2.90030106953054201e-06, -2.90796378976665437e-06, -3.47534842148888856e-06, -1.00000357627868652, -2.56643875218287576e-06, -5.63410992526769405e-07, 2.17180854633625131e-06, 6.11752284385147505e-06, 1.22563496915972792e-05, 2.1161578843020834e-05, 3.06973270198795944e-05, 3.50881455233320594e-05, 3.0765258998144418e-05, 2.13839975913288072e-05, 1.27399898701696657e-05, 7.01567751093534753e-06, 3.77371452486841008e-06, 2.15972886508097872e-06, 1.45433386933291331e-06, 1.1150614227517508e-06, 8.25578581498120911e-07, 5.31563330241624499e-07, 2.93522873562324094e-07, 1.32758842141811328e-07, 2.68056687957596296e-08, -1.37462407678867748e-07, -1.18050245134782017e-07, 9.85606689596352226e-08, 1.07403813842665841e-07, -1.3580016400283057e-07, -8.24470305360591738e-08, 6.42234212477887922e-08, -6.29216359016027127e-08, 7.45135864121948543e-08, -8.54734167887727381e-08, -7.449375516443979e-08, 7.7493773176229297e-08, 2.60775863125672913e-07, 2.37943950764929468e-07, -9.5672959332659957e-08, -3.7114060091880674e-07, -1.72380296703522617e-07, 2.98739337267761584e-07, 5.45141801922000013e-07, 3.91577941627474502e-07, -3.35941564344466315e-07, -3.32637938527113874e-07, 2.44708274976801476e-07, 1.89832036312509445e-07, 1.07383534952987247e-07, 2.89209708626003703e-07, 3.8885949038558465e-07, 3.1195207839118666e-07, 1.20140555281977868e-07, -9.76851026734948391e-08, -4.07362392707000254e-07, -9.95852701635158155e-07, -2.04612661036662757e-06, -3.58539182343520224e-06, -5.12676251673838124e-06, -5.66842527405242436e-06, -4.72098327009007335e-06, -2.81988013739464805e-06, -4.91800449253787519e-07, 2.44489842771145049e-06, 6.48864852337283082e-06, 1.18364423542516306e-05, 1.72305080923251808e-05, 1.95905504369875416e-05, 1.71824431163258851e-05, 1.21789980767061934e-05, 7.83620271249674261e-06, 5.43887654202990234e-06, 4.88568866785499267e-06, 5.79446304982411675e-06, 7.33453771317726932e-06, 1.0000079870223999, 6.58849467072286643e-06, 3.59826822204922792e-06, -1.36875485168275191e-07, -4.69655697088455781e-06, -1.09397278720280156e-05, -1.94790500245289877e-05, -2.84719189949100837e-05, -3.26602930726949126e-05, -2.87151160591747612e-05, -1.99809819605434313e-05, -1.18737816592329182e-05, -6.49708363198442385e-06, -3.48838784702820703e-06, -2.05291621568903793e-06, -1.47778212067350978e-06, -1.19475669180246769e-06, -8.93563367299066158e-07, -5.7047719792535645e-07, -3.19804598802875262e-07, -1.59637409069546266e-07, -5.82816745975378581e-08, 8.8594639180428203e-08, 7.97130681462476787e-08, -7.56862874595753965e-08, -9.68504068055153766e-08, 8.49175805228696845e-08, 7.44604164992779261e-08, -5.77387275768614927e-08, -1.26606863659617375e-07, -5.50187806425128656e-08, -6.46945821358713147e-08, 9.7163805889977084e-08, -9.92713040659509716e-08, -6.5936909265928989e-08, 9.92539384014889947e-08, 2.08329495876569126e-07, 9.16512590265483595e-08, -2.12343977068485401e-07, -3.90311299724999117e-07, -1.85811202868535474e-07, 2.13399346193909878e-07, 4.31716557613981422e-07, 3.5318669233674882e-07, 8.37803497688582866e-08, -2.25757531779890996e-07, -3.62215814675437286e-07, -1.62865163133574242e-07, 1.6678097836120287e-07, 2.41743606466116034e-07, 5.98841580767839332e-08, -9.8135402026855445e-08, -1.16978739583828428e-07, -7.54962883320331457e-08, -9.90236799225385766e-08, -2.41085217567160726e-07, -3.72220682720580953e-07, -2.9764436249024584e-07, 4.35215525840249029e-07, 1.03975435195025057e-06, 2.00559156837698538e-06, 3.49676474797888659e-06, 5.15403507961309515e-06, 5.82099255552748218e-06, 4.71390376333147287e-06, 2.47194316216337029e-06, -2.77764752354414668e-06, -6.67706535750767216e-06, -1.22593992273323238e-05, -1.83048741746461019e-05, -2.12177510547917336e-05, -1.87671303137904033e-05, -1.33097855723462999e-05, -8.65026140672853217e-06, -6.4421865317854099e-06, -6.74388775223633274e-06, -9.13850180950248614e-06, -1.22327855933690444e-05, -1.00001347064971924, -1.1179424291185569e-05, -6.73382874083472416e-06, -1.88788987998123048e-06, 3.20156573252461385e-06, 9.48134220379870385e-06, 1.76332268893020228e-05, 2.60067026829347014e-05, 2.98488685075426474e-05, 2.62406738329445943e-05, 1.8312692191102542e-05, 1.09752400021534413e-05, 6.09363951298291795e-06, 3.32823583448771387e-06, 1.98266957340820227e-06, 1.44952934988396009e-06, 1.21838047562050633e-06, 9.59453132054477464e-07, 6.35181095276493579e-07, 3.54063587337805075e-07, 1.67923005278680648e-07, 5.92211861771829717e-08, -7.42966435041125806e-08, -7.61435288154643786e-08, -5.62154092165201291e-08, -8.14565837004010973e-08, -8.10572302611944906e-08, 1.18480542710130976e-07, 7.99188626388058765e-08, -7.30509910340515489e-08, -1.30360888306313427e-07, -3.94804651193680911e-08, -6.379870143291555e-08, -3.02575529076420935e-08, 1.14516808480402688e-07, -1.07758637568622362e-07, -6.80858889268165512e-08, 1.3732358183915494e-07, 2.24788237801476498e-07, -3.20433827027954976e-07, -4.42772488895570859e-07, -2.04095627509559563e-07, 1.33165400484358543e-07, 2.67722356284139096e-07, 2.1183454634865484e-07, 7.21061965691660589e-08, -1.35473996465407254e-07, -3.19772595958056627e-07, -2.90582391926363925e-07, 1.45172066368104424e-07, 8.25782393576446339e-08, 5.27831787167087896e-08, 1.99133282308139314e-07, 2.88831841999126482e-07, 2.90628236143675167e-07, 2.35062515230310964e-07, 1.4691147498524515e-07, -3.67059698191951611e-07, -9.72389216258306988e-07, -1.95545590031542815e-06, -3.38773838848283049e-06, -4.94309233545209281e-06, -5.66192193218739703e-06, -4.78157153338543139e-06, -2.6509776489547221e-06, 3.08577637042617425e-06, 7.18962292012292892e-06, 1.27569974210928194e-05, 1.86427860171534121e-05, 2.14512601814931259e-05, 1.90867613127920777e-05, 1.38600562422652729e-05, 9.46246473176870495e-06, 7.53646736484370194e-06, 8.26682389742927626e-06, 1.14287158794468269e-05, 1.55812285811407492e-05, 1.00001752376556396, 1.49485022120643407e-05, 9.45690771914087236e-06, 3.59509544978209306e-06, -2.04930870495445561e-06, -8.4125840658089146e-06, -1.6324524040101096e-05, -2.43795002461411059e-05, -2.81126867776038125e-05, -2.4718221538932994e-05, -1.71767387655563653e-05, -1.02171397884376347e-05, -5.649633749271743e-06, -3.1363076686830027e-06, -1.96610403691011015e-06, -1.50261018916353351e-06, -1.25058420508139534e-06, -9.56091753323562443e-07, -6.31355305813485757e-07, -3.64226735882766661e-07, -1.73524057345275651e-07, -3.60073535432547942e-08, 1.52083728721663647e-07, -7.77797097839538765e-08, -7.95711372347795987e-08, 1.54035873833890946e-07, 1.12467873236710147e-07, -6.43618704998516478e-08, -1.32969177002451033e-07, 7.21639992207201431e-08, 5.45767271376007557e-08, 5.47782761373127869e-08, -9.04535681911511347e-08, -5.2465740196794286e-08, 1.10773818562392989e-07, -1.20710012652125442e-07, -1.01140479102923564e-07, 1.49793109471829666e-07, 2.751107501808292e-07, -3.75361622673153761e-07, -4.66370920548797585e-07, -1.57611594886475359e-07, 1.85473624014775851e-07, 2.12211176631171838e-07, 6.37286277083148889e-08, -6.62907453374828037e-08, -1.85738159075299336e-07, -2.25922988761340093e-07, -8.52433998943524784e-08, 1.08437752999179793e-07, 1.43071687830342853e-07, -7.64398961905499164e-08, -6.42494555336270423e-08, -1.70189537129772361e-07, -3.28411516647975077e-07, -3.70820089301560074e-07, -2.24163073880845332e-07, 4.60372035604450502e-07, 1.07379230485094013e-06, 2.04607249543187208e-06, 3.45268085766292643e-06, 4.9284549277217593e-06, 5.51795938008581288e-06, 4.58493877886212431e-06, 2.54917040365398861e-06, -3.06513720715884119e-06, -7.39258712201262824e-06, -1.33954345074016601e-05, -1.9763871023315005e-05, -2.27640812227036804e-05, -2.01358107005944476e-05, -1.44934510899474844e-05, -9.96012931864243001e-06, -8.35253740660846233e-06, -9.81654920906294137e-06, -1.39615412990679033e-05, -1.89741112990304828e-05, -1.00002110004425049, -1.80498009285656735e-05, -1.16926066766609438e-05, -5.10995641889167018e-06, 9.11330118924524868e-07, 7.24475648894440383e-06, 1.47081345858168788e-05, 2.21273221541196108e-05, 2.55889681284315884e-05, 2.26128704525763169e-05, 1.58426773850806057e-05, 9.5069472081377171e-06, 5.27280826645437628e-06, 2.90442585537675768e-06, 1.82440362550551072e-06, 1.47051366639061598e-06, 1.31601984776352765e-06, 1.04200614714500261e-06, 6.77409218496904941e-07, 3.78313842475108686e-07, 1.91942959304469696e-07, 7.92119649872802256e-08, -1.09715671214871691e-07, -9.69851470244975644e-08, 5.27371213365768199e-08, 5.86207313801878627e-08, -7.93976724366984854e-08, -9.4426440000461298e-08, 1.58654287929493876e-07, 1.23610249147532159e-07, -1.56081028990229242e-07, 8.60629825183423236e-08, 6.32685441814828664e-08, 8.11413087831169832e-08, -5.77078900221295044e-08, -4.42208651918463147e-08, 1.08979222090965777e-07, -1.14615758661784639e-07, -1.38942979788225784e-07, 1.17113444275673828e-07, 3.14086918251632596e-07, 5.6896503508596652e-08, -3.98229474285471952e-07, -4.97766734497417929e-07, -1.29578609175950987e-07, 2.92474283014598768e-07, 3.10618617049840395e-07, -1.11678453151853319e-07, -6.95350408363992756e-08, -8.32256006333409459e-08, -1.42701267691336398e-07, -1.21913814155050204e-07, 3.63591965424348018e-08, 8.88116460373566952e-08, 1.49421836681540299e-07, 1.97750722463752027e-07, 2.47501986905263038e-07, 2.66162828665983398e-07, 1.99459108785049466e-07, -2.97920820457875379e-07, -9.03913189631566638e-07, -1.9463800526864361e-06, -3.4597183002915699e-06, -4.99069483339553699e-06, -5.52011670151841827e-06, -4.46399599240976386e-06, -2.34359413298079744e-06, 1.97403721813316224e-07, 3.30302782458602451e-06, 7.6276105573924724e-06, 1.36138014568132348e-05, 1.99968999368138611e-05, 2.31270878430223092e-05, 2.07039211090886965e-05, 1.51842832565307617e-05, 1.06603092717705294e-05, 9.12429732125019655e-06, 1.09798620542278513e-05, 1.60099571075988933e-05, 2.2161426386446692e-05, 1.00002491474151611, 2.14328883885173127e-05, 1.40701704367529601e-05, 6.63613627693848684e-06, 1.7664751794654876e-07, -6.25203438175958581e-06, -1.35588834382360801e-05, -2.06720142159610987e-05, -2.39012442762032151e-05, -2.10082744160899892e-05, -1.46291567943990231e-05, -8.77544971444876865e-06, -4.93966217618435621e-06, -2.81958978121110704e-06, -1.83296572231483879e-06, -1.47025650676368969e-06, -1.29776560697791865e-06, -1.04466516859247349e-06, -7.05643969922675751e-07, -4.00112185161560774e-07, -1.88199024364621437e-07, -6.23346991801554395e-08, 7.17104811087665439e-08, 8.01134731887032103e-08, 6.71853825906509883e-08, 5.00338863673732703e-08, -3.83652842828041685e-09, -6.37506261114140216e-08, 1.62338636755521293e-07, 1.28496168372294051e-07, -1.92492677797417855e-07, 5.9268710828064286e-08, 5.50098349094696459e-08, 5.98502651882881764e-08, -3.36753700480585394e-08, -3.22499715821322752e-08, 1.0771981351354043e-07, -8.66539267008192837e-08, -1.38708557528843812e-07, 7.58010045842638647e-08, 3.26332781241944758e-07, 1.27918255543590931e-07, -3.77919263883086387e-07, -5.35751723873545416e-07, -1.59407434807690152e-07, 3.22988910284038866e-07, 4.11544561984555912e-07, 7.43259747082447575e-08, -2.0326564253991819e-07, -1.54810905428348633e-07, 4.28822133358153224e-08, -1.21555643772808253e-07, -2.33824891893164022e-07, -3.5158132050128188e-07, -3.66956953712360701e-07, -1.93280058624623052e-07, 1.22203644536966749e-07, 4.95080769269407028e-07, 9.87855514722468797e-07, 1.81966254331200616e-06, 3.18673255605972372e-06, 4.77003641208284535e-06, 5.4760143939347472e-06, 4.51291271019726992e-06, 2.36015966947888955e-06, -2.33958942885692522e-07, -3.39464054377458524e-06, -7.85211068432545289e-06, -1.40707670652773231e-05, -2.06365129997720942e-05, -2.37030380958458409e-05, -2.1043249944341369e-05, -1.54085464600939304e-05, -1.10284217953449115e-05, -9.81192715698853135e-06, -1.20689182949718088e-05, -1.75566838152008131e-05, -2.41521665884647518e-05, -1.00002706050872803, -2.33833543461514637e-05, -1.54939607455162331e-05, -7.58885153118171729e-06, -9.37128561417921446e-07, 5.34715309186140075e-06, 1.22397777886362746e-05, 1.89317197509808466e-05, 2.21027421503094956e-05, 1.95855955098522827e-05, 1.36976004796451889e-05, 8.18667922430904582e-06, 4.55085364592378028e-06, 2.58037584899284411e-06, 1.73636306044500088e-06, 1.48461549542844296e-06, 1.34784204419702291e-06, 1.0737243201219826e-06, 7.19253762326843571e-07, 4.23621145273500588e-07, 2.20655479665765597e-07, 8.24021384460138506e-08, -7.14549202029957087e-08, -8.49259649271516537e-08, -6.76255140774628671e-08, -8.45663095105919638e-08, 1.52344910020474344e-07, 1.35505203502361837e-07, -1.64383251899380411e-07, -9.16350444413183141e-08, 5.63719666502038308e-08, 6.53752181278832722e-08, -4.67648071378334862e-08, 9.15211160190665396e-08, -6.08731980378252047e-08, -1.03301438514336041e-07, 3.27734454685923993e-07, 2.2797024712417624e-07, -2.69226973159675254e-07, -5.16485556545376312e-07, -1.88786003718632855e-07, 3.11803489694284508e-07, 4.8039612465800019e-07, 1.98113852434289583e-07, -1.77043361304640712e-07, -2.37568102079421806e-07, 8.06420388244077913e-08, 5.26249372967413365e-08, 4.15469187942107965e-08, 1.05668313210571796e-07, 1.63132853003844502e-07, 2.16846387957048137e-07, 2.69603049218858359e-07, 2.66783985125584877e-07, 8.845461252349196e-08, -3.50954792338598054e-07, -1.06240679542679572e-06, -2.05305718736781273e-06, -3.34272317559225485e-06, -4.67572681372985244e-06, -5.24474444318911992e-06, -4.37044764112215489e-06, -2.33040509556303732e-06, 2.61675523915982922e-07, 3.44933232554467395e-06, 7.8823095464031212e-06, 1.40759420901304111e-05, 2.0737896193168126e-05, 2.40128301811637357e-05, 2.14702613448025659e-05, 1.57475824380526319e-05, 1.12183552118949592e-05, 9.99840904114535078e-06, 1.25008664326742291e-05, 1.84695509233279154e-05, 2.55881841439986601e-05, 1.00002872943878174, 2.48543256020639092e-05, 1.65695710165891796e-05, 8.33318244986003265e-06, 1.50148366628855001e-06, -4.78485571875353344e-06, -1.14453268906800076e-05, -1.77078982233069837e-05, -2.0556455638143234e-05, -1.81498180609196424e-05, -1.27245630210381933e-05, -7.68977770349010825e-06, -4.3532495510589797e-06, -2.50931589107494801e-06, -1.69421673490433022e-06, -1.45396893458382692e-06, -1.34377512495120754e-06, -1.08605274817819009e-06, -7.19333627330343006e-07, -4.05847941920001176e-07, -2.03520613695218344e-07, -8.20383760924414673e-08, 1.0988763676778035e-07, 1.03488687841490901e-07, -9.56988301936689822e-08, 1.288102140506453e-07, 1.25716340448889241e-07, -1.37031037183987792e-07, -8.35590725500878762e-08, 7.14417254243926436e-08, 3.23321920348007552e-08, -7.09732645987060096e-08, -8.10164522135892184e-08, 5.88343134211299912e-08, 2.79495594668333069e-07, 2.61065309814512148e-07, -1.31821423110523028e-07, -4.17790175788468332e-07, -1.83775171080924338e-07, 2.80338895208842587e-07, 4.85435123209754238e-07, 2.87815993260664982e-07, -9.05959538499701011e-08, -2.81881057162536308e-07, -1.34493902237409202e-07, 1.12594669587906537e-07, 1.72962216993255424e-07, 6.72258693157345988e-08, 6.77813005722782691e-08, -7.33446299250317679e-08, -1.25314045362756588e-07, -2.47563860966693028e-07, -3.39491379008904914e-07, -2.79512590850572451e-07, -9.68500515341474966e-08, 8.06421880383823009e-08, 2.98411038102130988e-07, 7.92254752468579682e-07, 1.77646336396719562e-06, 3.25291102853952907e-06, 4.71932344225933775e-06, 5.20209005117067136e-06, 4.19765592596377246e-06, 2.19403545997920446e-06, -2.62017806562653277e-07, -3.34317951455886941e-06, -7.67441815696656704e-06, -1.36518829094711691e-05, -1.99540972971590236e-05, -2.29567631322424859e-05, -2.05059986910782754e-05, -1.51647091115592048e-05, -1.10069731817930005e-05, -9.98380528471898288e-06, -1.25134392874315381e-05, -1.84112777787959203e-05, -2.54552032856736332e-05, -1.00002861022949219, -2.47334482992300764e-05, -1.65011861099628732e-05, -8.345869900949765e-06, -1.62899948463746114e-06, 4.54417022410780191e-06, 1.11581221062806435e-05, 1.74733522726455703e-05, 2.04102998395683244e-05, 1.80324677785392851e-05, 1.25787937577115372e-05, 7.52898176870075986e-06, 4.2207248043268919e-06, 2.42659552895929664e-06, 1.64924676937516779e-06, 1.41796056141174631e-06, 1.30526655084395315e-06, 1.0590890724415658e-06, 7.12110477252281271e-07, 4.05625002031229087e-07, 1.95366538946473156e-07, 6.63386572341551073e-08, -7.71863568616026896e-08, -7.89755389973834099e-08, -6.26391667424286425e-08, -1.04240811538147682e-07, 8.65716387465909065e-08, 9.28991923387911811e-08, -1.22710957839444745e-07, -7.40050225545019202e-08, 5.69015838891573367e-08, 5.05443367160296475e-08, -7.54091189492100966e-08, -6.06391168389563973e-08, 6.81538168123552168e-08, 2.16218580817439943e-07, 1.89863555988267763e-07, -8.81771029526134953e-08, -3.08182620756269898e-07, -1.34773159743417636e-07, 2.54908769647954614e-07, 4.51942099743973813e-07, 3.20658216423908016e-07, -2.65469765281522996e-07, -2.53491265311822644e-07, 2.11885065937167383e-07, 1.52832811295411375e-07, -6.36918287000298733e-08, 4.94624430302792462e-08, 5.32023740618114971e-08, -8.7186172947895102e-08, -6.16470430259141722e-08, 6.41727666561564547e-08, 9.67682964869709394e-08, 1.52447114487586077e-07, 2.69803535957180429e-07, 3.61482364041876281e-07, 2.52380687015829608e-07, -7.76776474253892957e-08, -4.97117127906676615e-07, -9.9404292086546775e-07, -1.75947479874594137e-06, -2.99764883493480738e-06, -4.4372791307978332e-06, -5.0793669288395904e-06, -4.19081925429054536e-06, -2.19649132304766681e-06, 2.2805717492246913e-07, 3.19196306008961983e-06, 7.36231095288530923e-06, 1.32004979604971595e-05, 1.94336917047621682e-05, 2.24380273721180856e-05, 2.00203248823527247e-05, 1.47188566188560799e-05, 1.06120241980534047e-05, 9.65466006164206192e-06, 1.2244066056155134e-05, 1.81549312401330099e-05, 2.51548681262647733e-05, 1.00002825260162354, 2.44344082602765411e-05, 1.62814267241628841e-05, 8.18608441477408633e-06, 1.52228778915741714e-06, -4.53404209110885859e-06, -1.09185839392011985e-05, -1.69614995684241876e-05, -1.97752106032567099e-05, -1.75185905391117558e-05, -1.22944402392022312e-05, -7.41477560950443149e-06, -4.18204081142903306e-06, -2.40366921389068011e-06, -1.61611478688428178e-06, -1.37004064981738338e-06, -1.25085682611825177e-06, -1.01321859347081045e-06, -6.86497514834627509e-07, -4.02123760068207048e-07, -2.05782271223142743e-07, -7.61029284035430464e-08, 6.4329420013109484e-08, 8.17906737893281388e-08, 7.01997890928396373e-08, -6.68858675112460332e-08, -8.44573477820631524e-08, 7.60011928946369153e-08, 6.51284466357537895e-08, -5.30574517654258671e-08, -1.13428576753449306e-07, -4.77423469646964804e-08, -6.34460590731578122e-08, 7.6342331567502697e-08, -8.24907147034537047e-08, -4.96503638203193987e-08, 9.05924508742828039e-08, 1.77361187070346205e-07, 7.13027361598506104e-08, -1.87057963785264292e-07, -3.29340252847032389e-07, -1.47715184084518114e-07, 1.86538500202004798e-07, 3.57866440481302561e-07, 2.82219360769886407e-07, 5.74030671884884214e-08, -1.93575516505006817e-07, -3.03475445662115817e-07, -1.44033037940971553e-07, 1.20661567848401319e-07, 1.83642043793952325e-07, 4.57128130904038699e-08, -6.42510471493551449e-08, 9.05804427020484582e-08, 5.14863778278140671e-08, -7.43851629181335738e-08, -1.17232758611862664e-07, -1.85470000246823474e-07, -2.20316806576192903e-07, -2.30521933985983196e-07, -2.12733951343579974e-07, -7.54750004716697731e-08, 2.86358670109621016e-07, 9.16264866646088194e-07, 1.842469487201015e-06, 3.0787884952587774e-06, 4.34203457189141773e-06, 4.84237443743040785e-06, 3.99362215830478817e-06, 2.13137946047936566e-06, -1.73338776221498847e-07, -2.98933582598692738e-06, -6.879558895889204e-06, -1.224219158757478e-05, -1.7932126866071485e-05, -2.06903969228733331e-05, -1.8541748431744054e-05, -1.37760944198817015e-05, -1.00890547400922514e-05, -9.28837380342883989e-06, -1.18032039608806372e-05, -1.74873111973283812e-05, -2.42388032347662374e-05, -1.00002729892730713, -2.36032701650401577e-05, -1.57553877215832472e-05, -7.92131595517275855e-06, -1.37885717776953243e-06, 4.71523753731162287e-06, 1.12626712507335469e-05, 1.74849355971673504e-05, 2.03443833015626296e-05, 1.79563212441280484e-05, 1.25353099065250717e-05, 7.50700519347446971e-06, 4.19701154896756634e-06, 2.39061546380980872e-06, 1.59580520175950369e-06, 1.33795356305199675e-06, 1.19576031920587411e-06, 9.41360667638946325e-07, 6.18287288034480298e-07, 3.52590291186061222e-07, 1.80149015704955673e-07, 7.18529875598505896e-08, -9.31752097699245496e-08, -8.51204475793565507e-08, -7.24365492033030023e-08, -7.16393060429254547e-08, 1.02421196856994356e-07, 6.61561188053383376e-08, -7.00620574889398995e-08, -1.19483843263878953e-07, -6.542448005575352e-08, 8.75659367238768027e-08, -9.56415178166025726e-08, -5.53434738037594798e-08, 1.22087996601294435e-07, 1.93432228456913435e-07, -2.7754697384807514e-07, -3.77925289285485633e-07, -1.678633196888768e-07, 1.20286301807936979e-07, 2.24974584739356942e-07, 1.66652398547739722e-07, 5.0031701448460808e-08, -1.10411797038523218e-07, -2.48367570065965992e-07, -2.14025192235567374e-07, 1.45374116300445166e-07, 8.36063165365885652e-08, -7.39992245257781178e-08, 6.31259595706978871e-08, 6.71132838192534109e-08, -5.97453322370711248e-08, -4.50872086332765321e-08, 8.00296220404561609e-08, 1.35963276193251659e-07, 2.25764708261522173e-07, 2.99703685868735192e-07, 2.65773593355334015e-07, 1.19976917289932317e-07, -6.5227467871409317e-08, -3.14904127662885003e-07, -7.79111758220096817e-07, -1.62030528372270055e-06, -2.88354567601345479e-06, -4.2065339584951289e-06, -4.72695592179661617e-06, -3.89269462175434455e-06, -2.1032014956290368e-06, 6.46763140821349225e-08, 2.69516931439284235e-06, 6.34349953543278389e-06, 1.13926125777652487e-05, 1.67492598848184571e-05, 1.93183022929588333e-05, 1.72469299286603928e-05, 1.27501325550838374e-05, 9.35954903980018571e-06, 8.77878574101487175e-06, 1.13825763037311845e-05, 1.69917348102899268e-05, 2.3549333491246216e-05, 1.00002646446228027, 2.28067965508671477e-05, 1.51295043906429783e-05, 7.47236572351539508e-06, 1.06229890661779791e-06, -4.94918867843807675e-06, -1.14703962026396766e-05, -1.77208330569555983e-05, -2.06291824724758044e-05, -1.8261443983647041e-05, -1.28122501337202266e-05, -7.71657414588844404e-06, -4.31350099461269565e-06, -2.40469307755120099e-06, -1.52623329086054582e-06, -1.23689756037492771e-06, -1.11845133687893394e-06, -9.03427121556887869e-07, -5.99530380895885173e-07, -3.32662409618933452e-07, -1.55274733515398111e-07, -4.97459531345612049e-08, 8.63214566493297752e-08, 8.52651140803573071e-08, -6.88542058924213052e-08, -6.88017607330948522e-08, 1.39584329872377566e-07, 1.02458486139767047e-07, -5.48423599866509903e-08, -1.15780565579370887e-07, 6.82553036313038319e-08, 5.19395157994040346e-08, -7.85237475042777078e-08, -4.80464521501744457e-08, 8.66194582727075613e-08, -1.0875938727394896e-07, -8.62730615835971548e-08, 1.31517708723549731e-07, 2.37873777564345801e-07, -3.18725426495802822e-07, -3.92817014471802395e-07, -1.21602639069351426e-07, 1.79219227902649436e-07, 1.99968141600948002e-07, -5.72773330986819929e-08, -1.50068828475014016e-07, -1.82929994707592414e-07, -7.3509994535925216e-08, 7.62736789283735561e-08, 9.84664794145828637e-08, -6.8136699837850756e-08, 5.15118827593141759e-08, 1.92469702398057052e-08, -5.70702880509088573e-08, -1.55913667754248308e-07, -2.71551868991082301e-07, -3.06185199860919965e-07, -1.82238679258261982e-07, 6.60617018866105354e-08, 3.94228521827244549e-07, 8.68360018557723379e-07, 1.63365643857105169e-06, 2.77809090221126098e-06, 4.00741828343598172e-06, 4.51263076683972031e-06, 3.74406340597488452e-06, 2.06568574867560528e-06, -2.33902323998336215e-06, -5.56616441826918162e-06, -9.97089955490082502e-06, -1.46419688462628983e-05, -1.69456816365709528e-05, -1.52616175910225138e-05, -1.14403719635447487e-05, -8.53975507197901607e-06, -8.13282167655415833e-06, -1.06690858956426382e-05, -1.60655654326546937e-05, -2.23952283704420552e-05, -1.00002527236938477, -2.18003315239911899e-05, -1.44367586472071707e-05, -7.00061900715809315e-06, -6.37919072232762119e-07, 5.50167806068202481e-06, 1.23049403555341996e-05, 1.88720405276399106e-05, 2.1883794033783488e-05, 1.92801289813360199e-05, 1.34417414301424287e-05, 8.05051058705430478e-06, 4.50198922408162616e-06, 2.52625500252179336e-06, 1.57643228249071399e-06, 1.18395985282404581e-06, 9.83712652669055387e-07, 7.64817457366007147e-07, 5.11782786816183943e-07, 2.878714440157637e-07, 1.15459229732550739e-07, -2.01865759663633071e-08, -3.67366510545252822e-08, -6.45910773755531409e-08, 1.44916484146051516e-07, 1.09433592854202288e-07, -1.41825040600451757e-07, 7.74271811110338604e-08, 5.89078155144306947e-08, 7.15879551194120722e-08, -4.97543375388431741e-08, -3.95176265044483443e-08, 8.69492069455191086e-08, -1.0417171836252237e-07, -1.2104473512408731e-07, 1.00579150341673085e-07, 2.69149467158058542e-07, 4.9268248147882332e-08, -3.3929899245777051e-07, -4.24529133624673705e-07, -1.097430697427626e-07, 2.52868943562134518e-07, 2.68627985633429489e-07, -1.05001802808146749e-07, -6.48418634341396682e-08, -6.40821156139281811e-08, -1.04009686197059636e-07, -8.01852948484338413e-08, 6.42176871679112082e-08, -6.73257858352371841e-08, 8.22364825125987409e-08, 1.06673674338253477e-07, 1.02820948200132989e-07, 1.09983638196808897e-07, 1.69044795939043979e-07, 2.4316648250533035e-07, 2.18408331420505419e-07, -2.86987329900512123e-07, -7.73467320414056303e-07, -1.53069606767530786e-06, -2.6354782676207833e-06, -3.81136624127975665e-06, -4.29330293627572246e-06, -3.57701310349511914e-06, -2.03851459446013905e-06, -2.38447910305694677e-07, 1.84213945431110915e-06, 4.63125570604461245e-06, 8.42025565361836925e-06, 1.23888876260025427e-05, 1.4271706277213525e-05, 1.27847815747372806e-05, 9.6326657512690872e-06, 7.44084445614134893e-06, 7.51035577195580117e-06, 1.022286232910119e-05, 1.55242760229157284e-05, 2.16214648389723152e-05, 1.00002431869506836, 2.09649224416352808e-05, 1.38012001116294414e-05, 6.50416313874302432e-06, 1.36492005253785464e-07, -6.16291526966961101e-06, -1.32745753944618627e-05, -2.02271694433875382e-05, -2.34894614550285041e-05, -2.07908997253980488e-05, -1.45543344842735678e-05, -8.6898089648457244e-06, -4.76295235785073601e-06, -2.55982217822747771e-06, -1.51868130160437431e-06, -1.10758185201120796e-06, -8.95121843313972931e-07, -6.57114469504449517e-07, -4.06268355845895712e-07, -2.15662083746792632e-07, -8.85553745888500998e-08, 1.08154587508124678e-08, 4.97334760041212576e-08, -5.8656204338092266e-09, -5.65870088564679463e-08, 1.44716381100806757e-07, 1.12862466039587162e-07, -1.7390844675446715e-07, 5.2956213636434768e-08, 4.97000982591089269e-08, 3.90609109501838248e-08, -4.62098483922090963e-08, 8.13327574178401846e-08, -8.03896895718025917e-08, -1.20999118280451512e-07, 6.45209539129609766e-08, 2.78459026503696805e-07, 1.09570883921605855e-07, -3.20752292282122653e-07, -4.55165462653894792e-07, -1.34575273591508449e-07, 2.77830508821352851e-07, 3.55208328528533457e-07, 6.63094539277153672e-08, -1.75037996541504981e-07, -1.34795712369850662e-07, 3.88742336099312524e-08, 4.01758484258607496e-08, -1.68216388374275994e-07, -2.55888579658858362e-07, -2.5347054588564788e-07, -1.86828444270759064e-07, -1.04505097908713651e-07, 2.74916232001487515e-07, 7.21549440640956163e-07, 1.43632985327712959e-06, 2.46698959927016404e-06, 3.56769510290178005e-06, 4.04402680942439474e-06, 3.41420968652528245e-06, 2.0205425244057551e-06, 4.34340876154237776e-07, -1.27132148008968215e-06, -3.4157551453972701e-06, -6.27705958322621882e-06, -9.3355956778395921e-06, -1.09117781903478317e-05, -9.94138827081769705e-06, -7.66455468692583963e-06, -6.19992806605296209e-06, -6.75178716846858151e-06, -9.7907905001193285e-06, -1.53181663335999474e-05, -2.15443651541136205e-05, -1.00002431869506836, -2.08961628231918439e-05, -1.3684246368939057e-05, -6.28668294666567817e-06, 3.13600651224987814e-07, 7.05355569152743556e-06, 1.48087037814548239e-05, 2.23737824853742495e-05, 2.58080035564489663e-05, 2.27252821787260473e-05, 1.58932507474673912e-05, 9.54557344812201336e-06, 5.27538713868125342e-06, 2.79252708423882723e-06, 1.51249776081385789e-06, 9.44689645621110685e-07, 7.00789144048030721e-07, 5.18346496392041445e-07, 3.24896092251947266e-07, 1.60888959044314106e-07, 5.11315327855754731e-08, -7.73139348098084156e-08, 1.35408470214315457e-07, 1.19048543467670243e-07, -1.49006325500522507e-07, -8.29372766020242125e-08, 4.96746928035918245e-08, 5.7368044537042806e-08, 4.83112962967879866e-08, -6.28222380782972323e-08, -9.21185403512936318e-08, 2.79552523352322169e-07, 1.94337999914750981e-07, -2.27701107746725029e-07, -4.37080387882815558e-07, -1.58519171122861735e-07, 2.66633747969535762e-07, 4.09395880751617369e-07, 1.679051990777225e-07, -1.53350029563625867e-07, -2.05299656386159768e-07, 7.2137822826334741e-08, 5.26037737813567219e-08, -7.37714245246934297e-08, 7.20168529255715839e-08, 9.80982477472025494e-08, 2.51484067348428653e-07, 2.76694919421061059e-07, 1.39183200076331559e-07, -6.07086292347958079e-08, -3.01689055959286634e-07, -6.91555442244862206e-07, -1.35380639676441206e-06, -2.32953425438608974e-06, -3.35824120156757999e-06, -3.79338439415732864e-06, -3.23229323839768767e-06, -2.02199362320243381e-06, -6.8210493964215857e-07, 7.07805213551182533e-07, 2.36891924032534007e-06, 4.45759542344603688e-06, 6.57561531625105999e-06, 7.6266160249360837e-06, 7.02838406141381711e-06, 5.71711871089064516e-06, 5.15777128384797834e-06, 6.26735572950565256e-06, 9.57604243012610823e-06, 1.52303064169245772e-05, 2.15525415114825591e-05, 1.00002431869506836, 2.09712925425264984e-05, 1.364937998005189e-05, 6.08937534707365558e-06, -7.10240158241504105e-07, -7.75251010054489598e-06, -1.6018550013541244e-05, -2.42449750658124685e-05, -2.80754502455238253e-05, -2.47469979512970895e-05, -1.72283398569561541e-05, -1.02396670627058484e-05, -5.59155205337447114e-06, -2.93450079880130943e-06, -1.55386965161596891e-06, -8.74349325385992415e-07, -5.32768979155662237e-07, -3.38789504894521087e-07, -2.11704531238865457e-07, -1.19028378264829371e-07, -4.35671729803743801e-08, -8.74218031299278664e-08, 1.1411526656956994e-07, 1.10158275390404015e-07, -1.24914947718934854e-07, -7.60891936124608037e-08, 6.11468919942126377e-08, -4.20002592704804556e-08, -5.72672114174110902e-08, 2.44365594426199095e-07, 2.26291504645814712e-07, -1.07199682020109321e-07, -3.48047791476346902e-07, -1.48869588656452834e-07, 2.43029148805362638e-07, 4.13871276805366506e-07, 2.43688191403634846e-07, -7.76611983610564494e-08, -2.38277038988599088e-07, -1.1220301843195557e-07, 9.62112665092718089e-08, 1.45366129800095223e-07, 5.37468238803739951e-08, 7.79730839894909877e-08, -6.96966893087846984e-08, -1.44175771765731042e-07, -1.36995836896858236e-07, -1.00163710214928869e-07, -1.25847932963552012e-07, -1.98529136241631932e-07, -1.84749978870968334e-07, 2.52089989771775436e-07, 6.53888434953842079e-07, 1.28729720927367453e-06, 2.22492531065654475e-06, 3.23726726492168382e-06, 3.67641655429906677e-06, 3.12369616040086839e-06, 1.94571885003824718e-06, 7.05473723883187631e-07, -5.00497890243423171e-07, -1.91967455975827761e-06, -3.76687944481091108e-06, -5.71215150557691231e-06, -6.70597910357173532e-06, -6.1704545259999577e-06, -5.0182093218609225e-06, -4.67608151666354388e-06, -6.00670773565070704e-06, -9.47895568970125169e-06, -1.51920021380647086e-05, -2.14774336200207472e-05, -1.00002419948577881, -2.08944820769829676e-05, -1.36380176627426408e-05, -6.08098343946039677e-06, 7.86093380611418979e-07, 7.89373734733089805e-06, 1.61349053087178618e-05, 2.42480873566819355e-05, 2.80135063803754747e-05, 2.47570314968470484e-05, 1.73409662238555029e-05, 1.0356848179071676e-05, 5.62799004910630174e-06, 2.88875935439136811e-06, 1.48371339037112193e-06, 8.32904731851158431e-07, 5.15485112373426091e-07, 3.08205898136293399e-07, 1.61395092845850741e-07, 7.81056996856932528e-08, -9.51267722371085256e-08, 7.59977325515137636e-08, 8.18567542637538281e-08, -1.02424330350459059e-07, -4.68578669199359865e-08, 4.0963726632980979e-08, -6.52655458566187008e-08, -4.96520158321800409e-08, 6.21907929598819464e-08, 1.86112032452001586e-07, 1.58489100954284368e-07, -8.01605679612293898e-08, -2.63011600054596784e-07, -1.10283735921257176e-07, 2.20752568225179857e-07, 3.83457745556370355e-07, 2.67935632791704847e-07, -2.26965724436922756e-07, -2.15807389736255573e-07, 1.72589679436896404e-07, 1.22390773071856529e-07, 3.97200068391612149e-08, 4.14209644361562823e-08, -8.4044295078911091e-08, -7.75909114736350602e-08, 1.09965370143072505e-07, 2.14941110243671574e-07, 2.33098305102430459e-07, 1.78415064056025585e-07, 9.19441234259466e-08, -2.67583743607247015e-07, -6.52807784717879258e-07, -1.27172586417145794e-06, -2.16803891817107797e-06, -3.12750080411206e-06, -3.56023315362108406e-06, -3.06129732052795589e-06, -1.93399046111153439e-06, -6.98273197485832497e-07, 5.09033498019562103e-07, 1.85472379143902799e-06, 3.51214475813321769e-06, 5.24355209563509561e-06, 6.19183902017539367e-06, 5.81294489165884443e-06, 4.82478753838222474e-06, 4.50765082860016264e-06, 5.74688920096377842e-06, 9.07787125470349565e-06, 1.46294560181559063e-05, 2.07498742383904755e-05, 1.00002336502075195, 2.01277125597698614e-05, 1.31014130602125078e-05, 5.84376812184927985e-06, -7.61268381666013738e-07, -7.70471888245083392e-06, -1.58709990500938147e-05, -2.39161945501109585e-05, -2.75705442618345842e-05, -2.42506775975925848e-05, -1.69206159625900909e-05, -1.01198447737260722e-05, -5.54790631213109009e-06, -2.87298917100997642e-06, -1.451568437005335e-06, -7.71027998780482449e-07, -4.69195583718828857e-07, -3.06540556493928307e-07, -1.78852104681936908e-07, -7.83998430620158615e-08, -6.35556034467299469e-08, -8.1170661303531233e-08, 5.67349225377711264e-08, 4.67680116855717642e-08, -1.0678044048972879e-07, -4.40579377425365237e-08, -6.29485299441512325e-08, 4.88331615144943498e-08, -8.37144327192618221e-08, 7.90552761031904083e-08, 1.53679124537120515e-07, 5.88081867647360923e-08, -1.64340235642157495e-07, -2.81043782024426037e-07, -1.18085715428151161e-07, 1.68180562809538969e-07, 3.07326189386003534e-07, 2.36707776934963476e-07, -1.60128550419358362e-07, -2.47004606990230968e-07, -1.11051598139511043e-07, 1.08339236248866655e-07, 1.55871603624291311e-07, 8.10304072729195468e-08, -5.05448518595130736e-08, -1.8686977298898455e-08, -3.45643833554731827e-08, -8.20399108647507092e-08, -1.93027346995222615e-07, -2.32891309792648826e-07, -1.5470520509097696e-07, 2.4751403771006153e-07, 6.26527651093056193e-07, 1.24440271065395791e-06, 2.14699434764042962e-06, 3.09743040816101711e-06, 3.49522542819613591e-06, 2.97261067316867411e-06, 1.86879253760707797e-06, 6.71734426305192756e-07, -5.57702094283740735e-07, -2.03817967303621117e-06, -3.91804951505037025e-06, -5.82179927732795477e-06, -6.74550210533197969e-06, -6.18202238911180757e-06, -5.00411306347814389e-06, -4.52626045444048941e-06, -5.53479867448913865e-06, -8.46741932036820799e-06, -1.34435740619665012e-05, -1.89993206731742248e-05, -1.00002145767211914, -1.84692089533200487e-05, -1.1969264960498549e-05, -5.20632193001802079e-06, 9.4135543804441113e-07, 7.37419077267986722e-06, 1.49721990965190344e-05, 2.25609219342004508e-05, 2.61114455497590825e-05, 2.30457426368957385e-05, 1.60792860697256401e-05, 9.57395968725904822e-06, 5.22655454915366136e-06, 2.73226896752021275e-06, 1.43514159844926326e-06, 7.99364329395757522e-07, 4.80829669413651573e-07, 3.0055895194891491e-07, 1.85843660460704996e-07, 1.06203188465769927e-07, 4.31319193694434944e-08, -6.39146691128189559e-08, -6.20875155732392159e-08, 9.44492697385612701e-08, 6.011379838355424e-08, -6.37074251130798075e-08, -1.07727210263419693e-07, -6.5965082285401877e-08, 5.61628752393517061e-08, -1.07426792794740322e-07, 9.86638752920043771e-08, 1.64603903840543353e-07, -2.43222160634104512e-07, -3.25615928886691108e-07, -1.36630561087258684e-07, 1.14738945455883368e-07, 1.98025219333430869e-07, 1.38854446163350076e-07, -9.31465820031007752e-08, -2.04985383334133076e-07, -1.76306514276802773e-07, 1.13244183808092203e-07, 5.61640050023015647e-08, 3.03701881421147846e-08, 2.02338519272871054e-08, 8.41619396396708908e-08, 1.17983425695911137e-07, 1.42827758509156411e-07, 1.77263487444179191e-07, 1.88032046821717813e-07, 1.24193846318121359e-07, -2.59103785538172815e-07, -6.30728493433707627e-07, -1.23064842227904592e-06, -2.1150256088731112e-06, -3.06638071378984023e-06, -3.47901141140027903e-06, -2.94450092042097822e-06, -1.78381526438897708e-06, -5.18544368333095917e-07, 7.64880780934618087e-07, 2.31656690630188677e-06, 4.36079426435753703e-06, 6.53161441732663661e-06, 7.63919524615630507e-06, 6.96483857609564438e-06, 5.43296937394188717e-06, 4.56051748187746853e-06, 5.20256025993148796e-06, 7.71056056692032143e-06, 1.20952281577046961e-05, 1.69820159499067813e-05, 1.00001907348632812, 1.64417688210960478e-05, 1.06744255390367471e-05, 4.6061613829806447e-06, -1.03553361441299785e-06, -7.03402383805951104e-06, -1.41045011332607828e-05, -2.10935304494341835e-05, -2.431163375149481e-05, -2.14518095162929967e-05, -1.50165706145344302e-05, -8.97948848432861269e-06, -4.90338243253063411e-06, -2.5512504180369433e-06, -1.35571303871984128e-06, -8.13865881355013698e-07, -5.49484752809803467e-07, -3.57442473841729225e-07, -2.01046276515626232e-07, -9.81655929876978917e-08, -3.87908656307445199e-08, -5.97530487311814795e-08, -5.91392392834677594e-08, 1.2785137926130119e-07, 9.29902626012335531e-08, -4.95990590820838406e-08, -1.03730691591863433e-07, 6.81188652151831775e-08, -5.18819049943886057e-08, 6.98903477314161137e-08, -1.00871176300643128e-07, -7.66514389738404134e-08, 1.16610664235849981e-07, 2.09497230230226705e-07, -2.78178760027003591e-07, -3.42549981269257842e-07, -1.04858678184882592e-07, 1.57752737095506745e-07, 1.71862666320521384e-07, -5.16398408478835336e-08, -1.23484255709627178e-07, -1.50623534977967211e-07, -6.40677768615205423e-08, 5.20740215392834216e-08, 6.12690769230539445e-08, 3.77561164555118012e-08, -6.53451834864426928e-08, -1.33261323753686156e-07, -1.90372460906473862e-07, -2.0144500467722537e-07, -1.3244482488516951e-07, 2.52355476959564839e-07, 6.23628920948249288e-07, 1.21759819649014389e-06, 2.08016194847004954e-06, 2.99603539133386221e-06, 3.39445477948174812e-06, 2.89342301584838424e-06, 1.77507774878904456e-06, 5.00805469982879004e-07, -8.52773894166602986e-07, -2.49488903136807494e-06, -4.59688180853845552e-06, -6.77429079587454908e-06, -7.86697819421533495e-06, -7.17122338755871169e-06, -5.56700069864746183e-06, -4.51989308203337714e-06, -4.86930275656050071e-06, -6.96257393428822979e-06, -1.08130470835021697e-05, -1.51566709973849356e-05, -1.00001704692840576, -1.4573879525414668e-05, -9.3749295047018677e-06, -3.93184109270805493e-06, 1.17481658890028484e-06, 6.73988915877998807e-06, 1.34474003061768599e-05, 2.01353759621270001e-05, 2.3195683752419427e-05, 2.04193383979145437e-05, 1.42630597110837698e-05, 8.54129757499322295e-06, 4.69930682811536826e-06, 2.47013099397008773e-06, 1.31270371639402583e-06, 7.81245546477293829e-07, 5.44175463801366277e-07, 3.87018303626973648e-07, 2.40129139683631365e-07, 1.19121054353854561e-07, 3.58858009974483139e-08, -3.07131955423756153e-08, -5.50555903089389176e-08, 1.32745171299575304e-07, 9.9306895151585195e-08, -1.27612466371829214e-07, 7.33120444351698097e-08, 5.71242857461129461e-08, 5.03937798157494399e-08, -5.96525424612082134e-08, 6.77079228239563236e-08, -9.10847290924721165e-08, -9.81334267180500319e-08, 1.0013734907943217e-07, 2.46767569933581399e-07, -2.89997501567995641e-07, -3.66446585076118936e-07, -9.30602084281417774e-08, 2.23178531655321422e-07, 2.35830938777326082e-07, -9.68207700680068228e-08, -5.69802622862880526e-08, -4.76456243347911368e-08, -7.74142563386703841e-08, -5.77816017255372572e-08, 5.45946612362513406e-08, -2.17345821340586554e-08, -2.29545751295745504e-08, 7.6394563564008422e-08, 1.32004771558058565e-07, 1.83992568736357498e-07, 1.93401731962694612e-07, 1.29084838818016578e-07, -2.41592829297587741e-07, -6.09097810411185492e-07, -1.20008371595758945e-06, -2.06018148674047552e-06, -2.96688949674717151e-06, -3.33968000632012263e-06, -2.8117078727518674e-06, -1.69383042702975217e-06, -4.42846499026927631e-07, 9.10269761789095355e-07, 2.62520688920631073e-06, 4.88241767016006634e-06, 7.21737478670547716e-06, 8.33593367133289576e-06, 7.50525123294210061e-06, 5.70831980439834297e-06, 4.47006686954409815e-06, 4.57431087852455676e-06, 6.28491443421808071e-06, 9.59236058406531811e-06, 1.33905741677153856e-05, 1.0000150203704834, 1.28832152768154629e-05, 8.22272977529792115e-06, 3.29148201672069263e-06, -1.37514552989159711e-06, -6.49681805953150615e-06, -1.27221055663540028e-05, -1.89908514585113153e-05, -2.19023058889433742e-05, -1.93079285963904113e-05, -1.34799493025639094e-05, -8.04978208179818466e-06, -4.42520013166358694e-06, -2.35500056078308262e-06, -1.29794591430254513e-06, -8.01689623131096596e-07, -5.54470886982016964e-07, -3.85306918815331301e-07, -2.4538954335184826e-07, -1.36823601337709988e-07, -5.53491936727823486e-08, 4.88559024347523518e-08, -4.60764448817485572e-09, -4.8452509560092949e-08, 1.32483719994525018e-07, 1.02095349063802132e-07, -1.57593746052953065e-07, 5.05705202158424072e-08, 4.84896851560279174e-08, 5.77341232599337673e-08, -7.77904816118279996e-08, -1.09108462709173182e-07, 5.54794929996660358e-08, 2.4314957158821926e-07, 9.715226667594834e-08, -2.76579754654449061e-07, -3.93618506677739788e-07, -1.151515505171119e-07, 2.43664402432841598e-07, 3.10968374606090947e-07, 5.7988732038438684e-08, -1.53515415490801388e-07, -1.15600869321497157e-07, 2.75800129401204686e-08, 5.15801019673745031e-08, -3.41252075486409012e-08, -3.63283589877028135e-08, -7.73371340301309829e-08, -1.3304912727107876e-07, -1.91165838714368874e-07, -1.99129942757281242e-07, -1.24305842064131866e-07, 2.46452685814801953e-07, 6.02220040946122026e-07, 1.17881586447765585e-06, 2.02479395738919266e-06, 2.92793856715434231e-06, 3.31038677359174471e-06, 2.78357697425235528e-06, 1.63704180522472598e-06, 3.35604170231817989e-07, -1.0735050182120176e-06, -2.8598942662938498e-06, -5.23883636560640298e-06, -7.74294949223985896e-06, -8.96544133865972981e-06, -8.04781757324235514e-06, -6.00103658143780194e-06, -4.45881096311495639e-06, -4.21997538069263101e-06, -5.46376804777537473e-06, -8.10519577498780563e-06, -1.11810677481116727e-05, -1.00001251697540283, -1.07045143522555009e-05, -6.80025686961016618e-06, -2.57694432548305485e-06, 1.56107728344068164e-06, 6.23340747551992536e-06, 1.19718752102926373e-05, 1.77512411028146744e-05, 2.04241241590352729e-05, 1.80138340510893613e-05, 1.26060103866620921e-05, 7.54200618757749908e-06, 4.13860834669321775e-06, 2.19579874283226673e-06, 1.23287225051171845e-06, 8.14798340798006393e-07, 6.06334197073010728e-07, 4.26755406124357251e-07, 2.58131450436849263e-07, 1.33844451966069755e-07, 5.30547872301667667e-08, -6.9427400717358978e-08, 1.23729563483720995e-07, 1.0749960210887366e-07, -1.35955417590594152e-07, -7.52103943568727118e-08, 4.61441196364376083e-08, 5.43306519773523178e-08, 3.84772711470304785e-08, -5.99971698989065771e-08, -8.29719866146660934e-08, 2.41997696548423846e-07, 1.68314826964888198e-07, -1.96696603893542488e-07, -3.77295066300575854e-07, -1.35538854806327436e-07, 2.32457722404433298e-07, 3.54538457258968265e-07, 1.42395251145899238e-07, -1.3782795349470689e-07, -1.80185097065077571e-07, 7.10022902694618097e-08, 5.55042980465714209e-08, 5.47915171011936764e-08, -5.18470280042038212e-08, -8.33928126553473703e-08, 6.90693795490915363e-08, 1.18875824739461677e-07, 1.7256869000448205e-07, 1.91359831092086097e-07, 1.3069802662357688e-07, -2.45109958996181376e-07, -6.03630439854896395e-07, -1.17310787572932895e-06, -1.99933015210262965e-06, -2.87720285996329039e-06, -3.25014730151451658e-06, -2.73966611530340742e-06, -1.60913862146117026e-06, -2.85544786038371967e-07, 1.19725643799029058e-06, 3.09913411911111325e-06, 5.61549541089334525e-06, 8.24235758045688272e-06, 9.50857702264329419e-06, 8.50129981699865311e-06, 6.24047925157356076e-06, 4.40412668467615731e-06, 3.80196183868974913e-06, 4.57310170531854965e-06, 6.58268891129409894e-06, 8.96928304428001866e-06, 1.00000989437103271, 8.40482061903458089e-06, 5.22526897839270532e-06, 1.75928494172694627e-06, -1.77626827735366533e-06, -5.96590780332917348e-06, -1.12550496851326898e-05, -1.6616531866020523e-05, -1.90671671589370817e-05, -1.67804719239939004e-05, -1.17396730274776928e-05, -7.05126421962631866e-06, -3.90406603401061147e-06, -2.0922341263940325e-06, -1.18088178169273306e-06, -7.92849903064052342e-07, -6.21083984242432052e-07, -4.68794155494833831e-07, -2.99363421163434396e-07, -1.56110957050259458e-07, -5.7030046463069084e-08, -8.0815780734155851e-08, 1.03659324679483689e-07, 9.93079396494067623e-08, -1.13718961358699744e-07, -6.83063774431502679e-08, 5.78284904406700662e-08, -4.09649274502044136e-08, -5.17359310947540507e-08, 2.11062996413602377e-07, 1.93905563605767384e-07, -9.4203429057415633e-08, -2.99944190373935271e-07, -1.25648412563350576e-07, 2.12653162634524051e-07, 3.57302525344493915e-07, 2.06142885872395709e-07, -7.40970520496375684e-08, -2.11377852110672393e-07, -9.75556915250308521e-08, 8.70129355234894319e-08, 1.3142228283413715e-07, 5.27557162399716617e-08, 2.80271006403154388e-08, -7.94611167975745047e-08, 5.00135968195536407e-08, -8.73312089311184536e-08, -1.38511225600268517e-07, -1.83679247811596724e-07, -1.86333664942139876e-07, -1.20670975434222782e-07, 2.36180270007935178e-07, 5.93391234815499047e-07, 1.16864464416721603e-06, 1.99863393390842248e-06, 2.86588078779459465e-06, 3.21282323056948371e-06, 2.67892323790874798e-06, 1.53979715378227411e-06, 2.03198752046773734e-07, -1.33689604808751028e-06, -3.37411688633437734e-06, -6.1027658375678584e-06, -8.93668584467377514e-06, -1.02642916317563504e-05, -9.12272207642672583e-06, -6.61374542687553912e-06, -4.4740463636117056e-06, -3.47402533407148439e-06, -3.69196641258895397e-06, -5.00006672154995613e-06, -6.7292044150235597e-06, -1.0000075101852417, -6.25345774096786045e-06, -3.7403769965749234e-06, -9.49927880355971865e-07, 1.99580244952812791e-06, 5.63743651582626626e-06, 1.03833435787237249e-05, 1.52806387632153928e-05, 1.75427485373802483e-05, 1.54331919475225732e-05, 1.07696678242064081e-05, 6.44777992420131341e-06, 3.58176043846469838e-06, 1.96607425095862709e-06, 1.16879300549044274e-06, 8.20886327801417792e-07, 6.46064790998934768e-07, 4.86767419261013856e-07, 3.19257964065400301e-07, 1.7637914595525217e-07, 7.01328133345668903e-08, -8.78016095384737127e-08, 6.84004461959375476e-08, 7.33743874548054009e-08, -9.29115557823934068e-08, -4.06872651126377605e-08, -3.93863004433114838e-08, 6.05306951229067636e-08, 1.6312667128204339e-07, 1.33440380523097701e-07, -7.56956239911232842e-08, -2.30647700050212734e-07, -9.3603276241083222e-08, 1.93395877090551949e-07, 3.30368550294224406e-07, 2.26268738856560958e-07, -2.00756815615932283e-07, -1.87300500442688644e-07, 1.51874914422478469e-07, 1.08830583656072122e-07, 5.00929360214286135e-08, -6.38165005284463405e-08, -4.97890582096260914e-08, 6.50500950882815232e-08, 1.21280876896889822e-07, 1.79683681267306383e-07, 1.91674473626335384e-07, 1.21884525583482173e-07, -2.41600560002552811e-07, -5.85327200042229379e-07, -1.1442788263593684e-06, -1.96756445802748203e-06, -2.8431215923774289e-06, -3.19968853546015453e-06, -2.65377502728370018e-06, -1.4782466450924403e-06, -9.42516820146011014e-08, 1.50740231674717506e-06, 3.65275923286390025e-06, 6.57482542010257021e-06, 9.64568516792496666e-06, 1.10757573565933853e-05, 9.77347553998697549e-06, 6.94326581651694141e-06, 4.47966658612131141e-06, 3.14447379423654638e-06, 2.87927173303614836e-06, 3.45214948538341559e-06, 4.37460766988806427e-06, 1.00000476837158203, 3.9501887840742711e-06, 2.23704205382091459e-06, 1.70073718663843465e-07, -2.22748963096819352e-06, -5.36952438778826036e-06, -9.56021267484175041e-06, -1.39250678330427036e-05, -1.59596147568663582e-05, -1.40738457048428245e-05, -9.85722454061033204e-06, -5.90912941333954223e-06, -3.26922145177377388e-06, -1.79190556082176045e-06, -1.10215989934658865e-06, -8.4031455571675906e-07, -7.04401941220567096e-07, -5.33703541805152781e-07, -3.40641520324425073e-07, -1.84993226071128447e-07, -7.55725153567254893e-08, -5.83290180600215535e-08, -7.33564391453001008e-08, 5.18722309550412319e-08, 4.20245385157613782e-08, -9.78426868414317141e-08, -4.04756903549241542e-08, 4.12252951775826659e-08, -7.76563950921627111e-08, 7.0787997685783921e-08, 1.35201247530858382e-07, -1.45233400417055236e-07, -2.41037525938736508e-07, -9.21384923913137754e-08, 1.56624210490008409e-07, 2.69938993824325735e-07, 2.01311081582389306e-07, -1.41649920237796323e-07, -2.13302087104239035e-07, -9.46006437629876018e-08, 9.36324227041041013e-08, 1.33005727320778533e-07, 7.35240064386744052e-08, -4.75048622661233821e-08, -2.53231995372971141e-08, 7.67854260175226955e-08, -7.70029160435115045e-08, -1.24699568004871253e-07, -1.73632827227265807e-07, -1.85944955433114956e-07, -1.25078969404057716e-07, 2.41191912664362462e-07, 5.91945422456774395e-07, 1.14292106445645913e-06, 1.93702271644724533e-06, 2.77870572062965948e-06, 3.12983434014313389e-06, 2.61125182987598237e-06, 1.45597880418790737e-06, 5.3773234753862198e-08, -1.59546232225693529e-06, -3.78994650418462697e-06, -6.74786770105129108e-06, -9.85628139460459352e-06, -1.13314217742299661e-05, -1.00251709227450192e-05, -7.07705157765303738e-06, -4.39407131125335582e-06, -2.79507821687730029e-06, -2.23995471060334239e-06, -2.45384921981894877e-06, -2.95301583719265182e-06, -1.00000309944152832, -2.40828717323893216e-06, -1.18922071123961359e-06, 3.38350588435787358e-07, 2.32172419600829016e-06, 5.15462443217984401e-06, 9.05130673345411196e-06, 1.3107063750794623e-05, 1.49454326674458571e-05, 1.31296665131230839e-05, 9.19553713174536824e-06, 5.54874486624612473e-06, 3.10983500639849808e-06, 1.72413729160325602e-06, 1.05951016848848667e-06, 8.12097880498185987e-07, 7.05621971519576618e-07, 5.59071679617773043e-07, 3.64970389910013182e-07, 1.95602609665002092e-07, 7.76856907691581e-08, -5.69390259386182152e-08, -5.45298703968910559e-08, 8.77166641544135928e-08, 5.5814407318166559e-08, -5.72907943308109679e-08, -9.72345972627408628e-08, -5.88899240483442554e-08, 4.99723213920333365e-08, -9.60283301765230135e-08, 8.92812650477026182e-08, 1.45652492733461258e-07, -2.18275488350627711e-07, -2.88266363668299164e-07, -1.1737772354081244e-07, 1.04358392150061263e-07, 1.71701415752067987e-07, 1.13392879086404719e-07, -8.35959141909370373e-08, -1.74988272760856489e-07, -1.47925391047465382e-07, 9.66353113085460791e-08, 4.43183871823293885e-08, 2.60169770172069548e-08, 1.58390722759804703e-08, 7.10146323967819626e-08, 1.23708346677631198e-07, 1.73665668512512639e-07, 1.80866450705252646e-07, 1.17678460753722902e-07, -2.24024120143440086e-07, -5.67378833693510387e-07, -1.12246198114007711e-06, -1.92139691534976009e-06, -2.7494163532537641e-06, -3.06955212181492243e-06, -2.53684424933453556e-06, -1.40652855407097377e-06, 1.59834780788514763e-06, 3.83512906410032883e-06, 6.86032080920995213e-06, 9.99479470920050517e-06, 1.14259182737441733e-05, 1.00703628049814142e-05, 7.11718075763201341e-06, 4.41019301433698274e-06, 2.67696464106847998e-06, 1.85966200660914183e-06, 1.75696754922682885e-06, 2.02490218725870363e-06, 1.00000214576721191, 1.58729869781382149e-06, 5.92041033087298274e-07, -6.78527896980085643e-07, -2.37653807744209189e-06, -4.90775391881470568e-06, -8.51553340908139944e-06, -1.23569361676345579e-05, -1.4134139746602159e-05, -1.24181833598413505e-05, -8.6615718828397803e-06, -5.19347167937667109e-06, -2.91040259980945848e-06, -1.64709501859761076e-06, -1.05402386907371692e-06, -8.21276955775829265e-07, -7.00496798344829585e-07, -5.4950959338384564e-07, -3.65312445183008094e-07, -2.01706257030309644e-07, -8.1084024827760004e-08, -5.23542027508483443e-08, -5.38042002062866231e-08, 1.05049444698579464e-07, 6.52389147148824122e-08, -1.13901961640294758e-07, 5.74135015085630585e-08, -4.93858607342190226e-08, 6.13888246903115942e-08, -9.16166200681800547e-08, -6.80389788954016694e-08, 1.0424629692806775e-07, 1.85471364488876134e-07, -2.48293162030677195e-07, -3.04039645016018767e-07, -9.1570989013689541e-08, 1.41312838763951731e-07, 1.49776326452411013e-07, -4.86854787595802918e-08, -1.04053277993898519e-07, -1.24310147953110572e-07, -5.04717547755717533e-08, 4.51891182251529244e-08, 4.7204601116845879e-08, 3.03396561207591731e-08, -6.75682443329606031e-08, -1.19985145374812419e-07, -1.71879051436008012e-07, -1.81474248961421836e-07, -1.14145770169216121e-07, 2.34652219432973652e-07, 5.61296985779335955e-07, 1.08976723822706845e-06, 1.86807028512703255e-06, 2.69637826022517402e-06, 3.02886564895743504e-06, 2.49162553700443823e-06, 1.33432638449448859e-06, -1.69981581166211981e-06, -3.95130928154685535e-06, -7.04919784766389057e-06, -1.03147058325703256e-05, -1.18159541671047918e-05, -1.0357372957514599e-05, -7.19879062671680003e-06, -4.31933221989311278e-06, -2.44422381001641043e-06, -1.39012740874022711e-06, -8.47646731472195825e-07, -5.90583852044801461e-07, -1.0000004768371582, -2.03963708145238343e-07, 2.77865154885148513e-07, 1.12398845431016525e-06, 2.51783103522029705e-06, 4.74621811008546501e-06, 7.97315624367911369e-06, 1.1428907782828901e-05, 1.3043167200521566e-05, 1.14973918243777007e-05, 8.06400930741801858e-06, 4.85002419736701995e-06, 2.70560371973260771e-06, 1.52026791511161719e-06, 9.93860453490924556e-07, 8.23265281724161468e-07, 7.33635033611790277e-07, 5.75887042941758409e-07, 3.75447825717856176e-07, 2.0543103573800181e-07, 8.26547648102859966e-08, -2.32450325654554035e-08, -4.55056152759425458e-08, 1.22942324765062949e-07, 9.10386717123401468e-08, -1.15594517069439462e-07, 7.04213434232769941e-08, 5.82435148999138619e-08, -2.08728110351330542e-08, 6.62966570530443278e-08, -8.17023462218458008e-08, -8.72278462793474318e-08, 8.87363142965114093e-08, 2.17678135072674195e-07, -2.58160980592947453e-07, -3.25334951867262134e-07, -8.30308053423323145e-08, 1.96316250367090106e-07, 2.0439581760456349e-07, -9.68082858321395179e-08, -5.45710392430009961e-08, -4.98708168095163273e-08, -2.27252048290438324e-08, 6.72476474505856459e-08, 1.16080968837195542e-07, 1.65826719467077055e-07, 1.79273570211080369e-07, 1.2138241345382994e-07, -2.27477713110602053e-07, -5.62641503165650647e-07, -1.08880828975088662e-06, -1.84353950771765085e-06, -2.63790479948511347e-06, -2.96271014121884946e-06, -2.45800720222177915e-06, -1.33220169118430931e-06, 6.71096600513010344e-08, 1.76457660927553661e-06, 4.06830895371967927e-06, 7.19217723599285819e-06, 1.04731525425449945e-05, 1.20143831736641005e-05, 1.05811723187798634e-05, 7.34266450308496132e-06, 4.26432097810902633e-06, 2.13826251638238318e-06, 8.28188831292209215e-07, -5.97911196109635057e-07, 0.999999046325683594, -1.11255440060631372e-06, -1.17243985187087674e-06, -1.5379279147964553e-06, -2.56087878369726241e-06, -4.52205540568684228e-06, -7.5044354161946103e-06, -1.06998304545413703e-05, -1.21399834824842401e-05, -1.06449806480668485e-05, -7.45392253520549275e-06, -4.51050527772167698e-06, -2.55607960752968211e-06, -1.46362265240895795e-06, -9.63534716902358923e-07, -8.00883867668744642e-07, -7.29557200429553632e-07, -5.89812827911373461e-07, -3.91335390759195434e-07, -2.14909746887315123e-07, -8.80273276493426238e-08, -5.2063828803738943e-08, 1.201745192247472e-07, 9.24978422744970885e-08, -1.43565543453405553e-07, 4.82278075253361749e-08, 4.76324366616154293e-08, -6.2135079303970997e-08, -8.41428260400789441e-08, 2.34728602777067863e-07, 1.02152178271808225e-07, -2.33312462682988553e-07, -3.40658402819826733e-07, -9.66722595308056043e-08, 2.19607827034451475e-07, 2.78249103757843841e-07, 5.22192387109043921e-08, -1.36995851107712951e-07, -1.01453316858624021e-07, -5.19901348638995842e-08, -7.11011338694333972e-08, -1.20076919074563193e-07, -1.65718105904488766e-07, -1.72423284539036104e-07, -1.12353014003474527e-07, 2.17559488646656973e-07, 5.45690511444263393e-07, 1.07411631233844673e-06, 1.83540316811559023e-06, 2.62380262938677333e-06, 2.92032837023725733e-06, 2.38839766097953543e-06, 1.26541999634355307e-06, -1.144733516866836e-07, -1.82028509243536973e-06, -4.19354637415381148e-06, -7.43446935302927159e-06, -1.07970308818039484e-05, -1.23107110994169489e-05, -1.07894720713375136e-05, -7.4901304287777748e-06, -4.35310448665404692e-06, -2.0797515389858745e-06, -5.01943134167959215e-07, 6.4771251118145301e-07, 1.47041509990231134e-06, -0.999998092651367188, 1.87119951533532003e-06, 1.72537852449750062e-06, 1.85180670086992905e-06, 2.59207354247337207e-06, 4.23118217440787703e-06, 6.8813260440947488e-06, 9.81368521024705842e-06, 1.11760364234214649e-05, 9.81291395873995498e-06, 6.84928590999334119e-06, 4.11626433560741134e-06, 2.32754200624185614e-06, 1.36103756176453317e-06, 9.43373947848158423e-07, 8.14962788808770711e-07, 7.44033684441092191e-07, 5.97697692228393862e-07, 3.96715591932661482e-07, 2.17784162259704317e-07, 8.70254339702114521e-08, -1.1980719527571182e-08, -5.94603797310355731e-08, 1.16266392069519497e-07, 9.94756348404735036e-08, -1.23924365880156984e-07, -6.82683634067871026e-08, 4.28175894739979412e-08, 5.10961157829115109e-08, -4.82320423600413051e-08, -6.95596540367660054e-08, 2.14925137242971687e-07, 1.48105186781322118e-07, -1.73716770746068505e-07, -3.31557345134569914e-07, -1.17087743944921385e-07, 2.08014100167019933e-07, 3.15645763748761965e-07, 1.28124924003714113e-07, -1.18537762716641737e-07, -1.52655147189761919e-07, 7.69318404536534217e-08, 3.87209766472551564e-08, -6.48287894478016824e-08, 6.27763725447039178e-08, 1.15450021098695288e-07, 1.65567414001088764e-07, 1.72764089256816078e-07, 1.07810372185213055e-07, -2.23325258730255882e-07, -5.37680705292586936e-07, -1.04497837583039654e-06, -1.78695700014941394e-06, -2.57224587585369591e-06, -2.88288720184937119e-06, -2.35918309954286087e-06, -1.22397989343880909e-06, 1.72814708321311628e-07, 1.88428998626477551e-06, 4.26605993197881617e-06, 7.56151621317258105e-06, 1.10345099528785795e-05, 1.26156146507128142e-05, 1.10135060822358355e-05, 7.54045640860567801e-06, 4.26449514634441584e-06, 1.89909951586741954e-06, 1.69594557064556284e-07, -1.29759052924782736e-06, -2.52421205004793592e-06, 0.99999690055847168, -2.88539104076335207e-06, -2.33944297178823035e-06, -2.14494684769306332e-06, -2.66148140326549765e-06, -4.06947083320119418e-06, -6.41190354144782759e-06, -9.01819566934136674e-06, -1.02307903944165446e-05, -9.00382656254805624e-06, -6.32310729997698218e-06, -3.82475400328985415e-06, -2.16734088098746724e-06, -1.26675615774729522e-06, -8.93158528469939483e-07, -8.04492856332217343e-07, -7.60129182708624285e-07, -6.19153240677405847e-07, -4.11586142945452593e-07, -2.25738560288846202e-07, -9.12919588813565497e-08, -7.53525384311615198e-08, 9.68469748841016553e-08, 9.20483955724193947e-08, -1.02699360127189721e-07, -6.05420282795421372e-08, 5.46988658811642381e-08, -3.86887855086115451e-08, -4.4912546570685663e-08, 1.87432945608634327e-07, 1.69917811376762984e-07, -8.39796001628201338e-08, -2.62784169535734691e-07, -1.07373764990370546e-07, 1.90124410437420011e-07, 3.15434874664788367e-07, 1.80197119448166632e-07, -6.68191688646402326e-08, -1.84310650297447864e-07, -7.80104656428193266e-08, 8.94430982611993386e-08, 1.30162263189959049e-07, -5.16525098248621362e-08, -6.30473593332681048e-08, -1.07851192865382473e-07, -1.56590644451171102e-07, -1.71264233017609513e-07, -1.15163366842807591e-07, 2.18336097645988048e-07, 5.33200193331140326e-07, 1.02903220522421179e-06, 1.74271724517893745e-06, 2.4924647732404992e-06, 2.79109190159942955e-06, 2.29632837545068469e-06, 1.20683489512884989e-06, -1.55123245804134058e-07, -1.83042300250235712e-06, -4.1309403968625702e-06, -7.26854750610073097e-06, -1.05668232208699919e-05, -1.21054345072479919e-05, -1.06349507404956967e-05, -7.32002445147372782e-06, -4.10982966059236787e-06, -1.75761192622303497e-06, -7.99076431690082245e-08, 1.27716407405387145e-06, 2.42456735577434301e-06, -0.999996960163116455, 2.89665240416070446e-06, 2.35574407270178199e-06, 2.10330358640931081e-06, 2.57462943409336731e-06, 3.97742087443475612e-06, 6.3295233303506393e-06, 8.92155367182567716e-06, 1.0092000593431294e-05, 8.83965822140453383e-06, 6.18401327301398851e-06, 3.74258956981066149e-06, 2.13609632737643551e-06, 1.2595706948559382e-06, 8.82897779774793889e-07, 7.78828791681007715e-07, 7.26383802884811303e-07, 5.91976800023985561e-07, 3.97136261653940892e-07, 2.20921322124922881e-07, 9.11178474893858947e-08, -8.49690948712122918e-08, 6.19715549987631675e-08, 6.73684468210922205e-08, -8.27096329203413916e-08, -3.30245946145169e-08, -3.22490549820031447e-08, 1.47335924793878803e-07, 1.1782217512745774e-07, -6.7025631267370045e-08, -1.99902416397890192e-07, -7.59315526011050679e-08, 1.75427771864633542e-07, 2.91251438966355636e-07, 1.94999543623453064e-07, -1.82355208266926638e-07, -1.67225522318403819e-07, 1.40103495027688041e-07, 1.04555148539020593e-07, -3.90064514022014919e-08, 6.82009755337276147e-08, 1.13163501680446643e-07, 1.52764400240812392e-07, 1.58111745918176894e-07, 1.05004687611653935e-07, -2.00534998384682694e-07, -5.07101049151970074e-07, -9.95732307274010964e-07, -1.69516056303109508e-06, -2.41983411797264125e-06, -2.69699444288562518e-06, -2.21265622712962795e-06, -1.17521358333760872e-06, 1.11503723587702552e-07, 1.70892053574789315e-06, 3.92840638596680947e-06, 6.95272819939418696e-06, 1.00869438028894365e-05, 1.14935646706726402e-05, 1.00651977845700458e-05, 6.97443374519934878e-06, 4.03032709073158912e-06, 1.87823366104566958e-06, 3.48276614658971084e-07, -8.16074020804080646e-07, -1.68655355992086697e-06, 0.999997854232788086, -2.05767196348460857e-06, -1.81137590971047757e-06, -1.82124608727463055e-06, -2.42387932303245179e-06, -3.86614738090429455e-06, -6.23131927568465471e-06, -8.85458121047122404e-06, -1.00745783129241318e-05, -8.85495046532014385e-06, -6.19583670413703658e-06, -3.73331613445770927e-06, -2.11175097319937777e-06, -1.23218626413290622e-06, -8.59294971178314881e-07, -7.57433099352056161e-07, -7.01737747021979885e-07, -5.64382332868262893e-07, -3.73135151221504202e-07, -2.05487879156862618e-07, -8.48881427373271435e-08, -6.70558577553492796e-08, 5.25684029639705841e-08, -8.5989427134336438e-08, -4.49956090164960187e-08, 7.65614842634931847e-08, 1.2687453931903292e-07, -1.3287328215483285e-07, -2.15874820241879206e-07, -7.98488457576240762e-08, 1.40445166607605643e-07, 2.36110949458634423e-07, 1.71108410995657323e-07, -1.30443510215627612e-07, -1.90962026636043447e-07, -8.38836839989198779e-08, 8.46472048010582512e-08, 1.21863308777392376e-07, 4.41818457375120488e-08, -5.57417401125803735e-08, -1.05633354507972399e-07, -1.53359223986626603e-07, -1.58630712121521356e-07, -9.62081756483712525e-08, 2.03549390676016628e-07, 4.88134730858291732e-07, 9.51940421600738773e-07, 1.63156573762535118e-06, 2.34733465731551405e-06, 2.62603839473740663e-06, 2.14871806747396477e-06, 1.12952488962037023e-06, -1.07563437268254347e-07, -1.60688955475052353e-06, -3.68101405001652893e-06, -6.54144014333724044e-06, -9.55313316808314994e-06, -1.09308093669824302e-05, -9.55888845055596903e-06, -6.57242753732134588e-06, -3.77123365069564898e-06, -1.79337030203896575e-06, -4.23081132794322912e-07, 6.5297462015223573e-07, 1.50623202443966875e-06, -0.999998092651367188, 1.8441609199726372e-06, 1.61471791670919629e-06, 1.70122245890524937e-06, 2.39245946431765333e-06, 3.88884336643968709e-06, 6.26131941316998564e-06, 8.86059478943934664e-06, 1.00574634416261688e-05, 8.83900338521925732e-06, 6.19759430264821276e-06, 3.74743899556051474e-06, 2.12353211281879339e-06, 1.22863309570675483e-06, 8.34417107853369089e-07, 7.18574881375388941e-07, 6.65167760871554492e-07, 5.39842915259214351e-07, 3.58693824864531052e-07, 1.96059147583582671e-07, 7.84373170858998492e-08, -5.30020116684681852e-08, 9.34376203076681122e-08, -3.73792339303236076e-08, -7.79032802711299155e-08, -7.41460439712682273e-08, 9.19702216606310685e-08, 1.37342766493020463e-07, -1.96644847960669722e-07, -2.58039506206841907e-07, -1.02293860493318789e-07, 9.56139203367456503e-08, 1.50563806755599217e-07, 9.31860100195081031e-08, -7.89597862649316085e-08, -1.56388935579343524e-07, -1.30902236605834332e-07, 8.74761099112220109e-08, 4.39183480693827732e-08, 3.29174518753916345e-08, 5.86589941065085441e-08, 9.71212372746776964e-08, 1.40482200094993459e-07, 1.55916126232114038e-07, 1.07051839393079717e-07, -1.99472893314123212e-07, -4.842055432163761e-07, -9.27555049656803021e-07, -1.56556689034914598e-06, -2.24103746404580306e-06, -2.51936921813467052e-06, -2.08934125112136826e-06, -1.12961140530387638e-06, 5.55157235737624433e-08, 1.48070364502927987e-06, 3.40544170285284054e-06, 6.01005740463733673e-06, 8.73877343110507354e-06, 1.00123488664394245e-05, 8.81038158695446327e-06, 6.10114466326194815e-06, 3.49994184034585487e-06, 1.64394498369802022e-06, 4.03020294470479712e-07, -5.03695275710924761e-07, -1.22237224786658771e-06, 0.999998390674591064, -1.64452535500458907e-06, -1.48938977417856222e-06, -1.61398054387973389e-06, -2.3546485863334965e-06, -3.93731443182332441e-06, -6.42489203528384678e-06, -9.13263011170784011e-06, -1.0372488759458065e-05, -9.10528524400433525e-06, -6.36871118331328034e-06, -3.83645783585961908e-06, -2.16346961678937078e-06, -1.24351799968280829e-06, -8.29376176625373773e-07, -6.88103341417445336e-07, -6.15173348705866374e-07, -4.91283742576342775e-07, -3.27266320709895808e-07, -1.82001699045031273e-07, -7.53032409761544841e-08, -4.8079410674972678e-08, -4.82083279962353117e-08, 9.90034507708514866e-08, 6.43285957835360023e-08, -9.63108277574065141e-08, -3.62159653377602808e-08, -7.94439216633691103e-08, -5.45632623527581018e-08, 1.01737775537458219e-07, 1.72376033447108057e-07, -2.22688356643629959e-07, -2.72759422159651876e-07, -8.11688991575465479e-08, 1.27345956002500316e-07, 1.31025032601428393e-07, -4.828682165225473e-08, -9.1848974648200965e-08, -1.06294081092528359e-07, 5.24239460730768769e-08, -6.03934111609305546e-08, -1.02442179183981352e-07, -1.37673453082243213e-07, -1.40268426207512675e-07, -9.24250471712184662e-08, 1.74852615941745171e-07, 4.49225609600034659e-07, 8.89168404683005065e-07, 1.51696724515204551e-06, 2.16396392715978436e-06, 2.41297038883203641e-06, 1.99473561224294826e-06, 1.10302244138438255e-06, -1.28728765957930591e-06, -3.06373817693383899e-06, -5.46129376743920147e-06, -7.9396440924028866e-06, -9.05483375390758738e-06, -7.93829531176015735e-06, -5.52027950107003562e-06, -3.2359560009354027e-06, -1.60894194323191186e-06, -5.2213658818800468e-07, 2.20397595285248826e-07, 7.25348343166842824e-07, -0.999998986721038818, 1.07842117813561345e-06, 1.14419037799962098e-06, 1.47132664096716326e-06, 2.34161393564136233e-06, 4.02316436520777643e-06, 6.62027878206572495e-06, 9.44166913541266695e-06, 1.07431978904060088e-05, 9.44576186157064512e-06, 6.61751346342498437e-06, 3.98623296860023402e-06, 2.23144365918415133e-06, 1.253596565220505e-06, 8.06949572051962605e-07, 6.51048992494906997e-07, 5.71942450733331498e-07, 4.48237898353909259e-07, 2.91872453317409963e-07, 1.58766894742257136e-07, 6.39353316955748596e-08, -1.93154683358898183e-08, -3.93110255458850588e-08, 1.12019435505317233e-07, 8.07450035722467874e-08, -1.07255125669780682e-07, 6.67316228941672307e-08, 5.5579196356347893e-08, -7.46159685149905272e-08, -7.6554890426905331e-08, 8.40792822032199183e-08, 1.99815090695665276e-07, -2.29897011649882188e-07, -2.90088536303301225e-07, -7.1870040585508832e-08, 1.79500744934557588e-07, 1.85467868618616194e-07, -9.22937886116415029e-08, -5.31916874990656652e-08, -4.54564990093331289e-08, 5.02458838980146538e-08, 9.32631181171927892e-08, 1.3640307372497773e-07, 1.42743232345310389e-07, 8.63542268803030311e-08, -1.84539786118875782e-07, -4.33699995028291596e-07, -8.37289178434730275e-07, -1.43120894335879711e-06, -2.06163645088963676e-06, -2.31601575251261238e-06, -1.91978733710129745e-06, -1.07097901036468102e-06, -7.23485982234706171e-08, 1.08186020497669233e-06, 2.61989976024779025e-06, 4.70187023893231526e-06, 6.88051659381017089e-06, 7.87948010838590562e-06, 6.89926991981337778e-06, 4.75592378279543482e-06, 2.74401463684625924e-06, 1.32536683850048576e-06, 3.47302119507730822e-07, -4.12903858659774414e-07, -1.00967372418381274e-06, 0.999998688697814941, -1.31845865780633176e-06, -1.29250634017807897e-06, -1.59983233061211649e-06, -2.51800565820303746e-06, -4.29676174462656491e-06, -7.04090189174166881e-06, -1.00218458101153374e-05, -1.13893784146057442e-05, -9.99991789285559207e-06, -6.99550992067088373e-06, -4.21192544308723882e-06, -2.35564971262647305e-06, -1.30425303268566495e-06, -7.96894539689674275e-07, -5.98246629124332685e-07, -5.06151593526737997e-07, -3.95091916516321362e-07, -2.58044480005992227e-07, -1.39463182335930469e-07, -5.51199939025082131e-08, -4.19007193386278232e-08, 1.11603860375453223e-07, 8.30369373261419241e-08, -1.35162508740904741e-07, 4.42525980304253608e-08, 4.58429099126078654e-08, -5.58717765386518295e-08, -7.54522773149801651e-08, 2.11124444149390911e-07, 9.20626703759808152e-08, -2.0819818757900066e-07, -3.03674482893256936e-07, -8.43997511879024387e-08, 1.99496341224403295e-07, 2.51826833164159325e-07, 4.74084593804491305e-08, -1.24296690273695276e-07, -9.18222795576184581e-08, -4.36950990945206286e-08, -5.09816651117489528e-08, -8.53841086723150511e-08, -1.21729968327599636e-07, -1.33935017743169738e-07, -9.38709376896440517e-08, 1.65969822774059139e-07, 4.15716584711844916e-07, 8.05525530722661642e-07, 1.36403912165405927e-06, 1.95443544726003893e-06, 2.20265360439952929e-06, 1.84912482836807612e-06, 1.06672359834192321e-06, 1.42585250273441488e-07, -9.04424723557895049e-07, -2.25813755605486222e-06, -4.05100900024990551e-06, -5.91215984968584962e-06, -6.77464777254499495e-06, -5.9500835050130263e-06, -4.09636095355381258e-06, -2.30310001825273503e-06, -9.90909256870509125e-07, 7.1138583734864369e-07, 1.37591007387527497e-06, -0.999998211860656738, 1.76079936409223592e-06, 1.62433241257531336e-06, 1.81980817615112755e-06, 2.70333498519903515e-06, 4.53175744041800499e-06, 7.38951302992063574e-06, 1.05046146927634254e-05, 1.19419919428764842e-05, 1.04926566564245149e-05, 7.33548313291976228e-06, 4.39946688857162371e-06, 2.44218745137914084e-06, 1.3361225228436524e-06, 7.94249956470594043e-07, 5.63310209145129193e-07, 4.47618589305420755e-07, 3.36549391022344935e-07, 2.18106734450884687e-07, 1.19273693144350545e-07, 4.84692854740842449e-08, -4.9329241136319979e-08, 1.11640723332584457e-07, 9.45618054970509547e-08, -1.04101239628562325e-07, -4.62652636201710266e-08, 6.53778826631423726e-08, -4.05555056204320863e-08, -6.04162551098852418e-08, 1.92789727293529722e-07, 1.32112390360816789e-07, -1.55149294300827023e-07, -2.95028257824014872e-07, -1.0256794524821089e-07, 1.87864927170267038e-07, 2.82985098465360352e-07, 1.13444968974363292e-07, -1.08488215744273475e-07, -1.378786294026213e-07, 7.24939610563524184e-08, -5.18355562917349744e-08, 5.29225800960375636e-08, 8.99927599107286369e-08, 1.23577535759977764e-07, 1.26756503959768452e-07, 8.06084941018525569e-08, -1.60287797257296916e-07, -3.95937661323841894e-07, -7.7323846880972269e-07, -1.3154158295947127e-06, -1.88211515705916099e-06, -2.11418705475807656e-06, -1.77618574070947943e-06, -1.04363834907417186e-06, -1.88732002470715088e-07, 7.72511327795655234e-07, 2.00947488337988034e-06, 3.63725303031969815e-06, 5.30754005012568086e-06, 6.06062576480326243e-06, 5.30860188519000076e-06, 3.66101107829308603e-06, 2.06475760933244601e-06, 8.53588971949648112e-07, -7.12567143068554287e-08, -8.52250479965732666e-07, -1.49786910697002895e-06, 0.999998152256011963, -1.82358087386091938e-06, -1.69535712757351575e-06, -1.89043942100397544e-06, -2.76875107374507934e-06, -4.61214267488685437e-06, -7.50936214899411425e-06, -1.06625166154117323e-05, -1.21074372145812958e-05, -1.06369225250091404e-05, -7.44738417779444717e-06, -4.47302409156691283e-06, -2.47390426011406817e-06, -1.33228752474678913e-06, -7.698441208958684e-07, -5.32834008026839001e-07, -4.17390566553876852e-07, -3.07903860630176496e-07, -1.93870064890688809e-07, -1.02001045831912052e-07, -3.75576902911234356e-08, -6.98504081242390384e-08, 9.47604377188326907e-08, 9.00966483641241211e-08, -7.63716982987716619e-08, -2.14738378190304502e-08, -2.95830808738628548e-08, -3.61340291021861049e-08, 1.68528799804334994e-07, 1.50510274465887051e-07, -7.6160795003943349e-08, -2.33550210282373882e-07, -9.32344121906680812e-08, 1.71676830973410688e-07, 2.81294347814764478e-07, 1.5800347341610177e-07, -6.39389767798093089e-08, -1.67785771054695942e-07, -6.98598867643340782e-08, 8.22120043153518054e-08, 1.19226257311311201e-07, -4.34951488159640576e-08, -8.75845387326990021e-08, -1.24110002275301667e-07, -1.31174616058160609e-07, -8.67565006501536118e-08, 1.51934017367238994e-07, 3.79603960709573585e-07, 7.43987015994207468e-07, 1.27081693790387362e-06, 1.82296287221106468e-06, 2.04731873054697644e-06, 1.71674764715135098e-06, 1.01144553354970412e-06, 2.03146996113900968e-07, -6.90612750986474566e-07, -1.83361566996609326e-06, -3.34234414367529098e-06, -4.89867716169101186e-06, -5.59980253456160426e-06, -4.88441310153575614e-06, -3.33010825670498889e-06, -1.83900692718452774e-06, -7.09790981545666e-07, 1.96287743392531411e-07, 1.04894525065901689e-06, 1.80954043571546208e-06, -0.999997794628143311, 2.10544249057420529e-06, 1.87203886525821872e-06, 1.9944975520047592e-06, 2.82446171695482917e-06, 4.62769094156101346e-06, 7.49911214370513335e-06, 1.06450670500635169e-05, 1.20856402645586058e-05, 1.06042261904804036e-05, 7.41213625587988645e-06, 4.45168552687391639e-06, 2.46900208367151208e-06, 1.33057267248659628e-06, 7.55688120079867076e-07, 5.03212106650607893e-07, 3.84696761557279387e-07, 2.8518829253698641e-07, 1.8343099839057686e-07, 1.00099278199650144e-07, 4.06467819402678288e-08, 1.42510732104028648e-08, 3.45003989821179857e-08, -8.32038651310540445e-08, -3.30004006343642686e-08, -2.38859811929614807e-08, 1.33743711216993688e-07, 1.03478249968702585e-07, -6.2861687410986633e-08, -1.7867536428184394e-07, -6.49033609079197049e-08, 1.58957988105612458e-07, 2.59025512150401482e-07, 1.69967307783736032e-07, -1.66692913694532763e-07, -1.50698269862914458e-07, 1.26703838532193913e-07, 9.49905754055180296e-08, 8.33130044952667959e-08, 1.21071337844114169e-07, 1.29654580405258457e-07, 8.4712333148218022e-08, -1.53062671870429767e-07, -3.71409214494633488e-07, -7.18924525244801771e-07, -1.2261967867743806e-06, -1.76668856965989107e-06, -1.99487931240582839e-06, -1.67758946645335527e-06, -9.85343035608821083e-07, -1.91688528161648719e-07, 6.76192428272770485e-07, 1.77379956767254043e-06, 3.21743937092833221e-06, 4.71305702376412228e-06, 5.40294468009960838e-06, 4.73250338473008014e-06, 3.22714754474873189e-06, 1.75385957845719531e-06, 6.31205523404787527e-07, -2.49453762535267742e-07, -1.06396305454836693e-06, -1.81495863671443658e-06, 0.999997794628143311, -2.15283353099948727e-06, -1.89354091162385885e-06, -1.9784974938374944e-06, -2.77529397862963378e-06, -4.5279439291334711e-06, -7.31298723621875979e-06, -1.0368114999437239e-05, -1.17804720503045246e-05, -1.0350748198106885e-05, -7.23678112990455702e-06, -4.33658033216488548e-06, -2.39611540564510506e-06, -1.29136037685384508e-06, -7.40523489639599575e-07, -4.97491896567225922e-07, -3.76457109041439253e-07, -2.72313826599202002e-07, -1.69829064589066547e-07, -8.93514808808504313e-08, -3.4970138784728988e-08, 2.01598240323619393e-08, -8.57921236274705734e-08, -4.10224991753693757e-08, 7.36401872813985392e-08, 1.16401388083886559e-07, -1.23127833262515196e-07, -1.95275944747663743e-07, -6.96144297762657516e-08, 1.27630187307659071e-07, 2.09159750852450088e-07, 1.47298067076917505e-07, -1.20455922569817631e-07, -1.71920945035708428e-07, -7.482352515353341e-08, 7.59412444040208356e-08, 1.09022813887804659e-07, 4.08906402071806951e-08, -5.00246883916588558e-08, -7.96527714896910766e-08, -1.08977666002374463e-07, -1.17412682243411837e-07, -8.22173689130067942e-08, 1.4574122531030298e-07, 3.6726996199831774e-07, 7.10935012193658622e-07, 1.19915318919083802e-06, 1.71216299804655137e-06, 1.92947095456474926e-06, 1.63183256063348381e-06, 9.71558620221912861e-07, 1.99780998855203507e-07, -6.56626525596948341e-07, -1.73926821389613906e-06, -3.15061993205745239e-06, -4.59725470136618242e-06, -5.25388531968928874e-06, -4.60601268059690483e-06, -3.17066587740555406e-06, -1.76753690084296977e-06, -6.89435580625286093e-07, 1.53025965232700401e-07, 8.91102445166325197e-07, 1.5249440821207827e-06, -0.999998152256011963, 1.83221857241733233e-06, 1.66992538197519025e-06, 1.82023927663976792e-06, 2.63378069575992413e-06, 4.36871869169408455e-06, 7.09787900632363744e-06, 1.00664901765412651e-05, 1.14246677185292356e-05, 1.00346605904633179e-05, 7.02604893376701511e-06, 4.2220922296110075e-06, 2.33598598242679145e-06, 1.25407177620218135e-06, 7.13500753590778913e-07, 4.80245375911181327e-07, 3.70888869838381652e-07, 2.76240200491884025e-07, 1.7709703570290003e-07, 9.4385143256658921e-08, 7.92116594539038488e-08, -3.71046340319480805e-08, -7.1733559536824032e-08, -7.20074453397501202e-08, 8.7349633304256713e-08, 1.2702970764166821e-07, -1.79718924187000084e-07, -2.33678846939255891e-07, -9.01943266740090621e-08, 8.81802293406508397e-08, 1.33026077264730702e-07, 7.66523626793969015e-08, -7.45593453643778048e-08, -1.401910481035884e-07, -1.15570273351295327e-07, 7.89313290283644164e-08, 3.98200761253519886e-08, 8.42772749365394702e-08, 1.17279057576524792e-07, 1.17559061152405775e-07, 7.27602937899973767e-08, -1.36602807287999894e-07, -3.44094928550475743e-07, -6.81691233239689609e-07, -1.16781700398860266e-06, -1.6714313915144885e-06, -1.87135151463735383e-06, -1.56843498189118691e-06, -9.32296870814752765e-07, -2.08977013471667306e-07, 5.87062686463468708e-07, 1.5992669659681269e-06, 2.92568142867821734e-06, 4.28436533184139989e-06, 4.89030480821384117e-06, 4.26419592258753255e-06, 2.91106334771029651e-06, 1.60938714088842971e-06, 6.1622199609701056e-07, -1.86044061933898774e-07, -9.38374796533025801e-07, -1.60615786626294721e-06, 0.999998033046722412, -1.88702449577249354e-06, -1.7024359522110899e-06, -1.84077941867144546e-06, -2.63136325884261169e-06, -4.33191507909214124e-06, -7.03215255271061324e-06, -9.98700124910101295e-06, -1.13423484435770661e-05, -9.95490972854895517e-06, -6.95750895829405636e-06, -4.17485807702178136e-06, -2.31153899221681058e-06, -1.24425025660457322e-06, -7.0641073079968919e-07, -4.65600692223233636e-07, -3.46331233913588221e-07, -2.50218505470911623e-07, -1.60509955549059669e-07, -8.98700136531260796e-08, -5.62342989951503114e-08, 8.50251566930637637e-08, 5.4769245139141276e-08, -8.87657236603445199e-08, -7.98686414782423526e-08, -5.13473565888489247e-08, 9.48184819549169333e-08, 1.59008891387202311e-07, -2.03345237537178036e-07, -2.49420878617456765e-07, -7.63098881861878908e-08, 1.10274108067187626e-07, 1.08641486917804286e-07, -8.43888017243443755e-08, -9.45541742680688913e-08, 4.42962111435463157e-08, -7.29031910395860905e-08, -1.09351468324803136e-07, -1.21744093917186547e-07, -8.10245381899221684e-08, 1.41729231017961865e-07, 3.39059596399238217e-07, 6.52698531666828785e-07, 1.11402562197326915e-06, 1.60927697834267747e-06, 1.82181076979759382e-06, 1.53653752477111993e-06, 9.11572328732290771e-07, 2.04183706387084385e-07, -5.54627774818072794e-07, -1.50266293985623633e-06, -2.74594731308752671e-06, -4.03479316446464509e-06, -4.62788466393249109e-06, -4.04615775551064871e-06, -2.7445566956885159e-06, -1.46703507653000997e-06, -4.77838739243452437e-07, 3.30673913140344666e-07, 1.11454619400319643e-06, 1.8479960317563382e-06, -0.999997735023498535, 2.14465967474097852e-06, 1.86766601473209448e-06, 1.92338961824134458e-06, 2.65866765403188765e-06, 4.30462068834458478e-06, 6.93282026986707933e-06, 9.81597349891671911e-06, 1.11457584353047423e-05, 9.79373453446896747e-06, 6.85306213199510239e-06, 4.11108203479670919e-06, 2.26881161324854475e-06, 1.21176037737313891e-06, 6.81071696817525662e-07, 4.48907172767576412e-07, 3.37090796165284701e-07, 2.4157728262252931e-07, 1.48090322227290017e-07, 7.80814701784038334e-08, -2.39505695276420738e-08, -4.30024833519837557e-08, 1.00541328151848575e-07, 7.53637650063865294e-08, -8.9046324092123541e-08, 7.24579223287946661e-08, -7.53042641576939786e-08, -7.3303688452597271e-08, 7.672084478826946e-08, 1.83503473749624391e-07, -2.06941464853116486e-07, -2.6101486128027318e-07, -6.2013057799958915e-08, 1.6672402125550434e-07, 1.70575887636914558e-07, -8.90518521146077546e-08, -5.18378868719082675e-08, -3.75039945765820448e-08, 7.97461652268793841e-08, 1.06363685858923418e-07, 1.12662966955667798e-07, 7.9681115039420547e-08, -1.31574537931555824e-07, -3.36084099217259791e-07, -6.5082690525741782e-07, -1.0956159712804947e-06, -1.56194926148600644e-06, -1.76047365130216349e-06, -1.4929786402717582e-06, -8.97071799954574089e-07, -2.04259833935793722e-07, 5.52749497728655115e-07, 1.49320999298652168e-06, 2.70607301899872255e-06, 3.94657354263472371e-06, 4.51242021881625988e-06, 3.95629876948078163e-06, 2.71118597083841451e-06, 1.47547234519151971e-06, 4.99196119108091807e-07, -3.02449592481934815e-07, -1.05423237073409837e-06, -1.73272360370901879e-06, 0.999997913837432861, -2.02093110601708759e-06, -1.77569734205462737e-06, -1.83647796347941039e-06, -2.5519425435049925e-06, -4.15798922404064797e-06, -6.71983025313238613e-06, -9.51920992520172149e-06, -1.07986261355108581e-05, -9.47815624385839328e-06, -6.6293714553466998e-06, -3.98091970055247657e-06, -2.20408014683926012e-06, -1.18274272153939819e-06, -6.64030665120662889e-07, -4.32130008221065509e-07, -3.2426390816908679e-07, -2.39838982452056371e-07, -1.53398673319316003e-07, -8.0847691208418837e-08, -4.36675264836594579e-08, 9.74704690293037856e-08, 7.15102004278378445e-08, -1.27367641766795714e-07, 4.46013181942817027e-08, 4.6792894892178083e-08, -5.77147325486748741e-08, -7.35334921841968026e-08, 1.91097512924898183e-07, 8.44367562535808247e-08, -1.86384170319797704e-07, -2.71262194928567624e-07, -7.03028533166616398e-08, 1.90320463389070937e-07, 2.41840609760402003e-07, -9.69391180660750251e-08, -6.95865054467503796e-08, -7.58407665557569999e-08, -1.0707208986104888e-07, -1.09675497128591815e-07, -7.02129412388785568e-08, 1.24220306929601065e-07, 3.16716523229843006e-07, 6.28109432909695897e-07, 1.07554990336211631e-06, 1.53863481955340831e-06, 1.72237605511327274e-06, 1.4449936998062185e-06, 8.61297564824781148e-07, 1.94126869246247225e-07, -5.45944430996314622e-07, -1.49236450397438603e-06, -2.73183786703157239e-06, -3.99610871681943536e-06, -4.55603640148183331e-06, -3.97351595893269405e-06, -2.72301076620351523e-06, -1.5262836541296565e-06, -6.24541655724897282e-07, 7.9003442010616709e-08, 7.07886954387504375e-07, 1.25150666008266853e-06, -0.99999845027923584, 1.51653455304767704e-06, 1.41324289870681241e-06, 1.59763567353365943e-06, 2.36033974942984059e-06, 3.93411710319924168e-06, 6.40269217910827138e-06, 9.09721984498901293e-06, 1.03390930235036649e-05, 9.08536185306729749e-06, 6.35653123026713729e-06, 3.81337008548143785e-06, 2.10815142054343596e-06, 1.13486896680115024e-06, 6.48364334665529896e-07, 4.31478838436305523e-07, 3.22427496257660096e-07, 2.33889650758101197e-07, 1.50493775663562701e-07, 8.25945889459944738e-08, -4.56690045780305809e-08, 9.90875861361928401e-08, 8.30177455668490438e-08, -9.90701849445940752e-08, -4.31453202054399299e-08, 6.41830766312523338e-08, -4.14631813328014687e-08, -5.86860977591641131e-08, 1.72961009070604632e-07, 1.19004617715745553e-07, -1.39198107262927806e-07, -2.64163304564135615e-07, -8.94345362212334294e-08, 1.73097177480485698e-07, 2.58253777474237722e-07, 1.02988309436113923e-07, -9.98021576492647e-08, -1.26227931218636513e-07, 6.89106869344868755e-08, 7.29119662423727277e-08, 1.05329355903904798e-07, 1.12259428419747564e-07, 7.15927512828784529e-08, -1.32830606958123099e-07, -3.16838850267231464e-07, -6.11176687925762963e-07, -1.043496581587533e-06, -1.50562084400007734e-06, -1.69941711192223011e-06, -1.42385647450282704e-06, -8.27365511213429272e-07, -1.47304049846752605e-07, 5.94458583691448439e-07, 1.53783309997379547e-06, 2.79002642855630256e-06, 4.09746189689030871e-06, 4.70812665298581123e-06, 4.13849375036079437e-06, 2.86171734842355363e-06, 1.65232438575912965e-06, 8.02984573056164663e-07, 2.39385315126128262e-07, -1.72646068108406325e-07, -4.95788299303967506e-07, 0.999999284744262695, -7.60421301038149977e-07, -8.56861788633977994e-07, -1.21904588468169095e-06, -2.07685070563456975e-06, -3.65209871233673766e-06, -6.03359285378246568e-06, -8.59814736031694338e-06, -9.77184117800788954e-06, -8.58562088978942484e-06, -6.0120305533928331e-06, -3.61441630047920626e-06, -2.00251133719575591e-06, -1.07902405943605117e-06, -6.21121273525204742e-07, -4.26660648145116284e-07, -3.31214778270805255e-07, -2.422287366243836e-07, -1.5357503002633166e-07, -8.50491517212503823e-08, 4.62810767487553676e-08, 5.91376014824618323e-08, -7.68227224057227431e-08, -2.1068002453716872e-08, 1.46691121472031227e-07, 1.29425885120326711e-07, -7.40058041515112564e-08, -2.12578612490688101e-07, -8.29952782055443095e-08, 1.56829784714318521e-07, 2.54711608249635901e-07, 1.41393982744375535e-07, -6.08049006700639438e-08, -1.54575971578196913e-07, -6.40360013903773506e-08, 7.57267599738042918e-08, 1.10503464156863629e-07, -6.87494363660334784e-08, -9.80440404418914113e-08, -1.08724954372974025e-07, -7.75296129518210364e-08, 1.26634716934859171e-07, 3.17914640390881686e-07, 6.1149518160164007e-07, 1.02748629160487326e-06, 1.46552611113293096e-06, 1.65262065365823219e-06, 1.39714154556713765e-06, 8.21475737211585511e-07, 1.35440274107168079e-07, -6.39772224531043321e-07, -1.62801597980433144e-06, -2.91831111098872498e-06, -4.24527752329595387e-06, -4.86045883008046076e-06, -4.29363171861041337e-06, -3.02619901049183682e-06, -1.84292878202541033e-06, -1.06396998944546795e-06, -6.55134954286040738e-07, -5.05921377680351725e-07, -4.79787445328838658e-07, -1.0000004768371582, -2.14338058412977261e-07, 1.65788435424474301e-07, 7.66699315590813057e-07, 1.7424014231437468e-06, 3.32062245433917269e-06, 5.6170729294535704e-06, 8.06824755272828043e-06, 9.19664489629212767e-06, 8.08572713140165433e-06, 5.65940263186348602e-06, 3.40329847858811263e-06, 1.89296497410396114e-06, 1.02958142633724492e-06, 6.00063685851637274e-07, 4.19806639229136636e-07, 3.3691344469843898e-07, 2.54170117841567844e-07, 1.60588513153925305e-07, 8.54639452541050559e-08, 1.50411842980702204e-08, 3.12358743315144238e-08, -7.84042342161228589e-08, -3.09738830139849597e-08, 1.16715668241340609e-07, 8.87742004351821379e-08, -6.0397518097943248e-08, -1.61037519319506828e-07, -5.49133467586671031e-08, 1.47087931168243813e-07, 2.34870114468321844e-07, 1.51799611103342613e-07, -1.53221719756402308e-07, -1.37235815600433853e-07, 1.15952147439202236e-07, 8.82710438077083381e-08, 7.69710695180947368e-08, 1.01591609791285009e-07, 1.02310480087908218e-07, 6.78272229492904444e-08, -1.15403885558862385e-07, -3.01349984965781914e-07, -5.99740189954900416e-07, -1.02445744687429396e-06, -1.45999149481212953e-06, -1.62683079452108359e-06, -1.35193931782850996e-06, -7.77876380197994877e-07, -1.05764044633360754e-07, 6.70628935495187761e-07, 1.69799523064284585e-06, 3.06948459183331579e-06, 4.48387572760111652e-06, 5.12943370267748833e-06, 4.52367112302454188e-06, 3.2099630971060833e-06, 2.03230274564702995e-06, 1.33103094412945211e-06, 1.08247638763714349e-06, 1.18347122679551831e-06, 1.43684576414671028e-06, 1.00000154972076416, 1.19499316042492865e-06, 5.45678119578951737e-07, -2.98075576665723929e-07, -1.40437964546435978e-06, -2.98941654364170972e-06, -5.18097749591106549e-06, -7.48026604924234562e-06, -8.54023619467625394e-06, -7.51834659240557812e-06, -5.26678104506572708e-06, -3.16736827699060086e-06, -1.76538821961003123e-06, -9.73134206105896737e-07, -5.84835390782245668e-07, -4.19598393364140065e-07, -3.39657333370269043e-07, -2.62465533751310431e-07, -1.73221579302662576e-07, -9.34116712869581534e-08, 2.03514769481216717e-08, -7.98587223016511416e-08, -3.51340077031636611e-08, 6.80195242352965579e-08, 1.04746014528700471e-07, -1.16226026136700966e-07, -1.78664535610550956e-07, -6.08597758855466964e-08, 1.18294835260712716e-07, 1.89136414974200306e-07, 1.30202650439059653e-07, -1.11464267149585794e-07, -1.56414245111591299e-07, -6.7909610379501828e-08, 6.85642405073849659e-08, 9.95994327013249858e-08, -6.82702676613189396e-08, -1.01739203728357097e-07, -1.06250190867740457e-07, -6.38959534171590349e-08, 1.28514457742312516e-07, 3.00231903338499251e-07, 5.77836146931076655e-07, 9.8734074072126532e-07, 1.42456235607824055e-06, 1.60517015501682181e-06, 1.33566197746404214e-06, 7.50880872146808542e-07, 6.62131540707378008e-08, -7.10629308287025196e-07, -1.7274001038458664e-06, -3.09399547404609621e-06, -4.52762060376699083e-06, -5.20645107826567255e-06, -4.61848367194761522e-06, -3.30897842104604933e-06, -2.15896011468430515e-06, -1.54418137299217051e-06, -1.46290335578669328e-06, -1.81495988726965152e-06, -2.33332480092940386e-06, -1.00000250339508057, -2.08181722882727627e-06, -1.17907461572031025e-06, -1.20429987759962387e-07, 1.10053224489092827e-06, 2.70946839009411633e-06, 4.85211376144434325e-06, 7.06501123204361647e-06, 8.08085951575776562e-06, 7.11863140168134123e-06, 4.99254747410304844e-06, 3.00470742331526708e-06, 1.67057976341311587e-06, 9.17921738619043026e-07, 5.60392152237909613e-07, 4.17429220078702201e-07, 3.41218225230477401e-07, 2.5692258986964589e-07, 1.68037246339736157e-07, 9.55232266619532311e-08, 3.97914021732503898e-08, 7.44814627751111402e-08, -3.40535066811753495e-08, -6.55765859391976846e-08, -6.39330366425383545e-08, 8.18691248127834115e-08, 1.15894650321024528e-07, -1.67290735930691881e-07, -2.14548251165069814e-07, -8.07163544891409401e-08, 8.24153971734631341e-08, 1.20373726986144902e-07, 6.61226380316293216e-08, -6.64207959744089749e-08, -1.20112886747847369e-07, -9.18627662827020686e-08, 9.12255657681271259e-08, 6.25389802166864683e-08, 9.01435868172484334e-08, 1.03371824877740437e-07, 7.64750751613973989e-08, -1.18699844620095973e-07, -3.00286274068639614e-07, -5.76864067625137977e-07, -9.68030349213222507e-07, -1.37907238695333945e-06, -1.55137286128592677e-06, -1.3025571661273716e-06, -7.4567134333847207e-07, -7.15466015321908344e-08, 7.13366773652523989e-07, 1.74078741110861301e-06, 3.10224504573852755e-06, 4.51532378065166995e-06, 5.18365595780778676e-06, 4.61284071207046509e-06, 3.33988191414391622e-06, 2.24173231799795758e-06, 1.71279623373266077e-06, 1.77728668404597556e-06, 2.3470809082937194e-06, 3.10436917061451823e-06, 1.00000345706939697, 2.87364878204243723e-06, 1.73911553247307893e-06, 4.69677416958802496e-07, -8.66598611537483521e-07, -2.49584468292596284e-06, -4.59196871815947816e-06, -6.73591875965939835e-06, -7.71906070440309122e-06, -6.79895083521842025e-06, -4.7696380534034688e-06, -2.88107935375592206e-06, -1.6139658782776678e-06, -8.9033795802606619e-07, -5.40159078354918165e-07, -4.06202531166854897e-07, -3.45053365435887827e-07, -2.65823132394871209e-07, -1.68226478081123787e-07, -8.94648763960503857e-08, -5.73671279369136755e-08, 7.85169902428606292e-08, 5.08737336701869935e-08, -8.03357238510216121e-08, -9.48096641195661505e-08, 6.71000250918041274e-08, 1.31323972141217382e-07, -1.92161408563151781e-07, -2.31026746178031317e-07, -6.99587445751603809e-08, 1.0155982721471446e-07, 9.80708279030295671e-08, -6.59739356478894479e-08, -6.39641299926552165e-08, -7.52370468148910732e-08, -9.70386508925003e-08, -9.50931706711344304e-08, -6.1186348432329396e-08, 1.10940881370424904e-07, 2.86565096985214041e-07, 5.67839663290214958e-07, 9.67175878940906841e-07, 1.37638687647267943e-06, 1.53249141021660762e-06, 1.26848306081228657e-06, 7.13024803644657368e-07, -7.26397786365851061e-07, -1.77072240603592945e-06, -3.17325498144782614e-06, -4.6282339098979719e-06, -5.31142222826019861e-06, -4.73122508992673829e-06, -3.45284456670924556e-06, -2.3764923753333278e-06, -1.91501749213784933e-06, -2.11413976103358436e-06, -2.89103491013520397e-06, -3.86762349080527201e-06, -1.00000429153442383, -3.63962817573337816e-06, -2.30101932174875401e-06, -8.47758087729744148e-07, 5.91858338339079637e-07, 2.22966218643705361e-06, 4.24888685301993974e-06, 6.2882645579520613e-06, 7.23302491678623483e-06, 6.37910989098600112e-06, 4.46720878244377673e-06, 2.68838221018086188e-06, 1.50827577272139024e-06, 8.4672132061314187e-07, 5.28678697264695074e-07, 4.0136274037649855e-07, 3.40742985827091616e-07, 2.70187598516713479e-07, 1.81220357831080037e-07, 9.95943310044822283e-08, -5.43672236119618901e-08, 8.93659830580872949e-08, 6.7538167058955878e-08, -8.14291496453733998e-08, 7.18964159318602469e-08, -7.01121578572383441e-08, -6.65153265799744986e-08, 7.18581247838301351e-08, 1.68655702736941748e-07, -1.90011292033887003e-07, -2.38664881635486381e-07, -5.5627616291076265e-08, 1.53993852336498094e-07, 1.56082023750059307e-07, -8.69352803078982106e-08, -5.15620399710314814e-08, 6.25559763989258499e-08, 9.51358174461347517e-08, 1.00886971665659075e-07, 6.18618329895070929e-08, -1.19544978360863752e-07, -2.83069482520659221e-07, -5.47955892216123175e-07, -9.37338882067706436e-07, -1.34948766117304331e-06, -1.51461915720574325e-06, -1.25057908917369787e-06, -6.8015555143574602e-07, 8.09249911526421783e-07, 1.89374679848697269e-06, 3.36767470798804425e-06, 4.91519085699110292e-06, 5.65080017622676678e-06, 5.04188164995866828e-06, 3.70100838154030498e-06, 2.60263550444506109e-06, 2.19666890188818797e-06, 2.54995325121853966e-06, 3.59027990270988084e-06, 4.86324643134139478e-06, 1.00000536441802979, 4.63099604530725628e-06, 3.00966939903446473e-06, 1.32264096919243457e-06, -2.3353916844826017e-07, -1.87398302387009608e-06, -3.78797653866058681e-06, -5.66747849006787874e-06, -6.53634651825996116e-06, -5.78301660425495356e-06, -4.06862091040238738e-06, -2.45617889049754012e-06, -1.37748509132507024e-06, -7.78295259351580171e-07, -5.05093453284644056e-07, -4.07441518746054498e-07, -3.54586546791324508e-07, -2.76126087328520953e-07, -1.81208477556538128e-07, -1.01783150796563859e-07, -4.52562112229770719e-08, -4.49500063837149355e-08, 8.7570668938496965e-08, 6.3281142104187893e-08, -1.2042600872064213e-07, 4.44686314438058616e-08, 4.69702499117374828e-08, -5.40576614582732873e-08, -6.7173296258715709e-08, 1.75661952539485355e-07, 7.73469892578759755e-08, -1.69997321108894539e-07, -2.46699215722401277e-07, -6.2209053908190981e-08, 1.7656272177646315e-07, 2.23539856847310148e-07, -8.9638767519772955e-08, -6.45668762899731519e-08, -6.20703488607432519e-08, -8.82868391727242852e-08, -9.94332367554306984e-08, -7.13260561724382569e-08, 1.16920055859282002e-07, 2.88549699689610861e-07, 5.50000038401776692e-07, 9.21751393434533384e-07, 1.31312867779342923e-06, 1.47321156873658765e-06, 1.22349808862054488e-06, 6.67234814955008915e-07, -8.53582378113060258e-07, -1.97482677322113886e-06, -3.48891444446053356e-06, -5.07850563735701144e-06, -5.84511917622876354e-06, -5.23466451340937056e-06, -3.8709231375833042e-06, -2.77367234957637265e-06, -2.42840064856864046e-06, -2.91721130452060606e-06, -4.17205319536151364e-06, -5.68739915252081119e-06, -1.00000631809234619, -5.47583067600498907e-06, -3.61223169420554768e-06, -1.71680812854901887e-06, -6.45271498456168047e-08, 1.57214708451647311e-06, 3.41383884006063454e-06, 5.19114610142423771e-06, 6.00027442487771623e-06, 5.29794442627462558e-06, 3.72428644368483219e-06, 2.25731264436035417e-06, 1.27695625451451633e-06, 7.30078681954182684e-07, 4.82860173178778496e-07, 4.02084879169706255e-07, 3.62793542763029109e-07, 2.89987070800634683e-07, 1.90507037700626825e-07, 1.01517997563860263e-07, 3.80000670929803164e-08, -4.53130191147010919e-08, 8.91545752779165923e-08, 7.41426262607092212e-08, -9.45520710615710414e-08, -4.03995770170695323e-08, 6.3078360312829318e-08, -3.83924252389533649e-08, -5.35015729496990389e-08, 1.58553206119904644e-07, 1.08656834640896705e-07, -1.26393842947436497e-07, -2.39225187215197366e-07, -7.91615946127421921e-08, 1.60299421736453951e-07, 2.37332812957902206e-07, 9.4252953886098112e-08, -9.22775242884199542e-08, -1.16331626998089632e-07, 6.47629647687608667e-08, 7.01923923429603747e-08, 9.15309144033926714e-08, 9.22731686614497448e-08, 6.28007157388310588e-08, -1.02179207317476539e-07, -2.71832362841450959e-07, -5.40493829248589464e-07, -9.18654222914483398e-07, -1.30416663068899652e-06, -1.44710725180630106e-06, -1.1851378758365172e-06, -6.31522880212287419e-07, 8.9500355215932359e-07, 2.05927858587529045e-06, 3.64111019734991714e-06, 5.29168619323172607e-06, 6.07738002145197242e-06, 5.43971509614493698e-06, 4.02968544221948832e-06, 2.90123557533661369e-06, 2.56577345680852886e-06, 3.11701296595856547e-06, 4.47771435574395582e-06, 6.10248798693646677e-06, 1.00000679492950439, 5.90338640904519707e-06, 3.93944992538308725e-06, 1.94744416148751043e-06, 2.59264851365514915e-07, -1.32372611005848739e-06, -3.03460251416254323e-06, -4.67477275378769264e-06, -5.43918395123910159e-06, -4.81612505609518848e-06, -3.38400786858983338e-06, -2.04994194064056501e-06, -1.16565217922470765e-06, -6.77809850913035916e-07, -4.63384338900141302e-07, -4.00571821046469267e-07, -3.69568226687988499e-07, -2.98402198950498132e-07, -1.9982381616046041e-07, -1.12593937728888704e-07, -4.56654198899286712e-08, 3.92744290422797349e-08, 5.16777411974089773e-08, -7.36615177743260574e-08, -1.99985290549875572e-08, 1.34057415834831772e-07, 1.17152659129260428e-07, -6.74684343948683818e-08, -1.91529693438496906e-07, -7.22262853969368734e-08, 1.45800854056687967e-07, 2.33571910257523996e-07, 1.28655415210232604e-07, -5.68000615430719336e-08, -1.4215341082035593e-07, -5.8330524410621365e-08, 7.02290847698350262e-08, 1.01871940216824441e-07, -6.33822523354865552e-08, -9.3556387525950413e-08, -9.57889341179907206e-08, -5.56182548905326257e-08, 1.17728738757705287e-07, 2.74097146757412702e-07, 5.29000203641771805e-07, 9.03526711226732004e-07, 1.29807642679224955e-06, 1.4505875469694729e-06, 1.18260004455805756e-06, 6.07565198151860386e-07, -1.00695523030935874e-07, -9.70935161603847519e-07, -2.18038303501089104e-06, -3.84528084396151826e-06, -5.59862928639631718e-06, -6.43661269350559451e-06, -5.76078491576481611e-06, -4.26619908466818742e-06, -3.06666379401576705e-06, -2.699111973925028e-06, -3.27001157529593911e-06, -4.70586473966250196e-06, -6.4191767705779057e-06, -1.00000715255737305, -6.19440925220260397e-06, -4.16855755247524939e-06, -2.14925466934801079e-06, -4.72407378993011662e-07, 1.04564867342560319e-06, 2.61283094005193561e-06, 4.07015113523812033e-06, 4.74701892017037608e-06, 4.21363893110537902e-06, 2.96782832265307661e-06, 1.80251856818358647e-06, 1.03585114175075432e-06, 6.22574987119151046e-07, 4.48677184294865583e-07, 4.04350174676437746e-07, 3.82643321472642128e-07, 3.13769618287551566e-07, 2.09228161907049071e-07, 1.16214280865278852e-07, 5.16345828316389088e-08, 8.83775808091513682e-09, 2.43604088012716602e-08, -7.80902382757631131e-08, 1.01083600156925968e-07, 6.87998777948450879e-08, -7.21261628200409177e-08, -1.6313410355905944e-07, 1.27272883787554747e-07, 2.09578317367231648e-07, 1.34798582962503133e-07, -1.40788728231200366e-07, -1.24674073731512181e-07, 1.0655181625907062e-07, 8.0230194043906522e-08, 5.59321478021956864e-08, 8.25957684469358355e-08, 9.59009014422917971e-08, 7.05710689885563625e-08, -1.10803441089046828e-07, -2.76207657634586212e-07, -5.27813654116471298e-07, -8.84600694917025976e-07, -1.25887811464053812e-06, -1.40887379984633299e-06, -1.15935517897014506e-06, -6.03156991019204725e-07, 1.01311243838608789e-07, 9.76235014604753815e-07, 2.18251466321817134e-06, 3.8299831430776976e-06, 5.56436498300172389e-06, 6.39663630863651633e-06, 5.72949556953972206e-06, 4.25609005105798133e-06, 3.08937660520314239e-06, 2.7599703571468126e-06, 3.3720823466865113e-06, 4.8698439059080556e-06, 6.67540552967693657e-06, 1.0000075101852417, 6.48350760457105935e-06, 4.36259870184585452e-06, 2.2752467430109391e-06, 5.88058696848747786e-07, -9.04198486750829034e-07, -2.42557780438801274e-06, -3.82448843083693646e-06, -4.46744707005564123e-06, -3.96664154322934337e-06, -2.79783807854983024e-06, -1.69841871411335887e-06, -9.69766347225231584e-07, -5.82954726269235834e-07, -4.34062428666948108e-07, -4.05255605073762126e-07, -3.84594784463843098e-07, -3.12978130523333675e-07, -2.08496430786908604e-07, -1.13895673337083281e-07, -4.59629809768102859e-08, -6.07497696591963177e-08, 4.79883972559491667e-08, 8.78577708363081911e-08, -1.10916523965443048e-07, -1.64008596925668826e-07, -5.22646281808647473e-08, 1.11941140801263828e-07, 1.74065178271121113e-07, 1.17855087466978148e-07, -1.01690659448649967e-07, -1.41352643368009012e-07, -6.05001844178332249e-08, 6.28963761073464411e-08, 8.97600074267757009e-08, -6.82552823150217591e-08, -8.64931664068535611e-08, -8.49528447588454583e-08, -5.5693952560886828e-08, 9.94717197499994654e-08, 2.57459902286427678e-07, 5.0840719723055372e-07, 8.62446825067308964e-07, 1.22285246106912382e-06, 1.35481036522833165e-06, 1.10569851585751167e-06, 5.79413665491301799e-07, -7.56368194743117783e-08, -8.91966010385658592e-07, -2.02525825443444774e-06, -3.57125713890127372e-06, -5.19386912856134586e-06, -5.97355574427638203e-06, -5.35203389517846517e-06, -3.97467374568805099e-06, -2.89431477540347259e-06, -2.62251455751538742e-06, -3.24997949974203948e-06, -4.69731639896053821e-06, -6.40971211396390572e-06, -1.00000715255737305, -6.23007690592203289e-06, -4.19805337514844723e-06, -2.16666398955567274e-06, -5.05557466112804832e-07, 9.74352246885246132e-07, 2.50446100835688412e-06, 3.93134769183234312e-06, 4.58729937236057594e-06, 4.06544995712465607e-06, 2.86759905065991916e-06, 1.75139734892582055e-06, 1.00597867458418477e-06, 5.91220327805785928e-07, 4.14502409284978057e-07, 3.74631099475664087e-07, 3.59184383569299825e-07, 2.970541856939235e-07, 1.99704345504869707e-07, 1.08422824496301473e-07, 3.69803281330405298e-08, 4.46198278325482534e-08, -7.63282486104799318e-08, -5.68017135549325758e-08, 7.7844468648891052e-08, 1.07169420004993299e-07, -1.56471855916606728e-07, -1.98089907144094468e-07, -7.23148332326672971e-08, 7.82438220880976587e-08, 1.10906746897398989e-07, 5.87353632397480396e-08, -6.02439982344549207e-08, -1.07103339530567609e-07, -8.0713988381830859e-08, 8.31474267215526197e-08, 6.7555298244315054e-08, 1.01630291737819789e-07, 1.08360801220896974e-07, -9.73042872942642134e-08, -2.45706644363963278e-07, -4.82192774597933749e-07, -8.26681286980601726e-07, -1.18882508104434237e-06, -1.32953323372930754e-06, -1.08611789073620457e-06, -5.61805904908396769e-07, 8.51762607112505066e-08, 8.80751542808866361e-07, 1.98304269360960461e-06, 3.49062747773132287e-06, 5.07249887959915213e-06, 5.83381824981188402e-06, 5.23546077602077276e-06, 3.89316710425191559e-06, 2.8143433610239299e-06, 2.50518655775522348e-06, 3.08209837385220453e-06, 4.47676802650676109e-06, 6.12456778981140815e-06, 1.00000679492950439, 5.91806838201591745e-06, 3.98305292037548497e-06, 2.05472019843000453e-06, 4.65103909164099605e-07, -9.57002271206874866e-07, -2.421423232590314e-06, -3.79054381483001634e-06, -4.42875216322136112e-06, -3.92530591852846555e-06, -2.75381785286299419e-06, -1.66656388955743751e-06, -9.59651856646814849e-07, -5.81513802444533212e-07, -4.20563537772977725e-07, -3.73400354192199302e-07, -3.43873892916235491e-07, -2.77762580935814185e-07, -1.89376947901109816e-07, -1.13852479444176424e-07, -5.88170294690826267e-08, 6.90865107344507123e-08, 4.42110916765159345e-08, -7.54189315443909436e-08, -8.68499299144787074e-08, 6.40936335116748523e-08, 1.21699940791586414e-07, -1.78899597358395113e-07, -2.1374806635776622e-07, -6.38706652011933329e-08, 9.46094260712015966e-08, 8.99647858432217618e-08, -5.72383740404802666e-08, -5.42461293662199751e-08, -9.11794444391489378e-08, -1.0108107773021402e-07, -7.2163430786531535e-08, 1.00529241819913295e-07, 2.53568515518054483e-07, 4.85940802263939986e-07, 8.15095347661554115e-07, 1.15937370992469369e-06, 1.29505076529312646e-06, 1.06227025753469206e-06, 5.4971991403363063e-07, -9.57397077172572608e-08, -8.98164842055848567e-07, -2.0131046767346561e-06, -3.5427854072622722e-06, -5.14693692821310833e-06, -5.90440822634263895e-06, -5.27732481714338064e-06, -3.91582216252572834e-06, -2.83309577753243502e-06, -2.4986445623653708e-06, -3.00325223179243039e-06, -4.2993151510017924e-06, -5.87353360970155336e-06, -1.00000655651092529, -5.69842904951656237e-06, -3.83969427275587805e-06, -2.00035105990536977e-06, -4.96450695663952501e-07, 8.43894497393193888e-07, 2.20992069444037043e-06, 3.46812635143578518e-06, 4.05365608457941562e-06, 3.6100575471209595e-06, 2.55434770224383101e-06, 1.55087116127106128e-06, 8.81088681126129813e-07, 5.24509005117579363e-07, 3.90316699849790893e-07, 3.74543674297456164e-07, 3.65193670859298436e-07, 2.95265692784596467e-07, 1.86575732641358627e-07, 9.31904580170339614e-08, 3.52012570203896757e-08, 7.74699131511624728e-08, 5.85493786786628334e-08, -7.69784236354098539e-08, 6.95507509362869314e-08, -6.5854280251187447e-08, -6.1554978003641736e-08, 6.62602488432639802e-08, 1.54517536543608003e-07, -1.77149829028167005e-07, -2.21512806319879019e-07, 1.39121866027380747e-07, 1.38617338052426931e-07, -8.70815952680459304e-08, -5.04493371522585221e-08, 6.63428494362960919e-08, 9.01650238915863156e-08, 9.62408535087888595e-08, -8.01670481109795219e-08, -2.26461182251114224e-07, -4.53787748710965388e-07, -7.72482735555968247e-07, -1.09853044705232605e-06, -1.22223195830883924e-06, -1.00332397323654732e-06, -5.32420528998045484e-07, 7.66157143061718671e-07, 1.7421048141841311e-06, 3.07272898680821527e-06, 4.47996853836230002e-06, 5.16316686116624624e-06, 4.62437174064689316e-06, 3.42308590006723534e-06, 2.48306582761870231e-06, 2.24703580897767097e-06, 2.78544985121698119e-06, 4.02961359213804826e-06, 5.50202412341604941e-06, 1.00000619888305664, 5.32367994310334325e-06, 3.55760016645945143e-06, 1.78802815753442701e-06, 3.10326100816382677e-07, -1.06107609099126421e-06, -2.52619497587147634e-06, -3.90634841096471064e-06, -4.53180336990044452e-06, -4.00400404032552615e-06, -2.82059272649348713e-06, -1.72286627275752835e-06, -9.90620719676371664e-07, -5.79766094688238809e-07, -3.90805666938831564e-07, -3.29593035530706402e-07, -3.07753509787289659e-07, -2.63173774328606669e-07, -1.87239990623311314e-07, -1.03292002506805147e-07, -4.59567566224450275e-08, 7.69434436165283842e-08, 5.46719078897694999e-08, -1.14367708192730788e-07, 4.36410019233335333e-08, 4.67685268290551903e-08, -4.98481824706686893e-08, -6.05610992465699383e-08, 1.6296208116273192e-07, 7.12292163029815129e-08, -1.56614703428203939e-07, -2.26555314952747722e-07, -5.62224116151810449e-08, 1.63592304147641698e-07, 2.06430868843199278e-07, -8.25553811978352314e-08, -5.75068703767556144e-08, -1.08047899516350299e-07, -1.11282226100684056e-07, 7.57055786948512832e-08, 2.0377495957291103e-07, 4.05887760734913172e-07, 6.97746713740343694e-07, 1.00282522907946259e-06, 1.12528925910737598e-06, 9.40129325499583501e-07, 5.44247086509130895e-07, 7.93004772958738613e-08, -4.54305933317300514e-07, -1.14800297978945309e-06, -2.05739434022689238e-06, -2.99615453513979446e-06, -3.45889839081792161e-06, -3.14129124490136746e-06, -2.40517147176433355e-06, -1.86012846370431362e-06, -1.84790997082018293e-06, -2.48339097197458614e-06, -3.74239630218653474e-06, -5.1792403610306792e-06, -1.00000584125518799, -5.01026352139888331e-06, -3.30468901665881276e-06, -1.54048950662399875e-06, 1.60338447585672839e-06, 3.39037774210737552e-06, 5.13763097842456773e-06, 5.95077290199697018e-06, 5.25841051057795994e-06, 3.68008477380499244e-06, 2.20667743633384816e-06, 1.22679875858011656e-06, 6.78008291288278997e-07, 4.13759124739954132e-07, 2.97349231459520524e-07, 2.24735558163047244e-07, 1.55026157244719798e-07, 1.01425904119878396e-07, 7.23998994089924963e-08, 5.02744867958426767e-08, 6.24052418629617023e-08, 5.91530557869646145e-08, -8.1285577380185714e-08, -3.47473516626450873e-08, -4.7776296696611098e-08, 1.46909570730713313e-07, 9.98809994712246407e-08, -1.1604143423937785e-07, -2.18781792682420928e-07, -7.13092802584469609e-08, 1.48135143263061764e-07, 2.17708560512619442e-07, 8.49001935421256348e-08, -8.66925802256446332e-08, -1.06567050295325316e-07, 6.48543974079984764e-08, 8.67587814923354017e-08, 1.0129394212299303e-07, -6.94000092948954261e-08, -1.90486062479067186e-07, -3.71175474356277846e-07, -6.2904598507884657e-07, -9.04603950857563177e-07, -1.02535022961092182e-06, -8.73664589562395122e-07, -5.42527232028078288e-07, -1.84371344857936492e-07, 1.74918483253350132e-07, 6.0490907571875141e-07, 1.15747502604790498e-06, 1.72149270838417578e-06, 1.99378723664267454e-06, 1.82550343197362963e-06, 1.47679668316413881e-06, 1.32626598770002602e-06, 1.59330534188484307e-06, 2.39853352468344383e-06, 3.76876846530649345e-06, 5.2867230806441512e-06, 1.00000596046447754, 5.11017015014658682e-06, 3.32780518874642439e-06, 1.46563797898124903e-06, -2.46624665578565327e-07, -2.04111370294413064e-06, -4.13074167227023281e-06, -6.1838622968934942e-06, -7.1350709731632378e-06, -6.3139818848867435e-06, -4.44053921455633827e-06, -2.67079371951695066e-06, -1.46620379837258952e-06, -7.63200205255998299e-07, -4.03980891405808507e-07, -2.50588072958635166e-07, -1.85776386274483229e-07, -1.26038358416735718e-07, 3.58461420546518639e-08, 4.54138984196106321e-08, -7.14350463226764987e-08, -2.04785930435491537e-08, 1.2351188161119353e-07, 1.06102262975582562e-07, -6.32942587230900244e-08, -1.75328409568464849e-07, -6.49333387059414235e-08, 1.33761474785387691e-07, 2.11163538210712431e-07, 1.10687928156494308e-07, -1.44405689184168295e-07, -6.5947737937221973e-08, 5.6329650277575638e-08, 8.94260949735325994e-08, -8.89912286083927029e-08, -9.40203719324017584e-08, 5.10549682530836435e-08, 1.6708104055851436e-07, 3.41720721053206944e-07, 5.822994921800273e-07, 8.31772808851383161e-07, 9.44642010836105328e-07, 8.23889251932996558e-07, 5.49175979358551558e-07, 2.62888391944215982e-07, -2.05782185958014452e-07, -4.5681431970479025e-07, -7.20284845101559767e-07, -8.81812752595578786e-07, -8.68451138558157254e-07, -8.09071764251712011e-07, -9.29905070279346546e-07, -1.40381609980977373e-06, -2.35723337027593516e-06, -3.83135784431942739e-06, -5.42405496162245981e-06, -1.00000607967376709, -5.26982694282196462e-06, -3.41891472999122925e-06, -1.46177080750931054e-06, 3.70805253169237403e-07, 2.33591822507150937e-06, 4.66181654701358639e-06, 6.95355038260458969e-06, 7.99456938693765551e-06, 7.0446917561639566e-06, 4.93709649163065478e-06, 2.96734765470318962e-06, 1.63287393206701381e-06, 8.43720556531479815e-07, 4.09203806839286699e-07, 1.83346060111944098e-07, 8.58446753682073904e-08, 6.26554594873596216e-08, 5.6002122050813341e-08, 1.04915143239736608e-08, 2.17660520718254702e-08, -7.47755848351516761e-08, 9.4080071733060322e-08, 6.21922993104817579e-08, -6.72253221978280635e-08, -1.47977658571107895e-07, 1.19573371648584725e-07, 1.92026803347289388e-07, 1.20676958204057883e-07, -1.32349015302679618e-07, -1.15226946206803404e-07, 9.98446552102905116e-08, 7.50764783674640057e-08, 7.92293874951610633e-08, 8.06807847197887895e-08, -6.07771539762325119e-08, -1.57259748334581673e-07, -3.14516171329159988e-07, -5.44252316103666089e-07, -7.84219139404740417e-07, -8.87608337052370189e-07, -7.7489448813139461e-07, -5.39110658337449422e-07, -3.11025473820336629e-07, -1.3462739900660381e-07, 1.06799610932739597e-07, 1.93840733686556632e-07, 2.63178037585021229e-07, 3.28275746142026037e-07, 4.45557617467784439e-07, 7.22562731425568927e-07, 1.30181626900593983e-06, 2.33443756769702304e-06, 3.87708405469311401e-06, 5.51801940673612989e-06, 1.00000619888305664, 5.34560194864752702e-06, 3.45230000675655901e-06, 1.45600756695785094e-06, -4.14954570260306355e-07, -2.43390786636155099e-06, -4.84795373267843388e-06, -7.25339396012714133e-06, -8.36504659673664719e-06, -7.37933214622898959e-06, -5.16032196173910052e-06, -3.08121525449678302e-06, -1.67782025073393015e-06, -8.59917122397746425e-07, -4.22464694338486879e-07, -1.8980462357376382e-07, -5.39896838347431185e-08, -5.75261118740399979e-08, 4.57105038265126495e-08, 7.85474369990879495e-08, -1.17429031831761677e-07, -1.69997534271715267e-07, 8.694843245393713e-08, 1.46929224342784437e-07, 9.77115703904019028e-08, -9.76569083377398783e-08, -1.30796550479317375e-07, -5.45040563793008914e-08, 5.9210265135334339e-08, 8.31069471018963668e-08, -1.48907034258627391e-07, 3.42314265822096786e-08, 1.45954217600774427e-07, 3.01444998740407755e-07, 5.20595392572431592e-07, 7.57808948037563823e-07, 8.68442157297977246e-07, 7.58444514303846518e-07, 5.20748187682329444e-07, 3.0177110943441221e-07, 1.48937289168316056e-07, -5.40714388819196756e-08, -1.35220346919595613e-07, -1.96335534496938635e-07, -2.61415721070079599e-07, -4.01910199343546992e-07, -7.15517728622216964e-07, -1.32598177060572198e-06, -2.3820693968445994e-06, -3.95333790947915986e-06, -5.63632465855334885e-06, -1.00000643730163574, -5.50266486243344843e-06, -3.57070052814378869e-06, -1.52368147610104643e-06, 3.78045854176889407e-07, 2.3870768472988857e-06, 4.74453008791897446e-06, 7.07672279531834647e-06, 8.1617954492685385e-06, 7.22185632184846327e-06, 5.07365530211245641e-06, 3.03773845189425629e-06, 1.64246773692866554e-06, 8.15201985915336991e-07, 3.75012888298442704e-07, 1.71232841239543632e-07, 8.65128910731982614e-08, 4.34880469413201354e-08, -7.15535790618559986e-08, -5.32565387345584895e-08, 7.44295434174091497e-08, 1.00116039902786724e-07, -1.47088840662945586e-07, -1.83791527774701535e-07, -6.44967386165262724e-08, 7.53028714939318888e-08, 1.02488705522318924e-07, 5.07735506971584982e-08, -5.74634526628869935e-08, -9.78353469349713123e-08, -7.20420203492722067e-08, 7.69533272659828071e-08, 1.87234689974502544e-08, -1.14693328612247569e-07, -2.87653875830073957e-07, -5.1032628789471346e-07, -7.38352241569373291e-07, -8.45748672873014584e-07, -7.45334489238302922e-07, -5.12801022978237597e-07, -2.83674125967081636e-07, -1.13305105742256274e-07, 1.23627032166950812e-07, 2.33882545330743596e-07, 3.18378567953914171e-07, 3.68942579598297016e-07, 4.59439263522654073e-07, 7.20779439689067658e-07, 1.29395448311697692e-06, 2.31674698625283781e-06, 3.83558062821975909e-06, 5.4420156629930716e-06, 1.00000607967376709, 5.27823021911899559e-06, 3.44496334037103225e-06, 1.50781318097870098e-06, -3.12828120740960003e-07, -2.26602605835068971e-06, -4.56350380773073994e-06, -6.80998800817178562e-06, -7.81971357355359942e-06, -6.88498039380647242e-06, -4.83138637719093822e-06, -2.91877540803398006e-06, -1.62159005867579253e-06, -8.49429625304765068e-07, -4.22313149783803965e-07, -2.05763655003465828e-07, 6.52493952202348737e-08, 4.13076435279435827e-08, -6.97918736136671214e-08, -8.22245169729285408e-08, 6.07415699960256461e-08, 1.12889360082135681e-07, -1.70763058804368484e-07, -2.05065433078743808e-07, 7.37481897772340744e-08, 6.51470841717127769e-08, -5.45302292209726147e-08, -4.7855508000793634e-08, -8.21707075715494284e-08, -8.80969750483018288e-08, 5.28459693782679096e-08, 1.47990206755821418e-07, 2.99852814578116522e-07, 5.17503451646916801e-07, 7.42747033655177802e-07, 8.40125437662209151e-07, 7.30145757188438438e-07, 4.93587037908582715e-07, 2.53685470852360595e-07, -1.40047262675579987e-07, -3.36399267553133541e-07, -5.23889980286185164e-07, -6.37930554603372002e-07, -6.51208836188743589e-07, -6.54768371077807387e-07, -8.02116801423835568e-07, -1.23982192690164084e-06, -2.10580151360773016e-06, -3.45657031175505836e-06, -4.92222761749872006e-06, -1.00000560283660889, -4.76155400974676013e-06, -3.05910816678078845e-06, -1.28700946788740112e-06, 3.45676454571730574e-07, 2.09314657695358619e-06, 4.19007255914038979e-06, 6.29568648946587928e-06, 7.28068698663264513e-06, 6.42361374048050493e-06, 4.47814682047464885e-06, 2.66287565864331555e-06, 1.45587182487361133e-06, 7.69904943354049465e-07, 4.09603558182425331e-07, 2.05779187467669544e-07, 6.45246345243322139e-08, 7.13756236336848815e-08, 5.34043991251564876e-08, -7.16151618007643265e-08, 6.90394656999160361e-08, -6.22406446382228751e-08, -5.67956455199691845e-08, 6.28270839797551162e-08, 1.43965976917570515e-07, -1.6644119682496239e-07, -2.08179272931374726e-07, 1.22767744414886693e-07, 1.17828257373275846e-07, -9.60918029591084633e-08, 1.32004217334724672e-07, -3.95678405595845106e-08, -1.47352722024152172e-07, -3.0341729484462121e-07, -5.25019288488692837e-07, -7.58644546294817701e-07, -8.58150826843484538e-07, -7.31762497707677539e-07, -4.61487104530533543e-07, -1.72191832348289608e-07, 1.12870857549296488e-07, 4.43682409922985244e-07, 8.60512272993219085e-07, 1.28521162423567148e-06, 1.49131551552272867e-06, 1.3603535080619622e-06, 1.08931737941020401e-06, 9.72169686974666547e-07, 1.1678124565150938e-06, 1.74480646819574758e-06, 2.70995724349631928e-06, 3.78185336558090057e-06, 1.00000429153442383, 3.68785640603164211e-06, 2.38654206441424321e-06, 9.63268917075765785e-07, -4.06800609198398888e-07, -1.88765943676116876e-06, -3.63488948096346576e-06, -5.3618864512827713e-06, -6.16837951383786276e-06, -5.47524405192234553e-06, -3.86914643968339078e-06, -2.32221827900502831e-06, -1.24528617106989259e-06, -6.10859387961681932e-07, -3.02079854463954689e-07, -1.97636069287909777e-07, -1.68144552503690647e-07, -1.20509866974316537e-07, 6.53597709288078477e-08, 5.00759469446165895e-08, -9.61878683369832288e-08, 5.76524641360265377e-08, -4.64518024045901257e-08, -5.55639552146658389e-08, 1.51945286575028149e-07, 6.58584440316190012e-08, -1.45598349376996339e-07, -2.09830588460135914e-07, -5.10668449749118736e-08, 1.53572628391884791e-07, 1.93735303355424548e-07, -7.65797096846654313e-08, -5.30265076292835147e-08, -1.43783651651574473e-07, 3.2299642072075585e-08, 1.47570318631551345e-07, 3.09976883272611303e-07, 5.33031823124474613e-07, 7.66892640058358666e-07, 8.67869459852954606e-07, 7.36537288048566552e-07, 4.43850126430334058e-07, 1.09325632990930899e-07, -2.46193849307019264e-07, -6.78317860547394957e-07, -1.23552104014379438e-06, -1.81960047029861016e-06, -2.11760107049485669e-06, -1.92173479263146874e-06, -1.44672696933412226e-06, -1.07808648408536101e-06, -1.02762987808091566e-06, -1.35235757170448778e-06, -2.01982652470178436e-06, -2.76409036814584397e-06, -1.00000309944152832, -2.57121746471966617e-06, -1.62258197633491363e-06, -6.07433719324035337e-07, 4.22775258357432904e-07, 1.6441357502117171e-06, 3.17386229653493501e-06, 4.69324004370719194e-06, 5.35235267307143658e-06, 4.68129428554675542e-06, 3.28198689203418326e-06, 2.01195689442101866e-06, 1.16037870157015277e-06, 6.41560006897634594e-07, 3.3567815194146533e-07, 1.77698353809319087e-07, 1.28249340036745707e-07, 1.22454494544399495e-07, 1.01446943290284253e-07, 5.93590563369161828e-08, 5.51231096324045211e-08, 5.21400806974270381e-08, -7.78497408759903919e-08, -3.13395567275165376e-08, -4.32713846976184868e-08, 1.36380265303159831e-07, 9.17824678481338196e-08, -1.07938838311838481e-07, -2.01823382894872339e-07, -6.38725268231610244e-08, 1.40984710128577717e-07, 2.07924358619493432e-07, 8.83063364653935423e-08, -6.70815438752470072e-08, -8.29284942938102176e-08, 7.7929591668635112e-08, 8.12374381098379672e-08, -5.44787432943394379e-08, -1.56409171836457972e-07, -3.14473567186723812e-07, -5.35401170509430813e-07, -7.6233220624999376e-07, -8.53711014769942267e-07, -7.18489218343165703e-07, -4.2794147248059744e-07, -8.88239313212579873e-08, 2.9481353180926817e-07, 7.87671808666345896e-07, 1.42710416639602045e-06, 2.07254447559535038e-06, 2.36759046856604982e-06, 2.11676001526939217e-06, 1.5771039443279733e-06, 1.13629516818036791e-06, 9.76810611064138357e-07, 1.1414472282922361e-06, 1.62282117344147991e-06, 2.23035840463126078e-06, 1.00000250339508057, 2.118292741215555e-06, 1.28634439988672966e-06, 3.83727638109121472e-07, -5.06261926602746826e-07, -1.53620737819437636e-06, -2.85242413156083785e-06, -4.23297933593858033e-06, -4.90475895276176743e-06, -4.33266404797905125e-06, -2.9994639589858707e-06, -1.75568845861562295e-06, -9.57845259108580649e-07, -5.48431899005663581e-07, -3.64760722959545092e-07, -2.58010629750060616e-07, -1.62312176144041587e-07, -9.19936269383470062e-08, -6.11510984072083374e-08, 3.06585619114230212e-08, 3.72886823640783405e-08, -7.99240211790674948e-08, 1.14746057988668326e-07, 9.69856941424040997e-08, -5.97307945326974732e-08, -1.61939013310075097e-07, -5.88849680127623287e-08, 1.24675239021598827e-07, 1.95444769701680343e-07, 1.01360043913700792e-07, -1.36035268383238872e-07, -6.16364062011598435e-08, 5.4056918941114418e-08, 8.59758415572287049e-08, -7.58415268364842632e-08, -8.50249861628071812e-08, 5.74617260440390965e-08, 1.54334983903936518e-07, 3.05795992971980013e-07, 5.24524466527509503e-07, 7.54643508571462007e-07, 8.48294405386695871e-07, 7.06906519098993158e-07, 4.0382070665145875e-07, 5.57961072900070576e-08, -3.2969839480756491e-07, -8.29479461117443861e-07, -1.50422465594601817e-06, -2.21615550799469929e-06, -2.55413920058344956e-06, -2.26647580348071642e-06, -1.6374132201235625e-06, -1.11620863663119962e-06, -8.91931733804085525e-07, -9.62418198469094932e-07, -1.27248938497359632e-06, -1.66241079568862915e-06, -1.00000178813934326, -1.55730060669156956e-06, -9.63835191214457154e-07, -2.54886288075795164e-07, 5.34918740413559135e-07, 1.5021846593299415e-06, 2.70723239736980759e-06, 3.90764034818857908e-06, 4.46307331003481522e-06, 3.97554595110705122e-06, 2.8454010134737473e-06, 1.73421426552522462e-06, 9.34927868456725264e-07, 4.61145276631214074e-07, 2.59032645999468514e-07, 2.25852545554516837e-07, 2.19508208942897909e-07, 1.59641629693396681e-07, 8.0109934685879125e-08, 2.51925644789707803e-08, -7.06929625948760076e-08, 8.82676829405681929e-08, 5.64612783193751966e-08, -6.36579429169614741e-08, -1.36434437081334181e-07, 1.12290045706231467e-07, 1.77807791601480858e-07, 1.10441241929493117e-07, -1.24648551036443678e-07, -1.0793599614089544e-07, 9.40054007969592931e-08, 7.13021606202346447e-08, 1.35653294819348957e-07, -3.45507800147970556e-08, -1.4697867811719334e-07, -3.05766491237591254e-07, -5.22546827141923131e-07, -7.46471073398424778e-07, -8.40315749428555137e-07, -7.08657466930162627e-07, -4.10712260645595961e-07, 3.72399682646573638e-07, 9.11086715404962888e-07, 1.61256923547625775e-06, 2.33700120588764548e-06, 2.6823677217180375e-06, 2.38730854107416235e-06, 1.71081910593784414e-06, 1.09671429981972324e-06, 7.48221793855918804e-07, 6.72317810312961228e-07, 8.12342818790057208e-07, 1.02427929959958419e-06, 1.00000107288360596, 8.50894593895645812e-07, 4.43786888126851409e-07, -5.96875906921923161e-07, -1.40680413096561097e-06, -2.52707377512706444e-06, -3.6780365917365998e-06, -4.16214470533304848e-06, -3.60840999746869784e-06, -2.51229494097060524e-06, -1.55088423525739927e-06, -9.22641277156799333e-07, -5.33565867044671904e-07, -2.93686639452062082e-07, -1.75383519263050403e-07, -1.52392175323257106e-07, -1.51059595054903184e-07, -1.1554266166058369e-07, -6.02365801682935853e-08, -5.66897391252041416e-08, 4.67682212956788135e-08, 7.45638928378866694e-08, -1.11239280897734716e-07, -1.58349720891237666e-07, 8.21565606656804448e-08, 1.36064414846259751e-07, 8.90156499622207775e-08, -9.17614855211468239e-08, -1.21776253081407049e-07, -5.06171957681544882e-08, 5.49872183341904019e-08, 7.71561659007602429e-08, -7.79873730039071233e-08, -7.86100216032536991e-08, 5.46906164800020633e-08, 1.53249388290532806e-07, 3.08472181131946854e-07, 5.29660553638677811e-07, 7.56143094804428983e-07, 8.38746075260132784e-07, 6.85382758547348203e-07, 3.70060917020964553e-07, -4.67644838408887153e-07, -1.10063058400555747e-06, -1.95924644685874227e-06, -2.84586258203489706e-06, -3.24647908200859092e-06, -2.85474538941343781e-06, -2.00199542632617522e-06, -1.20378228984918678e-06, -6.58807948639150709e-07, -3.37433192498792778e-07, -1.74351029613717401e-07, -1.08557543399001588e-07, -1.00000011920928955, 1.29361836798125296e-07, 3.41134494874495431e-07, 6.79653567203786224e-07, 1.22934147839259822e-06, 2.05388550966745242e-06, 2.97638439406000543e-06, 3.44002228302997537e-06, 3.04078594126622193e-06, 2.09478571377985645e-06, 1.21097104965883773e-06, 6.62734464640379883e-07, 4.09962552794240764e-07, 3.19968904705092427e-07, 2.68188898644439178e-07, 2.01373850927666354e-07, 1.37985026071874017e-07, 9.63545971899293363e-08, 6.44813340500149934e-08, 4.25411599280778319e-08, -6.9166084415428486e-08, 3.69776813613498234e-08, 7.51602655668648367e-08, -1.39893188588757766e-07, -1.67120205674109457e-07, -4.94528400452054484e-08, 8.32667410577414557e-08, 1.05749229817320156e-07, -5.14433580178774719e-08, -8.87273188254766865e-08, -6.49527578389097471e-08, 7.14491363851266215e-08, 7.74177379980756086e-08, 8.82021211623396084e-08, -5.76486058889713604e-08, -1.58879075229378941e-07, -3.09892726590987877e-07, -5.2469312095126952e-07, -7.52767959966149647e-07, -8.46775890295248246e-07, -6.97050097642204491e-07, -3.60975747071279329e-07, 5.8723799156723544e-08, 5.7016626442418783e-07, 1.26953830204001861e-06, 2.22225912693829741e-06, 3.21756328958144877e-06, 3.67119264410575852e-06, 3.22001983477093745e-06, 2.231296775789815e-06, 1.2850797475039144e-06, 5.86848500461201183e-07, 6.9278364378533297e-08, -3.61672050530614797e-07, -7.07841991243185475e-07, 0.999999105930328369, -7.98642929566995008e-07, -6.49089656690193806e-07, -6.0232724763409351e-07, -7.5222015993858804e-07, -1.13590363071125466e-06, -1.75011120973067591e-06, -2.42062014876864851e-06, -2.744287940004142e-06, -2.46072136178554501e-06, -1.78403104200697271e-06, -1.10117923668440199e-06, -6.02828265527932672e-07, -3.17663165105841472e-07, -2.22816439077178075e-07, -2.43101567320991307e-07, -2.59020680459798314e-07, -2.06472194008711085e-07, -1.25038098985896795e-07, -6.60371100025258784e-08, 6.25542426746505953e-08, 3.88315868349309312e-08, -6.65202719574153889e-08, -7.72244916902309342e-08, 5.97884266539949749e-08, 1.06707688019014313e-07, -1.6084001686067495e-07, -1.92403632581772399e-07, 6.87826755552123359e-08, 5.99574292436955147e-08, -4.878014436826561e-08, -4.19347436775296956e-08, -1.28914521724254882e-07, 3.52715510132384225e-08, 1.47283060414338252e-07, 3.10681770088194753e-07, 5.32150579601875506e-07, 7.5391488962850417e-07, 8.3396059835649794e-07, 6.7814073645422468e-07, 3.46269104056773358e-07, -7.4461397048253275e-08, -6.07286438025766984e-07, -1.35357402086810907e-06, -2.37554036175424699e-06, -3.4423107990733115e-06, -3.92220408684806898e-06, -3.41639724865672179e-06, -2.31844364861899521e-06, -1.26324084703810513e-06, -4.76514486535961623e-07, 1.31869498432024557e-07, 6.97940379268402467e-07, 1.22407641356403474e-06, -0.999998509883880615, 1.37477115913497983e-06, 1.02119690836843802e-06, 7.57521945615735603e-07, 7.52800360714900307e-07, 1.04036587345035514e-06, 1.57863291860849131e-06, 2.14897136174840853e-06, 2.35170455198385753e-06, 2.01012176148651633e-06, 1.40922338687232696e-06, 8.9699659611142124e-07, 5.63408718790014973e-07, 3.61015764838157338e-07, 2.51872393164376263e-07, 2.20615390844614012e-07, 2.26277478532210807e-07, 2.04884599952492863e-07, 1.42198231856127677e-07, 7.50709361341250769e-08, 6.71581332767345884e-08, 4.95953074164390273e-08, -6.76301183943905926e-08, 6.49556142207075027e-08, -5.98497962300825748e-08, -5.19772953566643992e-08, 6.07378254358081904e-08, 1.35302272497028753e-07, -1.56403231699187018e-07, -1.94951056187164795e-07, 1.14682649154929095e-07, 1.10035834666177834e-07, -8.96803982186611393e-08, 7.60989919967869355e-08, 8.39195521962210478e-08, -5.46509966170560801e-08, -1.4948595605801529e-07, -2.9721456940023927e-07, -5.09784683799807681e-07, -7.32226624222676037e-07, -8.18656872070278041e-07, -6.66909613755706232e-07, -3.34626776066215825e-07, 8.49502939104240795e-08, 6.07308095368352951e-07, 1.32813852360413875e-06, 2.30753448704490438e-06, 3.33333855451201089e-06, 3.81853351427707821e-06, 3.37517053594638128e-06, 2.33730020227085333e-06, 1.28143801703117788e-06, 4.40618975972029148e-07, -2.2169895430579345e-07, -7.85699000971362693e-07, -1.25163001030159649e-06, 0.999998509883880615, -1.40520398872467922e-06, -1.1095028185081901e-06, -8.27539452075143345e-07, -7.2536141715318081e-07, -9.02634042176941875e-07, -1.39665519327536458e-06, -2.02995602194278035e-06, -2.33910941460635513e-06, -2.02781166080967523e-06, -1.36473943257442443e-06, -7.89292585068324115e-07, -4.57219755389814964e-07, -3.14410698365463759e-07, -2.69549815357095213e-07, -2.5164217731798999e-07, -2.26689763849208248e-07, -1.86645550570574414e-07, -1.35085500119203061e-07, -8.15035789969442703e-08, 6.00982303922137362e-08, 4.53575630388058926e-08, -9.11222244326381769e-08, 5.46400755752074474e-08, -4.58765434530050698e-08, -5.2528335459101072e-08, 1.40228351597215806e-07, 5.87627653203526279e-08, -1.38236089242127491e-07, -1.97372173715848476e-07, 1.41069733672338771e-07, 1.77473054918664275e-07, -7.51974909007913084e-08, -5.07511579428410187e-08, -1.26185275561851995e-08, 1.16614579326324019e-07, 2.82934081496932777e-07, 4.99693442179705016e-07, 7.15141027285426389e-07, 7.93434878687548917e-07, 6.4602130578350625e-07, 3.32169662442538538e-07, -6.82462584222776059e-08, -5.84427709782175953e-07, -1.31694127958326135e-06, -2.31438843911746517e-06, -3.32570311911695171e-06, -3.73930242858477868e-06, -3.22647883876925334e-06, -2.20893889490980655e-06, -1.25786050375609193e-06, -5.18345416367083089e-07, 1.25874578316143015e-07, 7.65143568060011603e-07, 1.30088756122859195e-06, -0.999998509883880615, 1.27629004964546766e-06, 9.67027631304517854e-07, 8.13459450910158921e-07, 8.45727754494873807e-07, 1.029263671625813e-06, 1.37197844196634833e-06, 1.82431688244832912e-06, 2.11797646443301346e-06, 1.96180985767568927e-06, 1.43282011322298786e-06, 8.62762476572243031e-07, 4.62038087789551355e-07, 2.6393291818749276e-07, 2.23816087441264244e-07, 2.50886074582012952e-07, 2.48979063144361135e-07, 1.91378234148942283e-07, 1.21074691605826956e-07, 7.13726322487673315e-08, 4.9276689395583162e-08, 4.64100793351462926e-08, -7.3841938785790262e-08, -4.08825187037109572e-08, 1.26737305095048214e-07, 8.35353759498502768e-08, -1.02704525772878696e-07, -1.89274459216903779e-07, -6.03267551468888996e-08, 1.30198799297431833e-07, 1.92151176747756836e-07, 8.08110840466724767e-08, -6.26958538418875833e-08, -7.47273816159577109e-08, 1.9461232625417324e-08, -1.09270423820362339e-07, -2.75423047924050479e-07, -4.96656525683647487e-07, -7.24312599231780041e-07, -8.10967378583882237e-07, -6.49416051601292565e-07, -3.0199481670933892e-07, 1.29788233493854932e-07, 6.65663492327439599e-07, 1.42257954394153785e-06, 2.49323124990041833e-06, 3.66117956218658946e-06, 4.23353640144341625e-06, 3.71043302038742695e-06, 2.48286505666328594e-06, 1.28335193494422128e-06, 4.07230061227892293e-07, -2.42802485672655166e-07, -8.66155687617720105e-07, -1.5208360082397121e-06, 0.999998092651367188, -1.75486275111325085e-06, -1.18897969514364377e-06, -7.04340379797940841e-07, -5.76042168631829554e-07, -7.97282723397074733e-07, -1.20063805297832005e-06, -1.51630172240402317e-06, -1.52248742324445629e-06, -1.24957080060994485e-06, -9.07485230072779814e-07, -6.26943290171766421e-07, -4.16158940197419724e-07, -2.68925845148260123e-07, -2.02097240276088996e-07, -2.16381678797006316e-07, -2.50193380679775146e-07, -2.27681937303714221e-07, -1.50707577972752915e-07, -7.48074597822778742e-08, 2.62439989739959856e-08, 3.18014521383247484e-08, -7.65157892601564527e-08, 1.09238271761569194e-07, 9.14522075845525251e-08, -5.48128369359801582e-08, -1.49740245092289115e-07, -5.47837011311003153e-08, 1.13303791238195117e-07, 1.75003194158307451e-07, 8.18461458607089298e-08, -1.51726297303866886e-07, 3.09716803315041034e-08, 6.85736267769243568e-08, -1.29164348550148134e-07, 3.74717323836648575e-08, 1.46747851204054314e-07, 3.0276513030003116e-07, 5.10873064740735572e-07, 7.20068783266469836e-07, 8.00826285285438644e-07, 6.539981995956623e-07, 3.11615849568624981e-07, -1.63216824944356631e-07, -7.98667542767361738e-07, -1.68678286627255147e-06, -2.86116915049206e-06, -4.04310230806004256e-06, -4.56994621345074847e-06, -4.03908188673085533e-06, -2.82910673377045896e-06, -1.54894166826125002e-06, -4.32675619777000975e-07, 5.44662213997071376e-07, 1.41038992751418846e-06, 2.08350684260949492e-06, -0.999997615814208984, 2.24840505325119011e-06, 1.78118762050871737e-06, 1.19757589800428832e-06, 6.82336292356922058e-07, 4.11361696706080693e-07, 5.11779148837376852e-07, 8.72918292316171573e-07, 1.0938272225757828e-06, 9.13718679385056021e-07, 5.37465268735104473e-07, 2.75935661875337246e-07, 1.93884787336173758e-07, 2.08978079285770946e-07, 2.43579478365063551e-07, 2.60330779155992786e-07, 2.52089336072458536e-07, 2.19980421434229356e-07, 1.66948211699491367e-07, 1.02624639453097188e-07, 3.99911677106956631e-08, 2.20677840445659967e-08, -6.84153462771064369e-08, 8.42355518670956371e-08, 5.29184340791744035e-08, -5.93461635389758158e-08, -1.25906382208995637e-07, 1.04529192412883276e-07, 1.63184608936717268e-07, 9.88845485494493914e-08, -1.18964130990661943e-07, -1.00854116169557528e-07, 9.07070827338429808e-08, 6.90730601604627736e-08, 7.40986010328015254e-08, 8.19186709577479633e-08, -5.43514957485058403e-08, -1.50902764062266215e-07, -3.06111957115717814e-07, -5.29771114088362083e-07, -7.52147855109797092e-07, -8.1395461393185542e-07, -6.24983840680215508e-07, -2.61438088955401327e-07, 2.02628214651667804e-07, 8.4255589172244072e-07, 1.82782071078690933e-06, 3.25153678204515018e-06, 4.73812451673438773e-06, 5.34021228304482065e-06, 4.54504333902150393e-06, 3.00321994473051745e-06, 1.58724571974744322e-06, 4.78365677736292128e-07, -5.83613655180670321e-07, -1.80765198365406832e-06, -2.94919118459802121e-06, 0.999996662139892578, -2.72495981334941462e-06, -1.80645372438448248e-06, -1.19893888950173277e-06, -8.90454657564987428e-07, -6.1733135225949809e-07, -2.73386433491396019e-07, -1.40379455615402549e-07, -2.1194679789005022e-07, -1.50816717336965667e-07, -7.51994804204514367e-08, -7.82798039722365502e-08, -1.71083641475888726e-07, -2.87419993583171163e-07, -3.27228946161994827e-07, -2.63393644672760274e-07, -1.65186790468396794e-07, -9.36004411755675392e-08, -5.00264611957845773e-08, -5.60141053540519351e-08, 7.58877334305907425e-08, -1.02389208223030437e-07, -1.44995937034764211e-07, 7.87555123338279373e-08, 1.25249925986281596e-07, 7.80522171339725901e-08, -9.44587341678015946e-08, -1.25175418475009792e-07, 3.43140342806691478e-08, 5.70320501935839275e-08, -1.00032222505319623e-08, 1.10070750736213085e-07, 2.58759513371842331e-07, 4.57340917137116776e-07, 6.72162002501863753e-07, 7.68088625591190066e-07, 6.2350102325581247e-07, 2.75345598765852628e-07, -1.73100502820489055e-07, -7.10491576683125459e-07, -1.41806390274723526e-06, -2.38919915318547282e-06, -3.48092748936323915e-06, -4.08682717534247786e-06, -3.67696657121996395e-06, -2.52535278377763461e-06, -1.33580124384025112e-06, -4.96401924010569928e-07, 3.14280470092853648e-07, 7.35585672373417765e-07, -0.999998807907104492, 1.25637507153442129e-06, 8.31985857985273469e-07, 3.25328983308281749e-07, 1.65661859341525997e-07, 4.42949044554552529e-07, 9.46674106216960354e-07, 1.29678312532632845e-06, 1.24021232750237687e-06, 9.15137150059308624e-07, 6.20864511802210473e-07, 4.49739587793374085e-07, 3.35461947997828247e-07, 2.42178259668435203e-07, 1.89246563309097837e-07, 1.97133630308599095e-07, 2.30760036856736406e-07, 2.21604409489373211e-07, 1.56145432583798538e-07, 7.80922135845685261e-08, 4.19120063099853724e-08, -6.77459581766015617e-08, 3.64156313992225478e-08, 7.18513462061309838e-08, -1.31642664769060502e-07, -1.56396410488923721e-07, -4.52666917283295334e-08, 7.81834046392759774e-08, 9.66769988508531242e-08, -5.05813524398490699e-08, -8.31530044820283365e-08, -5.9509442706939808e-08, 6.69812436626671115e-08, 1.9067895706825766e-08, -9.50936893673315353e-08, -2.42343475065354141e-07, -4.22722649773277226e-07, -5.89277703966217814e-07, -6.4887609596553375e-07, -5.4959610906735179e-07, -3.28334266441743239e-07, 4.23295659857103601e-07, 1.05232197711302433e-06, 1.83951237886503804e-06, 2.54679093814047519e-06, 2.79088226307067089e-06, 2.45750766225683037e-06, 1.84947668913082452e-06, 1.27207442801591242e-06, 8.08842230526352068e-07, 5.13178406436054502e-07, 5.41712267931870883e-07, 9.34022978071880061e-07, 1.00000131130218506, 1.0061223747470649e-06, 3.2243059422398801e-07, -2.23814154765022977e-07, -4.47338180720180389e-07, -6.1072131529726903e-07, -1.06481581951811677e-06, -1.82599308118369663e-06, -2.35102424994693138e-06, -2.14346846405533142e-06, -1.44021339565369999e-06, -7.96731285390706034e-07, -4.34506148394575575e-07, -2.87521714881222579e-07, -2.4139438892234466e-07, -2.13422580941369233e-07, -1.72974509382584074e-07, -1.2904834534310794e-07, -9.47791178873558238e-08, -6.79116709534355323e-08, 7.81297586627260898e-08, -3.88136065510025219e-08, -7.53660955865598226e-08, 5.74548870702074055e-08, 1.01473830227405415e-07, -1.50869965409583529e-07, -1.80127173621258407e-07, 6.49475921932207712e-08, 5.48388889853868022e-08, -4.49017676373841823e-08, -3.6471064390752872e-08, -1.18684475580721482e-08, 8.8391857389069628e-08, 2.26840157324659231e-07, 4.22837672431342071e-07, 6.23997607362980489e-07, 6.86037651576043572e-07, 5.237039886196726e-07, 2.26817434167969623e-07, -8.63984013221852365e-08, -4.39011614616902079e-07, -9.73370106294169091e-07, -1.81161453838285524e-06, -2.76039168056740891e-06, -3.18649540531623643e-06, -2.69882252723618876e-06, -1.73635589817422442e-06, -9.48874685491318814e-07, -4.80086100651533343e-07, -7.60797007615110488e-08, 5.38585993581364164e-07, 1.2499823469624971e-06, -0.999998509883880615, 1.01114471817709273e-06, 4.44092449924937682e-07, 3.50100208379444666e-07, 6.7339641418584506e-07, 1.09938957848498831e-06, 1.4344160490509239e-06, 1.64754908382747089e-06, 1.71892213529645232e-06, 1.56944270202075131e-06, 1.20727167995937634e-06, 7.80704851877089823e-07, 4.36654147506487789e-07, 2.36740916648159327e-07, 1.76506574689483386e-07, 1.99628502173254674e-07, 2.17484569020598428e-07, 1.77573156179278158e-07, 1.05374596159890643e-07, 6.53121432492298482e-08, 4.77858144165566046e-08, -6.46709281681978609e-08, 6.15168929130049946e-08, -5.879465803104722e-08, -4.97420948875060276e-08, 5.76068188706813089e-08, 1.27848295505827991e-07, -1.46200306971877581e-07, -1.82050470698413847e-07, 1.08796243125652836e-07, 1.03931498074416595e-07, -8.55833448554221832e-08, 9.64879731668588647e-09, -9.03116372796830547e-08, -2.08640656751413189e-07, -3.58916850018431433e-07, -5.23732467172521865e-07, -6.18236583704856457e-07, -5.48923480891971849e-07, -3.11646346062843804e-07, 4.23934977789031109e-07, 8.68825623001612257e-07, 1.39040707836102229e-06, 1.95009965864301194e-06, 2.30119849220500328e-06, 2.15200907405233011e-06, 1.54214762915216852e-06, 8.1459273815198685e-07, 2.97527321890811436e-07, 1.64011169090372277e-07, 3.51123702557742945e-07, 4.61043924815385253e-07, 1.00000011920928955, -3.34745749341891496e-07, -4.53207121609011665e-07, -2.65436511881489423e-07, -2.24986919761249737e-07, -6.39143138414510759e-07, -1.4806554418100859e-06, -2.34148046729387715e-06, -2.6287993932783138e-06, -2.18520312955661211e-06, -1.46129298173036659e-06, -8.89181990260112798e-07, -5.37569576408714056e-07, -3.29980593960499391e-07, -2.11672642080884543e-07, -1.54602020074889879e-07, -1.34304983134825306e-07, -1.20407790404897241e-07, -9.29276566807857307e-08, -5.34092414739006927e-08, 5.72355567385329778e-08, 4.32125801808069809e-08, -8.63439311160618672e-08, 5.17135383404365712e-08, -4.49850645622973389e-08, -5.00059016417253588e-08, 1.31997126118221786e-07, 5.54861969703779323e-08, -1.28906492591340793e-07, -1.84084797183459159e-07, 1.32635534555447521e-07, 1.66492640119031421e-07, -7.0782228078769549e-08, -4.68690686261652445e-08, 8.29883930464347941e-08, 2.15565989947208436e-07, 3.825928160949843e-07, 5.29564658791059628e-07, 5.60325929654936772e-07, 4.52009572882161592e-07, 2.79296926919414545e-07, 7.36625480612929096e-08, -2.31092457170234411e-07, -7.10867880115984008e-07, -1.34508695737167727e-06, -1.90229900454141898e-06, -2.03979584512126166e-06, -1.71607757692981977e-06, -1.23883398828183999e-06, -7.8388023894149228e-07, -2.40210937363372068e-07, 4.88819523525307886e-07, 1.22895335152861662e-06, 1.56771739057148807e-06, -0.999998629093170166, 1.01519890449708328e-06, 9.5253602694356232e-07, 1.06590698578656884e-06, 1.14303247755742632e-06, 1.23907204852002906e-06, 1.56614999013982015e-06, 2.14755641536612529e-06, 2.56081148108933121e-06, 2.35238553614181001e-06, 1.66341635576827684e-06, 9.73837359197204933e-07, 5.24290328485221835e-07, 2.96454572890070267e-07, 2.08737006346382259e-07, 1.8146256763884594e-07, 1.53593049390110536e-07, 1.08752686855950742e-07, 6.83778793586498068e-08, 4.51417463409597985e-08, 4.33018421119868435e-08, -6.89913193241409317e-08, -3.83943792314767052e-08, 1.1947135192258429e-07, 7.8787536494928645e-08, -9.51053635844800738e-08, -1.75768647636687092e-07, -5.55501102894595533e-08, 1.21822381515812594e-07, 1.7901585636082018e-07, 7.44393844342994271e-08, -5.95129279190587113e-08, -6.91450097178858414e-08, -8.1095244297557656e-08, -1.95254557411317364e-07, -3.61575132501457119e-07, -5.48507557596167317e-07, -6.28094198873441201e-07, -4.95586448323592776e-07, -2.17323076867614873e-07, 7.37544070261719753e-08, 3.56912465804271051e-07, 7.29629618945182301e-07, 1.30881335280719213e-06, 1.99968530978367198e-06, 2.32423030865902547e-06, 1.8889197690441506e-06, 9.49322611631941982e-07, -8.12307973774295533e-07, -1.89410513939947123e-06, -3.6614890177588677e-06, -5.84206236453610472e-06, 0.999992966651916504, -6.10509914622525685e-06, -4.03303420171141624e-06, -2.34906542573298793e-06, -1.60047920871875249e-06, -1.55915961386199342e-06, -1.88189267191773979e-06, -2.2347774120135e-06, -2.29805732487875503e-06, -1.95203210751060396e-06, -1.38760060508502647e-06, -8.6648810793121811e-07, -4.9990472916761064e-07, -2.84166617348091677e-07, -1.8506800358863984e-07, -1.61621642291720491e-07, -1.60298128548674867e-07, -1.35101046794261492e-07, -8.41080165514540568e-08, 2.13780477764657917e-08, 2.80604517399751785e-08, -7.12564443006158399e-08, 9.58324122279918811e-08, 7.50498401203003596e-08, -6.26981773166335188e-08, -1.48640822317247512e-07, 1.03075073809577589e-07, 1.62487040711312147e-07, 7.79257689487167227e-08, -1.30100460182802635e-07, 7.87692258086281072e-08, -1.13473737073377379e-08, 8.26218240490561584e-08, 1.94872697534265171e-07, 3.30664676084779785e-07, 4.68747344939401955e-07, 5.45846603472455172e-07, 4.97077508043730631e-07, 3.16191290039569139e-07, -3.06043745013084845e-07, -7.12958069470914779e-07, -1.17292097456811462e-06, -1.6196302112803096e-06, -1.87094258308206918e-06, -1.72846375789958984e-06, -1.16254932436277159e-06, -3.11074899173036101e-07, 6.50086917630687822e-07, 1.57680381107638823e-06, 2.41591078520286828e-06, 3.17378567160631064e-06, -0.999996304512023926, 3.59649038728093728e-06, 2.88640399048745167e-06, 1.97068584384396672e-06, 1.32281400055944687e-06, 1.19266235287796007e-06, 1.60265426529804245e-06, 2.25664939534908626e-06, 2.57225315181131009e-06, 2.23120014197775163e-06, 1.53217604292876786e-06, 9.13201972707611276e-07, 5.16730324306990951e-07, 3.00263252484000986e-07, 1.97722144434919755e-07, 1.53951987158507109e-07, 1.30767460859715356e-07, 1.08476037041782547e-07, 8.26137949161420693e-08, -5.73442591189632367e-08, 7.2255907923590712e-08, 3.59434935148783552e-08, -1.38575032337939774e-07, 8.50293773169141787e-08, 1.43056723800327745e-07, 8.48483807658340083e-08, -1.15830182778609014e-07, -9.66795212775650725e-08, 8.77649526387358492e-08, 6.85713175130331365e-08, -6.95617572432638553e-08, -1.80986589271014964e-07, -3.25053775895867147e-07, -4.5311321628105361e-07, -4.776799755745742e-07, -3.79462363753191312e-07, -2.37208340081451752e-07, -1.0416523110734488e-07, 2.91030005428183358e-07, 6.10701022196735721e-07, 8.72369241733395029e-07, 8.75044179338146932e-07, 6.51047571409435477e-07, 4.42451522530973307e-07, 3.06351722656472703e-07, -5.85921270612743683e-07, -1.49077618516457733e-06, -2.23447182179370429e-06, 0.999997735023498535, -1.74073886682890588e-06, -1.2202663128846325e-06, -1.0608951015456114e-06, -1.20311028695141431e-06, -1.5816023051229422e-06, -2.21721893467474729e-06, -2.9675584301003255e-06, -3.33821344611351378e-06, -2.95205722977698315e-06, -2.08088772524206433e-06, -1.25284964269667398e-06, -6.92068795160594163e-07, -3.71659723441553069e-07, -2.14872386550268857e-07, -1.47628725244430825e-07, -1.09277493720583152e-07, -5.40856106567844108e-08, 7.18504864494207141e-08, -9.69945261886095977e-08, -1.34939625695551513e-07, 7.52985300778163946e-08, 1.16370053149239538e-07, 7.1092571829467488e-08, -8.41318410493840929e-08, -1.05762929081265611e-07, 7.61873977239702072e-08, 4.79285837684528815e-08, 1.25015233720660035e-07, 2.43211104589136085e-07, 3.8255623735494737e-07, 4.56691225281247171e-07, 3.97015696762537118e-07, 2.54742559491205611e-07, 1.35714316229496035e-07, 8.66450662329043553e-08, 8.91421620963228634e-08, 8.50430552645775606e-08, -6.50357776521559572e-08, 1.64184100981401571e-07, 2.91740718694200041e-07, 2.33031585139542585e-07, 4.98828107708959578e-08, 1.91303541896559182e-07, -0.999999403953552246, 7.25142797364242142e-07, 6.009673825246864e-07, 5.39558129730721703e-07, 8.23648917958053062e-07, 1.53743553710228298e-06, 2.62668140749156009e-06, 3.75383865502953995e-06, 4.24365680373739451e-06, 3.71478290617233142e-06, 2.59736384577990975e-06, 1.55680709212902002e-06, 8.50121466555719962e-07, 4.32184066312402138e-07, 2.06669668045833532e-07, 9.70014824019926891e-08, -3.62115493146575318e-08, 3.46392319272581517e-08, 6.66108022073785833e-08, -1.30891734784199798e-07, -1.57345851903301082e-07, 5.68320395188948169e-08, 7.38353591600571235e-08, -5.35743680529776611e-08, -8.09988875971612288e-08, -5.70140628042281605e-08, 6.3960470697566052e-08, -7.06872427258531388e-08, -1.46188966709814849e-07, -2.3713504049283074e-07, -3.35826342734435457e-07, -3.97203422153324937e-07, -3.7518708495554165e-07, -2.83372457943187328e-07, -1.8041401972368476e-07, -1.15521238797100523e-07, -1.18906832824450248e-07, -2.08038443361147074e-07, -3.31939702391537139e-07, -3.40526838726873393e-07, -1.66131513879008708e-07, 5.8644410216857068e-08, -6.92030042159785808e-08, -1.96431372501137957e-07, -1.41535764441869105e-07, 1.1403034960721925e-07, 1.00000035762786865, 2.01248838038736722e-07, -1.21991206469829194e-07, -4.81572669741581194e-07, -9.11671975245553767e-07, -1.59365663421340287e-06, -2.6392560812382726e-06, -3.78667050426884089e-06, -4.32136357630952261e-06, -3.8037114791222848e-06, -2.66470260612550192e-06, -1.59789351528161205e-06, -8.71967699822562281e-07, -4.39701864252128871e-07, -1.989075144592789e-07, -6.99185633834531473e-08, 7.42493000416288851e-08, -3.82912830332315934e-08, -7.24110904570807179e-08, 5.48783098963667726e-08, 9.57904617848726048e-08, -1.4385622648660501e-07, -1.7139802821475314e-07, 5.81739847405060573e-08, 4.62629650144208426e-08, -3.95369355032926251e-08, 4.92673457586079167e-08, 1.46888723406846111e-07, 2.64883254885717179e-07, 3.66230295867353561e-07, 3.96732929175414029e-07, 3.45906585152988555e-07, 2.60626137560393545e-07, 1.81782908725836023e-07, 1.15565335079281795e-07, 1.67194500022560533e-07, 2.80628597693066695e-07, 2.92325751161115477e-07, 2.36734109648750746e-07, 2.68933433744678041e-07, 5.59614704798150342e-07, 1.17881916139594978e-06, 1.89349327683885349e-06, -0.999997794628143311, 1.89039405995572452e-06, 1.36363109959347639e-06, 1.08244000784907257e-06, 1.19361789074901026e-06, 1.704615442577051e-06, 2.60186993727984373e-06, 3.6129717955191154e-06, 4.07505513067007996e-06, 3.57055978383868933e-06, 2.49270919994160067e-06, 1.48883748352091061e-06, 8.11250060905877035e-07, 4.14339723420198425e-07, 2.00269141714670695e-07, 8.75196590754967474e-08, 6.935385243878045e-08, 5.556949034257741e-08, -4.15699972222682845e-08, -4.1826123009514049e-08, -2.49080915892818666e-08, 1.42555194315718836e-07, -1.30290843003422196e-07, -1.67803818840184249e-07, 1.03390100036904187e-07, 9.74660352426326426e-08, -8.3910109083262796e-08, -4.9644196309373001e-08, -1.25044707033339364e-07, -2.484891012954904e-07, -3.86496367354993708e-07, -4.40625314013232128e-07, -3.59996107590632164e-07, -2.18595175738300895e-07, -1.05685231233110244e-07, 6.09670962603559019e-08, 2.03616565386255388e-07, 3.92466745324782096e-07, 5.14910766469256487e-07, 4.42493330865545431e-07, 1.90855672599354875e-07, -1.1701578728207096e-07, -3.96933103274932364e-07, -6.52644473575492157e-07, -9.59572162173571996e-07, -1.34743129365233472e-06, 0.999998390674591064, -1.57870397288206732e-06, -1.25913925330678467e-06, -9.94424340206023771e-07, -1.0195653885602951e-06, -1.41292537136905594e-06, -2.15519662560836878e-06, -2.99707994599884842e-06, -3.38476525030273478e-06, -2.97438805318961386e-06, -2.08583310268295463e-06, -1.25043573007133091e-06, -6.81502683619328309e-07, -3.48699870755808661e-07, -1.76704162413443555e-07, -1.02319887673729681e-07, -7.43490176091654575e-08, 6.05259700137139589e-08, 5.08082464989456639e-08, -5.26620524965437653e-08, -3.59481120426607959e-08, -3.42040138434640539e-08, 1.45886218660962186e-07, -1.09699854533573671e-07, -1.6689462256636034e-07, 1.26108645304157108e-07, 1.5689793997353263e-07, -6.79597249586549879e-08, -4.47516335100317519e-08, 7.894230691363191e-08, 1.5807739828233025e-07, 2.52821109825163148e-07, 3.66116097438862198e-07, 4.42151474544516532e-07, 4.00855725501969573e-07, 2.43941173039274872e-07, -1.25143017726259131e-07, -2.79970095107273664e-07, -4.44467104898649268e-07, -6.19081504282803508e-07, -7.25824463643220952e-07, -6.86031000896036858e-07, -5.25171572007820942e-07, -3.0597661293541023e-07, 2.97642571922551724e-07, 6.56016652555990731e-07, 9.3200247874847264e-07, -0.999998986721038818, 8.84832047631789465e-07, 7.20271430054708617e-07, 6.56929614706314169e-07, 7.86639986927184509e-07, 1.17978936486906605e-06, 1.85191379387106281e-06, 2.59690045822935645e-06, 2.93239645543508232e-06, 2.56990142588620074e-06, 1.802834844966128e-06, 1.09285326743702171e-06, 6.14742077686969424e-07, 3.36483282126209815e-07, 1.90593880233791424e-07, 1.20697976058181666e-07, 8.98822776207452989e-08, 4.32661622085106501e-08, 3.90880892098266486e-08, -7.26537123796333617e-08, -3.76397117918259028e-08, 1.05447128362357034e-07, 6.48705693606643763e-08, -9.79165051262498309e-08, -1.71305075014061003e-07, 1.11447334916192631e-07, 1.65494526527254493e-07, 6.71112374561744218e-08, -5.86436605942708411e-08, -6.63619346141786082e-08, -4.69156908877721435e-08, -1.48627549378943513e-07, -2.66010260929760989e-07, -3.55663104301129351e-07, -3.75775016436818987e-07, -3.30397199377330253e-07, -2.48885385190078523e-07, -1.32261774865582993e-07, 2.563147916134767e-07, 4.89676153847540263e-07, 6.64143158246588428e-07, 6.87247108999144984e-07, 5.38408301054005278e-07, 3.14342969431891106e-07, 1.22380555467316299e-07, -1.82401848292101931e-07, -4.2140879941143794e-07, -7.08007235061813844e-07, 0.999999105930328369, -8.14117470326891635e-07, -6.59558168081275653e-07, -6.06801620506303152e-07, -7.57346469981712289e-07, -1.16265437100082636e-06, -1.83809765985643025e-06, -2.59038642980158329e-06, -2.93787616101326421e-06, -2.5765380087250378e-06, -1.79539256350835785e-06, -1.07148810002399841e-06, -5.90681224821310025e-07, -3.19071375542989699e-07, -1.83013696641864954e-07, -1.16447843367950554e-07, -7.38421803703204205e-08, 2.91921846695686327e-08, -7.18360055884659232e-08, 9.12204853875664412e-08, 7.01855782381244353e-08, -5.99007066170997859e-08, -1.4069334497435193e-07, 9.44865519159066025e-08, 1.4940432890853117e-07, 6.94133106549088552e-08, -1.24520823874263442e-07, 7.74547572746087098e-08, 4.96776486613725865e-08, 1.20408373049940565e-07, 2.42417542040129774e-07, 3.80044383518907125e-07, 4.23683644612538046e-07, 3.20860095825992175e-07, 1.65008458452575724e-07, 5.84077533005711302e-08, -1.30361868855288776e-07, -3.45872734897056944e-07, -6.01057820404093945e-07, -7.3165278990927618e-07, -6.42634859104873613e-07, -4.14768067003024044e-07, -1.68671974165590655e-07, 5.38136504246722325e-08, 2.61245105548368883e-07, 4.73640653808615752e-07, 6.81616484143887646e-07, -0.99999922513961792, 7.56337556140351808e-07, 6.28539964964147657e-07, 5.80940593408740824e-07, 7.25873178453184664e-07, 1.11880046915757703e-06, 1.76633625414979178e-06, 2.48127139457210433e-06, 2.81530947177088819e-06, 2.48448645834287163e-06, 1.74928891283343546e-06, 1.05128845007129712e-06, 5.73636157241708133e-07, 2.9728207096013648e-07, 1.63353206517058425e-07, 1.13597842243962077e-07, 9.30669159515673527e-08, -5.88579709415171237e-08, 7.41901544643042143e-08, -1.18145685235049314e-07, 8.44755305706712534e-08, 1.34156749709291034e-07, 7.65014149806120258e-08, -1.12974809951538191e-07, -9.34877775193854177e-08, 8.38563352090204717e-08, 6.70181563577898487e-08, -7.00914597473456524e-08, -1.40780002766405232e-07, -2.24568580620143621e-07, -3.29965615719629568e-07, -4.13103407481685281e-07, -3.88573369036748772e-07, -2.33652471592904476e-07, 1.7501720606105664e-07, 3.38776516173311393e-07, 5.11307348460832145e-07, 7.04550416230631527e-07, 8.18013404568773694e-07, 7.42442693990597036e-07, 5.26453789007064188e-07, 2.96042742320423713e-07, 9.67968176723843499e-08, -9.24458802842309524e-08, -2.85629454310765141e-07, -4.52218756663569366e-07, 0.999999463558197021, -4.99964414757414488e-07, -4.38192159890604671e-07, -4.50695040399295976e-07, -6.18425190168636618e-07, -9.99226358544547111e-07, -1.60592128395364853e-06, -2.26043175644008443e-06, -2.54755582318466622e-06, -2.22805783778312616e-06, -1.56426494868355803e-06, -9.53874973674828652e-07, -5.41498764050629688e-07, -2.94420743784939987e-07, -1.57799860289742355e-07, -9.45054239309683908e-08, -7.51441930901819433e-08, -6.72224444997482351e-08, -5.47776615178463544e-08, 7.10044716356605932e-08, -8.9646263745635224e-08, -1.24506414067582227e-07, 7.04123479522422713e-08, 1.05704366148984263e-07, 6.11251849136351666e-08, -8.42949674506598967e-08, -1.03499310455390514e-07, 7.19572099683318811e-08, 5.21742684611581353e-08, 1.49980408536976029e-07, 2.61825789493741468e-07, 3.4411229421493772e-07, 3.54398650870280107e-07, 3.05438760506149265e-07, 2.31012293738785957e-07, 1.16489133006325574e-07, -7.73216513039187703e-08, -3.60488428441385622e-07, -7.00165003308939049e-07, -9.95325194708129857e-07, -1.09022971628291998e-06, -9.25965593978617107e-07, -6.29594751444528811e-07, -3.62502220241367468e-07, -1.78100350467502722e-07, 5.65985232015009387e-08, 1.53572798922141374e-07, -0.999999761581420898, 2.2456713111296267e-07, 2.32298646096751327e-07, 2.99254224955802783e-07, 4.80364917621045606e-07, 8.28376926165219629e-07, 1.36996345645457041e-06, 1.96644646166532766e-06, 2.24631685341591947e-06, 1.97116310118872207e-06, 1.36687469876051182e-06, 8.10434642062318744e-07, 4.52760474445312866e-07, 2.66009095639674342e-07, 1.81205280114227207e-07, 1.35971944814627932e-07, 9.76714034095493844e-08, -3.68550665541533817e-08, 3.61746224086800794e-08, 6.55886722711329639e-08, -1.23588151268450019e-07, -1.49038811514401459e-07, 4.92099410109858582e-08, 6.25815417265584983e-08, -6.12592643278730975e-08, -2.32759447271746467e-08, -4.62346001484092994e-08, -1.24713778859586455e-07, -2.50038453941670014e-07, -3.85919207701590494e-07, -4.24262680098763667e-07, -3.08134673332460807e-07, -1.25141397688821598e-07, 1.48813555256310792e-07, 3.29819926037089317e-07, 6.25414713795180432e-07, 9.72574866864306387e-07, 1.15690841084870044e-06, 1.03725835742807249e-06, 7.33655099338648142e-07, 4.52674015605225577e-07, 2.85039959635469131e-07, 2.31833908515000076e-07, 2.67223697392182657e-07, 3.36882095552937244e-07, 1.00000035762786865, 2.80530343843565788e-07, 1.20043566198546614e-07, -9.00285641591835883e-08, -3.63074718734424096e-07, -7.45661850487522315e-07, -1.26563588764838642e-06, -1.81061966486595338e-06, -2.07091284210036974e-06, -1.8432136812407407e-06, -1.31191541186126415e-06, -7.94446236795920413e-07, -4.29623412401269889e-07, -2.17849247974299942e-07, -1.27830332985467976e-07, -1.11628665422358608e-07, -1.06900891694294842e-07, -7.83392408720828826e-08, 7.3075902662367298e-08, -3.79826659013815515e-08, -7.17208905598454294e-08, 5.386439383414654e-08, 9.3039041360043484e-08, -1.34345512492473063e-07, -1.600974570692415e-07, 5.49411538486310747e-08, 3.9855240885344756e-08, 6.15351893884508172e-08, 1.20179564078171097e-07, 2.0085687424398202e-07, 3.07284039990918245e-07, 3.90239307535011903e-07, 3.70126770121714799e-07, 2.30054112648758746e-07, -2.01730657067855645e-07, -4.515402167726279e-07, -7.42852705570840044e-07, -1.03225863767875126e-06, -1.16677142614207696e-06, -1.04375158116454259e-06, -7.69653127008496085e-07, -5.23415508268954e-07, -3.86304805033432785e-07, -3.64675571518091601e-07, -4.42637031028425554e-07, -5.6102788903444889e-07, -1.00000059604644775, -5.05202365275181364e-07, -2.97935116577718873e-07, 2.50244482913331012e-07, 6.49852040623954963e-07, 1.17544038857886335e-06, 1.70214764239062788e-06, 1.92430547940602992e-06, 1.67560779118502978e-06, 1.17323475024022628e-06, 7.2443702947566635e-07, 4.2870055949606467e-07, 2.50216544372960925e-07, 1.46119518262821657e-07, 9.72807114862916933e-08, 8.69976872763800202e-08, 8.15420264643762494e-08, 6.85540229028447357e-08, 5.4169269958492805e-08, -4.02050268633047381e-08, -4.27677697700801218e-08, -2.48786644618803621e-08, 1.36955264906646335e-07, -1.20648792290012352e-07, -1.55677994939651398e-07, 1.01086691017826524e-07, 9.38604998168557358e-08, -8.38096809729904635e-08, -6.89506265416639508e-08, -1.65811087526890333e-07, -2.66925695768804871e-07, -3.43734370744641637e-07, -3.56381576693820534e-07, -2.95645548931133817e-07, -1.89909158621048846e-07, 1.27418630313513859e-07, 3.95111925399760366e-07, 7.57732209422101732e-07, 1.12467421331530204e-06, 1.284769950871123e-06, 1.12500822524452815e-06, 8.0011125191958854e-07, 5.34779417193931295e-07, 4.20335936723859049e-07, 4.57965484201849904e-07, 6.24966730811138405e-07, 8.35506398288998753e-07, 1.00000095367431641, 7.62268427934031934e-07, 4.58374387335425126e-07, 1.39906845220139076e-07, -1.73522195723307959e-07, -5.46564820069761481e-07, -1.03226648207055405e-06, -1.54098290749971056e-06, -1.78677419171435758e-06, -1.57880583628866589e-06, -1.09456379959738115e-06, -6.42061138478311477e-07, -3.52785576751557528e-07, -2.09537233786249999e-07, -1.53420586457286845e-07, -1.25472396916848083e-07, -9.615365570425638e-08, -6.92071751018374925e-08, 6.28591791951293999e-08, -3.73806301467993762e-08, -3.70119792592049635e-08, -3.44469484048204322e-08, 1.38249461656414496e-07, -1.01347715997235355e-07, -1.54894806314587186e-07, 1.22299468330311356e-07, 1.51155916228162823e-07, -6.51747527058432752e-08, -4.47065495734477736e-08, 1.14043864130053407e-07, 2.42458554566837847e-07, 3.64731306490284624e-07, 3.94066518083491246e-07, 2.98947128385407268e-07, 1.3857335545708338e-07, -2.10042003345733974e-07, -4.4710256474900234e-07, -7.72768999013351277e-07, -1.12643715510785114e-06, -1.31133003833383555e-06, -1.19003607323975302e-06, -8.83073653312749229e-07, -6.13134375271329191e-07, -4.90188313051476143e-07, -5.27955933193879901e-07, -7.08146046690671938e-07, -9.46491297781903995e-07, -1.00000107288360596, -9.20243621749250451e-07, -5.91608625200024107e-07, -2.23801322363215149e-07, 1.30267849840493e-07, 5.08181415170838591e-07, 9.54942834141547792e-07, 1.40227950851112837e-06, 1.61689911237772321e-06, 1.44454963901807787e-06, 1.03342233614966972e-06, 6.33213119272113545e-07, 3.50980144503409974e-07, 1.86989282724425721e-07, 1.19864282055459626e-07, 1.12115770889431587e-07, 1.10034250155877089e-07, 8.33657765042516985e-08, 4.67552894178879797e-08, -6.53667129313362238e-08, 9.39544406719505787e-08, 5.59129382793344121e-08, -9.55548600245492707e-08, -1.62438041684254131e-07, 1.06355692253146117e-07, 1.5760569738176855e-07, 6.44284199324829387e-08, -5.53484440501961217e-08, -6.37163850569777424e-08, -1.31924497992486067e-08, -5.88571076320931752e-08, -1.02649494237994077e-07, -1.82549271698917437e-07, -2.98728622283306322e-07, -3.73775009165910888e-07, -3.30441054074981366e-07, -1.88205689255482866e-07, 2.16018776200144202e-07, 5.12039434852340491e-07, 9.02855219919729279e-07, 1.29646844015951501e-06, 1.46868205774808303e-06, 1.29841987472900655e-06, 9.50337550875701709e-07, 6.72095723075472051e-07, 5.78171238885261118e-07, 6.8457774204944144e-07, 9.64862238106434233e-07, 1.29044042296300177e-06, 1.00000143051147461, 1.21676771414058749e-06, 8.16214196674991399e-07, 4.0010419866121083e-07, -3.83433501838226221e-07, -8.17699003619054565e-07, -1.21728135127341375e-06, -1.38463440180203179e-06, -1.21267885333509184e-06, -8.54567645092174644e-07, -5.29276292127178749e-07, -3.14146149094085558e-07, -1.8819717695350846e-07, -1.21572085731713742e-07, -9.65006705655468977e-08, -9.26191461303460528e-08, -8.26597954528551782e-08, -5.67121283268079424e-08, 2.9690799152604086e-08, -6.94255106736818561e-08, 6.99004374382639071e-08, 4.28321129675168777e-08, -1.53180820916531957e-07, 8.20571628423749644e-08, 1.37639247554943722e-07, 6.45449063085834496e-08, -1.15894685848161316e-07, 7.38821270829248533e-08, 7.69208696738132858e-08, 1.7497251292297733e-07, 2.59003087421660894e-07, 3.2158359886125254e-07, 3.39732679321969044e-07, 2.82998570355630363e-07, 1.55948185920351534e-07, -2.22362118051933066e-07, -5.10031100020569284e-07, -9.0827359144896036e-07, -1.33534229007636895e-06, -1.54856627432309324e-06, -1.39540668442350579e-06, -1.03715808563720202e-06, -7.41586006824945798e-07, -6.39451968709181529e-07, -7.59770955482963473e-07, -1.09380653157131746e-06, -1.50617290728405351e-06, -1.00000166893005371, -1.43725026191532379e-06, -9.44028556659759488e-07, -4.79098559935664525e-07, -1.05160545160742913e-07, 2.57152862559451023e-07, 6.74569548664294416e-07, 1.08225162875896785e-06, 1.26596637528564315e-06, 1.10729376956442138e-06, 7.61879050514835399e-07, 4.52339378398392e-07, 2.58810388231722754e-07, 1.62235821221656806e-07, 1.24491322139874683e-07, 1.10827969024285267e-07, 9.89348478697138489e-08, 8.17682632714422652e-08, 6.15269399872886424e-08, -5.6281407978531206e-08, 6.88406132098862145e-08, -1.10694578836501023e-07, 8.0220239340178523e-08, 1.2611441491117148e-07, 7.14145329538951046e-08, -1.06277340705673851e-07, -8.73660326305980561e-08, 7.9121136309368012e-08, 6.23219236217664729e-08, -8.95622491725589498e-08, -2.2232087815154955e-07, -3.41593391794958734e-07, -3.67470534001768101e-07, -2.83296373027042137e-07, -1.40684264238188916e-07, 2.36200037306844024e-07, 5.24230813425674569e-07, 9.09215032152133062e-07, 1.30667729081324069e-06, 1.49241259350674227e-06, 1.33423645820585079e-06, 9.9455371582735097e-07, 7.29566522750246804e-07, 6.581418006135209e-07, 7.95932578512292821e-07, 1.12475197511230363e-06, 1.53058624619006878e-06, 1.00000178813934326, 1.52976451772701694e-06, 1.019417595671257e-06, 4.82258826650650008e-07, -2.95088170787494164e-07, -6.38402582353592152e-07, -9.86485133580572437e-07, -1.18580351227137726e-06, -1.08851270397281041e-06, -7.82191307280299952e-07, -4.72848910249012988e-07, -2.63876444250854547e-07, -1.56029102527099894e-07, -1.20732963182490494e-07, -1.18953003891419939e-07, -1.10998684021978988e-07, -8.26028596634387213e-08, -5.19377572061330284e-08, 6.66019062123268668e-08, -8.54074784228942008e-08, -1.16501560398774018e-07, 6.73771083370411361e-08, 9.89311530474878964e-08, 5.60566455476418923e-08, -7.93690304590199958e-08, -9.62668877946271095e-08, 6.74645193043943436e-08, 2.94009332435507531e-08, 7.76596564833198499e-08, 1.1528364751711706e-07, 1.84239539180452994e-07, 2.87773957552417414e-07, 3.50639140833663987e-07, 2.98257987196848262e-07, 1.53042975625794497e-07, -2.52246735499284114e-07, -5.66128846912761219e-07, -1.0001235750678461e-06, -1.45757019254233455e-06, -1.67732696354505606e-06, -1.50073685745155672e-06, -1.10709220280114096e-06, -7.92223829648719402e-07, -7.04334752299473621e-07, -8.71045301664707949e-07, -1.25257179206528235e-06, -1.67161419994954485e-06, -1.00000178813934326, -1.59806779720383929e-06, -1.13887563202297315e-06, -6.62096738324180478e-07, -2.21608672745787771e-07, 1.95140145820005273e-07, 5.75111073430889519e-07, 8.53553615343116689e-07, 9.36260335038241465e-07, 8.09760763331723865e-07, 5.83405437737383181e-07, 3.73126368913290207e-07, 2.22132413796316541e-07, 1.31741970221810334e-07, 9.57392103373422287e-08, 9.96403741737594828e-08, 1.11191468477045419e-07, 9.97627438437120873e-08, 6.65077948269754415e-08, -3.50064688348084019e-08, 3.48903697044988803e-08, 6.18666078366914007e-08, -1.17588051296024787e-07, -1.40134801540625631e-07, 4.75665409283010376e-08, 5.80597188104547968e-08, -5.67815696683737769e-08, -2.03358467842917889e-08, -5.43809832720398845e-08, -1.56568248144139943e-07, -2.53143042527881335e-07, -3.27281526324441074e-07, -3.45947626101406058e-07, -2.78645273965594242e-07, -1.34954845520951494e-07, 5.89137023609964672e-08, 3.11315034196013585e-07, 6.66058554088522214e-07, 1.15294926672504516e-06, 1.66553036251571029e-06, 1.9130818600388011e-06, 1.71711212715308648e-06, 1.27055784560070606e-06, 8.88660281361808302e-07, 7.231179779410013e-07, 8.13974509128456702e-07, 1.16655610327143222e-06, 1.62605647346936166e-06, 1.00000178813934326, 1.5039744312161929e-06, 9.52050072555721272e-07, 5.08756386352615664e-07, 2.40858781808128697e-07, -2.4125506570271682e-07, -5.30591364622523542e-07, -6.74841260206449078e-07, -5.86715771078161197e-07, -3.89978140447055921e-07, -2.35980166962690419e-07, -1.57015364266044344e-07, -1.24881665897191851e-07, -1.14663642136747512e-07, -1.127768740616375e-07, -1.09606212106427847e-07, -9.69508988646339276e-08, -7.44886747838791052e-08, 6.96589168569516914e-08, -3.66674086649254605e-08, -6.85626417862295057e-08, 5.19912148888579395e-08, 8.83003252738490119e-08, -1.27559061979809485e-07, -1.50760357087165175e-07, 5.33728901075392059e-08, 3.7139493258564471e-08, 9.82452661446586717e-08, 2.12811499977760832e-07, 3.27515891740404186e-07, 3.64534741947863949e-07, 2.88106861034975736e-07, 1.3629257011871232e-07, -5.40876108345855755e-08, -3.01712447026147856e-07, -6.55742155686311889e-07, -1.14182842025911668e-06, -1.64485982168116607e-06, -1.86864713214163203e-06, -1.64223899901116965e-06, -1.17124307053018128e-06, -7.63997093145007966e-07, -5.2742052503162995e-07, -4.23252771497573121e-07, -4.09883170959801646e-07, -4.84464180772192776e-07, -1.00000059604644775, -6.21268952727405122e-07, -4.48878950010112021e-07, -1.64536231750389561e-07, 9.12730797608674038e-08, 2.56060161518689711e-07, 3.62645323548349552e-07, 4.73068666906328872e-07, 5.65944390018557897e-07, 5.45005889307503821e-07, 4.01342703071350115e-07, 2.35562666262012499e-07, 1.2698569662461523e-07, 8.89784459445763787e-08, 1.00955013238035463e-07, 1.25588641708418436e-07, 1.26025568647492037e-07, 9.57746451035745849e-08, 5.85979087475152483e-08, 7.32029903360853496e-08, -1.4730960451458941e-08, -4.1160365782388908e-08, -2.31830572516855682e-08, 1.30062900893790356e-07, -1.14238901005592197e-07, -1.46369586673245067e-07, 9.79002550138829974e-08, 9.01221923754746967e-08, -8.08819891062739771e-08, -7.24145650110585848e-08, -1.23445673239075404e-07, -1.95232544797363516e-07, -2.79692358162719756e-07, -3.1942948908181279e-07, -2.64181494458171073e-07, -1.3273958643367223e-07, 2.40848748944699764e-07, 5.30374109075637534e-07, 9.32871387249178952e-07, 1.36350297452736413e-06, 1.57175691128941253e-06, 1.38683253680937923e-06, 9.57365841713908594e-07, 5.59270006306178402e-07, 3.30681785953856888e-07, 2.69765365601415397e-07, 2.87709468693719828e-07, 2.47314602574988385e-07, 1.00000011920928955, 6.51177671784353151e-08, -2.54744406902318588e-07, -5.60108958325145068e-07, -7.99496319814352319e-07, -8.52097571168997092e-07, -7.2266567485712585e-07, -5.23238668392878026e-07, -3.44126846130166086e-07, -2.09534562145563541e-07, -1.21778228390212462e-07, -8.37797387021055329e-08, -8.82280417613401369e-08, -1.03914992166664888e-07, -9.67094919701594335e-08, -6.52129799050271686e-08, 6.07302794719544181e-08, -3.80259947974082024e-08, -3.54609355213142408e-08, -3.22763717974794417e-08, 1.31101913325437636e-07, -9.58713286536294618e-08, -1.45659114991758543e-07, 1.17495325469008094e-07, 1.4448265517330583e-07, -6.20453590727265691e-08, -4.21696135788351967e-08, 3.58526826005345356e-08, 1.08463453329932236e-07, 1.92120225506187126e-07, 2.68718537199674756e-07, 2.95589529741846491e-07, 2.44249804381979629e-07, 1.34113463445828529e-07, -1.69661703353085613e-07, -3.86469139357359381e-07, -6.6673919718596153e-07, -9.50288949752575718e-07, -1.08778954199806321e-06, -9.95425125438487157e-07, -7.6922992775507737e-07, -5.51765083400823642e-07, -4.16428889593589702e-07, -4.21437903241894674e-07, -6.4278947320417501e-07, -1.02951480585034005e-06, -1.00000131130218506, -1.04226137409568764e-06, -5.57968633074779063e-07, -1.50626632944295125e-07, 9.47699874132013065e-08, 3.1357856755676039e-07, 6.46079342914163135e-07, 1.04996775007748511e-06, 1.25973463127593277e-06, 1.10375890471914317e-06, 7.47810076973109972e-07, 4.43236103819799609e-07, 2.65853998371312628e-07, 1.77728338712768164e-07, 1.33829260562379204e-07, 1.07702049945146427e-07, 8.9081460430406878e-08, 4.56959838857073919e-08, -6.58139001075142005e-08, 8.90736018277493713e-08, 5.24399794699093036e-08, -9.04108716781593102e-08, -1.5277687737125234e-07, 1.01623705006659293e-07, 1.49680715821887134e-07, 6.09942674145713681e-08, -5.26662375932573923e-08, -5.99605485263055016e-08, -9.13266404722890002e-08, -1.71976552110209013e-07, -2.54327574111812282e-07, -2.865299109089392e-07, -2.39374969623895595e-07, -1.42225275112650706e-07, 9.70823776924589765e-08, 2.73687163598879124e-07, 5.15910073772829492e-07, 7.61937997140194057e-07, 8.55361065532633802e-07, 7.27175176962191472e-07, 5.24139352364727529e-07, 4.2518092868704116e-07, 4.62104395637652487e-07, 5.66027210879838094e-07, 6.67331846671004314e-07, 7.59901922720018774e-07, 1.00000083446502686, 8.70606811531615676e-07, 6.82780239458224969e-07, 3.19690286687546177e-07, -9.60546202577461372e-08, -4.86567103052948369e-07, -8.58064822750748135e-07, -1.20597326258575777e-06, -1.39025746648258064e-06, -1.26331190131168114e-06, -9.06869274786004098e-07, -5.3946087064105086e-07, -2.85136849242917378e-07, -1.53428160842850048e-07, -1.10729445168544771e-07, -1.0792506799361945e-07, -9.86751302889388171e-08, 2.99786186985784298e-08, -6.9255747803254053e-08, 6.63685284507664619e-08, 3.9797470208213781e-08, -1.44095764653684455e-07, 7.79746542889370176e-08, 1.29653443536881241e-07, 5.98013016883669479e-08, -1.10801749997335719e-07, 7.34408089897442551e-08, 4.89454663465949125e-08, 9.5539327560345555e-08, 1.61423145073058549e-07, 2.33577992503342102e-07, 2.66830284090247005e-07, 2.25855828261956049e-07, 1.31641272105298412e-07, -7.02811533415115264e-08, -1.76946173269243445e-07, -3.15751833568356233e-07, -4.86808403366012499e-07, -6.18166211552306777e-07, -6.16729607827437576e-07, -5.07144648054236313e-07, -4.4598962745112658e-07, -6.1252654859345057e-07, -1.13548014724074164e-06, -2.0012184904771857e-06, -2.84983525489224121e-06, -1.00000309944152832, -2.53261509897129145e-06, -1.67808946116565494e-06, -9.45110969041706994e-07, -3.44585572520372807e-07, 2.48263688717997866e-07, 8.7011602545317146e-07, 1.40058477882121224e-06, 1.60484501066093799e-06, 1.40254030611686176e-06, 1.00016302440053551e-06, 6.35882088317885064e-07, 3.85864439067518106e-07, 2.37688269066893554e-07, 1.72325854919108679e-07, -5.51198198195379518e-08, 6.51835136977751972e-08, -1.05753485968307359e-07, 7.55905205096496502e-08, 1.18930721271226503e-07, 6.82511611671543506e-08, -9.19941669508261839e-08, -6.8015872045634751e-08, 9.29250631998002063e-08, -8.22067462991071807e-08, -1.43567660870758118e-07, -2.02510122448984475e-07, -2.28592625717283227e-07, -2.04250795832194854e-07, -1.45901935866277199e-07, -7.6398855242132413e-08, 8.07004312264325563e-08, 1.55655314415525936e-07, 1.97131811319195549e-07, 2.08977965598933224e-07, 2.50113743049951154e-07, 3.66126556627932587e-07, 5.47549802831781562e-07, 7.99782469584897626e-07, 1.21330629099247744e-06, 1.93385153579583857e-06, 2.87170860246988013e-06, 1.00000345706939697, 3.0516953302139882e-06, 2.02245814762136433e-06, 9.99123130895895883e-07, 2.46870939690779778e-07, -3.54378016709233634e-07, -9.77129161583434325e-07, -1.59325713866564911e-06, -1.89746253909106599e-06, -1.67922905802697642e-06, -1.15666432520811213e-06, -6.80750247283867793e-07, -3.80209854711210937e-07, -2.19056019545860181e-07, -1.35692459934944054e-07, -8.49684695936048229e-08, -4.87438391871819476e-08, 6.43380460019216116e-08, -8.11953668744536117e-08, -1.09337619846883172e-07, 6.4276903799509455e-08, 9.2166423826256505e-08, 5.03860952960621944e-08, -7.72510588831210043e-08, -9.25569167975481832e-08, 6.54676881595150917e-08, 7.57148939101170981e-08, 1.41596160574408714e-07, 2.10207502959747217e-07, 2.35930372127768351e-07, 1.95008425407650066e-07, 1.22499585586410831e-07, 6.37614192555702175e-08, -1.03645731996948598e-07, -2.02650738856391399e-07, -2.3452086850284104e-07, -1.58206290734597133e-07, -7.57598499490086397e-08, -1.25519363791681826e-07, -3.46189807487462531e-07, -6.76103809382766485e-07, -1.0125330618393491e-06, -1.25495205338665983e-06, -1.00000131130218506, -1.17032573143660557e-06, -8.33830938518076437e-07, -3.92921208458574256e-07, 8.21222201352611592e-08, 5.7667222108648275e-07, 1.11227825527748792e-06, 1.62436867867654655e-06, 1.87367993476073025e-06, 1.68264898547931807e-06, 1.20403251457901206e-06, 7.28850352516019484e-07, 3.97551701780685107e-07, 2.13007581351121189e-07, 1.38771696356343455e-07, -2.96734530280673425e-08, 3.53948657050295878e-08, 5.99331428929872345e-08, -1.11738081898238306e-07, -1.32022549337307282e-07, 4.58364404209987697e-08, 5.34785655759151268e-08, -5.53074883669069095e-08, -2.06634158672613921e-08, -7.80139473022245511e-08, -1.27896171875363507e-07, -1.84231623734376626e-07, -2.18710425770041184e-07, -2.02354954126349185e-07, -1.42688506343802146e-07, -7.57603899614878173e-08, 8.66424585410641157e-08, 1.45284531072320533e-07, 1.42828710636422329e-07, 1.85155499821121339e-07, 4.04258685193781275e-07, 8.39744700442679459e-07, 1.30734417780331569e-06, 1.00000143051147461, 1.17361707907548407e-06, 7.11546590537182055e-07, 2.91670062324556056e-07, -1.07508178359694284e-07, -5.85763700655661523e-07, -1.17971819690865232e-06, -1.75179673078673659e-06, -1.98718953470233828e-06, -1.73126250047062058e-06, -1.21477910397516098e-06, -7.47261822198197478e-07, -4.3200552113376034e-07, -2.42463812583082472e-07, -1.38021889029005251e-07, 4.24339638982473843e-08, -6.68108270929224091e-08, 5.1017366331507219e-08, 8.49832062499444874e-08, -1.21028818966806284e-07, -1.42160288874038088e-07, 5.18915896918770159e-08, 3.4364802559139207e-08, 6.91716977030409907e-08, 1.28475846850051312e-07, 1.82309065621666377e-07, 1.99496795971754182e-07, 1.73266087699630589e-07, 1.30000785247830208e-07, 8.81033912492057425e-08, 4.27555093551745813e-08, 2.55085357281359393e-08, 4.11527842913983477e-08, -2.24396217163302936e-07, -4.02223548690017196e-07, -5.95327207975060446e-07, -8.77940351529105101e-07, -1.25215683510759845e-06, -1.00000143051147461, -1.3292348057802883e-06, -8.59928320551262004e-07, -3.49206743521790486e-07, 1.00660997759405291e-07, 5.62483535304636462e-07, 1.12359600734635023e-06, 1.70494331541704014e-06, 1.98871316570148338e-06, 1.75963793935807189e-06, 1.22232165722380159e-06, 7.21522837920929305e-07, 3.93884164395785774e-07, 2.14116838037625712e-07, 1.27170451946767571e-07, 5.71085294609474659e-08, -5.05350783441826934e-08, 1.10026654454031814e-07, -1.13465183915195666e-07, -1.40349840194176068e-07, 9.52058485381712671e-08, 8.74013181828559027e-08, -7.79815252371918177e-08, -7.73132171616452979e-08, -1.34291369136008143e-07, -1.99805626266424952e-07, -2.29784788530196238e-07, -1.91792096870813111e-07, -1.1478920214358368e-07, 5.27266692529337888e-08, 1.52098834860225907e-07, 2.92190435402517323e-07, 3.80120781073856051e-07, 3.29040034330319031e-07, 2.05272797870748036e-07, 1.60027425977204985e-07, 2.68136631120796665e-07, 5.10992435920343269e-07, 8.23252150894404622e-07, 1.09487973531940952e-06, 1.00000119209289551, 1.01359853488247609e-06, 6.72808539547986584e-07, 2.89314954216024489e-07, -8.74813395057572052e-08, -4.81718586797796888e-07, -9.26077120766422013e-07, -1.35643199428159278e-06, -1.55923476086172741e-06, -1.39183759984007338e-06, -9.95425466499000322e-07, -6.1246316818142077e-07, -3.51103466300628497e-07, -2.0886092499949882e-07, -1.55113838218312594e-07, 5.81719312719997106e-08, -3.27498881347310089e-08, -3.51702915679652506e-08, -3.11300709654460661e-08, 1.25131336403683235e-07, -9.04619810171425343e-08, -1.3697251688427059e-07, 1.13485256747480889e-07, 1.3870977966234932e-07, -5.93659379433120193e-08, -4.03021047645779618e-08, 7.85440192885289434e-08, 1.36351673063472845e-07, 1.9435275078194536e-07, 2.23819228040156304e-07, 1.97935378309921362e-07, 1.22572558325373393e-07, -6.83311327520641498e-08, -1.57104338427416224e-07, -2.4420833710792067e-07, -3.34030914928007405e-07, -4.10234918035712326e-07, -4.3170376784473774e-07, -3.80545714051550021e-07, -3.02184275824401993e-07, -2.78261779840249801e-07, -3.8108728972474637e-07, -6.30612817076325882e-07, -9.20885270261351252e-07, -1.00000107288360596, -8.77074796790111577e-07, -5.6586725349916378e-07, -2.49179748834649217e-07, 5.78291761144100747e-08, 4.07033240890086745e-07, 8.27501310141087743e-07, 1.2336456620687386e-06, 1.406631781719625e-06, 1.22991377793368883e-06, 8.63741320245026145e-07, 5.33485092546470696e-07, 3.18901356877177022e-07, 2.04055822905502282e-07, 1.61098043349738873e-07, 4.36568114992041956e-08, -6.15395094882842386e-08, 8.46199554871418513e-08, 4.94954299767869088e-08, -8.55423039070046798e-08, -1.4381014068476361e-07, 9.76692575704873889e-08, 1.4279432036801154e-07, 5.80462504728984641e-08, -5.01992083457025728e-08, -5.66046303163147968e-08, -7.97759796000718779e-08, -1.39867893267364707e-07, -1.98360751824111503e-07, -2.19045801941319951e-07, -1.87548735652853793e-07, -1.24855148442293284e-07, 5.714672468570825e-08, 2.01116051812277874e-07, 3.78747841978110955e-07, 5.2912230330548482e-07, 5.62871605325199198e-07, 4.77009621135948692e-07, 3.7029076338512823e-07, 3.18464486781522282e-07, 3.31558254629271687e-07, 4.14777446167136077e-07, 5.87697570608725073e-07, 8.0773008903634036e-07, 1.00000095367431641, 7.78645926402532496e-07, 4.88828789002582198e-07, 1.9401643669425539e-07, -6.83540548607197707e-08, -3.48980933040365926e-07, -6.95094684033392696e-07, -1.05183789855800569e-06, -1.22450558137643384e-06, -1.08428730527521111e-06, -7.57222210268082563e-07, -4.54107095038125408e-07, -2.59792301449124352e-07, -1.59717131964498549e-07, -1.18793849424037035e-07, -1.04130023714787967e-07, -6.38142125808371929e-08, 6.28101446409345954e-08, 3.68931303285080503e-08, -1.3586277702870575e-07, 7.45774073607208265e-08, 1.22733538887587201e-07, 5.57602426454195665e-08, -1.05769466074434604e-07, 7.23900726029569341e-08, 7.7807783327443758e-08, 1.39721777259183e-07, 2.03602411374959047e-07, 2.24237425072715268e-07, 1.75553083181512193e-07, 9.03999293200286047e-08, -7.1932404921426496e-08, -1.90240186270784761e-07, -3.76859361495007761e-07, -5.93577794916200219e-07, -7.02091540460969554e-07, -6.12663654919742839e-07, -4.1957196117436979e-07, -2.73388508276184439e-07, -2.27362747295956069e-07, -2.62456808286515297e-07, -3.51310262658444117e-07, -4.58812820625098539e-07, -1.0000004768371582, -4.51212486041185912e-07, -2.86882283262457349e-07, -8.63229985270663747e-08, 1.21726316137937829e-07, 3.55758970727038104e-07, 6.39379322819877416e-07, 9.25620611269550864e-07, 1.06231891550123692e-06, 9.47423927755153272e-07, 6.76350282446946949e-07, 4.14910829249492963e-07, 2.37597376440135122e-07, 1.44382994449188118e-07, 1.16072598643768288e-07, 1.23499845017249754e-07, -5.3611909578421546e-08, 6.16993744984029036e-08, -1.00375572742450458e-07, 7.16641750386770582e-08, 1.11632573407405289e-07, 6.27693452770472504e-08, -8.88591813463790459e-08, -6.47041602519493608e-08, 9.08133657162579766e-08, -7.10619119104194397e-08, -1.23456544542932534e-07, -1.84199478781010839e-07, -2.20204725565054105e-07, -1.93182216889908887e-07, -1.05858291021831974e-07, 1.20198109243574436e-07, 2.3967641027411446e-07, 3.83868865583281149e-07, 5.47423042007721961e-07, 6.50868344109767349e-07, 6.06593459906434873e-07, 4.43593648924434092e-07, 2.73989172683286597e-07, 1.73060726638141205e-07, 1.51850898078009777e-07, 1.82288687256004778e-07, 2.14058147207651928e-07, 1.0000002384185791, 1.54782256345242786e-07, 8.27211792397974932e-08, -1.49825268636050168e-07, -3.55412765884466353e-07, -6.32632463748450391e-07, -9.10560913780500414e-07, -1.02725425676908344e-06, -8.96610004019748885e-07, -6.33256831861217506e-07, -3.99592607891463558e-07, -2.53527929316987866e-07, -1.84297590521964594e-07, -1.71317736885612248e-07, 6.1407241958022496e-08, -7.77768889292929089e-08, -1.03173782406429382e-07, 6.15399216030709795e-08, 8.61792486261947488e-08, 4.53067912076221546e-08, -7.52501989609299926e-08, -8.854554067738718e-08, 6.45740314553222561e-08, 8.27716206686091027e-08, 1.37618840767572692e-07, 1.84214101750512782e-07, 1.98679018126313167e-07, 1.74426006083194807e-07, 1.22389096191000135e-07, -7.54193223428956117e-08, -2.41769782860501437e-07, -4.37922835772042163e-07, -6.03966100243269466e-07, -6.56100155538297258e-07, -5.73179761431674706e-07, -4.24618320948866312e-07, -2.8507997740234714e-07, -1.86992380690753635e-07, -1.47077273027207411e-07, -1.7525000828300108e-07, -2.42147194740027771e-07, -1.0000002384185791, -2.0608983675174386e-07, -9.2261359441181412e-08, 1.46847725090992753e-07, 3.21529313396240468e-07, 5.7309068779431982e-07, 8.4681840917255613e-07, 9.80068421085888986e-07, 8.66430127643980086e-07, 6.05164757416787324e-07, 3.6405918990567443e-07, 2.11340122291403532e-07, 1.37645699282984424e-07, 1.17058490900490142e-07, 1.19705205747777654e-07, -2.92139077373576583e-08, 3.42448451817745081e-08, 5.71126186343917652e-08, -1.06855168269248679e-07, -1.24988844163453905e-07, 4.4146208466600001e-08, 4.89577942630603502e-08, -6.47639737394456461e-08, -6.90911008405237226e-08, -1.33988251604932884e-07, -2.00315056986255513e-07, -2.15347057519466034e-07, -1.55499293441607733e-07, -6.41937205614340201e-08, 9.10977249191091687e-08, 2.17195051277485618e-07, 4.24940139964746777e-07, 6.58272824693995062e-07, 7.60622526740917237e-07, 6.5132070403706166e-07, 4.4260579556976154e-07, 2.75320729770101025e-07, 1.77234682041671476e-07, 1.17303635249754734e-07, 1.00000011920928955, -5.61338602267369424e-08, -1.70079104577780527e-07, -3.24894330105962581e-07, -5.32671720065991394e-07, -7.50878882627148414e-07, -8.54288884966081241e-07, -7.58641476750199217e-07, -5.39672896593401674e-07, -3.30274019688658882e-07, -1.88036636927790823e-07, -1.09245632984311669e-07, -7.70205517142130702e-08, -7.19754069677946973e-08, -7.04890794622770045e-08, 3.92583139330326958e-08, -6.46404600956884678e-08, 4.92497136406200298e-08, 8.11000617773061094e-08, -1.15593643101874477e-07, -1.34798199269425822e-07, 5.02360535392654128e-08, 3.15741139900183043e-08, 6.52579643656281405e-08, 1.08408606536158914e-07, 1.64701134508504765e-07, 2.06632677191009861e-07, 1.90303794056490005e-07, 1.0586484933128304e-07, -1.42874938546810881e-07, -2.80028672250409727e-07, -4.49383236400535679e-07, -6.41865256056917133e-07, -7.5514321906666737e-07, -6.83103849041799549e-07, -4.70052071932514082e-07, -2.5202700726367766e-07, -1.0180077225641071e-07, 6.48520810386798985e-08, 1.49418738715212385e-07, -0.999999761581420898, 2.14514926710762666e-07, 1.68394024058216019e-07, 1.43703672961237316e-07, 1.85572844202397391e-07, 3.07431633927990333e-07, 5.01702288602245972e-07, 7.05635784470359795e-07, 7.91952970757847652e-07, 6.919503903191071e-07, 4.88498528739000903e-07, 3.04150205465703038e-07, 1.86190888484816242e-07, 1.28981284319706901e-07, 1.16080848044930462e-07, 1.26441520365005999e-07, 5.30678185839406069e-08, -4.88989364555436623e-08, 1.04937903699919843e-07, -1.08105901119870396e-07, -1.32747544512312743e-07, 9.26765224562586809e-08, 8.43143652673461474e-08, -7.66144552244441002e-08, -8.30812609819986392e-08, -1.36616307599979336e-07, -1.77294694481133774e-07, -1.82794849479250843e-07, -1.53535083313727228e-07, -1.04225087227405311e-07, 8.3521072724579426e-08, 2.49716862299464992e-07, 4.52470800382798188e-07, 6.32782985121593811e-07, 6.98879659921658458e-07, 6.14162956935615512e-07, 4.42561997715529287e-07, 2.67171913037600461e-07, 1.24935780831947341e-07, 0.999999940395355225, -6.67241408791596768e-08, -9.19798850418374059e-08, -1.21056856983159378e-07, -1.76580172706053418e-07, -2.9159366476960713e-07, -4.83043777421698906e-07, -6.98279393418488326e-07, -7.98756161657365737e-07, -7.01529927482624771e-07, -4.93508196086622775e-07, -3.09287571553795715e-07, -1.99595532990315405e-07, -1.5726553215245076e-07, -1.64432933047464758e-07, 5.37733306771315256e-08, -3.21134905334474752e-08, -3.38390435672408785e-08, -2.93178175070352154e-08, 1.1930605126053706e-07, -8.61362750015359779e-08, -1.29527393255557399e-07, 1.09818799387539912e-07, 1.33625050580121751e-07, -5.70693501344976539e-08, -3.93111889707142836e-08, 6.11270110084660701e-08, 1.22029319982175366e-07, 1.85265591312600009e-07, 2.01855996806443727e-07, 1.47878211009810911e-07, 6.13516064618124801e-08, -9.97566331761845504e-08, -2.26098137545704958e-07, -4.22537056010696688e-07, -6.36308982393529732e-07, -7.27800170352566056e-07, -6.25737015980121214e-07, -4.28036628363770433e-07, -2.58610498349298723e-07, -1.42449280815526436e-07, -4.96038694564049365e-08, 1.09971352912907605e-07, -0.999999880790710449, 1.07059072718129755e-07, 9.27257488569921406e-08, 1.17438780478096305e-07, 1.83514856644251267e-07, 2.94610401851969073e-07, 4.59466690472254413e-07, 6.44905640001525171e-07, 7.40243649488547817e-07, 6.61298884097050177e-07, 4.69006494085988379e-07, 2.85963153601187514e-07, 1.69060399457521271e-07, 1.15997899285957828e-07, 1.09141780058052973e-07, 1.22903927035622473e-07, 3.97551822572950186e-08, -6.15684783156211779e-08, 8.09086984077111993e-08, 4.68202010495133436e-08, -8.13548552969223238e-08, -1.35985530391735665e-07, 9.39138402600292466e-08, 1.36447468435108021e-07, 5.52207808368621045e-08, -4.84320068494525913e-08, -5.46940803758388938e-08, -5.72449110336492595e-08, -9.82150538675341522e-08, -1.52582771306697396e-07, -1.9026965958346409e-07, -1.71173098806320922e-07, -9.36467330348023097e-08, 1.25745216905670532e-07, 2.60729080991950468e-07, 4.37488893112458754e-07, 6.32900878372311126e-07, 7.35418495878548129e-07, 6.52540165901882574e-07, 4.45385012426413596e-07, 2.47269070996480878e-07, 1.22714567396542407e-07, 6.40912105609459104e-08, 0.999999940395355225, -5.44467475549481605e-08, -5.20316163488132588e-08, -6.64959785012797511e-08, -1.32041733991172805e-07, -2.60378641314673587e-07, -4.40255263356448268e-07, -6.14859800407430157e-07, -6.83429902892385144e-07, -5.99133159084885847e-07, -4.32778819003942772e-07, -2.82271997775751515e-07, -1.87450552857626462e-07, -1.49012990391383937e-07, -1.59329019311371667e-07, -6.50424638592994597e-08, 6.01681904299766757e-08, 3.46406316964475991e-08, -1.28467021909273171e-07, 7.12861378815432545e-08, 1.16238815905944648e-07, 5.17790361698189372e-08, -1.02629236664597556e-07, 6.95092552405185415e-08, 8.42686702640094154e-08, 1.28080941408370563e-07, 1.62292124628038437e-07, 1.7156122567030252e-07, 1.47249906490287685e-07, 9.29365313595553744e-08, -1.01602189772620477e-07, -2.55430990137028857e-07, -4.48423520538199227e-07, -6.37136054137954488e-07, -7.24094945780962007e-07, -6.5012551431209431e-07, -4.73457248517661355e-07, -2.91079686576267704e-07, -1.49012564065742481e-07, -5.65777753536167438e-08, -1, 8.89811175852628367e-08, 1.31261359115342202e-07, 2.20720849597455526e-07, 3.81502417212686851e-07, 5.69399901451106416e-07, 6.57970986139844172e-07, 5.72668454879021738e-07, 3.93520053876272868e-07, 2.39556356973480433e-07, 1.50606936699659855e-07, 1.13339211793572758e-07, 1.06442122671523975e-07, 1.08153798805687984e-07, 5.91275188810413965e-08, -9.53420737914711935e-08, 6.79391263247453026e-08, 1.04840296444308478e-07, 5.76556615783374582e-08, -8.6521090736368933e-08, -6.3245650494536676e-08, 8.63429931996506639e-08, -5.30073265281316708e-08, -1.18437469609489199e-07, -1.76970260667985713e-07, -1.85290844001428923e-07, -1.34461558332077402e-07, -5.94657016961264162e-08, 1.17409975075588591e-07, 2.69819935283521772e-07, 4.86303179059177637e-07, 7.05170918990916107e-07, 7.8906782619014848e-07, 6.7326061525818659e-07, 4.59526916074537439e-07, 2.7449311801319709e-07, 1.45993894307139271e-07, 4.46637784534686944e-08, -1.26612661688341177e-07, 0.999999880790710449, -1.08135957077593048e-07, -8.23840693442434713e-08, -1.01564246790530888e-07, -1.57845533976797014e-07, -2.40140224150309223e-07, -3.51477353888185462e-07, -4.77431456147314748e-07, -5.48360617358412128e-07, -4.98722727115818998e-07, -3.5995574876324099e-07, -2.18171351207274711e-07, -1.22163584137524595e-07, -7.78280835334044241e-08, -9.77422942582961696e-08, -1.09606098419590126e-07, 5.88343631591214944e-08, -7.56875095930809039e-08, -9.93057156506438332e-08, 5.76420760012297251e-08, 8.11258260569047707e-08, 4.43130900862342969e-08, -5.47814735796237073e-08, -5.24686356584425084e-08, 5.54668204699737544e-08, 9.11023008143274637e-08, 1.48179353232080757e-07, 1.86269275559425296e-07, 1.589367144561038e-07, 7.44220258752648078e-08, -1.42076828524295706e-07, -2.92860562467467389e-07, -5.09027984207932604e-07, -7.52702646877878578e-07, -8.79396225172968116e-07, -7.78760750108631328e-07, -5.28316945747064892e-07, -2.84331008515437134e-07, -1.16837142627446156e-07, 6.68477895260366495e-08, 1.56229589265421964e-07, -0.999999761581420898, 2.33955788075945748e-07, 1.70127094634153764e-07, 1.08803185128181212e-07, 1.0574812137065237e-07, 1.72503092699116678e-07, 2.87878805238506175e-07, 3.96813703673615237e-07, 4.29168636628673994e-07, 3.68203643574815942e-07, 2.7115919465359184e-07, 1.96852553813187114e-07, 1.63196446578695031e-07, 1.69777706560125807e-07, 3.34303997817642085e-08, 5.46816814050998801e-08, -1.02224561260300106e-07, -1.18422647688021243e-07, 4.23973531837873452e-08, 4.46109247320691793e-08, -6.48382325607599341e-08, -8.10136313589282508e-08, -1.2060081644449383e-07, -1.47840239606011892e-07, -1.57603039951936807e-07, -1.39387367426024866e-07, -8.55388009313173825e-08, 1.19144509369562002e-07, 2.69856627710396424e-07, 4.54337168775964528e-07, 6.33871763966453727e-07, 7.14962197889690287e-07, 6.39145866898616077e-07, 4.61651069372237544e-07, 2.74505083552867291e-07, 1.18280226502065489e-07, -7.59069962441571988e-08, -1.02183562944446749e-07, 0.999999880790710449, -1.04878623119475378e-07, -1.20262825475947466e-07, -1.32507167904805101e-07, -1.4851758578515728e-07, -2.0002462974844093e-07, -3.15120843197291833e-07, -4.65910432012606179e-07, -5.46029468750930391e-07, -4.80362928101385478e-07, -3.28023560314250062e-07, -1.94021680499645299e-07, -1.19177926194424799e-07, -9.54733607727575873e-08, -1.04705080161693331e-07, -1.23151167485957558e-07, 4.05872064845880232e-08, -6.27400638109065767e-08, 4.74483101697842358e-08, 7.7312627411174617e-08, -1.10553074250674399e-07, -1.27838717389749945e-07, 4.87223843492756714e-08, 2.84859993371355813e-08, 1.11784189016361779e-07, 1.68306073078383633e-07, 1.74956269916037854e-07, 1.28179379998982768e-07, 6.3933526917026029e-08, -8.69455263341478712e-08, -2.2260717003064201e-07, -4.16299087646621047e-07, -6.11135533290507738e-07, -6.83096118336834479e-07, -5.75424166981974849e-07, -3.81235679469682509e-07, -2.12887584893906023e-07, -8.85079174395286827e-08, 1.80301626073742227e-07, 3.30207512888591737e-07, -0.999999582767486572, 3.24011864449857967e-07, 2.19099860032656579e-07, 1.68052096682913543e-07, 1.86231801535541308e-07, 2.54546108635622659e-07, 3.59504582547742757e-07, 4.74501518965553259e-07, 5.3365494068202679e-07, 4.84370843878423329e-07, 3.60241529051563703e-07, 2.39506618981977226e-07, 1.67218530577883939e-07, 1.52227258354287187e-07, 5.35404964807639772e-08, -4.73984584914433071e-08, 9.93214541722409194e-08, -1.03491167635638703e-07, -1.25620459812125773e-07, 9.09959823047756799e-08, 8.17669416619537515e-08, -7.64094210126131657e-08, -5.05592474553395732e-08, -8.01751696144492598e-08, -1.29548553218228335e-07, -1.63852448054058186e-07, -1.4145062721127033e-07, -7.04836295994937245e-08, 9.19561244927535881e-08, 1.88381321208908048e-07, 3.24197884538079961e-07, 4.83501821690879297e-07, 5.75523870338656707e-07, 5.1866697958757868e-07, 3.52652307356038364e-07, 1.82916622293305409e-07, 6.97423772066940728e-08, 0.999999940395355225, -9.15387161626313173e-08, -9.43127034247481788e-08, -8.88172593249692e-08, -1.23603712154363166e-07, -2.2706946367634373e-07, -3.9447269273296115e-07, -5.64116646728507476e-07, -6.27967153832287295e-07, -5.42171221695753047e-07, -3.85237967748253141e-07, -2.5362672317896795e-07, -1.7970558019442251e-07, -1.60203555310545198e-07, 5.24522754119516321e-08, -2.76305751611971573e-08, -3.2053016241206933e-08, -2.73487472668421105e-08, 1.12912040606261144e-07, -8.29612076813646127e-08, -1.22789856504823547e-07, 1.07489604772581515e-07, 1.30118948504787113e-07, -5.5170250590208525e-08, -3.90170349362506386e-08, 6.80093563687478309e-08, 1.04151567370536213e-07, 1.30012764998355124e-07, 1.38780933411908336e-07, 1.23079260561098636e-07, 8.08715867606224492e-08, -7.31476035298328497e-08, -1.85098897986790689e-07, -3.16109861842051032e-07, -4.3437776753307844e-07, -4.80440519368130481e-07, -4.27968444682846894e-07, -3.19090389666598639e-07, -2.04583372465094726e-07, -9.78984502353341668e-08, -0.999999880790710449, 1.22677406011462153e-07, 1.65239541161099623e-07, 2.47976686296169646e-07, 3.94804658299108269e-07, 5.73402701320446795e-07, 6.65620916606712854e-07, 5.88311195315327495e-07, 4.09938991197122959e-07, 2.51009595331197488e-07, 1.58055996735129156e-07, 1.21223834526063001e-07, 1.22381834444240667e-07, 3.77101443405081227e-08, -5.60778872227274405e-08, 9.87139827657301794e-08, -5.67485969327208295e-08, -1.14085516145223664e-07, 9.84288917038611544e-08, 1.39328690806905797e-07, -3.21529753932736639e-08, -3.70745816269391071e-08, -9.71307443364821665e-08, -1.47016024243384891e-07, -1.58573897124369978e-07, -1.21390101526230865e-07, -6.2731992045428342e-08, 6.7300980788331799e-08, 1.75741362795633904e-07, 3.35384498839630396e-07, 5.03241267324483488e-07, 5.69796554827917134e-07, 4.76888203593262006e-07, 3.04273328310955549e-07, 1.59854707248996419e-07, 6.85838941194560903e-08, -9.1975358884610614e-08, -1.94333040326455375e-07, 0.999999761581420898, -2.21538002165289072e-07, -1.59384242692794942e-07, -1.3369708540267311e-07, -1.65193625889514806e-07, -2.45222508965525776e-07, -3.63828718263903284e-07, -4.91798232360451948e-07, -5.57007695078937104e-07, -5.03364958603924606e-07, -3.68407654605107382e-07, -2.37867169516903232e-07, -1.61413652222108794e-07, -1.46711471415983397e-07, -6.09161929787660483e-08, 5.81596886206625641e-08, 3.18928989884170733e-08, -1.22500168231454154e-07, 6.91648409656409058e-08, 1.11850596340445918e-07, 4.99925185692973173e-08, -9.83733130510699993e-08, 6.63827819380458095e-08, 8.69349605636671185e-08, 1.290490558858437e-07, 1.52781979068095097e-07, 1.30379092411203601e-07, 6.94512181098616566e-08, -7.70638308722482179e-08, -1.6140528202868154e-07, -2.70953165681930841e-07, -3.95275947084883228e-07, -4.70411322339714388e-07, -4.33332843385869637e-07, -3.04875300116691506e-07, -1.58456884946645005e-07, 9.16253384275478311e-08, 1.36566669084459136e-07, -0.999999821186065674, 1.78202583356323885e-07, 1.49510498204108444e-07, 1.24325410411074699e-07, 1.4682113658182061e-07, 2.41070267748000333e-07, 4.00615277840188355e-07, 5.62843297302606516e-07, 6.21593414962262614e-07, 5.36348125024233013e-07, 3.83533205194908078e-07, 2.52388787203017273e-07, 1.71371780766094162e-07, 1.39416997058106062e-07, 5.79750931706257688e-08, -9.16851945476082619e-08, 6.5084059031050856e-08, 9.99418503511151357e-08, 5.46657048516863142e-08, -8.30693593911746575e-08, -6.04704624151963799e-08, 8.27681034820670902e-08, -4.87913354163538315e-08, -8.14012537375674583e-08, -1.11790456003291183e-07, -1.24977006521476142e-07, -1.10102845951587369e-07, -7.22918969131569611e-08, 1.41531529607163975e-07, 2.52622328389406903e-07, 3.50574936192060704e-07, 3.80358983420592267e-07, 3.25056561223391327e-07, 2.29760161118974793e-07, 1.38035673558078997e-07, 5.33970236915592977e-08, -1.233669593148079e-07, -1.90632178487248893e-07, 0.999999761581420898, -1.95503972122423875e-07, -1.72856331914772454e-07, -1.6565186911066121e-07, -1.86393521062200307e-07, -2.5742070874912315e-07, -4.01702465069320169e-07, -5.85029283683979884e-07, -6.81539802371844416e-07, -6.00789974214421818e-07, -4.145792900089873e-07, -2.50740470164600993e-07, -1.56505095105785585e-07, -1.1773335018006037e-07, -1.12206684832472092e-07, 5.89284425700498105e-08, -7.27060722738315235e-08, -9.45682856468010868e-08, 5.54958923260073789e-08, 7.69143539969263657e-08, 4.11655776133557083e-08, -5.32956505594484042e-08, -5.06939841216080822e-08, 8.85632260860802489e-08, 1.2519917902409361e-07, 1.34538510110360221e-07, 1.05591681176520069e-07, 5.61167965429376636e-08, -1.25813912177363818e-07, -2.39548484159968211e-07, -3.64142039188664057e-07, -4.20094636410794919e-07, -3.57801354766706936e-07, -2.29007426355565258e-07, -1.12808272945130739e-07, 1.21937858921228326e-07, 2.09544054996513296e-07, -0.999999761581420898, 2.13979021168597683e-07, 1.54869837842852576e-07, 1.38244303116152878e-07, 1.82462997599941446e-07, 2.77163934470081585e-07, 4.09336536222326686e-07, 5.46506555565429153e-07, 6.1358247194220894e-07, 5.52819358290435048e-07, 4.03697896445009974e-07, 2.55916148717005854e-07, 1.61530422815303609e-07, 1.28944606103686965e-07, 3.54376297195813095e-08, 5.48084635454415547e-08, -9.76734781943378039e-08, -1.12565288645782857e-07, 4.12068636990170489e-08, 4.18506651556072029e-08, -6.29503631444094935e-08, -7.19371158197645855e-08, -1.10358897131845879e-07, -1.29947594018631207e-07, -1.11944764569216204e-07, -6.50970619631152658e-08, 1.087296510604574e-07, 1.84794103574859037e-07, 2.67841016921011033e-07, 3.1585994975102949e-07, 2.88136561721330509e-07, 1.99981471382670861e-07, 1.00194355923122203e-07, -1.01595595936032623e-07, -1.61008827603836835e-07, 0.999999761581420898, -2.18794440343117458e-07, -1.80695437279609905e-07, -1.4247666513256263e-07, -1.56953291252648341e-07, -2.55065316423497279e-07, -4.32980300502094906e-07, -6.20149762653454673e-07, -6.9168095251370687e-07, -5.95984033679997083e-07, -4.20124337097149692e-07, -2.69505193273289478e-07, -1.7632601156947203e-07, -1.3393977837949933e-07, 4.1417035134827529e-08, -6.33671959349157987e-08, 4.72931418471489451e-08, 7.60017115908340202e-08, -1.05311670495211729e-07, -1.21259361662851006e-07, 4.80018975679286086e-08, 2.70976219240992577e-08, 7.76506539068577695e-08, 1.06601191873778589e-07, 1.20399107572666253e-07, 1.06368972296877473e-07, 7.17442603104245791e-08, -8.20337646700863843e-08, -1.5082470383731561e-07, -2.08456768291398475e-07, -2.25174858314858284e-07, -1.92635027929100033e-07, -1.34413070895789133e-07, -7.20847452839734615e-08, 6.87182932779251132e-08, 1.46135604950359266e-07, 2.00004748762694362e-07, -0.999999821186065674, 1.85182500445080223e-07, 1.69740275168805965e-07, 1.78249663917995349e-07, 2.15053233887374518e-07, 2.98496445338969352e-07, 4.51800275413916097e-07, 6.41968995296338107e-07, 7.42454119517788058e-07, 6.59223474031023216e-07, 4.61774789073388092e-07, 2.81421250747371232e-07, 1.72566004152940877e-07, 1.27478429590155429e-07, 5.38055076049204217e-08, -4.89402971481922577e-08, 9.60882360345749476e-08, -9.83796084597088338e-08, -1.18797657933100709e-07, 8.96257645877085452e-08, 8.00615964635653654e-08, -7.46080814906235901e-08, -8.75183729931450216e-08, -1.2383650016545289e-07, -1.34064904955266684e-07, -1.07976724450509209e-07, 9.29647967495839112e-08, 1.86306507998779125e-07, 2.85585656456532888e-07, 3.2609443678666139e-07, 2.71749769353846204e-07, 1.66201331808224495e-07, 6.80107135053731326e-08, -1.07015800665521965e-07, -2.38776067362778122e-07, -3.89354909202666022e-07, 0.999999523162841797, -4.08240566684980877e-07, -2.83385162447302719e-07, -2.01288642642794002e-07, -2.03544402666011592e-07, -2.8109471372772532e-07, -4.1420011598347628e-07, -5.56746556412690552e-07, -6.19962293058051728e-07, -5.48281661849614466e-07, -3.9417022890120279e-07, -2.50125168577142176e-07, -1.59425809442836908e-07, -1.2271725324808358e-07, 5.17338278882562008e-08, -2.47349856152823122e-08, 8.9281392945395055e-08, -9.05517723026605381e-08, -1.23980015587221715e-07, 9.68984039673159714e-08, 1.13972660642502888e-07, -7.39010204142687144e-08, 6.89672958742448827e-08, 1.05961916574415227e-07, 1.25464197253677412e-07, 1.07806741311833321e-07, 6.0576276439405774e-08, -4.99056831415600755e-08, -1.07959714057415113e-07, -1.80068028043933737e-07, -2.61653241295789485e-07, -3.10834508354673744e-07, -2.84650724324819748e-07, -1.9741472101486579e-07, -9.93680018268605636e-08, 6.33668619798299915e-08, -0.999999940395355225, 1.11068267472091975e-07, 1.16100267177898786e-07, 1.14764368674968864e-07, 1.42042139827935898e-07, 2.27090239945937356e-07, 3.74942487724183593e-07, 5.36525362804241013e-07, 6.07504716754192486e-07, 5.32210549408773659e-07, 3.76746839947372791e-07, 2.37869812735880259e-07, 1.53304199557169341e-07, 1.2042985986226995e-07, -4.94910885606714146e-08, 9.33864754415481002e-08, -5.4815725292201023e-08, -1.08325338032955187e-07, 9.628151786955641e-08, 1.3552933353366825e-07, -2.93335293832797106e-08, -3.51284121791195503e-08, -7.36650491717227851e-08, -9.87859749557173927e-08, -1.09284776783624693e-07, -9.69091402680533065e-08, -6.74484823548482382e-08, 9.37331563477528107e-08, 1.72863110492471606e-07, 2.39797998347057728e-07, 2.60120970096977544e-07, 2.26063505692764011e-07, 1.69370366620569257e-07, 1.19515604524167429e-07, 7.90421310625788465e-08, 1, -5.01937371666372201e-08, -1.21638521477507311e-07, -2.26768591460313473e-07, -3.79558201757390634e-07, -5.45941531981952721e-07, -6.24058088760648388e-07, -5.49886976841662545e-07, -3.88517776173102902e-07, -2.43426001134139369e-07, -1.54320673573238309e-07, -1.16156464002870052e-07, -5.74862575319912139e-08, 6.60132144503222662e-08, -1.00076420039840741e-07, 7.42084580451773945e-08, 1.11834502547480952e-07, 5.08964284051671711e-08, -9.31757213606942969e-08, 6.21949567403135006e-08, 7.79746116563728719e-08, 1.14223865921303513e-07, 1.24578335203295865e-07, 9.70595053217948589e-08, -8.89622953081925516e-08, -1.75608960262252367e-07, -2.72689675284709665e-07, -3.18472814342385391e-07, -2.74102774255879922e-07, -1.80736194010933104e-07, -1.05263112004649884e-07, -7.39658787551888963e-08, -7.82689326683794206e-08, -9.67031539289564535e-08, -1.05810798345373769e-07, -1.00000011920928955, -6.7025773375917197e-08, 9.66712079275566794e-08, 1.99558712665748317e-07, 3.38963019430593704e-07, 4.87538670768117299e-07, 5.61180286240414716e-07, 5.00304906836390728e-07, 3.55942233909445349e-07, 2.22432561258756323e-07, 1.42498052468909009e-07, 1.13909273125045729e-07, 5.49812000372185139e-08, -8.88288482769894472e-08, 6.30018632818973856e-08, 9.63968744827070623e-08, 5.3288211177004996e-08, -7.78054030092789617e-08, -5.65481670378176204e-08, 7.846568905733875e-08, -6.52456080274532724e-08, -9.66733608720460325e-08, -1.15421322277597938e-07, -1.02417786251862708e-07, -5.94308247059416317e-08, 5.7871215375371321e-08, 1.26363929098260996e-07, 2.10075441486878844e-07, 2.98692441447201418e-07, 3.48327347410304355e-07, 3.22828668686270248e-07, 2.44008163008402335e-07, 1.63176096634742862e-07, 1.12532994478442561e-07, 1.04705335957078205e-07, 1.41209639537009934e-07, 1.9763700720432098e-07, 1.0000002384185791, 1.89045138654364564e-07, 1.19050433511347364e-07, -1.59432872237630363e-07, -2.96709089298019535e-07, -4.27118834522843827e-07, -4.81351094094861764e-07, -4.2440288439138385e-07, -3.06138645100872964e-07, -1.9821598584712774e-07, -1.31317364093774813e-07, -1.07347254640899337e-07, 5.80117784920730628e-08, -6.7332571518363693e-08, -8.57596376135916216e-08, 5.93092366329983633e-08, 7.78889130970128463e-08, -4.73707189030392328e-08, -4.39229808080199291e-08, 7.7859979796812695e-08, 1.06618472273112275e-07, 1.15749216433869151e-07, 9.7718370284383127e-08, -1.22504189903338556e-07, -2.27022979970570304e-07, -3.27269674471608596e-07, -3.65570656413183315e-07, -3.17081060074997367e-07, -2.28990870709822048e-07, -1.59999984816749929e-07, -1.288018012246539e-07, -1.32388734641608607e-07, -1.67443928944521758e-07, -2.17175767147637089e-07, -1.0000002384185791, -1.91605337818145927e-07, -1.08840460200099187e-07, 1.33110276578918274e-07, 2.58880049841536675e-07, 3.95305903566622874e-07, 4.60434023352718214e-07, 4.05248698598370538e-07, 2.84724563925919938e-07, 1.8138487689611793e-07, 1.24819337088410975e-07, 1.09145446458569495e-07, 3.69518176057681558e-08, 5.38665716476316447e-08, -9.43185867186002724e-08, -1.08151759548036352e-07, 4.01657906934360653e-08, 4.03653999114794715e-08, -5.7910714446052225e-08, -7.27239850562000356e-08, -1.05280726359069376e-07, -1.15613559614757833e-07, -9.11344173459838203e-08, 1.07942852878295525e-07, 1.96284076992014889e-07, 2.92694267045590095e-07, 3.408094357837399e-07, 3.03519925637374399e-07, 2.17156170378984825e-07, 1.4406340653749794e-07, 1.11751582210217748e-07, 1.1826905677025934e-07, 1.54159721432733932e-07, 2.03862796865905693e-07, 1.0000002384185791, 2.14118017538567074e-07, 1.41017196142456669e-07, -5.53412498049965507e-08, -1.59054437176564534e-07, -2.76184465519691003e-07, -3.93794607589370571e-07, -4.53513422371543129e-07, -4.09246837307364331e-07, -2.97079907340958016e-07, -1.90774514408076357e-07, -1.28771873164623685e-07, 1.01657384732334322e-08, 4.89941314185671217e-08, -1.08245188812361448e-07, -1.19015197697081021e-07, 4.81185544742857019e-08, 2.84150072360489503e-08, 6.11757968727033585e-08, 9.31829902128811227e-08, 1.11395962676397176e-07, 9.87430439636227675e-08, -9.20659388725653116e-08, -1.63779077411163598e-07, -2.39230985243921168e-07, -2.78755067029123893e-07, -2.53770195968172629e-07, -1.89315471743611852e-07, -1.34503849835709843e-07, -1.18691431794104574e-07, -1.50211945992850815e-07, -2.19781171040267509e-07, -2.87828385125976638e-07, -1.00000035762786865, -2.41625969010783592e-07, -1.55999501316728129e-07, -7.14509553745301673e-08, 1.41202619374780625e-07, 2.91935663199183182e-07, 4.35782965269027045e-07, 4.94335040457372088e-07, 4.31714056503551546e-07, 3.07046747138883802e-07, 1.97496504483751778e-07, 1.30057316027887282e-07, 1.01378994088463514e-07, 5.5841510970822128e-08, -4.8120636364501479e-08, 9.37944690804215497e-08, -9.43429654398642015e-08, -1.13702739668042341e-07, 8.67201350729374099e-08, 7.73934800690767588e-08, -7.1144910407383577e-08, -7.20510016094522143e-08, -9.5328317684106878e-08, -1.03664589801155671e-07, -8.90631213223969098e-08, 6.90690100668689411e-08, 1.26110279552449356e-07, 1.78968690534020425e-07, 2.02477124844335776e-07, 1.86845696248383319e-07, 1.54979375110997353e-07, 1.36752149160201952e-07, 1.50031212342582876e-07, 2.11053119869575312e-07, 3.34922475531129749e-07, 4.91483149289706489e-07, 1.00000059604644775, 4.95898177632625448e-07, 3.14143875357331126e-07, 1.33335930740940967e-07, -1.46487607821654819e-07, -3.02099010696110781e-07, -4.62917228105652612e-07, -5.4437970220533316e-07, -4.85935231608891627e-07, -3.42410402254245128e-07, -2.10378829024193692e-07, -1.30708784240596287e-07, -9.90799051692192734e-08, -1.62159476957413062e-08, 8.66114362452208297e-08, -8.69450005325234088e-08, -1.18688419092904951e-07, 9.34071024971672159e-08, 1.09722741115092504e-07, -7.04040630239433085e-08, 6.22891889179300051e-08, 9.35454096406829194e-08, 1.03391840866606799e-07, 8.38357863131022896e-08, -6.73295161845999246e-08, -1.36313943244203983e-07, -2.09590695021688589e-07, -2.42242890635679942e-07, -2.11367407132456719e-07, -1.54613076119858306e-07, -1.23657244444075332e-07, -1.35743846385594225e-07, -1.83729895297801704e-07, -2.54719537906566984e-07, -3.25765654451970477e-07, -1.00000035762786865, -3.18418159395150724e-07, -2.23674362587189535e-07, -1.0692080110175084e-07, 1.46367838738115097e-07, 2.91368252192114596e-07, 4.26119186158757657e-07, 4.8530864660278894e-07, 4.30589523148228182e-07, 3.09504400775040267e-07, 1.96238374883250799e-07, 1.23248625527594413e-07, 9.12192135160694306e-08, -4.58896671773345588e-08, 9.04762060827124515e-08, -5.26270191869571136e-08, -1.03600036993611866e-07, 9.24356342579812917e-08, 1.29825153294405027e-07, -2.83059122807571839e-08, -3.31066480896424764e-08, -9.74916076756926486e-08, -1.15180071702525311e-07, -9.99707552296058566e-08, 7.70591839227563469e-08, 1.300965948303201e-07, 1.8930232670300029e-07, 2.27601717028846906e-07, 2.16517889839451527e-07, 1.6730439256207319e-07, 1.22016359682675102e-07, 1.16782416625937913e-07, 1.71177291008461907e-07, 2.84544341866421746e-07, 4.08324069667287404e-07, 1.0000004768371582, 3.69292592949932441e-07, 2.29088954029066372e-07, 1.00180905349134264e-07, -1.27531706084482721e-07, -2.71520463002161705e-07, -4.16825002957921242e-07, -4.84509826037538005e-07, -4.27884515374898911e-07, -3.01947608249975019e-07, -1.89830743124730361e-07, -1.229395678592482e-07, -9.61406385613372549e-08, -5.29312202957044065e-08, 6.4083934603331727e-08, -9.57793915290494624e-08, 7.09967338252681657e-08, 1.06661140364394669e-07, 4.80193023122410523e-08, -8.95392489042023954e-08, 6.09538304274792608e-08, 6.42751629698068427e-08, 8.62125943967839703e-08, 9.43492182159388904e-08, 8.34461388876661658e-08, -7.04774336668378965e-08, -1.36577568810025696e-07, -1.94290237232053187e-07, -2.13214150335261365e-07, -1.88644122545156279e-07, -1.51433070527673408e-07, -1.29561911421660625e-07, -1.30126863950863481e-07, -1.56201764411889599e-07, -2.15410636883461848e-07, -2.97877647881250596e-07, -1.00000035762786865, -3.15440331632999005e-07, -2.10798944522139209e-07, -8.90270470677023695e-08, 1.42592568863619817e-07, 2.74317784487720928e-07, 4.02823047807032708e-07, 4.6311828327816329e-07, 4.1206851619790541e-07, 2.93815702434585546e-07, 1.83313574098065146e-07, 1.14224071978696884e-07, 8.66056169002149545e-08, 5.35173043658687675e-08, -8.51478958452389634e-08, 6.00423817331829923e-08, 9.15037574600319203e-08, 4.99822085942014382e-08, -7.50112008063297253e-08, -5.39829088097576459e-08, 7.5853051839658292e-08, -9.80256444904625823e-08, -1.08332415038603358e-07, -8.55214992157016241e-08, 4.92953127206874342e-08, 9.79066854256416264e-08, 1.55881835439686256e-07, 1.88146699997560063e-07, 1.68562308999753441e-07, 1.2152588624303462e-07, 9.34464310375915375e-08, 1.08967341816423868e-07, 1.70716091929534741e-07, 2.67313794211077038e-07, 3.60610357574842055e-07, 1.00000035762786865, 3.23736770724281087e-07, 2.08904410214927339e-07, 9.39553714829344244e-08, -1.34360718107018329e-07, -2.80148242381983437e-07, -4.2472927930248261e-07, -4.90745037495798897e-07, -4.33455909387703286e-07, -3.07059224269323749e-07, -1.9250853711128002e-07, -1.20657006164037739e-07, -8.77859775982869905e-08, -6.19828028902702499e-08, -7.83857245778563083e-08, 6.00750240664638113e-08, 7.58974891823527287e-08, -4.53763000507478864e-08, -4.16117451607078692e-08, 8.5176573350054241e-08, 1.02093473230979725e-07, 9.45604128332888649e-08, -5.56282770958205219e-08, -9.92307178648843546e-08, -1.3999583359236567e-07, -1.62125488145647978e-07, -1.55195294837540132e-07, -1.31134896719231619e-07, -1.13232069054447493e-07, -1.20513149681755749e-07, -1.68234663533439743e-07, -2.64625441559473984e-07, -3.82045982405543327e-07, -1.0000004768371582, -3.8666880186610797e-07, -2.52838162850821391e-07, -1.10289725796519633e-07, 1.39566736834240146e-07, 2.76765632634123904e-07, 4.11104963404795853e-07, 4.75425082413494238e-07, 4.23701607132898062e-07, 3.01655660450705909e-07, 1.87822664088344027e-07, 1.16210664202753833e-07, 8.45045491359996959e-08, 3.61236338619619346e-08, 5.2482853618585068e-08, -9.04250683220197971e-08, -1.03178805943571206e-07, 3.89354362084759487e-08, 3.7922021078884427e-08, -5.45222320624816348e-08, -5.95756226573485037e-08, -8.17487091353541473e-08, -8.71292868964701483e-08, -7.05131171230277687e-08, 4.85449191955922288e-08, 9.74760823169162904e-08, 1.47993631571807782e-07, 1.71019067352062848e-07, 1.52104504991257272e-07, 1.1649657949419634e-07, 9.96543789710813144e-08, 1.17221979678561183e-07, 1.71621792333098711e-07, 2.58601261293733842e-07, 3.48463032651125104e-07, 1.00000035762786865, 3.24358069292429718e-07, 2.15594980090827448e-07, 1.0331737598789914e-07, -1.24872542528464692e-07, -2.67002349119138671e-07, -4.02831943802084425e-07, -4.61279711316819885e-07, -4.04787130037220777e-07, -2.8558505960063485e-07, -1.7828487841597962e-07, -1.11625070076115662e-07, -8.24925123765751778e-08, 9.88722170802702749e-09, 4.74611958622972452e-08, -1.03760726233304013e-07, -1.13521721800680098e-07, 4.73953001289828535e-08, 2.74079994255771453e-08, 8.1902754800466937e-08, 9.48251184240689327e-08, 8.28030408683844144e-08, -8.83327544443091028e-08, -1.27411610151284549e-07, -1.47345517120811564e-07, -1.36905129011211102e-07, -1.092764634336163e-07, -8.87224942403008754e-08, -9.21063687542300613e-08, -1.2932308379731694e-07, -2.04822796945336449e-07, -2.96788130071945488e-07, -1.00000035762786865, -2.92844248406254337e-07, -1.80369610802699754e-07, -6.38937720509602514e-08, 1.41995414537632314e-07, 2.70152867187789525e-07, 4.05585950602471712e-07, 4.74791050919520785e-07, 4.2550738044155878e-07, 3.03382648780825548e-07, 1.89606709000145202e-07, 1.19539635079490836e-07, 5.19846281576974434e-08, -4.75832280244503636e-08, 9.07266723970678868e-08, -9.03023433806993125e-08, -1.0838761710374456e-07, 8.49631192068045493e-08, 7.5627724527294049e-08, -6.83081609054170258e-08, -8.50708801181099261e-08, -9.51192120624000381e-08, -7.92033105767586676e-08, 4.9858623896170684e-08, 1.01455292167429434e-07, 1.56418735741681303e-07, 1.8187375872003031e-07, 1.59856426762416959e-07, 1.15273657286252273e-07, 8.34108320191262465e-08, 7.69570434044908325e-08, 9.2470301638059027e-08, 1.21199519753645291e-07, 1.49264963056339184e-07, 1.00000011920928955, 1.40198210374364862e-07, 9.60709343189591891e-08, -1.43919095307865064e-07, -2.59952855685696704e-07, -3.68818831475437037e-07, -4.13751763517211657e-07, -3.63880445775066619e-07, -2.6139190367757692e-07, -1.69008345096699486e-07, -1.12577360766863421e-07, -1.63667817076884603e-08, 8.32407849316041393e-08, -8.36426181649585487e-08, -1.13551287483915075e-07, 9.09776858293298574e-08, 1.06739271643618849e-07, -6.66175452579409466e-08, 7.890800901577677e-08, 9.201200867892112e-08, 8.27232327083038399e-08, -5.27617416423709074e-08, -8.88572131430009904e-08, -1.25176285337147419e-07, -1.47088016433372104e-07, -1.39661096909549087e-07, -1.10308000955683383e-07, -8.28394988161562651e-08, -7.78449802396607993e-08, -1.08972947998609015e-07, -1.79807955191790825e-07, -2.61192610651050927e-07, -1.0000002384185791, -2.33241010505480517e-07, -1.37546592782200605e-07, 1.16459609955654741e-07, 2.41369207287789322e-07, 3.72747109622650896e-07, 4.34674660709788441e-07, 3.82854778990804334e-07, 2.67965504008316202e-07, 1.66608288054703735e-07, 1.07918211256219365e-07, -4.62617819607658021e-08, 8.72756444891820138e-08, -5.08956858880083018e-08, -9.93943487515025481e-08, 8.9187615515129437e-08, 1.25028833508622483e-07, -2.70012385783502395e-08, -3.06755438828076876e-08, -1.08714687030442292e-07, -1.17252128006839484e-07, 7.71040120639554516e-08, 1.18207957200411329e-07, 1.30592027858256188e-07, 1.12127800377948006e-07, 8.86477096173621248e-08, 8.17266609942635114e-08, 9.34214625658569275e-08, 1.21071835224029201e-07, 1.67650483717807219e-07, 2.29175839194795117e-07, 1.0000002384185791, 2.46794598979249713e-07, 1.60718627739697695e-07, 5.40194555753714667e-08, -1.47335100564305321e-07, -2.60016832953624544e-07, -3.74530117142057861e-07, -4.33119794251979329e-07, -3.90543590356173809e-07, -2.82166524812055286e-07, -1.77970761683354795e-07, -1.11906160782382358e-07, 6.19801880930026527e-08, -9.27615175783103041e-08, 6.76496512141966377e-08, 1.01760392112737463e-07, 4.51816895008505526e-08, -8.63633431436028332e-08, 6.16365980476984987e-08, 7.10033845052748802e-08, 8.61989732925394492e-08, 7.3530991073766927e-08, -8.76871553145974758e-08, -1.13229710052564769e-07, -1.07910125279886415e-07, -7.9154794718760968e-08, -5.90826552127055038e-08, -7.2328440126057103e-08, -1.25259191463555908e-07, -2.05903148753350251e-07, -2.76676956900701043e-07, -1.0000002384185791, -2.41211637330707163e-07, -1.62469916631380329e-07, -7.90520644500247727e-08, 1.31566253003256861e-07, 2.72159923042636365e-07, 4.02347382078005467e-07, 4.53291534086019965e-07, 3.93978041302034399e-07, 2.7756246367971471e-07, 1.73355743982028798e-07, 1.05691782437133952e-07, 7.08040275299026689e-08, -7.19313248964681407e-08, 6.26007690129881667e-08, 8.98516887559708266e-08, 4.79751598447819561e-08, -7.35876426460890798e-08, -5.25881880264478241e-08, 7.46812673924068804e-08, -1.10661403596168384e-07, -1.01189208123741992e-07, 7.58566400804738805e-08, 1.02716313676864957e-07, 1.12347208869323367e-07, 1.07675781180205377e-07, 9.75052429907918849e-08, 8.84354918184726557e-08, 8.85115056803442712e-08, 1.13374319710146665e-07, 1.79551733481275733e-07, 2.70778770072865882e-07, 1.00000035762786865, 2.65191772541584214e-07, 1.54175253896937647e-07, 5.01247860995590599e-08, -1.17800603050000063e-07, -2.31624809998720593e-07, -3.57374460691062268e-07, -4.22320141524323844e-07, -3.76258128653716994e-07, -2.64293646523583448e-07, -1.6348762699180952e-07, -1.04610485607281589e-07, -5.93244955382488115e-08, -7.53853512946989213e-08, 5.60851098896364419e-08, 7.06741190015236498e-08, -4.5298271800220391e-08, -4.06324716095696203e-08, 1.01892894122102007e-07, 1.11898700083656877e-07, -9.92715882830452756e-08, -1.58359981128342042e-07, -1.82138919058161264e-07, -1.51052205410451279e-07, -9.91989281828864478e-08, -6.81350655895585078e-08, -6.42378097381879343e-08, -7.23598745366871299e-08, -7.99489399128106015e-08, -8.74748948831438611e-08, -1.00000011920928955, -9.96419089460687246e-08, -7.34098577481745451e-08, 5.07613364675307821e-08, 1.29371457546767488e-07, 2.1645269043801818e-07, 2.99731595987395849e-07, 3.39255251446957118e-07, 3.05032727965226513e-07, 2.22616421297061606e-07, 1.42664902114120196e-07, 9.22224288046891161e-08, 3.60826710732453648e-08, 5.36410098561646009e-08, -7.7454309632685181e-08, -8.30014599273454223e-08, 5.64100268718448206e-08, -1.08630580086810369e-07, -9.82452448283765989e-08, 7.24448057098925347e-08, 1.05516363646529499e-07, 1.31917715862073237e-07, 1.31038731865373848e-07, 1.00080903564503387e-07, 6.24234175461424456e-08, 6.22127274141348607e-08, 1.07227855039582209e-07, 1.47081010481997509e-07, 1.00000011920928955, 1.00499079280780279e-07, 5.34743378466373542e-08, -1.14841895992867649e-07, -2.28742706553930475e-07, -3.41269071668648394e-07, -3.85356571541706217e-07, -3.32787408297008369e-07, -2.3373121393888141e-07, -1.49545329009015404e-07, -9.87233264027054247e-08, 1.01520889472794806e-08, 4.70365186799881485e-08, -9.83207684157605399e-08, -1.07488915546127828e-07, 4.58556179694369348e-08, 2.47394016383850612e-08, 9.22811764780817612e-08, 1.01585236222945241e-07, -8.9956358806375647e-08, -1.2746761512971716e-07, -1.34785565819584008e-07, -1.15596286320851505e-07, -9.35640542820692644e-08, -8.04636641760225757e-08, -7.38721510629147815e-08, -7.74214043985921307e-08, -1.05789133897360443e-07, -1.61282173394283745e-07, -1.0000002384185791, -1.8061557227611047e-07, -1.03737718859520101e-07, 1.13291960701644712e-07, 1.99696515323921631e-07, 2.99633398981313803e-07, 3.56312853000417817e-07, 3.22042239986330969e-07, 2.27884328296568128e-07, 1.40315691510295437e-07, 9.01639438666279602e-08, -4.77519037644924538e-08, 8.88571420887274144e-08, -8.47635064360474644e-08, -1.01795976092944329e-07, 8.40493399323349877e-08, 7.39243048997195729e-08, -6.79610963061350049e-08, -9.67755084957389045e-08, -1.09254095548294572e-07, 4.52189112820633454e-08, 9.20884275501521188e-08, 1.48604399896612449e-07, 1.79320323923093383e-07, 1.55828615788777824e-07, 1.02230814036374795e-07, 6.36989412328148319e-08, 5.59773418729037076e-08, 6.67924879849124409e-08, 7.65348175946201081e-08, 7.47224859765083238e-08, 1.00000011920928955, 6.44084181544712919e-08, 5.27013988005364808e-08, -1.12299943566540605e-07, -1.95944267034064978e-07, -2.68944120307423873e-07, -2.9652161970261659e-07, -2.62194987499242416e-07, -1.92595592807265348e-07, -1.2678559357937047e-07, -8.44100469521436025e-08, -1.48656127407775784e-08, 7.98194790263551113e-08, -7.89279255286601256e-08, -1.06943112143653707e-07, 9.0181970335834194e-08, 1.05038694186987414e-07, -6.46038174068053195e-08, 1.64300672622630373e-07, -8.35637194995797472e-08, -1.18869991183601087e-07, -1.40424774031089328e-07, -1.36524079152877675e-07, -1.0831671204414306e-07, -7.35688132635914371e-08, -5.50279608546588861e-08, -7.08914313918285188e-08, -1.25145206197885273e-07, -1.87542482876779104e-07, -1.0000002384185791, -1.5194356706160761e-07, -8.12676432815351291e-08, 8.42922176502725051e-08, 1.80314373210421763e-07, 2.83844286741441465e-07, 3.3058131521102041e-07, 2.87173662627537851e-07, 1.98756566760494024e-07, 1.25330515743371507e-07, 8.50256896001155837e-08, -4.29685798053469625e-08, 8.27980457529520208e-08, -4.83781761317914061e-08, -9.38199136157891189e-08, 8.81693225096569222e-08, 1.22697926485670905e-07, -2.51107792337279534e-08, -2.99021927219200734e-08, -1.65550233077738085e-07, 3.94832291306101979e-08, 9.48126768207657733e-08, 1.43786962780723115e-07, 1.58240908376683365e-07, 1.3455353098379419e-07, 1.02003738788880582e-07, 8.23070465116870764e-08, 7.29526092868582055e-08, 6.82989096389974293e-08, 7.48130304373262334e-08, 1.01954540809856553e-07, 1.00000011920928955, 1.31318117269074719e-07, 8.38778717593413603e-08, -1.06314935521822918e-07, -1.71576601815104368e-07, -2.41669937395272427e-07, -2.82587677702395013e-07, -2.59463803331527743e-07, -1.89127746352824033e-07, -1.18833511919547163e-07, -7.54059712448906794e-08, 5.80041401576636417e-08, -8.89658338110166369e-08, 6.67074857574334601e-08, 9.98863640688796295e-08, 4.55696955725670705e-08, -8.21923435978533234e-08, 5.82976262819556723e-08, 1.66476880281152262e-07, -4.73214392116005911e-08, -9.83138619403689518e-08, -1.56051157773617888e-07, -1.88591144478778006e-07, -1.66847982541185047e-07, -1.10021503019197553e-07, -6.27735303737608774e-08, -7.51317514868787839e-08, -7.73208839177641494e-08, -1.00000011920928955, 8.35037710089636676e-08, 1.65157430842555186e-07, 2.37444766071348567e-07, 2.60300708987415419e-07, 2.23178119540534681e-07, 1.60550115424484829e-07, 1.09254678193337895e-07, 8.02081174811064557e-08, -7.09610432636509358e-08, 6.03266840926153236e-08, 8.74381171911409183e-08, 4.77912820429082785e-08, -6.9149628245668282e-08, -4.95011676093781716e-08, 7.0746487779160816e-08, 5.51434773399250844e-08, 8.58059365782537498e-08, 1.02459395634468819e-07, 1.02021409986718936e-07, 8.69185896590352058e-08, 6.5613512845175137e-08, 5.12505486938152899e-08, 5.98389959804990212e-08, 1.03027623765683529e-07, 1.6591292251177947e-07, 1.0000002384185791, 1.59327939286413311e-07, 8.26709580792339693e-08, -9.5206615924325888e-08, -1.77598224126995774e-07, -2.74716910553252092e-07, -3.27583791204233421e-07, -2.92124980205699103e-07, -2.01746260586332937e-07, -1.1953568446188001e-07, -7.33023810539634724e-08, -5.89676183437859436e-08, -7.43029175964693422e-08, 5.27535242156318418e-08, 6.78910652140984894e-08, -4.12489491452561197e-08, -3.65276981995066308e-08, -6.43801030264512519e-08, -1.10096529226666462e-07, -1.2517210734586115e-07, -1.05168602715366433e-07, -7.72720056829712121e-08, -6.5438690910468722e-08, -6.98140638633049093e-08, -8.16929599523064098e-08, -9.69554179164333618e-08, -1.16058181731659715e-07, -1.00000011920928955, -1.30985583268738992e-07, -9.77535634660853248e-08, 1.03763959202751721e-07, 1.80633861646128935e-07, 2.49606529223456164e-07, 2.80926002460546442e-07, 2.54539600064163096e-07, 1.9109974402908847e-07, 1.27055912457763043e-07, 8.09869220574910287e-08, 3.49513413766544545e-08, 5.47116769666899927e-08, -5.81049448555859271e-08, -4.96347318801326765e-08, 6.98965365586445841e-08, 1.17860096793265257e-07, 1.47011590456713748e-07, 1.36174008957823389e-07, 9.65879678460623836e-08, 6.15761805988768174e-08, 8.14970562146299926e-08, 1.35793698063935153e-07, 1.86258816370354907e-07, 1.0000002384185791, 1.43753624115561252e-07, 8.48651708906800195e-08, -6.88737529230820655e-08, -1.55316399741423083e-07, -2.40819986174756195e-07, -2.73231790970385191e-07, -2.31232604619435733e-07, -1.5701229472142586e-07, -1.00550010984079563e-07, -7.38696286362028331e-08, 8.48284731347348497e-09, 4.49703208005303168e-08, -9.10985420432552928e-08, -9.55781871425642748e-08, 6.3436161212848674e-08, -2.48945770664477095e-08, -7.80542919187610096e-08, -1.21315594014959061e-07, -1.40548124250017281e-07, -1.30170917600480607e-07, -1.03520605421181244e-07, -7.68506680515201879e-08, -5.69849234466346388e-08, -8.90615439175235224e-08, -1.00000011920928955, -1.10777591544319876e-07, 8.47448475838064041e-08, 1.41893053751118714e-07, 2.09766398029387346e-07, 2.52414821488855523e-07, 2.33575974561972544e-07, 1.68063621686087572e-07, 1.02180571559529199e-07, -4.67555452132728533e-08, 8.60677502600992739e-08, -8.11941447409481043e-08, -9.72852092218090547e-08, 7.95018024746241281e-08, 6.83906691278934886e-08, -6.61190355799590179e-08, 9.40414892625085486e-08, 1.50238292917492799e-07, 1.73827999105924391e-07, 1.49705527974219876e-07, 1.02891469566657179e-07, 6.8283902976418176e-08, 1.00000011920928955, -7.79214843760200893e-08, -1.41849099577484594e-07, -1.96360545601237391e-07, -2.1538266992138233e-07, -1.90499108043695742e-07, -1.43451273970640614e-07, -9.92204149952158332e-08, -6.78488518701669818e-08, 7.68157946140490822e-08, -7.54686695358941506e-08, -1.01729455082022469e-07, 8.65383853465573338e-08, 9.93135031990277639e-08, -6.33900896218619891e-08, -6.13927539916403475e-08, -1.02855857164740883e-07, -1.26010888834571233e-07, -1.19026765332819195e-07, -9.2489997882694297e-08, -6.81993768125721544e-08, -6.28964542670473747e-08, -8.90300810851840652e-08, -1.51558197103440762e-07, -2.25456616931296594e-07, -1.0000002384185791, -2.07990410672209691e-07, -1.27414665485048317e-07, -5.75426390980737779e-08, 6.00557115149058518e-08, 1.38971103069707169e-07, 2.18720472844324831e-07, 2.51942992690601386e-07, 2.15540651993251231e-07, 1.46909329146183154e-07, 9.31287189587237663e-08, 6.65694344093026302e-08, -4.08402129892238008e-08, 8.00803690026441473e-08, -4.5860012676257611e-08, -8.91010643044864992e-08, 8.21883361368236365e-08, 1.10751905424422148e-07, -4.77649031438431848e-08, 4.37002007913633861e-08, 7.44480743719577731e-08, 8.92852156653134443e-08, 8.33016429169219919e-08, 7.00736251246780739e-08, 6.59008065895250184e-08, 7.49351087847571762e-08, 9.65210134040717094e-08, 1.3401329113094107e-07, 1.83737583370202628e-07, 1.0000002384185791, 1.95564041405305034e-07, 1.29153065131504263e-07, 5.27531263116998161e-08, -7.45204502550222969e-08, -1.45174169574602274e-07, -2.22609827460473753e-07, -2.68028514938123408e-07, -2.45076222427087487e-07, -1.74306009625979641e-07, -1.05859186305679032e-07, -6.55725358456038521e-08, 5.59556596613219881e-08, -8.3119942928533419e-08, 6.9122222612350015e-08, 1.03570137355291081e-07, -4.02474071847791492e-08, -5.78410705998066987e-08, -9.31442656337821973e-08, -1.07982785380045243e-07, -9.33785386791896599e-08, -6.20827194097728352e-08, -1.00000011920928955, 9.92047759496017534e-08, 1.64768252375324664e-07, 2.2324594795009034e-07, 2.47466317659927881e-07, 2.21438000380658195e-07, 1.63129442398712854e-07, 1.04650801802108617e-07, 6.41837516468513058e-08, -6.25935072662286984e-08, 6.23795983756281203e-08, 8.58990460983477533e-08, -6.6943641741090687e-08, -4.63304239417539065e-08, 7.40632799534068909e-08, 3.11114156659186847e-08, 8.89096085643359402e-08, 1.44518082834110828e-07, 1.72179483115542098e-07, 1.54524087747631711e-07, 1.04406161938186415e-07, -8.43985858978157921e-08, -1.54569434585027921e-07, -2.20732857769689872e-07, 0.999999761581420898, -2.35260046110852272e-07, -1.72606533510588633e-07, -1.07549112726701424e-07, -7.14120034217557986e-08, -7.6558272610327549e-08, -1.18004884086531092e-07, -1.65926664408289071e-07, -1.79010299916626536e-07, -1.48551649203909619e-07, -1.05521529292218474e-07, -7.60489271556252788e-08, -5.84130752656619734e-08, -7.25244859722806723e-08, 5.07862800702696404e-08, 6.41272492885036627e-08, -5.0143750485176497e-08, -4.40939658119532396e-08, -9.7908632312737609e-08, -1.45135587104050501e-07, -1.61953650490431755e-07, -1.36093049718510883e-07, -8.75856542847941455e-08, 7.73766899442307476e-08, 1.58451513243562658e-07, 2.31911030823539477e-07, -0.999999761581420898, 2.25674298803824058e-07, 1.74975568256741099e-07, 1.32924128593003843e-07, 1.03188902755846357e-07, 8.86365114638465457e-08, 1.01724026535521261e-07, 1.42269527714233845e-07, 1.72918518615006178e-07, 1.55246084432292264e-07, 1.03657193051276408e-07, 6.01937841793187545e-08, 3.40333699000439083e-08, 5.28184358472572058e-08, -5.65467956903376034e-08, -4.75732768734360434e-08, 5.4991740938703515e-08, 9.74090497152246826e-08, 1.18936291926274862e-07, 1.05222653701275703e-07, 7.11720744561716856e-08, 6.62396786310637253e-08, 7.35170075927271682e-08, 1.00000011920928955, 7.45674455515654699e-08, 6.54379093134593859e-08, -8.76899264312669402e-08, -1.45847252497333102e-07, -1.90471453720419959e-07, -2.11860708532185527e-07, -1.98335172285624139e-07, -1.54783037942252122e-07, -1.03506600623859413e-07, 8.21438739251334482e-09, 4.32212559076106118e-08, -8.85168773834266176e-08, -9.25363252690658555e-08, 6.11222290558544046e-08, -1.32253063611642574e-07, -1.30826705913023034e-07, -1.83675680887063209e-07, -2.97452032782530296e-07, -4.24980839852651116e-07, -1.0000004768371582, -3.77256839101391961e-07, -2.4010623178583046e-07, -1.32135269836908265e-07, -5.07760873347251618e-08, 1.5106179773738404e-07, 2.50551835279111401e-07, 2.80937598517994047e-07, 2.32451156989554875e-07, 1.57629813202220248e-07, 1.01682701370009454e-07, 6.93578456889554218e-08, -4.55399451482207951e-08, 8.33878459616244072e-08, -7.84903022577054799e-08, -9.3814463753005839e-08, 7.63164820227757446e-08, 6.53186162935526227e-08, -6.3868206723327603e-08, 5.78789709493321425e-08, 9.2030120413255645e-08, 1.00507094202839653e-07, 8.5184979070618283e-08, 6.85348027218424249e-08, 6.48672511260883766e-08, 7.07461182969382207e-08, 8.08997313583859068e-08, 1.04272501744162582e-07, 1.53843203065662237e-07, 1.0000002384185791, 1.96562012888534809e-07, 1.23161754572720383e-07, -5.88024242631490779e-08, -1.00975491079680069e-07, -1.63754862114728894e-07, -2.11422161555674393e-07, -1.99003267198349931e-07, -1.39842143198620761e-07, -8.29616126907239959e-08, 7.44623847026559815e-08, -7.27169222614065802e-08, -9.7809049748320831e-08, 8.27425310490070842e-08, 9.43034450529012247e-08, -6.20631581682573596e-08, -8.15099170381472504e-08, -1.36271950168520561e-07, -1.66820839808679011e-07, -1.44512171118549304e-07, -8.54576782671756519e-08, 6.6499453055257618e-08, 1.3644311991356517e-07, -0.999999821186065674, 1.61819016852859932e-07, 9.21695288980117766e-08, 8.52861603561905213e-08, 1.17662771970117319e-07, 1.36401496320104343e-07, 1.38198885224483092e-07, 1.23314578104327666e-07, 9.62123039016660186e-08, 6.7218564936410985e-08, -3.9082738823026375e-08, 7.75350841308863892e-08, -4.40453504779725336e-08, -8.53257873245638621e-08, 7.84032465617201524e-08, 1.04645259568769688e-07, -4.77707473578448116e-08, 6.65081003603518184e-08, 9.4984834220213088e-08, 1.11684649084509147e-07, 1.13195191886461544e-07, 9.8678356152959168e-08, 7.31989828750556626e-08, 5.97829128423654765e-08, 1.1540271316334838e-07, 1.91612571143195964e-07, 1.0000002384185791, 1.55731143536286254e-07, 7.84373952456007828e-08, -9.45081382042189944e-08, -1.61838784151768778e-07, -1.87543079732677143e-07, -1.59556421408524329e-07, -1.1120141607534606e-07, -7.45564818771526916e-08, 5.40661524439656205e-08, -7.95324552882448188e-08, 6.59795986734934559e-08, 9.76544285435920756e-08, -4.27246682477289141e-08, -7.98453001493726333e-08, -1.27305384012288414e-07, -1.38028241281062947e-07, -1.09009810955740249e-07, -7.66726842016396404e-08, -6.69357831384331803e-08, -6.9600567087491072e-08, -6.58612222537158232e-08, -1.00000011920928955, -1.24829696801498358e-07, -8.63608917711644608e-08, 5.23084793258021818e-08, 8.28347594961087452e-08, 1.22686486747625167e-07, 1.49266639937195578e-07, 1.36520284854668716e-07, 9.60870778499156586e-08, 5.96779159423022065e-08, -6.21318605453780037e-08, 6.00994312094371708e-08, 8.39865634816305828e-08, -4.10915816928536515e-08, -7.13000725127699297e-09, 7.19917920832813252e-08, 1.21663703112062649e-07, 1.57670442035851011e-07, 1.46796580224872741e-07, 9.39399598109957878e-08, 1, -5.13802582702282962e-08, -8.74834285014003399e-08, -1.17496249174564582e-07, -1.30398007058829535e-07, -1.18579492891512928e-07, -9.01203591752164357e-08, -6.17122921653390222e-08, -5.69467779598653578e-08, -6.96521027521157521e-08, 4.89538898307273485e-08, 6.01089880092331441e-08, -5.52606458370519249e-08, -6.01876095629449992e-08, -8.06750222182017751e-08, -8.68378862151075737e-08, -8.70024976507011161e-08, -8.38130276292758936e-08, -7.31187057567694865e-08, -6.24633216261827329e-08, -7.78639943632697396e-08, -1.44553865766283707e-07, -2.40819190366892144e-07, -1.0000002384185791, -2.38956317843985744e-07, -1.47320292853692081e-07, -7.29596791870790184e-08, 9.59150483481607807e-08, 1.53529484236969438e-07, 1.76109239191646338e-07, 1.52250748897131416e-07, 1.06855310377795831e-07, 6.97803628213478078e-08, 3.27598712601684383e-08, 5.06218249540779652e-08, -5.48471597028310498e-08, -4.49749073538896482e-08, 5.81860675197276578e-08, 1.02590561823490134e-07, 1.17180675829331449e-07, 9.39265873967087828e-08, 6.89116816943169397e-08, 7.22933535257652693e-08, 6.72281643687711039e-08, 6.99271183179916989e-08, 1.00000011920928955, 8.34164382013113936e-08, 5.50157679413132428e-08, -9.46407610058486171e-08, -1.42818706194702827e-07, -1.69095244473282946e-07, -1.53012564396703965e-07, -1.10046798340590612e-07, -6.97470525778953743e-08, 7.3401325018096486e-09, 4.07276061764605402e-08, -8.60791473655808659e-08, -8.87526780957159644e-08, 6.10267392175956047e-08, -6.12830177715295576e-08, -9.72645750607625814e-08, -1.21477000902814325e-07, -1.08484691452304105e-07, -5.9597557111601418e-08, 1.06801003596501687e-07, -0.999999880790710449, 1.22551654158087331e-07, 8.52914965321360796e-08, 7.03654734479641775e-08, 9.86969581617813674e-08, 1.30779838514172297e-07, 1.44433442983427085e-07, 1.26061635796759219e-07, 9.0330864566112723e-08, 5.99419038849191566e-08, -4.2293642366075801e-08, 8.09943188073702913e-08, -7.94009835658471275e-08, -9.71521885162474064e-08, 5.06686070878004102e-08, 2.79329128716199193e-08, 5.5016226241377808e-08, 8.17003140696215269e-08, 9.56665360263286857e-08, 9.82944925453921314e-08, 9.11145363602372527e-08, 7.36378353849431733e-08, 9.14044235855726583e-08, 1.00000011920928955, 7.97785446593479719e-08, -8.61428333109870437e-08, -1.28520596831549483e-07, -1.4961678118652344e-07, -1.3490074479705072e-07, -9.77983845018570719e-08, -6.36610053561526001e-08, 7.18026953450134897e-08, -7.14688184189071762e-08, -9.44536111546767643e-08, 8.15251794961113774e-08, 9.33729111807224399e-08, -5.8114064671599408e-08, -1.042160562292338e-07, -1.09779684009936318e-07, -6.30950651725470379e-08, -8.89331204234622419e-08, -1.3040649093909451e-07, -1.83381402507620805e-07, -1.0000002384185791, -1.88609163842556882e-07, -1.24083683772369113e-07, -5.92861724157955905e-08, 1.04838008496699331e-07, 1.59688681833358714e-07, 1.81685962274968915e-07, 1.58371364022968919e-07, 1.11879451480945136e-07, 7.06028373542721965e-08, 7.62499468009991688e-08, -4.36356799582426902e-08, -8.25815504867932759e-08, 7.66859145073794934e-08, 1.02564868598165049e-07, -4.33360085594358679e-08, 1.00000011920928955, -6.89911701101664221e-08, -1.21316546142224979e-07, -1.81268333676598559e-07, -2.13653507330491266e-07, -1.9208395940495393e-07, -1.37217753604090831e-07, -8.66051976800008561e-08, -5.24761709641552443e-08, 7.34110798816800525e-08, 9.94029818457420333e-08, -3.88133862827544363e-08, 8.6359747797359887e-08, -0.999999880790710449, 9.56608801061520353e-08, 8.35740365801029839e-08, 1.23299969345680438e-07, 1.62139258463867009e-07, 1.76919257910412853e-07, 1.54173548594371823e-07, 1.0981255371689258e-07, 7.00135061038054118e-08, -5.87799746654127375e-08, 5.78067727019515587e-08, 7.8796226432586991e-08, -5.54759473914145929e-08, 6.07836412314100016e-08, 1.00871098140942195e-07, 1.13730649786702998e-07, 9.74671650055825012e-08, 9.76565104338078527e-08, 1.00000011920928955, 8.25708212914832984e-08, -7.712113614388727e-08, -1.247683201199834e-07, -1.47253729210206075e-07, -1.30245354057478835e-07, -9.19682250355435826e-08, -5.41410898335925594e-08, -6.68020163629989838e-08, 4.73008476831182634e-08, 5.73152334482074366e-08, -5.25258094796754449e-08, -6.46456896902236622e-08, -1.05862085320040933e-07, -1.29338687315794232e-07, -1.14108580362426437e-07, -7.73579884594255418e-08, -8.42433962588984286e-08, -1.00000011920928955, -1.02911300814412243e-07, -6.96414090839425626e-08, 6.44208384414923785e-08, 9.11585473772902333e-08, 1.06473166283649334e-07, 9.82512773362032021e-08, 7.42636885320280271e-08, 3.64349546089215437e-08, 5.30445269930623908e-08, -5.19940961396514467e-08, -4.32660876015233953e-08, 6.16284197008099e-08, 8.84776056864211569e-08, 1.04037134462942049e-07, 9.72328706438929657e-08, 6.87736374516134674e-08, 0.999999940395355225, -8.1033412868691812e-08, -1.12417325226488174e-07, -1.22335933383510564e-07, -1.03354736324945407e-07, -7.16935346645186655e-08, 9.50041556535552445e-09, 4.26085051685731742e-08, -8.16104233081205166e-08, -8.47439736162414192e-08, 5.89449378196604812e-08, -9.60500514679551998e-08, -1.07019808126551652e-07, -9.49568317309967824e-08, -6.3208574374584714e-08, -1.07524336101505469e-07, -1.00000011920928955, -1.07388821390941303e-07, 7.16468520067792269e-08, 1.14156783581620402e-07, 1.38797759063891135e-07, 1.27486387668795942e-07, 9.17707652092758508e-08, 6.00542549022975436e-08, -8.24592163439774595e-08, -9.60360821977701562e-08, 4.98260135373129742e-08, 2.79278538073413074e-08, 1, -6.3163874131078046e-08, -9.87081705261516618e-08, -1.32312038658710662e-07, -1.4566774098057067e-07, -1.2822350470287347e-07, -9.41469693316321354e-08, -6.40907416027403087e-08, 7.02438711641661939e-08, -6.7163306027850922e-08, -8.93848977057132288e-08, 8.0018864423436753e-08, 9.10227200279223325e-08, -5.64974129702022765e-08, -9.72678364519197203e-08, -1.00000011920928955, 8.83717277133655443e-08, 1.3644844898408337e-07, 1.56773936055287777e-07, 1.35821679236869386e-07, 9.33518364831797953e-08, 5.64815501036264322e-08, 7.3173296755157935e-08, -4.11222309537606634e-08, -7.81096929358682246e-08, 7.5203161031822674e-08, 9.97541391711820324e-08, -4.18853147721165442e-08, 1.00000011920928955, 1.13248617594763346e-07, -7.51210009752867336e-08, -1.14394438810450083e-07, -1.37038711045534001e-07, -1.25148815754982934e-07, -9.09042654484437662e-08, -4.98040080287864839e-08, 7.18078467798477504e-08, 9.63889021932118339e-08, -3.7274123343422616e-08, -1.06660131393709889e-07, -1.20578818041394698e-07, -9.22591709695552709e-08, -0.999999880790710449, 8.5509462621757848e-08, 7.51033013557389495e-08, 9.50473264538231888e-08, 1.02208105090539902e-07, 9.02672141478433332e-08, 6.61361667653181939e-08, -5.73003937631710869e-08, 5.61483268768370181e-08, 7.59663265625931672e-08, -5.35587041383678297e-08, 5.47060423627954151e-08, 8.34238989000368747e-08, 1.07742557986512111e-07, 1.0811252337816768e-07, 8.06138231723707577e-08, 0.999999940395355225, -9.01417180898533843e-08, -1.01766488569410285e-07, -8.64647162757137266e-08, -5.35034949677992699e-08, -6.506728311705956e-08, 4.59800624241779587e-08, 5.50512986308149266e-08, -5.09758528721704351e-08, -7.62495417916397855e-08, -1.0730477129072824e-07, -1.11490606968800421e-07, -9.00162859807096538e-08, -6.1380831084534293e-08, -0.999999880790710449, 1.25872446687935735e-07, 1.15400595745995815e-07, 3.51790347963287786e-08, 5.13238695987183746e-08, -5.12386222339955566e-08, -4.2538932376601224e-08, 7.59436815656044928e-08, 9.50863494608711335e-08, 8.38977243233784975e-08, 0.999999940395355225, -7.46135739859710156e-08, -9.92508617514431535e-08, -1.0474210654365379e-07, -9.02917065559449838e-08, -6.70848976369597949e-08, 9.6411705285959215e-09, 4.16360173005614342e-08, -7.93927839026764559e-08, -8.22236714270729863e-08, 5.72943150700666592e-08, -1.00000011920928955, 7.13663652618379274e-08, 1.18619730926639022e-07, 1.43721393897067173e-07, 1.27250231685138715e-07, 8.79124684161070036e-08, 5.99456413397092547e-08, -7.95039980516776268e-08, -9.26979453197418479e-08, 4.8844519540125475e-08, 2.74395599575427696e-08, -5.57366668374470464e-08, -1.00613071651878272e-07, 0.999999880790710449, -8.61852953448760672e-08, -6.42751132318153395e-08, -8.47276382387462945e-08, -1.051875955226933e-07, -1.14864029399086576e-07, -1.03787670013844036e-07, -7.66015944009268424e-08, 7.05052514149429044e-08, -6.41049027194640075e-08, -8.59122550878055335e-08, 7.80034739022994472e-08, 8.86151383383548819e-08, -5.43485612070071511e-08, -1.00000011920928955, 6.62612009705298988e-08, 1.07566172857787024e-07, 1.23549327213368088e-07, 1.05805447958573495e-07, 7.42132897357805632e-08, 4.89815192850073799e-08, -9.12108575334968918e-08, 6.84489762647899624e-08, 9.47043616861265036e-08, -3.9122184603002097e-08, 8.0737031282751559e-08, 1.06418895029491978e-07, 1.5143881171297835e-07, 1.0000002384185791, 1.69616967582442157e-07, 1.12383347072864126e-07, 4.86901967633457389e-08, -6.96468447358711273e-08, -1.04522342780910549e-07, -1.26021603819026495e-07, -1.16197341526458331e-07, -8.37061193692534289e-08, -4.45857537556548778e-08, 7.06056582089331641e-08, 9.35228428033951786e-08, -3.61492276113040134e-08, -9.08351509565363813e-08, -1.54773999838653253e-07, -2.08822029890143313e-07, -1.0000002384185791, -1.89077638879098231e-07, -1.34296982423620648e-07, -7.94640371282184788e-08, 8.68222400640661363e-08, 1.32809319097759726e-07, 1.48535576727226726e-07, 1.28681477917780285e-07, 9.0881385972352291e-08, 5.55402479562872031e-08, -5.33589918916277384e-08, 5.49568461849503365e-08, 7.33446228196044103e-08, -5.23435836896624096e-08, 7.59779297254681296e-08, 1.58713405085109116e-07, 2.53108993319983711e-07, 1.00000035762786865, 2.61872969531395938e-07, 1.67378587434541259e-07, 7.97529295937238203e-08, -8.73059917694263277e-08, -1.46604705264508084e-07, -1.78511143644755066e-07, -1.60745727839639585e-07, -1.13027041948043916e-07, -6.9835849103583314e-08, -5.0342080726295535e-08, -6.20892492975144705e-08, 4.41673932982666884e-08, 5.23672376573358633e-08, -4.99838215262116137e-08, -5.20535792247756035e-08, -1.02124445788831508e-07, -1.39288999889686238e-07, -1.00000011920928955, -1.44441443694631744e-07, -1.0560562913042304e-07, -5.24699750314994162e-08, 1.06751805617477658e-07, 1.50159081613310263e-07, 1.68442525705359003e-07, 1.50601579207432223e-07, 1.09874946474519675e-07, 6.64425456875505915e-08, 6.45540012556011789e-08, -4.46598527048536198e-08, -3.84817511189794459e-08, 1.06827151569177659e-07, 1.53372951672281488e-07, 1.00000011920928955, 1.32485439507945557e-07, 8.39865990087673708e-08, -6.06048971008021908e-08, -1.03437756138191617e-07, -1.1959409107475949e-07, -9.88863675388529373e-08, 5.85569459587986785e-08, -6.99300883866271761e-08, -7.59126805860432796e-08, 5.51502736811926297e-08, -2.18567564047589258e-08, -7.39615444445007597e-08, -1.2800124693512771e-07, -1.88561941172338265e-07, -1.0000002384185791, -2.03722024139096902e-07, -1.34605642188034835e-07, -6.10454122806913801e-08, 7.88827989595120016e-08, 1.22120340506626235e-07, 1.53346164211143332e-07, 1.47653281601378694e-07, 1.04025836833443464e-07, 4.9541977631406553e-08, 5.68098563746843865e-08, -7.47741211171160103e-08, -8.75578933801079984e-08, 4.87750995148417132e-08, 2.75900386981220436e-08, 1.10057953861542046e-07, 1.17222953122109175e-07, 7.40088594852750248e-08, 1.17952161815537693e-07, 1.5731691860310093e-07, 1.00000011920928955, 1.4919083923814469e-07, 1.08467745008056227e-07, 6.31400425277206523e-08, -1.10364467786894238e-07, -1.10757738980282738e-07, 6.67906547846541798e-08, -5.93639057910877455e-08, -8.04185944502933125e-08, 7.70352741596980195e-08, 8.69522764901375922e-08, -5.15281506352494034e-08, -9.24307954619507655e-08, -1.03420916275354102e-07, -1.47749247503270453e-07, -2.04950467264097824e-07, -1.0000002384185791, -1.88856873251097568e-07, -1.207654065638053e-07, -6.37735340092149272e-08, 8.88261197928841284e-08, 1.1767393459649611e-07, 9.75448983808746561e-08, 4.66422775957653357e-08, -8.41553671193651098e-08, 6.79228335798143235e-08, 9.25189738154585939e-08, -3.64009586917291017e-08, 6.17211668441086658e-08, 1.58362112756549323e-07, 2.72467360673545045e-07, 3.29113703401162638e-07, 2.8705821364383155e-07, 1.9641572635009652e-07, 1.24212732544037863e-07, 8.84563178260577843e-08, 8.08184310585602361e-08, 9.60183328402308689e-08, 1.26624371432626504e-07, 1.00000011920928955, 1.41136780484885094e-07, 1.06920722942049906e-07, 7.08961991335854691e-08, 5.39623847828352154e-08, 7.06541953832129366e-08, 1.25679690654578735e-07, 1.91680157968221465e-07, 2.1271115713261679e-07, 1.67958290830938495e-07, 9.82744055022521934e-08, 4.41849969945451448e-08, -3.910348667091057e-08, 7.02061484503246902e-08, 9.12274771280863206e-08, -3.45686856917382102e-08, -8.76373533742480504e-08, -1.28636713725427398e-07, -1.67902172165668162e-07, -1.0000002384185791, -1.53903982891279156e-07, -1.11543904779409786e-07, -7.25195121731303516e-08, 7.24093496273781057e-08, 1.14955305718922318e-07, 1.19265720854855317e-07, 9.09034838514344301e-08, 1.76376016014501147e-08, 5.04420683000716963e-08, -5.27607753042502736e-08, 1, -8.23684871420482523e-08, -1.30101938111693016e-07, -1.60936096449404431e-07, -1.48678054756601341e-07, -1.10882155013314332e-07, -7.65245928846525203e-08, -3.42468560177167092e-08, -3.60342262695212412e-08, 6.51501537163312605e-08, -9.00229508715710836e-08, -1.22648259548441274e-07, -1.38849628683601622e-07, -1.25188435617928917e-07, -9.2783707827948092e-08, 8.51936974299860594e-08, 1.31313271367616835e-07, -0.999999880790710449, 1.04609952700229769e-07, 6.08496790732715453e-08, -4.45342287491712341e-08, -3.71160950862758909e-08, 2.31973622533132584e-08, 1.14990832855710323e-07, 2.30818812951838481e-07, 3.47074802675706451e-07, 3.95389065488416236e-07, 3.35166930653940653e-07, 2.15802074876592087e-07, 1.10912424133857712e-07, -1.00199351038554596e-07, 0.999999880790710449, -1.35288971137015324e-07, -8.78394956771444413e-08, 9.81786811848905927e-08, 1.73674322923034197e-07, 2.57225991617815453e-07, 2.94403577072444023e-07, 2.46641263856872683e-07, 1.53721444462462387e-07, 7.78009905388898915e-08, 5.501328814716544e-08, -6.90724419882826624e-08, -7.38066106009682699e-08, 5.38959525897553249e-08, -8.07533737656740414e-08, -1.02684914793371718e-07, -1.07236033386470808e-07, -8.38734166563881445e-08, -0.999999880790710449, 5.32606136971480737e-08, -7.36388585664826678e-08, -8.49752126441671862e-08, 4.8053980350459824e-08, 2.75384763881447725e-08, -9.90266997291655571e-08, -1.06407902933369769e-07, -8.20047034721937962e-08, -7.08079781475134951e-08, -1.17716965064573742e-07, 0.999999880790710449, -1.09702149586610176e-07, -7.18956201239961956e-08, -5.89885296164993633e-08, -6.81946445979519922e-08, -8.55805808441800764e-08, -1.2024379714148381e-07, -1.56437835130418534e-07, -1.56397504724736791e-07, -1.12775410343601834e-07, -5.78193422029471549e-08, 6.35217958233624813e-08, -5.84533523806385347e-08, -7.79583828602881113e-08, 7.52255928659906203e-08, 8.49460803920010221e-08, -4.84297935088306986e-08, -9.35640045440777612e-08, -9.32194552660803311e-08, -1.00000011920928955, 1.53441376937735185e-07, 4.6441698486887617e-08, -8.22136385636440536e-08, 5.5905459817040537e-08, 6.93400536988519889e-08, 8.71598331286804751e-08, 1.00000011920928955, 9.86378907441576303e-08, -1.17257002330006799e-07, -9.93613014088623459e-08, -3.78435203174376511e-08, 6.80263383401324973e-08, 8.80345325526832312e-08, -3.12063619389846281e-08, -6.6357912942294206e-08, -1.16863077437301399e-07, -1.34717510036352905e-07, -1.05825691321115301e-07, -1, 1.73405094727741016e-08, 4.83488413749455503e-08, -4.97932255427713244e-08, 9.55801411350876151e-08, 1.00000011920928955, 7.93160097600775771e-08, -8.10259948025304766e-08, -1.25693148333994031e-07, -1.33747192876398913e-07, -1.00717912232539675e-07, -5.77522243361272558e-08, -3.34991376860216405e-08, -3.42672166198099148e-08, 6.25462277525912214e-08, -1.2214884748118493e-07, -1.29235004919792118e-07, -1.00000011920928955, -1.15489683594205417e-07, 5.73873606413144444e-08, -4.35809752730165201e-08, -3.52705207262715703e-08, 9.96180631318566157e-08, 1.18437164076112822e-07, 9.79705632175864594e-08, 0.999999880790710449, 5.0577664723050475e-08, -6.78512961371779966e-08, -7.11357017735281261e-08, 5.35891366837404348e-08, -7.21004624892884749e-08, -1.03777132665072713e-07, -1.22817240821859741e-07, -1.1658048748586225e-07, -8.65841798258770723e-08, 5.99956635483067657e-08, 8.74190462241131172e-08, -0.999999880790710449, 8.80099690903080045e-08, 5.56235235649182869e-08, 4.82794177969481098e-08, -7.29034894675351097e-08, -8.22708869918642449e-08, 4.82088502451460954e-08, 2.84906818137642404e-08, 9.66493800547141291e-08, 1.02226302090002719e-07, 8.10965232744820241e-08, -9.47408409501804272e-08, -1.41437425327239907e-07, 0.999999821186065674, -1.43537448593633599e-07, -1.01333213819998491e-07, 6.17684463577461429e-08, -5.91167754748767038e-08, -7.95638186446012696e-08, 5.53745600484489842e-08, 5.0759201286609823e-08, -5.25003187590300513e-08, -8.39043607925304968e-08, -9.97490232634845597e-08, -8.81246862149964727e-08, 8.96738896472015767e-08, 1.30061508230028267e-07, -0.999999880790710449, 1.27335979982490244e-07, 8.86547155687367194e-08, 5.000906710961317e-08, -5.05187180976918171e-08, 6.32676346867810935e-08, 7.19779720270707912e-08, 8.31956086244645121e-08, 9.50164817936638428e-08, 8.00701087655397714e-08, -9.25171335097729752e-08, 0.999999880790710449, -9.55737604613204894e-08, -3.8313444861159951e-08, 6.55638174862360756e-08, 8.50824193321386701e-08, -2.70194320250993769e-08, -1.77954476043851173e-07, -0.999999821186065674, 1.5805580844130418e-08, 4.57072353299281531e-08, -4.56698998618776386e-08, -1.03941424356435164e-07, 0.999999880790710449, -3.28098010982103006e-08, -3.33382637052181963e-08, 5.93928177750058239e-08, -1, 5.78883394553031394e-08, -4.2510670539286366e-08, -3.46794486461021734e-08, 9.86464030461320363e-08, 1.46029265124525409e-07, 1.00000011920928955, 1.42295675686909817e-07, 7.95367824935055978e-08, 5.09197199960453872e-08, -6.55453007425421674e-08, -6.87674486243849969e-08, 5.16294740293687937e-08, -1, 4.78222936806105281e-08, -7.03914153632467787e-08, -7.92622643075446831e-08, 4.74459866950383002e-08, 2.73466511657716183e-08, 1.00000011920928955, 6.06343277809173742e-08, -5.71461100662418175e-08, -7.66137944196998433e-08, 5.47110978743603482e-08, 4.99235248696550116e-08, -1.00000011920928955, -1.10083973936525581e-07, -4.81077258029927179e-08, 6.22877536216037697e-08, 7.06291061192132474e-08, 1.00000011920928955, -3.66050905142856209e-08, 6.39877839603286702e-08, 8.27125532509853656e-08, -2.5191759789322532e-08, -7.84676288390073751e-08, -1.17045445335861586e-07, -1.00000011920928955, -1.0312035669812758e-07, -5.91726880827536661e-08, 1.53159351867770965e-08, 4.38818474890467769e-08, -4.33085567408397765e-08, 9.64625925803375139e-08, 1.00000011920928955, 9.88171535709625459e-08, -3.08588674613474723e-08, -3.17551958062267659e-08, 5.62434863127236895e-08, -1, -3.58935388078407414e-08, -2.8971838261782068e-08, 1, -1.80255582904464973e-07, 5.25500389869648643e-08, -6.12304091873738798e-08, -6.46503082180061028e-08, 5.05455517441077973e-08, -7.12259691226790892e-08, -9.97660052348692261e-08, -1.00000011920928955, -9.99010438818004332e-08, -5.94409073073620675e-08, 4.72529002593091718e-08, -6.58130332453765732e-08, -7.42768264672122314e-08, 4.8022887000342962e-08, 2.69743711811543108e-08, 8.32915176829374104e-08, 1.03048435562413943e-07, 1.00000011920928955, 9.37690813884728414e-08, 6.56183303249235905e-08, 5.73561358407914668e-08, -5.33953574688439403e-08, -7.15114438776254246e-08, 5.60140769323425047e-08, 5.06790982512939081e-08, -6.9831877169690415e-08, -9.70130216160214331e-08, -1.00000011920928955, -9.02277577097265748e-08, -5.28425907475593704e-08, -4.44621797157651599e-08, 6.34550545441925351e-08, 7.12923764467632282e-08, 1, -3.54338638430817809e-08, 6.43892121843236964e-08, 8.24555854705977254e-08, -2.29665388928879111e-08, -0.999999880790710449, 1.58692312623998077e-08, 4.3968874763322674e-08, -4.0117697608366143e-08, -1.01851888700821291e-07, 0.999999880790710449, -2.20971934083991073e-08, -0.999999880790710449, -3.71344839322773623e-08, -3.02941920438115631e-08, 0.999999940395355225, 5.09078041943666904e-08, -6.09373600468643417e-08, -6.42892672431116807e-08, 4.78563215722260793e-08, 8.55451389725203626e-08, -0.999999880790710449, 8.91513138867594535e-08, 4.57153142008337454e-08, -6.481455017137705e-08, -7.29396560927852988e-08, 4.59360443016976205e-08, 2.54730139204184525e-08, 9.77915490807390597e-08, 1.00000011920928955, 5.53682859560922225e-08, -5.24671541768384486e-08, -6.98335469451194513e-08, 5.4091145784695982e-08, 4.88954903232752258e-08, -8.3389238625386497e-08, -1.00000011920928955, -8.61311306721290748e-08, -4.41370282544539805e-08, 6.12968591440221644e-08, 6.90747725684559555e-08, 0.999999880790710449, -3.6265557668002657e-08, 6.17523525647811766e-08, 7.9600283697800478e-08, -2.14350563965126639e-08, -1.00000011920928955, 5.11838642580642045e-08, -3.65842396377047407e-08, 1.00000011920928955, 1.08400463716407103e-07, -2.57783092649788159e-08, -1.00000011920928955, -3.78674052115002269e-08, -3.29223368566999852e-08, 6.44651905190585239e-08, 1.00309158312938962e-07, 1.00000011920928955, 8.74846861620426353e-08, 5.15327194250403409e-08, -4.91260720991704147e-08, -4.29706226157122728e-08, -7.90434881992041483e-08, -1.00000011920928955, -8.87816256067708309e-08, 4.52142288054346864e-08, -6.19926581180152425e-08, -7.00454592106325435e-08, 4.34786358027849928e-08, 2.20956586360898655e-08, 1, 5.39977165203708864e-08, -4.96797625260114728e-08, -6.64262103100554668e-08, 5.22215763965050428e-08, 4.5542439153223313e-08, -0.999999940395355225, -4.06011757547730667e-08, 5.98926490624762664e-08, 6.56957226397025806e-08, -9.15159290570954909e-08, 0.999999880790710449, -7.95008503473582095e-08, -3.36601075900944124e-08, 6.05362515671004076e-08, 7.61420153594372096e-08, -2.10522159704851219e-08, -0.999999880790710449, 4.47269954406692705e-08, 6.62886705526943842e-08, 1.00000011920928955, 7.77120376938000845e-08, -2.58591636992377971e-08, -1.00000011920928955, -3.75175055467025231e-08, -3.2948822337175443e-08, 5.81778785146980226e-08, 9.04991139805133571e-08, 1.00000011920928955, 8.33597724181345257e-08, 5.12706037625321187e-08, -4.7465331221019369e-08, -4.18440251337415248e-08, -1.00000011920928955, 4.50531310036694776e-08, -5.88061936923622852e-08, -6.6774980211903312e-08, 4.25721751184937602e-08, 2.04894536892652468e-08, 0.999999940395355225, 5.29470725041392143e-08, -4.59227109672610823e-08, -6.21485369833862933e-08, 5.18495504309157695e-08, 4.42687237978134362e-08, -0.999999940395355225, -3.44260904228121944e-08, 6.05329049108149775e-08, 6.48644515877094818e-08, 1, 7.2039895826492284e-08, -1.64785767253761151e-08, 1.02306486837733246e-07, -0.999999880790710449, 4.68859333579985105e-08, 0.999999940395355225, -9.12649298356882355e-08, -1.39590468961614533e-07, -1.00000011920928955, -1.35001911871768243e-07, -8.25150721084355609e-08, -3.9121935913044581e-08, -3.2323505649856088e-08, 0.999999880790710449, 4.79003219311380235e-08, -4.95214962370482681e-08, -4.28079083292232099e-08, 8.23729848775656137e-08, -0.999999880790710449, 1.00005465242247737e-07, 4.28616111491919582e-08, -6.04708958462651935e-08, -6.75054820931109134e-08, 4.14657641556459566e-08, 2.04406127579659369e-08, 1, 2.86400325677504952e-08, -7.06056582089331641e-08, 4.8030347699068443e-08, 4.21256522997737193e-08, -1.00000011920928955, -3.468677434170786e-08, 5.82944110760763579e-08, 6.27031795374932699e-08, -8.40504625898574886e-08, 0.999999880790710449, -8.58662119185282791e-08, 6.10553811952740944e-08, 8.08521889439361985e-08, -0.999999880790710449, 8.41701250919868471e-08, 4.48723085355595686e-08, 0.999999940395355225, -1, -3.73896149596930627e-08, -3.07664684839892288e-08, 1, 4.49506885047412652e-08, -4.79213859705396317e-08, -4.10835063746617379e-08, -1.00000011920928955, 3.89547061274697626e-08, -5.90516542331442906e-08, -6.52506670917318843e-08, 4.06388913631872128e-08, 1.90672135857994363e-08, 1.00000011920928955, -4.99380696794560208e-08, 5.08425586076555192e-08, 4.11517575571451744e-08, -1.00000011920928955, -3.51195623693456582e-08, 5.67666234019270632e-08, 6.08762320553069003e-08, 1.00000011920928955, 5.88724944350360602e-08, -1, 4.2688217405384421e-08, 1.00000011920928955, -1, -3.68966013297722384e-08, -3.02145046759960678e-08, 1.00000011920928955, 4.48918022755151469e-08, -4.67353515887225512e-08, -3.9889698655315442e-08, -1, 3.84644316397952934e-08, -5.73369725032080169e-08, -6.31291214858720195e-08, 4.00713133785757236e-08, 1.81176371683022808e-08, 0.999999940395355225, -4.79541668596539239e-08, 5.02179418049308879e-08, 4.02196072002425353e-08, -1, -3.37163825747666124e-08, 5.58410633288985991e-08, 5.94992322078269353e-08, 0.999999940395355225, 5.70819231882069289e-08, -1, 4.04786781871280255e-08, 0.999999940395355225, -0.999999880790710449, -3.67023247349607118e-08, -3.02414377983950544e-08, 0.999999880790710449, 4.43453593845788419e-08, -4.56870097309547418e-08, -3.89023746549810312e-08, -0.999999940395355225, 3.65228913778992137e-08, -5.32946522469046613e-08, -5.49535350558016944e-08, 6.03162106926902197e-08, 1, -4.54670256999634148e-08, 4.99951582355606661e-08, 3.8620314057880023e-08, -1, -3.18114885544673598e-08, 5.57616566254637291e-08, 5.82816603866831429e-08, 0.999999940395355225, 5.61169279933437792e-08, -0.999999940395355225, 3.93311054835976392e-08, 1, -1, -3.55468756652044249e-08, -2.87712627056180281e-08, 1, 4.38743938957486534e-08, -4.3513857406196621e-08, -3.6139351067276948e-08, -1, 3.56696681080848066e-08, -5.05502910641553171e-08, -5.12583540057676146e-08, 6.13000565863330849e-08, 1.00000011920928955, -4.12112441949830099e-08, 5.20189260555525834e-08, 3.95427655064395367e-08, -0.999999821186065674, -2.06591472817763133e-08, 6.51391260930722638e-08, 0.999999880790710449, 5.80538319638890243e-08, -8.65717950659927737e-08, -1.00000011920928955, -9.37616420060294331e-08, 4.1094136093988709e-08, 1.00000011920928955, -6.09741306334399269e-08, -9.1797510037849861e-08, -1.00000011920928955, -8.36713311969106144e-08, -3.75871707092301222e-08, -3.01265146163132158e-08, 9.13737494556698948e-08, 1.00000011920928955, 9.26600094430796162e-08, 5.98867657686241728e-08, 4.23336423693854158e-08, -4.45182699593260622e-08, -3.67808929979673849e-08, -1.00000011920928955, 2.02169090357529058e-08, -5.39089164419692679e-08, 5.72586955627230054e-08, 1.00000011920928955, -3.91212715555866453e-08, 5.25834593645413406e-08, 3.96085866327666736e-08, -6.5077344402197923e-08, -1.00446477802051959e-07, -1.00000011920928955, -9.83289325517944235e-08, -1.77559638103730322e-08, 6.59462457974768768e-08, 8.03249520231474889e-08, 1.00000011920928955, 8.89978011286984838e-08, 6.01415592882403871e-08, -1, 7.53697619870763447e-08, 1.00000011920928955, 7.44187218515435234e-08, -1, -4.54657467230390466e-08, 1.00000011920928955, 3.2936622318402442e-08, -4.5715214724850739e-08, -1, 1.87210194013687214e-08, -5.66510287569599313e-08, 5.31431965100637171e-08, 0.999999880790710449, -9.47890370639470348e-08, -4.10071763212727092e-08, 4.91512182065889647e-08, 3.70012500638949859e-08, -0.999999880790710449, -1.79330754690454341e-08, 6.29305318966544291e-08, 0.999999821186065674, 5.8386298462664854e-08, -0.999999821186065674, 0.999999880790710449, -0.999999940395355225, 0.999999880790710449, 3.11780752326740185e-08, -4.77472354987185099e-08, -0.999999880790710449, 1.7479672820286396e-08, -5.87203885515918955e-08, 5.10320745661374531e-08, 0.999999880790710449, -4.33670521715612267e-08, 4.65563907425803336e-08, 3.58021416957399197e-08, -1, -1.99351219976051652e-08, 6.06048828899474756e-08, 1.00000011920928955, 5.60122224158021709e-08, -0.999999940395355225, 0.999999940395355225, -1.00000011920928955, 1.02233279619667883e-07, 1.1789373388637614e-07, 1.03540543250346673e-07, 7.30120817138413258e-08, 1.06841540059576801e-07, 1.00000011920928955, 6.7502817557851813e-08, 8.99875089999113698e-08, 1.00948312820037245e-07, 8.84679280943601043e-08, 6.02165570739998657e-08, 3.06643990199972905e-08, -4.89219047494771075e-08, -5.48123857413429505e-08, -9.16267026696004905e-08, -1.30348652760403638e-07, -1.49437695995402464e-07, -1.35287137936757063e-07, -1.02908551014024852e-07, -7.58975389203442319e-08, -1.00000011920928955, -1.18007839944311854e-07, -6.71224782422541466e-08, -9.8654830082978151e-08, -1.34774737148291024e-07, -1.49630452028759464e-07, -1.2978246388684056e-07, -9.14816169483856356e-08, -5.66314675154444558e-08, 1.75895724652264107e-08, -5.98103397919658164e-08, 4.87544475902268459e-08, 7.96516346213138604e-08, 1.40441585472217412e-07, 2.04031934458726028e-07, 2.32795386523321213e-07, 2.02708918095595436e-07, 1.37986162940251234e-07, 7.95820795929103042e-08, 1, 8.49378594125482778e-08, 1.37917069764625921e-07, 1.97525082512584049e-07, 2.26932428404325037e-07, 1.99727537619764917e-07, 1.36299746600343497e-07, 7.51612816429769737e-08, -4.43683489947943599e-08, 4.43150867113217828e-08, 3.42887780391265551e-08, -8.08577880206939881e-08, -1.37310436798543378e-07, -1.95908924638388271e-07, -2.23940915589082579e-07, -2.01127463128614181e-07, -1.46420831015348085e-07, -9.17597233751621388e-08, -1, -8.76788632808711554e-08, -1.43225463489216054e-07, -1.99388821897628077e-07, -2.22599780386190105e-07, -1.94945044995620265e-07, -1.37888733320323809e-07, -8.27090573807254259e-08, 5.48844774073131703e-08, 8.44909351371825323e-08, 1.50091281625464035e-07, 2.18270585605750966e-07, 2.46439896045558271e-07, 2.10996503824389947e-07, 1.41060638725321041e-07, 7.69497816577313642e-08, -8.94461678058178222e-08, 0.999999880790710449, -8.81012596209984622e-08, 7.38618197715368296e-08, 1.39911875862708257e-07, 2.10775922937500582e-07, 2.44500597545993514e-07, 2.14196745673689293e-07, 1.46195645811530994e-07, 8.2508250898172264e-08, 5.40615019417600706e-08, -7.07953304868169653e-08, -1.18117462477584922e-07, -1.69546893857841496e-07, -1.95911738387621881e-07, -1.74280472720056423e-07, -1.19196684522648866e-07, -6.13807031868418562e-08, -0.999999880790710449, 9.43288185339952179e-08, -6.71610749236606352e-08, -1.18544022598143783e-07, -1.67913924542517634e-07, -1.90214592521442682e-07, -1.6838424699017196e-07, -1.18898512369014497e-07, -6.99795137393266486e-08, 6.78241036666804575e-08, 1.2059199150371569e-07, 1.72794230479667021e-07, 1.93830089756374946e-07, 1.67660658689783304e-07, 1.14810504214801767e-07, 6.35290007267030887e-08, -9.38008781758981058e-08, 0.999999880790710449, 5.3340709627036631e-08, 1.11085753928819031e-07, 1.69624925661082671e-07, 1.95959415805191384e-07, 1.71327400266818586e-07, 1.17581386405163357e-07, 6.76312694736225239e-08, -6.95670934192094137e-08, -1.18713252561519766e-07, -1.71896289202777552e-07, -1.96762727000532323e-07, -1.71635605283881887e-07, -1.14802453765605605e-07, -5.83980472868006473e-08, -0.999999880790710449, 9.06769344055646798e-08, -6.72790250177968119e-08, -1.16262185656523798e-07, -1.66106829624368402e-07, -1.89340482847910607e-07, -1.67429774933225417e-07, -1.16971357044803881e-07, -6.70295676741261559e-08, 6.16310202872227819e-08, 1.07957376371814462e-07, 1.55216781649869517e-07, 1.75798973600649333e-07, 1.53559994942042977e-07, 1.05230533620215283e-07, 5.45660796547053906e-08, 0.999999880790710449, 4.44475283245537867e-08, 1.00071723352357367e-07, 1.53977353534173744e-07, 1.77832077952189138e-07, 1.56009349439045764e-07, 1.08750747074282117e-07, 6.40015755948297738e-08, -6.25854426061778213e-08, -8.99901877460251853e-08, -1.02110540467492683e-07, -8.630121328678797e-08, -5.36948618901078589e-08, 1.04761411989784392e-07, -0.999999880790710449, 1.00485252119142388e-07, -9.54521084395310027e-08, -1.10213548509818793e-07, -9.709862780482581e-08, -6.68540423021113384e-08, -5.09003683646369609e-08, 4.87117972625128459e-08, 0.999999880790710449, -4.52649473459132423e-08, 4.25542054927063873e-08, 3.35128831352449197e-08, -0.999999880790710449, 5.25762828829101636e-08, 1.00000011920928955, 5.07250703662975866e-08, -1.00000011920928955, 1.00000011920928955, -0.999999940395355225, 0.999999940395355225, -1, 4.22928003729339252e-08, 0.999999821186065674, -4.16141290315863444e-08, 4.70748915404328727e-08, -0.999999940395355225, 5.36589794819519739e-08, 1.03448584809484601e-07, 1.00000011920928955, -7.37825587293627905e-08, -1.00000011920928955, -7.48210595702403225e-08, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -0.999999940395355225, 0.999999940395355225, 4.11485103768427507e-08, -0.999999940395355225, 5.18041076702502323e-08, 0.999999940395355225, -0.999999821186065674, 0.999999821186065674, -0.999999940395355225, 1.00000011920928955, -1.00000011920928955, 1, 3.98441493132395408e-08, -1, 5.01835906163705658e-08, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -7.63758478683485009e-08, -1.00000011920928955, -7.57559348585346015e-08, 7.68364074588134827e-08, 1.00000011920928955, 7.71507018271222478e-08, -7.71401005295047071e-08, -1.00000011920928955, -7.88536382856364071e-08, 8.06643285500285856e-08, 1.00000011920928955, 7.7440027723696403e-08, 3.87469363261061517e-08, -7.75942581299204903e-08, -1.00000011920928955, -7.83315172725451703e-08, 4.86161333412837848e-08, 1, -1.00000011920928955, 1.00000011920928955, 9.77187184503236494e-08, -1, 1, -1, 1, 3.78793991728798574e-08, -0.999999821186065674, 4.69753658194349555e-08, 0.999999821186065674, -1, 1, -1, 1, -0.999999880790710449, 0.999999880790710449, -8.05038382623024518e-08, -1.00000011920928955, -7.83043603291844192e-08, 7.88173792898305692e-08, 1.00000011920928955, 8.5998884458149405e-08, -8.61985469668979931e-08, -1.00000011920928955, -7.82628930551254598e-08, 7.94415839777684596e-08, 1.00000011920928955, 8.36853430996598036e-08, -1, 1, -1, 1, -0.999999940395355225, 0.999999940395355225, -1.00000011920928955, -9.61351034334256838e-08, 0.999999880790710449, -0.999999821186065674, -9.66535296242909681e-08, 0.999999880790710449, -0.999999940395355225, 0.999999940395355225, -1, 1, -1, 1.02737146789877443e-07, 1.00000011920928955, 1.01131462315606768e-07, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -0.999999821186065674, 1, -1.00000011920928955, 0.999999880790710449, -1.00000011920928955, 1.00000011920928955, -0.999999880790710449, 0.999999880790710449, -1.00000011920928955, 0.999999880790710449, -1, 1.00000011920928955, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -0.999999821186065674, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -0.999999880790710449, 1.00000011920928955, -1.00000011920928955, 0.999999880790710449, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 0.999999880790710449, -1, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -1.00000011920928955, 0.999999940395355225, 7.48933999261680583e-08, -0.999999880790710449, 8.72180123678845121e-08, 0.999999940395355225, 1.23280926800362067e-07, -0.999999880790710449, 0.999999880790710449, -1.25522845451087051e-07, -0.999999940395355225, -8.54306989594988408e-08, 0.999999880790710449, -8.26037407364310639e-08, -0.999999880790710449, -9.06975827774658683e-08, 0.999999880790710449, -8.35238722629583208e-08, -0.999999880790710449, 0.999999940395355225, -0.999999940395355225, 1.03460749301120813e-07, 1.08496266193469637e-07, 8.33035542768811865e-08, 0.999999880790710449, 5.82611185961923184e-08, 9.16757159075132222e-08, 9.54983718770563428e-08, 7.1513788668653433e-08, -7.61362102252860495e-08, -1.00069875941244391e-07, -9.24986025552243518e-08, -0.999999880790710449, -7.26833420117145579e-08, -1.01234533644856128e-07, -9.78408181140366651e-08, 1.00000011920928955, -7.12797998403402744e-08, -1.17040748648378212e-07, -1.33582261696574278e-07, -1.08245529872874613e-07, -6.90287507154607738e-08, -1, -7.1121171174581832e-08, -1.16625926693814108e-07, -1.34358856485050637e-07, -1.09922119406746788e-07, -6.86591334897457273e-08, 1.25891077118467365e-07, 1.20245800871998654e-07, 1, 1.25738708334210969e-07, 1.18794126535703981e-07, -1.00000011920928955, -8.70176037892633758e-08, 0.999999821186065674, -0.999999880790710449, 1.06302863400742353e-07, -1.02927032230581972e-07, 0.999999880790710449, -0.999999821186065674, 0.999999880790710449, -9.88048611816338962e-08, -1, 1, -1, 1, -1, 1, -0.999999940395355225, 1, -1, 0.999999880790710449, -0.999999880790710449, 1.00854798290583858e-07, 1.00000011920928955, 1.03031815967824514e-07, -0.999999880790710449, 0.999999880790710449, -1.06433915902925946e-07, -1, -1.01633816029789159e-07, 0.999999880790710449, -0.999999880790710449, 1.02380198541140999e-07, 0.999999880790710449, -0.999999880790710449, 1, -1.00000011920928955, 1, -1.00000011920928955, 1.00000011920928955, -1, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1, -1, 1, -1, 1, -1, 8.15933063336160558e-08, 1.00000011920928955, 7.68584342836220458e-08, -7.79283340079928166e-08, -1.00000011920928955, -8.2169236748086405e-08, 1, -1, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1, 0.999999880790710449, -1, 1, -1, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -1.00000011920928955, -9.07651127590725082e-08, 0.999999880790710449, -1, 1.00000011920928955, -0.999999940395355225, 0.999999821186065674, 9.04788706179715518e-08, -0.999999880790710449, 8.77867307735868962e-08, 0.999999821186065674, -0.999999880790710449, 0.999999821186065674, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 1, -1, 1, -1.00000011920928955, -7.70701547025964828e-08, 0.999999940395355225, -7.22738207059592241e-08, -1, 1.00000011920928955, -1, 1, -0.999999940395355225, 0.999999880790710449, 7.30779774471557175e-08, 1.03917116689444811e-07, -0.999999880790710449, 9.51845748886626097e-08, 6.66348469735567051e-08, -6.56549872246614541e-08, -9.50355740769737167e-08, 0.999999880790710449, -1.03326982525686617e-07, -7.17683263928847737e-08, -0.999999940395355225, 0.999999940395355225, -1, 0.999999940395355225, -1, 1, -0.999999940395355225, 1, -1.00000011920928955, 1.00000011920928955, -0.999999880790710449, 0.999999821186065674, -0.999999880790710449, 0.999999821186065674, -0.999999821186065674, 0.999999821186065674, -0.999999821186065674, 0.999999821186065674, 6.43842525960280909e-08, 1.01173199595905317e-07, -0.999999880790710449, 1.09416610882817622e-07, 7.35839478238631273e-08, -7.93085703776341688e-08, -1.08154154077055864e-07, 0.999999880790710449, -1.01965426324568398e-07, -7.37401748551747005e-08, 6.48261035962605092e-08, 1.03926396377573838e-07, -0.999999880790710449, 1.03741314205763047e-07, 6.42649595761213277e-08, 0.999999880790710449, 5.84863464325735549e-08, 8.45845988806104288e-08, -0.999999880790710449, 7.25280457913868304e-08, -8.79306867318518925e-08, 0.999999880790710449, -9.50510212760491413e-08, -1.00000011920928955, 1.00000011920928955, -0.999999880790710449, 1.00000011920928955, -1, 1, 8.70939231845113682e-08, -0.999999880790710449, 8.1013503461235814e-08, 0.999999880790710449, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, 6.35064836274068512e-08, 9.96526381413787021e-08, -0.999999880790710449, 1.00766520461093023e-07, 1, 1.01899416904416285e-07, -0.999999880790710449, 0.999999880790710449, -9.63715081070404267e-08, -1.00000011920928955, 1.00000011920928955, -7.6708609242359671e-08, -1.19873078574528336e-07, -1.4151009963825345e-07, -1.26584097870363621e-07, -9.3020645408614655e-08, -1.00000011920928955, -9.09391602021969447e-08, -1.26788876286809682e-07, -1.40574172746710246e-07, -1.20440162731938472e-07, -8.37513454143845593e-08, 6.36365129480509495e-08, 8.6854583969397936e-08, 9.80620882273797179e-08, 8.37253892882472428e-08, 5.26573309400646394e-08, 0.999999880790710449, 9.43568068123568082e-08, 1.10966759336861287e-07, 9.60200026156599051e-08, 6.33592449617026432e-08, -1, 1, -0.999999880790710449, 1.04761674890596623e-07, -8.2630165820773982e-08, -1.26939539768500254e-07, -1.42958171522877819e-07, -1.17255211762312683e-07, -7.8816455584274081e-08, 0.999999880790710449, -8.30421100772582577e-08, -1.26223312690854073e-07, -1.43025943089014618e-07, -1.16974753439080814e-07, -7.42094954375716043e-08, 6.69019541987836419e-08, 9.61020418799307663e-08, 1.21146797482651891e-07, 1.19090266537114076e-07, 8.89206432930222945e-08, -0.999999880790710449, 7.8590311147763714e-08, 1.01190401835538069e-07, 1.20247435120290902e-07, 1.13569292636839236e-07, 8.0500129229221784e-08, 0.999999880790710449, -1.18207594823616091e-07, 6.2461644745326339e-08, 8.04454671765597595e-08, 7.01939413261243317e-08, -0.999999880790710449, 6.78083793559380865e-08, 7.96956243220847682e-08, 6.60241781247350445e-08, -8.21733792122358864e-08, 0.999999880790710449, -7.71937109789178066e-08, 1.02046378458453546e-07, 1.12691537879072712e-07, -0.999999880790710449, 1.03737882284349325e-07, 1.10262497798885306e-07, -8.18536776137079869e-08, 0.999999880790710449, -7.99037422893889016e-08, -1.00000011920928955, -6.97810591532288527e-08, 0.999999940395355225, -6.94384212351906172e-08, -1.00000011920928955, -1.03206375001718698e-07, 0.999999880790710449, -0.999999880790710449, 9.97666091961946222e-08, 1.00000011920928955, -1.00000011920928955, 0.999999880790710449, -1.00000011920928955, -5.56369563753378316e-08, -1.02120807810024417e-07, 0.999999880790710449, -1.14307830756388284e-07, -6.82357992332072172e-08, -0.999999821186065674, -8.40477127894700971e-08, -1.30868016867680126e-07, 0.999999880790710449, -1.05496056335141475e-07, -0.999999880790710449, 9.98299611865149927e-08, 0.999999940395355225, 5.42453371110696025e-08, 1.01548458530942298e-07, -0.999999880790710449, 1.171524459664397e-07, 7.01959521620665328e-08, 0.999999940395355225, 7.58943343726059538e-08, 1.20039416628969775e-07, -0.999999880790710449, 1.00641763367548265e-07, 6.06450711870820669e-08, 0.999999880790710449, -9.44426119531271979e-08, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 0.999999940395355225, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 1, -0.999999880790710449, 0.999999880790710449, -1.00000011920928955, 0.999999880790710449, -1.00000011920928955, 1.00000011920928955, -0.999999940395355225, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -1.00000011920928955, 8.37931040109651804e-08, 1.35260890488098084e-07, 1.00000011920928955, 1.32242149675221299e-07, 8.17180776380155294e-08, -1.00000011920928955, 0.999999940395355225, -1.00000011920928955, 0.999999940395355225, -0.999999940395355225, 1.00000011920928955, -0.999999940395355225, 8.61079811897980107e-08, 1.00000011920928955, -1.00000011920928955, -8.42191454353269364e-08, -1.06251754061759129e-07, 0.999999880790710449, -1.01757116510725609e-07, -1, 1, -1, 8.96616896284285758e-08, 1.00000011920928955, 9.53635534983732214e-08, -1, 1, -0.999999940395355225, 1, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 1.00000011920928955, -0.999999940395355225, 8.92694060894427821e-08, 1.00000011920928955, -1.00000011920928955, -9.2013451080674713e-08, -8.03202482302367571e-08, 0.999999880790710449, -8.56745288047022768e-08, -1.00831684335389582e-07, -1.00000011920928955, 1.00000011920928955, 1.04898141728426708e-07, -1.06240094055465306e-07, -1.00000011920928955, 1.00000011920928955, 9.91573898545539123e-08, 7.73512311980084633e-08, -0.999999880790710449, 6.7209214194008382e-08, 1.13643636723281816e-07, 1.00000011920928955, -1.00000011920928955, -1.15781965348560334e-07, 1.00000011920928955, -9.39390218945845845e-08, -1.54316282419131312e-07, -1.0000002384185791, -1.51578973373034387e-07, -9.0665729146621743e-08, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.04326645100627502e-07, 1.55237785293138586e-07, 1.00000011920928955, 1.39126129283795308e-07, 9.24893228670953249e-08, 6.00168164055503439e-08, -7.22326092272851383e-08, -1.09502977352349262e-07, -1.59811435196388629e-07, -1.0000002384185791, -1.79676035827469605e-07, -1.25659170180369983e-07, -7.04313336541417812e-08, 7.30660758563317358e-08, 8.76420713780134975e-08, 1.00000011920928955, 7.5801622756443976e-08, -8.99062939652139903e-08, -1.00000011920928955, -8.97007055300491629e-08, -8.8322885005709395e-08, 0.999999880790710449, -0.999999880790710449, 9.21115059782096068e-08, -8.88304469981449074e-08, 0.999999880790710449, -0.999999821186065674, 0.999999821186065674, 6.19063200701930327e-08, 9.54344585579747218e-08, -0.999999880790710449, 9.18118558956848574e-08, 5.87834705356726772e-08, -6.15602999687325791e-08, -9.0400902763576596e-08, 0.999999880790710449, -9.55811714220544673e-08, -6.56686864886069088e-08, 6.52810498991129862e-08, 9.54379686390893767e-08, -0.999999880790710449, 9.17914420028864697e-08, 6.22032914066039666e-08, -6.05992553914802556e-08, -9.21609526471911522e-08, 0.999999880790710449, -9.26349414953619998e-08, -6.1229052050748578e-08, 7.84873108727879298e-08, -0.999999880790710449, 8.08237743399331521e-08, 0.999999821186065674, -0.999999821186065674, 0.999999821186065674, -0.999999880790710449, 9.6812023286929616e-08, 0.999999880790710449, 8.58565911698860873e-08, 1.13349933883455378e-07, -0.999999880790710449, 1.05794967453221034e-07, 7.9715448464412475e-08, -8.46318997105299786e-08, -1.06632562335562397e-07, 0.999999880790710449, -1.1589304449444171e-07, -9.26832370851116139e-08, 7.48646513670792046e-08, 8.72077592362074938e-08, -0.999999880790710449, 8.13542726518790005e-08, 6.84645087289936782e-08, -1.09168126982694957e-07, 0.999999880790710449, -1.10006183717814565e-07, 8.67864784481753304e-08, 9.88844064409022394e-08, 8.47813836912791885e-08, 9.34839547994670284e-08, -0.999999880790710449, 9.62912451996089658e-08, 8.36055491504339443e-08, 9.97628930576865969e-08, 8.89261144720876473e-08, -7.39820507078547962e-08, -8.72573977517276944e-08, -8.09245719324280799e-08, -9.93357360812296974e-08, 0.999999880790710449, -9.41126359066402074e-08, -1.10068448577749223e-07, -1.17880126992986334e-07, 8.29816357850177155e-08, 9.29587216091931623e-08, 8.25085209044118528e-08, 8.04899897843824874e-08, -0.999999880790710449, 8.91077291953479289e-08, 6.34620178630029841e-08, 8.49853236672970525e-08, 9.49292200402851449e-08, 7.81514515324488457e-08, -7.5929307286060066e-08, -8.71806662416929612e-08, -7.78712561100292078e-08, -6.89129464603865927e-08, -9.02590642226641648e-08, 0.999999880790710449, -8.3577667453482718e-08, -1.18122045478230575e-07, -1.1076205908011616e-07, 8.07210085440601688e-08, 9.27193752886523725e-08, 8.24709758262542891e-08, 9.2711388788302429e-08, -0.999999880790710449, 9.02034358318815066e-08, 7.83348568234032427e-08, 9.90305224490839464e-08, 9.86680461778632889e-08, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, 9.18090563573059626e-08, 1.01126822471542255e-07, 8.03511781555243942e-08, 1.17943841360101942e-07, -0.999999880790710449, 1.13012433189396688e-07, 9.34731403390287596e-08, 9.99925902078757645e-08, 7.3888649865239131e-08, 8.10045008847737336e-08, 1.00000011920928955, 5.75948355674427148e-08, 1.19634464113005379e-07, 1.6556325022065721e-07, 1.40075144372531213e-07, 1.34621558345315862e-07, 1.76105729110531684e-07, -0.999999821186065674, 1.09680115656374255e-07, 7.30696072537284635e-08, 6.5966133888650802e-08, 1.20027735306393879e-07, 1.6655762635764404e-07, 1.42760228527549771e-07, 4.29601918483513145e-08, 5.34931423601392453e-08, -6.08907839705352671e-08, -6.92087951392750256e-08, 8.57966568901247228e-08, 7.43456922691621003e-08, 1, 8.00854706994869048e-08, -3.68227901503814792e-08, -5.12713391742636304e-08, 4.71558543324590573e-08, 8.04761981498813839e-08, 1.92828409240064502e-07, 2.99447975748989847e-07, 2.99137695947138127e-07, 1.85087742465839256e-07, 7.35370448978756031e-08, 7.65642198530258611e-08, 1.10064227953898808e-07, 1.0921471016445139e-07, 7.47725934502341261e-08, -0.999999940395355225, 8.50446113531688752e-08, 1.8738211338131805e-07, 2.99586986329813953e-07, 3.09182894397963537e-07, 1.98565700770814146e-07, 8.38942142422638426e-08, 5.87108992533558194e-08, 5.5702411572156052e-08, 5.7887001858603071e-09, 6.18678583919063385e-08, 1.46339516504667699e-07, 1.81308593028006726e-07, 1.17703798707680107e-07, -1.13421613434638857e-07, 0.999999880790710449, -1.04928574273799313e-07, -6.207953617831663e-08, 1.33626485876447987e-07, 1.86823555736737035e-07, 1.37634913244255586e-07, 7.38906393848992593e-08, 6.41401030065935629e-08, -3.09069214665669278e-08, -1.06863112137034477e-07, -1.95599966446025064e-07, -3.58041205572590115e-07, -6.05339948833716335e-07, -7.94987670360569609e-07, -7.49538685340667143e-07, -4.99675365972507279e-07, -2.28338151941898104e-07, -4.78629580413780786e-08, 7.43385371038129961e-08, 1.10253395746440219e-07, -0.999999821186065674, 1.41270476206045714e-07, -3.97198540724730265e-08, -1.2980991925815033e-07, -2.20308237430799636e-07, -3.7196721791588061e-07, -6.05243087647977518e-07, -7.86304212851973716e-07, -7.38185235604760237e-07, -4.88885973481956171e-07, -2.20628677993772726e-07, -4.30538129592150653e-08, 6.70745947672912735e-08, 1.57183350779632747e-07, 2.04032417627786344e-07, 1.80759940349162207e-07, 1.26829206692491425e-07, 1.0982623876998332e-07, 1.31602845954148506e-07, 1.40487657063204097e-07, 1.09998190112037264e-07, 5.54212213899063499e-08, 1, 6.39876915897730214e-08, 1.48081767292751465e-07, 2.01636026986307115e-07, 1.85269499297646689e-07, 1.32876323277741903e-07, 1.13249903677115071e-07, 1.2982535224637104e-07, 1.31909260403517692e-07, 9.42393754144177365e-08, 2.78634448847014937e-08, -5.00758154942104738e-08, -1.73694800764678803e-07, -4.14087026001652703e-07, -6.99227371114830021e-07, -8.27091525934520178e-07, -6.85438976688601542e-07, -4.11506675845885184e-07, -1.94164613276370801e-07, -7.97190722323648515e-08, 1.22662925150507363e-07, -0.999999821186065674, 1.13901286624695786e-07, -7.10391674374477589e-08, -1.86008904279333365e-07, -4.16347120335558429e-07, -6.97427537943440257e-07, -8.27001144898531493e-07, -6.88093621192820137e-07, -4.13361135542800184e-07, -1.89083792179189913e-07, -6.36917150131921517e-08, 3.35297478670781857e-08, 1.03375342064282449e-07, 1.30022158373321872e-07, 1.22395206858527672e-07, 1.21499581950956781e-07, 1.58121181925707788e-07, 2.00439274067321094e-07, 1.93820454796878039e-07, 1.36264930006291252e-07, 6.9719348516628088e-08, 7.4552538364969223e-08, 1.00000011920928955, 7.21910780043799605e-08, 1.19351611260753998e-07, 1.40285877137102943e-07, 1.29935415316140279e-07, 1.22589412399065623e-07, 1.50677962551526434e-07, 1.8896538733770285e-07, 1.86388405154502834e-07, 1.35787885824356636e-07, 6.6366602879952552e-08, -1.7514521744033118e-07, -3.826131944606459e-07, -5.6200013887064415e-07, -5.9372842997618136e-07, -4.6411869902840408e-07, -2.90721061446674867e-07, -1.64783315881322778e-07, -7.9295460864159395e-08, 9.83331034376533353e-08, 1.72092356365283194e-07, -0.999999821186065674, 1.43520992423873395e-07, 1.0056737664854154e-07, 5.94370916928710358e-08, -1.68828137248056009e-07, -3.79737599587315344e-07, -5.6824433158908505e-07, -6.07726974521938246e-07, -4.74886775236882386e-07, -2.88174021534359781e-07, -1.51668132275517564e-07, -7.21015851468109759e-08, 5.25758068192772043e-08, 6.77203289001226949e-08, 6.57866365827430855e-08, 8.30715265465187258e-08, 1.44300599913549377e-07, 2.15662922187220829e-07, 2.26042217832400638e-07, 1.60930810011450376e-07, 7.33279179598866904e-08, -5.71983207464654697e-08, -9.81111227815745224e-08, 0.999999880790710449, -1.08774862894733815e-07, 5.55647936550940358e-08, 6.3100031866270001e-08, 7.98096877474563371e-08, 1.34840490773058264e-07, 2.06076634867713437e-07, 2.29778351013010251e-07, 1.83693529720585502e-07, 1.07366595614166727e-07, -9.49432248376069765e-08, -1.71157282125022903e-07, -2.12435409707723011e-07, -2.01138490751873178e-07, -1.57028267722125747e-07, -1.12815037311975175e-07, -7.53483249127384624e-08, 5.69994078603031085e-08, 8.21080590185374604e-08, -0.999999940395355225, 8.47310985818694462e-08, 7.74817010551487328e-08, 4.96632353019776929e-08, -9.3645979859502404e-08, -1.80171198849166103e-07, -2.29967270115594147e-07, -2.14276511201205722e-07, -1.53596459995242185e-07, -9.61969846002830309e-08, -6.2258330046915944e-08, 8.86870950012053072e-08, 1.60267461524199462e-07, 2.09508840498529025e-07, 1.88320655070128851e-07, 1.17366376173322351e-07, -6.35134327353625849e-08, 0.999999940395355225, -5.93698743500681303e-08, 6.64586252696608426e-08, 1.36385168048036576e-07, 1.96935374674467312e-07, 1.94738575487463095e-07, 1.35312831162082148e-07, 6.63750370222260244e-08, -8.24821171363510075e-08, -1.27393676052633964e-07, -1.55385563971321972e-07, -1.60267944693259778e-07, -1.44207135122087493e-07, -1.13722244066138956e-07, -7.28652196357870707e-08, 6.77373606094988645e-08, -0.999999940395355225, 7.0136380259100406e-08, 5.88282098590298119e-08, -8.9026059413299663e-08, -1.40332190312619787e-07, -1.66328860018438718e-07, -1.58929466920199047e-07, -1.29869405895988166e-07, -9.90049144888871524e-08, -7.30724494246715039e-08, 1.05612869560900435e-07, 1.75425796555828128e-07, 2.06050856377260061e-07, 1.67222324876092898e-07, 9.75877796349777782e-08, -6.35843875329555885e-08, 0.999999940395355225, -5.67502631554361869e-08, 8.97062477633880917e-08, 1.66789959621382877e-07, 2.1170268382775248e-07, 1.84200587227678625e-07, 1.11995419160848542e-07, 1.14926493210987246e-07, 1.24704115478380118e-07, -6.41316830751748057e-08, -1.00000011920928955, 8.13345693018163729e-08, 1.01766623572530079e-07, 7.63211005505581852e-08, -1.39354014550008287e-07, 1.00000011920928955, 9.22115148682678409e-08, 5.98236837845433911e-08, -5.20365688316815067e-08, -9.01628425253875321e-08, -1.00000011920928955, 1.3776640628293535e-07, -1.38348028144719137e-07, 1.00000011920928955, 1.05046396470243053e-07, -5.89787703120236984e-08, -8.3891144697645359e-08, -1.00000011920928955, -7.81616265044249303e-08, -1.30217486571382324e-07, -1.45694897923931421e-07, -1.05721383647505718e-07, 9.63785780072612397e-08, 1.00000011920928955, 9.159219871435198e-08, -5.50299290580369416e-08, -1.02861910988849559e-07, -1.31047258378202969e-07, -1.12621954428959725e-07, -6.72865994033600145e-08, -1, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 9.93255611092536128e-08, 8.64591385152380099e-08, -8.09413265301373031e-08, 0.999999880790710449, -9.96736773117845587e-08, 9.85511121598392492e-08, 9.28429955138199148e-08, 1.49688716533091792e-07, -8.29497821541735902e-08, -1.00000011920928955, -8.34781843650489463e-08, 1.54630072302097687e-07, 1.31491461274890753e-07, -7.1573587945295003e-08, 0.999999940395355225, 1.3821737354646757e-07, -0.999999940395355225, 7.90664742567059875e-08, -8.00322368377237581e-08, 0.999999940395355225, 1.45287060604459839e-07, -1.29724568864730827e-07, -0.999999940395355225, 6.97140833949561056e-08, -1.41419960186794924e-07, 9.63383328667077876e-08, 1.00000011920928955, 9.5939725497373729e-08, -8.24411188204976497e-08, -7.28954603346210206e-08, -1.04847323711965146e-07, -1.17610738925577607e-07, 8.01336952349629428e-08, -0.999999880790710449, 6.06786656476288044e-08, -7.07402350030861271e-08, -8.68325713554440881e-08, -6.94769539677508874e-08, 0.999999940395355225, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, -6.40896118397904502e-08, 0.999999940395355225, -6.5310722163758328e-08, 1.50697502476759837e-07, -1.00000011920928955, 1.53866366758848017e-07, 1, -1, 1, -1, 1, 7.31757410221689497e-08, -0.999999880790710449, 9.32606027959081985e-08, 7.0902878235301614e-08, 1.00000011920928955, 7.75296982169493276e-08, 8.8711139767383429e-08, -0.999999880790710449, 7.95783421381202061e-08, 0.999999880790710449, -9.98738656221576093e-08, -7.77275843688585155e-08, 7.1274534718668292e-08, 1.07506274105162447e-07, -0.999999880790710449, 1, -1.0058813870728045e-07, -1.00000011920928955, -1.24390282962849597e-07, -6.37565804595396912e-08, 1.30111288854095619e-07, -5.55853922890037211e-08, 0.999999940395355225, -5.60961765927459055e-08, 7.75597612800993375e-08, 7.38176808567914122e-08, -8.73763568165486504e-08, -1.53371431110826961e-07, -1.00000011920928955, -1.22772306099250272e-07, -5.23371390670490655e-08, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, 9.66486837228330842e-08, -0.999999880790710449, 1.42554554827256652e-07, 8.48654551077743236e-08, 7.12878716058185091e-08, 1.00000011920928955, 9.55410044412019488e-08, 1.01854780609755835e-07, -0.999999880790710449, 1.02801799073404254e-07, 9.29732522081394563e-08, 1.00000011920928955, 7.32304172856856894e-08, 5.97402092239462945e-08, 1.06718580639153515e-07, -0.999999880790710449, 7.57115117266948801e-08, -9.0128153829027724e-08, 0.999999940395355225, -9.29318773046361457e-08, -1.00000011920928955, 1.00000011920928955, 1.04665325295627554e-07, 8.57204440762870945e-08, -8.9097149214012461e-08, -1.00000011920928955, -1.04683820723039389e-07, 9.07120494275659439e-08, 9.01819419141247636e-08, 1.08869400605726696e-07, 8.97095446816820186e-08, 1, 9.57036974114089389e-08, 9.44120657209168712e-08, 8.87063222876349755e-08, 1.00843038808307028e-07, -8.90428921707098198e-08, -1.00000011920928955, -9.87403012686627335e-08, 9.24953269532124978e-08, 9.23737744074060174e-08, 9.30776664631594031e-08, 1.02421175540712284e-07, 1, 1.00132808711350663e-07, 9.61997272952430649e-08, 9.08636366148130037e-08, 9.42720035368438403e-08, -9.60110995151808311e-08, -1.00000011920928955, -8.75111609843770566e-08, 1.00179249784559943e-07, 9.18903921842684213e-08, 1, -9.98598537194084201e-08, -1.00000011920928955, 1.00000011920928955, 7.98062274043331854e-08, 5.55888632902679092e-08, -9.08386539322236786e-08, -7.28658662296766124e-08, 9.48061185113147076e-08, -0.999999880790710449, 1.31706272554765746e-07, 7.42622745519838645e-08, -1.31532317482196959e-07, 1.12374578975504846e-07, 1.00000011920928955, 1.39953314715057786e-07, 7.5813233024746296e-08, -1.38204086397308856e-07, 1.03791315098078485e-07, -0.999999880790710449, 1.23910083971168206e-07, 6.35504164847588982e-08, -1.37551936063573521e-07, -1.27604721456009429e-07, 4.7367848310386762e-08, 1.10575854250782868e-07, 1.00000011920928955, 1.21084951842931332e-07, 5.71990383946285874e-08, -6.48937898972690164e-08, -8.01064956590380461e-08, -7.46042800869872735e-08, -8.13804490462644026e-08, 5.41096873973856418e-08, 1.187576401662227e-07, -0.999999880790710449, 1.09286574456746166e-07, -7.80571198788493348e-08, -8.46240695295819023e-08, -1.27933489579845627e-07, 7.33516216655516473e-08, 1.43624120596541616e-07, 1.00000011920928955, 1.07062660958945344e-07, -1.36938609784920118e-07, -1.39133689458503795e-07, 8.3047162036109512e-08, 1.41114654184093524e-07, -0.999999880790710449, 8.30288442443816166e-08, -6.93071697810410114e-08, -9.71145723838162667e-08, 8.43113028281550214e-08, 6.99585811503311561e-08, 0.999999880790710449, -1.24876123663852923e-07, -8.31328179629053921e-08, 8.88450415459374199e-08, 6.67615367433427309e-08, 9.27150409779642359e-08, 6.88507029167340079e-08, -8.23172783270820219e-08, -1.00000011920928955, -1.22231767818448134e-07, -6.5010048899694084e-08, 1.326945948676439e-07, 1.0296737684711843e-07, 1.19358347205889004e-07, 8.46693026801403903e-08, -9.68279678659200727e-08, 0.999999880790710449, -1.10698429978128843e-07, -5.49380274605937302e-08, 7.71196440041421738e-08, 9.42713924700910866e-08, 8.72056631351370015e-08, 5.45896625681052683e-08, 9.70393614352360601e-08, 1.04205930995249219e-07, 7.05040577031468274e-08, -1.06899690877071407e-07, -1.00000011920928955, -1.05487330870346341e-07, -5.59693837942631944e-08, 6.74719942139745399e-08, 8.30871016432865872e-08, 7.77854936018229637e-08, 4.91507918809475086e-08, 1.08031940726505127e-07, 1.14192857836314943e-07, 8.57597299841472704e-08, -5.16369880187994568e-08, -9.18099445357256627e-08, 0.999999880790710449, -9.27054486510314746e-08, -5.00468360087324982e-08, 7.16379489063001529e-08, 9.3562618985743029e-08, 9.20789275937750062e-08, 6.02549050654488383e-08, 9.2673261065101542e-08, 1.00508273703781015e-07, 7.99121977479444467e-08, -4.88128186759695382e-08, -8.98735308396680921e-08, -1.00000011920928955, -9.70144995449118142e-08, -4.88482569949155732e-08, 1.07975424157302768e-07, 1.08440708856960555e-07, 6.8142576026275492e-08, 5.3649984010917251e-08, 8.818763319595746e-08, 9.8342191279243707e-08, 7.70672556882345816e-08, -5.14345863678045134e-08, -1.03886485192106193e-07, 0.999999880790710449, -1.03815843033316924e-07, 7.30241467294945323e-08, 1.16028289198766288e-07, 1.11469681485232286e-07, 4.94685110652426374e-08, 8.27522370627775672e-08, 8.69532215119761531e-08, 6.05560899202828296e-08, -5.73019711680444743e-08, -1.16180807196997193e-07, -1.00000011920928955, -8.97959751000598771e-08, 6.80606362379876373e-08, 1.07901442447655427e-07, 9.28600840666149452e-08, 8.23571184582760907e-08, 1.2070699995092582e-07, 1.18507507806953072e-07, -7.39205248123653291e-08, -1.28928846265807806e-07, 0.999999880790710449, -7.12183734208338137e-08, 9.13690172410497325e-08, 1.20779773737922369e-07, 9.33718808937555877e-08, -0.999999940395355225, 6.81816700875970128e-08, 4.8126228335831911e-08, -9.04291326264683448e-08, -1.25569371789424622e-07, -1.04255391875085479e-07, 1.34979515564737085e-07, 1.0000002384185791, 1.93760286038013874e-07, 1.15442297499157576e-07, -8.29775999022785982e-08, -1.02347705421834689e-07, -9.72772653540232568e-08, -6.42204796008627454e-08, -7.0414472475022194e-08, -8.88534046339373162e-08, -5.84910075929201412e-08, 1.38853849307452037e-07, -0.999999821186065674, 1.63627618121608975e-07, 8.50768060445261654e-08, -1.16061059429739544e-07, -9.91430724184283463e-08, -1.13495829623389e-07, -1.23051336231583264e-07, -8.59386730667210941e-08, 7.49768460650557245e-08, 1.52261279140475381e-07, 1.0000002384185791, 1.50255132780330314e-07, 8.0760699461279728e-08, -6.26615133114682976e-08, -8.36752604982393677e-08, -8.82801955981449282e-08, -7.20398389830734232e-08, -4.41612186818929331e-08, -1.07137829274961405e-07, -1.10838549005620735e-07, 7.81252254000719404e-08, 1.39860176773254352e-07, -0.999999821186065674, 1.32572083089144144e-07, 7.72142243476992007e-08, -7.59234666247721179e-08, -7.9889808546340646e-08, -7.12637202582300233e-08, -5.19905576368273614e-08, -7.86520573115012667e-08, -8.49503365429882251e-08, -7.46425286024532397e-08, -5.91876556654824526e-08, 9.04183963257310097e-08, 1.48561753121612128e-07, 1.00000011920928955, 1.53781442691069969e-07, 9.37400912448538293e-08, -5.63294690891780192e-08, -7.03142433167158742e-08, -8.56512656355334911e-08, -8.49865386953752022e-08, -5.78339935941585281e-08, -6.65373036667915585e-08, -8.08620157499717607e-08, -7.67375780696966103e-08, 7.2275533113952406e-08, 1.30226936789767933e-07, -0.999999821186065674, 1.44453693451396248e-07, 7.82409586008725455e-08, -1.10208176806736446e-07, -1.08781371466193377e-07, -4.98283654337683402e-08, -8.74455778898663993e-08, -1.06486794493321213e-07, -9.35685946501507715e-08, 7.63281065019327798e-08, 1.50852088154351804e-07, 1.0000002384185791, 1.52944579667746439e-07, 7.32061735675415548e-08, -8.51829895509581547e-08, -1.23801981999349664e-07, -1.14380682703085768e-07, -1.02534500001638662e-07, -1.13587880434806721e-07, 8.539335283330729e-08, 1.66641939358669333e-07, -0.999999821186065674, 1.38037933083978714e-07, -5.83049484248476801e-08, -8.83098110193714092e-08, -7.27686000345784123e-08, -7.28687652440385136e-08, -1.04089984631627885e-07, -1.00328449548214849e-07, -7.42020489497008384e-08, 1.09763661271244928e-07, 1.83559876631989027e-07, 1.0000002384185791, 1.24851425198357902e-07, 6.3597717314678448e-08, -1.01382745754108328e-07, -1.25293880159915716e-07, -9.71297993146436056e-08, 9.25088130543372245e-08, 8.3528036043389875e-08, -1.00000011920928955, -1.05536258843130781e-07, -6.86122518800402759e-08, 1.6458821505693777e-07, 1.05748142686934443e-07, 1.40301068540793494e-07, 1.08692454148240358e-07, -1.18470417476146395e-07, 0.999999821186065674, -1.62296089456503978e-07, -9.39202209337963723e-08, 9.08326427406791481e-08, 1.16198997091032652e-07, 1.12100423166339169e-07, 7.65368923794085276e-08, 6.46859845687686175e-08, 1.3008880728193617e-07, 1.53141129999312398e-07, 1.07809206895126408e-07, -1.06176024416981818e-07, -1.00000011920928955, -1.1674685396201312e-07, -5.56989938615970459e-08, 6.85147369949845597e-08, 1.0800035710190059e-07, 1.315464714934933e-07, 1.13913593224879151e-07, 6.75989539900001546e-08, 6.06446874940047564e-08, 1.13387613964732736e-07, 1.19557427069594269e-07, 7.69575123626964341e-08, -7.48158370811324858e-08, -1.37776098085851118e-07, 0.999999821186065674, -1.21598958457980189e-07, -6.45412114863574971e-08, 6.78833558254154923e-08, 1.07323245401858003e-07, 1.19529971698284498e-07, 9.23381904271991516e-08, 7.55746043523686239e-08, 1.21832854915737698e-07, 1.24766700082545867e-07, 9.23622280879499158e-08, 6.09410477636629366e-08, -6.89463703906767478e-08, -1.11678723158092907e-07, -1.00000011920928955, -8.83102515558675805e-08, -5.23004146657513047e-08, 8.93632332576999033e-08, 1.24802141954205581e-07, 1.26354422036456526e-07, 9.38083033474867989e-08, 5.15872038420184253e-08, 5.81196708537845552e-08, 9.05418957586334727e-08, 9.53070582454529358e-08, 8.02657353915492422e-08, 6.12498567420516338e-08, -8.8135045928083855e-08, -1.23918752592544479e-07, 0.999999880790710449, -1.13807203661053791e-07, -8.13165002000459936e-08, -4.21637018632736726e-08, 9.1757975440032169e-08, 1.14858998756517394e-07, 1.11404645508628164e-07, 8.64126192823277961e-08, 6.41606376916570298e-08, 1.01944102937068237e-07, 1.19344861104764277e-07, 1.11316978745890083e-07, 8.38214759824040812e-08, -6.63299033476505429e-08, -9.23739307268078846e-08, -1.00000011920928955, -1.08876186288853205e-07, -8.09716098615353985e-08, 6.04013976612804981e-08, 8.86537350197613705e-08, 1.04703744341350102e-07, 1.08911727636495925e-07, 9.55146290948505339e-08, 6.39565485016646562e-08, 4.28060431545418396e-08, 7.82494140594280907e-08, 1.0020440299740585e-07, 9.49722220866533462e-08, 6.39723580775353184e-08, -6.86735575072816573e-08, -1.0780718895375685e-07, 0.999999880790710449, -1.46871940387427458e-07, -9.93300659501983318e-08, 6.2547961476866476e-08, 8.15731624470572569e-08, 1.01076707892389095e-07, 9.64542081760555448e-08, 6.06296026717245695e-08, 5.66670159685145336e-08, 1.03478704716053471e-07, 1.29402124571242894e-07, 1.13145638636069634e-07, 6.70422863890962617e-08, -8.93141276492315228e-08, -1.00000011920928955, -1.29868155340773228e-07, -7.08734404497590731e-08, 5.89374948845033941e-08, 1.0067358857668296e-07, 1.35894310915318783e-07, 1.22417148418207944e-07, 6.697094079299859e-08, 5.7556437838002239e-08, 1.03771562010024354e-07, 1.20553835358805372e-07, 9.17133178290896467e-08, -4.98137033844159305e-08, -1.21585756573949766e-07, 0.999999821186065674, -1.35975099624374707e-07, -6.48525784185949306e-08, 1.08486446492861432e-07, 1.42022969384925091e-07, 1.1134014954450322e-07, 7.51952455857463065e-08, 1.18747472299673973e-07, 1.20489190180705918e-07, 7.9217478798909724e-08, -6.69102888650741079e-08, -1.4415347493468289e-07, -1.00000011920928955, -1.20784605428525538e-07, -6.04239218660040933e-08, 5.44039586714006873e-08, 1.18125271342250926e-07, 1.32278969999788387e-07, 8.37361895378307963e-08, 9.75598979380265519e-08, 1.30241673446107598e-07, 1.14706963927346806e-07, -9.23047309697722085e-08, -1.56469326384467422e-07, 0.999999821186065674, -1.11747681330598425e-07, -7.53227311633963836e-08, -6.21072686612933467e-08, 8.42493932395882439e-08, 1.38819245876220521e-07, 1.29050135910802055e-07, -8.67079137378823361e-08, -1.40757862254758948e-07, -1.3798066333947645e-07, -7.07864060700558184e-08, 6.21394846689327096e-08, 9.34665678187229787e-08, 1.37578354042489082e-07, 2.13759250300427084e-07, -0.999999701976776123, 2.44547777583647985e-07, 1.42494883448307519e-07, 4.58204887365809554e-08, -6.27089633553623571e-08, -1.22371346833460848e-07, -1.39220105666026939e-07, -9.40170465923984011e-08, -7.89063676620571641e-08, -1.67495258551753068e-07, -2.28655622436235717e-07, -1.98107670712488471e-07, -1.05654805793164996e-07, 6.44950972628066665e-08, 1.28704073176777456e-07, 1.00000011920928955, 1.18010241578758723e-07, -6.90445531859040784e-08, -1.51310842966267955e-07, -2.15169990269714617e-07, -1.97011218006082345e-07, -1.15670161449088482e-07, -3.49389992493343016e-08, -7.77744233459998213e-08, -1.69273405958847434e-07, -2.13281822425415157e-07, -1.69039438446816348e-07, -8.84274840018406394e-08, 7.99132990891848749e-08, 1.41233073236435303e-07, -0.999999880790710449, 9.01243097928272618e-08, -7.76523876311330241e-08, -1.64095141030884406e-07, -2.07584974987184978e-07, -1.70108464203622134e-07, -9.17593254712301132e-08, -9.33853669948803145e-08, -1.79467619432216452e-07, -2.06867838414837024e-07, -1.60933510073846264e-07, -9.64771516009932384e-08, -5.28466728155763121e-08, 1.07791770176390855e-07, 1.57551653501286637e-07, 1.00000011920928955, 9.24729590678907698e-08, -1.06218571715999133e-07, -1.87442338983601076e-07, -2.12981845493231958e-07, -1.67912119763968803e-07, -9.44008249348371464e-08, -9.30477810356933333e-08, -1.6219701137742959e-07, -1.80447969455599377e-07, -1.4825729977019364e-07, -1.02755890907246794e-07, -6.12959354384656763e-08, 1.0586416721025671e-07, 1.34210495161823928e-07, -0.999999880790710449, 8.47988204100147414e-08, 6.44589803755479807e-08, -1.13811644553152291e-07, -1.77564359660209448e-07, -1.93016830962733366e-07, -1.53793124013645865e-07, -8.93832350357115502e-08, -1.02498880494295008e-07, -1.66385817124137247e-07, -1.90691551438249007e-07, -1.70565286339297018e-07, -1.2552175121527398e-07, -7.11623897586832754e-08, 4.73431036596139165e-08, 9.27146928120237135e-08, 1.10770059791320818e-07, 1.00000011920928955, 8.94829739195301954e-08, 7.58928493382882152e-08, 5.19054381697969802e-08, -5.32078452408768499e-08, -1.22745049679906515e-07, -1.80784482495255361e-07, -1.98434193521279667e-07, -1.63480109449665179e-07, -9.86209229836276791e-08, -8.88115181396642583e-08, -1.47195876820660487e-07, -1.78176279064246046e-07, -1.67298608744204103e-07, -1.22896466336896992e-07, -6.40969304299687792e-08, 4.73397179234780197e-08, 8.43114094095653854e-08, 1.03208861901293858e-07, -0.999999880790710449, 1.03072650858848647e-07, 8.55550439382568584e-08, -4.9994749673487604e-08, -1.09944892301427899e-07, -1.62016490889982379e-07, -1.80800682869630691e-07, -1.52239593376179982e-07, -9.39119999543436279e-08, -9.23315468526197947e-08, -1.56109280169403064e-07, -1.94447778767425916e-07, -1.84237563871647581e-07, -1.3296296685894049e-07, -6.6991582059472421e-08, 4.51587887084770045e-08, 8.07791806778368482e-08, 1.03849018273649563e-07, 1.00000011920928955, 1.13689822001106222e-07, 9.13591051698858791e-08, -5.38504245639614965e-08, -1.13928798839424417e-07, -1.67918386750898208e-07, -1.92412983324175002e-07, -1.69494299484540534e-07, -1.09254372659961518e-07, -8.15957719169091433e-08, -1.42752924148226157e-07, -1.83101818151953921e-07, -1.7675796470939531e-07, -1.27014118334045634e-07, -6.05623640126395912e-08, 4.49011814396271802e-08, 7.34225480414352205e-08, 9.34196648927354545e-08, -0.999999880790710449, 1.1353738216257625e-07, 9.32950570131652057e-08, -4.8247056128047916e-08, -9.7829349954281497e-08, -1.47232057656765392e-07, -1.80042775355104823e-07, -1.66986353633546969e-07, -1.05411061213089852e-07, -9.20300209372726385e-08, -1.6026169191718509e-07, -2.08965786896442296e-07, -2.01765061547121149e-07, -1.39537249310706102e-07, 4.47827979144221899e-08, 6.57605241372039018e-08, 8.7375347845863871e-08, 1.00000011920928955, 1.27238450886579813e-07, 1.00996849994317017e-07, -4.61299443088591943e-08, -9.13755542342187255e-08, -1.51836118789105967e-07, -2.00942537276205258e-07, -1.868812944394449e-07, -1.08623503081162198e-07, -7.64027916488885239e-08, -1.45696276376838796e-07, -1.98825873098940065e-07, -1.88122157851466909e-07, -1.16527118620979309e-07, 4.87647824343184766e-08, 8.02449235948188289e-08, -0.999999880790710449, 1.37657465870688611e-07, 9.71945652850081387e-08, -7.44394554885730031e-08, -1.50575175439371378e-07, -2.08124546929866483e-07, -1.82274447979580145e-07, -9.00195828990035807e-08, -5.81200687577165809e-08, -1.43608573921483185e-07, -2.53079775802689255e-07, -3.18114729225271731e-07, -2.74247611287137261e-07, -1.56261336314855726e-07, 6.48471356612390082e-08, 1.37684963874562527e-07, 1.0000002384185791, 1.87669328965966997e-07, 1.12938508323168207e-07, -4.69333620856104972e-08, -1.38357634682506614e-07, -2.63073616224573925e-07, -3.29510754681905382e-07, -2.6838392841455061e-07, -1.37221604745718651e-07, -6.67449171487533022e-08, -1.42704067229715292e-07, -1.71618523836514214e-07, -1.19190637803967547e-07, 9.64041859674580337e-08, -0.999999880790710449, 1.07722129882859008e-07, -5.98080802660660993e-08, -1.48222127904773515e-07, -1.74765204974391963e-07, -1.09702121164900745e-07, -4.40276650692794647e-08, -1.36254456606366148e-07, -2.21821110812925326e-07, -2.26483223286777502e-07, -1.45972791187887196e-07, -6.46278692784107989e-08, 7.86516380912871682e-08, 1.61309884560978389e-07, 1.00000011920928955, 1.28302161783722113e-07, 8.21408292495107162e-08, 6.55170708796504186e-08, -1.31861582985948189e-07, -2.34124968301330227e-07, -2.42287370610938524e-07, -1.54569320898190199e-07, -6.68664910108418553e-08, -6.17779818412600434e-08, -1.48227371710163425e-07, -1.98875028445399948e-07, -1.69314247955298924e-07, -9.91468240840731596e-08, -6.35482848565516178e-08, 7.8116684676388104e-08, 1.20787717605708167e-07, -0.999999880790710449, -1.4057164321457094e-07, -2.09599207323662995e-07, -1.86206918328934989e-07, -1.0823896445799619e-07, -6.97070703381541534e-08, 3.30123235414703231e-08, 7.16292731794965221e-08, 1.15263475208848831e-07, 2.06793600909804809e-07, 3.55119368578016292e-07, 4.65504143676298554e-07, 4.2028744928757078e-07, 2.4572932488808874e-07, 6.6407331189566321e-08, -5.79168855097123014e-08, -1.60454376896268514e-07, -3.04289301311655436e-07, -4.89971796469035326e-07, 0.999999403953552246, -5.15598856054566568e-07, -3.06722682807958336e-07, -1.11257271839804162e-07, 9.27432566300012695e-08, 1.88264721145969816e-07, 3.3118212172666972e-07, 4.48381854312174255e-07, 4.26553270926888217e-07, 2.79298149052920053e-07, 1.22280042091915675e-07, 2.38473329972066495e-08, -1.25859671129546768e-07, -2.93434538889414398e-07, -4.66947312816046178e-07, -6.03247372055193409e-07, -6.4969003688020166e-07, -5.82752988975698827e-07, -4.27332366825794452e-07, -2.25013380372729443e-07, 2.09390279337640095e-07, 4.09154182534621214e-07, 5.69824635476834374e-07, -0.999999344348907471, 5.8525904478301527e-07, 4.32894836421837681e-07, 2.34486606132122688e-07, -2.20308066900543054e-07, -4.45337718701921403e-07, -6.10371102993667591e-07, -6.58559883959242143e-07, -5.82739573928847676e-07, -4.36968946360138943e-07, -2.79123810287273955e-07, -1.3622610595120932e-07, -1.63239715078589143e-08, -8.05442326168304135e-08, -1.04792476918191824e-07, -8.72224745762650855e-08, 1.28701032053868403e-07, 2.80934870033888728e-07, 5.71647603919700487e-07, 1.03400043371948414e-06, 1.5293451269826619e-06, 1.72823069988226052e-06, 1.4639132359661744e-06, 9.62998228715150617e-07, 5.11197697505849646e-07, 1.59896899276645854e-07, -1.70748279515464674e-07, -5.38821268492029049e-07, -8.82454173734004144e-07, 0.999998986721038818, -8.32300031561317155e-07, -4.91075297759380192e-07, -1.65962163123367645e-07, 1.29409784221934387e-07, 4.86927660858782474e-07, 9.77526610768109094e-07, 1.49668358062626794e-06, 1.72936427134118276e-06, 1.49667141613463173e-06, 1.01367561455845134e-06, 5.85338966629933566e-07, 3.05192486393934814e-07, 1.33052623141338699e-07, -6.47830447064734471e-08, -1.07431148421710532e-07, -9.84620029953475751e-08, 9.60767394531103491e-08, 1.21396652730254573e-07, 9.08686388356727548e-08, -1.76437254140182631e-07, -3.94647116763735539e-07, -6.95369919867516728e-07, -1.11610233943792991e-06, -1.58862110311019933e-06, -1.83993529390136246e-06, -1.64065033914084779e-06, -1.12013651687448146e-06, -5.79192601435352117e-07, -1.57003697154323163e-07, 1.70711572877735307e-07, 4.67385973479395034e-07, 7.42128406727715628e-07, -0.999999105930328369, 8.04491719463840127e-07, 5.19475520377454814e-07, 1.60421890882389562e-07, -2.11274496564328729e-07, -6.14586269875871949e-07, -1.09041172891011229e-06, -1.57781983034510631e-06, -1.82646340363135096e-06, -1.64140590186434565e-06, -1.16696344321098877e-06, -6.93775461968471063e-07, -3.56055807060329244e-07, -1.45238260529367835e-07, 9.38765367664018413e-08, 1.02604666096794972e-07, 8.17892029658651154e-08, 4.25034194506679341e-08, -4.67044216634349141e-08, -7.98594754769510473e-08, -9.75050866713900177e-08, -8.9607638642519305e-08, 1.06517674680617347e-07, 3.21982724926783703e-07, 6.79445690821012249e-07, 1.1697736681526294e-06, 1.64896630394650856e-06, 1.83454915259062545e-06, 1.5877326404734049e-06, 1.09639449874521233e-06, 6.12591293247533031e-07, 2.10439338843571022e-07, -1.49413082795035734e-07, -5.01064619129465427e-07, -7.93906679064093623e-07, 0.999999105930328369, -7.47478452467476018e-07, -4.68970370093302336e-07, -1.68256320876025711e-07, 1.63907500905224879e-07, 5.88049545058311196e-07, 1.12404507035535062e-06, 1.64210496222949587e-06, 1.85172086730744923e-06, 1.6068383956735488e-06, 1.11567374005971942e-06, 6.63933974465180654e-07, 3.4865124121097324e-07, 1.41592167324233742e-07, -8.50402912533354538e-08, -1.15221702401413495e-07, -9.90985711268876912e-08, 6.70776856281918299e-08, 1.01132222596334032e-07, 1.03363994696792361e-07, 4.60471518692884274e-08, -1.82043180529944948e-07, -3.62172983159325668e-07, -6.61829290038440377e-07, -1.12672967134130886e-06, -1.64502228017227026e-06, -1.88950980373192579e-06, -1.64769960520061431e-06, -1.11182703221857082e-06, -5.98260498918534722e-07, -2.18352056435833219e-07, 7.26581390608771471e-08, 3.40340704951813677e-07, 5.84821691518300213e-07, -0.999999284744262695, 5.95878475451172562e-07, 3.40132061182885082e-07, -2.39397536461183336e-07, -6.01290253143815789e-07, -1.08964229639241239e-06, -1.61525713338050991e-06, -1.87524267403205158e-06, -1.66310053373308619e-06, -1.16061403332423652e-06, -6.82324809986312175e-07, -3.54357609921862604e-07, -1.52508746964485908e-07, 1.11470797037327429e-07, 1.08022582878675166e-07, 7.0157980758267513e-08, -5.89282649343658704e-08, -8.22619838913851709e-08, -9.49135881000984227e-08, -7.52807878257044649e-08, 1.4136195147784747e-07, 3.6668185998678382e-07, 7.02067666225048015e-07, 1.16155842988518998e-06, 1.63865752256242558e-06, 1.85392002549633617e-06, 1.62821243065991439e-06, 1.12934299068001565e-06, 6.34372611330036307e-07, 2.47125854002661072e-07, -6.16386159890680574e-08, -3.37211702117201639e-07, -5.70687348044884857e-07, 0.999999344348907471, -5.90782349263463402e-07, -3.62907030648784712e-07, -7.81981839281797875e-08, 2.46231081746373093e-07, 6.46249588953651255e-07, 1.14466718059702544e-06, 1.63819925091956975e-06, 1.85477210834505968e-06, 1.62974947670591064e-06, 1.14299848519294756e-06, 6.79319612117978977e-07, 3.53417789256127435e-07, 1.49214358202698349e-07, -5.7118285212709452e-08, -9.86118564583193802e-08, -9.96393723085020611e-08, -7.69328920569023467e-08, 8.45247569714047131e-08, 1.12134429741672648e-07, 1.07219221945342724e-07, -1.4048892182927375e-07, -3.36966706981911557e-07, -6.62483330415852834e-07, -1.13913642962870654e-06, -1.64685138770437334e-06, -1.87849843769072322e-06, -1.64309744832280558e-06, -1.12679845187813044e-06, -6.28038208105863305e-07, -2.57151299365432351e-07, 2.27244811412674608e-07, 3.86610480518356781e-07, -0.999999582767486572, 3.62744998483321979e-07, 1.97812354940651858e-07, -2.54008767797131441e-07, -6.12893416018778225e-07, -1.11402414404437877e-06, -1.64063214924681233e-06, -1.88286367119872011e-06, -1.65507140081899706e-06, -1.15390105293045053e-06, -6.80932998875505291e-07, -3.47211027929006377e-07, -1.33418723180511734e-07, 9.86482504572450125e-08, 9.77679235347750364e-08, 7.2895737446287967e-08, 3.51255771136038675e-08, -6.46742819299106486e-08, -9.26782632859612931e-08, -9.83999015602421423e-08, -5.97806391056110442e-08, 1.61905859386024531e-07, 3.71739218962829909e-07, 6.98572080182202626e-07, 1.1609647572186077e-06, 1.64284233505895827e-06, 1.85422038612159668e-06, 1.62197397912677843e-06, 1.13237354071316076e-06, 6.68828477046190528e-07, 3.23449512507067993e-07, -1.85449835043982603e-07, -3.87178346272776253e-07, 0.999999523162841797, -3.87737060236759135e-07, -1.92925867281701358e-07, 3.15877002776687732e-07, 6.69570567879418377e-07, 1.13857561245822581e-06, 1.62790036029036855e-06, 1.85327166946080979e-06, 1.62953926974296337e-06, 1.14119666250189766e-06, 6.88371869728143793e-07, 3.77687086938749417e-07, 1.71887378996871121e-07, -8.72798722184597864e-08, -1.25534327821696934e-07, -1.01943179231511749e-07, 7.5615830041897425e-08, 1.09529935343744e-07, 1.16267543148751429e-07, 7.15433259301789803e-08, -1.77232962528250937e-07, -4.21713792775335605e-07, -8.20721197669627145e-07, -1.40941165227559395e-06, -2.04692423722008243e-06, -2.34842127611045726e-06, -2.05809215003682766e-06, -1.40114025271032006e-06, -7.7439574397430988e-07, -3.44220325132482685e-07, -8.36735694065282587e-08, 8.13448295389207487e-08, 2.01321768145135138e-07, -0.999999761581420898, 2.32471094818720303e-07, 1.14060732414600352e-07, -7.63351835075809504e-08, -3.64322630730384844e-07, -8.02977751845901366e-07, -1.41316650115186349e-06, -2.04825028049526736e-06, -2.34125650422356557e-06, -2.05763694793859031e-06, -1.41897783123567933e-06, -8.08881850389298052e-07, -3.95738851466376218e-07, -1.63996304536340176e-07, -4.11269098776756437e-08, 1.1687560430573285e-07, 1.40095281153662654e-07, 1.0739267963799648e-07, 5.25947569940399262e-08, -5.67168925158512138e-08, -8.50762660320469877e-08, -1.08484613292603171e-07, -1.0886319756764351e-07, -6.40195807477539347e-08, 2.06856441309355432e-07, 4.70839268018607982e-07, 8.74175498211116064e-07, 1.43456531986885238e-06, 2.01200305127713364e-06, 2.2718618311046157e-06, 2.01908028429897968e-06, 1.45624380820663646e-06, 8.94961715403042035e-07, 4.5309559482120676e-07, 1.18287822203910764e-07, -1.32233751060084614e-07, -2.94111998755397508e-07, 0.999999642372131348, -2.35838399476051563e-07, 1.57472697992488975e-07, 4.3172627783860662e-07, 8.34363333979126764e-07, 1.404890440426243e-06, 2.00304566533304751e-06, 2.27551777243206743e-06, 2.02020441975037102e-06, 1.4545878457283834e-06, 9.02355907328455942e-07, 4.80255607726576272e-07, 1.76291791831317823e-07, -1.18816117833375756e-07, -1.27757118661975255e-07, -9.58973558340403542e-08, -6.63510775211761938e-08, 6.93652282279799692e-08, 1.0328112409752066e-07, 1.05246030557282211e-07, -1.12155802867164311e-07, -2.98860101111131371e-07, -6.19676200130925281e-07, -1.10520238649769453e-06, -1.62611343057506019e-06, -1.8422728089717566e-06, -1.56430621700565098e-06, -1.03645493254589383e-06, -6.04121339620178333e-07, -3.71628601669726777e-07, -2.8284495101615903e-07, -2.69550042730770656e-07, -2.75473297506323433e-07, -1.0000002384185791, -1.96101154870120808e-07, -1.63064242997279507e-07, -2.11949398476463102e-07, -3.73646116713644005e-07, -6.75166234032076318e-07, -1.13476744445506483e-06, -1.631150894354505e-06, -1.83657414254412288e-06, -1.55802354129264131e-06, -1.02582441741105868e-06, -5.79298671254946385e-07, -3.19999088560507516e-07, -1.78757062485601637e-07, -7.08465393017831957e-08, 1.20313941920358047e-07, 1.35112941279658116e-07, 9.71476765698753297e-08, 7.89245575560926227e-08, 9.39530337973337737e-08, 9.63538226983473578e-08, 1.22734149954339955e-07, 1.93818721072602784e-07, 2.5402769665561209e-07, 2.33588110631899326e-07, 1.43476881930837408e-07, 1, 5.73401734982326161e-08, 7.44041912525972293e-08, 7.13891594728011114e-08, 7.02666866914114507e-08, 7.47004591516997607e-08, 8.28660446927642624e-08, 1.17127058274490992e-07, 1.90584955817030277e-07, 2.49349284331401577e-07, 2.2444960734446795e-07, 1.24132156997802667e-07, 7.29076248262572335e-08, 1.07801405135887762e-07, 2.13943934568305849e-07, 2.68360082600338501e-07, 2.13943167182151228e-07, 1.08477529181527643e-07, -0.999999940395355225, 1.15119163979215955e-07, 1.08483853011875908e-07, 8.79234605122292123e-08, 6.65736976657171908e-08, 1.00452261619921046e-07, 2.10990577897973708e-07, 2.6458650381755433e-07, 2.00151148987970373e-07, 7.89324516858869174e-08, 5.41538227594173804e-08, 5.57512258581027709e-08, 9.04908930010606127e-08, 2.14718696156523947e-07, 3.43482355447122245e-07, 3.52393442426546244e-07, 2.41240570630907314e-07, 1.11902593857848842e-07, 6.94474238116526976e-08, 1.00000011920928955, 1.49670356108799751e-07, 1.34238518967322307e-07, 1.03130695094932889e-07, 6.5817452821193001e-08, 8.3481538126761734e-08, 2.13137042237576679e-07, 3.46044743082529749e-07, 3.48440352126999642e-07, 2.21000490796541271e-07, 7.75869750668789493e-08, 7.13189081125165103e-08, 1.53295317772972339e-07, 1.4643666190750082e-07, 7.18462516147155839e-08, -7.24522308814812277e-08, -1, 3.95158714638910169e-08, 4.60947227054475661e-08, -6.79130565117702645e-08, 7.6215002309254487e-08, 1.62226129418741039e-07, 1.45838001230913505e-07, 6.1168094589447719e-08, 1.46166627246202552e-07, 2.9707172188864206e-07, 3.74309706785425078e-07, 3.17158736606870661e-07, 1.87869915180272073e-07, 7.78700126602416276e-08, 5.41733911063602136e-08, 1.17286994338883233e-07, 1.00000011920928955, 1.8767302378819295e-07, 1.40183246344349755e-07, 6.31503453973891737e-08, 1.48866377003287198e-07, 3.02249787864639075e-07, 3.73141233467322309e-07, 3.04787391769423266e-07, 1.71247108937677694e-07, 6.19297821913278312e-08, 7.38302077252228628e-08, 1.60974082064058166e-07, 1.89606140565956593e-07, 1.39872696536258445e-07, 5.86546207159699406e-08, -0.999999940395355225, 4.90402278785495582e-08, -5.50547092359465751e-08, 7.62080176741619653e-08, 1.66001882462296635e-07, 1.91470562072026951e-07, 1.41966779665381182e-07, 6.76330884630260698e-08, 1.06187549420155847e-07, 1.8008552160608815e-07, 1.9657439054299175e-07, 1.46251537103125884e-07, 7.45614840980124427e-08, 1.18251186620454973e-07, 1.00000011920928955, 1.45630522752071556e-07, 6.85263685795689526e-08, 1.07074491495495749e-07, 1.7437312749279954e-07, 1.90830263591124094e-07, 1.48075130823599466e-07, 8.04446429469862778e-08, 1.07527696968645614e-07, 1.6557835635921947e-07, 1.76425729137008602e-07, 1.3422044276012457e-07, 7.23478947861622146e-08, -0.999999940395355225, 9.71899041246615525e-08, 1.54755880998891371e-07, 1.74798117313912371e-07, 1.43143296327252756e-07, 8.17006835518441221e-08, 1.12783652639336651e-07, 1.6917920220294036e-07, 1.8790662181800144e-07, 1.55833561166218715e-07, 9.68469606732469401e-08, 6.92737884833150019e-08, 1.25548339724446123e-07, 1.00000011920928955, 1.19557356015320693e-07, 6.33241086234193062e-08, 1.04270483802793024e-07, 1.62162393735343358e-07, 1.8920458444426913e-07, 1.60934831683334778e-07, 9.52826653133342916e-08, 9.41987678970690467e-08, 1.49237351365627546e-07, 1.75335216567873431e-07, 1.50007608112900925e-07, 9.11730992925186001e-08, -0.999999940395355225, 8.54390762583534524e-08, 1.44999461326733581e-07, 1.7681246333722811e-07, 1.53191507479277789e-07, 9.03594497003723518e-08, 9.15024855885349098e-08, 1.56540025386675552e-07, 1.90944547284743749e-07, 1.66514695365549414e-07, 1.05777928638417507e-07, 5.83795838338119211e-08, 1.15587013738149835e-07, 1.00000011920928955, 1.26741269923513755e-07, 7.18787589448766084e-08, 9.20979559282386617e-08, 1.55392655187824857e-07, 1.91107659475164837e-07, 1.67188289879049989e-07, 1.00446619910599111e-07, 7.76443727090736502e-08, 1.43456958312526694e-07, 1.77495294906293566e-07, 1.53916246858898376e-07, 9.29827521645165689e-08, -0.999999940395355225, 7.50494422163683339e-08, 1.39861626280435303e-07, 1.78458336108633375e-07, 1.58037863684512558e-07, 9.33914208189889905e-08, 8.41372909121673729e-08, 1.55028004655832774e-07, 1.92409103760837752e-07, 1.67639811365916103e-07, 9.92273427868894942e-08, 6.33924699400267855e-08, 1.27498296365047281e-07, 1.00000011920928955, 1.14595458455823973e-07, 5.87914392724542267e-08, 8.31743776075200003e-08, 1.52016710330826754e-07, 1.94113894735892245e-07, 1.70733983395621181e-07, 9.85898154226561019e-08, 7.78563631342876761e-08, 1.47861257460135676e-07, 1.83862013614088937e-07, 1.51717841845311341e-07, 7.33005762754146417e-08, -0.999999940395355225, 6.89815067289600847e-08, 1.41224404615059029e-07, 1.83682445253907645e-07, 1.57103471565278596e-07, 8.36697253703277966e-08, 9.17704028324806131e-08, 1.69047908116226608e-07, 2.01234954033679969e-07, 1.5453949231414299e-07, 6.87715981939618359e-08, 8.43815755047216953e-08, 1.31865945718345756e-07, 1.00000011920928955, 1.09834466854863422e-07, 5.78706540466100705e-08, 8.38725782159599476e-08, 1.61006241228278668e-07, 1.99602368411433417e-07, 1.62335140885261353e-07, 8.28849948675269843e-08, 4.67755647548528941e-08, 1.37685091772254964e-07, 2.28993073392302904e-07, 2.55152713179995771e-07, 1.90440744063380407e-07, 9.3890271557484084e-08, 8.38887004306343442e-08, 1.24553963587459293e-07, -0.999999880790710449, 1.07718435060633055e-07, 1.32303867417249421e-07, 2.26451462026489025e-07, 2.63598991523394943e-07, 2.10483847240539035e-07, 1.16588687149032921e-07, 3.93667747289327963e-08, 7.32168885519968171e-08, 6.46025029027441633e-08, 4.95996950178323459e-08, 8.70025544941199769e-08, 1.00000011920928955, 7.30199261056441173e-08, 8.36789837421747507e-08, 9.03887737990771711e-08, 4.42135501543816645e-08, 1.15840116166054941e-07, 1.71239548762969207e-07, 1.73622083821101114e-07, 1.23722571743201115e-07, 6.45740811933137593e-08, 5.51447243424263434e-08, 1.09449828755714407e-07, 1.71726156850127154e-07, -0.999999821186065674, 1.53524254642434244e-07, 7.8235821376893e-08, 1.15133090616836853e-07, 1.74843933109514182e-07, 1.85154078735649819e-07, 1.40642924861822394e-07, 8.15758198768889997e-08, 5.94775784179546463e-08, 8.59271622744017805e-08, 8.01762567448349728e-08, 5.67276039475927973e-08, 1.02691863901327451e-07, 1.00000011920928955, 7.49873052541261131e-08, 1.08653367192346195e-07, 1.10561522603802587e-07, 1.1116993192672453e-07, 1.78451585952643654e-07, -0.999999821186065674, 1.39546571631399274e-07, 9.31435124584822915e-08, 1.39449142011471849e-07, 1.45937818274433084e-07, 1.04229727071469824e-07, 9.24263190427154768e-08, 1.39642793328675907e-07, 1.00000011920928955, 9.38070527922718611e-08, 8.76630821267099236e-08, 1.24095507203492161e-07, 1.35385789690189995e-07, 1.11727899820834864e-07, 7.02573643707182782e-08, -1.28703433688315272e-07, -1.18836148033096833e-07, -8.80857626839315344e-08, 8.53962589530965488e-08, 1.33140360958350357e-07, -0.999999880790710449, 8.81791706319745572e-08, -8.70887149062582466e-08, -8.59716635659424355e-08, -7.02656279827351682e-08, 4.00554611701409158e-08, 9.46624254538619425e-08, 1.37214229312121461e-07, 1.36014492113645247e-07, 8.77901200624364719e-08, 6.24898248702265846e-08, 8.28052790780020587e-08, 1.00000011920928955, 9.03741366187205131e-08, 1.29536644521976996e-07, 1.38159379048374831e-07, 1.07682922134699766e-07, 6.35661763226380572e-08, -7.7064292725026462e-08, -7.96727519514206506e-08, 7.7388079944284982e-08, 1.09739865195024322e-07, -0.999999880790710449, 6.80613112535866094e-08, 8.77700401247238915e-08, 1.23219749070813123e-07, 1.00000011920928955, -1, -5.48465237670825445e-08, -5.08066548832175613e-08, -1.1262561372404889e-07, -1.18669944981775188e-07, -9.61390043130450067e-08, 3.19184074726308609e-08, 3.9696391951338228e-08, 1, -7.26497191294583899e-08, -9.55410754954755248e-08, -8.344168378471295e-08, -5.17027203272846236e-08, -1.00000011920928955, -8.77098997875691566e-08, -6.10964221436915977e-08, -1.42526019430988526e-07, 1, -1.30590279923126218e-07, -9.10053827851697861e-08, -1.00000011920928955, -9.68800577538786456e-08, 0.999999880790710449, -7.78026247871821397e-08, -1.00000011920928955, -7.20144583965520724e-08, -1.0155422813795667e-07, 0.999999880790710449, -9.15060240913589951e-08, -1.00000011920928955, -1.02587662809128233e-07, 0.999999880790710449, -1.33132971313898452e-07, -1, -7.64832961408501433e-08, -7.04690279462738545e-08, 0.999999940395355225, -7.46012887020697235e-08, -8.36418792005133582e-08, -1.00000011920928955, -8.44678993416891899e-08, -7.17296657626320666e-08, 0.999999880790710449, -1.00000011920928955, 0.999999880790710449, -1.06983193859377934e-07, -1.00000011920928955, -6.60498074012139114e-08, 0.999999940395355225, -7.86729970059241168e-08, -7.9005900488482439e-08, -1.00000011920928955, -8.56130242254948826e-08, -8.9998849261974101e-08, 0.999999880790710449, -8.37895228755769494e-08, -1.00000011920928955, -7.30351246147620259e-08, 0.999999880790710449, -1.00000011920928955, 0.999999880790710449, -1, 1, -1, 1.00000011920928955, -1, 1, -1, 0.999999880790710449, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 0.999999880790710449, -8.12194329569138063e-08, -1.00000011920928955, -8.97274219369137427e-08, 0.999999880790710449, 7.93412553434791334e-08, -0.999999880790710449, 1.02730886908375396e-07, 7.08793876924573851e-08, 1.00000011920928955, 8.55525996712458436e-08, -0.999999940395355225, 7.19796418024998275e-08, 1, -0.999999940395355225, 4.19824353059539135e-08, 1.34997165446293366e-07, 2.70332265017714235e-07, 4.09729494776911451e-07, 1.0000004768371582, 3.84750308057846269e-07, 2.47233117534051416e-07, 1.32486249526664324e-07, 5.60732793530860363e-08, -7.8232062605820829e-08, -1.61693407108032261e-07, -2.65969447355018929e-07, -3.83783515189861646e-07, -1.0000004768371582, -4.16940423519918113e-07, -2.95613176604092587e-07, -1.64347412123788672e-07, -6.08102794785736478e-08, 4.51492745412451768e-08, 1.5289155896880402e-07, 2.8716937094941386e-07, 4.0865376149668009e-07, 1.0000004768371582, 3.82339436555412249e-07, 2.59229182120179757e-07, 1.43743932312645484e-07, 5.80202268452012504e-08, -6.66178436858899659e-08, -1.45349844160591601e-07, -2.61406796653318452e-07, -3.92147512684459798e-07, -1.0000004768371582, -4.07930144774582004e-07, -2.85407224964728812e-07, -1.61322773806205078e-07, -5.88305368864894263e-08, 5.84999213515402516e-08, 1.59934131715999683e-07, 2.83481057294920902e-07, 4.05830519412120339e-07, 1.0000004768371582, 3.90141707384827896e-07, 2.60223288250926998e-07, 1.45391211958667554e-07, 6.7942501402740163e-08, -5.9203514979344618e-08, -1.45282456287532113e-07, -2.60887077274674084e-07, -3.8416646930272691e-07, -1.0000004768371582, -4.08978678478888469e-07, -2.85677771216796828e-07, -1.50251864283745817e-07, -4.29453805850243953e-08, 5.96581202216839301e-08, 1.62948140314256307e-07, 2.9375897270256246e-07, 4.15217414229118731e-07, 1.0000004768371582, 3.87439627047569957e-07, 2.71773416216092301e-07, 1.66451584959759202e-07, 7.87885028330492787e-08, -5.77189496198116103e-08, -1.35187008254433749e-07, -2.5064178998945863e-07, -3.86217010373002267e-07, -1.0000004768371582, -4.00603823891287902e-07, -2.61083954455898493e-07, -1.31036159700670396e-07, -4.47174599571553699e-08, 1.00000011920928955, -1, 1, -1.00000011920928955, 0.999999880790710449, -8.94432758968832786e-08, -1.00000011920928955, 5.18456886311469134e-08, 7.48976916042920493e-08, -6.81361811416536511e-08, -9.20962861528096255e-08, 0.999999940395355225, 9.36502573267716798e-08, 4.70377052863568679e-08, 1.13332539797283971e-07, 2.07541546615175321e-07, -0.999999701976776123, 2.4516089069948066e-07, 1.46542092238632904e-07, 5.04377482002382749e-08, -1.13601132056828646e-07, -9.89609603152530326e-08, -7.51948192601048504e-08, 8.61130686757860531e-08, 1.00000011920928955, 8.5889595879962144e-08, -9.24640275457022653e-08, -8.57994990610677633e-08, -8.39769995764072519e-08, -8.62662474787612155e-08, 6.13089596868121589e-08, -0.999999940395355225, -9.11734190367496922e-08, -8.10590776723074669e-08, 4.23853698805487511e-08, 7.59772262881597271e-08, 1.00000011920928955, -1.11545801928514265e-07, -0.999999940395355225, 0.999999880790710449, -1.17925821996323066e-07, -0.999999940395355225, -1.19739382853367715e-07, 0.999999880790710449, -1.20982406315306434e-07, -0.999999940395355225, 0.999999940395355225, -9.34867543378459231e-08, -8.82352111375439563e-08, -5.44601554963719536e-08, -6.63368879827430646e-08, -0.999999940395355225, 0.999999940395355225, -1.02332485596434708e-07, -6.99286246685915103e-08, -1.12888528747134842e-07, 8.68551808252959745e-08, -0.999999940395355225, -7.775339838644868e-08, -1.74379692907677963e-07, -3.44651994055311661e-07, -5.55581834760232596e-07, 0.999999344348907471, -5.66813639579777373e-07, -3.52300162376195658e-07, -1.66263475875894073e-07, -5.50432694979008375e-08, -1.08412343990949012e-07, -1.00000011920928955, -7.81013369532956858e-08, 5.96872808955595247e-08, 6.97761066703606048e-08, 6.41960866687441012e-08, 5.95327165342496301e-08, 6.29312069122534012e-08, 5.83303503276511037e-08, 0.999999940395355225, 9.58442285536875715e-08, 1.0059797261874337e-07, 7.75280071252382186e-08, -7.06131260130860028e-08, -1.02580358429804619e-07, -1.00000011920928955, -7.14873706897378725e-08, 9.00510528367703955e-08, 9.45579756717052078e-08, 8.464711953592996e-08, -5.81031507351781329e-08, -1.25517800597663154e-07, -1.85810222319560125e-07, 0.999999821186065674, -1.66983539884313359e-07, -9.11953179638658185e-08, 1.13112143651505903e-07, 1.2032921858917689e-07, -5.8910856637339748e-08, -9.63051505209477909e-08, -1.00000011920928955, -7.45060475537684397e-08, -9.18611391398371779e-08, -1.8692418279897538e-07, -2.82367807358241407e-07, 0.999999701976776123, -2.44632644808007171e-07, -1.45650957961152017e-07, -7.46716324329099734e-08, 6.77511948765641137e-08, 1.08189375680467492e-07, 1.60978984808934911e-07, 2.32078804174307152e-07, -0.999999701976776123, 2.85018927570490632e-07, 2.12405353750000359e-07, 1.17108406527677289e-07, -1.07387577941153722e-07, -2.0399164668560843e-07, -2.76994484238457517e-07, 0.999999701976776123, -2.23415398181714409e-07, -1.57968059966151486e-07, -1.1217257167572825e-07, -7.34660190460090234e-08, 5.38575761765969219e-08, 8.47320578145627223e-08, 1.53094404709008813e-07, 2.5549238102939853e-07, -0.999999701976776123, 2.84485736301576253e-07, 1.68444060477668245e-07, 6.17578592709833174e-08, -4.74563179864162521e-08, -1.19239430773632193e-07, -1.81971898882693495e-07, -2.24843162754950754e-07, 0.999999761581420898, -2.49236819627185469e-07, -2.21110653342293517e-07, -1.55827081016468583e-07, -6.6668292220128933e-08, -6.77809737226198195e-08, -9.47406775253512023e-08, -8.61758095993536699e-08, 6.14638082652163575e-08, 1.54322719936317299e-07, 3.28106921188009437e-07, 6.01244892095564865e-07, 8.83646293914353009e-07, -0.999999046325683594, 7.91801141986070434e-07, 5.0404480589349987e-07, 2.94926337573997444e-07, 1.84724044061113091e-07, 1.12135303709237633e-07, -1.12803746787903947e-07, -1.06563177837415424e-07, -6.9913689060285833e-08, -1.34280028873945412e-07, -1.73225188859760237e-07, -2.52765687491773861e-07, -3.82623937866810593e-07, -5.88100817822123645e-07, -8.56264762205682928e-07, 0.999998927116394043, -9.92895138551830314e-07, -7.1286950742432964e-07, -3.91407979805080686e-07, -1.6475283359795867e-07, -6.51822773534149746e-08, -9.82948904493241571e-08, -1.03667865403167525e-07, -6.29725960266114271e-08, -8.31980244697660964e-08, -8.28243926775940054e-08, 1.77574790427570406e-07, 3.94776407119934447e-07, 6.61859246520180022e-07, 8.69669520398019813e-07, -0.999999105930328369, 7.47220155972172506e-07, 5.57956070679210825e-07, 4.00071542117075296e-07, 2.57410164294924471e-07, 1.10800144170752901e-07, -1.02518740163759503e-07, -1.10946274389789323e-07, -7.96568144778575515e-08, -9.07165684793653782e-08, -1.14894362468476174e-07, -1.37167319280706579e-07, -1.82319553232446196e-07, -3.08300997176047531e-07, -5.77119806166592753e-07, -9.35491641484986758e-07, 0.999998867511749268, -9.68537278822623193e-07, -5.95373080614081118e-07, -2.87438183477206621e-07, -1.46504405051928188e-07, -1.21453396673132374e-07, -1.28806163957051467e-07, -1.12362066317928111e-07, -7.56283071723373723e-08, -1.03794945971458219e-07, -1.12910619520789623e-07, -8.14183565012172039e-08, 5.7290080235361529e-08, -1.11111155831622455e-07, -1.00000011920928955, 8.55551434142398648e-08, 8.33919528986371006e-08, -7.33813934061799955e-08, -1.09875195164477191e-07, -1.03749748348036519e-07, -8.76862529253230605e-08, -7.63229905942353071e-08, 1.09042105123080546e-07, 1.0827681506953013e-07, -1.10629521543614828e-07, 0.999999940395355225, 9.1926601442082756e-08, 1.3694615574877389e-07, 8.23559886953262321e-08, -7.94925156810677436e-08, -1.60229646439802309e-07, -2.60700574017391773e-07, -3.16931902943906607e-07, -2.63552152546253637e-07, -1.32069644109833462e-07, -1.02464774442978523e-07, -6.23443199287976313e-08, -0.999999940395355225, 1.58127619442893774e-07, 1.06333011729020654e-07, -9.99210669760941528e-08, -1.42699846605864877e-07, -1.78782585180670139e-07, -2.36977570011731586e-07, -2.78872931858131778e-07, -2.45462160819442943e-07, -1.5132383168747765e-07, -6.12624120321925147e-08, 6.81529286339355167e-08, 6.42466773115302203e-08, -9.42761957389848249e-08, -1.17901258533947839e-07, 1.00000011920928955, 1.1623635032265156e-07, 8.05728461727994727e-08, 1.05959237828301411e-07, 1.43980116718012141e-07, 1.99890749286169012e-07, 2.43348978301582974e-07, 2.32656390153351822e-07, 1.75404011315549724e-07, 1.35522739697080397e-07, 2.00005715100814996e-07, 4.30598049661057303e-07, 7.50432889162766514e-07, -0.999999105930328369, 7.65556023907265626e-07, 4.73828976055301609e-07, 2.59232791677277419e-07, 1.69982300235460571e-07, 1.51489643940294627e-07, 1.58956538598431507e-07, 1.77851603666567826e-07, 1.99352328422719438e-07, 1.99231209307981771e-07, 1.61808145549002802e-07, 1.02065023099839891e-07, -7.54714903905551182e-08, -2.1069207889468089e-07, -3.890818334184587e-07, -5.45695570508542005e-07, -5.72891224237537244e-07, -4.59965150412244839e-07, -3.22657285778404912e-07, -2.4193320768972626e-07, -1.86723497108687297e-07, -9.05036046106033609e-08, 6.59838121919165133e-08, 2.08695794867708173e-07, 1.0000002384185791, 1.23383657069098263e-07, -1.00771345046268834e-07, -2.09634194447971822e-07, -3.7791878071402607e-07, -5.41953227184421849e-07, -5.90909166930941865e-07, -4.90440470457542688e-07, -3.27819293488573749e-07, -1.90163220281647227e-07, -8.88298217205374385e-08, -3.87737708607005516e-09, 2.29144596630703745e-08, 9.23986718248670513e-08, 1.8463572359905811e-07, 3.28207192978879903e-07, 5.11515850121213589e-07, 6.25950690391618991e-07, 5.56514521576900734e-07, 3.40331695269924239e-07, 1.20691154847918369e-07, -7.9917036543974973e-08, -1.00000011920928955, -1.94481998505580123e-07, -1.36381899551452079e-07, 7.17229085012149881e-08, 1.80897473001095932e-07, 3.27447821746318368e-07, 5.01192005231132498e-07, 6.0237226762183127e-07, 5.41797476216743235e-07, 3.69186466286919313e-07, 2.00127999505639309e-07, 8.56183675068677985e-08, -9.10834714318298211e-08, -1.37939636601913662e-07, -1.62960461125294387e-07, -1.68234663533439743e-07, -1.71636656887130812e-07, -1.70062747884003329e-07, -1.33239822730502055e-07, 7.68952261864797038e-08, 1.84866308927666978e-07, 2.28770701937719423e-07, 1.0000002384185791, 1.46167664638596762e-07, 9.74535936393294833e-08, -7.90321337262867019e-08, -1.36592461785767227e-07, -1.74176946643456176e-07, -1.85497668780953973e-07, -1.70192805626356858e-07, -1.33610114971816074e-07, -8.58269686432322487e-08, 6.70511823841479782e-08, 1.38942127136942872e-07, 2.17905906652049453e-07, 2.35145265037317586e-07, 1.61977695256609877e-07, 6.37429664607225277e-08, -6.98067665894086531e-08, -1.62761224942187255e-07, -1.0000002384185791, -1.97492653342123958e-07, -1.2753091027661867e-07, -6.66177228936248866e-08, 1.22935958302150539e-07, 2.04193412400854868e-07, 2.29080882263588137e-07, 1.82412875915360928e-07, 1.1246330444691921e-07, 6.26764702360560477e-08, -5.47911085391206143e-08, -8.13606177985093382e-08, -1.19248952046291379e-07, -1.6049881423896295e-07, -1.71351061339919397e-07, -1.2949089978064876e-07, 8.89381652768861386e-08, 1.31464219066401711e-07, 1.62476212040019163e-07, 1.00000011920928955, 1.53698280769276607e-07, 9.69522773175413022e-08, -7.29348670347462757e-08, -1.17253158293806337e-07, -1.58686830786791688e-07, -1.60783798719421611e-07, -1.20445307061345375e-07, -6.86139571826061001e-08, 6.5182305775124405e-08, 1.1381893472162119e-07, 1.53447871298340033e-07, 1.56042702315062343e-07, 1.22462765261843742e-07, 8.24494392759334005e-08, -9.20008531579696864e-08, -1.51443089180247625e-07, -1.00000011920928955, -1.62646117018994119e-07, -1.21100541150553909e-07, -6.84056900013274571e-08, 6.039466882157285e-08, 1.23104342719670967e-07, 1.61863169978460064e-07, 1.60712275487639999e-07, 1.26237424069586268e-07, 8.35114803976466646e-08, -9.69228537428534764e-08, -1.12255030160213209e-07, -9.73316218733089045e-08, 1.00000011920928955, -6.3009210293785145e-08, -9.53210559373474098e-08, -9.5598039706601412e-08, -7.05668483647059475e-08, 8.63958717900459305e-08, 1.01486762105196249e-07, 8.60108642086743203e-08, -1, -5.92303557311879558e-08, 7.8694363025988423e-08, 8.90589930691021436e-08, 8.39617939618619857e-08, 6.35028314377450442e-08, -7.76637278931957553e-08, -1.35146535740204854e-07, 0.999999821186065674, -1.57963881974865217e-07, -1.00496251320691954e-07, -4.86881894801172166e-08, -9.71270210925467836e-08, -1.00000011920928955, -1.04742163387072651e-07, -5.86725370510521316e-08, -5.27172154818345007e-08, -9.68427329439691675e-08, 0.999999880790710449, -9.42575937301626254e-08, -5.40834790285771305e-08, -4.7257028512603938e-08, -9.28654984022614371e-08, -1.00000011920928955, -9.02676049463480012e-08, -4.71829331161188748e-08, -5.56336949841806927e-08, -9.36676585183704447e-08, 0.999999880790710449, -9.6895846013467235e-08, -5.90676059175621049e-08, -8.9922735924119479e-08, -1.00000011920928955, -9.77147394110033929e-08, -6.0251473144035117e-08, -4.91292801996223716e-08, -9.11020023863784445e-08, 0.999999880790710449, -9.92859909842991328e-08, -5.6917979662785001e-08, -1.04634182207519189e-07, -1.00000011920928955, -1.09353493371600052e-07, -6.05686594212784257e-08, -1.0972849651125216e-07, 0.999999880790710449, -1.09630562405982346e-07, -5.56469856860530854e-08, -9.86197790098231053e-08, -1.00000011920928955, -9.43674933751026401e-08, -9.3319592053831002e-08, -1.48340049577200261e-07, 0.999999821186065674, -1.36985462972916139e-07, 7.96664352264997433e-08, 9.66315951700380538e-08, -0.999999880790710449, 1.31259881186451821e-07, 1.30801865338980861e-07, 1.0053680910004914e-07, 4.23610941879815073e-08, -5.38852269471590262e-08, -4.87799525217269547e-08, -1.10632136340882425e-07, -1.664774771370503e-07, 0.999999821186065674, -8.32810798101490946e-08, -7.04363571912836051e-08, -5.31485504495776695e-08, -0.999999821186065674, 2.10141465117885673e-07, 1.79912973408136168e-07, 7.67042607208168192e-08, -6.41354560571016918e-08, -2.35310899654450623e-08, -1.10630693939128832e-07, -1.78367045577942918e-07, -1.83909747875077301e-07, 0.999999880790710449, -9.90107338338930276e-08, -1.38941388172497682e-07, -1.17342310090862156e-07, -1.06691352641519188e-07, 5.9262763585365974e-08, 1.2518268022176926e-07, 2.4038129708969791e-07, 4.68807115794334095e-07, 7.93272420196444727e-07, -0.999998986721038818, 8.96879669198824558e-07, 5.52290430277935229e-07, 2.25555709221225698e-07, 4.05795752556059597e-08, -8.57628563721846149e-08, -9.34469923663527879e-08, -1.17464466597994033e-07, -7.09554157651837158e-08, 1.00000011920928955, -8.92321736500889529e-08, -1.38276774919177114e-07, -1.16052788712295296e-07, 4.90474469927448808e-08, 2.4069370851975691e-07, 5.68738755646336358e-07, 9.07755463686044095e-07, -0.999998986721038818, 7.8226992172858445e-07, 4.5449840513356321e-07, 2.26537551384353719e-07, 1.08310310054093861e-07, 3.42561818911235605e-08, -9.84299930451015825e-08, -1.00296986715875391e-07, -1.00143211057002191e-07, 8.52351149660535157e-08, 1, -9.12895004034908197e-08, -1.14408074125549319e-07, -7.93573704527261725e-08, -1.15312403181633272e-07, -1.18345262478669611e-07, -6.41705284465388104e-08, 7.95611967419063149e-08, 4.90192881841267081e-08, -1, -8.99402508025559655e-08, -1.14888841551419318e-07, -1.29153363559453283e-07, -8.75126531241221528e-08, 5.24988656991354219e-08, 5.5536261811539589e-08, 0.999999940395355225, -1.05958733342959022e-07, -1.06505012809066102e-07, -6.50693223747111915e-08, -9.80350876034208341e-08, -7.95431915889821539e-08, 7.75319506374216871e-08, 7.00993112445758015e-08, 5.811983427861378e-08, -0.999999940395355225, 7.40256922426851816e-08, 4.46023946665263793e-08, -9.81206227379516349e-08, -9.63017257049614273e-08, -7.28420133100371459e-08, -1.12882410974179948e-07, -1.08102675255850045e-07, -5.36317052990398224e-08, 1.00000011920928955, 1.04179058268982772e-07, -9.24542433722308488e-08, -1.26103103070818179e-07, -1.04847380555384007e-07, -1.13974657267590374e-07, -1.28991047176896245e-07, -9.14304152388467628e-08, 1.21578480616335582e-07, -0.999999821186065674, 1.06784135311954742e-07, -1.0909937486758281e-07, -1.27659788518030837e-07, -9.08141970512588159e-08, 6.98724562653296744e-08, 1.53094603660974826e-07, 2.39945762814386399e-07, 1.0000002384185791, 1.81041528435343935e-07, 1.07622355471903575e-07, 8.03777311375597492e-08, 7.92408698657709465e-08, 7.76357182985520922e-08, 1.21984854217771499e-07, 1.11456394336073572e-07, -6.88654679947831028e-08, -1.00000011920928955, -1.37455188564672426e-07, -9.12189790369666298e-08, 6.40484927316720132e-08, 1.01451632872340269e-07, 1.04600623274109239e-07, 6.72276883051381446e-08, 1.09945766268992884e-07, 1.37052481363753031e-07, 9.59606722972239368e-08, -7.56492966047517257e-08, 0.999999880790710449, -1.16254767590362462e-07, -5.91648436909508746e-08, 8.30251281058735913e-08, 1.15853339366367436e-07, 1.03055057820711227e-07, 5.86687320947021362e-08, 5.83403192422338179e-08, 1.07902010881844035e-07, 1.04888300711536431e-07, 5.19393559272884886e-08, -1.17417698675126303e-07, -1.00000011920928955, -1.17739652694126562e-07, -5.98915121940990502e-08, 8.46330578951892676e-08, 1.04728606231674348e-07, 8.45245580194387003e-08, 4.62119587041343038e-08, 6.50936726742656901e-08, 8.82378543565209839e-08, 6.63323547200889152e-08, -9.90685435908744694e-08, 0.999999880790710449, 6.60388579376558482e-08, 7.3445654891202139e-08, 5.61683179967076285e-08, 1.04310750259628549e-07, -1.00000011920928955, 9.88437918181261921e-08, 1.22719200135179562e-07, -9.97717677364562405e-08, 0.999999880790710449, 6.06498531396937324e-08, 7.01467683938972186e-08, 6.63521930732713372e-08, -1.00000011920928955, 6.10896364605650888e-08, 7.26947320117687923e-08, 6.63461392491626611e-08, -7.81277691430659615e-08, -1.13508406229811953e-07, 0.999999880790710449, -1.08945258148196444e-07, -7.18738561999998637e-08, 1.02899086584784527e-07, 1.0605783984374284e-07, 6.73890028224377602e-08, 1.19503297923984064e-07, 1.76629100678837858e-07, -0.999999821186065674, 1.83131319886342681e-07, 1.29319474240219279e-07, 7.3416217105659598e-08, -7.26962099406591733e-08, -1.27506453395653807e-07, -1.80952625328245631e-07, 0.999999821186065674, -1.70787430420205055e-07, -1.12314722855444415e-07, -6.47566338329852442e-08, 6.26779907975105743e-08, 1.11714776096505375e-07, 1.65358571280194155e-07, -0.999999821186065674, 1.8290930370312708e-07, 1.32741320157947484e-07, 6.97137423344429408e-08, -7.7291240074828238e-08, -1.37767898422680446e-07, -1.93813761484307179e-07, 0.999999821186065674, -1.6623019405415107e-07, -1.1048527426282817e-07, -7.28383682258026965e-08, 5.49551231188161182e-08, 9.6621867839985498e-08, 1.53577971673257707e-07, -0.999999821186065674, 1.88765255870748661e-07, 1.30010093357668666e-07, 5.94310520796170749e-08, -8.45860057552272337e-08, -7.07034999436473299e-08, 5.53177343931565701e-08, 1.08149450284145132e-07, 1.00000011920928955, 1.41875602821528446e-07, 8.30470980872632936e-08, 7.91875294225974358e-08, -0.999999880790710449, 1.15064523242836003e-07, 6.01622858198425092e-08, -1.2991787912142172e-07, 4.26214477045050444e-08, 1.10578426415486319e-07, 1.00000011920928955, 1.40174378771007468e-07, 7.23406898828216072e-08, -7.62966507750206802e-08, -8.72150351938216772e-08, 1.02930378886867402e-07, -0.999999880790710449, 1.13013889802004996e-07, -1.17644667341210152e-07, -1.38277073347126134e-07, 6.6053125635789911e-08, 1.49284645090119739e-07, 1.00000011920928955, 1.22797615631498047e-07, -6.54857288395760406e-08, -9.98311477928837121e-08, 6.08768502274870116e-08, 1.87868394618817547e-07, 3.06587622844745056e-07, -0.999999642372131348, 2.43342924477474298e-07, 1.36378687898286444e-07, 7.80064652872169972e-08, 5.53815731052509364e-08, -1.04459289218539197e-07, 1.22152144399478857e-07, 9.35005743940564571e-08, 0.999999880790710449, -1.62111035706402618e-07, -1.20634567224442435e-07, 8.32333881817248766e-08, 7.93386476516388939e-08, 5.31175530227301351e-08, 7.45083852393690904e-08, 8.4633441588266578e-08, 5.21381906537499162e-08, -1.00000011920928955, -1.43541285524406703e-07, -8.74842029929823184e-08, 1.00878345676846948e-07, 8.98746748134726658e-08, 1.00472867359258089e-07, 1.06389897780445608e-07, -8.19182375266791496e-08, 0.999999880790710449, -1.15290383462252066e-07, -5.93604845278150606e-08, 1.03774020487890084e-07, 8.97638940955403086e-08, 9.8982198437624902e-08, 9.56082502057142847e-08, -8.82880257790930045e-08, -1.00000011920928955, -9.60096500079998805e-08, -4.71847201310993114e-08, 1.00136475111867185e-07, 8.88271216581415501e-08, 1.00857882046057057e-07, 9.34251218609460921e-08, -1.03154093267221469e-07, 0.999999880790710449, -1.01604832991597505e-07, -5.31419495075624582e-08, 1.00978525097161764e-07, 9.35153323666781944e-08, 9.63959081445864285e-08, 9.20691647365856625e-08, -4.96700813812367414e-08, -9.54365546590452141e-08, -1.00000011920928955, -9.15819313718202466e-08, 9.75686873516679043e-08, 9.06895962771159247e-08, 9.37367943265599024e-08, 9.54950110099161975e-08, -5.73015199734072667e-08, -1.07375285551825073e-07, 0.999999880790710449, -9.42042603924164723e-08, 1.03795237293979881e-07, 9.10412083499068103e-08, 8.90622970928234281e-08, 9.1979259764229937e-08, -5.97398681634331297e-08, -1.07889079004053201e-07, -1.00000011920928955, -7.7338270898508199e-08, 5.81189638637624739e-08, 7.80708901970683655e-08, 6.15306561257966678e-08, -5.66524462897177727e-08, -9.40401392313106044e-08, 0.999999940395355225, -0.999999880790710449, 1.32534808017226169e-07, 9.20317546615478932e-08, -1.21016810794571938e-07, 1.00000011920928955, 9.58212353907583747e-08, -1.42618475251765631e-07, 9.05513317661643669e-08, -0.999999880790710449, 1.06680097644584748e-07, 5.58910286940772494e-08, -1.3458836178870115e-07, -8.13432734503294341e-08, -8.16858616303761664e-08, 1.05455981724844605e-07, 1.00000011920928955, 1.11515689127372752e-07, -7.70620331991267449e-08, -7.47611466067610309e-08, -7.91178749182108731e-08, -7.68878223311730835e-08, 5.03619759228968178e-08, 9.94414293131740123e-08, -0.999999880790710449, 1.02876164476128906e-07, -7.79407827167233336e-08, -7.48672235317826562e-08, -1.38410598538030172e-07, 4.50789983119648241e-08, 9.64446513762595714e-08, 1.00000011920928955, 9.69912079540335981e-08, -8.34330933230376104e-08, -7.73089041672392341e-08, -1.33612360286861076e-07, 5.06194304250584537e-08, 1.05954377715988812e-07, -0.999999880790710449, 9.07361155100261385e-08, -1.41477215720442473e-07, 5.32819264265071979e-08, 1.02089032338881225e-07, 1.00000011920928955, 6.35925374581347569e-08, 1.07769317025940836e-07, 1.55454358718998265e-07, -0.999999880790710449, 1.00067317987395654e-07, -9.7514465835502051e-08, 0.999999880790710449, -1.530966358131991e-07, -1.06275884093065542e-07, 1.16827372664829454e-07, -6.33239238823080086e-08, -1.00000011920928955, -1.0051213905626355e-07, -4.96234555669161637e-08, 1.10316896950735099e-07, -9.38256476956667029e-08, 0.999999880790710449, -1.09022792571522587e-07, 1.14660949179778981e-07, -9.68055857697436295e-08, -1.00000011920928955, -9.26376699794673186e-08, -4.56856028563379368e-08, -1.00949165471320157e-07, 0.999999880790710449, -8.44064018679091532e-08, -5.06052444393390033e-08, -9.87088597526053491e-08, -1.00000011920928955, -7.1703908588460763e-08, -7.38949808010147535e-08, -1.15669955391695112e-07, 0.999999880790710449, -8.18052825479753665e-08, 7.19506161317440274e-08, -0.999999880790710449, 1.08473003024300851e-07, 8.35923472664035216e-08, -8.1248501260233752e-08, -1.03282303598462022e-07, 0.999999880790710449, -6.87220804707067146e-08, -1.01683411912745214e-07, -0.999999880790710449, 1.08518015906611254e-07, 5.87386139727641421e-08, 1.00000011920928955, 7.38203596029052278e-08, 6.75965168284164974e-08, -0.999999940395355225, 6.33254373383351776e-08, 9.55460919271899911e-08, 1.00000011920928955, 5.11603417407968664e-08, 8.57192858916278055e-08, -0.999999940395355225, 0.999999880790710449, -9.73376899082722957e-08, -1.00000011920928955, -8.8135152509494219e-08, -7.49774642372358358e-08, -1.32035864908175427e-07, 0.999999821186065674, -1.22868740959347633e-07, -6.48894626920082374e-08, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999940395355225, -8.95530902766950021e-08, -0.999999940395355225, -3.45942581247982162e-08, -5.89007242979278089e-08, 0.999999880790710449, -1.76169891119570821e-07, -1.35237726794912305e-07, 6.43873647732107202e-08, 1.009117198691456e-07, 9.75061880126304459e-08, -1.00000011920928955, -1.34443624233426817e-07, -6.62369714632404794e-08, 9.32324226710079529e-08, 1.06283842171706056e-07, 1.3168330781354598e-07, 5.25180041677231202e-08, 7.378235267196942e-08, 5.64339757147536147e-08, -4.60600091400920064e-08, -1.04077109597255912e-07, -2.40682936691882787e-07, -4.4447148184190155e-07, 0.999999403953552246, -5.0755176062011742e-07, -2.95568469255158561e-07, -1.046485422762089e-07, 8.58604991549327679e-08, 8.19817316255466721e-08, 9.12081787873830763e-08, 1.07724389408758725e-07, -8.18196639329471509e-08, -1.00000011920928955, -6.6465865700138238e-08, 7.69530430488885031e-08, 1.00862770580079086e-07, 8.99501557682924613e-08, 8.55953246059470985e-08, 8.72569003718126623e-08, -1.1838442048883735e-07, -3.15547907803193084e-07, -5.17936939559149323e-07, 0.999999403953552246, -4.31909626286142156e-07, -2.33421062034722127e-07, -1.02037901683615928e-07, -4.38661764690095879e-08, 9.11402580072717683e-08, 8.65114841985814564e-08, 1.10787198082107352e-07, 9.03755719150467485e-08, -4.71586822925473825e-08, -8.65265263882974978e-08, -1, -1.03670956264068082e-07, 1, 7.90156491348170675e-08, 7.9264189878358593e-08, 1.17755192263757635e-07, -8.40207121655112132e-08, -7.61311298447253648e-08, -1, 1, 7.34660474677184538e-08, 3.58695650959361956e-08, -6.7361973776769446e-08, -1.0261669558531139e-07, -1, -1.01645575512065989e-07, -1.1142793709950638e-07, 4.96871948030275234e-08, 1.2749856637128687e-07, 2.79050226481558639e-07, 4.70293400667287642e-07, 1.00000059604644775, 4.75870137961464934e-07, 2.89571318035086733e-07, 1.39665758069895674e-07, 5.83155852496020088e-08, -7.27259532595780911e-08, -8.88981546154354874e-08, -6.54695284652007103e-08, -8.36680698057534755e-08, -9.05047699006900075e-08, 9.39909554631412902e-08, -0.999999880790710449, 5.14987945621214749e-08, -9.1809333468972909e-08, -8.99866492432011e-08, -6.62070434032102639e-08, -1.08208482174632081e-07, -1.06838648150642257e-07, 7.2362489333954727e-08, 1.21061859204019129e-07, 1.00000011920928955, 6.23969924617995275e-08, -8.39413587527815253e-08, -1.12250653216960927e-07, -9.88992994166437711e-08, -6.376493644211223e-08, -7.80834170654998161e-08, -8.18949317249462183e-08, -1.05057821997434075e-07, -1.6293995486194035e-07, -1.0000002384185791, -2.03861219461032306e-07, -1.44606232765909226e-07, -9.24494329979097529e-08, 9.71273337313505181e-08, 1.48824071288800042e-07, 1.8823760683517321e-07, 1.0000002384185791, 1.81366985430031491e-07, 1.36170498876708734e-07, 8.45268743887572782e-08, 8.57683915000961861e-08, 1.19550634281040402e-07, 1.59478744876651035e-07, -0.999999821186065674, 1.75246370304193988e-07, 1.28970398804995057e-07, 7.50701403262610256e-08, 5.4973646967937384e-08, 1.06206151428978046e-07, 1.27513970937798149e-07, 1.0118311166706917e-07, -1.03027446129999589e-07, 0.999999880790710449, 8.3797615957337257e-08, 1.22205392472096719e-07, 1.12881096470118791e-07, 7.30790858938235033e-08, 6.18773370320013782e-08, 1.06062991278577101e-07, -0.999999880790710449, 1.2440111163414258e-07, 8.17949512565974146e-08, 5.46159242276189616e-08, 9.64062323305370228e-08, 1.12771893157059822e-07, 9.30460331005633634e-08, 6.46768327783320274e-08, 1.08127856890405383e-07, 1.00000011920928955, 1.24347224073062534e-07, 8.21040444520804158e-08, 1.04167575898372888e-07, 1.29658872083382448e-07, 1.09238527556954068e-07, -1.00576940553764871e-07, -9.83993047043441038e-08, -7.6946811589095887e-08, 6.00813052642479306e-08, 1.38568722718446224e-07, 2.23740585170162376e-07, -0.999999701976776123, 2.40138888329965994e-07, 1.51466906572750304e-07, 5.58001396200324962e-08, -9.75503908762220817e-08, -9.50227061480291013e-08, -7.26703603959322209e-08, 6.86825671891710954e-08, 1.05484190271454281e-07, 1.0863913502134892e-07, -5.78172247855945898e-08, -1.06448275971615658e-07, -1.65091250892146491e-07, -2.16486057524889475e-07, 0.999999761581420898, -2.03929118924861541e-07, -1.62139585313525458e-07, -1.22496345511535765e-07, -7.73910926454846049e-08, 9.48346468021554756e-08, 1.06329125060256047e-07, 8.39240925643025548e-08, 4.23850252673219074e-08, 1.50741243487573229e-07, 3.01528700674680294e-07, 4.66021504053060198e-07, -0.999999463558197021, 4.62398588751966599e-07, 2.86504871382931015e-07, 1.29824712757908856e-07, 3.51326328029699653e-08, 7.78720590233206167e-08, 1.04910228060361987e-07, 1.05633702673912921e-07, -5.67875204637857678e-08, -1.02399162926758436e-07, -1.50464927628490841e-07, -1.96235063754102157e-07, 0.999999761581420898, -2.27355229753811727e-07, -1.90325309290528821e-07, -1.27847741282494098e-07, -5.78212961954704951e-08, 5.96724731849462842e-08, 9.13494773158163298e-08, 9.13043720629502786e-08, 6.53542926443151373e-08, 4.40029026549382252e-08, 1.64190893769955437e-07, 3.26277074691461166e-07, 4.82578627725160914e-07, -0.999999463558197021, 4.33524718346234295e-07, 2.73527433591880254e-07, 1.43914405725809047e-07, 6.14159034739714116e-08, -9.33819244153255568e-10, -7.63951888416158909e-08, -1.64653144452131528e-07, -2.85048173509494518e-07, -4.25297628225962399e-07, 0.999999463558197021, -4.71259227197151631e-07, -3.37912467784917681e-07, -1.89267382211255608e-07, -6.28614884590206202e-08, 6.59736585362225014e-08, 1.84046925255643146e-07, 3.28348875200390466e-07, 4.65696473384014098e-07, -0.999999463558197021, 4.34958053574518999e-07, 2.87302981405446189e-07, 1.58950797413126566e-07, 7.33108151962369448e-08, 7.22791071439132793e-09, -6.24575733354504337e-08, -1.67099784675883711e-07, -3.01234933886007639e-07, -4.38464752505751676e-07, 0.999999463558197021, -4.65424193407670828e-07, -3.31493311023223214e-07, -1.7866446455627738e-07, -4.96037522168535361e-08, 6.23567757429555058e-08, 1.67397260497637035e-07, 3.20887693305849098e-07, 4.73322160132738645e-07, -0.999999463558197021, 4.30625163971853908e-07, 2.87486017214177991e-07, 1.71372747104214795e-07, 8.40494820408821397e-08, -8.08637101723519436e-10, 1.41761296035269879e-08, -8.24839503366092686e-08, -1.71266506754363945e-07, -2.79509663414501119e-07, -4.17710481315225479e-07, 0.999999463558197021, -4.77117623631784227e-07, -3.28075856259602006e-07, -1.71164003859303193e-07, -6.50433662485738751e-08, 8.90550921894828207e-08, 5.05187180976918171e-08, 1.02676430913106742e-07, 1.50301389112428296e-07, 1.3964894662876759e-07, 7.336183216466452e-08, -1, 7.19288664186024107e-08, 1.10656358742744487e-07, 1.46585719562608574e-07, 1.32056115376144589e-07, 6.37600763297996309e-08, 3.95356067883767537e-08, 6.64334436351055047e-08, 0.999999880790710449, -7.96928958379794494e-08, 1.05371611880400451e-07, 7.01493121368912398e-08, 1.42158455673779827e-07, 1.42385545132128755e-07, 6.65609505290376546e-08, 4.30063664680346847e-08, -1.00000011920928955, 8.5141010686129448e-08, 1.45427279107934737e-07, 1.44777885680014151e-07, 6.78420519761857577e-08, 4.59215776515975449e-08, 1.83158434197139286e-07, 3.8049989825594821e-07, 5.45729790246696211e-07, 5.58243073101039045e-07, 4.3070335209449695e-07, 2.92690060632594395e-07, 2.0654569254929811e-07, 1.36793445904004329e-07, 4.8535405028360401e-08, -1.39995876224929816e-07, 0.999999821186065674, -1.23935123497176392e-07, -5.55231451926374575e-08, 8.34878335354005685e-08, 2.07527321549605404e-07, 3.90585341847327072e-07, 5.52737446923856623e-07, 5.66879464258818189e-07, 4.30825622288466548e-07, 2.77148728855536319e-07, 1.82687358574185055e-07, 1.14745020596274117e-07, 3.04924370198023098e-08, -4.19429611042687611e-08, -1.13477618413071468e-07, -1.84897103849834821e-07, -3.13053902800675132e-07, -5.14035605192475487e-07, -6.63426590108429082e-07, -6.10625306762813125e-07, -3.99560320829550619e-07, -2.00623702539814985e-07, -1.02244101185533509e-07, -9.21239191598033358e-08, -1.31329954911052482e-07, -1.76267221263515239e-07, -1.0000002384185791, -1.53394637436576886e-07, -1.22776782518485561e-07, -1.22389607781769882e-07, -1.49102049817884108e-07, -2.04761789746044087e-07, -3.22872978131272248e-07, -5.12246913331182441e-07, -6.57401699299953179e-07, -6.09670507856208133e-07, -3.98787364019881352e-07, -1.84763891297734517e-07, -5.62117392632899282e-08, -9.2819199437599309e-08, -2.15638323197708814e-07, -2.90800159064019681e-07, -2.37642353795308736e-07, -1.20489829669168103e-07, 0.999999821186065674, -9.52206988813486532e-08, -2.11844238151570607e-07, -2.87690994582590065e-07, -2.37329388141915842e-07, -1.18150502714797767e-07, 5.57134924861202308e-08, 8.85414834783659899e-08, 9.74408607135046623e-08, -1.01469808555521013e-07, -2.03699855205741187e-07, -2.92087378284122678e-07, -1.00000035762786865, -2.80334404578752583e-07, -1.89291441188288445e-07, -8.20082846075820271e-08, 1.40566882578241348e-07, -5.01860846213730838e-08, -8.66835492274731223e-08, -6.38528874219446152e-08, 5.44449818562497967e-08, 7.4027767027473601e-08, 1.11589621099028591e-07, 1.81159975909395143e-07, 2.66858336317454814e-07, 1.00000035762786865, 2.75127035820332821e-07, 2.05847442202866659e-07, 1.49130130466801347e-07, 9.82853833875196869e-08, -9.56661168061145872e-08, -7.46728190392786928e-08, 1.21755675763779436e-07, -1.18067966070611874e-07, -2.14125947195498156e-07, -3.04176609233763884e-07, -1.00000035762786865, -2.83426118130591931e-07, -1.71306822949190973e-07, -7.38398000521556241e-08, 1.23100235782658274e-07, -8.41919174376926094e-08, -9.66835429494494747e-08, 4.89355436172900227e-08, 9.70878559769516869e-08, 1.75621536868675321e-07, 2.66890822331333766e-07, 1.00000035762786865, 2.97463543574849609e-07, 2.13906361068438855e-07, 1.0778595083138498e-07, 1.45413991958776023e-09, 1.42943719083632459e-07, -4.52453079446968331e-08, -1.26861380067566643e-07, -2.14669398701516911e-07, -2.90759459176115342e-07, -1.00000035762786865, -2.64649457903942675e-07, -1.80780105552003079e-07, -1.00672032488091645e-07, -2.83859336036584864e-08, -1.18004152227513259e-07, 8.90105980033695232e-08, 1.91203540111928305e-07, 2.99451471619249787e-07, 1.00000035762786865, 2.84894781543698628e-07, 1.77866951389660244e-07, 8.2298434733729664e-08, 7.50840811747366388e-09, 8.65916049974657653e-08, 8.33761433227664384e-08, -7.15842887188955501e-08, -1.19463663850183366e-07, -1.81215952466118324e-07, -2.63841258174579707e-07, -1.00000035762786865, -3.02800543749981443e-07, -2.08718063277046895e-07, -1.04992345484333782e-07, 1.43083653370013053e-07, 1.14423713171163399e-07, 2.20540258055734739e-07, 2.93238656468020054e-07, 1.00000035762786865, 2.65244608499415335e-07, 1.97534404833277222e-07, 1.16572010711024632e-07, 2.2540266542137033e-08, 9.72620952666147787e-08, 1.14934394446208898e-07, 7.68444721188643598e-08, -5.92627671380796528e-08, -1.25897813063602371e-07, -2.56933333275810583e-07, -4.13113809827336809e-07, -1.0000004768371582, -3.91907406083191745e-07, -2.40873646362160798e-07, -1.30479676840877801e-07, -7.73252963881532196e-08, 7.55252003159512242e-08, 1.16279409212438622e-07, 9.45090263826386945e-08, 9.56320462819348904e-08, 1.52370887462893734e-07, 1.61233899120816204e-07, 1.19497499895260262e-07, 8.26602999381975678e-08, 8.44763903273815231e-08, 1.06696369073233654e-07, 1.24115672406333033e-07, 1.3882555549571407e-07, 1.73731777408647758e-07, 1.0000002384185791, 2.43511919961747481e-07, 1.97082840713846963e-07, 1.17348143646722747e-07, 5.65431825805262633e-08, 9.63901598538541293e-08, 1.63075554837632808e-07, 1.81554426603725005e-07, 1.35249848653984373e-07, 7.61552954031685658e-08, -6.17189925833372399e-08, -9.525476940552835e-08, -1.35313797500202782e-07, -1.35185487692979223e-07, -8.32577242704246601e-08, -1, -6.24268849946929549e-08, -6.94142983093115618e-08, -6.68159643169019546e-08, -8.08211169101014093e-08, -1.10204631198485004e-07, -1.18022171591292135e-07, -8.61906030991121952e-08, -1.00568740890594199e-07, -8.17697483057600039e-08, 1.00000011920928955, 7.40824646072724136e-08, -9.19288254408456851e-08, -8.92741880420544476e-08, -1.09941204584629304e-07, -1.25200500633582124e-07, -8.67596980924645322e-08, 4.00295974145592481e-08, 1.22773855082414229e-07, -0.999999821186065674, 1.41726644642403699e-07, 6.74387194976588944e-08, -9.6328335530415643e-08, -1.21782022688421421e-07, -1.02584522210236173e-07, 5.14556504072061216e-08, 1.25055606758905924e-07, 1.00000011920928955, 1.10150487842020084e-07, 5.06370092523411586e-08, 4.43996661658729863e-08, 1.54144217390239646e-07, 2.54273771815860528e-07, -0.999999701976776123, 2.26953332571611099e-07, 1.394667634713187e-07, 6.56366694329335587e-08, 1.5736789293896436e-07, -6.00507661374649615e-08, -1.01457182211106556e-07, -1.53004535263789876e-07, -2.18078369584873144e-07, 0.999999761581420898, -2.40775733573173056e-07, -1.70302399737920496e-07, -9.45887634884456929e-08, -3.46462094569233159e-08, 1.54561533349806268e-07, 6.70450788220477989e-08, 1.63133222486067098e-07, 2.46519107349740807e-07, -0.999999701976776123, 2.29750682478879753e-07, 1.43959752563205257e-07, 5.97149352188353078e-08, 8.97048266779165715e-08, 1.1973196478720638e-07, 1.00000011920928955, 9.8756693489576719e-08, -8.84468462913901021e-08, -1.00000011920928955, -1.22279715242257225e-07, -1.07426565421064879e-07, -8.09897713338614267e-08, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -5.28041823599778581e-08, -1.26371276110148756e-07, -2.20124491079332074e-07, -1.0000002384185791, -2.21987392023947905e-07, -1.25539230566573679e-07, -4.80550319537087489e-08, 0.999999940395355225, -6.83354599573249288e-08, -1.56225539171828132e-07, -2.3293412709790573e-07, -1.0000002384185791, -1.878475046623862e-07, -1.20014163940140861e-07, -7.22484401194378734e-08, -3.48834916508167225e-08, 5.47670140349509893e-08, 8.4185032278583094e-08, 1.32557659071608214e-07, 2.06622871701256372e-07, 1.0000002384185791, 2.36732802250116947e-07, 1.55453079742073896e-07, 8.04022235456613998e-08, -9.26373857623730146e-08, -1.57639448161717155e-07, -2.08044212968161446e-07, -1.0000002384185791, -2.1547934636600985e-07, -1.62936672154501139e-07, -9.10859228042681934e-08, 8.3880316026352375e-08, 1.61236258122698928e-07, 2.3655223913010559e-07, 1.0000002384185791, 1.97426004433509661e-07, 1.33011212710698601e-07, 9.07959574192318541e-08, 5.60165034357851255e-08, -3.17157287099689711e-08, -6.72973001769605617e-08, -1.1969292756930372e-07, -1.98229102466029872e-07, -1.0000002384185791, -2.36779598594694107e-07, -1.4760232147636998e-07, -6.07759460535817198e-08, -9.44108009548472182e-08, 0.999999880790710449, -9.98235734073205094e-08, -9.94676199184141296e-08, -1.87599937362392666e-07, -1.0000002384185791, -1.55381485456018709e-07, -8.11516613907770079e-08, 1.30563378775150341e-07, 1, 7.92996601717277372e-08, 5.95870872643899929e-08, 7.69272574530077691e-08, -0.999999880790710449, 1.23174487498545204e-07, 7.70728902921291592e-08, 1.00000011920928955, 1.02204026575236639e-07, -0.999999880790710449, 1.04324023197932547e-07, 5.93781557256534143e-08, 1.00000011920928955, 5.60661526094463625e-08, 9.13033204597013537e-08, -0.999999880790710449, 9.28802705857378896e-08, 5.81280872324896336e-08, 1.00000011920928955, 4.93103051724119723e-08, 8.96992347065861395e-08, -0.999999880790710449, 9.7267111698329245e-08, 4.92036242860649509e-08, 1.00000011920928955, 6.80627820770496328e-08, 1.19828939659782918e-07, -0.999999880790710449, 8.54084447610148345e-08, 1.01080402714615047e-07, 1.45788476402231026e-07, 1.00000011920928955, 9.44878451036856859e-08, -8.06259023988786794e-08, -1.00000011920928955, -1.27363364299526438e-07, -7.75257760210479319e-08, -5.93548428184931254e-08, -1.10481231274661695e-07, -1.91026757079271192e-07, 0.999999761581420898, -2.18538403373713663e-07, -1.41253025276455446e-07, -6.7831699368525733e-08, 7.77214808067583363e-08, 8.86921114329197735e-08, 6.64973072161956225e-08, -1, 8.00960222591129423e-08, 8.34431190810391854e-08, 6.87177674763006507e-08, 9.89322685995830398e-08, 1.07712835983875266e-07, 1, 1.79580979420279618e-07, 1.08991599745422718e-07, 1.15801974231999338e-07, -1, 7.96737040786865691e-08, 8.57691517808234494e-08, 6.6797738895729708e-08, -5.97409197666820546e-08, -1.3281766086947755e-07, -2.19924103816993011e-07, 0.999999761581420898, -2.19558430103461433e-07, -1.32482682602130808e-07, -6.35348769151278248e-08, -1.06837767077649914e-07, -1.84324690621906484e-07, -1.0000002384185791, -1.64886230891170271e-07, -9.62245039204390196e-08, -4.57038638046469714e-08, 1.00000011920928955, 1.22565054994083766e-07, 9.02173482586476894e-08, -6.40604440604874981e-08, -8.84569786308020412e-08, -1.00000011920928955, -7.35984428956726333e-08, 1.0055597243763259e-07, 1.00000011920928955, 9.38132274086456164e-08, -5.83377399721030088e-08, -9.65149098419715301e-08, -1.4028212547145813e-07, -1.00000011920928955, -1.61146729737993155e-07, -1.12787020611904154e-07, -5.80808148242795141e-08, 8.01896717916861235e-08, 9.67936699680649326e-08, 1.00000011920928955, 7.88438399013102753e-08, -4.78326462882705528e-08, -9.78294139031277155e-08, -1.61153721478513035e-07, -1.0000002384185791, -1.62200521458544245e-07, -9.85964945243722468e-08, 1.00000011920928955, 1.22004806257791643e-07, 1.00600701102848689e-07, -5.68483180529710808e-08, -1.15731126015816699e-07, -1.66500456089124782e-07, -1.00000011920928955, -1.34406732854586153e-07, -9.01634393812855706e-08, -6.2760484809132322e-08, 8.47848085072655522e-08, 1.00000011920928955, 1.10328329583353479e-07, 7.05401106415592949e-08, 1.25559566299671133e-07, -0.999999821186065674, 1.25895184055480058e-07, 0.999999940395355225, -1, -5.67000562057273783e-08, -5.21653689133927401e-08, 1.16892749701946741e-07, 0.999999940395355225, -5.51895169564886601e-08, -1.0565876351620318e-07, -1.00000011920928955, -1.64802230528948712e-07, -9.58894261771092715e-08, -1.01840569755040633e-07, -2.13482579169976816e-07, 0.999999701976776123, -2.4708560886210762e-07, -1.33690278403264529e-07, -1, -7.19705610663368134e-08, -2.11889712886659254e-07, -3.55222056214188342e-07, 0.999999582767486572, -3.08227242840075633e-07, -1.66815169677647646e-07, -6.79291787264446612e-08, -4.56779396529327641e-08, -8.03676343252845982e-08, -1, 1, 8.768586923224575e-08, 7.41269374771036382e-08, -8.43578717990567384e-08, -8.26533366193871188e-08, -1, 9.88434791793224576e-08, 1.88286847446761385e-07, 1.0000002384185791, 2.26050545393263747e-07, 1.39042199975847325e-07, 5.10550961507760803e-08, -7.57849960564271896e-08, -9.32946164766690345e-08, -1.00000011920928955, 1.25635935432910628e-07, 2.11702825936299632e-07, 1.0000002384185791, 2.02724436348944437e-07, 1.11608834174603544e-07, 3.42800632324724575e-08, -1.00000011920928955, 6.54791278975608293e-08, 1.47649487303169735e-07, 2.26474924147623824e-07, 1.0000002384185791, 1.81430635848300881e-07, 9.3283993862769421e-08, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, -4.52711965692742524e-08, 0.999999880790710449, -9.08040362901374465e-08, -4.97973680069208058e-08, -8.58055884123132273e-08, -1.00000011920928955, -1.09248603052947146e-07, -6.00658509597451484e-08, -7.25376452237469493e-08, -1.40804743864464399e-07, 0.999999821186065674, -1.4451256902248133e-07, -8.01020547669395455e-08, -0.999999880790710449, -9.62940163162784302e-08, -1.57560918978560949e-07, 0.999999821186065674, -1.28973184132519236e-07, -6.4537793775798491e-08, -0.999999940395355225, 8.13532494703395059e-08, -5.26608836537434399e-08, -1.19396275977123878e-07, -1.65875803759263363e-07, 0.999999821186065674, -1.10043671952553268e-07, -6.6865446513020288e-08, 7.57835323383915238e-08, 1.37717279358184896e-07, -0.999999821186065674, 1.86443287475412944e-07, 1.19940523291006684e-07, 1.00000011920928955, 9.80965850772008707e-08, 8.97600500593398465e-08, 1.64440947969524132e-07, -0.999999821186065674, 1.55023144543520175e-07, 8.6216481065548578e-08, 1.034441439173861e-07, 1.00000011920928955, -1.00000011920928955, -1.09726265407061874e-07, 6.53651710535996244e-08, 8.26148038868268486e-08, 1.00000011920928955, -0.999999821186065674, 0.999999821186065674, -0.999999821186065674, 0.999999940395355225, -1, 1, -1, 5.54243619887984096e-08, 1.11469425689847412e-07, 1.00000011920928955, 1.24049506666779052e-07, 7.00175775136813172e-08, 7.29133731169895327e-08, 1.21438404221407836e-07, -0.999999880790710449, 1.15304587211539911e-07, 7.04423896991102083e-08, -6.48235172207023425e-08, -7.40625267781069851e-08, -9.05750425772566814e-08, 0.999999880790710449, -1.12485096792624972e-07, -9.40119306847009284e-08, -6.34010390854200523e-08, 1.0490263946394407e-07, 1.45880648005913827e-07, -0.999999821186065674, 1.12308796929028176e-07, -1.06126506693726697e-07, 0.999999880790710449, -1.48629126783816901e-07, -1.1229110441490775e-07, 7.03432476711896015e-08, 1.05797198557411321e-07, 1.24286032132658875e-07, -0.999999880790710449, 7.95686290189223655e-08, 6.42431530195608502e-08, 6.7528034719543939e-08, -6.49787139650470635e-08, -1.4020402261394338e-07, -2.41463737893354846e-07, 0.999999701976776123, -2.73721298071905039e-07, -1.67698217978795583e-07, -6.36755714822356822e-08, -0.999999880790710449, -6.06761574317715713e-08, -1.6159448534835974e-07, -2.69850545464578317e-07, 0.999999701976776123, -2.42763746882701525e-07, -1.38363375867811556e-07, -6.15660269431828056e-08, -0.999999880790710449, 1.30352773908271047e-07, 1.0682634865588625e-07, -7.56412461555555637e-08, -1.04352587015910103e-07, 0.999999880790710449, -5.9631304338836344e-08, -1.00000011920928955, 8.84482602714342647e-08, 1.00000011920928955, 9.46205602758709574e-08, 6.13258848147779645e-08, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, 8.50440216026981943e-08, -0.999999880790710449, 1.00000011920928955, -1.00000011920928955, -1.08411605026503821e-07, 0.999999880790710449, -7.76605730834489805e-08, -0.999999940395355225, 0.999999940395355225, -6.48195381813820859e-08, -1.1442607927847348e-07, -1.50709198010190448e-07, -1.3981430413423368e-07, -9.32418444676841318e-08, -1.00000011920928955, -8.44918730535937357e-08, -1.21122695873054909e-07, -1.47991542576164647e-07, -1.32242448103170318e-07, -8.36053786201773619e-08, 9.13627928866844741e-08, 1.07638079782645946e-07, 1.11862995311184932e-07, 1.05797617777625419e-07, 9.11705839712340094e-08, 6.92808015401169541e-08, 1.00411995163085521e-07, 1.00000011920928955, 1.16478581446699536e-07, 7.05732716710372188e-08, 6.12168733482576499e-08, 8.61772591065346205e-08, 1.02272778690348787e-07, 1.05524065929785138e-07, 9.75112186551996274e-08, 8.01789212800940732e-08, 5.50427223799943022e-08, -6.0097967491401505e-08, -1.2951687722306815e-07, -2.03426466782730131e-07, -2.30627378527969995e-07, -1.89647039405826945e-07, -1.22652679124257702e-07, -7.70226975532750657e-08, -1, -7.03980234106893477e-08, -1.32114010398254322e-07, -2.03150221977921319e-07, -2.3004560034678434e-07, -1.88848986226730631e-07, -1.18912510060908971e-07, -6.60986145817332726e-08, 7.31308702484056994e-08, 1.0092806945749544e-07, 1.27000760130613344e-07, 1.26644323472646647e-07, 9.47002547491138102e-08, 7.68991839095178875e-08, 1.11434268035282003e-07, 1.00000011920928955, 8.81919532957908814e-08, 6.23859719439678884e-08, 5.80024597240935691e-08, 6.32613819107064046e-08, 7.28008089367904176e-08, 9.27680758877613698e-08, 1.14506455872742663e-07, 1.14947425799982739e-07, 8.70177672140926006e-08, -8.70606626790504379e-08, -1.1799487964481159e-07, -1.20932313052435347e-07, -1.01215924530606571e-07, -7.97258650209187181e-08, -6.56886314231996948e-08, -6.77569005347322673e-08, -9.78589795863626932e-08, -1.00000011920928955, -1.133270046693724e-07, -7.5939652788292733e-08, -9.88713821925557568e-08, -1.29490217659622431e-07, -1.2956331829627743e-07, -1.01962136511701829e-07, -6.91480579462222522e-08, 6.96977622283156961e-08, 1.22440212635410717e-07, 1.88511421583825722e-07, 2.24571408580231946e-07, 1.97906999233055103e-07, 1.33571518290409585e-07, 7.72991626263319631e-08, 1, 7.1338376983476337e-08, 1.18795895787116024e-07, 1.8338100460368878e-07, 2.22439609842695063e-07, 2.01479736006149324e-07, 1.40472650400624843e-07, 7.95629162553268543e-08, -8.59139248632345698e-08, -1.40226418920974538e-07, -1.92183989611294237e-07, -2.14477324789186241e-07, -1.88057953209863626e-07, -1.30275296328363765e-07, -7.43195514019134862e-08, -1, -9.35384463218724704e-08, -1.48289231560738699e-07, -1.97803416313035996e-07, -2.14625643479848804e-07, -1.82293121042675921e-07, -1.23218796943547204e-07, -7.29406011146238598e-08, 9.28149006540479604e-08, 1.68226151231465337e-07, 2.4913211404964386e-07, 2.89857723601016914e-07, 2.60721009226472233e-07, 1.84854783924492949e-07, 1.03749023594446044e-07, -6.48605436026628013e-08, -9.48751690543758741e-08, 0.999999880790710449, -7.19163253393162449e-08, 8.00344608364866872e-08, 1.588912823535793e-07, 2.44125459403221612e-07, 2.90110506284690928e-07, 2.64623139401010121e-07, 1.87251075089989172e-07, 1.01700194932163868e-07, -5.32557180576986866e-08, -1.12586484135590581e-07, -1.90237543051807734e-07, -2.64097849367317394e-07, -2.85896248897188343e-07, -2.37078339182517084e-07, -1.5707487932559161e-07, -8.70100294037001731e-08, 9.75008518366848875e-08, 1.69501987556941458e-07, -0.999999821186065674, 1.81900006168689288e-07, 1.12315326816769812e-07, -1.03637347592666629e-07, -1.85753620485229476e-07, -2.60499575688299956e-07, -2.82594783129752614e-07, -2.37766229815861152e-07, -1.67233821457557497e-07, -1.08758740680059418e-07, -6.28669027946671122e-08, 8.67980105567767168e-08, 1.62451584628797718e-07, 2.5499781486360007e-07, 3.10001155412464868e-07, 2.7706786909220682e-07, 1.79319016524459585e-07, 7.82167148827284109e-08, -5.6120583735719265e-08, -1.09241995005504577e-07, -1.57046315507614054e-07, 0.999999821186065674, -1.60102260338135238e-07, -1.10789386553733493e-07, -5.34275521602012304e-08, 7.08577516661534901e-08, 1.56687661956311786e-07, 2.54594993975842954e-07, 3.11365539573671413e-07, 2.77549190741410712e-07, 1.80576790853592684e-07, 8.78810482163316919e-08, 3.8503475963125311e-08, 1.09783606205837714e-07, 1.70381113662188e-07, -0.999999821186065674, 1.57040204840086517e-07, 9.48356557728402549e-08, 9.87331247870315565e-08, 1.66295677672678721e-07, 1.8790694866765989e-07, 1.44720331718417583e-07, 7.88824152664346911e-08, 0.999999940395355225, 9.76721068468577869e-08, 1.64445509653887711e-07, 1.87006179430682096e-07, 1.47361561175785027e-07, 8.58313526919118885e-08, -6.71854110123604187e-08, -8.88368418827667483e-08, -1.19375997087445285e-07, -1.29518923586147139e-07, -1.04739022788180591e-07, -6.35419041827844921e-08, -1, -7.29984037661779439e-08, -9.44130746916016506e-08, -1.19589600444669486e-07, -1.23596393564184837e-07, -9.62523216685440275e-08, -5.3791826104543361e-08, 4.93695679892880435e-08, 1.03646605964513583e-07, 1.37329479343861749e-07, 1.30637076267703378e-07, 9.76433582877689332e-08, 6.912961225680192e-08, 1, 5.30944070931127499e-08, 9.9578201684380474e-08, 1.34901625870043063e-07, 1.34705729237794003e-07, 1.03603532863871806e-07, 7.0393475937180483e-08, -1.13287576652965072e-07, -1.51826355931916623e-07, -1.39250630581955193e-07, -8.86249793552451592e-08, -1, -6.53735270361721632e-08, -1.04005714263166738e-07, -1.3373926321946783e-07, -1.22976970828858612e-07, -7.77459518985779141e-08, -1.02067325258303754e-07, 0.999999880790710449, -7.6793092773641547e-08, -1.25152553209773032e-07, -1.38069125910078583e-07, -1.05918857684628165e-07, -6.22817353246318817e-08, -1, -7.98687196379432862e-08, -1.21698519706114894e-07, -1.35184194505200139e-07, -1.04359955344079935e-07, -5.83873962511916034e-08, 0.999999880790710449, 1.70914262298538233e-07, 7.71285542100486055e-08, 1.0813749184990229e-07, -0.999999880790710449, 9.96846125644879066e-08, 7.18790502673982701e-08, 1.73644195911037968e-07, 8.15046234947658377e-08, 1.04922300181442552e-07, 9.6855600872913783e-08, 1.00000011920928955, 8.85935449446151324e-08, 1.06196452520634921e-07, 9.12521116447351233e-08, -8.80514434697943216e-08, -9.64575264106315444e-08, -9.02468997310279519e-08, -1.00000011920928955, -8.50402201990618778e-08, -9.64524247137887869e-08, -8.97150016498926561e-08, 9.78042962174185959e-08, 1.09857914765143505e-07, 0.999999940395355225, 1.01791044926358154e-07, 1.09724680896761129e-07, -0.999999940395355225, 1, -0.999999821186065674, -7.92875454180830275e-08, -1.3821068023389671e-07, 0.999999821186065674, -1.33350638975571201e-07, -7.59582050591234292e-08, -0.999999821186065674, 0.999999880790710449, 5.92926774345414742e-08, 9.4521411142522993e-08, -0.999999880790710449, 1.00942038727680483e-07, 6.81434215721310466e-08, -7.20264523579317029e-08, -9.81233725383390265e-08, 0.999999880790710449, -9.89957698038779199e-08, -6.86639936020583264e-08, 6.75528255555946089e-08, 9.57509556087643432e-08, -0.999999880790710449, 9.70040474612687831e-08, 6.99423168271096074e-08, -7.77707924726200872e-08, -1.14392690875320113e-07, 0.999999880790710449, -1.05673642281089997e-07, 9.83967254342132946e-08, -0.999999880790710449, 1.11942576097590063e-07, 7.58028804170862713e-08, 1.00000011920928955, 1.01938063323814276e-07, 7.29994980019910145e-08, -0.999999880790710449, 7.95210510773358692e-08, 6.85981547121627955e-08, 1.00000011920928955, 6.9555014192701492e-08, 7.7831629141655867e-08, -0.999999880790710449, 7.39942578320551547e-08, 8.00277177859243238e-08, 1.00000011920928955, 6.87694381440451252e-08, 1.13267716983500577e-07, -0.999999880790710449, 9.68940696566278348e-08, 1, -1, 1, -1.00000011920928955, 1, -1.00000011920928955, 1, -1.00000011920928955, 1, -1.00000011920928955, -1.05719934140324767e-07, 0.999999880790710449, -0.999999940395355225, 1.00000011920928955, 1.1053171533603745e-07, -0.999999880790710449, 1.28732793314156879e-07, 7.77272717300547811e-08, 1, 8.45696774831594666e-08, -0.999999880790710449, 8.52865369438404741e-08, 1.00000011920928955, 1.01026927268321742e-07, 1.58312971620944154e-07, -0.999999821186065674, 1.3320213554379734e-07, 6.95574655651398643e-08, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -6.41312638549607072e-08, -1.25872162470841431e-07, -1.00000011920928955, -1.60968170348496642e-07, -1.04299523684403539e-07, 0.999999940395355225, -7.89281173751987808e-08, -1.40755020083815907e-07, -1.00000011920928955, -1.42002434699861624e-07, -8.2736853812548361e-08, 0.999999940395355225, -9.83203207738370111e-08, -1.52985649037873372e-07, -1.00000011920928955, -1.31165748484818323e-07, -7.45763770737539744e-08, 0.999999940395355225, -9.96850957335482235e-08, -1.00000011920928955, 0.999999940395355225, -0.999999940395355225, 1.00000011920928955, -0.999999940395355225, 8.14762159961901489e-08, 1.00000011920928955, 7.4705511110551015e-08, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 9.88261703582793416e-08, 1.00000011920928955, -7.58246727627920336e-08, -1.20282038551522419e-07, -1.00000011920928955, -1.26000159639261256e-07, -7.81167486252343224e-08, 1, -1.00000011920928955, 0.999999880790710449, -0.999999940395355225, 1, -0.999999880790710449, 0.999999880790710449, -1.00000011920928955, 1.00000011920928955, -7.58552047841476451e-08, -1.00000011920928955, -7.59558318463859905e-08, 1.00000011920928955, 1.09351418586811633e-07, -7.72199015841579239e-08, -1.00000011920928955, -7.59115437176660635e-08, 8.89058640041184844e-08, 1.00000011920928955, 8.7570562357086601e-08, -7.49789279552715016e-08, -1.00000011920928955, -7.93092453932331409e-08, 9.09853952180128545e-08, 1.00000011920928955, 8.56481392474961467e-08, -8.65064748722943477e-08, -1.00000011920928955, -8.90446969492586504e-08, 1.00000011920928955, -1.00000011920928955, 1, -0.999999880790710449, 1.00000011920928955, -0.999999940395355225, 1, -1.00000011920928955, 1, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1, 1.02491419795569527e-07, 1.00000011920928955, -1, 1, -1, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -1, 0.999999940395355225, -0.999999940395355225, 1, -0.999999940395355225, 1, -1, 1.00000011920928955, -0.999999940395355225, 0.999999940395355225, 6.08245613875624258e-08, 9.68028928127750987e-08, 1.03389510286433506e-07, -1.02538542989805137e-07, -1.00000011920928955, -9.35895911879924824e-08, 4.62153799674069887e-08, 8.13814651223765395e-08, 9.10637893980492663e-08, 6.46602842380161746e-08, 1, 3.88884267010780604e-08, 1.0266663252878061e-07, 1.88333515893646108e-07, 2.37380035628120822e-07, 2.0365749264783517e-07, 1.19801214282233559e-07, 4.8359229509742363e-08, -1, 4.02167259494490281e-08, 1.03526893724392721e-07, 1.88187598837430414e-07, 2.37149038184725214e-07, 2.04129662506602472e-07, 1.19068204185168725e-07, 4.46294841083272331e-08, 1, 4.2269725497590116e-08, 1.17981905134456611e-07, 1.88068554507481167e-07, 2.01214334083488211e-07, 1.52796189922810299e-07, 9.41959399369807215e-08, 6.32632435326740961e-08, -0.999999821186065674, 6.48502762601310678e-08, 1.31041659301445179e-07, 1.97929878709146578e-07, 2.09572050380302244e-07, 1.55823059344584181e-07, 8.75708749958903354e-08, 0.999999880790710449, -6.41315409666276537e-08, -9.72835110246705881e-08, -9.78557750386244152e-08, -7.0504313498531701e-08, -1.00000011920928955, -6.68061943542852532e-08, -9.82890924206003547e-08, -9.7633531481733371e-08, -6.6694219924556819e-08, 1, -1.00000011920928955, 1, -1, 1, -1, 1, -1.00000011920928955, 1, -1, 1, -1.00000011920928955, 1, -1.00000011920928955, 1, -1.00000011920928955, 1, -1, 1, -1, 1, -1, 1, -0.999999940395355225, 1, -1, 0.999999940395355225, -1, 0.999999880790710449, -1, 1, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -1, 0.999999940395355225, -1, 1, -1, 1, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1, 1.00000011920928955, -1, 1, -1, 1, -1, 1, -1, 1, -1.00000011920928955, 1, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1, 1.00000011920928955, -1, 1, -1, 1, -1, 1, -1, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -1, 1, -1, 1, -0.999999940395355225, 0.999999940395355225, -1, 1, -1, 1, -1, 1, -1, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 1, -0.999999940395355225, 1, -0.999999940395355225, 0.999999940395355225, -1, -1.10093303362646111e-07, -9.46011482483299915e-08, 1.00000011920928955, -1.08287025568643003e-07, -9.75403082748016459e-08, -1, -9.73943059534576605e-08, -1.07902877743981662e-07, 1.00000011920928955, -9.47140819107517018e-08, -1.10885771675839351e-07, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 9.95575319961972127e-08, 1.20115771551354555e-07, 1.02045461858324416e-07, 5.95093787580935896e-08, 0.999999940395355225, 9.57885433194860525e-08, 1.18915806979202898e-07, 1.03496084591370163e-07, 6.30105603249830892e-08, -0.999999940395355225, 9.64304547323990846e-08, 1.03177441701518546e-07, 7.80143452061565768e-08, 0.999999940395355225, 9.4360906643942144e-08, 1.03585826138896664e-07, 7.99978039367488236e-08, -1, 1, -1, 1, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -1, 0.999999940395355225, -1, 1, -1, 1.00000011920928955, -1, 1, -1, 1, -1.00000011920928955, 1, -1.00000011920928955, 1, -1.00000011920928955, 1, -1, 1, -0.999999940395355225, 1, -0.999999940395355225, 1, -0.999999940395355225, 1, -1, 1, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1, -1, 1, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1, 1.00000011920928955, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1, 1.00000011920928955, -1, 0.999999940395355225, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 0.999999940395355225, -1, 0.999999940395355225, -1, 0.999999940395355225, -1, 0.999999940395355225, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 0.999999880790710449, -1, 0.999999880790710449, -1, 0.999999880790710449, -0.999999940395355225, 1, -1, 1, -1, 1, 1.4284493943250709e-07, -1, 1, -1, 1, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -1.00000011920928955, 1.00000011920928955, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1.00000011920928955, -1.00000011920928955, 1, -1, 1, -0.999999940395355225, 1, -1, 1, -1, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -0.999999940395355225, 0.999999940395355225, -1, 1, -1, 1, -1, 0.999999940395355225, -1, 0.999999940395355225, -1, 1, -1, 0.999999940395355225, -1, 1, -0.999999940395355225, 1, -0.999999940395355225, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1.86260848522579181e-07, -0.999999940395355225, -1.87702070775230823e-07, 1, -1, 1.00000011920928955, -1, 1, -1.00000011920928955, 1.00000011920928955, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, 0.999999880790710449, -0.999999880790710449, -6.78197480397102481e-08, -1.00478352749178157e-07, 0.999999880790710449, -1.0303944009137922e-07, -7.03285749636961555e-08, 6.82987035816040589e-08, 8.89254110347792448e-08, -0.999999880790710449, 8.75598331617766235e-08, 6.72813627033974626e-08, -9.675532197661596e-08, 0.999999880790710449, -9.76914407146978192e-08, -6.6617396043966437e-08, -0.999999821186065674, -1.07540074623102555e-07, 0.999999880790710449, -1.02273133961716667e-07, -0.999999821186065674, 0.999999821186065674, -0.999999821186065674, 0.999999821186065674, -0.999999821186065674, 0.999999821186065674, -0.999999940395355225, 1, -1, 1.00000011920928955, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 8.41218223968098755e-08, -0.999999880790710449, 8.44347098905018356e-08, 1, 8.27640960210374033e-08, -0.999999880790710449, 8.81092745430578361e-08, 1, }; +static const float prec_b[2130] = { 0.969978928565979004, 0.970814943313598633, 0.971651852130889893, 0.972486734390258789, 0.973316848278045654, 0.974139630794525146, 0.974952518939971924, 0.975753247737884521, 0.97653961181640625, 0.977309525012969971, 0.978061139583587646, 0.978792726993560791, 0.979502618312835693, 0.980189383029937744, 0.980851709842681885, 0.981488347053527832, 0.982098281383514404, 0.982680439949035645, 0.983234047889709473, 0.983758270740509033, 0.984252393245697021, 0.984715819358825684, 0.985147953033447266, 0.985548317432403564, 0.985916316509246826, 0.986251413822174072, 0.9865531325340271, 0.986820816993713379, 0.987053930759429932, 0.987251639366149902, 0.987413167953491211, 0.987537503242492676, 0.98762357234954834, 0.987669885158538818, 0.987675011157989502, 0.987636983394622803, 0.987553715705871582, 0.987422645092010498, 0.987240850925445557, 0.987004995346069336, 0.986711204051971436, 0.986356079578399658, 0.985937595367431641, 0.985454440116882324, 0.984905064105987549, 0.984287440776824951, 0.983599483966827393, 0.982838749885559082, 0.982002675533294678, 0.981088638305664062, 0.980093717575073242, 0.979015231132507324, 0.977850079536437988, 0.976595401763916016, 0.975248336791992188, 0.973806023597717285, 0.972265660762786865, 0.970624566078186035, 0.968880295753479004, 0.967030465602874756, 0.965072810649871826, 0.963005483150482178, 0.960826635360717773, 0.958534717559814453, 0.956128478050231934, 0.953606843948364258, 0.950969159603118896, 0.94821476936340332, 0.945343494415283203, 0.942355453968048096, 0.939250826835632324, 0.936030328273773193, 0.932694673538208008, 0.9292449951171875, 0.925682663917541504, 0.922009289264678955, 0.91822659969329834, 0.914336740970611572, 0.910341858863830566, 0.906244456768035889, 0.902047097682952881, 0.897752642631530762, 0.893364071846008301, 0.888884425163269043, 0.88431704044342041, 0.879665195941925049, 0.874932408332824707, 0.870122253894805908, 0.865238428115844727, 0.860284626483917236, 0.855264723300933838, 0.850182473659515381, 0.845041930675506592, 0.83984684944152832, 0.834601342678070068, 0.829309284687042236, 0.823974609375, 0.818601250648498535, 0.813193261623382568, 0.807754397392272949, 0.802288591861724854, 0.796799600124359131, 0.791291177272796631, 0.785767078399658203, 0.780230820178985596, 0.774685919284820557, 0.769135892391204834, 0.76358407735824585, 0.758033692836761475, 0.752487838268280029, 0.746949672698974609, 0.741421997547149658, 0.735907673835754395, 0.730409324169158936, 0.724929630756378174, 0.71947091817855835, 0.714035511016845703, 0.708625614643096924, 0.70324331521987915, 0.697890520095825195, 0.69256901741027832, 0.687280476093292236, 0.682026505470275879, 0.676808476448059082, 0.67162775993347168, 0.666485607624053955, 0.66138303279876709, 0.656321108341217041, 0.651300609111785889, 0.646322429180145264, 0.641387224197387695, 0.636495649814605713, 0.631648123264312744, 0.626845121383666992, 0.622087061405181885, 0.617374181747436523, 0.612706661224365234, 0.608084738254547119, 0.603508472442626953, 0.598977923393249512, 0.59449303150177002, 0.590053796768188477, 0.585660159587860107, 0.581311881542205811, 0.57700878381729126, 0.57275080680847168, 0.568537592887878418, 0.564368903636932373, 0.560244500637054443, 0.556164085865020752, 0.552127301692962646, 0.54813385009765625, 0.544183433055877686, 0.54027557373046875, 0.536410033702850342, 0.532586395740509033, 0.528804302215576172, 0.525063395500183105, 0.521363258361816406, 0.517703592777252197, 0.514083921909332275, 0.510503947734832764, 0.506963253021240234, 0.503461539745330811, 0.499998420476913452, 0.496573507785797119, 0.493186503648757935, 0.489837020635604858, 0.486524730920791626, 0.48324933648109436, 0.480010509490966797, 0.476807922124862671, 0.473641276359558105, 0.470510274171829224, 0.467414647340774536, 0.464354068040847778, 0.461328327655792236, 0.458337128162384033, 0.455380260944366455, 0.452457427978515625, 0.449568420648574829, 0.446713000535964966, 0.443890988826751709, 0.441102176904678345, 0.438346326351165771, 0.435623288154602051, 0.432932883501052856, 0.430274903774261475, 0.427649229764938354, 0.425055712461471558, 0.422494202852249146, 0.41996455192565918, 0.417466670274734497, 0.415000408887863159, 0.412565678358078003, 0.410162389278411865, 0.407790482044219971, 0.405449837446212769, 0.403140395879745483, 0.40086209774017334, 0.398614943027496338, 0.396398842334747314, 0.39421379566192627, 0.392059773206710815, 0.389936774969100952, 0.38784480094909668, 0.385783851146697998, 0.383753955364227295, 0.381755173206329346, 0.379787534475326538, 0.37785106897354126, 0.375945895910263062, 0.374072074890136719, 0.372229665517807007, 0.370418846607208252, 0.368639647960662842, 0.36689227819442749, 0.365176856517791748, 0.363493502140045166, 0.361842453479766846, 0.360223829746246338, 0.358637899160385132, 0.357084870338439941, 0.35556495189666748, 0.354078382253646851, 0.352625489234924316, 0.351206541061401367, 0.34982183575630188, 0.348471701145172119, 0.347156494855880737, 0.345876604318618774, 0.344632387161254883, 0.343424290418624878, 0.342252731323242188, 0.341118216514587402, 0.340020745992660522, 0.338959425687789917, 0.33793291449546814, 0.336939960718154907, 0.335979372262954712, 0.335049986839294434, 0.334150642156600952, 0.333280324935913086, 0.332437992095947266, 0.331622660160064697, 0.330833405256271362, 0.330069273710250854, 0.329329431056976318, 0.328613042831420898, 0.327919304370880127, 0.327247440814971924, 0.326596677303314209, 0.325966358184814453, 0.325355738401412964, 0.3247641921043396, 0.324191063642501831, 0.323635756969451904, 0.323097676038742065, 0.322576254606246948, 0.322070926427841187, 0.321581184864044189, 0.321106493473052979, 0.320646405220031738, 0.320200413465499878, 0.319768071174621582, 0.319348931312561035, 0.31894257664680481, 0.318548589944839478, 0.318166583776473999, 0.317796170711517334, 0.31743699312210083, 0.317088693380355835, 0.316750913858413696, 0.316423326730728149, 0.31610560417175293, 0.315797477960586548, 0.315498590469360352, 0.315208673477172852, 0.314927488565444946, 0.314654678106307983, 0.314390063285827637, 0.314133346080780029, 0.313884317874908447, 0.313642710447311401, 0.31340828537940979, 0.313180834054946899, 0.312960177659988403, 0.3127460777759552, 0.312538325786590576, 0.312336713075637817, 0.312141120433807373, 0.311951279640197754, 0.311767071485519409, 0.311588317155838013, 0.311414837837219238, 0.311246484518051147, 0.311083108186721802, 0.310924530029296875, 0.310770660638809204, 0.310621291399002075, 0.310476303100585938, 0.310335606336593628, 0.310199052095413208, 0.310066491365432739, 0.309937834739685059, 0.309812933206558228, 0.309691697359085083, 0.309574037790298462, 0.309459805488586426, 0.309348940849304199, 0.309241294860839844, 0.309136807918548584, 0.309035390615463257, 0.308936923742294312, 0.308841317892074585, 0.308748543262481689, 0.308658450841903687, 0.308570981025695801, 0.308486074209213257, 0.308403640985488892, 0.30832362174987793, 0.308245927095413208, 0.308170497417449951, 0.308097273111343384, 0.308026164770126343, 0.30795714259147644, 0.307890117168426514, 0.307825028896331787, 0.307761847972869873, 0.307700514793395996, 0.307640939950942993, 0.307583123445510864, 0.307526975870132446, 0.307472437620162964, 0.307419508695602417, 0.307368099689483643, 0.307318210601806641, 0.307269752025604248, 0.307222694158554077, 0.30717700719833374, 0.307132631540298462, 0.307089537382125854, 0.307047724723815918, 0.307007104158401489, 0.306967675685882568, 0.30692937970161438, 0.306892186403274536, 0.306856065988540649, 0.306820988655090332, 0.306786954402923584, 0.306753873825073242, 0.306721776723861694, 0.306690603494644165, 0.306660324335098267, 0.306630939245223999, 0.306602388620376587, 0.306574642658233643, 0.306547731161117554, 0.306521594524383545, 0.306496202945709229, 0.306471556425094604, 0.306447595357894897, 0.306424349546432495, 0.30640178918838501, 0.306379854679107666, 0.306358575820922852, 0.306337893009185791, 0.306317806243896484, 0.306298315525054932, 0.306279391050338745, 0.306261003017425537, 0.306243151426315308, 0.306225806474685669, 0.306208968162536621, 0.306192606687545776, 0.306176722049713135, 0.306161314249038696, 0.306146323680877686, 0.30613178014755249, 0.306117653846740723, 0.306103944778442383, 0.306090623140335083, 0.306077688932418823, 0.306065112352371216, 0.306052923202514648, 0.306041061878204346, 0.306029558181762695, 0.30601838231086731, 0.306007534265518188, 0.305996984243392944, 0.305986762046813965, 0.305976808071136475, 0.305967181921005249, 0.305957794189453125, 0.30594867467880249, 0.305939853191375732, 0.305931270122528076, 0.305922925472259521, 0.305914819240570068, 0.305906951427459717, 0.305899322032928467, 0.305891901254653931, 0.305884689092636108, 0.305877715349197388, 0.305870920419692993, 0.305864304304122925, 0.30585789680480957, 0.305851668119430542, 0.30584561824798584, 0.305839776992797852, 0.305834054946899414, 0.305828511714935303, 0.305823147296905518, 0.305817931890487671, 0.305812865495681763, 0.305807918310165405, 0.305803149938583374, 0.305798500776290894, 0.305794000625610352, 0.30578961968421936, 0.30578535795211792, 0.30578121542930603, 0.305777221918106079, 0.305773317813873291, 0.305769532918930054, 0.305765867233276367, 0.305762290954589844, 0.305758804082870483, 0.305755436420440674, 0.305752187967300415, 0.305748999118804932, 0.305745929479598999, 0.305742919445037842, 0.305740028619766235, 0.305737197399139404, 0.305734455585479736, 0.305731773376464844, 0.305729180574417114, 0.305726677179336548, 0.305724233388900757, 0.305721879005432129, 0.305719554424285889, 0.305717319250106812, 0.30571514368057251, 0.305713057518005371, 0.30571100115776062, 0.305709004402160645, 0.305707067251205444, 0.30570518970489502, 0.30570337176322937, 0.305701613426208496, 0.30569988489151001, 0.305698215961456299, 0.305696606636047363, 0.305695027112960815, 0.305693507194519043, 0.305692017078399658, 0.305690556764602661, 0.305689156055450439, 0.305687814950942993, 0.305686503648757935, 0.305685192346572876, 0.30568397045135498, 0.305682748556137085, 0.305681586265563965, 0.305680423974990845, 0.3056793212890625, 0.305678248405456543, 0.305677205324172974, 0.305676192045211792, 0.305675208568572998, 0.305674254894256592, 0.305673301219940186, 0.305672407150268555, 0.305671542882919312, 0.305670678615570068, 0.305669844150543213, 0.305669039487838745, 0.305668264627456665, 0.305667519569396973, 0.30566677451133728, 0.305666059255599976, 0.305665373802185059, 0.305664688348770142, 0.305664032697677612, 0.305663406848907471, 0.305662781000137329, 0.305662184953689575, 0.305661588907241821, 0.305661022663116455, 0.305660486221313477, 0.305659949779510498, 0.305659443140029907, 0.305658936500549316, 0.305658429861068726, 0.305657953023910522, 0.305657505989074707, 0.305657058954238892, 0.305656611919403076, 0.305656194686889648, 0.305655777454376221, 0.305655390024185181, 0.305655002593994141, 0.305654615163803101, 0.305654257535934448, 0.305653899908065796, 0.305653572082519531, 0.305653214454650879, 0.305652916431427002, 0.305652588605880737, 0.30565229058265686, 0.305651992559432983, 0.305651694536209106, 0.305651426315307617, 0.30565112829208374, 0.305650889873504639, 0.305650621652603149, 0.305650383234024048, 0.305650115013122559, 0.305649906396865845, 0.305649667978286743, 0.305649429559707642, 0.305649220943450928, 0.305649012327194214, 0.3056488037109375, 0.305648624897003174, 0.30564841628074646, 0.305648237466812134, 0.305648058652877808, 0.305647879838943481, 0.305647701025009155, 0.305647552013397217, 0.305647373199462891, 0.305647224187850952, 0.305647075176239014, 0.305646926164627075, 0.305646777153015137, 0.305646657943725586, 0.305646508932113647, 0.305646389722824097, 0.305646240711212158, 0.305646121501922607, 0.305646002292633057, 0.305645883083343506, 0.305645763874053955, 0.305645674467086792, 0.305645555257797241, 0.305645465850830078, 0.305645346641540527, 0.305645257234573364, 0.305645167827606201, 0.305645078420639038, 0.305644989013671875, 0.305644899606704712, 0.305644810199737549, 0.305644720792770386, 0.30564466118812561, 0.305644571781158447, 0.305644482374191284, 0.305644422769546509, 0.305644363164901733, 0.30564427375793457, 0.305644214153289795, 0.30564415454864502, 0.305644094944000244, 0.305644035339355469, 0.305643975734710693, 0.305643916130065918, 0.305643856525421143, 0.305643796920776367, 0.305643737316131592, 0.305643677711486816, 0.305643647909164429, 0.305643588304519653, 0.305643558502197266, 0.30564349889755249, 0.305643469095230103, 0.305643409490585327, 0.305643379688262939, 0.305643320083618164, 0.305643290281295776, 0.305643260478973389, 0.305643200874328613, 0.305643171072006226, 0.305643141269683838, 0.30564311146736145, 0.305643081665039062, 0.305643051862716675, 0.305643022060394287, 0.305642992258071899, 0.305642962455749512, 0.305642932653427124, 0.305642902851104736, 0.305642873048782349, 0.305642843246459961, 0.305642813444137573, 0.305642783641815186, 0.305642753839492798, 0.305642753839492798, 0.30564272403717041, 0.305642694234848022, 0.305642664432525635, 0.305642664432525635, 0.305642634630203247, 0.305642604827880859, 0.305642604827880859, 0.305642575025558472, 0.305642575025558472, 0.305642545223236084, 0.305642515420913696, 0.305642515420913696, 0.305642485618591309, 0.305642485618591309, 0.305642455816268921, 0.305642455816268921, 0.305642426013946533, 0.305642426013946533, 0.305642396211624146, 0.305642396211624146, 0.305642396211624146, 0.305642366409301758, 0.305642366409301758, 0.30564233660697937, 0.30564233660697937, 0.30564233660697937, 0.305642306804656982, 0.305642306804656982, 0.305642306804656982, 0.305642277002334595, 0.305642277002334595, 0.305642277002334595, 0.305642247200012207, 0.305642247200012207, 0.305642247200012207, 0.305642217397689819, 0.305642217397689819, 0.305642217397689819, 0.305642217397689819, 0.305642187595367432, 0.305642187595367432, 0.305642187595367432, 0.305642187595367432, 0.305642187595367432, 0.305642157793045044, 0.305642157793045044, 0.305642157793045044, 0.305642157793045044, 0.305642157793045044, 0.305642127990722656, 0.305642127990722656, 0.305642127990722656, 0.305642127990722656, 0.305642127990722656, 0.305642098188400269, 0.305642098188400269, 0.305642098188400269, 0.305642098188400269, 0.305642098188400269, 0.305642098188400269, 0.305642098188400269, 0.305642098188400269, 0.305642068386077881, 0.305642068386077881, 0.305642068386077881, 0.305642068386077881, 0.305642068386077881, 0.305642068386077881, 0.305642068386077881, 0.305642068386077881, 0.305642068386077881, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642038583755493, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305642008781433105, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.305641978979110718, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, 0.30564194917678833, }; +static const float prec_c1[2130] = { 1.96974873542785645, 1.97059738636016846, 1.97144663333892822, 1.97229337692260742, 1.97313499450683594, 1.9739687442779541, 1.9747922420501709, 1.97560298442840576, 1.97639882564544678, 1.97717785835266113, 1.97793793678283691, 1.97867763042449951, 1.97939503192901611, 1.98008882999420166, 1.98075771331787109, 1.98140037059783936, 1.98201596736907959, 1.98260331153869629, 1.98316168785095215, 1.98369038105010986, 1.98418843746185303, 1.98465561866760254, 1.98509109020233154, 1.98549437522888184, 1.98586499691009521, 1.98620247840881348, 1.98650634288787842, 1.98677587509155273, 1.98701047897338867, 1.98720955848693848, 1.98737204074859619, 1.98749721050262451, 1.98758375644683838, 1.98763048648834229, 1.98763561248779297, 1.98759734630584717, 1.98751354217529297, 1.98738157749176025, 1.9871985912322998, 1.9869612455368042, 1.98666548728942871, 1.98630785942077637, 1.98588645458221436, 1.98539984226226807, 1.98484635353088379, 1.98422384262084961, 1.98353028297424316, 1.98276305198669434, 1.98191952705383301, 1.98099684715270996, 1.97999215126037598, 1.97890245914459229, 1.97772455215454102, 1.97645533084869385, 1.97509181499481201, 1.97363066673278809, 1.9720691442489624, 1.97040414810180664, 1.96863293647766113, 1.96675276756286621, 1.96476113796234131, 1.96265566349029541, 1.9604341983795166, 1.95809471607208252, 1.95563554763793945, 1.95305514335632324, 1.95035231113433838, 1.94752585887908936, 1.94457507133483887, 1.94149959087371826, 1.93829882144927979, 1.93497300148010254, 1.93152225017547607, 1.92794704437255859, 1.9242480993270874, 1.92042624950408936, 1.91648280620574951, 1.91241908073425293, 1.90823674201965332, 1.90393733978271484, 1.89952313899993896, 1.8949960470199585, 1.890358567237854, 1.8856130838394165, 1.88076233863830566, 1.87580907344818115, 1.87075614929199219, 1.86560654640197754, 1.86036360263824463, 1.85503041744232178, 1.84961032867431641, 1.84410679340362549, 1.838523268699646, 1.8328632116317749, 1.82713031768798828, 1.82132816314697266, 1.8154604434967041, 1.80953085422515869, 1.80354297161102295, 1.79750049114227295, 1.79140722751617432, 1.78526687622070312, 1.7790827751159668, 1.77285885810852051, 1.76659858226776123, 1.76030528545379639, 1.75398266315460205, 1.74763393402099609, 1.74126255512237549, 1.73487162590026855, 1.72846436500549316, 1.72204387187957764, 1.71561300754547119, 1.7091747522354126, 1.70273172855377197, 1.69628691673278809, 1.68984246253967285, 1.68340122699737549, 1.67696523666381836, 1.67053687572479248, 1.66411828994750977, 1.65771138668060303, 1.65131819248199463, 1.64494037628173828, 1.6385798454284668, 1.63223803043365479, 1.62591636180877686, 1.61961638927459717, 1.61333942413330078, 1.60708653926849365, 1.60085892677307129, 1.5946575403213501, 1.58848345279693604, 1.58233749866485596, 1.57622051239013672, 1.57013320922851562, 1.56407618522644043, 1.55805015563964844, 1.5520554780960083, 1.54609286785125732, 1.54016280174255371, 1.53426539897918701, 1.52840137481689453, 1.52257072925567627, 1.51677381992340088, 1.51101112365722656, 1.50528252124786377, 1.4995884895324707, 1.49392902851104736, 1.48830437660217285, 1.48271453380584717, 1.47715973854064941, 1.47164011001586914, 1.4661555290222168, 1.46070623397827148, 1.45529234409332275, 1.44991374015808105, 1.44457054138183594, 1.4392627477645874, 1.433990478515625, 1.42875373363494873, 1.42355263233184814, 1.41838705539703369, 1.41325712203979492, 1.40816283226013184, 1.40310430526733398, 1.39808142185211182, 1.39309442043304443, 1.38814318180084229, 1.38322782516479492, 1.37834846973419189, 1.3735051155090332, 1.36869776248931885, 1.36392664909362793, 1.3591916561126709, 1.3544929027557373, 1.34983062744140625, 1.34520494937896729, 1.34061574935913086, 1.33606326580047607, 1.33154749870300293, 1.32706880569458008, 1.32262718677520752, 1.3182227611541748, 1.31385576725006104, 1.30952632427215576, 1.30523455142974854, 1.30098056793212891, 1.29676485061645508, 1.2925872802734375, 1.28844809532165527, 1.28434765338897705, 1.28028619289398193, 1.27626371383666992, 1.27228069305419922, 1.26833736896514893, 1.26443386077880859, 1.26057052612304688, 1.25674772262573242, 1.25296556949615479, 1.24922454357147217, 1.24552488327026367, 1.2418670654296875, 1.2382512092590332, 1.23467779159545898, 1.23114728927612305, 1.22765994071960449, 1.22421622276306152, 1.22081661224365234, 1.21746146678924561, 1.21415126323699951, 1.21088647842407227, 1.20766758918762207, 1.20449519157409668, 1.20136964321136475, 1.19829177856445312, 1.19526183605194092, 1.19228065013885498, 1.18934881687164307, 1.18646681308746338, 1.18363547325134277, 1.180855393409729, 1.17812740802764893, 1.17545211315155029, 1.17283046245574951, 1.17026305198669434, 1.16775083541870117, 1.16529476642608643, 1.1628955602645874, 1.16055428981781006, 1.15827178955078125, 1.15604925155639648, 1.15388762950897217, 1.15178811550140381, 1.14975166320800781, 1.14777886867523193, 1.14586806297302246, 1.14401745796203613, 1.14222478866577148, 1.14048826694488525, 1.13880598545074463, 1.1371760368347168, 1.13559675216674805, 1.13406646251678467, 1.13258349895477295, 1.13114643096923828, 1.12975358963012695, 1.12840354442596436, 1.12709510326385498, 1.12582659721374512, 1.12459707260131836, 1.12340497970581055, 1.12224936485290527, 1.12112891674041748, 1.12004244327545166, 1.11898899078369141, 1.11796748638153076, 1.11697697639465332, 1.11601626873016357, 1.11508464813232422, 1.1141810417175293, 1.1133047342300415, 1.11245477199554443, 1.11163020133972168, 1.11083054542541504, 1.11005473136901855, 1.10930216312408447, 1.10857212543487549, 1.1078639030456543, 1.10717678070068359, 1.10651004314422607, 1.10586333274841309, 1.10523569583892822, 1.10462689399719238, 1.10403597354888916, 1.10346269607543945, 1.10290646553039551, 1.10236656665802002, 1.10184276103973389, 1.10133445262908936, 1.10084104537963867, 1.10036230087280273, 1.09989774227142334, 1.09944677352905273, 1.09900915622711182, 1.09858441352844238, 1.09817218780517578, 1.09777200222015381, 1.09738361835479736, 1.09700667858123779, 1.09664082527160645, 1.09628570079803467, 1.09594094753265381, 1.09560632705688477, 1.09528148174285889, 1.09496617317199707, 1.09466004371643066, 1.09436297416687012, 1.09407460689544678, 1.09379458427429199, 1.09352278709411621, 1.09325885772705078, 1.09300267696380615, 1.09275400638580322, 1.09251248836517334, 1.0922781229019165, 1.09205055236816406, 1.09182965755462646, 1.09161520004272461, 1.09140694141387939, 1.09120476245880127, 1.09100842475891113, 1.09081780910491943, 1.09063279628753662, 1.09045314788818359, 1.0902787446975708, 1.09010934829711914, 1.08994483947753906, 1.08978521823883057, 1.089630126953125, 1.08947968482971191, 1.08933353424072266, 1.08919155597686768, 1.08905375003814697, 1.088919997215271, 1.08879005908966064, 1.08866393566131592, 1.08854138851165771, 1.08842241764068604, 1.08830690383911133, 1.08819484710693359, 1.08808588981628418, 1.08798015117645264, 1.08787751197814941, 1.08777773380279541, 1.08768093585968018, 1.08758687973022461, 1.08749568462371826, 1.08740699291229248, 1.08732092380523682, 1.08723723888397217, 1.08715605735778809, 1.08707726001739502, 1.08700072765350342, 1.08692634105682373, 1.08685421943664551, 1.08678412437438965, 1.08671605587005615, 1.08664989471435547, 1.08658576011657715, 1.08652341365814209, 1.08646285533905029, 1.08640408515930176, 1.08634698390960693, 1.08629155158996582, 1.08623766899108887, 1.08618545532226562, 1.08613467216491699, 1.08608531951904297, 1.08603739738464355, 1.08599090576171875, 1.08594584465026855, 1.08590197563171387, 1.08585929870605469, 1.08581793308258057, 1.0857778787612915, 1.08573877811431885, 1.08570098876953125, 1.08566415309906006, 1.08562839031219482, 1.08559370040893555, 1.08556008338928223, 1.08552730083465576, 1.08549559116363525, 1.0854647159576416, 1.0854346752166748, 1.08540558815002441, 1.08537733554840088, 1.0853499174118042, 1.08532321453094482, 1.0852973461151123, 1.08527219295501709, 1.08524775505065918, 1.08522415161132812, 1.08520102500915527, 1.08517873287200928, 1.08515703678131104, 1.08513593673706055, 1.08511543273925781, 1.08509552478790283, 1.08507621288299561, 1.08505737781524658, 1.08503925800323486, 1.0850214958190918, 1.08500432968139648, 1.08498764038085938, 1.08497142791748047, 1.08495569229125977, 1.08494043350219727, 1.08492553234100342, 1.08491110801696777, 1.08489716053009033, 1.08488357067108154, 1.08487033843994141, 1.08485746383666992, 1.08484506607055664, 1.08483290672302246, 1.08482122421264648, 1.08480978012084961, 1.08479869365692139, 1.08478796482086182, 1.08477747440338135, 1.08476734161376953, 1.08475744724273682, 1.08474791049957275, 1.08473861217498779, 1.08472955226898193, 1.08472084999084473, 1.08471226692199707, 1.08470404148101807, 1.08469593524932861, 1.08468818664550781, 1.08468055725097656, 1.08467328548431396, 1.08466613292694092, 1.08465909957885742, 1.08465242385864258, 1.08464586734771729, 1.08463954925537109, 1.08463335037231445, 1.08462738990783691, 1.08462154865264893, 1.08461582660675049, 1.08461034297943115, 1.08460497856140137, 1.08459985256195068, 1.08459484577178955, 1.08458995819091797, 1.08458518981933594, 1.08458054065704346, 1.08457612991333008, 1.0845717191696167, 1.08456754684448242, 1.08456337451934814, 1.08455944061279297, 1.08455562591552734, 1.08455181121826172, 1.08454811573028564, 1.08454465866088867, 1.0845412015914917, 1.08453786373138428, 1.08453464508056641, 1.08453142642974854, 1.08452844619750977, 1.084525465965271, 1.08452248573303223, 1.08451974391937256, 1.08451700210571289, 1.08451437950134277, 1.08451175689697266, 1.08450925350189209, 1.08450686931610107, 1.08450448513031006, 1.08450222015380859, 1.08449995517730713, 1.08449780941009521, 1.08449578285217285, 1.08449375629425049, 1.08449172973632812, 1.08448982238769531, 1.08448803424835205, 1.08448612689971924, 1.08448445796966553, 1.08448266983032227, 1.08448100090026855, 1.08447945117950439, 1.08447790145874023, 1.08447635173797607, 1.08447492122650146, 1.08447349071502686, 1.08447206020355225, 1.08447074890136719, 1.08446943759918213, 1.08446812629699707, 1.08446693420410156, 1.08446574211120605, 1.08446455001831055, 1.08446335792541504, 1.08446228504180908, 1.08446121215820312, 1.08446013927459717, 1.08445918560028076, 1.08445823192596436, 1.08445727825164795, 1.08445632457733154, 1.08445537090301514, 1.08445453643798828, 1.08445370197296143, 1.08445286750793457, 1.08445203304290771, 1.08445131778717041, 1.08445060253143311, 1.0844498872756958, 1.0844491720199585, 1.08444845676422119, 1.08444774150848389, 1.08444714546203613, 1.08444643020629883, 1.08444583415985107, 1.08444523811340332, 1.08444464206695557, 1.08444416522979736, 1.08444356918334961, 1.08444309234619141, 1.08444249629974365, 1.08444201946258545, 1.08444154262542725, 1.08444106578826904, 1.08444058895111084, 1.08444023132324219, 1.08443975448608398, 1.08443927764892578, 1.08443892002105713, 1.08443856239318848, 1.08443808555603027, 1.08443772792816162, 1.08443737030029297, 1.08443701267242432, 1.08443665504455566, 1.08443641662597656, 1.08443605899810791, 1.08443570137023926, 1.08443546295166016, 1.0844351053237915, 1.0844348669052124, 1.0844346284866333, 1.08443427085876465, 1.08443403244018555, 1.08443379402160645, 1.08443355560302734, 1.08443331718444824, 1.08443307876586914, 1.08443284034729004, 1.08443260192871094, 1.08443236351013184, 1.08443224430084229, 1.08443200588226318, 1.08443176746368408, 1.08443164825439453, 1.08443140983581543, 1.08443129062652588, 1.08443105220794678, 1.08443093299865723, 1.08443069458007812, 1.08443057537078857, 1.08443045616149902, 1.08443021774291992, 1.08443009853363037, 1.08442997932434082, 1.08442986011505127, 1.08442974090576172, 1.08442962169647217, 1.08442950248718262, 1.08442938327789307, 1.08442926406860352, 1.08442914485931396, 1.08442902565002441, 1.08442890644073486, 1.08442878723144531, 1.08442866802215576, 1.08442854881286621, 1.08442842960357666, 1.08442842960357666, 1.08442831039428711, 1.08442819118499756, 1.08442807197570801, 1.08442807197570801, 1.08442795276641846, 1.08442783355712891, 1.08442783355712891, 1.08442771434783936, 1.0844275951385498, 1.0844275951385498, 1.08442747592926025, 1.08442747592926025, 1.0844273567199707, 1.0844273567199707, 1.08442723751068115, 1.08442723751068115, 1.0844271183013916, 1.0844271183013916, 1.08442699909210205, 1.08442699909210205, 1.0844268798828125, 1.0844268798828125, 1.08442676067352295, 1.08442676067352295, 1.08442676067352295, 1.0844266414642334, 1.0844266414642334, 1.0844266414642334, 1.08442652225494385, 1.08442652225494385, 1.08442652225494385, 1.0844264030456543, 1.0844264030456543, 1.0844264030456543, 1.08442628383636475, 1.08442628383636475, 1.08442628383636475, 1.08442628383636475, 1.0844261646270752, 1.0844261646270752, 1.0844261646270752, 1.0844261646270752, 1.08442604541778564, 1.08442604541778564, 1.08442604541778564, 1.08442604541778564, 1.08442604541778564, 1.08442592620849609, 1.08442592620849609, 1.08442592620849609, 1.08442592620849609, 1.08442592620849609, 1.08442592620849609, 1.08442580699920654, 1.08442580699920654, 1.08442580699920654, 1.08442580699920654, 1.08442580699920654, 1.08442580699920654, 1.08442568778991699, 1.08442568778991699, 1.08442568778991699, 1.08442568778991699, 1.08442568778991699, 1.08442568778991699, 1.08442568778991699, 1.08442568778991699, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442556858062744, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442544937133789, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442533016204834, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, 1.08442521095275879, }; +static const float prec_c2[2130] = { 0.492437899112701416, 0.492650061845779419, 0.49286237359046936, 0.49307405948638916, 0.493284493684768677, 0.493492931127548218, 0.493698805570602417, 0.493901491165161133, 0.494100481271743774, 0.494295209646224976, 0.494485259056091309, 0.49467015266418457, 0.494849503040313721, 0.495022952556610107, 0.495190173387527466, 0.495350837707519531, 0.49550473690032959, 0.495651572942733765, 0.495791137218475342, 0.495923280715942383, 0.496047824621200562, 0.496164590120315552, 0.496273458003997803, 0.496374279260635376, 0.496466934680938721, 0.496551275253295898, 0.496627211570739746, 0.496694594621658325, 0.49675324559211731, 0.496803015470504761, 0.496843636035919189, 0.49687492847442627, 0.496896564960479736, 0.496908217668533325, 0.496909499168395996, 0.496899932622909546, 0.496878981590270996, 0.496846020221710205, 0.496800273656845093, 0.496740937232971191, 0.496666997671127319, 0.496577620506286621, 0.496472269296646118, 0.496350646018981934, 0.496212273836135864, 0.496056646108627319, 0.495883285999298096, 0.495691478252410889, 0.495480597019195557, 0.495249956846237183, 0.494998782873153687, 0.494726359844207764, 0.494431883096694946, 0.494114577770233154, 0.493773698806762695, 0.493408411741256714, 0.493018031120300293, 0.492601752281188965, 0.4921589195728302, 0.491688847541809082, 0.491190910339355469, 0.490664511919021606, 0.490109086036682129, 0.489524185657501221, 0.488909333944320679, 0.488264173269271851, 0.487588405609130859, 0.486881732940673828, 0.486144006252288818, 0.485375046730041504, 0.484574824571609497, 0.483743339776992798, 0.482880622148513794, 0.481986790895462036, 0.481062024831771851, 0.480106562376022339, 0.479120701551437378, 0.478104770183563232, 0.47705918550491333, 0.475984364748001099, 0.474880814552307129, 0.473749101161956787, 0.472589731216430664, 0.471403390169143677, 0.470190733671188354, 0.468952417373657227, 0.467689186334609985, 0.466401785612106323, 0.465091019868850708, 0.463757693767547607, 0.462402641773223877, 0.46102672815322876, 0.459630817174911499, 0.458215802907943726, 0.456782609224319458, 0.455332130193710327, 0.453865349292755127, 0.452383160591125488, 0.450886547565460205, 0.449376434087753296, 0.447853803634643555, 0.446319609880447388, 0.444774806499481201, 0.443220317363739014, 0.441657096147537231, 0.440086126327514648, 0.438508272171020508, 0.436924487352371216, 0.435335665941238403, 0.433742672204971313, 0.432146400213241577, 0.43054768443107605, 0.428947359323501587, 0.427346229553222656, 0.42574504017829895, 0.424144595861434937, 0.42254561185836792, 0.420948773622512817, 0.419354736804962158, 0.417764216661453247, 0.416177749633789062, 0.414595961570739746, 0.413019418716430664, 0.411448627710342407, 0.409884065389633179, 0.408326238393783569, 0.406775563955307007, 0.405232429504394531, 0.403697222471237183, 0.402170300483703613, 0.4006519615650177, 0.39914250373840332, 0.397642225027084351, 0.396151334047317505, 0.394670069217681885, 0.393198609352111816, 0.391737103462219238, 0.390285760164260864, 0.388844668865203857, 0.387413918972015381, 0.385993659496307373, 0.384583920240402222, 0.38318479061126709, 0.381796300411224365, 0.380418479442596436, 0.379051357507705688, 0.377694934606552124, 0.376349180936813354, 0.375014126300811768, 0.373689740896224976, 0.372375994920730591, 0.371072828769683838, 0.369780242443084717, 0.368498146533966064, 0.367226511240005493, 0.36596524715423584, 0.364714354276657104, 0.363473713397979736, 0.362243294715881348, 0.361023008823394775, 0.359812796115875244, 0.358612626791000366, 0.357422381639480591, 0.356242001056671143, 0.355071455240249634, 0.353910624980926514, 0.352759480476379395, 0.351617962121963501, 0.35048598051071167, 0.349363505840301514, 0.348250478506088257, 0.347146809101104736, 0.346052497625350952, 0.344967454671859741, 0.343891650438308716, 0.342825025320053101, 0.341767549514770508, 0.34071919322013855, 0.339679926633834839, 0.338649719953536987, 0.33762851357460022, 0.336616307497024536, 0.335613101720809937, 0.334618836641311646, 0.333633512258529663, 0.332657158374786377, 0.331689715385437012, 0.330731213092803955, 0.329781651496887207, 0.328841030597686768, 0.327909350395202637, 0.326986640691757202, 0.326072931289672852, 0.325168222188949585, 0.324272513389587402, 0.323385894298553467, 0.322508335113525391, 0.321639925241470337, 0.320780694484710693, 0.319930672645568848, 0.319089889526367188, 0.318258464336395264, 0.317436397075653076, 0.316623777151107788, 0.315820664167404175, 0.315027117729187012, 0.314243227243423462, 0.313469082117080688, 0.312704771757125854, 0.311950355768203735, 0.311205953359603882, 0.310471624135971069, 0.309747546911239624, 0.309033781290054321, 0.308330446481704712, 0.307637661695480347, 0.306955575942993164, 0.306284308433532715, 0.30562397837638855, 0.304974764585494995, 0.304336816072463989, 0.303710252046585083, 0.30309528112411499, 0.302492052316665649, 0.301900744438171387, 0.301321566104888916, 0.300754696130752563, 0.300200313329696655, 0.299658656120300293, 0.299129903316497803, 0.298614352941513062, 0.298112183809280396, 0.297623664140701294, 0.297149032354354858, 0.296688586473464966, 0.296242386102676392, 0.295810163021087646, 0.295391380786895752, 0.294985681772232056, 0.294592559337615967, 0.294211626052856445, 0.293842494487762451, 0.293484747409820557, 0.293138027191162109, 0.292801946401596069, 0.29247620701789856, 0.29216042160987854, 0.291854292154312134, 0.291557520627975464, 0.291269809007644653, 0.290990829467773438, 0.290720343589782715, 0.290458053350448608, 0.290203690528869629, 0.289957046508789062, 0.289717823266983032, 0.289485841989517212, 0.289260834455490112, 0.28904259204864502, 0.288830935955047607, 0.288625597953796387, 0.288426429033279419, 0.28823322057723999, 0.288045793771743774, 0.287863940000534058, 0.287687540054321289, 0.287516415119171143, 0.287350356578826904, 0.287189245223999023, 0.287032932043075562, 0.28688126802444458, 0.286734074354171753, 0.286591261625289917, 0.286452680826187134, 0.286318212747573853, 0.286187708377838135, 0.286061078310012817, 0.285938173532485962, 0.285818874835968018, 0.285703122615814209, 0.285590767860412598, 0.285481750965118408, 0.285375922918319702, 0.285273194313049316, 0.285173505544662476, 0.285076737403869629, 0.284982800483703613, 0.284891635179519653, 0.284803152084350586, 0.28471723198890686, 0.284633874893188477, 0.284552931785583496, 0.284474343061447144, 0.284398078918457031, 0.284324020147323608, 0.284252166748046875, 0.284182369709014893, 0.284114629030227661, 0.284048885107040405, 0.283985048532485962, 0.283923059701919556, 0.283862888813018799, 0.283804476261138916, 0.283747762441635132, 0.283692687749862671, 0.283639222383499146, 0.283587336540222168, 0.283536940813064575, 0.283488005399703979, 0.283440500497817993, 0.283394396305084229, 0.283349603414535522, 0.283306121826171875, 0.283263921737670898, 0.283222943544387817, 0.283183127641677856, 0.283144503831863403, 0.283106982707977295, 0.283070534467697144, 0.283035159111022949, 0.283000826835632324, 0.282967478036880493, 0.282935082912445068, 0.28290364146232605, 0.282873094081878662, 0.282843440771102905, 0.282814651727676392, 0.282786697149276733, 0.282759577035903931, 0.28273320198059082, 0.28270760178565979, 0.282682746648788452, 0.282658606767654419, 0.28263518214225769, 0.282612413167953491, 0.282590329647064209, 0.282568871974945068, 0.282548010349273682, 0.282527774572372437, 0.282508134841918945, 0.28248906135559082, 0.282470524311065674, 0.282452523708343506, 0.282435059547424316, 0.28241807222366333, 0.282401591539382935, 0.282385587692260742, 0.282370060682296753, 0.282354950904846191, 0.282340317964553833, 0.282326072454452515, 0.282312244176864624, 0.282298833131790161, 0.282285809516906738, 0.282273143529891968, 0.282260864973068237, 0.282248914241790771, 0.282237321138381958, 0.282226055860519409, 0.282215118408203125, 0.282204508781433105, 0.282194197177886963, 0.282184183597564697, 0.282174468040466309, 0.282165020704269409, 0.282155841588973999, 0.282146960496902466, 0.282138288021087646, 0.282129913568496704, 0.282121747732162476, 0.282113820314407349, 0.282106131315231323, 0.282098650932312012, 0.282091408967971802, 0.282084345817565918, 0.282077521085739136, 0.28207087516784668, 0.28206440806388855, 0.282058149576187134, 0.282052069902420044, 0.282046139240264893, 0.282040417194366455, 0.282034844160079956, 0.282029420137405396, 0.282024145126342773, 0.282019048929214478, 0.28201410174369812, 0.282009273767471313, 0.282004594802856445, 0.282000064849853516, 0.281995654106140137, 0.281991362571716309, 0.281987190246582031, 0.281983166933059692, 0.281979233026504517, 0.281975418329238892, 0.281971722841262817, 0.281968116760253906, 0.281964629888534546, 0.281961232423782349, 0.281957954168319702, 0.281954765319824219, 0.281951636075973511, 0.281948626041412354, 0.281945705413818359, 0.281942844390869141, 0.281940102577209473, 0.28193742036819458, 0.281934797763824463, 0.281932264566421509, 0.281929820775985718, 0.281927436590194702, 0.281925112009048462, 0.281922847032546997, 0.281920671463012695, 0.281918555498123169, 0.281916499137878418, 0.281914472579956055, 0.281912535429000854, 0.28191065788269043, 0.281908810138702393, 0.281907021999359131, 0.281905293464660645, 0.281903624534606934, 0.28190198540687561, 0.281900405883789062, 0.281898856163024902, 0.281897366046905518, 0.281895905733108521, 0.281894505023956299, 0.281893134117126465, 0.281891793012619019, 0.281890511512756348, 0.281889259815216064, 0.281888037919998169, 0.281886845827102661, 0.281885713338851929, 0.281884580850601196, 0.281883507966995239, 0.28188246488571167, 0.281881421804428101, 0.281880438327789307, 0.2818794846534729, 0.281878530979156494, 0.281877636909484863, 0.281876742839813232, 0.281875878572463989, 0.281875044107437134, 0.281874239444732666, 0.281873464584350586, 0.281872689723968506, 0.281871944665908813, 0.281871229410171509, 0.281870543956756592, 0.281869858503341675, 0.281869202852249146, 0.281868547201156616, 0.281867951154708862, 0.281867325305938721, 0.281866759061813354, 0.281866192817687988, 0.281865626573562622, 0.281865090131759644, 0.281864553689956665, 0.281864047050476074, 0.281863570213317871, 0.281863093376159668, 0.281862616539001465, 0.281862169504165649, 0.281861722469329834, 0.281861305236816406, 0.281860888004302979, 0.281860500574111938, 0.281860113143920898, 0.281859725713729858, 0.281859368085861206, 0.281859010457992554, 0.281858652830123901, 0.281858325004577637, 0.281857997179031372, 0.281857669353485107, 0.28185737133026123, 0.281857073307037354, 0.281856775283813477, 0.281856507062911987, 0.28185620903968811, 0.281855940818786621, 0.28185570240020752, 0.28185543417930603, 0.281855195760726929, 0.281854957342147827, 0.281854718923568726, 0.281854510307312012, 0.281854301691055298, 0.281854093074798584, 0.28185388445854187, 0.281853675842285156, 0.28185349702835083, 0.281853288412094116, 0.28185310959815979, 0.281852930784225464, 0.281852751970291138, 0.281852602958679199, 0.281852424144744873, 0.281852275133132935, 0.281852126121520996, 0.281851977109909058, 0.281851828098297119, 0.281851679086685181, 0.28185155987739563, 0.281851410865783691, 0.281851291656494141, 0.28185117244720459, 0.281851053237915039, 0.281850934028625488, 0.281850814819335938, 0.281850695610046387, 0.281850606203079224, 0.281850486993789673, 0.28185039758682251, 0.281850308179855347, 0.281850188970565796, 0.281850099563598633, 0.28185001015663147, 0.281849920749664307, 0.281849831342697144, 0.281849771738052368, 0.281849682331085205, 0.281849592924118042, 0.281849533319473267, 0.281849443912506104, 0.281849384307861328, 0.281849324703216553, 0.28184923529624939, 0.281849175691604614, 0.281849116086959839, 0.281849056482315063, 0.281848996877670288, 0.281848937273025513, 0.281848877668380737, 0.281848818063735962, 0.281848758459091187, 0.281848728656768799, 0.281848669052124023, 0.281848609447479248, 0.28184857964515686, 0.281848520040512085, 0.281848490238189697, 0.281848430633544922, 0.281848400831222534, 0.281848341226577759, 0.281848311424255371, 0.281848281621932983, 0.281848251819610596, 0.28184819221496582, 0.281848162412643433, 0.281848132610321045, 0.281848102807998657, 0.28184807300567627, 0.281848043203353882, 0.281848013401031494, 0.281847983598709106, 0.281847953796386719, 0.281847923994064331, 0.281847894191741943, 0.281847864389419556, 0.281847834587097168, 0.28184780478477478, 0.281847774982452393, 0.281847774982452393, 0.281847745180130005, 0.281847715377807617, 0.281847685575485229, 0.281847685575485229, 0.281847655773162842, 0.281847625970840454, 0.281847625970840454, 0.281847596168518066, 0.281847566366195679, 0.281847566366195679, 0.281847536563873291, 0.281847536563873291, 0.281847506761550903, 0.281847506761550903, 0.281847476959228516, 0.281847476959228516, 0.281847447156906128, 0.281847447156906128, 0.28184741735458374, 0.28184741735458374, 0.281847387552261353, 0.281847387552261353, 0.281847387552261353, 0.281847357749938965, 0.281847357749938965, 0.281847327947616577, 0.281847327947616577, 0.281847327947616577, 0.281847298145294189, 0.281847298145294189, 0.281847298145294189, 0.281847268342971802, 0.281847268342971802, 0.281847268342971802, 0.281847268342971802, 0.281847238540649414, 0.281847238540649414, 0.281847238540649414, 0.281847238540649414, 0.281847208738327026, 0.281847208738327026, 0.281847208738327026, 0.281847208738327026, 0.281847178936004639, 0.281847178936004639, 0.281847178936004639, 0.281847178936004639, 0.281847178936004639, 0.281847149133682251, 0.281847149133682251, 0.281847149133682251, 0.281847149133682251, 0.281847149133682251, 0.281847149133682251, 0.281847119331359863, 0.281847119331359863, 0.281847119331359863, 0.281847119331359863, 0.281847119331359863, 0.281847119331359863, 0.281847089529037476, 0.281847089529037476, 0.281847089529037476, 0.281847089529037476, 0.281847089529037476, 0.281847089529037476, 0.281847089529037476, 0.281847089529037476, 0.281847089529037476, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.281847059726715088, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.2818470299243927, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281847000122070312, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, 0.281846970319747925, }; +static const float prec_corrF[2049] = { 0.336321085691452026, 0.336393117904663086, 0.336493164300918579, 0.336601048707962036, 0.336726725101470947, 0.336866706609725952, 0.337023645639419556, 0.337196767330169678, 0.337387800216674805, 0.337596595287322998, 0.337824434041976929, 0.338071614503860474, 0.338339269161224365, 0.338627934455871582, 0.338938593864440918, 0.339271873235702515, 0.339628726243972778, 0.340009778738021851, 0.34041595458984375, 0.340847909450531006, 0.341306477785110474, 0.341792255640029907, 0.342306017875671387, 0.342848360538482666, 0.343419939279556274, 0.344021320343017578, 0.344653040170669556, 0.34531557559967041, 0.34600946307182312, 0.346735000610351562, 0.347492694854736328, 0.348282784223556519, 0.349105596542358398, 0.349961340427398682, 0.350850284099578857, 0.351772516965866089, 0.35272824764251709, 0.35371747612953186, 0.354740262031555176, 0.355796635150909424, 0.356886565685272217, 0.358009934425354004, 0.359166711568832397, 0.360356688499450684, 0.361579716205596924, 0.362835586071014404, 0.364124089479446411, 0.36544489860534668, 0.366797745227813721, 0.368182271718978882, 0.369598150253295898, 0.371044933795928955, 0.372522234916687012, 0.374029606580734253, 0.375566571950912476, 0.377132594585418701, 0.378727138042449951, 0.380349695682525635, 0.381999611854553223, 0.383676320314407349, 0.385379195213317871, 0.387107551097869873, 0.388860732316970825, 0.390638053417205811, 0.392438769340515137, 0.394262135028839111, 0.396107465028762817, 0.397973954677581787, 0.399860858917236328, 0.401767373085021973, 0.403692722320556641, 0.405636072158813477, 0.407596677541732788, 0.409573733806610107, 0.411566406488418579, 0.413573890924453735, 0.415595442056655884, 0.417630225419998169, 0.419677466154098511, 0.421736419200897217, 0.423806309700012207, 0.425886362791061401, 0.427975922822952271, 0.430074185132980347, 0.432180523872375488, 0.434294193983078003, 0.436414629220962524, 0.438541114330291748, 0.44067305326461792, 0.442809849977493286, 0.444950968027114868, 0.4470958411693573, 0.449243903160095215, 0.451394736766815186, 0.453547805547714233, 0.455702662467956543, 0.457858860492706299, 0.460016041994094849, 0.462173819541931152, 0.464331775903701782, 0.466489613056182861, 0.468646973371505737, 0.470803558826446533, 0.472959131002426147, 0.475113362073898315, 0.477266043424606323, 0.479416906833648682, 0.481565773487091064, 0.483712375164031982, 0.485856562852859497, 0.487998157739639282, 0.490136981010437012, 0.492272853851318359, 0.494405627250671387, 0.496535152196884155, 0.498661309480667114, 0.500783979892730713, 0.502902984619140625, 0.505018234252929688, 0.50712960958480835, 0.509236991405487061, 0.51134026050567627, 0.51343923807144165, 0.515533924102783203, 0.517624139785766602, 0.519709765911102295, 0.521790742874145508, 0.523866891860961914, 0.525938034057617188, 0.528004169464111328, 0.53006511926651001, 0.532120704650878906, 0.534170866012573242, 0.536215364933013916, 0.538254141807556152, 0.54028695821762085, 0.542313754558563232, 0.544334292411804199, 0.546348392963409424, 0.548355937004089355, 0.550356686115264893, 0.552350401878356934, 0.554337024688720703, 0.556316196918487549, 0.55828779935836792, 0.560251593589782715, 0.562207281589508057, 0.564154744148254395, 0.566093564033508301, 0.568023681640625, 0.569944620132446289, 0.571856260299682617, 0.573758304119110107, 0.575650393962860107, 0.577532291412353516, 0.57940363883972168, 0.581264138221740723, 0.583113491535186768, 0.584951281547546387, 0.586777269840240479, 0.58859097957611084, 0.590392172336578369, 0.592180430889129639, 0.593955278396606445, 0.595716476440429688, 0.597463488578796387, 0.599195957183837891, 0.600913465023040771, 0.602615535259246826, 0.604301810264587402, 0.605971753597259521, 0.60762488842010498, 0.609260797500610352, 0.610878944396972656, 0.612478852272033691, 0.614059984683990479, 0.615621864795684814, 0.617163896560668945, 0.618685543537139893, 0.620186269283294678, 0.621665418148040771, 0.623122513294219971, 0.624556839466094971, 0.625967860221862793, 0.627354860305786133, 0.628717243671417236, 0.630054295063018799, 0.631365358829498291, 0.632649779319763184, 0.633906781673431396, 0.63513559103012085, 0.636335432529449463, 0.637505471706390381, 0.638644635677337646, 0.639751911163330078, 0.640826702117919922, 0.641869604587554932, 0.642881453037261963, 0.643863260746002197, 0.644815981388092041, 0.64574044942855835, 0.646637618541717529, 0.64750826358795166, 0.648353219032287598, 0.649173200130462646, 0.649968981742858887, 0.650741279125213623, 0.65149080753326416, 0.652218222618103027, 0.652924180030822754, 0.653609395027160645, 0.654274404048919678, 0.654919862747192383, 0.655546367168426514, 0.656154394149780273, 0.656744599342346191, 0.657317459583282471, 0.657873451709747314, 0.658413171768188477, 0.658937036991119385, 0.659445524215698242, 0.659939110279083252, 0.660418272018432617, 0.66088336706161499, 0.661334812641143799, 0.661773085594177246, 0.662198543548583984, 0.662611544132232666, 0.663012444972991943, 0.663401663303375244, 0.663779497146606445, 0.664146304130554199, 0.664502382278442383, 0.664848029613494873, 0.665183663368225098, 0.665509462356567383, 0.665825784206390381, 0.666132867336273193, 0.666431009769439697, 0.666720449924468994, 0.667001485824584961, 0.667274355888366699, 0.667539238929748535, 0.667796432971954346, 0.668046116828918457, 0.668288588523864746, 0.668523967266082764, 0.668752551078796387, 0.668974459171295166, 0.669189870357513428, 0.669399082660675049, 0.66960221529006958, 0.669799447059631348, 0.669990956783294678, 0.670176863670349121, 0.670357406139373779, 0.670532703399658203, 0.670702934265136719, 0.670868217945098877, 0.671028733253479004, 0.671184539794921875, 0.671335875988006592, 0.67148280143737793, 0.671625435352325439, 0.671764016151428223, 0.671898543834686279, 0.67202913761138916, 0.672155976295471191, 0.672279179096221924, 0.672398805618286133, 0.672514915466308594, 0.672627687454223633, 0.672737240791320801, 0.672843575477600098, 0.672946810722351074, 0.673047125339508057, 0.673144519329071045, 0.673239052295684814, 0.673330903053283691, 0.673420071601867676, 0.673506677150726318, 0.673590779304504395, 0.67367243766784668, 0.673751711845397949, 0.673828721046447754, 0.673903524875640869, 0.673976123332977295, 0.674046635627746582, 0.674115121364593506, 0.674181640148162842, 0.674246251583099365, 0.674308955669403076, 0.674369871616363525, 0.674428999423980713, 0.674486458301544189, 0.67454218864440918, 0.67459636926651001, 0.67464900016784668, 0.674700081348419189, 0.674749672412872314, 0.674797892570495605, 0.674844682216644287, 0.674890100955963135, 0.674934208393096924, 0.67497706413269043, 0.675018668174743652, 0.675059139728546143, 0.67509835958480835, 0.675136446952819824, 0.675173461437225342, 0.675209462642669678, 0.675244331359863281, 0.675278246402740479, 0.675311148166656494, 0.675343155860900879, 0.675374209880828857, 0.675404369831085205, 0.675433635711669922, 0.675462067127227783, 0.675489723682403564, 0.67551654577255249, 0.675542593002319336, 0.675567865371704102, 0.675592482089996338, 0.675616323947906494, 0.675639510154724121, 0.675661981105804443, 0.675683856010437012, 0.675705075263977051, 0.675725698471069336, 0.675745725631713867, 0.675765156745910645, 0.675784051418304443, 0.675802350044250488, 0.67582017183303833, 0.675837457180023193, 0.675854265689849854, 0.675870597362518311, 0.675886392593383789, 0.675901830196380615, 0.675916731357574463, 0.675931274890899658, 0.67594534158706665, 0.67595905065536499, 0.675972342491149902, 0.675985217094421387, 0.675997793674468994, 0.676009953022003174, 0.676021754741668701, 0.676033258438110352, 0.67604440450668335, 0.676055252552032471, 0.676065742969512939, 0.676075935363769531, 0.676085889339447021, 0.676095485687255859, 0.676104843616485596, 0.67611396312713623, 0.676122784614562988, 0.676131367683410645, 0.676139652729034424, 0.676147758960723877, 0.676155626773834229, 0.676163256168365479, 0.676170647144317627, 0.676177799701690674, 0.67618483304977417, 0.676191568374633789, 0.676198184490203857, 0.676204562187194824, 0.676210761070251465, 0.676216840744018555, 0.676222681999206543, 0.676228344440460205, 0.676233887672424316, 0.676239252090454102, 0.676244497299194336, 0.676249563694000244, 0.676254451274871826, 0.676259219646453857, 0.676263868808746338, 0.676268398761749268, 0.676272749900817871, 0.676276981830596924, 0.676281094551086426, 0.676285147666931152, 0.676289021968841553, 0.676292777061462402, 0.676296472549438477, 0.676300048828125, 0.676303505897521973, 0.676306843757629395, 0.676310122013092041, 0.676313281059265137, 0.676316380500793457, 0.676319360733032227, 0.676322281360626221, 0.676325082778930664, 0.676327824592590332, 0.676330447196960449, 0.676333069801330566, 0.676335573196411133, 0.676338016986846924, 0.676340341567993164, 0.676342666149139404, 0.676344871520996094, 0.676347076892852783, 0.676349163055419922, 0.676351189613342285, 0.676353216171264648, 0.676355123519897461, 0.676356971263885498, 0.676358819007873535, 0.676360607147216797, 0.676362276077270508, 0.676363945007324219, 0.676365554332733154, 0.67636716365814209, 0.676368653774261475, 0.676370143890380859, 0.676371574401855469, 0.676373004913330078, 0.676374375820159912, 0.676375687122344971, 0.676376938819885254, 0.676378190517425537, 0.676379382610321045, 0.676380574703216553, 0.676381707191467285, 0.676382839679718018, 0.676383912563323975, 0.676384925842285156, 0.676385939121246338, 0.67638695240020752, 0.676387906074523926, 0.676388800144195557, 0.676389694213867188, 0.676390588283538818, 0.676391422748565674, 0.676392257213592529, 0.676393032073974609, 0.676393806934356689, 0.67639458179473877, 0.676395297050476074, 0.676396012306213379, 0.676396727561950684, 0.676397383213043213, 0.676398038864135742, 0.676398694515228271, 0.676399290561676025, 0.676399886608123779, 0.676400482654571533, 0.676401019096374512, 0.676401615142822266, 0.676402151584625244, 0.676402628421783447, 0.676403164863586426, 0.676403641700744629, 0.676404118537902832, 0.67640453577041626, 0.676405012607574463, 0.676405429840087891, 0.676405847072601318, 0.676406264305114746, 0.676406681537628174, 0.676407039165496826, 0.676407456398010254, 0.676407814025878906, 0.676408171653747559, 0.676408469676971436, 0.676408827304840088, 0.676409125328063965, 0.676409482955932617, 0.676409780979156494, 0.676410079002380371, 0.676410317420959473, 0.67641061544418335, 0.676410913467407227, 0.676411151885986328, 0.67641139030456543, 0.676411688327789307, 0.676411926746368408, 0.676412105560302734, 0.676412343978881836, 0.676412582397460938, 0.676412820816040039, 0.676412999629974365, 0.676413178443908691, 0.676413416862487793, 0.676413595676422119, 0.676413774490356445, 0.676413953304290771, 0.676414132118225098, 0.676414310932159424, 0.67641448974609375, 0.676414608955383301, 0.676414787769317627, 0.676414906978607178, 0.676415085792541504, 0.676415205001831055, 0.676415383815765381, 0.676415503025054932, 0.676415622234344482, 0.676415741443634033, 0.676415860652923584, 0.676415979862213135, 0.676416099071502686, 0.676416218280792236, 0.676416337490081787, 0.676416456699371338, 0.676416516304016113, 0.676416635513305664, 0.676416754722595215, 0.67641681432723999, 0.676416933536529541, 0.676416993141174316, 0.676417112350463867, 0.676417171955108643, 0.676417231559753418, 0.676417350769042969, 0.676417410373687744, 0.67641746997833252, 0.676417529582977295, 0.676417648792266846, 0.676417708396911621, 0.676417768001556396, 0.676417827606201172, 0.676417887210845947, 0.676417946815490723, 0.676418006420135498, 0.676418066024780273, 0.676418125629425049, 0.676418185234069824, 0.6764182448387146, 0.6764182448387146, 0.676418304443359375, 0.67641836404800415, 0.676418423652648926, 0.676418483257293701, 0.676418483257293701, 0.676418542861938477, 0.676418602466583252, 0.676418602466583252, 0.676418662071228027, 0.676418721675872803, 0.676418721675872803, 0.676418781280517578, 0.676418781280517578, 0.676418840885162354, 0.676418900489807129, 0.676418900489807129, 0.676418960094451904, 0.676418960094451904, 0.67641901969909668, 0.67641901969909668, 0.676419079303741455, 0.676419079303741455, 0.676419079303741455, 0.67641913890838623, 0.67641913890838623, 0.676419198513031006, 0.676419198513031006, 0.676419198513031006, 0.676419258117675781, 0.676419258117675781, 0.676419258117675781, 0.676419317722320557, 0.676419317722320557, 0.676419317722320557, 0.676419377326965332, 0.676419377326965332, 0.676419377326965332, 0.676419377326965332, 0.676419436931610107, 0.676419436931610107, 0.676419436931610107, 0.676419436931610107, 0.676419496536254883, 0.676419496536254883, 0.676419496536254883, 0.676419496536254883, 0.676419556140899658, 0.676419556140899658, 0.676419556140899658, 0.676419556140899658, 0.676419556140899658, 0.676419615745544434, 0.676419615745544434, 0.676419615745544434, 0.676419615745544434, 0.676419615745544434, 0.676419615745544434, 0.676419615745544434, 0.676419675350189209, 0.676419675350189209, 0.676419675350189209, 0.676419675350189209, 0.676419675350189209, 0.676419675350189209, 0.676419675350189209, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.676419734954833984, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419913768768311, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.676419854164123535, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, 0.67641979455947876, }; +static const float prec_correctionWnd[4096] = { 0.999998509883880615, 0.999999940395355225, 1.00000429153442383, 1.00001144409179688, 1.00002157688140869, 1.00003457069396973, 1.00005042552947998, 1.00006914138793945, 1.0000908374786377, 1.00011527538299561, 1.00014257431030273, 1.00017285346984863, 1.00020599365234375, 1.00024187564849854, 1.00028073787689209, 1.00032234191894531, 1.00036680698394775, 1.00041413307189941, 1.00046432018280029, 1.00051724910736084, 1.00057315826416016, 1.00063169002532959, 1.00069308280944824, 1.00075733661651611, 1.00082433223724365, 1.00089406967163086, 1.00096666812896729, 1.00104200839996338, 1.00112009048461914, 1.00120079517364502, 1.00128436088562012, 1.00137054920196533, 1.00145947933197021, 1.00155115127563477, 1.00164544582366943, 1.00174248218536377, 1.00184214115142822, 1.00194442272186279, 1.00204932689666748, 1.00215685367584229, 1.00226700305938721, 1.00237977504730225, 1.00249505043029785, 1.00261294841766357, 1.00273334980010986, 1.00285625457763672, 1.00298166275024414, 1.00310969352722168, 1.00324010848999023, 1.0033729076385498, 1.00350821018218994, 1.00364601612091064, 1.00378608703613281, 1.00392866134643555, 1.00407350063323975, 1.00422072410583496, 1.00437033176422119, 1.00452220439910889, 1.00467634201049805, 1.00483286380767822, 1.00499153137207031, 1.00515234470367432, 1.00531554222106934, 1.00548076629638672, 1.00564825534820557, 1.00581777095794678, 1.0059894323348999, 1.00616323947906494, 1.00633907318115234, 1.00651693344116211, 1.00669693946838379, 1.00687873363494873, 1.00706267356872559, 1.0072484016418457, 1.00743615627288818, 1.00762581825256348, 1.00781726837158203, 1.00801050662994385, 1.00820565223693848, 1.00840258598327637, 1.00860130786895752, 1.00880169868469238, 1.00900375843048096, 1.00920748710632324, 1.00941300392150879, 1.00961995124816895, 1.00982856750488281, 1.01003885269165039, 1.01025056838989258, 1.01046371459960938, 1.01067841053009033, 1.0108945369720459, 1.01111209392547607, 1.01133096218109131, 1.01155126094818115, 1.01177287101745605, 1.01199567317962646, 1.01221978664398193, 1.01244509220123291, 1.01267170906066895, 1.01289939880371094, 1.01312816143035889, 1.01335799694061279, 1.01358902454376221, 1.01382100582122803, 1.01405394077301025, 1.01428794860839844, 1.01452279090881348, 1.01475846767425537, 1.01499509811401367, 1.01523256301879883, 1.01547074317932129, 1.01570975780487061, 1.01594936847686768, 1.0161898136138916, 1.01643085479736328, 1.01667249202728271, 1.01691460609436035, 1.01715743541717529, 1.01740062236785889, 1.01764440536499023, 1.01788854598999023, 1.01813304424285889, 1.01837801933288574, 1.0186232328414917, 1.01886880397796631, 1.01911461353302002, 1.01936054229736328, 1.01960670948028564, 1.01985299587249756, 1.02009952068328857, 1.02034592628479004, 1.02059245109558105, 1.02083897590637207, 1.02108550071716309, 1.021331787109375, 1.02157807350158691, 1.02182424068450928, 1.02207005023956299, 1.02231574058532715, 1.02256119251251221, 1.02280628681182861, 1.02305102348327637, 1.02329540252685547, 1.02353942394256592, 1.02378284931182861, 1.02402591705322266, 1.02426838874816895, 1.02451026439666748, 1.02475154399871826, 1.02499222755432129, 1.02523219585418701, 1.02547144889831543, 1.02570986747741699, 1.02594757080078125, 1.02618443965911865, 1.0264204740524292, 1.02665555477142334, 1.02688968181610107, 1.0271228551864624, 1.02735495567321777, 1.02758610248565674, 1.0278160572052002, 1.0280449390411377, 1.02827262878417969, 1.02849912643432617, 1.02872443199157715, 1.02894842624664307, 1.02917110919952393, 1.02939248085021973, 1.02961242198944092, 1.0298309326171875, 1.03004813194274902, 1.03026366233825684, 1.03047776222229004, 1.03069043159484863, 1.03090131282806396, 1.03111064434051514, 1.03131842613220215, 1.0315244197845459, 1.03172862529754639, 1.03193116188049316, 1.03213191032409668, 1.03233075141906738, 1.03252780437469482, 1.03272294998168945, 1.03291618824005127, 1.03310751914978027, 1.03329682350158691, 1.03348410129547119, 1.03366935253143311, 1.03385257720947266, 1.03403365612030029, 1.03421258926391602, 1.03438937664031982, 1.03456389904022217, 1.0347362756729126, 1.03490638732910156, 1.03507423400878906, 1.03523969650268555, 1.03540289402008057, 1.03556370735168457, 1.03572213649749756, 1.03587818145751953, 1.03603172302246094, 1.03618288040161133, 1.0363314151763916, 1.03647756576538086, 1.03662109375, 1.03676211833953857, 1.03690052032470703, 1.03703629970550537, 1.03716945648193359, 1.03729987144470215, 1.03742766380310059, 1.03755283355712891, 1.03767514228820801, 1.03779482841491699, 1.03791165351867676, 1.03802573680877686, 1.03813695907592773, 1.03824543952941895, 1.03835105895996094, 1.03845381736755371, 1.03855371475219727, 1.03865063190460205, 1.03874468803405762, 1.03883588314056396, 1.03892409801483154, 1.03900933265686035, 1.03909158706665039, 1.03917086124420166, 1.03924715518951416, 1.03932046890258789, 1.0393906831741333, 1.03945791721343994, 1.03952205181121826, 1.03958308696746826, 1.03964114189147949, 1.0396960973739624, 1.03974795341491699, 1.03979671001434326, 1.03984236717224121, 1.03988492488861084, 1.03992438316345215, 1.03996062278747559, 1.0399937629699707, 1.0400238037109375, 1.04005074501037598, 1.04007446765899658, 1.04009497165679932, 1.04011237621307373, 1.04012668132781982, 1.04013776779174805, 1.0401456356048584, 1.04015040397644043, 1.04015195369720459, 1.04015040397644043, 1.0401456356048584, 1.04013776779174805, 1.04012668132781982, 1.04011237621307373, 1.04009497165679932, 1.04007446765899658, 1.04005074501037598, 1.0400238037109375, 1.0399937629699707, 1.03996062278747559, 1.03992438316345215, 1.03988492488861084, 1.03984236717224121, 1.03979671001434326, 1.03974795341491699, 1.0396960973739624, 1.03964114189147949, 1.03958308696746826, 1.03952205181121826, 1.03945791721343994, 1.0393906831741333, 1.03932046890258789, 1.03924715518951416, 1.03917086124420166, 1.03909158706665039, 1.03900933265686035, 1.03892409801483154, 1.03883588314056396, 1.03874468803405762, 1.03865063190460205, 1.03855371475219727, 1.03845381736755371, 1.03835105895996094, 1.03824543952941895, 1.03813695907592773, 1.03802573680877686, 1.03791165351867676, 1.03779482841491699, 1.03767514228820801, 1.03755283355712891, 1.03742766380310059, 1.03729987144470215, 1.03716945648193359, 1.03703629970550537, 1.03690052032470703, 1.03676211833953857, 1.03662109375, 1.03647756576538086, 1.0363314151763916, 1.03618288040161133, 1.03603172302246094, 1.03587818145751953, 1.03572213649749756, 1.03556370735168457, 1.03540289402008057, 1.03523969650268555, 1.03507423400878906, 1.03490638732910156, 1.0347362756729126, 1.03456389904022217, 1.03438937664031982, 1.03421258926391602, 1.03403365612030029, 1.03385257720947266, 1.03366935253143311, 1.03348410129547119, 1.03329682350158691, 1.03310751914978027, 1.03291618824005127, 1.03272294998168945, 1.03252780437469482, 1.03233075141906738, 1.03213191032409668, 1.03193116188049316, 1.03172862529754639, 1.0315244197845459, 1.03131842613220215, 1.03111064434051514, 1.03090131282806396, 1.03069043159484863, 1.03047776222229004, 1.03026366233825684, 1.03004813194274902, 1.0298309326171875, 1.02961242198944092, 1.02939248085021973, 1.02917110919952393, 1.02894842624664307, 1.02872443199157715, 1.02849912643432617, 1.02827262878417969, 1.0280449390411377, 1.0278160572052002, 1.02758610248565674, 1.02735495567321777, 1.0271228551864624, 1.02688968181610107, 1.02665555477142334, 1.0264204740524292, 1.02618443965911865, 1.02594757080078125, 1.02570986747741699, 1.02547144889831543, 1.02523219585418701, 1.02499222755432129, 1.02475154399871826, 1.02451026439666748, 1.02426838874816895, 1.02402591705322266, 1.02378284931182861, 1.02353942394256592, 1.02329540252685547, 1.02305102348327637, 1.02280628681182861, 1.02256119251251221, 1.02231574058532715, 1.02207005023956299, 1.02182424068450928, 1.02157807350158691, 1.021331787109375, 1.02108550071716309, 1.02083897590637207, 1.02059245109558105, 1.02034592628479004, 1.02009952068328857, 1.01985299587249756, 1.01960670948028564, 1.01936054229736328, 1.01911461353302002, 1.01886880397796631, 1.0186232328414917, 1.01837801933288574, 1.01813304424285889, 1.01788854598999023, 1.01764440536499023, 1.01740062236785889, 1.01715743541717529, 1.01691460609436035, 1.01667249202728271, 1.01643085479736328, 1.0161898136138916, 1.01594936847686768, 1.01570975780487061, 1.01547074317932129, 1.01523256301879883, 1.01499509811401367, 1.01475846767425537, 1.01452279090881348, 1.01428794860839844, 1.01405394077301025, 1.01382100582122803, 1.01358902454376221, 1.01335799694061279, 1.01312816143035889, 1.01289939880371094, 1.01267170906066895, 1.01244509220123291, 1.01221978664398193, 1.01199567317962646, 1.01177287101745605, 1.01155126094818115, 1.01133096218109131, 1.01111209392547607, 1.0108945369720459, 1.01067841053009033, 1.01046371459960938, 1.01025056838989258, 1.01003885269165039, 1.00982856750488281, 1.00961995124816895, 1.00941300392150879, 1.00920748710632324, 1.00900375843048096, 1.00880169868469238, 1.00860130786895752, 1.00840258598327637, 1.00820565223693848, 1.00801050662994385, 1.00781726837158203, 1.00762581825256348, 1.00743615627288818, 1.0072484016418457, 1.00706267356872559, 1.00687873363494873, 1.00669693946838379, 1.00651693344116211, 1.00633907318115234, 1.00616323947906494, 1.0059894323348999, 1.00581777095794678, 1.00564825534820557, 1.00548076629638672, 1.00531554222106934, 1.00515234470367432, 1.00499153137207031, 1.00483286380767822, 1.00467634201049805, 1.00452220439910889, 1.00437033176422119, 1.00422072410583496, 1.00407350063323975, 1.00392866134643555, 1.00378608703613281, 1.00364601612091064, 1.00350821018218994, 1.0033729076385498, 1.00324010848999023, 1.00310969352722168, 1.00298166275024414, 1.00285625457763672, 1.00273334980010986, 1.00261294841766357, 1.00249505043029785, 1.00237977504730225, 1.00226700305938721, 1.00215685367584229, 1.00204932689666748, 1.00194442272186279, 1.00184214115142822, 1.00174248218536377, 1.00164544582366943, 1.00155115127563477, 1.00145947933197021, 1.00137054920196533, 1.00128436088562012, 1.00120079517364502, 1.00112009048461914, 1.00104200839996338, 1.00096666812896729, 1.00089406967163086, 1.00082433223724365, 1.00075733661651611, 1.00069308280944824, 1.00063169002532959, 1.00057315826416016, 1.00051724910736084, 1.00046432018280029, 1.00041413307189941, 1.00036680698394775, 1.00032234191894531, 1.00028073787689209, 1.00024187564849854, 1.00020599365234375, 1.00017285346984863, 1.00014257431030273, 1.00011527538299561, 1.0000908374786377, 1.00006914138793945, 1.00005042552947998, 1.00003457069396973, 1.00002157688140869, 1.00001144409179688, 1.00000429153442383, 0.999999940395355225, 0.999998509883880615, 0.999999940395355225, 1.00000429153442383, 1.00001144409179688, 1.00002157688140869, 1.00003457069396973, 1.00005042552947998, 1.00006914138793945, 1.0000908374786377, 1.00011527538299561, 1.00014257431030273, 1.00017285346984863, 1.00020599365234375, 1.00024187564849854, 1.00028073787689209, 1.00032234191894531, 1.00036680698394775, 1.00041413307189941, 1.00046432018280029, 1.00051724910736084, 1.00057315826416016, 1.00063169002532959, 1.00069308280944824, 1.00075733661651611, 1.00082433223724365, 1.00089406967163086, 1.00096666812896729, 1.00104200839996338, 1.00112009048461914, 1.00120079517364502, 1.00128436088562012, 1.00137054920196533, 1.00145947933197021, 1.00155115127563477, 1.00164544582366943, 1.00174248218536377, 1.00184214115142822, 1.00194442272186279, 1.00204932689666748, 1.00215685367584229, 1.00226700305938721, 1.00237977504730225, 1.00249505043029785, 1.00261294841766357, 1.00273334980010986, 1.00285625457763672, 1.00298166275024414, 1.00310969352722168, 1.00324010848999023, 1.0033729076385498, 1.00350821018218994, 1.00364601612091064, 1.00378608703613281, 1.00392866134643555, 1.00407350063323975, 1.00422072410583496, 1.00437033176422119, 1.00452220439910889, 1.00467634201049805, 1.00483286380767822, 1.00499153137207031, 1.00515234470367432, 1.00531554222106934, 1.00548076629638672, 1.00564825534820557, 1.00581777095794678, 1.0059894323348999, 1.00616323947906494, 1.00633907318115234, 1.00651693344116211, 1.00669693946838379, 1.00687873363494873, 1.00706267356872559, 1.0072484016418457, 1.00743615627288818, 1.00762581825256348, 1.00781726837158203, 1.00801050662994385, 1.00820565223693848, 1.00840258598327637, 1.00860130786895752, 1.00880169868469238, 1.00900375843048096, 1.00920748710632324, 1.00941300392150879, 1.00961995124816895, 1.00982856750488281, 1.01003885269165039, 1.01025056838989258, 1.01046371459960938, 1.01067841053009033, 1.0108945369720459, 1.01111209392547607, 1.01133096218109131, 1.01155126094818115, 1.01177287101745605, 1.01199567317962646, 1.01221978664398193, 1.01244509220123291, 1.01267170906066895, 1.01289939880371094, 1.01312816143035889, 1.01335799694061279, 1.01358902454376221, 1.01382100582122803, 1.01405394077301025, 1.01428794860839844, 1.01452279090881348, 1.01475846767425537, 1.01499509811401367, 1.01523256301879883, 1.01547074317932129, 1.01570975780487061, 1.01594936847686768, 1.0161898136138916, 1.01643085479736328, 1.01667249202728271, 1.01691460609436035, 1.01715743541717529, 1.01740062236785889, 1.01764440536499023, 1.01788854598999023, 1.01813304424285889, 1.01837801933288574, 1.0186232328414917, 1.01886880397796631, 1.01911461353302002, 1.01936054229736328, 1.01960670948028564, 1.01985299587249756, 1.02009952068328857, 1.02034592628479004, 1.02059245109558105, 1.02083897590637207, 1.02108550071716309, 1.021331787109375, 1.02157807350158691, 1.02182424068450928, 1.02207005023956299, 1.02231574058532715, 1.02256119251251221, 1.02280628681182861, 1.02305102348327637, 1.02329540252685547, 1.02353942394256592, 1.02378284931182861, 1.02402591705322266, 1.02426838874816895, 1.02451026439666748, 1.02475154399871826, 1.02499222755432129, 1.02523219585418701, 1.02547144889831543, 1.02570986747741699, 1.02594757080078125, 1.02618443965911865, 1.0264204740524292, 1.02665555477142334, 1.02688968181610107, 1.0271228551864624, 1.02735495567321777, 1.02758610248565674, 1.0278160572052002, 1.0280449390411377, 1.02827262878417969, 1.02849912643432617, 1.02872443199157715, 1.02894842624664307, 1.02917110919952393, 1.02939248085021973, 1.02961242198944092, 1.0298309326171875, 1.03004813194274902, 1.03026366233825684, 1.03047776222229004, 1.03069043159484863, 1.03090131282806396, 1.03111064434051514, 1.03131842613220215, 1.0315244197845459, 1.03172862529754639, 1.03193116188049316, 1.03213191032409668, 1.03233075141906738, 1.03252780437469482, 1.03272294998168945, 1.03291618824005127, 1.03310751914978027, 1.03329682350158691, 1.03348410129547119, 1.03366935253143311, 1.03385257720947266, 1.03403365612030029, 1.03421258926391602, 1.03438937664031982, 1.03456389904022217, 1.0347362756729126, 1.03490638732910156, 1.03507423400878906, 1.03523969650268555, 1.03540289402008057, 1.03556370735168457, 1.03572213649749756, 1.03587818145751953, 1.03603172302246094, 1.03618288040161133, 1.0363314151763916, 1.03647756576538086, 1.03662109375, 1.03676211833953857, 1.03690052032470703, 1.03703629970550537, 1.03716945648193359, 1.03729987144470215, 1.03742766380310059, 1.03755283355712891, 1.03767514228820801, 1.03779482841491699, 1.03791165351867676, 1.03802573680877686, 1.03813695907592773, 1.03824543952941895, 1.03835105895996094, 1.03845381736755371, 1.03855371475219727, 1.03865063190460205, 1.03874468803405762, 1.03883588314056396, 1.03892409801483154, 1.03900933265686035, 1.03909158706665039, 1.03917086124420166, 1.03924715518951416, 1.03932046890258789, 1.0393906831741333, 1.03945791721343994, 1.03952205181121826, 1.03958308696746826, 1.03964114189147949, 1.0396960973739624, 1.03974795341491699, 1.03979671001434326, 1.03984236717224121, 1.03988492488861084, 1.03992438316345215, 1.03996062278747559, 1.0399937629699707, 1.0400238037109375, 1.04005074501037598, 1.04007446765899658, 1.04009497165679932, 1.04011237621307373, 1.04012668132781982, 1.04013776779174805, 1.0401456356048584, 1.04015040397644043, 1.04015195369720459, 1.04015040397644043, 1.0401456356048584, 1.04013776779174805, 1.04012668132781982, 1.04011237621307373, 1.04009497165679932, 1.04007446765899658, 1.04005074501037598, 1.0400238037109375, 1.0399937629699707, 1.03996062278747559, 1.03992438316345215, 1.03988492488861084, 1.03984236717224121, 1.03979671001434326, 1.03974795341491699, 1.0396960973739624, 1.03964114189147949, 1.03958308696746826, 1.03952205181121826, 1.03945791721343994, 1.0393906831741333, 1.03932046890258789, 1.03924715518951416, 1.03917086124420166, 1.03909158706665039, 1.03900933265686035, 1.03892409801483154, 1.03883588314056396, 1.03874468803405762, 1.03865063190460205, 1.03855371475219727, 1.03845381736755371, 1.03835105895996094, 1.03824543952941895, 1.03813695907592773, 1.03802573680877686, 1.03791165351867676, 1.03779482841491699, 1.03767514228820801, 1.03755283355712891, 1.03742766380310059, 1.03729987144470215, 1.03716945648193359, 1.03703629970550537, 1.03690052032470703, 1.03676211833953857, 1.03662109375, 1.03647756576538086, 1.0363314151763916, 1.03618288040161133, 1.03603172302246094, 1.03587818145751953, 1.03572213649749756, 1.03556370735168457, 1.03540289402008057, 1.03523969650268555, 1.03507423400878906, 1.03490638732910156, 1.0347362756729126, 1.03456389904022217, 1.03438937664031982, 1.03421258926391602, 1.03403365612030029, 1.03385257720947266, 1.03366935253143311, 1.03348410129547119, 1.03329682350158691, 1.03310751914978027, 1.03291618824005127, 1.03272294998168945, 1.03252780437469482, 1.03233075141906738, 1.03213191032409668, 1.03193116188049316, 1.03172862529754639, 1.0315244197845459, 1.03131842613220215, 1.03111064434051514, 1.03090131282806396, 1.03069043159484863, 1.03047776222229004, 1.03026366233825684, 1.03004813194274902, 1.0298309326171875, 1.02961242198944092, 1.02939248085021973, 1.02917110919952393, 1.02894842624664307, 1.02872443199157715, 1.02849912643432617, 1.02827262878417969, 1.0280449390411377, 1.0278160572052002, 1.02758610248565674, 1.02735495567321777, 1.0271228551864624, 1.02688968181610107, 1.02665555477142334, 1.0264204740524292, 1.02618443965911865, 1.02594757080078125, 1.02570986747741699, 1.02547144889831543, 1.02523219585418701, 1.02499222755432129, 1.02475154399871826, 1.02451026439666748, 1.02426838874816895, 1.02402591705322266, 1.02378284931182861, 1.02353942394256592, 1.02329540252685547, 1.02305102348327637, 1.02280628681182861, 1.02256119251251221, 1.02231574058532715, 1.02207005023956299, 1.02182424068450928, 1.02157807350158691, 1.021331787109375, 1.02108550071716309, 1.02083897590637207, 1.02059245109558105, 1.02034592628479004, 1.02009952068328857, 1.01985299587249756, 1.01960670948028564, 1.01936054229736328, 1.01911461353302002, 1.01886880397796631, 1.0186232328414917, 1.01837801933288574, 1.01813304424285889, 1.01788854598999023, 1.01764440536499023, 1.01740062236785889, 1.01715743541717529, 1.01691460609436035, 1.01667249202728271, 1.01643085479736328, 1.0161898136138916, 1.01594936847686768, 1.01570975780487061, 1.01547074317932129, 1.01523256301879883, 1.01499509811401367, 1.01475846767425537, 1.01452279090881348, 1.01428794860839844, 1.01405394077301025, 1.01382100582122803, 1.01358902454376221, 1.01335799694061279, 1.01312816143035889, 1.01289939880371094, 1.01267170906066895, 1.01244509220123291, 1.01221978664398193, 1.01199567317962646, 1.01177287101745605, 1.01155126094818115, 1.01133096218109131, 1.01111209392547607, 1.0108945369720459, 1.01067841053009033, 1.01046371459960938, 1.01025056838989258, 1.01003885269165039, 1.00982856750488281, 1.00961995124816895, 1.00941300392150879, 1.00920748710632324, 1.00900375843048096, 1.00880169868469238, 1.00860130786895752, 1.00840258598327637, 1.00820565223693848, 1.00801050662994385, 1.00781726837158203, 1.00762581825256348, 1.00743615627288818, 1.0072484016418457, 1.00706267356872559, 1.00687873363494873, 1.00669693946838379, 1.00651693344116211, 1.00633907318115234, 1.00616323947906494, 1.0059894323348999, 1.00581777095794678, 1.00564825534820557, 1.00548076629638672, 1.00531554222106934, 1.00515234470367432, 1.00499153137207031, 1.00483286380767822, 1.00467634201049805, 1.00452220439910889, 1.00437033176422119, 1.00422072410583496, 1.00407350063323975, 1.00392866134643555, 1.00378608703613281, 1.00364601612091064, 1.00350821018218994, 1.0033729076385498, 1.00324010848999023, 1.00310969352722168, 1.00298166275024414, 1.00285625457763672, 1.00273334980010986, 1.00261294841766357, 1.00249505043029785, 1.00237977504730225, 1.00226700305938721, 1.00215685367584229, 1.00204932689666748, 1.00194442272186279, 1.00184214115142822, 1.00174248218536377, 1.00164544582366943, 1.00155115127563477, 1.00145947933197021, 1.00137054920196533, 1.00128436088562012, 1.00120079517364502, 1.00112009048461914, 1.00104200839996338, 1.00096666812896729, 1.00089406967163086, 1.00082433223724365, 1.00075733661651611, 1.00069308280944824, 1.00063169002532959, 1.00057315826416016, 1.00051724910736084, 1.00046432018280029, 1.00041413307189941, 1.00036680698394775, 1.00032234191894531, 1.00028073787689209, 1.00024187564849854, 1.00020599365234375, 1.00017285346984863, 1.00014257431030273, 1.00011527538299561, 1.0000908374786377, 1.00006914138793945, 1.00005042552947998, 1.00003457069396973, 1.00002157688140869, 1.00001144409179688, 1.00000429153442383, 0.999999940395355225, 0.999998509883880615, 0.999999940395355225, 1.00000429153442383, 1.00001144409179688, 1.00002157688140869, 1.00003457069396973, 1.00005042552947998, 1.00006914138793945, 1.0000908374786377, 1.00011527538299561, 1.00014257431030273, 1.00017285346984863, 1.00020599365234375, 1.00024187564849854, 1.00028073787689209, 1.00032234191894531, 1.00036680698394775, 1.00041413307189941, 1.00046432018280029, 1.00051724910736084, 1.00057315826416016, 1.00063169002532959, 1.00069308280944824, 1.00075733661651611, 1.00082433223724365, 1.00089406967163086, 1.00096666812896729, 1.00104200839996338, 1.00112009048461914, 1.00120079517364502, 1.00128436088562012, 1.00137054920196533, 1.00145947933197021, 1.00155115127563477, 1.00164544582366943, 1.00174248218536377, 1.00184214115142822, 1.00194442272186279, 1.00204932689666748, 1.00215685367584229, 1.00226700305938721, 1.00237977504730225, 1.00249505043029785, 1.00261294841766357, 1.00273334980010986, 1.00285625457763672, 1.00298166275024414, 1.00310969352722168, 1.00324010848999023, 1.0033729076385498, 1.00350821018218994, 1.00364601612091064, 1.00378608703613281, 1.00392866134643555, 1.00407350063323975, 1.00422072410583496, 1.00437033176422119, 1.00452220439910889, 1.00467634201049805, 1.00483286380767822, 1.00499153137207031, 1.00515234470367432, 1.00531554222106934, 1.00548076629638672, 1.00564825534820557, 1.00581777095794678, 1.0059894323348999, 1.00616323947906494, 1.00633907318115234, 1.00651693344116211, 1.00669693946838379, 1.00687873363494873, 1.00706267356872559, 1.0072484016418457, 1.00743615627288818, 1.00762581825256348, 1.00781726837158203, 1.00801050662994385, 1.00820565223693848, 1.00840258598327637, 1.00860130786895752, 1.00880169868469238, 1.00900375843048096, 1.00920748710632324, 1.00941300392150879, 1.00961995124816895, 1.00982856750488281, 1.01003885269165039, 1.01025056838989258, 1.01046371459960938, 1.01067841053009033, 1.0108945369720459, 1.01111209392547607, 1.01133096218109131, 1.01155126094818115, 1.01177287101745605, 1.01199567317962646, 1.01221978664398193, 1.01244509220123291, 1.01267170906066895, 1.01289939880371094, 1.01312816143035889, 1.01335799694061279, 1.01358902454376221, 1.01382100582122803, 1.01405394077301025, 1.01428794860839844, 1.01452279090881348, 1.01475846767425537, 1.01499509811401367, 1.01523256301879883, 1.01547074317932129, 1.01570975780487061, 1.01594936847686768, 1.0161898136138916, 1.01643085479736328, 1.01667249202728271, 1.01691460609436035, 1.01715743541717529, 1.01740062236785889, 1.01764440536499023, 1.01788854598999023, 1.01813304424285889, 1.01837801933288574, 1.0186232328414917, 1.01886880397796631, 1.01911461353302002, 1.01936054229736328, 1.01960670948028564, 1.01985299587249756, 1.02009952068328857, 1.02034592628479004, 1.02059245109558105, 1.02083897590637207, 1.02108550071716309, 1.021331787109375, 1.02157807350158691, 1.02182424068450928, 1.02207005023956299, 1.02231574058532715, 1.02256119251251221, 1.02280628681182861, 1.02305102348327637, 1.02329540252685547, 1.02353942394256592, 1.02378284931182861, 1.02402591705322266, 1.02426838874816895, 1.02451026439666748, 1.02475154399871826, 1.02499222755432129, 1.02523219585418701, 1.02547144889831543, 1.02570986747741699, 1.02594757080078125, 1.02618443965911865, 1.0264204740524292, 1.02665555477142334, 1.02688968181610107, 1.0271228551864624, 1.02735495567321777, 1.02758610248565674, 1.0278160572052002, 1.0280449390411377, 1.02827262878417969, 1.02849912643432617, 1.02872443199157715, 1.02894842624664307, 1.02917110919952393, 1.02939248085021973, 1.02961242198944092, 1.0298309326171875, 1.03004813194274902, 1.03026366233825684, 1.03047776222229004, 1.03069043159484863, 1.03090131282806396, 1.03111064434051514, 1.03131842613220215, 1.0315244197845459, 1.03172862529754639, 1.03193116188049316, 1.03213191032409668, 1.03233075141906738, 1.03252780437469482, 1.03272294998168945, 1.03291618824005127, 1.03310751914978027, 1.03329682350158691, 1.03348410129547119, 1.03366935253143311, 1.03385257720947266, 1.03403365612030029, 1.03421258926391602, 1.03438937664031982, 1.03456389904022217, 1.0347362756729126, 1.03490638732910156, 1.03507423400878906, 1.03523969650268555, 1.03540289402008057, 1.03556370735168457, 1.03572213649749756, 1.03587818145751953, 1.03603172302246094, 1.03618288040161133, 1.0363314151763916, 1.03647756576538086, 1.03662109375, 1.03676211833953857, 1.03690052032470703, 1.03703629970550537, 1.03716945648193359, 1.03729987144470215, 1.03742766380310059, 1.03755283355712891, 1.03767514228820801, 1.03779482841491699, 1.03791165351867676, 1.03802573680877686, 1.03813695907592773, 1.03824543952941895, 1.03835105895996094, 1.03845381736755371, 1.03855371475219727, 1.03865063190460205, 1.03874468803405762, 1.03883588314056396, 1.03892409801483154, 1.03900933265686035, 1.03909158706665039, 1.03917086124420166, 1.03924715518951416, 1.03932046890258789, 1.0393906831741333, 1.03945791721343994, 1.03952205181121826, 1.03958308696746826, 1.03964114189147949, 1.0396960973739624, 1.03974795341491699, 1.03979671001434326, 1.03984236717224121, 1.03988492488861084, 1.03992438316345215, 1.03996062278747559, 1.0399937629699707, 1.0400238037109375, 1.04005074501037598, 1.04007446765899658, 1.04009497165679932, 1.04011237621307373, 1.04012668132781982, 1.04013776779174805, 1.0401456356048584, 1.04015040397644043, 1.04015195369720459, 1.04015040397644043, 1.0401456356048584, 1.04013776779174805, 1.04012668132781982, 1.04011237621307373, 1.04009497165679932, 1.04007446765899658, 1.04005074501037598, 1.0400238037109375, 1.0399937629699707, 1.03996062278747559, 1.03992438316345215, 1.03988492488861084, 1.03984236717224121, 1.03979671001434326, 1.03974795341491699, 1.0396960973739624, 1.03964114189147949, 1.03958308696746826, 1.03952205181121826, 1.03945791721343994, 1.0393906831741333, 1.03932046890258789, 1.03924715518951416, 1.03917086124420166, 1.03909158706665039, 1.03900933265686035, 1.03892409801483154, 1.03883588314056396, 1.03874468803405762, 1.03865063190460205, 1.03855371475219727, 1.03845381736755371, 1.03835105895996094, 1.03824543952941895, 1.03813695907592773, 1.03802573680877686, 1.03791165351867676, 1.03779482841491699, 1.03767514228820801, 1.03755283355712891, 1.03742766380310059, 1.03729987144470215, 1.03716945648193359, 1.03703629970550537, 1.03690052032470703, 1.03676211833953857, 1.03662109375, 1.03647756576538086, 1.0363314151763916, 1.03618288040161133, 1.03603172302246094, 1.03587818145751953, 1.03572213649749756, 1.03556370735168457, 1.03540289402008057, 1.03523969650268555, 1.03507423400878906, 1.03490638732910156, 1.0347362756729126, 1.03456389904022217, 1.03438937664031982, 1.03421258926391602, 1.03403365612030029, 1.03385257720947266, 1.03366935253143311, 1.03348410129547119, 1.03329682350158691, 1.03310751914978027, 1.03291618824005127, 1.03272294998168945, 1.03252780437469482, 1.03233075141906738, 1.03213191032409668, 1.03193116188049316, 1.03172862529754639, 1.0315244197845459, 1.03131842613220215, 1.03111064434051514, 1.03090131282806396, 1.03069043159484863, 1.03047776222229004, 1.03026366233825684, 1.03004813194274902, 1.0298309326171875, 1.02961242198944092, 1.02939248085021973, 1.02917110919952393, 1.02894842624664307, 1.02872443199157715, 1.02849912643432617, 1.02827262878417969, 1.0280449390411377, 1.0278160572052002, 1.02758610248565674, 1.02735495567321777, 1.0271228551864624, 1.02688968181610107, 1.02665555477142334, 1.0264204740524292, 1.02618443965911865, 1.02594757080078125, 1.02570986747741699, 1.02547144889831543, 1.02523219585418701, 1.02499222755432129, 1.02475154399871826, 1.02451026439666748, 1.02426838874816895, 1.02402591705322266, 1.02378284931182861, 1.02353942394256592, 1.02329540252685547, 1.02305102348327637, 1.02280628681182861, 1.02256119251251221, 1.02231574058532715, 1.02207005023956299, 1.02182424068450928, 1.02157807350158691, 1.021331787109375, 1.02108550071716309, 1.02083897590637207, 1.02059245109558105, 1.02034592628479004, 1.02009952068328857, 1.01985299587249756, 1.01960670948028564, 1.01936054229736328, 1.01911461353302002, 1.01886880397796631, 1.0186232328414917, 1.01837801933288574, 1.01813304424285889, 1.01788854598999023, 1.01764440536499023, 1.01740062236785889, 1.01715743541717529, 1.01691460609436035, 1.01667249202728271, 1.01643085479736328, 1.0161898136138916, 1.01594936847686768, 1.01570975780487061, 1.01547074317932129, 1.01523256301879883, 1.01499509811401367, 1.01475846767425537, 1.01452279090881348, 1.01428794860839844, 1.01405394077301025, 1.01382100582122803, 1.01358902454376221, 1.01335799694061279, 1.01312816143035889, 1.01289939880371094, 1.01267170906066895, 1.01244509220123291, 1.01221978664398193, 1.01199567317962646, 1.01177287101745605, 1.01155126094818115, 1.01133096218109131, 1.01111209392547607, 1.0108945369720459, 1.01067841053009033, 1.01046371459960938, 1.01025056838989258, 1.01003885269165039, 1.00982856750488281, 1.00961995124816895, 1.00941300392150879, 1.00920748710632324, 1.00900375843048096, 1.00880169868469238, 1.00860130786895752, 1.00840258598327637, 1.00820565223693848, 1.00801050662994385, 1.00781726837158203, 1.00762581825256348, 1.00743615627288818, 1.0072484016418457, 1.00706267356872559, 1.00687873363494873, 1.00669693946838379, 1.00651693344116211, 1.00633907318115234, 1.00616323947906494, 1.0059894323348999, 1.00581777095794678, 1.00564825534820557, 1.00548076629638672, 1.00531554222106934, 1.00515234470367432, 1.00499153137207031, 1.00483286380767822, 1.00467634201049805, 1.00452220439910889, 1.00437033176422119, 1.00422072410583496, 1.00407350063323975, 1.00392866134643555, 1.00378608703613281, 1.00364601612091064, 1.00350821018218994, 1.0033729076385498, 1.00324010848999023, 1.00310969352722168, 1.00298166275024414, 1.00285625457763672, 1.00273334980010986, 1.00261294841766357, 1.00249505043029785, 1.00237977504730225, 1.00226700305938721, 1.00215685367584229, 1.00204932689666748, 1.00194442272186279, 1.00184214115142822, 1.00174248218536377, 1.00164544582366943, 1.00155115127563477, 1.00145947933197021, 1.00137054920196533, 1.00128436088562012, 1.00120079517364502, 1.00112009048461914, 1.00104200839996338, 1.00096666812896729, 1.00089406967163086, 1.00082433223724365, 1.00075733661651611, 1.00069308280944824, 1.00063169002532959, 1.00057315826416016, 1.00051724910736084, 1.00046432018280029, 1.00041413307189941, 1.00036680698394775, 1.00032234191894531, 1.00028073787689209, 1.00024187564849854, 1.00020599365234375, 1.00017285346984863, 1.00014257431030273, 1.00011527538299561, 1.0000908374786377, 1.00006914138793945, 1.00005042552947998, 1.00003457069396973, 1.00002157688140869, 1.00001144409179688, 1.00000429153442383, 0.999999940395355225, 0.999998509883880615, 0.999999940395355225, 1.00000429153442383, 1.00001144409179688, 1.00002157688140869, 1.00003457069396973, 1.00005042552947998, 1.00006914138793945, 1.0000908374786377, 1.00011527538299561, 1.00014257431030273, 1.00017285346984863, 1.00020599365234375, 1.00024187564849854, 1.00028073787689209, 1.00032234191894531, 1.00036680698394775, 1.00041413307189941, 1.00046432018280029, 1.00051724910736084, 1.00057315826416016, 1.00063169002532959, 1.00069308280944824, 1.00075733661651611, 1.00082433223724365, 1.00089406967163086, 1.00096666812896729, 1.00104200839996338, 1.00112009048461914, 1.00120079517364502, 1.00128436088562012, 1.00137054920196533, 1.00145947933197021, 1.00155115127563477, 1.00164544582366943, 1.00174248218536377, 1.00184214115142822, 1.00194442272186279, 1.00204932689666748, 1.00215685367584229, 1.00226700305938721, 1.00237977504730225, 1.00249505043029785, 1.00261294841766357, 1.00273334980010986, 1.00285625457763672, 1.00298166275024414, 1.00310969352722168, 1.00324010848999023, 1.0033729076385498, 1.00350821018218994, 1.00364601612091064, 1.00378608703613281, 1.00392866134643555, 1.00407350063323975, 1.00422072410583496, 1.00437033176422119, 1.00452220439910889, 1.00467634201049805, 1.00483286380767822, 1.00499153137207031, 1.00515234470367432, 1.00531554222106934, 1.00548076629638672, 1.00564825534820557, 1.00581777095794678, 1.0059894323348999, 1.00616323947906494, 1.00633907318115234, 1.00651693344116211, 1.00669693946838379, 1.00687873363494873, 1.00706267356872559, 1.0072484016418457, 1.00743615627288818, 1.00762581825256348, 1.00781726837158203, 1.00801050662994385, 1.00820565223693848, 1.00840258598327637, 1.00860130786895752, 1.00880169868469238, 1.00900375843048096, 1.00920748710632324, 1.00941300392150879, 1.00961995124816895, 1.00982856750488281, 1.01003885269165039, 1.01025056838989258, 1.01046371459960938, 1.01067841053009033, 1.0108945369720459, 1.01111209392547607, 1.01133096218109131, 1.01155126094818115, 1.01177287101745605, 1.01199567317962646, 1.01221978664398193, 1.01244509220123291, 1.01267170906066895, 1.01289939880371094, 1.01312816143035889, 1.01335799694061279, 1.01358902454376221, 1.01382100582122803, 1.01405394077301025, 1.01428794860839844, 1.01452279090881348, 1.01475846767425537, 1.01499509811401367, 1.01523256301879883, 1.01547074317932129, 1.01570975780487061, 1.01594936847686768, 1.0161898136138916, 1.01643085479736328, 1.01667249202728271, 1.01691460609436035, 1.01715743541717529, 1.01740062236785889, 1.01764440536499023, 1.01788854598999023, 1.01813304424285889, 1.01837801933288574, 1.0186232328414917, 1.01886880397796631, 1.01911461353302002, 1.01936054229736328, 1.01960670948028564, 1.01985299587249756, 1.02009952068328857, 1.02034592628479004, 1.02059245109558105, 1.02083897590637207, 1.02108550071716309, 1.021331787109375, 1.02157807350158691, 1.02182424068450928, 1.02207005023956299, 1.02231574058532715, 1.02256119251251221, 1.02280628681182861, 1.02305102348327637, 1.02329540252685547, 1.02353942394256592, 1.02378284931182861, 1.02402591705322266, 1.02426838874816895, 1.02451026439666748, 1.02475154399871826, 1.02499222755432129, 1.02523219585418701, 1.02547144889831543, 1.02570986747741699, 1.02594757080078125, 1.02618443965911865, 1.0264204740524292, 1.02665555477142334, 1.02688968181610107, 1.0271228551864624, 1.02735495567321777, 1.02758610248565674, 1.0278160572052002, 1.0280449390411377, 1.02827262878417969, 1.02849912643432617, 1.02872443199157715, 1.02894842624664307, 1.02917110919952393, 1.02939248085021973, 1.02961242198944092, 1.0298309326171875, 1.03004813194274902, 1.03026366233825684, 1.03047776222229004, 1.03069043159484863, 1.03090131282806396, 1.03111064434051514, 1.03131842613220215, 1.0315244197845459, 1.03172862529754639, 1.03193116188049316, 1.03213191032409668, 1.03233075141906738, 1.03252780437469482, 1.03272294998168945, 1.03291618824005127, 1.03310751914978027, 1.03329682350158691, 1.03348410129547119, 1.03366935253143311, 1.03385257720947266, 1.03403365612030029, 1.03421258926391602, 1.03438937664031982, 1.03456389904022217, 1.0347362756729126, 1.03490638732910156, 1.03507423400878906, 1.03523969650268555, 1.03540289402008057, 1.03556370735168457, 1.03572213649749756, 1.03587818145751953, 1.03603172302246094, 1.03618288040161133, 1.0363314151763916, 1.03647756576538086, 1.03662109375, 1.03676211833953857, 1.03690052032470703, 1.03703629970550537, 1.03716945648193359, 1.03729987144470215, 1.03742766380310059, 1.03755283355712891, 1.03767514228820801, 1.03779482841491699, 1.03791165351867676, 1.03802573680877686, 1.03813695907592773, 1.03824543952941895, 1.03835105895996094, 1.03845381736755371, 1.03855371475219727, 1.03865063190460205, 1.03874468803405762, 1.03883588314056396, 1.03892409801483154, 1.03900933265686035, 1.03909158706665039, 1.03917086124420166, 1.03924715518951416, 1.03932046890258789, 1.0393906831741333, 1.03945791721343994, 1.03952205181121826, 1.03958308696746826, 1.03964114189147949, 1.0396960973739624, 1.03974795341491699, 1.03979671001434326, 1.03984236717224121, 1.03988492488861084, 1.03992438316345215, 1.03996062278747559, 1.0399937629699707, 1.0400238037109375, 1.04005074501037598, 1.04007446765899658, 1.04009497165679932, 1.04011237621307373, 1.04012668132781982, 1.04013776779174805, 1.0401456356048584, 1.04015040397644043, 1.04015195369720459, 1.04015040397644043, 1.0401456356048584, 1.04013776779174805, 1.04012668132781982, 1.04011237621307373, 1.04009497165679932, 1.04007446765899658, 1.04005074501037598, 1.0400238037109375, 1.0399937629699707, 1.03996062278747559, 1.03992438316345215, 1.03988492488861084, 1.03984236717224121, 1.03979671001434326, 1.03974795341491699, 1.0396960973739624, 1.03964114189147949, 1.03958308696746826, 1.03952205181121826, 1.03945791721343994, 1.0393906831741333, 1.03932046890258789, 1.03924715518951416, 1.03917086124420166, 1.03909158706665039, 1.03900933265686035, 1.03892409801483154, 1.03883588314056396, 1.03874468803405762, 1.03865063190460205, 1.03855371475219727, 1.03845381736755371, 1.03835105895996094, 1.03824543952941895, 1.03813695907592773, 1.03802573680877686, 1.03791165351867676, 1.03779482841491699, 1.03767514228820801, 1.03755283355712891, 1.03742766380310059, 1.03729987144470215, 1.03716945648193359, 1.03703629970550537, 1.03690052032470703, 1.03676211833953857, 1.03662109375, 1.03647756576538086, 1.0363314151763916, 1.03618288040161133, 1.03603172302246094, 1.03587818145751953, 1.03572213649749756, 1.03556370735168457, 1.03540289402008057, 1.03523969650268555, 1.03507423400878906, 1.03490638732910156, 1.0347362756729126, 1.03456389904022217, 1.03438937664031982, 1.03421258926391602, 1.03403365612030029, 1.03385257720947266, 1.03366935253143311, 1.03348410129547119, 1.03329682350158691, 1.03310751914978027, 1.03291618824005127, 1.03272294998168945, 1.03252780437469482, 1.03233075141906738, 1.03213191032409668, 1.03193116188049316, 1.03172862529754639, 1.0315244197845459, 1.03131842613220215, 1.03111064434051514, 1.03090131282806396, 1.03069043159484863, 1.03047776222229004, 1.03026366233825684, 1.03004813194274902, 1.0298309326171875, 1.02961242198944092, 1.02939248085021973, 1.02917110919952393, 1.02894842624664307, 1.02872443199157715, 1.02849912643432617, 1.02827262878417969, 1.0280449390411377, 1.0278160572052002, 1.02758610248565674, 1.02735495567321777, 1.0271228551864624, 1.02688968181610107, 1.02665555477142334, 1.0264204740524292, 1.02618443965911865, 1.02594757080078125, 1.02570986747741699, 1.02547144889831543, 1.02523219585418701, 1.02499222755432129, 1.02475154399871826, 1.02451026439666748, 1.02426838874816895, 1.02402591705322266, 1.02378284931182861, 1.02353942394256592, 1.02329540252685547, 1.02305102348327637, 1.02280628681182861, 1.02256119251251221, 1.02231574058532715, 1.02207005023956299, 1.02182424068450928, 1.02157807350158691, 1.021331787109375, 1.02108550071716309, 1.02083897590637207, 1.02059245109558105, 1.02034592628479004, 1.02009952068328857, 1.01985299587249756, 1.01960670948028564, 1.01936054229736328, 1.01911461353302002, 1.01886880397796631, 1.0186232328414917, 1.01837801933288574, 1.01813304424285889, 1.01788854598999023, 1.01764440536499023, 1.01740062236785889, 1.01715743541717529, 1.01691460609436035, 1.01667249202728271, 1.01643085479736328, 1.0161898136138916, 1.01594936847686768, 1.01570975780487061, 1.01547074317932129, 1.01523256301879883, 1.01499509811401367, 1.01475846767425537, 1.01452279090881348, 1.01428794860839844, 1.01405394077301025, 1.01382100582122803, 1.01358902454376221, 1.01335799694061279, 1.01312816143035889, 1.01289939880371094, 1.01267170906066895, 1.01244509220123291, 1.01221978664398193, 1.01199567317962646, 1.01177287101745605, 1.01155126094818115, 1.01133096218109131, 1.01111209392547607, 1.0108945369720459, 1.01067841053009033, 1.01046371459960938, 1.01025056838989258, 1.01003885269165039, 1.00982856750488281, 1.00961995124816895, 1.00941300392150879, 1.00920748710632324, 1.00900375843048096, 1.00880169868469238, 1.00860130786895752, 1.00840258598327637, 1.00820565223693848, 1.00801050662994385, 1.00781726837158203, 1.00762581825256348, 1.00743615627288818, 1.0072484016418457, 1.00706267356872559, 1.00687873363494873, 1.00669693946838379, 1.00651693344116211, 1.00633907318115234, 1.00616323947906494, 1.0059894323348999, 1.00581777095794678, 1.00564825534820557, 1.00548076629638672, 1.00531554222106934, 1.00515234470367432, 1.00499153137207031, 1.00483286380767822, 1.00467634201049805, 1.00452220439910889, 1.00437033176422119, 1.00422072410583496, 1.00407350063323975, 1.00392866134643555, 1.00378608703613281, 1.00364601612091064, 1.00350821018218994, 1.0033729076385498, 1.00324010848999023, 1.00310969352722168, 1.00298166275024414, 1.00285625457763672, 1.00273334980010986, 1.00261294841766357, 1.00249505043029785, 1.00237977504730225, 1.00226700305938721, 1.00215685367584229, 1.00204932689666748, 1.00194442272186279, 1.00184214115142822, 1.00174248218536377, 1.00164544582366943, 1.00155115127563477, 1.00145947933197021, 1.00137054920196533, 1.00128436088562012, 1.00120079517364502, 1.00112009048461914, 1.00104200839996338, 1.00096666812896729, 1.00089406967163086, 1.00082433223724365, 1.00075733661651611, 1.00069308280944824, 1.00063169002532959, 1.00057315826416016, 1.00051724910736084, 1.00046432018280029, 1.00041413307189941, 1.00036680698394775, 1.00032234191894531, 1.00028073787689209, 1.00024187564849854, 1.00020599365234375, 1.00017285346984863, 1.00014257431030273, 1.00011527538299561, 1.0000908374786377, 1.00006914138793945, 1.00005042552947998, 1.00003457069396973, 1.00002157688140869, 1.00001144409179688, 1.00000429153442383, 0.999999940395355225, 0.999998509883880615, 0.999999940395355225, 1.00000429153442383, 1.00001144409179688, 1.00002157688140869, 1.00003457069396973, 1.00005042552947998, 1.00006914138793945, 1.0000908374786377, 1.00011527538299561, 1.00014257431030273, 1.00017285346984863, 1.00020599365234375, 1.00024187564849854, 1.00028073787689209, 1.00032234191894531, 1.00036680698394775, 1.00041413307189941, 1.00046432018280029, 1.00051724910736084, 1.00057315826416016, 1.00063169002532959, 1.00069308280944824, 1.00075733661651611, 1.00082433223724365, 1.00089406967163086, 1.00096666812896729, 1.00104200839996338, 1.00112009048461914, 1.00120079517364502, 1.00128436088562012, 1.00137054920196533, 1.00145947933197021, 1.00155115127563477, 1.00164544582366943, 1.00174248218536377, 1.00184214115142822, 1.00194442272186279, 1.00204932689666748, 1.00215685367584229, 1.00226700305938721, 1.00237977504730225, 1.00249505043029785, 1.00261294841766357, 1.00273334980010986, 1.00285625457763672, 1.00298166275024414, 1.00310969352722168, 1.00324010848999023, 1.0033729076385498, 1.00350821018218994, 1.00364601612091064, 1.00378608703613281, 1.00392866134643555, 1.00407350063323975, 1.00422072410583496, 1.00437033176422119, 1.00452220439910889, 1.00467634201049805, 1.00483286380767822, 1.00499153137207031, 1.00515234470367432, 1.00531554222106934, 1.00548076629638672, 1.00564825534820557, 1.00581777095794678, 1.0059894323348999, 1.00616323947906494, 1.00633907318115234, 1.00651693344116211, 1.00669693946838379, 1.00687873363494873, 1.00706267356872559, 1.0072484016418457, 1.00743615627288818, 1.00762581825256348, 1.00781726837158203, 1.00801050662994385, 1.00820565223693848, 1.00840258598327637, 1.00860130786895752, 1.00880169868469238, 1.00900375843048096, 1.00920748710632324, 1.00941300392150879, 1.00961995124816895, 1.00982856750488281, 1.01003885269165039, 1.01025056838989258, 1.01046371459960938, 1.01067841053009033, 1.0108945369720459, 1.01111209392547607, 1.01133096218109131, 1.01155126094818115, 1.01177287101745605, 1.01199567317962646, 1.01221978664398193, 1.01244509220123291, 1.01267170906066895, 1.01289939880371094, 1.01312816143035889, 1.01335799694061279, 1.01358902454376221, 1.01382100582122803, 1.01405394077301025, 1.01428794860839844, 1.01452279090881348, 1.01475846767425537, 1.01499509811401367, 1.01523256301879883, 1.01547074317932129, 1.01570975780487061, 1.01594936847686768, 1.0161898136138916, 1.01643085479736328, 1.01667249202728271, 1.01691460609436035, 1.01715743541717529, 1.01740062236785889, 1.01764440536499023, 1.01788854598999023, 1.01813304424285889, 1.01837801933288574, 1.0186232328414917, 1.01886880397796631, 1.01911461353302002, 1.01936054229736328, 1.01960670948028564, 1.01985299587249756, 1.02009952068328857, 1.02034592628479004, 1.02059245109558105, 1.02083897590637207, 1.02108550071716309, 1.021331787109375, 1.02157807350158691, 1.02182424068450928, 1.02207005023956299, 1.02231574058532715, 1.02256119251251221, 1.02280628681182861, 1.02305102348327637, 1.02329540252685547, 1.02353942394256592, 1.02378284931182861, 1.02402591705322266, 1.02426838874816895, 1.02451026439666748, 1.02475154399871826, 1.02499222755432129, 1.02523219585418701, 1.02547144889831543, 1.02570986747741699, 1.02594757080078125, 1.02618443965911865, 1.0264204740524292, 1.02665555477142334, 1.02688968181610107, 1.0271228551864624, 1.02735495567321777, 1.02758610248565674, 1.0278160572052002, 1.0280449390411377, 1.02827262878417969, 1.02849912643432617, 1.02872443199157715, 1.02894842624664307, 1.02917110919952393, 1.02939248085021973, 1.02961242198944092, 1.0298309326171875, 1.03004813194274902, 1.03026366233825684, 1.03047776222229004, 1.03069043159484863, 1.03090131282806396, 1.03111064434051514, 1.03131842613220215, 1.0315244197845459, 1.03172862529754639, 1.03193116188049316, 1.03213191032409668, 1.03233075141906738, 1.03252780437469482, 1.03272294998168945, 1.03291618824005127, 1.03310751914978027, 1.03329682350158691, 1.03348410129547119, 1.03366935253143311, 1.03385257720947266, 1.03403365612030029, 1.03421258926391602, 1.03438937664031982, 1.03456389904022217, 1.0347362756729126, 1.03490638732910156, 1.03507423400878906, 1.03523969650268555, 1.03540289402008057, 1.03556370735168457, 1.03572213649749756, 1.03587818145751953, 1.03603172302246094, 1.03618288040161133, 1.0363314151763916, 1.03647756576538086, 1.03662109375, 1.03676211833953857, 1.03690052032470703, 1.03703629970550537, 1.03716945648193359, 1.03729987144470215, 1.03742766380310059, 1.03755283355712891, 1.03767514228820801, 1.03779482841491699, 1.03791165351867676, 1.03802573680877686, 1.03813695907592773, 1.03824543952941895, 1.03835105895996094, 1.03845381736755371, 1.03855371475219727, 1.03865063190460205, 1.03874468803405762, 1.03883588314056396, 1.03892409801483154, 1.03900933265686035, 1.03909158706665039, 1.03917086124420166, 1.03924715518951416, 1.03932046890258789, 1.0393906831741333, 1.03945791721343994, 1.03952205181121826, 1.03958308696746826, 1.03964114189147949, 1.0396960973739624, 1.03974795341491699, 1.03979671001434326, 1.03984236717224121, 1.03988492488861084, 1.03992438316345215, 1.03996062278747559, 1.0399937629699707, 1.0400238037109375, 1.04005074501037598, 1.04007446765899658, 1.04009497165679932, 1.04011237621307373, 1.04012668132781982, 1.04013776779174805, 1.0401456356048584, 1.04015040397644043, 1.04015195369720459, 1.04015040397644043, 1.0401456356048584, 1.04013776779174805, 1.04012668132781982, 1.04011237621307373, 1.04009497165679932, 1.04007446765899658, 1.04005074501037598, 1.0400238037109375, 1.0399937629699707, 1.03996062278747559, 1.03992438316345215, 1.03988492488861084, 1.03984236717224121, 1.03979671001434326, 1.03974795341491699, 1.0396960973739624, 1.03964114189147949, 1.03958308696746826, 1.03952205181121826, 1.03945791721343994, 1.0393906831741333, 1.03932046890258789, 1.03924715518951416, 1.03917086124420166, 1.03909158706665039, 1.03900933265686035, 1.03892409801483154, 1.03883588314056396, 1.03874468803405762, 1.03865063190460205, 1.03855371475219727, 1.03845381736755371, 1.03835105895996094, 1.03824543952941895, 1.03813695907592773, 1.03802573680877686, 1.03791165351867676, 1.03779482841491699, 1.03767514228820801, 1.03755283355712891, 1.03742766380310059, 1.03729987144470215, 1.03716945648193359, 1.03703629970550537, 1.03690052032470703, 1.03676211833953857, 1.03662109375, 1.03647756576538086, 1.0363314151763916, 1.03618288040161133, 1.03603172302246094, 1.03587818145751953, 1.03572213649749756, 1.03556370735168457, 1.03540289402008057, 1.03523969650268555, 1.03507423400878906, 1.03490638732910156, 1.0347362756729126, 1.03456389904022217, 1.03438937664031982, 1.03421258926391602, 1.03403365612030029, 1.03385257720947266, 1.03366935253143311, 1.03348410129547119, 1.03329682350158691, 1.03310751914978027, 1.03291618824005127, 1.03272294998168945, 1.03252780437469482, 1.03233075141906738, 1.03213191032409668, 1.03193116188049316, 1.03172862529754639, 1.0315244197845459, 1.03131842613220215, 1.03111064434051514, 1.03090131282806396, 1.03069043159484863, 1.03047776222229004, 1.03026366233825684, 1.03004813194274902, 1.0298309326171875, 1.02961242198944092, 1.02939248085021973, 1.02917110919952393, 1.02894842624664307, 1.02872443199157715, 1.02849912643432617, 1.02827262878417969, 1.0280449390411377, 1.0278160572052002, 1.02758610248565674, 1.02735495567321777, 1.0271228551864624, 1.02688968181610107, 1.02665555477142334, 1.0264204740524292, 1.02618443965911865, 1.02594757080078125, 1.02570986747741699, 1.02547144889831543, 1.02523219585418701, 1.02499222755432129, 1.02475154399871826, 1.02451026439666748, 1.02426838874816895, 1.02402591705322266, 1.02378284931182861, 1.02353942394256592, 1.02329540252685547, 1.02305102348327637, 1.02280628681182861, 1.02256119251251221, 1.02231574058532715, 1.02207005023956299, 1.02182424068450928, 1.02157807350158691, 1.021331787109375, 1.02108550071716309, 1.02083897590637207, 1.02059245109558105, 1.02034592628479004, 1.02009952068328857, 1.01985299587249756, 1.01960670948028564, 1.01936054229736328, 1.01911461353302002, 1.01886880397796631, 1.0186232328414917, 1.01837801933288574, 1.01813304424285889, 1.01788854598999023, 1.01764440536499023, 1.01740062236785889, 1.01715743541717529, 1.01691460609436035, 1.01667249202728271, 1.01643085479736328, 1.0161898136138916, 1.01594936847686768, 1.01570975780487061, 1.01547074317932129, 1.01523256301879883, 1.01499509811401367, 1.01475846767425537, 1.01452279090881348, 1.01428794860839844, 1.01405394077301025, 1.01382100582122803, 1.01358902454376221, 1.01335799694061279, 1.01312816143035889, 1.01289939880371094, 1.01267170906066895, 1.01244509220123291, 1.01221978664398193, 1.01199567317962646, 1.01177287101745605, 1.01155126094818115, 1.01133096218109131, 1.01111209392547607, 1.0108945369720459, 1.01067841053009033, 1.01046371459960938, 1.01025056838989258, 1.01003885269165039, 1.00982856750488281, 1.00961995124816895, 1.00941300392150879, 1.00920748710632324, 1.00900375843048096, 1.00880169868469238, 1.00860130786895752, 1.00840258598327637, 1.00820565223693848, 1.00801050662994385, 1.00781726837158203, 1.00762581825256348, 1.00743615627288818, 1.0072484016418457, 1.00706267356872559, 1.00687873363494873, 1.00669693946838379, 1.00651693344116211, 1.00633907318115234, 1.00616323947906494, 1.0059894323348999, 1.00581777095794678, 1.00564825534820557, 1.00548076629638672, 1.00531554222106934, 1.00515234470367432, 1.00499153137207031, 1.00483286380767822, 1.00467634201049805, 1.00452220439910889, 1.00437033176422119, 1.00422072410583496, 1.00407350063323975, 1.00392866134643555, 1.00378608703613281, 1.00364601612091064, 1.00350821018218994, 1.0033729076385498, 1.00324010848999023, 1.00310969352722168, 1.00298166275024414, 1.00285625457763672, 1.00273334980010986, 1.00261294841766357, 1.00249505043029785, 1.00237977504730225, 1.00226700305938721, 1.00215685367584229, 1.00204932689666748, 1.00194442272186279, 1.00184214115142822, 1.00174248218536377, 1.00164544582366943, 1.00155115127563477, 1.00145947933197021, 1.00137054920196533, 1.00128436088562012, 1.00120079517364502, 1.00112009048461914, 1.00104200839996338, 1.00096666812896729, 1.00089406967163086, 1.00082433223724365, 1.00075733661651611, 1.00069308280944824, 1.00063169002532959, 1.00057315826416016, 1.00051724910736084, 1.00046432018280029, 1.00041413307189941, 1.00036680698394775, 1.00032234191894531, 1.00028073787689209, 1.00024187564849854, 1.00020599365234375, 1.00017285346984863, 1.00014257431030273, 1.00011527538299561, 1.0000908374786377, 1.00006914138793945, 1.00005042552947998, 1.00003457069396973, 1.00002157688140869, 1.00001144409179688, 1.00000429153442383, 0.999999940395355225, 0.999998509883880615, 0.999999940395355225, 1.00000429153442383, 1.00001144409179688, 1.00002157688140869, 1.00003457069396973, 1.00005042552947998, 1.00006914138793945, 1.0000908374786377, 1.00011527538299561, 1.00014257431030273, 1.00017285346984863, 1.00020599365234375, 1.00024187564849854, 1.00028073787689209, 1.00032234191894531, 1.00036680698394775, 1.00041413307189941, 1.00046432018280029, 1.00051724910736084, 1.00057315826416016, 1.00063169002532959, 1.00069308280944824, 1.00075733661651611, 1.00082433223724365, 1.00089406967163086, 1.00096666812896729, 1.00104200839996338, 1.00112009048461914, 1.00120079517364502, 1.00128436088562012, 1.00137054920196533, 1.00145947933197021, 1.00155115127563477, 1.00164544582366943, 1.00174248218536377, 1.00184214115142822, 1.00194442272186279, 1.00204932689666748, 1.00215685367584229, 1.00226700305938721, 1.00237977504730225, 1.00249505043029785, 1.00261294841766357, 1.00273334980010986, 1.00285625457763672, 1.00298166275024414, 1.00310969352722168, 1.00324010848999023, 1.0033729076385498, 1.00350821018218994, 1.00364601612091064, 1.00378608703613281, 1.00392866134643555, 1.00407350063323975, 1.00422072410583496, 1.00437033176422119, 1.00452220439910889, 1.00467634201049805, 1.00483286380767822, 1.00499153137207031, 1.00515234470367432, 1.00531554222106934, 1.00548076629638672, 1.00564825534820557, 1.00581777095794678, 1.0059894323348999, 1.00616323947906494, 1.00633907318115234, 1.00651693344116211, 1.00669693946838379, 1.00687873363494873, 1.00706267356872559, 1.0072484016418457, 1.00743615627288818, 1.00762581825256348, 1.00781726837158203, 1.00801050662994385, 1.00820565223693848, 1.00840258598327637, 1.00860130786895752, 1.00880169868469238, 1.00900375843048096, 1.00920748710632324, 1.00941300392150879, 1.00961995124816895, 1.00982856750488281, 1.01003885269165039, 1.01025056838989258, 1.01046371459960938, 1.01067841053009033, 1.0108945369720459, 1.01111209392547607, 1.01133096218109131, 1.01155126094818115, 1.01177287101745605, 1.01199567317962646, 1.01221978664398193, 1.01244509220123291, 1.01267170906066895, 1.01289939880371094, 1.01312816143035889, 1.01335799694061279, 1.01358902454376221, 1.01382100582122803, 1.01405394077301025, 1.01428794860839844, 1.01452279090881348, 1.01475846767425537, 1.01499509811401367, 1.01523256301879883, 1.01547074317932129, 1.01570975780487061, 1.01594936847686768, 1.0161898136138916, 1.01643085479736328, 1.01667249202728271, 1.01691460609436035, 1.01715743541717529, 1.01740062236785889, 1.01764440536499023, 1.01788854598999023, 1.01813304424285889, 1.01837801933288574, 1.0186232328414917, 1.01886880397796631, 1.01911461353302002, 1.01936054229736328, 1.01960670948028564, 1.01985299587249756, 1.02009952068328857, 1.02034592628479004, 1.02059245109558105, 1.02083897590637207, 1.02108550071716309, 1.021331787109375, 1.02157807350158691, 1.02182424068450928, 1.02207005023956299, 1.02231574058532715, 1.02256119251251221, 1.02280628681182861, 1.02305102348327637, 1.02329540252685547, 1.02353942394256592, 1.02378284931182861, 1.02402591705322266, 1.02426838874816895, 1.02451026439666748, 1.02475154399871826, 1.02499222755432129, 1.02523219585418701, 1.02547144889831543, 1.02570986747741699, 1.02594757080078125, 1.02618443965911865, 1.0264204740524292, 1.02665555477142334, 1.02688968181610107, 1.0271228551864624, 1.02735495567321777, 1.02758610248565674, 1.0278160572052002, 1.0280449390411377, 1.02827262878417969, 1.02849912643432617, 1.02872443199157715, 1.02894842624664307, 1.02917110919952393, 1.02939248085021973, 1.02961242198944092, 1.0298309326171875, 1.03004813194274902, 1.03026366233825684, 1.03047776222229004, 1.03069043159484863, 1.03090131282806396, 1.03111064434051514, 1.03131842613220215, 1.0315244197845459, 1.03172862529754639, 1.03193116188049316, 1.03213191032409668, 1.03233075141906738, 1.03252780437469482, 1.03272294998168945, 1.03291618824005127, 1.03310751914978027, 1.03329682350158691, 1.03348410129547119, 1.03366935253143311, 1.03385257720947266, 1.03403365612030029, 1.03421258926391602, 1.03438937664031982, 1.03456389904022217, 1.0347362756729126, 1.03490638732910156, 1.03507423400878906, 1.03523969650268555, 1.03540289402008057, 1.03556370735168457, 1.03572213649749756, 1.03587818145751953, 1.03603172302246094, 1.03618288040161133, 1.0363314151763916, 1.03647756576538086, 1.03662109375, 1.03676211833953857, 1.03690052032470703, 1.03703629970550537, 1.03716945648193359, 1.03729987144470215, 1.03742766380310059, 1.03755283355712891, 1.03767514228820801, 1.03779482841491699, 1.03791165351867676, 1.03802573680877686, 1.03813695907592773, 1.03824543952941895, 1.03835105895996094, 1.03845381736755371, 1.03855371475219727, 1.03865063190460205, 1.03874468803405762, 1.03883588314056396, 1.03892409801483154, 1.03900933265686035, 1.03909158706665039, 1.03917086124420166, 1.03924715518951416, 1.03932046890258789, 1.0393906831741333, 1.03945791721343994, 1.03952205181121826, 1.03958308696746826, 1.03964114189147949, 1.0396960973739624, 1.03974795341491699, 1.03979671001434326, 1.03984236717224121, 1.03988492488861084, 1.03992438316345215, 1.03996062278747559, 1.0399937629699707, 1.0400238037109375, 1.04005074501037598, 1.04007446765899658, 1.04009497165679932, 1.04011237621307373, 1.04012668132781982, 1.04013776779174805, 1.0401456356048584, 1.04015040397644043, 1.04015195369720459, 1.04015040397644043, 1.0401456356048584, 1.04013776779174805, 1.04012668132781982, 1.04011237621307373, 1.04009497165679932, 1.04007446765899658, 1.04005074501037598, 1.0400238037109375, 1.0399937629699707, 1.03996062278747559, 1.03992438316345215, 1.03988492488861084, 1.03984236717224121, 1.03979671001434326, 1.03974795341491699, 1.0396960973739624, 1.03964114189147949, 1.03958308696746826, 1.03952205181121826, 1.03945791721343994, 1.0393906831741333, 1.03932046890258789, 1.03924715518951416, 1.03917086124420166, 1.03909158706665039, 1.03900933265686035, 1.03892409801483154, 1.03883588314056396, 1.03874468803405762, 1.03865063190460205, 1.03855371475219727, 1.03845381736755371, 1.03835105895996094, 1.03824543952941895, 1.03813695907592773, 1.03802573680877686, 1.03791165351867676, 1.03779482841491699, 1.03767514228820801, 1.03755283355712891, 1.03742766380310059, 1.03729987144470215, 1.03716945648193359, 1.03703629970550537, 1.03690052032470703, 1.03676211833953857, 1.03662109375, 1.03647756576538086, 1.0363314151763916, 1.03618288040161133, 1.03603172302246094, 1.03587818145751953, 1.03572213649749756, 1.03556370735168457, 1.03540289402008057, 1.03523969650268555, 1.03507423400878906, 1.03490638732910156, 1.0347362756729126, 1.03456389904022217, 1.03438937664031982, 1.03421258926391602, 1.03403365612030029, 1.03385257720947266, 1.03366935253143311, 1.03348410129547119, 1.03329682350158691, 1.03310751914978027, 1.03291618824005127, 1.03272294998168945, 1.03252780437469482, 1.03233075141906738, 1.03213191032409668, 1.03193116188049316, 1.03172862529754639, 1.0315244197845459, 1.03131842613220215, 1.03111064434051514, 1.03090131282806396, 1.03069043159484863, 1.03047776222229004, 1.03026366233825684, 1.03004813194274902, 1.0298309326171875, 1.02961242198944092, 1.02939248085021973, 1.02917110919952393, 1.02894842624664307, 1.02872443199157715, 1.02849912643432617, 1.02827262878417969, 1.0280449390411377, 1.0278160572052002, 1.02758610248565674, 1.02735495567321777, 1.0271228551864624, 1.02688968181610107, 1.02665555477142334, 1.0264204740524292, 1.02618443965911865, 1.02594757080078125, 1.02570986747741699, 1.02547144889831543, 1.02523219585418701, 1.02499222755432129, 1.02475154399871826, 1.02451026439666748, 1.02426838874816895, 1.02402591705322266, 1.02378284931182861, 1.02353942394256592, 1.02329540252685547, 1.02305102348327637, 1.02280628681182861, 1.02256119251251221, 1.02231574058532715, 1.02207005023956299, 1.02182424068450928, 1.02157807350158691, 1.021331787109375, 1.02108550071716309, 1.02083897590637207, 1.02059245109558105, 1.02034592628479004, 1.02009952068328857, 1.01985299587249756, 1.01960670948028564, 1.01936054229736328, 1.01911461353302002, 1.01886880397796631, 1.0186232328414917, 1.01837801933288574, 1.01813304424285889, 1.01788854598999023, 1.01764440536499023, 1.01740062236785889, 1.01715743541717529, 1.01691460609436035, 1.01667249202728271, 1.01643085479736328, 1.0161898136138916, 1.01594936847686768, 1.01570975780487061, 1.01547074317932129, 1.01523256301879883, 1.01499509811401367, 1.01475846767425537, 1.01452279090881348, 1.01428794860839844, 1.01405394077301025, 1.01382100582122803, 1.01358902454376221, 1.01335799694061279, 1.01312816143035889, 1.01289939880371094, 1.01267170906066895, 1.01244509220123291, 1.01221978664398193, 1.01199567317962646, 1.01177287101745605, 1.01155126094818115, 1.01133096218109131, 1.01111209392547607, 1.0108945369720459, 1.01067841053009033, 1.01046371459960938, 1.01025056838989258, 1.01003885269165039, 1.00982856750488281, 1.00961995124816895, 1.00941300392150879, 1.00920748710632324, 1.00900375843048096, 1.00880169868469238, 1.00860130786895752, 1.00840258598327637, 1.00820565223693848, 1.00801050662994385, 1.00781726837158203, 1.00762581825256348, 1.00743615627288818, 1.0072484016418457, 1.00706267356872559, 1.00687873363494873, 1.00669693946838379, 1.00651693344116211, 1.00633907318115234, 1.00616323947906494, 1.0059894323348999, 1.00581777095794678, 1.00564825534820557, 1.00548076629638672, 1.00531554222106934, 1.00515234470367432, 1.00499153137207031, 1.00483286380767822, 1.00467634201049805, 1.00452220439910889, 1.00437033176422119, 1.00422072410583496, 1.00407350063323975, 1.00392866134643555, 1.00378608703613281, 1.00364601612091064, 1.00350821018218994, 1.0033729076385498, 1.00324010848999023, 1.00310969352722168, 1.00298166275024414, 1.00285625457763672, 1.00273334980010986, 1.00261294841766357, 1.00249505043029785, 1.00237977504730225, 1.00226700305938721, 1.00215685367584229, 1.00204932689666748, 1.00194442272186279, 1.00184214115142822, 1.00174248218536377, 1.00164544582366943, 1.00155115127563477, 1.00145947933197021, 1.00137054920196533, 1.00128436088562012, 1.00120079517364502, 1.00112009048461914, 1.00104200839996338, 1.00096666812896729, 1.00089406967163086, 1.00082433223724365, 1.00075733661651611, 1.00069308280944824, 1.00063169002532959, 1.00057315826416016, 1.00051724910736084, 1.00046432018280029, 1.00041413307189941, 1.00036680698394775, 1.00032234191894531, 1.00028073787689209, 1.00024187564849854, 1.00020599365234375, 1.00017285346984863, 1.00014257431030273, 1.00011527538299561, 1.0000908374786377, 1.00006914138793945, 1.00005042552947998, 1.00003457069396973, 1.00002157688140869, 1.00001144409179688, 1.00000429153442383, 0.999999940395355225, 0.999998509883880615, 0.999999940395355225, 1.00000429153442383, 1.00001144409179688, 1.00002157688140869, 1.00003457069396973, 1.00005042552947998, 1.00006914138793945, 1.0000908374786377, 1.00011527538299561, 1.00014257431030273, 1.00017285346984863, 1.00020599365234375, 1.00024187564849854, 1.00028073787689209, 1.00032234191894531, 1.00036680698394775, 1.00041413307189941, 1.00046432018280029, 1.00051724910736084, 1.00057315826416016, 1.00063169002532959, 1.00069308280944824, 1.00075733661651611, 1.00082433223724365, 1.00089406967163086, 1.00096666812896729, 1.00104200839996338, 1.00112009048461914, 1.00120079517364502, 1.00128436088562012, 1.00137054920196533, 1.00145947933197021, 1.00155115127563477, 1.00164544582366943, 1.00174248218536377, 1.00184214115142822, 1.00194442272186279, 1.00204932689666748, 1.00215685367584229, 1.00226700305938721, 1.00237977504730225, 1.00249505043029785, 1.00261294841766357, 1.00273334980010986, 1.00285625457763672, 1.00298166275024414, 1.00310969352722168, 1.00324010848999023, 1.0033729076385498, 1.00350821018218994, 1.00364601612091064, 1.00378608703613281, 1.00392866134643555, 1.00407350063323975, 1.00422072410583496, 1.00437033176422119, 1.00452220439910889, 1.00467634201049805, 1.00483286380767822, 1.00499153137207031, 1.00515234470367432, 1.00531554222106934, 1.00548076629638672, 1.00564825534820557, 1.00581777095794678, 1.0059894323348999, 1.00616323947906494, 1.00633907318115234, 1.00651693344116211, 1.00669693946838379, 1.00687873363494873, 1.00706267356872559, 1.0072484016418457, 1.00743615627288818, 1.00762581825256348, 1.00781726837158203, 1.00801050662994385, 1.00820565223693848, 1.00840258598327637, 1.00860130786895752, 1.00880169868469238, 1.00900375843048096, 1.00920748710632324, 1.00941300392150879, 1.00961995124816895, 1.00982856750488281, 1.01003885269165039, 1.01025056838989258, 1.01046371459960938, 1.01067841053009033, 1.0108945369720459, 1.01111209392547607, 1.01133096218109131, 1.01155126094818115, 1.01177287101745605, 1.01199567317962646, 1.01221978664398193, 1.01244509220123291, 1.01267170906066895, 1.01289939880371094, 1.01312816143035889, 1.01335799694061279, 1.01358902454376221, 1.01382100582122803, 1.01405394077301025, 1.01428794860839844, 1.01452279090881348, 1.01475846767425537, 1.01499509811401367, 1.01523256301879883, 1.01547074317932129, 1.01570975780487061, 1.01594936847686768, 1.0161898136138916, 1.01643085479736328, 1.01667249202728271, 1.01691460609436035, 1.01715743541717529, 1.01740062236785889, 1.01764440536499023, 1.01788854598999023, 1.01813304424285889, 1.01837801933288574, 1.0186232328414917, 1.01886880397796631, 1.01911461353302002, 1.01936054229736328, 1.01960670948028564, 1.01985299587249756, 1.02009952068328857, 1.02034592628479004, 1.02059245109558105, 1.02083897590637207, 1.02108550071716309, 1.021331787109375, 1.02157807350158691, 1.02182424068450928, 1.02207005023956299, 1.02231574058532715, 1.02256119251251221, 1.02280628681182861, 1.02305102348327637, 1.02329540252685547, 1.02353942394256592, 1.02378284931182861, 1.02402591705322266, 1.02426838874816895, 1.02451026439666748, 1.02475154399871826, 1.02499222755432129, 1.02523219585418701, 1.02547144889831543, 1.02570986747741699, 1.02594757080078125, 1.02618443965911865, 1.0264204740524292, 1.02665555477142334, 1.02688968181610107, 1.0271228551864624, 1.02735495567321777, 1.02758610248565674, 1.0278160572052002, 1.0280449390411377, 1.02827262878417969, 1.02849912643432617, 1.02872443199157715, 1.02894842624664307, 1.02917110919952393, 1.02939248085021973, 1.02961242198944092, 1.0298309326171875, 1.03004813194274902, 1.03026366233825684, 1.03047776222229004, 1.03069043159484863, 1.03090131282806396, 1.03111064434051514, 1.03131842613220215, 1.0315244197845459, 1.03172862529754639, 1.03193116188049316, 1.03213191032409668, 1.03233075141906738, 1.03252780437469482, 1.03272294998168945, 1.03291618824005127, 1.03310751914978027, 1.03329682350158691, 1.03348410129547119, 1.03366935253143311, 1.03385257720947266, 1.03403365612030029, 1.03421258926391602, 1.03438937664031982, 1.03456389904022217, 1.0347362756729126, 1.03490638732910156, 1.03507423400878906, 1.03523969650268555, 1.03540289402008057, 1.03556370735168457, 1.03572213649749756, 1.03587818145751953, 1.03603172302246094, 1.03618288040161133, 1.0363314151763916, 1.03647756576538086, 1.03662109375, 1.03676211833953857, 1.03690052032470703, 1.03703629970550537, 1.03716945648193359, 1.03729987144470215, 1.03742766380310059, 1.03755283355712891, 1.03767514228820801, 1.03779482841491699, 1.03791165351867676, 1.03802573680877686, 1.03813695907592773, 1.03824543952941895, 1.03835105895996094, 1.03845381736755371, 1.03855371475219727, 1.03865063190460205, 1.03874468803405762, 1.03883588314056396, 1.03892409801483154, 1.03900933265686035, 1.03909158706665039, 1.03917086124420166, 1.03924715518951416, 1.03932046890258789, 1.0393906831741333, 1.03945791721343994, 1.03952205181121826, 1.03958308696746826, 1.03964114189147949, 1.0396960973739624, 1.03974795341491699, 1.03979671001434326, 1.03984236717224121, 1.03988492488861084, 1.03992438316345215, 1.03996062278747559, 1.0399937629699707, 1.0400238037109375, 1.04005074501037598, 1.04007446765899658, 1.04009497165679932, 1.04011237621307373, 1.04012668132781982, 1.04013776779174805, 1.0401456356048584, 1.04015040397644043, 1.04015195369720459, 1.04015040397644043, 1.0401456356048584, 1.04013776779174805, 1.04012668132781982, 1.04011237621307373, 1.04009497165679932, 1.04007446765899658, 1.04005074501037598, 1.0400238037109375, 1.0399937629699707, 1.03996062278747559, 1.03992438316345215, 1.03988492488861084, 1.03984236717224121, 1.03979671001434326, 1.03974795341491699, 1.0396960973739624, 1.03964114189147949, 1.03958308696746826, 1.03952205181121826, 1.03945791721343994, 1.0393906831741333, 1.03932046890258789, 1.03924715518951416, 1.03917086124420166, 1.03909158706665039, 1.03900933265686035, 1.03892409801483154, 1.03883588314056396, 1.03874468803405762, 1.03865063190460205, 1.03855371475219727, 1.03845381736755371, 1.03835105895996094, 1.03824543952941895, 1.03813695907592773, 1.03802573680877686, 1.03791165351867676, 1.03779482841491699, 1.03767514228820801, 1.03755283355712891, 1.03742766380310059, 1.03729987144470215, 1.03716945648193359, 1.03703629970550537, 1.03690052032470703, 1.03676211833953857, 1.03662109375, 1.03647756576538086, 1.0363314151763916, 1.03618288040161133, 1.03603172302246094, 1.03587818145751953, 1.03572213649749756, 1.03556370735168457, 1.03540289402008057, 1.03523969650268555, 1.03507423400878906, 1.03490638732910156, 1.0347362756729126, 1.03456389904022217, 1.03438937664031982, 1.03421258926391602, 1.03403365612030029, 1.03385257720947266, 1.03366935253143311, 1.03348410129547119, 1.03329682350158691, 1.03310751914978027, 1.03291618824005127, 1.03272294998168945, 1.03252780437469482, 1.03233075141906738, 1.03213191032409668, 1.03193116188049316, 1.03172862529754639, 1.0315244197845459, 1.03131842613220215, 1.03111064434051514, 1.03090131282806396, 1.03069043159484863, 1.03047776222229004, 1.03026366233825684, 1.03004813194274902, 1.0298309326171875, 1.02961242198944092, 1.02939248085021973, 1.02917110919952393, 1.02894842624664307, 1.02872443199157715, 1.02849912643432617, 1.02827262878417969, 1.0280449390411377, 1.0278160572052002, 1.02758610248565674, 1.02735495567321777, 1.0271228551864624, 1.02688968181610107, 1.02665555477142334, 1.0264204740524292, 1.02618443965911865, 1.02594757080078125, 1.02570986747741699, 1.02547144889831543, 1.02523219585418701, 1.02499222755432129, 1.02475154399871826, 1.02451026439666748, 1.02426838874816895, 1.02402591705322266, 1.02378284931182861, 1.02353942394256592, 1.02329540252685547, 1.02305102348327637, 1.02280628681182861, 1.02256119251251221, 1.02231574058532715, 1.02207005023956299, 1.02182424068450928, 1.02157807350158691, 1.021331787109375, 1.02108550071716309, 1.02083897590637207, 1.02059245109558105, 1.02034592628479004, 1.02009952068328857, 1.01985299587249756, 1.01960670948028564, 1.01936054229736328, 1.01911461353302002, 1.01886880397796631, 1.0186232328414917, 1.01837801933288574, 1.01813304424285889, 1.01788854598999023, 1.01764440536499023, 1.01740062236785889, 1.01715743541717529, 1.01691460609436035, 1.01667249202728271, 1.01643085479736328, 1.0161898136138916, 1.01594936847686768, 1.01570975780487061, 1.01547074317932129, 1.01523256301879883, 1.01499509811401367, 1.01475846767425537, 1.01452279090881348, 1.01428794860839844, 1.01405394077301025, 1.01382100582122803, 1.01358902454376221, 1.01335799694061279, 1.01312816143035889, 1.01289939880371094, 1.01267170906066895, 1.01244509220123291, 1.01221978664398193, 1.01199567317962646, 1.01177287101745605, 1.01155126094818115, 1.01133096218109131, 1.01111209392547607, 1.0108945369720459, 1.01067841053009033, 1.01046371459960938, 1.01025056838989258, 1.01003885269165039, 1.00982856750488281, 1.00961995124816895, 1.00941300392150879, 1.00920748710632324, 1.00900375843048096, 1.00880169868469238, 1.00860130786895752, 1.00840258598327637, 1.00820565223693848, 1.00801050662994385, 1.00781726837158203, 1.00762581825256348, 1.00743615627288818, 1.0072484016418457, 1.00706267356872559, 1.00687873363494873, 1.00669693946838379, 1.00651693344116211, 1.00633907318115234, 1.00616323947906494, 1.0059894323348999, 1.00581777095794678, 1.00564825534820557, 1.00548076629638672, 1.00531554222106934, 1.00515234470367432, 1.00499153137207031, 1.00483286380767822, 1.00467634201049805, 1.00452220439910889, 1.00437033176422119, 1.00422072410583496, 1.00407350063323975, 1.00392866134643555, 1.00378608703613281, 1.00364601612091064, 1.00350821018218994, 1.0033729076385498, 1.00324010848999023, 1.00310969352722168, 1.00298166275024414, 1.00285625457763672, 1.00273334980010986, 1.00261294841766357, 1.00249505043029785, 1.00237977504730225, 1.00226700305938721, 1.00215685367584229, 1.00204932689666748, 1.00194442272186279, 1.00184214115142822, 1.00174248218536377, 1.00164544582366943, 1.00155115127563477, 1.00145947933197021, 1.00137054920196533, 1.00128436088562012, 1.00120079517364502, 1.00112009048461914, 1.00104200839996338, 1.00096666812896729, 1.00089406967163086, 1.00082433223724365, 1.00075733661651611, 1.00069308280944824, 1.00063169002532959, 1.00057315826416016, 1.00051724910736084, 1.00046432018280029, 1.00041413307189941, 1.00036680698394775, 1.00032234191894531, 1.00028073787689209, 1.00024187564849854, 1.00020599365234375, 1.00017285346984863, 1.00014257431030273, 1.00011527538299561, 1.0000908374786377, 1.00006914138793945, 1.00005042552947998, 1.00003457069396973, 1.00002157688140869, 1.00001144409179688, 1.00000429153442383, 0.999999940395355225, 0.999998509883880615, 0.999999940395355225, 1.00000429153442383, 1.00001144409179688, 1.00002157688140869, 1.00003457069396973, 1.00005042552947998, 1.00006914138793945, 1.0000908374786377, 1.00011527538299561, 1.00014257431030273, 1.00017285346984863, 1.00020599365234375, 1.00024187564849854, 1.00028073787689209, 1.00032234191894531, 1.00036680698394775, 1.00041413307189941, 1.00046432018280029, 1.00051724910736084, 1.00057315826416016, 1.00063169002532959, 1.00069308280944824, 1.00075733661651611, 1.00082433223724365, 1.00089406967163086, 1.00096666812896729, 1.00104200839996338, 1.00112009048461914, 1.00120079517364502, 1.00128436088562012, 1.00137054920196533, 1.00145947933197021, 1.00155115127563477, 1.00164544582366943, 1.00174248218536377, 1.00184214115142822, 1.00194442272186279, 1.00204932689666748, 1.00215685367584229, 1.00226700305938721, 1.00237977504730225, 1.00249505043029785, 1.00261294841766357, 1.00273334980010986, 1.00285625457763672, 1.00298166275024414, 1.00310969352722168, 1.00324010848999023, 1.0033729076385498, 1.00350821018218994, 1.00364601612091064, 1.00378608703613281, 1.00392866134643555, 1.00407350063323975, 1.00422072410583496, 1.00437033176422119, 1.00452220439910889, 1.00467634201049805, 1.00483286380767822, 1.00499153137207031, 1.00515234470367432, 1.00531554222106934, 1.00548076629638672, 1.00564825534820557, 1.00581777095794678, 1.0059894323348999, 1.00616323947906494, 1.00633907318115234, 1.00651693344116211, 1.00669693946838379, 1.00687873363494873, 1.00706267356872559, 1.0072484016418457, 1.00743615627288818, 1.00762581825256348, 1.00781726837158203, 1.00801050662994385, 1.00820565223693848, 1.00840258598327637, 1.00860130786895752, 1.00880169868469238, 1.00900375843048096, 1.00920748710632324, 1.00941300392150879, 1.00961995124816895, 1.00982856750488281, 1.01003885269165039, 1.01025056838989258, 1.01046371459960938, 1.01067841053009033, 1.0108945369720459, 1.01111209392547607, 1.01133096218109131, 1.01155126094818115, 1.01177287101745605, 1.01199567317962646, 1.01221978664398193, 1.01244509220123291, 1.01267170906066895, 1.01289939880371094, 1.01312816143035889, 1.01335799694061279, 1.01358902454376221, 1.01382100582122803, 1.01405394077301025, 1.01428794860839844, 1.01452279090881348, 1.01475846767425537, 1.01499509811401367, 1.01523256301879883, 1.01547074317932129, 1.01570975780487061, 1.01594936847686768, 1.0161898136138916, 1.01643085479736328, 1.01667249202728271, 1.01691460609436035, 1.01715743541717529, 1.01740062236785889, 1.01764440536499023, 1.01788854598999023, 1.01813304424285889, 1.01837801933288574, 1.0186232328414917, 1.01886880397796631, 1.01911461353302002, 1.01936054229736328, 1.01960670948028564, 1.01985299587249756, 1.02009952068328857, 1.02034592628479004, 1.02059245109558105, 1.02083897590637207, 1.02108550071716309, 1.021331787109375, 1.02157807350158691, 1.02182424068450928, 1.02207005023956299, 1.02231574058532715, 1.02256119251251221, 1.02280628681182861, 1.02305102348327637, 1.02329540252685547, 1.02353942394256592, 1.02378284931182861, 1.02402591705322266, 1.02426838874816895, 1.02451026439666748, 1.02475154399871826, 1.02499222755432129, 1.02523219585418701, 1.02547144889831543, 1.02570986747741699, 1.02594757080078125, 1.02618443965911865, 1.0264204740524292, 1.02665555477142334, 1.02688968181610107, 1.0271228551864624, 1.02735495567321777, 1.02758610248565674, 1.0278160572052002, 1.0280449390411377, 1.02827262878417969, 1.02849912643432617, 1.02872443199157715, 1.02894842624664307, 1.02917110919952393, 1.02939248085021973, 1.02961242198944092, 1.0298309326171875, 1.03004813194274902, 1.03026366233825684, 1.03047776222229004, 1.03069043159484863, 1.03090131282806396, 1.03111064434051514, 1.03131842613220215, 1.0315244197845459, 1.03172862529754639, 1.03193116188049316, 1.03213191032409668, 1.03233075141906738, 1.03252780437469482, 1.03272294998168945, 1.03291618824005127, 1.03310751914978027, 1.03329682350158691, 1.03348410129547119, 1.03366935253143311, 1.03385257720947266, 1.03403365612030029, 1.03421258926391602, 1.03438937664031982, 1.03456389904022217, 1.0347362756729126, 1.03490638732910156, 1.03507423400878906, 1.03523969650268555, 1.03540289402008057, 1.03556370735168457, 1.03572213649749756, 1.03587818145751953, 1.03603172302246094, 1.03618288040161133, 1.0363314151763916, 1.03647756576538086, 1.03662109375, 1.03676211833953857, 1.03690052032470703, 1.03703629970550537, 1.03716945648193359, 1.03729987144470215, 1.03742766380310059, 1.03755283355712891, 1.03767514228820801, 1.03779482841491699, 1.03791165351867676, 1.03802573680877686, 1.03813695907592773, 1.03824543952941895, 1.03835105895996094, 1.03845381736755371, 1.03855371475219727, 1.03865063190460205, 1.03874468803405762, 1.03883588314056396, 1.03892409801483154, 1.03900933265686035, 1.03909158706665039, 1.03917086124420166, 1.03924715518951416, 1.03932046890258789, 1.0393906831741333, 1.03945791721343994, 1.03952205181121826, 1.03958308696746826, 1.03964114189147949, 1.0396960973739624, 1.03974795341491699, 1.03979671001434326, 1.03984236717224121, 1.03988492488861084, 1.03992438316345215, 1.03996062278747559, 1.0399937629699707, 1.0400238037109375, 1.04005074501037598, 1.04007446765899658, 1.04009497165679932, 1.04011237621307373, 1.04012668132781982, 1.04013776779174805, 1.0401456356048584, 1.04015040397644043, 1.04015195369720459, 1.04015040397644043, 1.0401456356048584, 1.04013776779174805, 1.04012668132781982, 1.04011237621307373, 1.04009497165679932, 1.04007446765899658, 1.04005074501037598, 1.0400238037109375, 1.0399937629699707, 1.03996062278747559, 1.03992438316345215, 1.03988492488861084, 1.03984236717224121, 1.03979671001434326, 1.03974795341491699, 1.0396960973739624, 1.03964114189147949, 1.03958308696746826, 1.03952205181121826, 1.03945791721343994, 1.0393906831741333, 1.03932046890258789, 1.03924715518951416, 1.03917086124420166, 1.03909158706665039, 1.03900933265686035, 1.03892409801483154, 1.03883588314056396, 1.03874468803405762, 1.03865063190460205, 1.03855371475219727, 1.03845381736755371, 1.03835105895996094, 1.03824543952941895, 1.03813695907592773, 1.03802573680877686, 1.03791165351867676, 1.03779482841491699, 1.03767514228820801, 1.03755283355712891, 1.03742766380310059, 1.03729987144470215, 1.03716945648193359, 1.03703629970550537, 1.03690052032470703, 1.03676211833953857, 1.03662109375, 1.03647756576538086, 1.0363314151763916, 1.03618288040161133, 1.03603172302246094, 1.03587818145751953, 1.03572213649749756, 1.03556370735168457, 1.03540289402008057, 1.03523969650268555, 1.03507423400878906, 1.03490638732910156, 1.0347362756729126, 1.03456389904022217, 1.03438937664031982, 1.03421258926391602, 1.03403365612030029, 1.03385257720947266, 1.03366935253143311, 1.03348410129547119, 1.03329682350158691, 1.03310751914978027, 1.03291618824005127, 1.03272294998168945, 1.03252780437469482, 1.03233075141906738, 1.03213191032409668, 1.03193116188049316, 1.03172862529754639, 1.0315244197845459, 1.03131842613220215, 1.03111064434051514, 1.03090131282806396, 1.03069043159484863, 1.03047776222229004, 1.03026366233825684, 1.03004813194274902, 1.0298309326171875, 1.02961242198944092, 1.02939248085021973, 1.02917110919952393, 1.02894842624664307, 1.02872443199157715, 1.02849912643432617, 1.02827262878417969, 1.0280449390411377, 1.0278160572052002, 1.02758610248565674, 1.02735495567321777, 1.0271228551864624, 1.02688968181610107, 1.02665555477142334, 1.0264204740524292, 1.02618443965911865, 1.02594757080078125, 1.02570986747741699, 1.02547144889831543, 1.02523219585418701, 1.02499222755432129, 1.02475154399871826, 1.02451026439666748, 1.02426838874816895, 1.02402591705322266, 1.02378284931182861, 1.02353942394256592, 1.02329540252685547, 1.02305102348327637, 1.02280628681182861, 1.02256119251251221, 1.02231574058532715, 1.02207005023956299, 1.02182424068450928, 1.02157807350158691, 1.021331787109375, 1.02108550071716309, 1.02083897590637207, 1.02059245109558105, 1.02034592628479004, 1.02009952068328857, 1.01985299587249756, 1.01960670948028564, 1.01936054229736328, 1.01911461353302002, 1.01886880397796631, 1.0186232328414917, 1.01837801933288574, 1.01813304424285889, 1.01788854598999023, 1.01764440536499023, 1.01740062236785889, 1.01715743541717529, 1.01691460609436035, 1.01667249202728271, 1.01643085479736328, 1.0161898136138916, 1.01594936847686768, 1.01570975780487061, 1.01547074317932129, 1.01523256301879883, 1.01499509811401367, 1.01475846767425537, 1.01452279090881348, 1.01428794860839844, 1.01405394077301025, 1.01382100582122803, 1.01358902454376221, 1.01335799694061279, 1.01312816143035889, 1.01289939880371094, 1.01267170906066895, 1.01244509220123291, 1.01221978664398193, 1.01199567317962646, 1.01177287101745605, 1.01155126094818115, 1.01133096218109131, 1.01111209392547607, 1.0108945369720459, 1.01067841053009033, 1.01046371459960938, 1.01025056838989258, 1.01003885269165039, 1.00982856750488281, 1.00961995124816895, 1.00941300392150879, 1.00920748710632324, 1.00900375843048096, 1.00880169868469238, 1.00860130786895752, 1.00840258598327637, 1.00820565223693848, 1.00801050662994385, 1.00781726837158203, 1.00762581825256348, 1.00743615627288818, 1.0072484016418457, 1.00706267356872559, 1.00687873363494873, 1.00669693946838379, 1.00651693344116211, 1.00633907318115234, 1.00616323947906494, 1.0059894323348999, 1.00581777095794678, 1.00564825534820557, 1.00548076629638672, 1.00531554222106934, 1.00515234470367432, 1.00499153137207031, 1.00483286380767822, 1.00467634201049805, 1.00452220439910889, 1.00437033176422119, 1.00422072410583496, 1.00407350063323975, 1.00392866134643555, 1.00378608703613281, 1.00364601612091064, 1.00350821018218994, 1.0033729076385498, 1.00324010848999023, 1.00310969352722168, 1.00298166275024414, 1.00285625457763672, 1.00273334980010986, 1.00261294841766357, 1.00249505043029785, 1.00237977504730225, 1.00226700305938721, 1.00215685367584229, 1.00204932689666748, 1.00194442272186279, 1.00184214115142822, 1.00174248218536377, 1.00164544582366943, 1.00155115127563477, 1.00145947933197021, 1.00137054920196533, 1.00128436088562012, 1.00120079517364502, 1.00112009048461914, 1.00104200839996338, 1.00096666812896729, 1.00089406967163086, 1.00082433223724365, 1.00075733661651611, 1.00069308280944824, 1.00063169002532959, 1.00057315826416016, 1.00051724910736084, 1.00046432018280029, 1.00041413307189941, 1.00036680698394775, 1.00032234191894531, 1.00028073787689209, 1.00024187564849854, 1.00020599365234375, 1.00017285346984863, 1.00014257431030273, 1.00011527538299561, 1.0000908374786377, 1.00006914138793945, 1.00005042552947998, 1.00003457069396973, 1.00002157688140869, 1.00001144409179688, 1.00000429153442383, 0.999999940395355225, }; +static const float prec_wndCorrectionWeightingLF[2049] = { 0.999469280242919922, 0.999918103218078613, 0.99966055154800415, 0.999921977519989014, 0.999669551849365234, 0.999926507472991943, 0.999983012676239014, 0.999929308891296387, 0.999988377094268799, 0.999988377094268799, 0.999989926815032959, 0.999989926815032959, 0.999989926815032959, 0.999989926815032959, 1.00000846385955811, 0.999978780746459961, 0.999989569187164307, 0.999957442283630371, 0.999977588653564453, 0.999957442283630371, 0.999977588653564453, 0.999957442283630371, 0.999977588653564453, 0.999959290027618408, 0.999977588653564453, 0.999964654445648193, 0.999979734420776367, 0.999984264373779297, 0.999987423419952393, 0.999988734722137451, 0.999988734722137451, 0.999988734722137451, 0.999988734722137451, 0.999988734722137451, 0.999988734722137451, 0.999988734722137451, 0.999988734722137451, 0.999988734722137451, 1.00000607967376709, 1.00003492832183838, 0.999994516372680664, 1.00004708766937256, 0.999994516372680664, 1.00005149841308594, 1.00002682209014893, 1.00002682209014893, 1.00002682209014893, 1.00002682209014893, 1.00004196166992188, 0.999985039234161377, 1.00005638599395752, 0.999992251396179199, 0.999993562698364258, 0.999993562698364258, 0.999968469142913818, 1.00001239776611328, 0.999968469142913818, 0.999968469142913818, 0.999901533126831055, 0.999901533126831055, 0.999849617481231689, 0.999794602394104004, 0.999747335910797119, 0.999728024005889893, 0.999645590782165527, 0.999553799629211426, 0.99937969446182251, 0.999215543270111084, 0.999060988426208496, 0.998891234397888184, 0.99875795841217041, 0.99875795841217041, 0.998484969139099121, 0.998484969139099121, 0.998387515544891357, 0.998266935348510742, 0.998159885406494141, 0.998159885406494141, 0.997944414615631104, 0.997944414615631104, 0.997944414615631104, 0.997371792793273926, 0.996808052062988281, 0.996384263038635254, 0.99583059549331665, 0.995171725749969482, 0.994478464126586914, 0.993632972240447998, 0.992802202701568604, 0.992030620574951172, 0.991060614585876465, 0.989962100982666016, 0.988879263401031494, 0.987871706485748291, 0.986638545989990234, 0.985136926174163818, 0.983561933040618896, 0.982599735260009766, 0.982269048690795898, 0.981974124908447266, 0.981728315353393555, 0.98141777515411377, 0.980632781982421875, 0.97919917106628418, 0.977308988571166992, 0.975309789180755615, 0.973259031772613525, 0.971069395542144775, 0.968819081783294678, 0.966478347778320312, 0.964020907878875732, 0.961457788944244385, 0.958865880966186523, 0.956241428852081299, 0.953485488891601562, 0.95056915283203125, 0.947675228118896484, 0.944851398468017578, 0.941692471504211426, 0.938455104827880859, 0.935651063919067383, 0.933132648468017578, 0.930246591567993164, 0.927610397338867188, 0.925643444061279297, 0.923039674758911133, 0.919626772403717041, 0.916303455829620361, 0.912937045097351074, 0.908841848373413086, 0.904531776905059814, 0.90036618709564209, 0.895851254463195801, 0.890863895416259766, 0.885855138301849365, 0.880697727203369141, 0.874961435794830322, 0.869377851486206055, 0.863681137561798096, 0.857567489147186279, 0.851561486721038818, 0.845196008682250977, 0.838997066020965576, 0.832948744297027588, 0.826565682888031006, 0.8212699294090271, 0.816153466701507568, 0.810889780521392822, 0.808183431625366211, 0.804829299449920654, 0.799485564231872559, 0.794137537479400635, 0.786775708198547363, 0.779104411602020264, 0.771057069301605225, 0.762847602367401123, 0.754602551460266113, 0.745636343955993652, 0.737378299236297607, 0.727838456630706787, 0.718821406364440918, 0.709277868270874023, 0.698876023292541504, 0.689045310020446777, 0.677598953247070312, 0.666960597038269043, 0.655554354190826416, 0.644635021686553955, 0.634921133518218994, 0.625717401504516602, 0.61910325288772583, 0.616004407405853271, 0.614726364612579346, 0.613462746143341064, 0.611664950847625732, 0.602554023265838623, 0.590816020965576172, 0.578193008899688721, 0.566546499729156494, 0.555269777774810791, 0.544317841529846191, 0.533463537693023682, 0.522358238697052002, 0.510812163352966309, 0.498325437307357788, 0.485656142234802246, 0.472327351570129395, 0.459139347076416016, 0.44569706916809082, 0.432120859622955322, 0.418462008237838745, 0.404599219560623169, 0.391290187835693359, 0.391290217638015747, 0.386170506477355957, 0.38121950626373291, 0.373336702585220337, 0.365487545728683472, 0.360493928194046021, 0.358732402324676514, 0.354652136564254761, 0.354652136564254761, 0.343397080898284912, 0.331123262643814087, 0.319478780031204224, 0.307388484477996826, 0.296660512685775757, 0.286398142576217651, 0.277135372161865234, 0.268152922391891479, 0.259647369384765625, 0.251306802034378052, 0.243668153882026672, 0.236432090401649475, 0.230200454592704773, 0.224139288067817688, 0.218186825513839722, 0.212005689740180969, 0.205588728189468384, 0.199796587228775024, 0.196195363998413086, 0.194055825471878052, 0.19306790828704834, 0.191841945052146912, 0.187844380736351013, 0.182073056697845459, 0.176381230354309082, 0.170933455228805542, 0.165895983576774597, 0.161366000771522522, 0.15697208046913147, 0.152631506323814392, 0.148044019937515259, 0.143338218331336975, 0.138789892196655273, 0.134198561310768127, 0.130070015788078308, 0.12580949068069458, 0.121883250772953033, 0.118050791323184967, 0.114430971443653107, 0.111377693712711334, 0.108304515480995178, 0.105702102184295654, 0.103114672005176544, 0.100932374596595764, 0.0989756807684898376, 0.0973404347896575928, 0.095711246132850647, 0.0933471471071243286, 0.0908507779240608215, 0.0880769938230514526, 0.0852657929062843323, 0.0827287957072257996, 0.0801991373300552368, 0.077673204243183136, 0.0752376988530158997, 0.0727842971682548523, 0.0703846514225006104, 0.06822243332862854, 0.0661578699946403503, 0.0640797391533851624, 0.0620940625667572021, 0.0601164475083351135, 0.0582208447158336639, 0.056628253310918808, 0.0551128499209880829, 0.053663250058889389, 0.0523620434105396271, 0.0511255078017711639, 0.0500437431037425995, 0.0489659756422042847, 0.0477759130299091339, 0.04654654860496521, 0.045244123786687851, 0.0439505390822887421, 0.0427930615842342377, 0.0416356101632118225, 0.0404390394687652588, 0.0392233580350875854, 0.0379923470318317413, 0.036777544766664505, 0.0355647653341293335, 0.0344511605799198151, 0.0334040708839893341, 0.0323322191834449768, 0.031207747757434845, 0.0301637705415487289, 0.0291431676596403122, 0.0281016826629638672, 0.0272356215864419937, 0.0265538524836301804, 0.025786006823182106, 0.0249602831900119781, 0.0244760140776634216, 0.0243609026074409485, 0.0241816118359565735, 0.0238853171467781067, 0.0234189163893461227, 0.022766411304473877, 0.0220737811177968979, 0.0213187746703624725, 0.0204051882028579712, 0.0195876676589250565, 0.0189130362123250961, 0.0182944405823945999, 0.0176998116075992584, 0.0169721730053424835, 0.0163034126162528992, 0.0157212354242801666, 0.0152592221274971962, 0.0148108862340450287, 0.0141900060698390007, 0.0135758295655250549, 0.0129050314426422119, 0.0129050305113196373, 0.0129050370305776596, 0.0124622629955410957, 0.012336021289229393, 0.0120754009112715721, 0.0117516042664647102, 0.0114597193896770477, 0.0114597072824835777, 0.0114597082138061523, 0.0112026026472449303, 0.01087199617177248, 0.0103382207453250885, 0.00989456754177808762, 0.00963977258652448654, 0.00935184676200151443, 0.00900791212916374207, 0.00865007471293210983, 0.00835897121578454971, 0.00807860027998685837, 0.00780105451121926308, 0.00753954518586397171, 0.00724525563418865204, 0.00698731280863285065, 0.00678557483479380608, 0.00650615664198994637, 0.00620638485997915268, 0.00604469329118728638, 0.00597874820232391357, 0.00594236748293042183, 0.00585888046771287918, 0.00574088236317038536, 0.00568754086270928383, 0.00558536872267723083, 0.00548067968338727951, 0.00533616123721003532, 0.0050594736821949482, 0.00486730458214879036, 0.00467374920845031738, 0.00450328737497329712, 0.00437498372048139572, 0.00423757452517747879, 0.0040874239057302475, 0.00395861314609646797, 0.00385154038667678833, 0.00373088335618376732, 0.00361133506521582603, 0.00349544943310320377, 0.00337036116980016232, 0.00323634780943393707, 0.00318306218832731247, 0.00310834590345621109, 0.00304929050616919994, 0.00297951069660484791, 0.00287134293466806412, 0.00281334319151937962, 0.00275896373204886913, 0.0026712536346167326, 0.00262208585627377033, 0.00257579307071864605, 0.00247043045237660408, 0.00239197118207812309, 0.00233472744002938271, 0.00224970141425728798, 0.00215884693898260593, 0.00208966503851115704, 0.00203772587701678276, 0.00199407152831554413, 0.00195643212646245956, 0.00188901915680617094, 0.00183547521010041237, 0.00178286654409021139, 0.00174459337722510099, 0.00169503502547740936, 0.00164488505106419325, 0.0016071756836026907, 0.0015480284346267581, 0.0015102004399523139, 0.00147439958527684212, 0.00144250097218900919, 0.00139131397008895874, 0.00133423134684562683, 0.00131003174465149641, 0.0012656116159632802, 0.00121550506446510553, 0.00118980684783309698, 0.00114602444227784872, 0.00110780051909387112, 0.00109852885361760855, 0.00106076174415647984, 0.00102370686363428831, 0.000990302185527980328, 0.000955620897002518177, 0.000936569762416183949, 0.000920211430639028549, 0.000894058146513998508, 0.000845829839818179607, 0.000821299792733043432, 0.000814431346952915192, 0.000804440758656710386, 0.000764639116823673248, 0.000726265017874538898, 0.000714705907739698887, 0.000685857899952679873, 0.000664610008243471384, 0.00065506866667419672, 0.000637965684290975332, 0.00061578553868457675, 0.000598493381403386593, 0.000592974596656858921, 0.000591760384850203991, 0.000567098089959472418, 0.000533184793312102556, 0.000507897872012108564, 0.00049873389070853591, 0.000490299658849835396, 0.000487615412566810846, 0.000473671767394989729, 0.000452153879450634122, 0.000431365828262642026, 0.000410605251090601087, 0.00039810899761505425, 0.000398107687942683697, 0.000398119358578696847, 0.000383819307899102569, 0.000371864531189203262, 0.000363773229764774442, 0.000363784492947161198, 0.00036377663491293788, 0.000354599091224372387, 0.000320463004754856229, 0.000331235583871603012, 0.000291393982479348779, 0.000291387637844309211, 0.000179872600710950792, 0.00028181169182062149, 0.000296583195449784398, 0.000224203293328173459, 0.000125199920148588717, 0.000224194533075205982, 0.000274711812380701303, 0.000224205126869492233, 0.000224198942305520177, 0.00019021618936676532, 0.000234511084272526205, 0.000190214093890972435, 0.000179927956196479499, 0.000161397299962118268, 0.000171649691765196621, 0.000163451273692771792, 0.000161394214956089854, 0.000161385120009072125, 0.000163446689839474857, 0.000161392134032212198, 0.000152430366142652929, 0.000144096804433502257, 0.000144098899909295142, 0.000144090940011665225, 0.000141066557262092829, 0.000136061717057600617, 0.000131871565827168524, 0.000131807828438468277, 0.000131815773784182966, 0.000122316341730765998, 0.000112196968984790146, 0.000109928398160263896, 0.000105905797681771219, 0.0001037904221448116, 0.000100239209132269025, 0.000100229306553956121, 0.000100233395642135292, 9.72241687122732401e-05, 9.36573269427753985e-05, 9.36590877245180309e-05, 9.72143170656636357e-05, 9.14329721126705408e-05, 8.34555248729884624e-05, 7.65326840337365866e-05, 8.3452054241206497e-05, 7.6522665040101856e-05, 7.20349053153768182e-05, 6.7966175265610218e-05, 7.12921028025448322e-05, 6.79648001096211374e-05, 6.26380351604893804e-05, 5.92989636061247438e-05, 6.2632389017380774e-05, 5.93018849031068385e-05, 5.77392784180119634e-05, 5.6268647313117981e-05, 5.6264485465362668e-05, 5.65383088542148471e-05, 5.39452776138205081e-05, 4.91233149659819901e-05, 5.36362167622428387e-05, 5.11705984536092728e-05, 4.43188473582267761e-05, 4.0253726183436811e-05, 4.19541865994688123e-05, 4.13443049183115363e-05, 3.94085982406977564e-05, 3.86026149499230087e-05, 3.94104972656350583e-05, 3.8601636333623901e-05, 3.73235998267773539e-05, 3.58081597369164228e-05, 3.73263574147131294e-05, 3.58730176230892539e-05, 3.50544614775571972e-05, 3.10113318846561015e-05, 3.50540904037188739e-05, 3.10822215396910906e-05, 2.67938012257218361e-05, 2.63062320300377905e-05, 2.6793220968102105e-05, 2.67958057520445436e-05, 2.53711568802827969e-05, 2.53709986282046884e-05, 2.65624257735908031e-05, 2.53711859841132537e-05, 2.39814653468783945e-05, 2.39816072280518711e-05, 2.53957205131882802e-05, 2.53948564932215959e-05, 1.93972009583376348e-05, 2.05855903914198279e-05, 3.03049291687784716e-05, 2.43028516706544906e-05, 1.29900217871181667e-05, 1.70522271218942478e-05, 1.70557814271887764e-05, 1.49621500895591453e-05, 9.62712692853529006e-06, 1.49601592056569643e-05, 1.49582729136454873e-05, 9.62635658652288839e-06, 9.62784633884439245e-06, 1.49569868881371804e-05, 1.32017439682385884e-05, 7.84261919761775061e-06, 1.32025015773251653e-05, 1.36966527861659415e-05, 1.2392835742502939e-05, 9.0949060904677026e-06, 1.38424011311144568e-05, 1.71306764968903735e-05, 1.38365458042244427e-05, 1.38366158353164792e-05, 1.72107793332543224e-05, 1.72117506735958159e-05, 1.38360410346649587e-05, 1.38378791234572418e-05, 1.38364093800191768e-05, 5.90269064559834078e-06, 8.38489359011873603e-06, 1.01122423075139523e-05, 1.01116547739366069e-05, -7.49115133658051491e-06, -2.52125664701452479e-05, -4.80523085570894182e-05, -7.51258339732885361e-05, -7.51237093936651945e-05, -8.13481383374892175e-05, -6.39699283055961132e-05, -6.3973093347158283e-05, -6.39689969830214977e-05, -5.75143894820939749e-05, -2.72661491180770099e-05, -4.47704042016994208e-06, -4.47712773166131228e-06, 1.97791869140928611e-05, 1.97754634427838027e-05, 1.97796089196344838e-05, -3.30546254190267064e-06, -3.30371085510705598e-06, 2.03361878448049538e-06, 2.82970472653687466e-06, -1.95162601812626235e-06, 6.63577384329983033e-06, 6.63676473777741194e-06, 2.47301977651659399e-06, 2.4742557798163034e-06, 2.4735620627325261e-06, 2.47399816544202622e-06, 2.4740879780438263e-06, 2.47352272708667442e-06, 2.47479079007462133e-06, 1.8027795931629953e-06, 1.80417600859072991e-06, 8.38031610328471288e-07, 4.48906774863644387e-07, 4.48149904741512728e-07, 3.44925069839518983e-06, 3.4480640351830516e-06, 3.25884411722654477e-06, 3.2565012588747777e-06, 3.25906921716523357e-06, 4.10262100558611564e-06, 4.10319216825882904e-06, 4.1034522837435361e-06, 4.10193524658097886e-06, 4.10483335144817829e-06, 2.9823052045685472e-06, -4.66016558675619308e-07, -3.87528899636890856e-07, 5.80676555728132371e-07, 5.78961191877169767e-07, -3.82777488994179294e-06, -3.82717917091213167e-06, -1.35048037464002846e-06, 9.30881640215375228e-07, 6.52940059353568358e-07, 6.51320647193642799e-07, 6.52298524528305279e-07, 6.52247535981587134e-07, 4.3442770447654766e-07, 4.34631090229231631e-07, 1.08667506992787821e-06, 1.08529593489947729e-06, 1.08626068140438292e-06, 1.08573692614299944e-06, 2.35486322708311491e-06, 2.35356560551736038e-06, 2.35456536756828427e-06, 2.35371544476947747e-06, 2.58515228779288009e-06, 2.58296449828776531e-06, 1.73465105035575107e-06, 3.27108551800847636e-07, 3.20816923249367392e-07, 3.28502380853024079e-07, 1.57988736759762105e-07, 1.60357586764803273e-07, 1.17380886877072044e-06, 1.17469198812614195e-06, 1.594988106035089e-07, 1.56215901370160282e-06, 3.40269775733759161e-06, 3.40343240168294869e-06, 3.40161864187393803e-06, 3.40415544997085817e-06, 3.07892355522199068e-06, 3.08195967591018416e-06, 9.46423995173972799e-07, 3.01912081113187014e-07, 9.47055752931191819e-07, 9.39930373533570673e-07, 3.09472142134836758e-07, 3.02324394851893885e-07, 9.47502996950788656e-07, 3.02937792184820864e-07, -2.96210851047362667e-06, -2.33004743677156512e-06, -5.72720136915449984e-06, -5.72290628042537719e-06, -5.72847329749492928e-06, -5.72145290789194405e-06, -1.99343685380881652e-06, 8.69628763666696614e-07, 8.6040358837635722e-07, 8.69210907694650814e-07, 1.57563442826358369e-06, 8.66252662490296643e-07, 8.66362142915022559e-07, 1.57562385538767558e-06, 8.69369216616178164e-07, -1.10050496004987508e-06, -1.09054576569178607e-06, -4.6698455662408378e-06, -8.87230362422997132e-06, -4.66943811261444353e-06, -4.65923722003935836e-06, -4.66879782834439538e-06, 3.53761083715653513e-06, -9.88336614682339132e-06, -4.59465610447296058e-07, 1.29401496451464482e-05, 4.82978657601051964e-06, 4.82932182421791367e-06, 1.2941095519636292e-05, 4.83157100461539812e-06, -7.76340129959862679e-06, 4.83259373140754178e-06, -7.7628164945053868e-06, -1.14136028059874661e-05, -1.14166505227331072e-05, -2.65168109763180837e-05, -2.65186754404567182e-05, 8.8463884821976535e-06, -4.22480043198447675e-05, -2.39447817875770852e-05, 5.26459598404471762e-06, -6.36064714854001068e-06, 4.12905501434579492e-06, 4.12982399211614393e-06, 4.12144891015486792e-06, 4.13058978665503673e-06, -5.03181536259944551e-06, -5.0295948312850669e-06, -5.03073579238844104e-06, -5.03023466080776416e-06, -5.03055071021663025e-06, -8.08777531347004697e-06, -1.28827950902632438e-05, -6.56703878121334128e-06, -6.56836255075177178e-06, -2.0568863874359522e-06, -8.58791054270113818e-07, -4.66919436803436838e-06, -8.5894805579300737e-07, -8.56367762480658712e-07, -2.72630813924479298e-06, -8.57494512729317648e-07, -8.57096154049941106e-07, -9.61451519287948031e-07, -9.61023829404439311e-07, -2.72619035968091339e-06, -3.54711664840579033e-06, -1.78120149030291941e-06, -3.54758049070369452e-06, -3.54645544575760141e-06, -1.78233437964081531e-06, -2.23445317715231795e-06, -1.25713029319740599e-06, -2.21697905544715468e-06, -2.21661980503995437e-06, -1.14107911031169351e-06, -1.13938097001664573e-06, -1.14071258394687902e-06, 8.73415729074622504e-07, 8.72938869633799186e-07, 8.730383456168056e-07, 3.10382210955140181e-06, 3.10268910652666818e-06, 6.49206049274653196e-06, 8.68656206876039505e-06, 6.1028563322906848e-06, 6.10194683758891188e-06, 4.75338038086192682e-06, 1.05566778074717149e-06, 2.16941111830237787e-06, 1.05671438177523669e-06, 1.0505762020329712e-06, 1.05689343854464823e-06, 2.67718604618494282e-07, 2.74955169743407168e-07, 2.67135646936367266e-07, 2.81267148238839582e-07, 1.36273729367530905e-06, 4.71949476832378423e-07, -6.721206347037878e-08, 2.54775090979819652e-06, -1.2774241895385785e-06, 1.50736616433277959e-06, 1.49366928781091701e-06, 1.03007585039449623e-06, 1.5319527619794826e-06, 1.02806473023520084e-06, 1.02693911685491912e-06, 1.02703529591963161e-06, 6.71027123644307721e-07, 6.71518876060872572e-07, 6.70108875056030229e-07, 7.11793632035551127e-07, 1.59527746745879995e-06, 2.69297288468806073e-07, 3.14157455250096973e-06, 8.21952926344238222e-06, 1.52025791066989768e-06, 6.86343355482676998e-06, 6.86431258145603351e-06, 2.96828307000396308e-06, 2.96847133540723007e-06, 1.63502056693687337e-06, 1.63666038588416995e-06, 1.63579454692808213e-06, 1.63570302902371623e-06, 1.63653999152302276e-06, 1.63526590313267661e-06, 1.63696154231729452e-06, 1.63492120464070467e-06, 4.2151151546931942e-07, 4.3110635488119442e-06, -8.15597616110608215e-07, -8.04702904133591801e-06, -8.15138548659888329e-07, -8.04745559435104951e-06, -8.04541832621907815e-06, -8.04797855380456895e-06, -8.04454157332656905e-06, -8.04893807071493939e-06, -2.57184842666902114e-06, -2.57241822509968188e-06, -2.57243891610414721e-06, 5.72766202822094783e-06, -1.47668572481052252e-07, -1.51203792597698339e-07, 2.4069804567261599e-06, 2.4106172986648744e-06, -7.26175085219438188e-06, 2.41119823840563186e-06, -6.35333435639040545e-06, -6.35019432593253441e-06, 1.17469176075246651e-06, -1.14310535082040587e-06, -4.00974477088311687e-06, -4.01145825890125707e-06, -4.00968110625399277e-06, -4.01184206566540524e-06, 3.52082952304044738e-06, -4.01216539103188552e-06, -5.42383759238873608e-06, -5.42746511200675741e-06, -1.27766870718915015e-05, -1.27818411783664487e-05, -4.53361935797147453e-05, -3.24248612741939723e-05, 2.61075479102146346e-06, 2.60686260844522621e-06, 1.36630333145149052e-05, 4.26423212047666311e-05, 4.26384503953158855e-05, -8.9311033661942929e-06, 2.20625515794381499e-05, -8.93029118742560968e-06, 2.20638376049464568e-05, -8.93235483090393245e-06, -1.66495537996524945e-05, -6.37686071058851667e-06, -1.66475474543403834e-05, -6.37774155620718375e-06, 6.89581520418869331e-06, -8.25080178401549347e-07, -8.18940748104068916e-07, 7.1185149863595143e-06, -4.90869160785223357e-06, 8.02869465132971527e-07, 5.63949424758902751e-06, 8.05229603884072276e-07, 5.64701167604653165e-06, 5.17449507242417894e-06, 8.07562457794119837e-07, 5.17203943672939204e-06, 8.10038443432858912e-07, 2.14436317946820054e-06, 6.53250390314497054e-06, 6.52694916425389238e-06, 6.53139113637735136e-06, 7.99430745246354491e-06, 5.9678186516975984e-06, 5.96731888435897417e-06, 5.96690415477496572e-06, 3.52194069819233846e-06, 5.9688836699933745e-06, 4.98495410283794627e-06, 2.03278887056512758e-06, 4.9840054998639971e-06, 2.03106355911586434e-06, 2.02743558475049213e-06, 2.76536206911259796e-06, 2.02951309802301694e-06, 2.25027042688452639e-06, 2.25092708205920644e-06, -1.20225354294234421e-06, -4.68096061467804248e-07, -4.61857268874155125e-07, -4.71108165811529034e-07, 3.68955329577147495e-06, 6.80955338339117588e-07, -1.66914639976312174e-06, 1.9815279301838018e-06, -1.67258713190676644e-06, 1.98648808691359591e-06, 1.98802354134386405e-06, -1.67505731951678172e-06, 1.98569318854424637e-06, -1.67949917795340298e-06, -1.68328801919415127e-06, 1.72530781128443778e-06, 1.28182932712661568e-07, 1.29439172269485425e-07, 1.29092782685802376e-07, -8.4282112311484525e-07, 2.86330282506241929e-06, 2.86596696241758764e-06, 2.06147120707100839e-07, 2.86771114588191267e-06, 2.05081192916622967e-07, 2.13381412095259293e-07, 2.04394538627639122e-07, -2.58640557149192318e-06, 2.0508210241132474e-07, -2.59291664406191558e-06, -2.59771582022949588e-06, -4.63077822132618167e-06, -9.98349969449918717e-06, -9.98232098936568946e-06, -9.98311406874563545e-06, -9.98235464066965505e-06, -1.60674460403242847e-06, -2.39374458033125848e-06, -2.39659448197926395e-06, 4.24440031565609388e-06, -2.74630269814224448e-06, 4.24368363383109681e-06, 4.23983374275849201e-06, 4.24032032242394052e-06, 4.24252766606514342e-06, -2.74623721452371683e-06, -2.74414946943579707e-06, -4.68289044874836691e-06, -4.67914969703997485e-06, -9.7534184533287771e-06, -9.75385046331211925e-06, -9.75348757492611185e-06, -9.7576012194622308e-06, -9.75926468527177349e-06, -3.61002844329050276e-06, -3.61070533472229727e-06, -3.61015122507524211e-06, -3.61101297130517196e-06, -4.34205503552220762e-06, -1.71449073604890145e-06, -1.70841894941986538e-06, -1.71621661593235331e-06, -1.7021966414176859e-06, 6.85234590491745621e-06, 1.7229565855814144e-05, 1.72268992173485458e-05, 1.85956105269724503e-05, 1.8585105863166973e-05, 2.4750488591962494e-05, 2.35322604567045346e-05, 2.35362713283393532e-05, 2.35371280723484233e-05, 2.35326224355958402e-05, 9.96865219349274412e-06, 9.97063762042671442e-06, 9.96964263322297484e-06, 9.97023471427382901e-06, 9.96887047222116962e-06, 2.36222967942012474e-05, -4.52630047220736742e-06, 4.5284614316187799e-05, -4.5265396693139337e-06, 9.86144732451066375e-05, -4.10848042520228773e-05, -0.000282026187051087618, -7.55180371925234795e-05, -0.000282032880932092667, -7.90478952694684267e-05, -0.000211976046557538211, -7.85321608418598771e-05, -7.85378797445446253e-05, -6.42525264993309975e-05, -6.4253501477651298e-05, -6.4252628362737596e-05, 2.39196160691790283e-05, 1.36368216772098094e-05, 1.36364933496224694e-05, 1.36350536195095628e-05, 1.36361395561834797e-05, 4.00093595089856535e-05, 3.10068526232498698e-06, 7.99752888269722462e-06, 8.00079851615009829e-06, 7.99850113253341988e-06, 7.99945973994908854e-06, -1.86276429303688928e-05, 1.69241866387892514e-05, -1.46058473546872847e-05, -1.46022557601099834e-05, -1.46050469993497245e-05, -1.46030861287727021e-05, 1.60460367624182254e-05, -2.22596245293971151e-05, 1.56154658270679647e-06, -4.28690043463575421e-08, -4.91785883127704437e-08, -4.36701768080638431e-08, -5.27889324075658806e-06, 1.70062485267408192e-05, 7.71005306887673214e-06, 7.71426857681944966e-06, 7.71121540310559794e-06, 7.71333088778192177e-06, 7.71171471569687128e-06, -5.46890760233509354e-06, 1.07958085209247656e-05, -5.46875980944605544e-06, -5.47099671166506596e-06, -5.46971250514616258e-06, -1.34742731461301446e-05, 9.45905139815295115e-06, -1.66146764968289062e-05, 5.32955527887679636e-06, -9.91866272670449689e-06, -9.91733668342931196e-06, -9.91912747849710286e-06, -1.05616172731970437e-05, 1.13789337774505839e-05, -1.19152728075277992e-05, 1.13785745270433836e-05, -1.1914840797544457e-05, 8.83031862031202763e-06, 5.79021298108273186e-06, -2.25918165597249754e-06, 1.84888522198889405e-05, -1.93893756659235805e-05, 1.84885466296691447e-05, -1.9388124201213941e-05, 1.84881464520003647e-05, -1.53336259245406836e-06, 6.0258821577008348e-07, 6.0528753920152667e-07, -1.63725635502487421e-05, 1.52701795741450042e-05, -1.63742734002880752e-05, 1.52764732774812728e-05, -1.63743861776310951e-05, 1.52700940816430375e-05, -1.63713393703801557e-05, -1.42131266329670325e-05, 1.52942138811340556e-05, -2.89112595055485144e-05, 2.5759680283954367e-05, -2.89147883449913934e-05, 2.57638730545295402e-05, -2.89100953523302451e-05, 2.57597384916152805e-05, -2.8909895263495855e-05, -4.16848479289910756e-06, 3.07358932332135737e-05, -2.13224211620399728e-05, 3.07407390209846199e-05, -2.1326373826013878e-05, 3.07379086734727025e-05, -2.13250204978976399e-05, 3.07393347611650825e-05, -2.132028566848021e-05, 3.0734594474779442e-05, 1.7147436665254645e-05, -3.40598271577619016e-05, 4.18473027821164578e-05, -3.40625920216552913e-05, 4.18496965721715242e-05, -3.40668120770715177e-05, 4.18469317082781345e-05, -3.40603473887313157e-05, 4.18460149376187474e-05, -3.40625847456976771e-05, 3.52408569597173482e-05, -3.02461303363088518e-05, -3.61311467713676393e-05, 6.80485827615484595e-05, -6.35785472695715725e-05, 6.80458979331888258e-05, -6.35753458482213318e-05, 6.80549128446727991e-05, -6.35796386632137001e-05, 6.80508310324512422e-05, -6.35798060102388263e-05, 6.80514713167212903e-05, -6.35771866654977202e-05, 0.000102669400803279132, -4.63323340227361768e-05, 7.13385306880809367e-05, -5.76425591134466231e-05, -0.000152062668348662555, -0.000250448123551905155, -0.000626023043878376484, -0.000686002022121101618, -0.000686008075717836618, -0.000698359799571335316, -0.000698370218742638826, -0.000701273791491985321, -0.000701285898685455322, -0.00087541225366294384, -0.000875405792612582445, -0.000686525192577391863, -8.33900630823336542e-05, 7.38647213438525796e-05, -0.000113631358544807881, 4.13477901020087302e-05, -0.000119385040306951851, 5.79477673454675823e-05, -6.24801323283463717e-05, 5.79478110012132674e-05, -6.24821113888174295e-05, 5.79468724026810378e-05, -6.24807289568707347e-05, 5.79466795898042619e-05, -6.24775784672237933e-05, 5.79464503971394151e-05, -6.24792519374750555e-05, 8.31964061944745481e-05, -1.78641748789232224e-05, 6.09153685218188912e-05, -2.19426765397656709e-05, 3.9814763113099616e-06, -4.45281002612318844e-05, -2.16788375837495551e-05, -4.35224937973544002e-05, -1.12907337097567506e-05, 2.58029490396438632e-06, -3.1845361263549421e-06, 2.90661737381014973e-05, -3.26303688780171797e-06, 1.66673671628814191e-05, -6.90707247485988773e-06, 1.09024431367288344e-05, -8.33732156024780124e-06, 1.0144738553208299e-05, -1.18957805170794018e-05, 7.22059348845505156e-06, -1.74385841091861948e-05, 7.72985549701843411e-06, -1.8314794942853041e-05, 1.04625542007852346e-05, -1.17420941023738123e-05, 1.26287786770262755e-05, -5.13903069077059627e-06, 5.63755702387425117e-06, -2.72183137894899119e-06, -5.34046591837977758e-07, -3.18447064273641445e-06, 1.38602740662463475e-06, -2.92462368634005543e-06, 7.54696611693361774e-06, -5.12902215632493608e-06, 9.052299901668448e-06, -9.93252797343302518e-06, 9.10481139726471156e-06, -9.46810087043559179e-06, 7.37704840503283776e-06, -3.32251465806621127e-06, 4.40896383224753663e-06, 1.97148710867622867e-06, 1.965944420589949e-06, 1.96997984858171549e-06, 1.96740916180715431e-06, 1.9691310626512859e-06, 1.9673370843520388e-06, 1.97023837245069444e-06, 1.96544101527251769e-06, 1.97233225662785117e-06, -4.20956803282024339e-06, 4.15353542848606594e-06, -9.30905207496834919e-06, -4.64134791400283575e-06, 8.04239061835687608e-06, -7.06543414707994089e-06, 7.01087537890998647e-06, -2.26156362259644084e-06, 3.44776367455779109e-06, 3.42979183187708259e-06, 3.44381032846285962e-06, 3.43539022651384585e-06, 3.43743477060343139e-06, 3.44217505698907189e-06, 3.43097235599998385e-06, 3.44783256878145039e-06, -3.52558049598883372e-06, 5.95063465880230069e-06, -1.11256704258266836e-05, 1.20941485874936916e-05, -1.15878910946776159e-05, 1.50802625284995884e-05, -1.15538659883895889e-05, -1.11702593130758032e-05, 1.82664753083372489e-05, -1.84249965968774632e-05, 1.45767089634318836e-05, -7.3221417551394552e-06, 1.49706820593564771e-05, -7.32241460354998708e-06, 1.4972949429647997e-05, -7.32204489395371638e-06, 1.49711522681172937e-05, -7.32102034817216918e-06, 1.49691059050383046e-05, -7.31778936824412085e-06, 2.85456985693599563e-06, 4.03165358875412494e-07, -2.54925853369059041e-05, 4.02447597025457071e-07, -2.20090405491646379e-05, 4.02206097760426928e-07, -5.04738864037790336e-07, -4.9628386022959603e-07, -5.05325033373082988e-07, -5.0055126621373347e-07, -5.07622132772667101e-07, -1.06695588328875601e-05, 3.23953026963863522e-05, -1.06664865597849712e-05, 3.23889726132620126e-05, -3.29926733684260398e-05, -1.14331187432981096e-05, -0.000102381585747934878, -5.25889754499075934e-06, 9.33940900722518563e-05, 0.000219638444832526147, 0.000219630965148098767, 7.3183495260309428e-05, 7.3187860834877938e-05, 5.53476165805477649e-05, 5.53521640540566295e-05, 2.75887632597004995e-05, 2.75837046501692384e-05, -1.87459454537020065e-06, 4.20527703681727871e-06, -3.65268965651921462e-06, 1.59232076839543879e-05, -5.32980175194097683e-06, 2.01028274204873014e-06, -5.33112188350060023e-06, 2.00977206077368464e-06, -5.32603826286504045e-06, 2.01037914848711807e-06, 2.01101397578895558e-06, 2.01939315047638956e-06, 2.00926365323539358e-06, 2.00860904442379251e-06, 6.24976246399455704e-06, -3.44561271958809812e-06, 8.82738368090940639e-06, -3.44702243637584615e-06, 8.82470794749679044e-06, -1.59974206326296553e-05, 2.2556547264684923e-05, -1.97581939573865384e-05, 3.10236282530240715e-05, -3.0473744118353352e-05, -9.49841614783508703e-06, 3.1630039302399382e-05, -3.47147142747417092e-05, 3.15328907163348049e-05, -2.13314833672484383e-05, 1.33193971123546362e-05, -2.13323291973210871e-05, 1.33190742417355068e-05, -2.11151200346648693e-05, -1.32676791508856695e-06, -1.33671107960253721e-06, -1.33768253363086842e-06, -1.32760681026411476e-06, -1.34378183247463312e-06, 1.73656171682523564e-05, -1.44110608744085766e-05, 1.7370024579577148e-05, -1.44114974318654276e-05, 1.73654134414391592e-05, -8.81268897501286119e-06, -1.96168166439747438e-05, 1.91708913916954771e-05, -1.96179389604367316e-05, 1.91711915249470621e-05, -1.96160926861921325e-05, 1.91697690752334893e-05, -1.96159071492729709e-05, 1.91691069630905986e-05, -1.02494386737816967e-05, 1.74249782958213473e-06, 1.31453462017816491e-05, -1.62750966410385445e-05, 1.6591602616244927e-05, -1.62749893206637353e-05, 1.65930541697889566e-05, -1.62755077326437458e-05, 7.02966917742742226e-06, 2.48625633503252175e-06, 2.48661376645031851e-06, 1.37925899252877571e-05, -1.39354951897985302e-05, 1.37918214022647589e-05, -1.39364174174261279e-05, 1.37919178087031469e-05, -5.27166730535100214e-06, 1.33155219828040572e-06, 1.32994227897142991e-06, -1.31925107780261897e-05, 1.24116422739461996e-05, -1.31921715365024284e-05, 1.24124144349480048e-05, -1.31931074065505527e-05, 3.74123260371561628e-06, -7.25127529221936129e-06, 6.15199439835123485e-07, -5.23572687427531491e-08, -5.11129734093174193e-08, -5.0828742104158664e-08, -5.2041496445554003e-08, -5.04889747787728993e-08, -5.20819014582230011e-08, -5.05304491582592163e-08, -4.83837823139765533e-08, -5.45225611858768389e-06, -2.43186605075607076e-06, 1.93491632671793923e-05, -1.39636067615356296e-05, 1.93514842976583168e-05, -1.39627154567278922e-05, 1.09733737190254033e-05, 1.09691354737151414e-05, 1.0970915354846511e-05, 1.096943742595613e-05, 1.09708216768922284e-05, 1.64718167070532218e-05, -1.68362239492125809e-05, 2.50245502684265375e-05, -7.68225345382234082e-06, -7.67757774156052619e-06, 9.25833319342928007e-06, -3.61891470674891025e-05, 3.11334224534220994e-06, -3.30582079186569899e-05, -2.25675503315869719e-05, -2.25602925638668239e-05, -4.08677715313388035e-06, -2.25621497520478442e-05, -4.08482446800917387e-06, -4.0882637222239282e-06, -4.08499863624456339e-06, -4.08768846682505682e-06, -4.08376945415511727e-06, -4.0904337765823584e-06, 4.54447399533819407e-05, -1.20944796435651369e-05, 4.0477527363691479e-05, -0.000210953032365068793, -0.000239258282817900181, 8.38865962577983737e-05, 1.11230274342233315e-05, 1.1105454177595675e-05, 1.11105100586428307e-05, 1.1115331290056929e-05, 1.11138506326824427e-05, 1.11140152512234636e-05, 1.11088202174869366e-05, 1.1113753316749353e-05, 2.2129195713205263e-05, -5.66125381737947464e-05, -4.42899690824560821e-05, 1.95121774595463648e-05, -3.2191961508942768e-05, 8.08555796538712457e-06, -1.23883601190755144e-05, -1.23826011986238882e-05, -1.23892559713567607e-05, -1.19584674393991008e-05, -1.19654541776981205e-05, -6.32647106613148935e-06, -6.3273932937590871e-06, -6.32657929600100033e-06, 1.11494387056154665e-06, -6.32679120826651342e-06, 1.11764848043094389e-06, 1.10239716377691366e-06, 1.11152417048288044e-06, 1.10509165551775368e-06, 1.11380040834774263e-06, -4.91793525725370273e-06, 1.35088557726703584e-05, 8.21029334474587813e-06, -6.22993911747471429e-06, 5.25618133906391449e-07, -6.23141613687039353e-06, 5.2696890406878083e-07, -6.23483856543316506e-06, 5.27081965628894977e-07, -6.234370175661752e-06, 5.25360860592627432e-07, -6.22939069216954522e-06, -3.5744915294344537e-07, 8.95336961548309773e-06, 1.13894763842381508e-07, 2.29909692279761657e-05, -2.11441947612911463e-05, 2.29911966016516089e-05, -1.89834054253879003e-07, 4.82120594824664295e-06, -8.46796297082619276e-07, -8.48101763040176593e-07, -8.48270474307355471e-07, -3.50121604242303874e-06, -8.51141464863758301e-07, -3.50625327882880811e-06, -8.45303247842821293e-07, -3.5039822705584811e-06, -8.47386218083556741e-07, -2.46591457653266843e-06, -8.67584458319470286e-06, 2.70830037152336445e-06, -1.4748075045645237e-05, 6.40835969534236938e-06, -1.14192271212232299e-05, -4.32457682109088637e-06, -8.49255593493580818e-06, -2.19483536056941375e-06, -2.19588378058688249e-06, -2.19465664486051537e-06, 2.71234807769360486e-06, -2.1920334347669268e-06, 2.71262342721456662e-06, -2.1851246856385842e-06, 2.71064095613837708e-06, -5.23905441696115304e-07, -5.29514522895624395e-07, -5.27659949511871673e-07, -9.7059646577690728e-06, 2.61694549408275634e-06, -3.89223214369849302e-06, -1.71945043803134467e-06, -3.88910211768234149e-06, -1.71530018633347936e-06, -3.88555827157688327e-06, -2.37840117733867373e-06, -8.25480640287423739e-07, -2.38205643654509913e-06, -8.25030383566627279e-07, -8.27933945402037352e-07, -8.2371633425282198e-07, 8.07840123684400169e-08, 8.58458903962855402e-08, 8.10701550335579668e-08, 4.7239177547453437e-06, 4.72040392196504399e-06, 4.92217031933250837e-06, 4.92137178298435174e-06, 9.3617600214201957e-06, 5.25466612089076079e-06, 5.2595105444197543e-06, 5.25548057339619845e-06, 5.25640189152909443e-06, 5.25898576597683132e-06, -4.55656709164031781e-06, 6.43885186946135946e-06, -4.55739109384012409e-06, -2.86032036456163041e-06, -2.85895794149837457e-06, -8.60553791426355019e-06, -5.85211637371685356e-06, -8.5180308815324679e-06, -8.51983804750489071e-06, -8.52073389978613704e-06, -8.51751156005775556e-06, -9.08116999198682606e-06, -8.51725326356245205e-06, -8.25304050522390753e-06, -9.07874073163839057e-06, -1.24364523799158633e-05, -1.24389835036708973e-05, -4.67285717604681849e-05, -4.2558858694974333e-05, -7.88510296843014657e-05, -4.25629150413442403e-05, -4.25639700551982969e-05, -7.88539691711775959e-05, -7.88543984526768327e-05, -0.000104127379017882049, -0.000106039005913771689, -0.000106045685242861509, -1.23897862067678943e-05, -5.69330150028690696e-05, -4.45180412498302758e-05, -4.4527889258461073e-05, -4.45149053120985627e-05, 1.20792137749958783e-05, -4.45138721261173487e-05, 1.2078594409103971e-05, 1.838091884565074e-05, -2.61622171819908544e-05, -2.61553414020454511e-05, -2.01110087800770998e-05, -1.4552299035131e-05, -1.45496569530223496e-05, -2.9968468879815191e-06, -1.24055304695502855e-05, -2.99567545880563557e-06, -6.40014059172244743e-06, -1.56727622879770934e-07, -1.57322347149602138e-07, -1.58301730834864429e-07, -1.58252248638746096e-07, -1.61931012598870439e-07, 9.37378274556976976e-07, -8.42871395434485748e-06, 9.37382424126553815e-07, -8.42899044073419645e-06, -4.41207390622366802e-07, -8.77653747011208907e-06, -2.09518634619598743e-06, -2.09524068850441836e-06, -2.09619724955700804e-06, 1.77616016117099207e-06, -2.09750055546464864e-06, 1.77732079009729205e-06, -2.09825384445139207e-06, 1.77744436768989544e-06, -2.09758150049310643e-06, 1.77590834482543869e-06, -1.95868665286980104e-06, -5.53611289433320053e-06, 3.06013112094660755e-06, -9.75872626440832391e-06, 4.34362027590395883e-06, -3.44679506270040292e-06, -4.84453664739703527e-07, -2.75238812719180714e-06, -2.3543561837868765e-06, -2.35235825130075682e-06, -2.35404741033562459e-06, -3.72858544039900153e-08, -2.35410220739140641e-06, -3.3573300584066601e-08, -2.35469792642106768e-06, -3.50763009748789045e-08, -2.35489642363972962e-06, 1.36250650939473417e-06, 6.06757794230361469e-06, -4.00335181893751724e-07, 6.32646833764738403e-06, 2.88025739791919477e-06, 3.44686463904508855e-06, 7.00916757523373235e-07, 7.0107046212797286e-07, 7.00596729075186886e-07, 7.015474352556339e-07, 7.00262773989379639e-07, -6.52046992399846204e-07, 7.00751741078420309e-07, -6.5836553631015704e-07, -9.61121884301974205e-08, -2.02748992705892306e-06, 5.77544255975226406e-07, 2.7100709303340409e-06, -2.73828220542782219e-07, 3.0840394629194634e-06, 2.49916683969786391e-06, 2.49668801188818179e-06, 1.26148131585068768e-06, 1.26082045426301192e-06, 9.1411402536323294e-07, 9.15687621727556689e-07, 9.1349772901594406e-07, -4.49138326530373888e-07, 9.13047585981985321e-07, -4.48612013315141667e-07, -4.50596274959025322e-07, 1.11604549601906911e-07, 1.05933480654130108e-07, 2.63680340140126646e-06, 6.3847284081930411e-07, 3.98117663280572742e-06, 9.00495180644611537e-08, 1.87171360721549718e-06, -5.06051776483218418e-07, 1.86846011729357997e-06, -5.0507895821283455e-07, -5.08827724843285978e-07, -5.06160517943499144e-07, -5.07604227095725946e-07, -5.07251684211951215e-07, -5.06748449424776481e-07, -5.07855872911022743e-07, 7.01567088867705024e-08, -1.18375044166896259e-06, -4.70436361865722574e-06, -1.1833428743557306e-06, -5.6415742619719822e-06, -1.18270952498278348e-06, -3.1950296488503227e-06, -9.63528145803138614e-06, -9.63604361459147185e-06, 1.28716624203661922e-06, -9.63488400884671137e-06, -9.63724505709251389e-06, 1.28910539842763683e-06, -9.63741149462293833e-06, 1.28872306959237903e-06, 1.95219809029367752e-06, -4.75834940516506322e-06, 1.45774847624124959e-05, 1.89549427886959165e-06, 2.4051083528320305e-05, 1.80251881829462945e-05, 7.71804116084240377e-05, 1.24038633657619357e-05, 6.7652486904989928e-05, 7.85915119649871485e-07, -2.95079807983711362e-05, 1.10638563910470111e-06, -6.78784681440447457e-06, -4.30308091381448321e-06, -4.29551391789573245e-06, -4.30070713264285587e-06, -4.29687725045369007e-06, -4.30029876952175982e-06, -1.05118906503776088e-05, -4.30043201049556956e-06, -4.29665897172526456e-06, -4.30074896939913742e-06, -7.48619731893995777e-06, -6.38747792436333839e-07, -9.65139679465210065e-06, -6.38441406408674084e-07, -9.65211711445590481e-06, -6.37385767277010018e-07, -6.35580704511085059e-07, -6.3628073121435591e-07, -6.3656000293121906e-07, -6.35400112969364272e-07, -2.0041127299919026e-06, -6.85625491314567626e-06, 2.37576796280336566e-06, -6.8572849158954341e-06, 2.96478816608214402e-07, -4.44753550254972652e-06, -2.1225559976301156e-07, -1.37471283778722864e-06, -4.28955047482304508e-07, -1.20798563330026809e-06, -2.99318514862534357e-07, -2.99253230195972719e-07, -2.98941358778392896e-07, -1.825892468332313e-07, -2.98481950267159846e-07, -1.82738034482099465e-07, -2.98613912264045211e-07, -2.99805407166786608e-07, -1.81269172117026756e-07, -2.05942654929458513e-07, 1.78491177393880207e-07, 1.73264950831253373e-07, 6.37244625067978632e-07, -1.36007631823531483e-08, 1.22924689094361383e-06, -8.22033086933515733e-07, 1.22853680295520462e-06, -8.2069061591028003e-07, -3.17085735446198669e-08, -3.45404416179917462e-08, -3.43373791622525459e-08, 2.57787803548126249e-07, -1.78811853857041569e-06, 2.58716568168892991e-07, -1.89575257536489516e-06, -1.89180707366176648e-06, -1.89460081401193747e-06, -1.89287550256267423e-06, -1.8935879779746756e-06, -1.40844940688111819e-06, -1.40643703616660787e-06, -1.80771769464627141e-06, 6.6046091262705886e-08, -1.80798122073611012e-06, 6.53271854389458895e-08, 6.24756566480755282e-08, 6.36528199038366438e-08, 6.4039966218842892e-08, -1.7399084981661872e-06, -3.54218940401551663e-07, -1.31181286633363925e-06, -1.31003741898894077e-06, -1.31095555389038054e-06, -1.31091462662880076e-06, -1.31011495341226691e-06, 3.52170928863415611e-07, -1.10822259102860698e-06, -5.37349762907979311e-07, -5.35906622189941118e-07, -6.55973792618169682e-07, -6.56328552395279985e-07, -3.03229882092637126e-07, -3.04535547002160456e-07, 6.14880661942152074e-08, -3.04261135397609905e-07, -3.03697191839091829e-07, 6.09431438647334289e-08, 6.0621758279921778e-08, 6.120896500760864e-08, 6.0381758260064089e-08, -1.93417150740060606e-07, -1.35121524635906098e-07, -6.03559556111576967e-07, -6.04370086421113228e-07, -6.03702460466593038e-07, -6.0426327763707377e-07, -8.8659538732827059e-07, -8.86570887814741582e-07, -8.87193266407848569e-07, 2.18421988051886728e-07, 4.40862049799761735e-06, 1.48930644172651228e-06, 4.57589885627385229e-06, 4.57710029877489433e-06, 4.57603391623706557e-06, 4.76069635624298826e-06, 4.76000195703818463e-06, 1.02850242456042906e-06, 1.02848082406126196e-06, -1.93091537425971183e-07, -1.93105989865216543e-07, -1.9244556881403696e-07, -1.94202073089400074e-07, -6.04911747359437868e-06, -1.95351674392441055e-07, -6.04832484896178357e-06, -1.95849679585080594e-07, 9.6250460046576336e-06, 2.35361471823125612e-06, 2.02985356736462563e-05, 2.35346442423178814e-06, 2.02973224077140912e-05, -6.23123833065619692e-06, -6.22899642621632665e-06, -6.22904008196201175e-06, -6.23090409135329537e-06, -6.22742481937166303e-06, -3.39784819516353309e-05, -4.37109383710776456e-06, -2.66612569248536602e-05, -3.53322025148372632e-06, -1.75439145095879212e-05, -8.12826237961417064e-06, 4.01777379011036828e-06, 2.22048197429103311e-06, 2.21978484660212416e-06, 2.22023390961112455e-06, 2.219711404904956e-06, 2.22065978050522972e-06, 2.21909181163937319e-06, -1.60400577442487702e-06, 2.2191250081959879e-06, 2.01836701307911426e-06, 2.01798229682026431e-06, -2.61279637925326824e-06, 3.75929653273487929e-06, -2.61239915744226892e-06, 1.30112493934575468e-06, 7.75541764141962631e-07, 7.19874265087128151e-07, 2.62841012954595499e-06, -1.05343893608278449e-08, 2.62848948295868468e-06, -9.92973525626439368e-09, 2.62721619037620258e-06, 1.54409542574285297e-06, 1.54464976276358357e-06, 1.5467510365851922e-06, -3.60256791509527829e-07, 1.54820577336067799e-06, -1.61516163643682376e-06, 2.11239944292174187e-06, -1.61430023126740707e-06, 2.11132464755792171e-06, 1.42594603858015034e-06, -1.1886006632266799e-06, 1.11010956516111037e-06, 1.1104006034656777e-06, 1.11040662886807695e-06, 1.11030965399550041e-06, 1.11038502836890984e-06, 1.11036160888033919e-06, 1.1103621773145278e-06, -4.94554619479004032e-08, -1.23187544431857532e-06, -4.94769665237981826e-08, -1.07381777070258977e-06, -1.07380230929265963e-06, -1.07398591353558004e-06, -1.07359926460048882e-06, 2.44799764459457947e-07, -1.07344851585366996e-06, -1.81768129436932213e-07, 7.24033498045173474e-07, 7.23522248335939366e-07, 7.23891218967764871e-07, 7.23614164144237293e-07, 7.23845801076095086e-07, 7.23626158105616923e-07, -1.44223491815864691e-07, -1.1420136161177652e-06, -1.4418191085496801e-07, -5.14396617745660478e-07, -5.13609734298370313e-07, -5.14968462539400207e-07, -5.12915619310660986e-07, -1.78555310981209914e-07, -5.12804490426788107e-07, -1.78102453674000571e-07, -1.42854901241662446e-07, 1.45854954780588741e-07, 1.46175295867578825e-07, 1.46104000009472657e-07, 1.46082157925775391e-07, 1.46095288755532238e-07, 1.34711649479868356e-06, -8.58584954244179244e-08, 1.34698075271444395e-06, -8.55998436577465327e-08, 1.34651577354816254e-06, -1.78385501925504286e-08, -3.54186084905450116e-07, 2.60172828348004259e-06, -1.0142691735381959e-06, 2.60285492004186381e-06, -1.01496618754026713e-06, 3.08055427922226954e-06, -1.01469913715845905e-06, 3.07978007185738534e-06, -1.01337127489387058e-06, 3.07790901388216298e-06, 1.885478582153155e-06, -2.63814797563100001e-07, 9.99342432805860881e-07, -2.64860744891848299e-07, 9.99907342702499591e-07, -2.65104858954146039e-07, 9.99954636426991783e-07, -2.65001375510109938e-07, 9.99674170998332556e-07, -2.6443171918799635e-07, 9.98665996121417265e-07, -1.8439710629536421e-06, -4.93342497520643519e-07, -4.89900173761270707e-07, -6.15769522482878529e-06, -1.93069899978581816e-06, -6.15852331975474954e-06, -1.93074492926825769e-06, -6.15790168012608774e-06, -1.93149753613397479e-06, -8.39488984638592228e-06, -4.67535755888093263e-06, -1.14420436148066074e-05, -4.67551399196963757e-06, -1.66928675753297284e-05, 7.85190786700695753e-06, 2.77961771644186229e-06, 2.78132256426033564e-06, 1.1519251529534813e-05, -1.04209184428327717e-05, -1.04199716588482261e-05, -1.04213540907949209e-05, -1.04193704828503542e-05, -1.04220007415278815e-05, -6.15798307990189642e-06, -6.16082525084493682e-06, -6.15818998994654976e-06, -6.16089164395816624e-06, -6.15777889834134839e-06, -4.20965307057485916e-06, -4.20562082581454888e-06, -2.20044694287935272e-06, -2.19688195102207828e-06, -2.19968092096678447e-06, -2.27315649681258947e-06, -2.27428790822159499e-06, -5.2761806728085503e-06, -1.56038856857776409e-06, 2.9110301511536818e-06, 6.62747140722785844e-07, 6.62316836042009527e-07, 6.62707350329583278e-07, 6.62234356241242494e-07, 6.62869240386498859e-07, 6.6199066850458621e-07, 6.63196203731786227e-07, 6.61685078284790507e-07, -8.93602560836370685e-08, 3.92163019569125026e-06, 1.55856952233079937e-07, 1.49184245401556836e-06, -1.48808666722288763e-07, -1.4909126377915527e-07, -4.94339076340111205e-07, -4.94685821195162134e-07, -4.94342145884729689e-07, -4.9468127372165327e-07, -4.9431127990828827e-07, -4.94777168569271453e-07, -4.94096639158669859e-07, -1.19204935344896512e-06, -1.19051253477664432e-06, 6.69957216814509593e-07, 5.44277270364545984e-07, 1.80081372036511311e-06, 7.29491205220256234e-07, 7.28372299363400089e-07, -3.86592091672355309e-07, -3.87080291375241359e-07, -3.86771915827921475e-07, -3.86975244737186586e-07, -3.86809063002147013e-07, -3.86990905099082738e-07, -3.86742271984985564e-07, -5.56108545879396843e-07, -5.55622136744204909e-07, -6.3716009890413261e-07, -5.05591287947027013e-07, -5.06342814787785755e-07, -2.88916453428100795e-07, 5.24029928783420473e-07, 5.2449610166149796e-07, 5.24217739439336583e-07, 5.24338474860996939e-07, 5.24336087437404785e-07, -7.7376185458888358e-08, -7.72861028508486925e-08, -7.73899913042441767e-08, -7.72447705799095274e-08, -7.747569696903156e-08, 1.49770187363174045e-07, 1.49215040323724679e-07, -2.91984548539403477e-07, -1.2331317975622369e-06, -7.20479135907226009e-07, -7.20691161859576823e-07, 1.92146274002880091e-07, 1.92343705407438392e-07, 1.00974739325465634e-06, 4.1079098878071818e-07, 7.99673557594360318e-07, -1.71355889477808887e-08, -1.83403638942536418e-08, -1.67422964381103156e-08, 5.3387441312224837e-07, 5.35588412731158314e-07, 5.34016464825981529e-07, -3.44728022128037992e-07, -3.46394557482199161e-07, -1.95106804312672466e-06, -1.9527617496351013e-06, -1.95120082935318351e-06, -1.07240714442013996e-06, -1.07086452771909535e-06, 1.8535594108470832e-06, 1.1317473536109901e-06, 4.34708908869652078e-06, -2.04204255283002567e-07, 2.29965678499866044e-07, -1.94664971786551178e-06, -1.12922987227648264e-06, -1.25977931020315737e-06, -1.25757139812776586e-06, -1.255628262697428e-06, -1.25724648114555748e-06, -1.25574410958506633e-06, -1.2574196261994075e-06, -1.97679219127167016e-06, -1.97901840692793485e-06, -3.35130130224570166e-06, -7.98305336502380669e-07, -2.43973750002624001e-06, -8.58809528381243581e-07, -1.61870752890536096e-06, -1.61517220931273187e-06, -6.66079267830355093e-06, -6.6561069616000168e-06, -1.67746675288071856e-05, -1.39911371661582962e-05, -1.91059498320100829e-05, -1.59938663273351267e-05, 7.72871953813591972e-06, -1.37940014610649087e-05, -1.06471925391815603e-05, -1.3032645256316755e-05, -9.74928843788802624e-06, -9.74346585280727595e-06, -6.42767872705007903e-06, -6.42279474050155841e-06, -6.42661916572251357e-06, -6.42316399535047822e-06, -6.42696568320388906e-06, 2.67629184236284345e-06, 4.84421252622269094e-06, 4.84160773339681327e-06, 1.26586513715665205e-07, -3.31435148837044835e-06, 1.27540204175602412e-07, -3.54493317900050897e-06, 1.29883588328993937e-07, -2.10175767278997228e-06, 1.30634632000692363e-07, 1.3158903300336533e-07, 1.95255870494293049e-06, 2.87678926724765915e-06, 2.87383045360911638e-06, 3.84935401598340832e-06, 2.87394846054667141e-06, 4.67031850348575972e-06, 2.87442844637553208e-06, 4.6699192353116814e-06, 2.87474995275260881e-06, 4.66951541966409422e-06, 9.09666084680793574e-07, 9.09508742097386857e-07, -1.16708228858897201e-07, 2.48452153073230875e-07, 2.11888254852965474e-06, 1.37081372031389037e-06, 1.60034892360272352e-06, -2.00346036649534653e-07, -1.98971264353531296e-07, -7.48921308968419908e-07, -7.49406126487883739e-07, -7.48542390738293761e-07, -7.4913180014846148e-07, -7.49264927435433492e-07, -7.48719230614369735e-07, -7.48743559597642161e-07, -1.88940009593352443e-06, -1.88759133834537352e-06, -2.57997476182936225e-06, -2.23121151066152379e-06, -3.59444766218075529e-06, -1.08557162548095221e-06, 1.44654507039376767e-07, -2.86090221379708964e-06, -2.33082778322568629e-06, -3.11354574478173163e-06, -3.07166078528098296e-06, -3.07258960674516857e-06, -3.07386767417483497e-06, -3.0720207178092096e-06, -3.07259460896602832e-06, -3.07067443827691022e-06, -3.07062668980506714e-06, -3.07154004985932261e-06, -1.22864480545104016e-06, -2.7793064418801805e-06, -6.44067142729909392e-07, -5.17412274803064065e-07, }; +static const float prec_wndCorrectionWeightingHF[2049] = { 0.000505739357322454453, 7.33714186935685575e-05, 0.000318276870530098677, 6.97833092999644578e-05, 0.000308861577650532126, 6.51125083095394075e-05, 1.04647560874582268e-05, 6.03097869316115975e-05, 3.18455340675427578e-06, 3.18118827635771595e-06, 1.70193766280135605e-06, 1.70872863236581907e-06, 1.70290286405361257e-06, 1.71291333117551403e-06, -1.6772342860349454e-05, 9.085808414965868e-06, -1.38505868108040886e-06, 2.96946745947934687e-05, 9.62323701969580725e-06, 2.96927282761316746e-05, 9.62433841777965426e-06, 2.96923426503781229e-05, 9.62354806688381359e-06, 2.51766668952768669e-05, 9.62288413575151935e-06, 1.96093715203460306e-05, 4.74989155918592587e-06, 2.75702689123136224e-07, -2.58509248851623852e-06, -3.57976387022063136e-06, -3.57404633177793585e-06, -3.57956696461769752e-06, -3.58080819751194213e-06, -3.57443968823645264e-06, -3.57908425030473154e-06, -3.57629255631763954e-06, -3.57711269316496328e-06, -3.57788508154044393e-06, -2.11328024306567386e-05, -4.85614109493326396e-05, -9.24829328141640872e-06, -6.12005023867823184e-05, -9.2464460976771079e-06, -6.49364956188946962e-05, -3.9543567254440859e-05, -3.95450188079848886e-05, -3.95449096686206758e-05, -3.95442584704142064e-05, -5.3431107517099008e-05, 2.25170015255571343e-06, -6.84552360326051712e-05, -4.40592975792242214e-06, -4.40640224041999318e-06, -4.40539179180632345e-06, 2.04474381462205201e-05, -2.33457558351801708e-05, 2.04480566026177257e-05, 2.04467796720564365e-05, 8.80972074810415506e-05, 8.80967418197542429e-05, 0.000143158176797442138, 0.000195603541214950383, 0.000242714333580806851, 0.000261322420556098223, 0.000342828192515298724, 0.000437144452007487416, 0.0006108840461820364, 0.000774303043726831675, 0.000929584726691246033, 0.00109885807614773512, 0.00123333127703517675, 0.00123333197552710772, 0.00150770135223865509, 0.00150770274922251701, 0.00162411201745271683, 0.00173318048473447561, 0.00185745488852262497, 0.00185745616909116507, 0.00208636140450835228, 0.0020863623358309269, 0.00208636256866157055, 0.00265600741840898991, 0.00321617326699197292, 0.00364039582200348377, 0.00419242773205041885, 0.00484599685296416283, 0.0055332542397081852, 0.00637048948556184769, 0.00719480868428945541, 0.00796119030565023422, 0.00892227515578269958, 0.010010245256125927, 0.0110843358561396599, 0.0120891425758600235, 0.0133147137239575386, 0.0148029346019029617, 0.0163658484816551208, 0.0173473004251718521, 0.0177115406841039658, 0.0179874151945114136, 0.0182402022182941437, 0.0185932721942663193, 0.0193854253739118576, 0.0208168216049671173, 0.022700965404510498, 0.0246951431035995483, 0.0267433952540159225, 0.0289320070296525955, 0.0311831962317228317, 0.0335262678563594818, 0.0359866693615913391, 0.0385533645749092102, 0.0411493740975856781, 0.0437776409089565277, 0.0465365312993526459, 0.0494540892541408539, 0.0523491427302360535, 0.0551759488880634308, 0.0583340972661972046, 0.0615682527422904968, 0.0643769949674606323, 0.0669079422950744629, 0.0698002651333808899, 0.0724487677216529846, 0.0744496509432792664, 0.07707986980676651, 0.0804984048008918762, 0.0838356614112854004, 0.0872201994061470032, 0.0913109555840492249, 0.0956125110387802124, 0.0997786596417427063, 0.104282721877098083, 0.109245344996452332, 0.114235170185565948, 0.119367003440856934, 0.125063017010688782, 0.130617335438728333, 0.136279597878456116, 0.14235389232635498, 0.148329272866249084, 0.154653057456016541, 0.160826772451400757, 0.166860878467559814, 0.173222929239273071, 0.178538158535957336, 0.183679059147834778, 0.18896348774433136, 0.19174647331237793, 0.19515635073184967, 0.200516790151596069, 0.205886095762252808, 0.213238954544067383, 0.220904991030693054, 0.228952676057815552, 0.237158715724945068, 0.245417401194572449, 0.254385471343994141, 0.262659579515457153, 0.272212326526641846, 0.281235754489898682, 0.290797263383865356, 0.301193475723266602, 0.311031341552734375, 0.322469174861907959, 0.333097279071807861, 0.344499051570892334, 0.355397671461105347, 0.365112960338592529, 0.37431025505065918, 0.380948871374130249, 0.384351819753646851, 0.385671913623809814, 0.38679853081703186, 0.388872295618057251, 0.39814072847366333, 0.409863144159317017, 0.422440767288208008, 0.43406146764755249, 0.445307999849319458, 0.456239640712738037, 0.467059969902038574, 0.478128224611282349, 0.489607155323028564, 0.501999497413635254, 0.514559626579284668, 0.527760565280914307, 0.540824711322784424, 0.554137706756591797, 0.56758415699005127, 0.581115305423736572, 0.594854950904846191, 0.608066201210021973, 0.608066201210021973, 0.613756000995635986, 0.619230985641479492, 0.626470208168029785, 0.633976101875305176, 0.638991951942443848, 0.641006827354431152, 0.64558863639831543, 0.64558863639831543, 0.656791567802429199, 0.669010162353515625, 0.680625200271606445, 0.692688047885894775, 0.70340573787689209, 0.713659942150115967, 0.722919106483459473, 0.731900036334991455, 0.740404427051544189, 0.748746812343597412, 0.756383836269378662, 0.763619840145111084, 0.769847989082336426, 0.775905013084411621, 0.781849503517150879, 0.788017570972442627, 0.794418156147003174, 0.800196409225463867, 0.803867757320404053, 0.806010961532592773, 0.807038187980651855, 0.808389544486999512, 0.812411367893218994, 0.818163037300109863, 0.82382667064666748, 0.829252183437347412, 0.834270596504211426, 0.838795483112335205, 0.843181729316711426, 0.847509324550628662, 0.852072179317474365, 0.856740117073059082, 0.861256659030914307, 0.865810632705688477, 0.869913637638092041, 0.874145567417144775, 0.87804800271987915, 0.88186192512512207, 0.885468125343322754, 0.888523578643798828, 0.891598045825958252, 0.894211471080780029, 0.896808445453643799, 0.899008095264434814, 0.900984048843383789, 0.902640581130981445, 0.904289186000823975, 0.906657099723815918, 0.90915602445602417, 0.911929428577423096, 0.914739489555358887, 0.917278826236724854, 0.919809341430664062, 0.922336876392364502, 0.924774885177612305, 0.927229106426239014, 0.929629981517791748, 0.931793689727783203, 0.933858096599578857, 0.935936927795410156, 0.937923610210418701, 0.939899623394012451, 0.941795110702514648, 0.94338834285736084, 0.944901943206787109, 0.946352601051330566, 0.947656869888305664, 0.948895692825317383, 0.949985265731811523, 0.951070845127105713, 0.952264308929443359, 0.953496396541595459, 0.954798281192779541, 0.956089377403259277, 0.957247912883758545, 0.958406567573547363, 0.959601342678070068, 0.960812687873840332, 0.962037324905395508, 0.96324455738067627, 0.964449286460876465, 0.965556502342224121, 0.966598570346832275, 0.96766430139541626, 0.968780219554901123, 0.96981734037399292, 0.97083282470703125, 0.971868753433227539, 0.972732424736022949, 0.973417282104492188, 0.974186241626739502, 0.975011110305786133, 0.975501656532287598, 0.975629746913909912, 0.975818634033203125, 0.97612154483795166, 0.976591110229492188, 0.977242410182952881, 0.977934122085571289, 0.978687942028045654, 0.979599177837371826, 0.980415821075439453, 0.98108983039855957, 0.981708824634552002, 0.982304513454437256, 0.983031153678894043, 0.983699440956115723, 0.984281539916992188, 0.98474353551864624, 0.985191524028778076, 0.985809862613677979, 0.986422479152679443, 0.987090587615966797, 0.987090587615966797, 0.987090587615966797, 0.987540006637573242, 0.98766624927520752, 0.987934529781341553, 0.9882773756980896, 0.988560140132904053, 0.988560140132904053, 0.988560140132904053, 0.988815903663635254, 0.989153802394866943, 0.9896811842918396, 0.990119040012359619, 0.990373492240905762, 0.990660727024078369, 0.99100184440612793, 0.991356253623962402, 0.99164426326751709, 0.991922676563262939, 0.99219810962677002, 0.992458224296569824, 0.992749512195587158, 0.993005573749542236, 0.993207097053527832, 0.993484258651733398, 0.993782222270965576, 0.993948578834533691, 0.994018435478210449, 0.994054079055786133, 0.99413985013961792, 0.99425119161605835, 0.994305551052093506, 0.994415879249572754, 0.994521617889404297, 0.994665741920471191, 0.994940817356109619, 0.995132565498352051, 0.995325326919555664, 0.995496392250061035, 0.995625734329223633, 0.99576270580291748, 0.995913088321685791, 0.996042490005493164, 0.996149122714996338, 0.996269762516021729, 0.996388733386993408, 0.996504247188568115, 0.996629297733306885, 0.996762931346893311, 0.996816694736480713, 0.996892571449279785, 0.996951162815093994, 0.997021198272705078, 0.997129619121551514, 0.99718785285949707, 0.997242867946624756, 0.99733048677444458, 0.99738001823425293, 0.997426927089691162, 0.997532367706298828, 0.997609376907348633, 0.997666418552398682, 0.997750699520111084, 0.997840583324432373, 0.9979095458984375, 0.997961640357971191, 0.998005270957946777, 0.998042404651641846, 0.998110175132751465, 0.998163521289825439, 0.998216390609741211, 0.998254776000976562, 0.998304128646850586, 0.99835437536239624, 0.998392462730407715, 0.998451888561248779, 0.998489439487457275, 0.998525381088256836, 0.998557329177856445, 0.998608291149139404, 0.998665690422058105, 0.99869006872177124, 0.998734116554260254, 0.998784303665161133, 0.998809814453125, 0.998853564262390137, 0.998892009258270264, 0.998901247978210449, 0.998938977718353271, 0.998975753784179688, 0.999009370803833008, 0.999044179916381836, 0.999062597751617432, 0.999079227447509766, 0.999106109142303467, 0.999154865741729736, 0.999179422855377197, 0.999185383319854736, 0.999194204807281494, 0.999234616756439209, 0.999273955821990967, 0.999284446239471436, 0.999313473701477051, 0.999335050582885742, 0.999343752861022949, 0.999361515045166016, 0.99938434362411499, 0.999400973320007324, 0.999406218528747559, 0.999408483505249023, 0.999433279037475586, 0.999466300010681152, 0.999491333961486816, 0.99950098991394043, 0.999509096145629883, 0.999512374401092529, 0.999526143074035645, 0.999547421932220459, 0.999568462371826172, 0.999588906764984131, 0.999601483345031738, 0.999601662158966064, 0.999601662158966064, 0.999616384506225586, 0.999627888202667236, 0.999635457992553711, 0.999635457992553711, 0.999635457992553711, 0.999645113945007324, 0.99967879056930542, 0.9996681809425354, 0.999707579612731934, 0.999707520008087158, 0.999817252159118652, 0.999717414379119873, 0.999703705310821533, 0.999775230884552002, 0.999872446060180664, 0.999775230884552002, 0.999726176261901855, 0.999775230884552002, 0.999775230884552002, 0.999808967113494873, 0.999765396118164062, 0.999808967113494873, 0.999819517135620117, 0.999837994575500488, 0.9998282790184021, 0.999836385250091553, 0.999838292598724365, 0.999838292598724365, 0.999836385250091553, 0.999838292598724365, 0.99984663724899292, 0.999855399131774902, 0.999855399131774902, 0.999855399131774902, 0.999858558177947998, 0.999863207340240479, 0.999867558479309082, 0.99986797571182251, 0.99986797571182251, 0.999877035617828369, 0.999887049198150635, 0.9998893141746521, 0.999893724918365479, 0.999895930290222168, 0.999899566173553467, 0.999899566173553467, 0.999899566173553467, 0.999902784824371338, 0.999905824661254883, 0.999905884265899658, 0.999902725219726562, 0.999908328056335449, 0.999916017055511475, 0.99992293119430542, 0.999916017055511475, 0.99992293119430542, 0.999927639961242676, 0.999931752681732178, 0.999928712844848633, 0.999931871891021729, 0.999936819076538086, 0.999940216541290283, 0.999936759471893311, 0.999940216541290283, 0.999942004680633545, 0.99994349479675293, 0.99994349479675293, 0.999943435192108154, 0.99994581937789917, 0.999950051307678223, 0.999946296215057373, 0.999948859214782715, 0.999955356121063232, 0.999959290027618408, 0.99995797872543335, 0.999958574771881104, 0.99996030330657959, 0.99996107816696167, 0.99996030330657959, 0.99996107816696167, 0.999962270259857178, 0.999963760375976562, 0.999962270259857178, 0.999963879585266113, 0.999964654445648193, 0.99996870756149292, 0.999964654445648193, 0.99996870756149292, 0.999972939491271973, 0.9999733567237854, 0.999972939491271973, 0.999972939491271973, 0.999974429607391357, 0.999974429607391357, 0.999973297119140625, 0.999974429607391357, 0.999975800514221191, 0.999975800514221191, 0.999974429607391357, 0.999974429607391357, 0.999980270862579346, 0.999979197978973389, 0.999969661235809326, 0.999975502490997314, 0.999986588954925537, 0.999982833862304688, 0.999982833862304688, 0.999984502792358398, 0.999989926815032959, 0.999984502792358398, 0.999984502792358398, 0.999989926815032959, 0.999989926815032959, 0.999984502792358398, 0.99998629093170166, 0.999991774559020996, 0.999986350536346436, 0.999986112117767334, 0.999987244606018066, 0.999990582466125488, 0.999986171722412109, 0.999982833862304688, 0.999986171722412109, 0.999986171722412109, 0.999982774257659912, 0.999982774257659912, 0.999986171722412109, 0.999986171722412109, 0.999986171722412109, 0.999993801116943359, 0.999991297721862793, 0.999989748001098633, 0.999989748001098633, 1.00000691413879395, 1.00002408027648926, 1.0000464916229248, 1.00007331371307373, 1.00007331371307373, 1.00007963180541992, 1.00006258487701416, 1.00006258487701416, 1.00006258487701416, 1.00005614757537842, 1.00002670288085938, 1.00000417232513428, 1.00000417232513428, 0.999980151653289795, 0.999980151653289795, 0.999980151653289795, 1.00000298023223877, 1.00000298023223877, 0.999997735023498535, 0.999997079372406006, 1.00000166893005371, 0.999992966651916504, 0.999992966651916504, 0.999997377395629883, 0.999997377395629883, 0.999997377395629883, 0.999997377395629883, 0.999997377395629883, 0.999997377395629883, 0.999997377395629883, 0.999998152256011963, 0.999998152256011963, 0.999998986721038818, 0.99999922513961792, 0.99999922513961792, 0.999996364116668701, 0.999996364116668701, 0.999996483325958252, 0.999996483325958252, 0.999996483325958252, 0.999995529651641846, 0.999995529651641846, 0.999995529651641846, 0.999995529651641846, 0.999995529651641846, 0.999996840953826904, 1.00000011920928955, 0.999999940395355225, 0.999999165534973145, 0.999999165534973145, 1.00000345706939697, 1.00000345706939697, 1.00000131130218506, 0.999999046325683594, 0.999999105930328369, 0.999999105930328369, 0.999999105930328369, 0.999999105930328369, 0.999999463558197021, 0.999999463558197021, 0.999998509883880615, 0.999998509883880615, 0.999998509883880615, 0.999998509883880615, 0.999997437000274658, 0.999997437000274658, 0.999997437000274658, 0.999997437000274658, 0.999997317790985107, 0.999997317790985107, 0.999997973442077637, 0.999999701976776123, 0.999999701976776123, 0.999999701976776123, 0.999999701976776123, 0.999999701976776123, 0.999998629093170166, 0.999998629093170166, 0.999999701976776123, 0.999997973442077637, 0.999996423721313477, 0.999996423721313477, 0.999996423721313477, 0.999996423721313477, 0.999996960163116455, 0.999996840953826904, 0.999998748302459717, 0.999999642372131348, 0.999998748302459717, 0.999998748302459717, 0.999999642372131348, 0.999999642372131348, 0.999998748302459717, 0.999999642372131348, 1.00000274181365967, 1.00000190734863281, 1.00000548362731934, 1.00000548362731934, 1.00000548362731934, 1.00000548362731934, 1.00000190734863281, 0.999998927116394043, 0.999998927116394043, 0.999998927116394043, 0.99999845027923584, 0.999998927116394043, 0.999998927116394043, 0.99999845027923584, 0.999998927116394043, 1.00000083446502686, 1.00000083446502686, 1.00000452995300293, 1.00000846385955811, 1.00000452995300293, 1.00000452995300293, 1.00000452995300293, 0.99999624490737915, 1.00000953674316406, 1.00000059604644775, 0.999987185001373291, 0.99999535083770752, 0.99999535083770752, 0.999987185001373291, 0.99999535083770752, 1.0000075101852417, 0.99999535083770752, 1.0000075101852417, 1.00001108646392822, 1.00001108646392822, 1.00002598762512207, 1.00002598762512207, 0.999991059303283691, 1.00004124641418457, 1.00002336502075195, 0.999994516372680664, 1.00000619888305664, 0.999996006488800049, 0.999996006488800049, 0.999996006488800049, 0.999996006488800049, 1.00000476837158203, 1.00000476837158203, 1.00000476837158203, 1.00000476837158203, 1.00000476837158203, 1.0000077486038208, 1.00001251697540283, 1.00000631809234619, 1.00000631809234619, 1.00000202655792236, 1.00000095367431641, 1.00000429153442383, 1.00000095367431641, 1.00000095367431641, 1.00000250339508057, 1.00000095367431641, 1.00000095367431641, 1.00000095367431641, 1.00000095367431641, 1.00000250339508057, 1.00000333786010742, 1.00000166893005371, 1.00000333786010742, 1.00000333786010742, 1.00000166893005371, 1.00000190734863281, 1.00000107288360596, 1.00000190734863281, 1.00000190734863281, 1.00000107288360596, 1.00000107288360596, 1.00000107288360596, 0.999999046325683594, 0.999999046325683594, 0.999999046325683594, 0.999996602535247803, 0.999996602535247803, 0.999993503093719482, 0.999991357326507568, 0.999993801116943359, 0.999993801116943359, 0.999995112419128418, 0.999998807907104492, 0.999997854232788086, 0.999998807907104492, 0.999998807907104492, 0.999998807907104492, 0.999999642372131348, 0.999999701976776123, 0.999999642372131348, 0.999999463558197021, 0.999998748302459717, 0.999999403953552246, 0.999999880790710449, 0.999997496604919434, 1.00000131130218506, 0.999998688697814941, 0.999998629093170166, 0.999999046325683594, 0.999998569488525391, 0.999998986721038818, 0.999998986721038818, 0.999998986721038818, 0.99999922513961792, 0.99999922513961792, 0.99999922513961792, 0.999999046325683594, 0.999998569488525391, 0.999999642372131348, 0.999996662139892578, 0.999991774559020996, 0.999998331069946289, 0.999993264675140381, 0.999993264675140381, 0.999997377395629883, 0.999997377395629883, 0.999998331069946289, 0.999998331069946289, 0.999998331069946289, 0.999998331069946289, 0.999998331069946289, 0.999998331069946289, 0.999998331069946289, 0.999998331069946289, 0.999999344348907471, 0.999995589256286621, 1.00000083446502686, 1.0000079870223999, 1.00000083446502686, 1.0000079870223999, 1.0000079870223999, 1.0000079870223999, 1.0000079870223999, 1.0000079870223999, 1.00000286102294922, 1.00000286102294922, 1.00000286102294922, 0.999994397163391113, 1.00000035762786865, 1.00000035762786865, 0.999997437000274658, 0.999997437000274658, 1.00000715255737305, 0.999997437000274658, 1.00000607967376709, 1.00000607967376709, 0.999998986721038818, 1.00000119209289551, 1.00000393390655518, 1.00000381469726562, 1.00000393390655518, 1.00000381469726562, 0.999996781349182129, 1.00000381469726562, 1.00000548362731934, 1.00000548362731934, 1.00001239776611328, 1.00001239776611328, 1.00004422664642334, 1.00003182888031006, 0.999997317790985107, 0.999997317790985107, 0.999986708164215088, 0.999958217144012451, 0.999958217144012451, 1.00000894069671631, 0.999978423118591309, 1.00000894069671631, 0.999978423118591309, 1.00000894069671631, 1.00001621246337891, 1.00000631809234619, 1.00001621246337891, 1.00000631809234619, 0.999993383884429932, 1.00000059604644775, 1.00000059604644775, 0.999993026256561279, 1.00000464916229248, 0.999999523162841797, 0.999994575977325439, 0.999999523162841797, 0.999994575977325439, 0.999994933605194092, 0.999999523162841797, 0.999994933605194092, 0.999999523162841797, 0.999997973442077637, 0.999993383884429932, 0.999993383884429932, 0.999993383884429932, 0.999992132186889648, 0.999994158744812012, 0.999994158744812012, 0.999994158744812012, 0.999996423721313477, 0.999994158744812012, 0.999995172023773193, 0.999997854232788086, 0.999995172023773193, 0.999997854232788086, 0.999997794628143311, 0.999997258186340332, 0.999997794628143311, 0.99999767541885376, 0.99999767541885376, 1.00000107288360596, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 0.99999624490737915, 0.999998748302459717, 1.00000143051147461, 0.999998033046722412, 1.00000143051147461, 0.999998033046722412, 0.999998033046722412, 1.00000143051147461, 0.999998033046722412, 1.00000143051147461, 1.00000143051147461, 0.999998569488525391, 0.999999821186065674, 0.999999821186065674, 0.999999821186065674, 1.0000004768371582, 0.999997079372406006, 0.999997079372406006, 0.999999761581420898, 0.999997079372406006, 0.999999761581420898, 0.999999761581420898, 0.999999761581420898, 1.00000226497650146, 0.999999761581420898, 1.00000226497650146, 1.00000226497650146, 1.00000476837158203, 1.00000953674316406, 1.00000953674316406, 1.00000953674316406, 1.00000953674316406, 1.00000166893005371, 1.00000202655792236, 1.00000202655792236, 0.999995708465576172, 1.00000202655792236, 0.999995708465576172, 0.999995708465576172, 0.999995708465576172, 0.999995708465576172, 1.00000202655792236, 1.00000190734863281, 1.00000429153442383, 1.00000429153442383, 1.00000965595245361, 1.00000965595245361, 1.00000965595245361, 1.00000965595245361, 1.00000965595245361, 1.00000381469726562, 1.00000381469726562, 1.00000381469726562, 1.00000381469726562, 1.00000441074371338, 1.00000178813934326, 1.00000178813934326, 1.00000178813934326, 1.00000178813934326, 0.999993324279785156, 0.999983489513397217, 0.999983429908752441, 0.999981999397277832, 0.999981999397277832, 0.999975919723510742, 0.99997711181640625, 0.99997711181640625, 0.999977171421051025, 0.99997711181640625, 0.999990224838256836, 0.999990224838256836, 0.999990224838256836, 0.999990224838256836, 0.999990224838256836, 0.99997711181640625, 1.00000429153442383, 0.999956071376800537, 1.00000429153442383, 0.999903500080108643, 1.00004065036773682, 1.00027680397033691, 1.00007390975952148, 1.00027680397033691, 1.00007724761962891, 1.00020837783813477, 1.00007724761962891, 1.00007724761962891, 1.00006318092346191, 1.00006318092346191, 1.00006318092346191, 0.99997633695602417, 0.999986350536346436, 0.999986350536346436, 0.999986350536346436, 0.999986350536346436, 0.999960422515869141, 0.99999690055847168, 0.999992012977600098, 0.999992012977600098, 0.999992012977600098, 0.999992012977600098, 1.00001847743988037, 0.999983072280883789, 1.00001442432403564, 1.00001442432403564, 1.00001442432403564, 1.00001442432403564, 0.999983906745910645, 1.00002205371856689, 0.99999845027923584, 0.999999940395355225, 0.999999940395355225, 0.999999940395355225, 1.00000536441802979, 0.999983131885528564, 0.99999237060546875, 0.999992430210113525, 0.99999237060546875, 0.99999237060546875, 0.99999237060546875, 1.00000560283660889, 0.999989151954650879, 1.00000560283660889, 1.00000560283660889, 1.00000560283660889, 1.00001323223114014, 0.999990284442901611, 1.00001645088195801, 0.999994218349456787, 1.00000977516174316, 1.00000977516174316, 1.00000977516174316, 1.00001072883605957, 0.999988555908203125, 1.00001192092895508, 0.999988555908203125, 1.00001192092895508, 0.999991416931152344, 0.999994158744812012, 1.00000202655792236, 0.999981522560119629, 1.00001895427703857, 0.999981522560119629, 1.00001895427703857, 0.999981522560119629, 1.00000143051147461, 0.999999165534973145, 0.999999165534973145, 1.00001645088195801, 0.999984562397003174, 1.00001645088195801, 0.999984562397003174, 1.00001645088195801, 0.999984562397003174, 1.00001645088195801, 1.00001418590545654, 0.999984622001647949, 1.00002861022949219, 0.999974310398101807, 1.00002861022949219, 0.999974370002746582, 1.00002861022949219, 0.999974310398101807, 1.00002861022949219, 1.00000417232513428, 0.999969244003295898, 1.00002133846282959, 0.999969244003295898, 1.00002133846282959, 0.999969244003295898, 1.00002133846282959, 0.999969244003295898, 1.00002133846282959, 0.999969244003295898, 0.999982893466949463, 1.00003385543823242, 0.999958574771881104, 1.00003385543823242, 0.999958574771881104, 1.00003385543823242, 0.999958574771881104, 1.00003385543823242, 0.999958515167236328, 1.00003385543823242, 0.999964892864227295, 1.00003015995025635, 1.00003635883331299, 0.999932825565338135, 1.00006270408630371, 0.999932825565338135, 1.00006270408630371, 0.999932825565338135, 1.00006270408630371, 0.999932825565338135, 1.00006270408630371, 0.999932825565338135, 1.00006270408630371, 0.999898672103881836, 1.00004565715789795, 0.999929428100585938, 1.00005674362182617, 1.00015103816986084, 1.00024783611297607, 1.00061690807342529, 1.00067543983459473, 1.00067543983459473, 1.00068676471710205, 1.00068676471710205, 1.00068879127502441, 1.00068879127502441, 1.00085878372192383, 1.00085878372192383, 1.00067174434661865, 1.00008153915405273, 0.999927818775177002, 1.00011086463928223, 0.999959468841552734, 1.00011646747589111, 0.999943196773529053, 1.0000607967376709, 0.999943196773529053, 1.0000607967376709, 0.999943196773529053, 1.0000607967376709, 0.999943196773529053, 1.0000607967376709, 0.999943196773529053, 1.0000607967376709, 0.999918758869171143, 1.00001716613769531, 0.999940872192382812, 1.00002121925354004, 0.999996602535247803, 1.00004327297210693, 1.00002157688140869, 1.00004243850708008, 1.00001132488250732, 0.999997138977050781, 1.00000298023223877, 0.999971389770507812, 1.00000298023223877, 0.999983608722686768, 1.00000643730163574, 0.99998939037322998, 1.0000079870223999, 0.999990284442901611, 1.00001156330108643, 0.999993085861206055, 1.00001704692840576, 0.999992430210113525, 1.00001788139343262, 0.999989807605743408, 1.00001144409179688, 0.999987781047821045, 1.00000488758087158, 0.999994635581970215, 1.00000238418579102, 1.0000007152557373, 1.00000286102294922, 0.999998748302459717, 1.00000274181365967, 0.999992668628692627, 1.00000500679016113, 0.999991059303283691, 1.00000977516174316, 0.999990940093994141, 1.00000929832458496, 0.999992668628692627, 1.00000321865081787, 0.999995708465576172, 0.999997973442077637, 0.999997973442077637, 0.999997973442077637, 0.999997973442077637, 0.999997973442077637, 0.999997973442077637, 0.999997973442077637, 0.999997973442077637, 0.999997973442077637, 1.00000429153442383, 0.999995708465576172, 1.00000929832458496, 1.00000488758087158, 0.999991893768310547, 1.0000070333480835, 0.999993026256561279, 1.00000226497650146, 0.999994993209838867, 0.999994933605194092, 0.999994993209838867, 0.999994993209838867, 0.999994993209838867, 0.999994993209838867, 0.999994933605194092, 0.999994993209838867, 1.00000333786010742, 0.999994099140167236, 1.00001096725463867, 0.999987959861755371, 1.00001144409179688, 0.999985039234161377, 1.00001144409179688, 1.00001180171966553, 0.99998176097869873, 1.00001811981201172, 0.99998551607131958, 1.0000072717666626, 0.99998551607131958, 1.0000072717666626, 0.99998551607131958, 1.0000072717666626, 0.99998551607131958, 1.0000072717666626, 0.99998551607131958, 1.0000072717666626, 0.999999403953552246, 0.999999284744262695, 1.00002503395080566, 0.999999284744262695, 1.000022292137146, 0.999999284744262695, 1.00000154972076416, 1.00000154972076416, 1.00000154972076416, 1.00000154972076416, 1.00000154972076416, 1.00001382827758789, 0.999972105026245117, 1.00001382827758789, 0.999972045421600342, 1.00003218650817871, 1.00001108646392822, 1.00010049343109131, 1.00000500679016113, 0.999911487102508545, 0.999784171581268311, 0.999784171581268311, 0.999927520751953125, 0.999927520751953125, 0.999945104122161865, 0.999945104122161865, 0.999972820281982422, 0.999972820281982422, 1.00000238418579102, 0.99999547004699707, 1.00000393390655518, 0.999984025955200195, 1.00000560283660889, 0.99999767541885376, 1.00000560283660889, 0.99999767541885376, 1.00000560283660889, 0.99999767541885376, 0.99999845027923584, 0.999998509883880615, 0.99999845027923584, 0.99999845027923584, 0.999994337558746338, 1.00000667572021484, 0.999991476535797119, 1.00000667572021484, 0.999991476535797119, 1.00001561641693115, 0.99997788667678833, 1.00001966953277588, 0.999969363212585449, 1.0000302791595459, 1.00000846385955811, 0.999968588352203369, 1.00003433227539062, 0.999968647956848145, 1.00002110004425049, 0.999986827373504639, 1.00002110004425049, 0.999986827373504639, 1.00002110004425049, 1.00000202655792236, 1.00000202655792236, 1.00000202655792236, 1.00000202655792236, 1.00000202655792236, 0.999982476234436035, 1.00001442432403564, 0.999982476234436035, 1.00001442432403564, 0.999982476234436035, 1.00000965595245361, 1.00001955032348633, 0.9999808669090271, 1.00001955032348633, 0.9999808669090271, 1.00001955032348633, 0.9999808669090271, 1.00001955032348633, 0.9999808669090271, 1.00001025199890137, 0.999998569488525391, 0.999986886978149414, 1.00001633167266846, 0.999983370304107666, 1.00001633167266846, 0.999983370304107666, 1.00001633167266846, 0.999992787837982178, 0.999997973442077637, 0.999997973442077637, 0.999986171722412109, 1.00001394748687744, 0.999986171722412109, 1.00001394748687744, 0.999986171722412109, 1.00000548362731934, 0.999998986721038818, 0.999998986721038818, 1.00001311302185059, 0.999987602233886719, 1.00001311302185059, 0.999987602233886719, 1.00001311302185059, 0.999996483325958252, 1.00000691413879395, 0.999999821186065674, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 1.00000536441802979, 1.00000274181365967, 0.999980747699737549, 1.0000154972076416, 0.999980747699737549, 1.0000154972076416, 0.999989092350006104, 0.999989092350006104, 0.999989092350006104, 0.999989092350006104, 0.999989092350006104, 0.999981939792633057, 1.00001668930053711, 0.999975144863128662, 1.00000679492950439, 1.00000679492950439, 0.99999159574508667, 1.00003564357757568, 0.999997377395629883, 1.00003194808959961, 1.0000230073928833, 1.0000230073928833, 1.00000584125518799, 1.0000230073928833, 1.00000584125518799, 1.00000584125518799, 1.00000584125518799, 1.00000584125518799, 1.00000584125518799, 1.00000584125518799, 0.999955415725708008, 1.00001204013824463, 0.999960243701934814, 1.00020718574523926, 1.00023376941680908, 0.999917864799499512, 0.999987959861755371, 0.999987900257110596, 0.999987959861755371, 0.999987959861755371, 0.999987959861755371, 0.999987959861755371, 0.999987900257110596, 0.999987959861755371, 0.999976694583892822, 1.00005459785461426, 1.00004339218139648, 0.999980688095092773, 1.00003206729888916, 0.99999159574508667, 1.00001311302185059, 1.00001311302185059, 1.00001311302185059, 1.00001132488250732, 1.00001132488250732, 1.00000619888305664, 1.00000619888305664, 1.00000619888305664, 0.999998033046722412, 1.00000619888305664, 0.999998033046722412, 0.999998033046722412, 0.999998033046722412, 0.999998033046722412, 0.999998033046722412, 1.00000512599945068, 0.999986112117767334, 0.999991774559020996, 1.00000643730163574, 0.999999403953552246, 1.00000643730163574, 0.999999403953552246, 1.00000643730163574, 0.999999403953552246, 1.00000643730163574, 0.999999403953552246, 1.00000643730163574, 0.999999940395355225, 0.99999082088470459, 1.0000007152557373, 0.999977409839630127, 1.00002074241638184, 0.999977409839630127, 1.00000107288360596, 0.999994575977325439, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.00000286102294922, 1.00000059604644775, 1.00000274181365967, 1.00000059604644775, 1.00000286102294922, 1.00000059604644775, 1.00000286102294922, 1.00000858306884766, 0.999997198581695557, 1.0000145435333252, 0.999993205070495605, 1.00001204013824463, 1.00000417232513428, 1.00000965595245361, 1.00000202655792236, 1.00000202655792236, 1.00000202655792236, 0.999996542930603027, 1.00000202655792236, 0.999996542930603027, 1.00000202655792236, 0.999996542930603027, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.00000977516174316, 0.999997079372406006, 1.00000429153442383, 1.00000178813934326, 1.00000429153442383, 1.00000178813934326, 1.00000429153442383, 1.00000286102294922, 1.00000059604644775, 1.00000286102294922, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 0.999995410442352295, 0.999995410442352295, 0.999995172023773193, 0.999995172023773193, 0.999990403652191162, 0.999995291233062744, 0.999995291233062744, 0.999995291233062744, 0.999995291233062744, 0.999995291233062744, 1.00000548362731934, 0.999993801116943359, 1.00000548362731934, 1.00000309944152832, 1.00000309944152832, 1.00000834465026855, 1.00000536441802979, 1.000008225440979, 1.000008225440979, 1.000008225440979, 1.000008225440979, 1.00000905990600586, 1.000008225440979, 1.00000786781311035, 1.00000905990600586, 1.00001227855682373, 1.00001227855682373, 1.00004565715789795, 1.00004136562347412, 1.00007724761962891, 1.00004136562347412, 1.00004136562347412, 1.00007724761962891, 1.00007724761962891, 1.00010240077972412, 1.00010454654693604, 1.00010454654693604, 1.00001275539398193, 1.00005590915679932, 1.00004363059997559, 1.00004363059997559, 1.00004363059997559, 0.999988257884979248, 1.00004363059997559, 0.999988257884979248, 0.999982357025146484, 1.00002551078796387, 1.00002551078796387, 1.00001978874206543, 1.00001430511474609, 1.00001430511474609, 1.00000309944152832, 1.00001263618469238, 1.00000309944152832, 1.00000643730163574, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 0.999998867511749268, 1.00000846385955811, 0.999998867511749268, 1.00000846385955811, 1.0000002384185791, 1.00000894069671631, 1.00000202655792236, 1.00000202655792236, 1.00000202655792236, 0.999998152256011963, 1.00000202655792236, 0.999998152256011963, 1.00000202655792236, 0.999998152256011963, 1.00000202655792236, 0.999998152256011963, 1.00000214576721191, 1.00000548362731934, 0.99999690055847168, 1.00001001358032227, 0.999995708465576172, 1.00000357627868652, 1.00000035762786865, 1.00000321865081787, 1.00000238418579102, 1.00000238418579102, 1.00000238418579102, 0.999999523162841797, 1.00000238418579102, 0.999999523162841797, 1.00000238418579102, 0.999999523162841797, 1.00000238418579102, 0.99999845027923584, 0.999994099140167236, 1.0000004768371582, 0.999993681907653809, 0.999997198581695557, 0.999996364116668701, 0.99999922513961792, 0.99999922513961792, 0.99999922513961792, 0.99999922513961792, 0.99999922513961792, 1.0000004768371582, 0.99999922513961792, 1.0000004768371582, 0.999999642372131348, 1.00000202655792236, 0.999999284744262695, 0.999997496604919434, 1.00000035762786865, 0.999996960163116455, 0.99999767541885376, 0.99999767541885376, 0.999998688697814941, 0.999998688697814941, 0.999998867511749268, 0.999998867511749268, 0.999998867511749268, 1.0000002384185791, 0.999998867511749268, 1.0000002384185791, 1.00000011920928955, 0.999999761581420898, 0.999999761581420898, 0.999997377395629883, 0.999999463558197021, 0.999996006488800049, 0.999999940395355225, 0.999998152256011963, 1.00000035762786865, 0.999998152256011963, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 0.999999821186065674, 1.00000107288360596, 1.00000441074371338, 1.00000107288360596, 1.00000548362731934, 1.00000107288360596, 1.00000321865081787, 1.00000953674316406, 1.00000953674316406, 0.999998748302459717, 1.00000953674316406, 1.00000953674316406, 0.999998748302459717, 1.00000953674316406, 0.999998748302459717, 0.999998033046722412, 1.00000452995300293, 0.999985754489898682, 0.999998152256011963, 0.999976158142089844, 0.999982297420501709, 0.999924302101135254, 0.999987781047821045, 0.999933838844299316, 0.999999344348907471, 1.00002884864807129, 0.999998867511749268, 1.00000655651092529, 1.00000417232513428, 1.00000417232513428, 1.00000417232513428, 1.00000417232513428, 1.00000417232513428, 1.00001025199890137, 1.00000417232513428, 1.00000417232513428, 1.00000417232513428, 1.0000072717666626, 1.00000059604644775, 1.00000941753387451, 1.00000059604644775, 1.00000941753387451, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.00000202655792236, 1.00000667572021484, 0.999997735023498535, 1.00000667572021484, 0.999999701976776123, 1.00000441074371338, 1.0000002384185791, 1.00000143051147461, 1.00000035762786865, 1.00000107288360596, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 0.999999940395355225, 0.999999940395355225, 0.999999344348907471, 1.00000011920928955, 0.999998748302459717, 1.00000083446502686, 0.999998748302459717, 1.00000083446502686, 0.999999940395355225, 0.999999940395355225, 0.999999940395355225, 0.999999642372131348, 1.00000166893005371, 0.999999642372131348, 1.00000190734863281, 1.00000190734863281, 1.00000190734863281, 1.00000190734863281, 1.00000190734863281, 1.00000131130218506, 1.00000131130218506, 1.00000178813934326, 0.999999880790710449, 1.00000178813934326, 0.999999880790710449, 0.999999821186065674, 0.999999821186065674, 0.999999821186065674, 1.00000166893005371, 1.0000002384185791, 1.00000131130218506, 1.00000131130218506, 1.00000131130218506, 1.00000131130218506, 1.00000131130218506, 0.999999642372131348, 1.00000107288360596, 1.00000059604644775, 1.00000059604644775, 1.0000007152557373, 1.0000007152557373, 1.00000035762786865, 1.00000035762786865, 0.999999940395355225, 1.00000035762786865, 1.00000035762786865, 0.999999940395355225, 0.999999940395355225, 0.999999940395355225, 0.999999940395355225, 1.00000011920928955, 1.00000011920928955, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.00000083446502686, 1.00000083446502686, 1.00000083446502686, 0.999999761581420898, 0.999995768070220947, 0.999998569488525391, 0.999995529651641846, 0.999995529651641846, 0.999995529651641846, 0.999995291233062744, 0.999995291233062744, 0.999998986721038818, 0.999998986721038818, 1.0000002384185791, 1.0000002384185791, 1.0000002384185791, 1.0000002384185791, 1.00000596046447754, 1.0000002384185791, 1.00000596046447754, 1.0000002384185791, 0.999990642070770264, 0.99999767541885376, 0.999979972839355469, 0.99999767541885376, 0.999979972839355469, 1.00000596046447754, 1.00000596046447754, 1.00000596046447754, 1.00000596046447754, 1.00000596046447754, 1.00003337860107422, 1.00000429153442383, 1.00002622604370117, 1.00000345706939697, 1.00001716613769531, 1.0000079870223999, 0.999996066093444824, 0.999997854232788086, 0.999997854232788086, 0.999997854232788086, 0.999997854232788086, 0.999997854232788086, 0.999997854232788086, 1.00000154972076416, 0.999997854232788086, 0.999998033046722412, 0.999998033046722412, 1.00000250339508057, 0.99999624490737915, 1.00000250339508057, 0.999998688697814941, 0.999999165534973145, 0.999999284744262695, 0.999997317790985107, 1, 0.999997317790985107, 1, 0.999997317790985107, 0.99999845027923584, 0.99999845027923584, 0.99999845027923584, 1.0000004768371582, 0.99999845027923584, 1.00000166893005371, 0.999997913837432861, 1.00000166893005371, 0.999997913837432861, 0.999998629093170166, 1.00000119209289551, 0.999998867511749268, 0.999998867511749268, 0.999998867511749268, 0.999998867511749268, 0.999998867511749268, 0.999998867511749268, 0.999998867511749268, 1, 1.00000119209289551, 1, 1.00000095367431641, 1.00000095367431641, 1.00000095367431641, 1.00000095367431641, 0.999999701976776123, 1.00000095367431641, 1.00000011920928955, 0.99999922513961792, 0.99999922513961792, 0.99999922513961792, 0.99999922513961792, 0.99999922513961792, 0.99999922513961792, 1.00000011920928955, 1.00000107288360596, 1.00000011920928955, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.00000011920928955, 1.0000004768371582, 1.00000011920928955, 1.00000011920928955, 0.999999880790710449, 0.999999880790710449, 0.999999880790710449, 0.999999880790710449, 0.999999880790710449, 0.999998688697814941, 1.00000011920928955, 0.999998688697814941, 1.00000011920928955, 0.999998688697814941, 1, 1.00000035762786865, 0.999997437000274658, 1.00000107288360596, 0.999997437000274658, 1.00000107288360596, 0.999996960163116455, 1.00000107288360596, 0.999996960163116455, 1.00000107288360596, 0.999996960163116455, 0.999998152256011963, 1.0000002384185791, 0.999998986721038818, 1.0000002384185791, 0.999998986721038818, 1.0000002384185791, 0.999998986721038818, 1.0000002384185791, 0.999998986721038818, 1.0000002384185791, 0.999998986721038818, 1.00000178813934326, 1.0000004768371582, 1.0000004768371582, 1.00000619888305664, 1.00000190734863281, 1.00000619888305664, 1.00000190734863281, 1.00000619888305664, 1.00000190734863281, 1.000008225440979, 1.00000452995300293, 1.00001120567321777, 1.00000452995300293, 1.00001645088195801, 0.999992251396179199, 0.999997258186340332, 0.999997258186340332, 0.999988675117492676, 1.00001025199890137, 1.00001025199890137, 1.00001025199890137, 1.00001025199890137, 1.00001025199890137, 1.00000596046447754, 1.00000596046447754, 1.00000596046447754, 1.00000596046447754, 1.00000596046447754, 1.00000405311584473, 1.00000405311584473, 1.00000226497650146, 1.00000226497650146, 1.00000226497650146, 1.00000226497650146, 1.00000226497650146, 1.00000512599945068, 1.00000154972076416, 0.999997138977050781, 0.999999344348907471, 0.999999344348907471, 0.999999344348907471, 0.999999344348907471, 0.999999344348907471, 0.999999344348907471, 0.999999344348907471, 0.999999344348907471, 1, 0.9999961256980896, 0.999999821186065674, 0.999998509883880615, 1.00000011920928955, 1.00000011920928955, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.0000004768371582, 1.00000119209289551, 1.00000119209289551, 0.999999344348907471, 0.999999463558197021, 0.999998211860656738, 0.999999284744262695, 0.999999284744262695, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000035762786865, 1.00000059604644775, 1.00000059604644775, 1.00000059604644775, 1.0000004768371582, 1.0000004768371582, 1.0000002384185791, 0.999999463558197021, 0.999999463558197021, 0.999999463558197021, 0.999999463558197021, 0.999999463558197021, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 1.00000011920928955, 0.999999880790710449, 0.999999880790710449, 1.0000002384185791, 1.00000119209289551, 1.00000059604644775, 1.00000059604644775, 0.999999761581420898, 0.999999761581420898, 0.999998986721038818, 0.999999642372131348, 0.99999922513961792, 1, 1, 1, 0.999999523162841797, 0.999999523162841797, 0.999999523162841797, 1.00000035762786865, 1.00000035762786865, 1.00000190734863281, 1.00000190734863281, 1.00000190734863281, 1.00000107288360596, 1.00000107288360596, 0.999998211860656738, 0.999998927116394043, 0.999995768070220947, 1.0000002384185791, 0.999999761581420898, 1.00000190734863281, 1.00000119209289551, 1.00000131130218506, 1.00000131130218506, 1.00000131130218506, 1.00000131130218506, 1.00000131130218506, 1.00000131130218506, 1.00000190734863281, 1.00000190734863281, 1.00000321865081787, 1.0000007152557373, 1.00000238418579102, 1.00000083446502686, 1.00000154972076416, 1.00000154972076416, 1.00000655651092529, 1.00000655651092529, 1.00001645088195801, 1.00001370906829834, 1.00001883506774902, 1.00001561641693115, 0.99999237060546875, 1.00001347064971924, 1.00001037120819092, 1.00001275539398193, 1.00000941753387451, 1.00000941753387451, 1.00000643730163574, 1.00000643730163574, 1.00000643730163574, 1.00000643730163574, 1.00000643730163574, 0.999997735023498535, 0.999995589256286621, 0.999995589256286621, 1, 1.00000357627868652, 1, 1.00000369548797607, 1, 1.00000226497650146, 1, 1, 0.999998152256011963, 0.999997138977050781, 0.999997138977050781, 0.9999961256980896, 0.999997138977050781, 0.99999535083770752, 0.999997138977050781, 0.99999535083770752, 0.999997138977050781, 0.99999535083770752, 0.999999105930328369, 0.999999105930328369, 1.00000011920928955, 0.999999761581420898, 0.999997854232788086, 0.999998629093170166, 0.999998390674591064, 1.00000011920928955, 1.0000002384185791, 1.0000007152557373, 1.0000007152557373, 1.0000007152557373, 1.0000007152557373, 1.0000007152557373, 1.0000007152557373, 1.0000007152557373, 1.00000190734863281, 1.00000190734863281, 1.00000250339508057, 1.00000214576721191, 1.00000357627868652, 1.00000107288360596, 0.999999821186065674, 1.00000286102294922, 1.00000226497650146, 1.00000309944152832, 1.00000298023223877, 1.00000298023223877, 1.00000298023223877, 1.00000298023223877, 1.00000298023223877, 1.00000298023223877, 1.00000298023223877, 1.00000298023223877, 1.00000143051147461, 1.00000274181365967, 1.00000083446502686, 1.0000004768371582, }; diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/liveprogWrapper.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/liveprogWrapper.c index 9f5274bf..a837db5e 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/liveprogWrapper.c +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/liveprogWrapper.c @@ -38,7 +38,8 @@ int LiveProgLoadCode(JamesDSPLib *jdsp, char *codeTextInit, char *codeTextProces pg->compileSucessfully = 0; compileContext *ctx = (compileContext*)pg->vm; NSEEL_VM_freevars(pg->vm); - NSEEL_init_string(pg->vm); + NSEEL_init_memRegion(pg->vm); + memset(ctx->ram_state, 0, sizeof(ctx->ram_state)); pg->vmFs = NSEEL_VM_regvar(pg->vm, "srate"); *pg->vmFs = jdsp->fs; pg->input1 = NSEEL_VM_regvar(pg->vm, "spl0"); @@ -153,9 +154,17 @@ void LiveProgProcess(JamesDSPLib *jdsp, size_t n) { *eel->input1 = jdsp->tmpBuffer[0][i]; *eel->input2 = jdsp->tmpBuffer[1][i]; - NSEEL_code_execute(eel->codehandleProcess); - jdsp->tmpBuffer[0][i] = (float)*eel->input1; - jdsp->tmpBuffer[1][i] = (float)*eel->input2; + NSEEL_code_execute(eel->codehandleProcess); + // Prevent broken scripts (returning NaN or inf) causing permanent audio loss + if(isinf((float)*eel->input1) || isnan((float)*eel->input1)) + jdsp->tmpBuffer[0][i] = 0; + else + jdsp->tmpBuffer[0][i] = (float)*eel->input1; + + if(isinf((float)*eel->input2) || isnan((float)*eel->input2)) + jdsp->tmpBuffer[1][i] = 0; + else + jdsp->tmpBuffer[1][i] = (float)*eel->input2; } } } diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/multimodalEQ.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/multimodalEQ.c index c4a4d926..73337233 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/multimodalEQ.c +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/multimodalEQ.c @@ -55,7 +55,11 @@ void HSHOResponse(double fs, double fc, unsigned int filterOrder, double gain, d if (G == 1.0) goto scalar_gain; GB = pow(10.0, GB / 20.0); - double gR = (G * G - GB * GB) / (GB * GB - 1); + double gR; + if (fabs(GB * GB - 1) < DBL_EPSILON) + gR = 0.0; + else + gR = (G * G - GB * GB) / (GB * GB - 1); double reci1Ord = 1.0 / filterOrder; double ratOrd = pow(gR, reci1Ord); double sDw = sin(Dw); @@ -94,11 +98,11 @@ void HSHOResponse(double fs, double fc, unsigned int filterOrder, double gain, d complexMultiplication(cplxRe[j], cplxIm[j], cplx2Re, cplx2Im, &cplxRe[j], &cplxIm[j]); } } +scalar_gain: free(sRe); free(sIm); free(s2Re); free(s2Im); -scalar_gain: for (unsigned int j = 0; j < queryPts; j++) { cplxRe[j] *= overallGain; @@ -107,13 +111,13 @@ void HSHOResponse(double fs, double fc, unsigned int filterOrder, double gain, d } unsigned int HSHOSVF(double fs, double fc, unsigned int filterOrder, double gain, double overallGainDb, float *c1, float *c2, float *d0, float *d1, float *overallGain) { + *overallGain = (float)pow(10.0, overallGainDb / 20.0); + if (fabs(gain) < 8.0 * DBL_EPSILON) + return 0; unsigned int L = filterOrder >> 1; double Dw = M_PI * (fc / fs - 0.5); double GB = pow(10.0, ((1.0 / sqrt(2.0)) * gain / 20.0)); double G = pow(10.0, gain / 20.0); - *overallGain = (float)pow(10.0, overallGainDb / 20.0); - if (G == 1.0) - return 0; double gR = (G * G - GB * GB) / (GB * GB - 1); double reci1Ord = 1.0 / filterOrder; double ratOrd = pow(gR, reci1Ord); @@ -214,7 +218,13 @@ void MultimodalEqualizerAxisInterpolation(JamesDSPLib *jdsp, int interpolationMo designFreq = freq[i]; double overallGain = i == 0 ? gains[i] : 0.0; //HSHOResponse(jdsp->fs, designFreq, jdsp->mEQ.order, dB, overallGain, nPts, dispFreq, cplxRe, cplxIm); - jdsp->mEQ.sec[i] = HSHOSVF(jdsp->fs, designFreq, jdsp->mEQ.order, dB, overallGain, jdsp->mEQ.c1 + i * jdsp->mEQ.nSec, jdsp->mEQ.c2 + i * jdsp->mEQ.nSec, jdsp->mEQ.d0 + i * jdsp->mEQ.nSec, jdsp->mEQ.d1 + i * jdsp->mEQ.nSec, &jdsp->mEQ.overallGain[i]); + if (i == 0) + jdsp->mEQ.sec[i] = HSHOSVF(jdsp->fs, designFreq, jdsp->mEQ.order, dB, overallGain, jdsp->mEQ.c1 + i * jdsp->mEQ.nSec, jdsp->mEQ.c2 + i * jdsp->mEQ.nSec, jdsp->mEQ.d0 + i * jdsp->mEQ.nSec, jdsp->mEQ.d1 + i * jdsp->mEQ.nSec, &jdsp->mEQ.overallGain); + else + { + float dummy; + jdsp->mEQ.sec[i] = HSHOSVF(jdsp->fs, designFreq, jdsp->mEQ.order, dB, overallGain, jdsp->mEQ.c1 + i * jdsp->mEQ.nSec, jdsp->mEQ.c2 + i * jdsp->mEQ.nSec, jdsp->mEQ.d0 + i * jdsp->mEQ.nSec, jdsp->mEQ.d1 + i * jdsp->mEQ.nSec, &dummy); + } //printf("nSec: %d\n", jdsp->mEQ.sec[i]); } } @@ -273,11 +283,9 @@ void MultimodalEqualizerProcess(JamesDSPLib *jdsp, size_t n) jdsp->mEQ.z2_AR[i * jdsp->mEQ.nSec + j] = jdsp->mEQ.z2_AR[i * jdsp->mEQ.nSec + j] + jdsp->mEQ.c2[i * jdsp->mEQ.nSec + j] * jdsp->mEQ.z1_AR[i * jdsp->mEQ.nSec + j]; jdsp->mEQ.z1_AR[i * jdsp->mEQ.nSec + j] = jdsp->mEQ.z1_AR[i * jdsp->mEQ.nSec + j] + jdsp->mEQ.c1[i * jdsp->mEQ.nSec + j] * y2; } - x1 *= jdsp->mEQ.overallGain[i]; - x2 *= jdsp->mEQ.overallGain[i]; } - jdsp->tmpBuffer[0][smp] = x1; - jdsp->tmpBuffer[1][smp] = x2; + jdsp->tmpBuffer[0][smp] = x1 * jdsp->mEQ.overallGain; + jdsp->tmpBuffer[1][smp] = x2 * jdsp->mEQ.overallGain; } } } diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/generalDSP/ArbFIRGen.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/generalDSP/ArbFIRGen.c index 6e99211b..2792dceb 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/generalDSP/ArbFIRGen.c +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/generalDSP/ArbFIRGen.c @@ -160,7 +160,7 @@ float *ArbitraryEqLinearPhase(ArbitraryEq *arbEq, float fs) } unsigned int InitArbitraryEq(ArbitraryEq* arbEq, int isLinearPhase) { - fhtbitReversalTbl(arbEq->mBitRev, MUL2FILTERLEN); + LLbitReversalTbl(arbEq->mBitRev, MUL2FILTERLEN); fhtsinHalfTblFloat(arbEq->mSineTab, MUL2FILTERLEN); arbEq->nodesCount = 0; if (!isLinearPhase) diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/jdspController.c b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/jdspController.c index 5e001978..b8402403 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/jdspController.c +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/jdspController.c @@ -8,6 +8,15 @@ #include "Effects/eel2/ns-eel.h" #include "jdsp_header.h" #define TAG "EffectDSPMain" + +#ifdef __ANDROID_API__ +#if __ANDROID_API__ < __ANDROID_API_J_MR2__ +double log2(double x) { + return (log(x)*1.4426950408889634); +} +#endif +#endif + // Range: 0x800000, 0x7fffff int32_t i32_from_p24_big_endian(const uint8_t *packed24) { @@ -107,20 +116,26 @@ double getProcTime(int flen, int num, double dur) free(y); return t_diff / (double)counter; } +char benchmarkEnable = 0; char benchmarkCompletionFlag = 0; double convbench_c0[MAX_BENCHMARK] = { 2.4999999e-05f,4.9999999e-05f,9.9999997e-05f,0.0002f,0.0005f,0.001f,0.0021f,0.0057f,0.0126f,0.0293f }; double convbench_c1[MAX_BENCHMARK] = { 3.1249999e-06f,6.2499998e-06f,1.2500000e-05f,2.4999999e-05f,4.9999999e-05f,9.9999997e-05f,0.0002f,0.0004f,0.0009f,0.0019f }; -void *convBench(void *arg) +void JamesDSP_Load_benchmark(double *_c0, double *_c1) { - size_t sleepMs = 30000; // 30 second after library being loaded -#ifdef _WIN32 - Sleep(sleepMs); -#else - usleep(sleepMs * 1000ULL); -#endif -#ifdef DEBUG - __android_log_print(ANDROID_LOG_INFO, TAG, "Benchmark start"); -#endif + memcpy(convbench_c0, _c0, sizeof(convbench_c0)); + memcpy(convbench_c1, _c1, sizeof(convbench_c1)); + benchmarkCompletionFlag = 1; + benchmarkEnable = 1; +} +void JamesDSP_Save_benchmark(double *_c0, double *_c1) +{ + memcpy(_c0, convbench_c0, sizeof(convbench_c0)); + memcpy(_c1, convbench_c1, sizeof(convbench_c1)); +} +void JamesDSP_Start_benchmark() +{ + benchmarkEnable = 1; + const int sflen_start = 64; int s, m; int sflen_best = sflen_start; @@ -140,12 +155,23 @@ void *convBench(void *arg) _c1[s] = (tau_16 - tau_1) / 15.0; _c0[s] = tau_1 - convbench_c1[s]; } - memcpy(convbench_c1, _c1, sizeof(_c1)); - memcpy(convbench_c0, _c0, sizeof(_c0)); + JamesDSP_Load_benchmark(_c0, _c1); #ifdef DEBUG __android_log_print(ANDROID_LOG_INFO, TAG, "Benchmark done"); #endif - benchmarkCompletionFlag = 1; +} +void *convBench(void *arg) +{ + size_t sleepMs = 30000; // 30 second after library being loaded +#ifdef _WIN32 + Sleep(sleepMs); +#else + usleep(sleepMs * 1000ULL); +#endif +#ifdef DEBUG + __android_log_print(ANDROID_LOG_INFO, TAG, "Benchmark start"); +#endif + JamesDSP_Start_benchmark(); pthread_exit(NULL); return 0; } @@ -200,8 +226,10 @@ void JamesDSPGlobalMemoryAllocation() { benchmarkCompletionFlag = 0; NSEEL_start(); +#ifdef JAMESDSP_REFERENCE_IMPL pthread_t benchmarkThread; pthread_create(&benchmarkThread, NULL, convBench, 0); +#endif } void JamesDSPGlobalMemoryDeallocation() { @@ -245,6 +273,14 @@ void JamesDSPReallocateBlock(JamesDSPLib *jdsp, size_t n) } void JamesDSPRefreshConvolutions(JamesDSPLib *jdsp, char refreshAll) { + // Temporary(?) bug fix when benchmarks are off + if(!benchmarkEnable) { +#ifdef DEBUG + __android_log_print(ANDROID_LOG_INFO, TAG, "ignoring call to JamesDSPRefreshConvolutions(...) because benchmarks are disabled"); +#endif + return; + } + #ifdef DEBUG __android_log_print(ANDROID_LOG_INFO, TAG, "Buffer size changed, update convolution object to maximize performance"); #endif @@ -1030,7 +1066,7 @@ void JamesDSPInit(JamesDSPLib *jdsp, int n, float sample_rate) jdsp->processInt24PackedDeinterleaved = pintp24; jdsp->processInternal = JamesDSPProcessCheckBenchmarkReady; // - const unsigned int asrc_taps = 32; + const unsigned int asrc_taps = 64; char isminphase = 1; if (sample_rate < 44100.0f || sample_rate > 48000.0f) { @@ -1101,7 +1137,7 @@ void JamesDSPInit(JamesDSPLib *jdsp, int n, float sample_rate) for (int j = 0; j < ((n > 1) ? (n / (i + 1)) : (128)); j++) randXorshift(jdsp->rndstate); } - JamesDSPRefreshBlob(jdsp, (double)sample_rate); + JamesDSPRefreshBlob(jdsp, (double)jdsp->fs); jdsp->rndstate[1] = (uint64_t)(randXorshift(jdsp->rndstate) * 2.0); #ifdef DEBUG __android_log_print(ANDROID_LOG_INFO, TAG, "Printing benchmark data start"); diff --git a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/jdsp_header.h b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/jdsp_header.h index 48e6b024..901c4d0a 100644 --- a/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/jdsp_header.h +++ b/libjamesdsp/subtree/Main/libjamesdsp/jni/jamesdsp/jdsp/jdsp_header.h @@ -26,7 +26,6 @@ extern int upper_bound(double *a, int n, double x); extern int lower_bound(double *a, int n, double x); extern size_t fast_upper_bound(double *a, size_t n, double x); extern size_t fast_lower_bound(double *a, size_t n, double x); -extern void fhtbitReversalTbl(unsigned *dst, unsigned int n); extern void fhtsinHalfTblFloat(float *dst, unsigned int n); extern void LLdiscreteHartleyFloat(float *A, const int nPoints, const float *sinTab); extern double randXorshift(uint64_t s[2]); @@ -38,29 +37,42 @@ typedef struct float envOverThreshold; } JLimiter; #define FFTSIZE_DRS (8192) -#define ANALYSIS_OVERLAP_DRS 4 -#define OVPSIZE_DRS (FFTSIZE_DRS / ANALYSIS_OVERLAP_DRS) +#define ANALYSIS_OVERLAP_DRS_MAX (8) #define HALFWNDLEN_DRS ((FFTSIZE_DRS >> 1) + 1) #define MAX_OUTPUT_BUFFERS_DRS 2 #define NUMPTS_DRS (7) +#define DYN_BANDS_GAMMATONE (16) +#define MAXORDER (12) +#define MAXSECTIONS (MAXORDER >> 1) +// number of points of pre and post padding used to set initial conditions +#define PREPAD (200) // Max pad +#define POSPAD (200) // Max pad typedef struct { - // Constant - unsigned int fftLen, minus_fftLen, ovpLen, halfLen, smpShift, procUpTo; + float real, imag; +} cplx; +typedef struct +{ + double real, imag; +} cplxDouble; +typedef struct str_dynfreqdomain +{ + // Frequency domain + float analysisWnd[FFTSIZE_DRS]; + unsigned int fftLen, minus_fftLen, ovpLen, ovpCount, halfLen, smpShift, procUpTo; void(*fft)(float*, const float*); unsigned int mBitRev[FFTSIZE_DRS]; float mSineTab[FFTSIZE_DRS >> 1]; - float analysisWnd[FFTSIZE_DRS]; float synthesisWnd[FFTSIZE_DRS]; // Shared variable between all FFT length and modes and channel config int mOutputReadSampleOffset; int mOutputBufferCount; // How many buffers are actually in use unsigned int mInputSamplesNeeded; float *mOutputBuffer[MAX_OUTPUT_BUFFERS_DRS]; - float buffer[MAX_OUTPUT_BUFFERS_DRS][OVPSIZE_DRS * 2]; + float buffer[MAX_OUTPUT_BUFFERS_DRS][FFTSIZE_DRS >> 1]; unsigned int mInputPos; float mInput[2][FFTSIZE_DRS]; - float mOverlapStage2dash[2][OVPSIZE_DRS]; + float mOverlapStage2dash[2][ANALYSIS_OVERLAP_DRS_MAX][FFTSIZE_DRS >> 1]; float mTempLBuffer[FFTSIZE_DRS]; float mTempRBuffer[FFTSIZE_DRS]; float timeDomainOut[2][FFTSIZE_DRS]; @@ -71,6 +83,7 @@ typedef struct char octaveSmooth[sizeof(unsigned int) + sizeof(float) + sizeof(unsigned int) + ((HALFWNDLEN_DRS + 1) << 1) * sizeof(unsigned int) + (HALFWNDLEN_DRS + 1) * sizeof(float) + ((HALFWNDLEN_DRS + 1) + 3) * 2 * sizeof(float)]; float finalGain[HALFWNDLEN_DRS]; double freq2[NUMPTS_DRS + 2]; + float freq3[DYN_BANDS_GAMMATONE + 2]; double gains2[NUMPTS_DRS + 2]; float DREmultUniform[HALFWNDLEN_DRS]; float DREmult[HALFWNDLEN_DRS]; @@ -79,7 +92,48 @@ typedef struct float headRoomdB; float fgt_fac, fgt_facT; float spectralRate; + // Time domain + float bRe[DYN_BANDS_GAMMATONE]; + float aRe[DYN_BANDS_GAMMATONE]; + float aIm[DYN_BANDS_GAMMATONE]; + float Zre[DYN_BANDS_GAMMATONE * 2]; + float Zim[DYN_BANDS_GAMMATONE * 2]; + float gmtFreq[DYN_BANDS_GAMMATONE]; + float interpolatedGain[DYN_BANDS_GAMMATONE + 2]; + float diffGain[DYN_BANDS_GAMMATONE]; + float c1[(DYN_BANDS_GAMMATONE - 1)]; + float c2[(DYN_BANDS_GAMMATONE - 1)]; + float d0[(DYN_BANDS_GAMMATONE - 1)]; + float d1[(DYN_BANDS_GAMMATONE - 1)]; + float overallGain; + float c1step[(DYN_BANDS_GAMMATONE - 1)]; + float c2step[(DYN_BANDS_GAMMATONE - 1)]; + float d0step[(DYN_BANDS_GAMMATONE - 1)]; + float d1step[(DYN_BANDS_GAMMATONE - 1)]; + float overallGainstep; + float z1_AL[(DYN_BANDS_GAMMATONE - 1)]; + float z2_AL[(DYN_BANDS_GAMMATONE - 1)]; + float z1_AR[(DYN_BANDS_GAMMATONE - 1)]; + float z2_AR[(DYN_BANDS_GAMMATONE - 1)]; + double trigo[(DYN_BANDS_GAMMATONE - 1) * 4]; + unsigned int updatePerNSmps; + float dsSm, alpha; + int updateIdx; + // Global variable int granularity, tfresolution; + // CWT + unsigned int reqSynthesisWnd; + float gauss_c1[PREPAD + HALFWNDLEN_DRS + POSPAD - 1], gauss_c2[PREPAD + HALFWNDLEN_DRS + POSPAD - 1], gauss_b[PREPAD + HALFWNDLEN_DRS + POSPAD - 1]; + unsigned int prepad, pospad; + unsigned int bitrevfftshift[FFTSIZE_DRS]; + float corrF[HALFWNDLEN_DRS]; + void (*process)(struct str_dynfreqdomain *); + float shiftCentre[HALFWNDLEN_DRS]; + float scalarGain; + float fftBuf[2][FFTSIZE_DRS], getbackCorrectedToSpectrum1[2][FFTSIZE_DRS]; + float real[2][HALFWNDLEN_DRS], imag[2][HALFWNDLEN_DRS]; + float specHannReal[2][PREPAD + HALFWNDLEN_DRS + POSPAD - 1], specHannImag[2][PREPAD + HALFWNDLEN_DRS + POSPAD - 1]; + cplx tmp[2][PREPAD + HALFWNDLEN_DRS + POSPAD - 1]; } FFTCompander; typedef struct { @@ -411,8 +465,6 @@ typedef struct FFTConvolver2x2 convState; } ArbEqConv; #define NUMPTS 15 -#define MAXORDER (12) -#define MAXSECTIONS (MAXORDER >> 1) typedef struct { // FIR @@ -432,9 +484,10 @@ typedef struct float z2_AL[(NUMPTS - 1) * MAXSECTIONS]; float z1_AR[(NUMPTS - 1) * MAXSECTIONS]; float z2_AR[(NUMPTS - 1) * MAXSECTIONS]; - float overallGain[NUMPTS - 1]; + float overallGain; char sec[NUMPTS - 1]; } MultimodalEQ; +extern unsigned int HSHOSVF(double fs, double fc, unsigned int filterOrder, double gain, double overallGainDb, float *c1, float *c2, float *d0, float *d1, float *overallGain); typedef struct { ArbEqConv instance; @@ -524,6 +577,9 @@ typedef struct dspsys extern void JamesDSPGlobalMemoryAllocation(); extern void JamesDSPGlobalMemoryDeallocation(); extern void JamesDSPReallocateBlock(JamesDSPLib *jdsp, size_t blockSizeMax); +extern void JamesDSP_Load_benchmark(double *_c0, double *_c1); +extern void JamesDSP_Save_benchmark(double *_c0, double *_c1); +extern void JamesDSP_Start_benchmark(); extern void jdsp_lock(JamesDSPLib *jdsp); extern void jdsp_unlock(JamesDSPLib *jdsp); extern void JamesDSPFree(JamesDSPLib *jdsp); @@ -538,7 +594,7 @@ extern void JLimiterInit(JamesDSPLib *jdsp); // Compressor extern void CompressorConstructor(JamesDSPLib *jdsp); extern void CompressorDestructor(JamesDSPLib *jdsp); -extern void CompressorSetParam(JamesDSPLib *jdsp, float fgt_facT, int granularity, int tfresolution); +extern void CompressorSetParam(JamesDSPLib *jdsp, float fgt_facT, int granularity, int tfresolution, char forceRefresh); extern void CompressorSetGain(JamesDSPLib *jdsp, double *freq, double *gains, char cpy); extern void CompressorEnable(JamesDSPLib *jdsp, char enable); extern void CompressorDisable(JamesDSPLib *jdsp); diff --git a/meta/flatpak/lint.sh b/meta/flatpak/lint.sh old mode 100644 new mode 100755 index 5870884a..edd8fb33 --- a/meta/flatpak/lint.sh +++ b/meta/flatpak/lint.sh @@ -1,7 +1,7 @@ #!/bin/bash echo "Validating metainfo.xml files" -flatpak run org.freedesktop.appstream-glib validate me.timschneeberger.jdsp4linux.pipewire.metainfo.xml +flatpak run org.freedesktop.appstream-glib validate me.timschneeberger.jdsp4linux.metainfo.xml flatpak run org.freedesktop.appstream-glib validate me.timschneeberger.jdsp4linux.pulse.metainfo.xml echo "Validating desktop files" -desktop-file-validate me.timschneeberger.jdsp4linux.pipewire.desktop +desktop-file-validate me.timschneeberger.jdsp4linux.desktop desktop-file-validate me.timschneeberger.jdsp4linux.pulse.desktop diff --git a/meta/flatpak/me.timschneeberger.jdsp4linux.metainfo.xml b/meta/flatpak/me.timschneeberger.jdsp4linux.metainfo.xml index 8287e1b9..b89254ef 100644 --- a/meta/flatpak/me.timschneeberger.jdsp4linux.metainfo.xml +++ b/meta/flatpak/me.timschneeberger.jdsp4linux.metainfo.xml @@ -56,7 +56,32 @@ - + + +
    +
  • New libjamesdsp updates:
  • +
  • Compander: new time-frequency transform mode and zero latency
  • +
  • EEL engine updated
  • +
  • IIR EQ stability and efficiency improved
  • +
  • Several performance improvements and bugfixes
  • +
  • Added settings UI for convolver benchmarking optimizations
  • +
  • Fixed distorted audio when enabling the stereo widener without setting the strength
  • +
  • Fixed Liveprog list parameters not displaying their current value correctly
  • +
+
+
+ + +
    +
  • New libjamesdsp updates:
  • +
  • Dynamic range compander added
  • +
  • Multimodal equalizer added (replaces old EQ)
  • +
  • Convolution modules use automatic benchmarking (in the background) to optimize performance
  • +
  • Several performance improvements and bugfixes
  • +
+
+
+
  • Other changes:
  • @@ -64,7 +89,7 @@
- +
  • Features:
  • diff --git a/meta/flatpak/me.timschneeberger.jdsp4linux.pulse.metainfo.xml b/meta/flatpak/me.timschneeberger.jdsp4linux.pulse.metainfo.xml index 6f74cca9..579466ac 100644 --- a/meta/flatpak/me.timschneeberger.jdsp4linux.pulse.metainfo.xml +++ b/meta/flatpak/me.timschneeberger.jdsp4linux.pulse.metainfo.xml @@ -56,7 +56,40 @@ - + + +
      +
    • New libjamesdsp updates:
    • +
    • Compander: new time-frequency transform mode and zero latency
    • +
    • EEL engine updated
    • +
    • IIR EQ stability and efficiency improved
    • +
    • Several performance improvements and bugfixes
    • +
    • Added settings UI for convolver benchmarking optimizations
    • +
    • Fixed distorted audio when enabling the stereo widener without setting the strength
    • +
    • Fixed Liveprog list parameters not displaying their current value correctly
    • +
    +
    +
    + + +
      +
    • New libjamesdsp updates:
    • +
    • Dynamic range compander added
    • +
    • Multimodal equalizer added (replaces old EQ)
    • +
    • Convolution modules use automatic benchmarking (in the background) to optimize performance
    • +
    • Several performance improvements and bugfixes
    • +
    +
    +
    + + +
      +
    • Other changes:
    • +
    • Finalize flatpak support
    • +
    +
    +
    +
    • Features:
    • @@ -84,6 +117,7 @@ + me.timschneeberger.jdsp4linux.pulse.desktop diff --git a/resources/translations/jamesdsp_af.ts b/resources/translations/jamesdsp_af.ts index d7f3af83..f1030f48 100644 --- a/resources/translations/jamesdsp_af.ts +++ b/resources/translations/jamesdsp_af.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_ar.ts b/resources/translations/jamesdsp_ar.ts index 0f20498b..8c888e90 100644 --- a/resources/translations/jamesdsp_ar.ts +++ b/resources/translations/jamesdsp_ar.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_ca.ts b/resources/translations/jamesdsp_ca.ts index 06b021cd..74a525e9 100644 --- a/resources/translations/jamesdsp_ca.ts +++ b/resources/translations/jamesdsp_ca.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_cs.ts b/resources/translations/jamesdsp_cs.ts index c2638573..4118e826 100644 --- a/resources/translations/jamesdsp_cs.ts +++ b/resources/translations/jamesdsp_cs.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_da.ts b/resources/translations/jamesdsp_da.ts index 473e3d8d..912de740 100644 --- a/resources/translations/jamesdsp_da.ts +++ b/resources/translations/jamesdsp_da.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_de.qm b/resources/translations/jamesdsp_de.qm index 2fdefbaf..c72e2440 100644 Binary files a/resources/translations/jamesdsp_de.qm and b/resources/translations/jamesdsp_de.qm differ diff --git a/resources/translations/jamesdsp_de.ts b/resources/translations/jamesdsp_de.ts index 729caf51..de763788 100644 --- a/resources/translations/jamesdsp_de.ts +++ b/resources/translations/jamesdsp_de.ts @@ -1,1651 +1,1656 @@ - + AeqItemDelegate - - 2nd choice - 2. Wahl + + 2nd choice + 2. Wahl - - 3rd choice - 3. Wahl + + 3rd choice + 3. Wahl - - %1th choice - %1. Wahl + + %1th choice + %1. Wahl - - + + AeqPreviewPlot - - Frequency (Hz) - Frequenz (Hz) + + Frequency (Hz) + Frequenz (Hz) - - Amplitude (dBr) - Amplitude (dBr) + + Amplitude (dBr) + Amplitude (dBr) - - Target - Sollwert + + Target + Sollwert - - Raw (smoothed) - Rohsignal (geglättet) + + Raw (smoothed) + Rohsignal (geglättet) - - Error (smoothed) - Fehler (geglättet) + + Error (smoothed) + Fehler (geglättet) - - Equalization - Equalisierung + + Equalization + Equalisierung - - Raw - Rohsignal + + Raw + Rohsignal - - Error - Fehler + + Error + Fehler - - Equalized - Ausgeglichen + + Equalized + Ausgeglichen - - Equalization (normalized) - Equalisierung (normalisiert) + + Equalization (normalized) + Equalisierung (normalisiert) - - Move to top left - Nach links oben + + Move to top left + Nach links oben - - Move to top center - In die Mitte oben + + Move to top center + In die Mitte oben - - Move to top right - Nach rechts oben + + Move to top right + Nach rechts oben - - Move to bottom right - Nach rechts unten + + Move to bottom right + Nach rechts unten - - Move to bottom left - Nach links unten + + Move to bottom left + Nach links unten - - + + AeqSelector - - AutoEQ Database - AutoEQ-Datenbank + + AutoEQ Database + AutoEQ-Datenbank - - Filter... - Filter... + + Filter... + Filter... - - Local database version - Version der lokalen Datenbank + + Local database version + Version der lokalen Datenbank - - Checked out at commit: - Ausgecheckt bei Commit: + + Checked out at commit: + Ausgecheckt bei Commit: - - Last commit created at: - Letzter Commit erstellt am: + + Last commit created at: + Letzter Commit erstellt am: - - Package generated at: - Paket generiert am: + + Package generated at: + Paket generiert am: - - Display settings - Anzeigeeinstellungen + + Display settings + Anzeigeeinstellungen - - Dark mode - Dunkelmodus + + Dark mode + Dunkelmodus - - Update database - Datenbank aktualisieren + + Update database + Datenbank aktualisieren - - Download latest AutoEQ package - Aktuelles AutoEQ-Paket herunterladen + + Download latest AutoEQ package + Aktuelles AutoEQ-Paket herunterladen - - Delete database - Datenbank löschen + + Delete database + Datenbank löschen - - Cleanup local database and exit - Lokale Datenbank bereinigen und beenden + + Cleanup local database and exit + Lokale Datenbank bereinigen und beenden - - No measurement selected - Keine Messung ausgewählt + + No measurement selected + Keine Messung ausgewählt - - Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. + + Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. This will override your current GraphicEQ configuration. - Verwenden Sie das Suchfeld auf der linken Seite, um eine passende Messung für Ihre Kopfhörer zu finden. Drücken Sie 'OK', um die Equalizer-Einstellungen in die Audio-Engine zu laden. + Verwenden Sie das Suchfeld auf der linken Seite, um eine passende Messung für Ihre Kopfhörer zu finden. Drücken Sie 'OK', um die Equalizer-Einstellungen in die Audio-Engine zu laden. Dies wird Ihre aktuelle GraphicEQ-Konfiguration überschreiben. - - - Manage database - Datenbank verwalten + + + Manage database + Datenbank verwalten - - No measurements found - Keine Messungen gefunden + + No measurements found + Keine Messungen gefunden - - AutoEQ database - AutoEQ-Datenbank + + AutoEQ database + AutoEQ-Datenbank - - Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. + + Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. An internet connection is required during this step. Do you want to continue and enable this feature? - Bevor du die AutoEQ-Integration nutzt, musst du eine komprimierte Version der Kopfhörer-Kompensationsdatenbank (~50MB) auf deine Festplatte herunterladen. + Bevor du die AutoEQ-Integration nutzt, musst du eine komprimierte Version der Kopfhörer-Kompensationsdatenbank (~50MB) auf deine Festplatte herunterladen. Eine Internetverbindung ist während dieses Schritts erforderlich. Möchtest du fortfahren und diese Funktion aktivieren? - - - Failed to retrieve version information - Fehler beim Abrufen der Versionsinformation + + + Failed to retrieve version information + Fehler beim Abrufen der Versionsinformation - - - Failed to retrieve package information from the remote repository: + + + Failed to retrieve package information from the remote repository: Status code: %0 Reason: %1 - Fehler beim Abrufen der Paketinformationen aus dem Remote-Repository: + Fehler beim Abrufen der Paketinformationen aus dem Remote-Repository: Statuscode: %0 Grund: %1 - - Return to database - Zurück zur Datenbank + + Return to database + Zurück zur Datenbank - - No new updates available - Keine neuen Updates verfügbar + + No new updates available + Keine neuen Updates verfügbar - - The local database is currently up-to-date; no new updates are available at this time. + + The local database is currently up-to-date; no new updates are available at this time. It may take up to 24 hours for new changes in the AutoEQ upstream repo to become available for download here. Packages are generated at 4am UTC daily. Do you want to re-install the latest database update anyway? - Die lokale Datenbank ist zur Zeit auf dem neuesten Stand; zur Zeit sind keine neuen Updates verfügbar. + Die lokale Datenbank ist zur Zeit auf dem neuesten Stand; zur Zeit sind keine neuen Updates verfügbar. Es kann bis zu 24 Stunden dauern, bis neue Änderungen im AutoEQ Upstream Repository zum Download verfügbar sind. Pakete werden täglich um 4:00 Uhr UTC generiert. Möchtest du trotzdem das aktuelle Datenbankupdate neu installieren? - - Database cleared - Datenbank gelöscht + + Database cleared + Datenbank gelöscht - - The database has been removed from your hard disk - Die Datenbank wurde von aus dem Speicher gelöscht + + The database has been removed from your hard disk + Die Datenbank wurde von aus dem Speicher gelöscht - - Error - Fehler + + Error + Fehler - - Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. - Die entsprechende Datei konnte nicht aus der Datenbank abgerufen werden. Bitte aktualisiere die lokale Datenbank, da sie unvollständig erscheint. + + Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. + Die entsprechende Datei konnte nicht aus der Datenbank abgerufen werden. Bitte aktualisiere die lokale Datenbank, da sie unvollständig erscheint. - - + + AppItem - - (unset) - (ungesetzt) + + (unset) + (ungesetzt) - - - - Add to blocklist - Zur Blockliste hinzufügen + + + + Add to blocklist + Zur Blockliste hinzufügen - - - Add to allowlist - Zur Erlaubnisliste hinzufügen + + + Add to allowlist + Zur Erlaubnisliste hinzufügen - - Rate: %1Hz - Abtastrate: %1Hz + + Rate: %1Hz + Abtastrate: %1Hz - - Latency: %1ms - Latenz: %1ms + + Latency: %1ms + Latenz: %1ms - - Format: %1 - Format: %1 + + Format: %1 + Format: %1 - - + + AppManagerFragment - - Active apps - Aktive Apps + + Active apps + Aktive Apps - - No apps are playing audio - Keine Apps spielen Audio ab + + No apps are playing audio + Keine Apps spielen Audio ab - - + + AutostartManager - - Manage auto-start permission for JamesDSP - Autostart-Berechtigung für JamesDSP verwalten + + Manage auto-start permission for JamesDSP + Autostart-Berechtigung für JamesDSP verwalten - - + + CodeOutline - - Annotations - Annotationen + + Annotations + Annotationen - - Functions - Funktionen + + Functions + Funktionen - - + + ConsoleOutput - - Auto-scroll - Automatisches Scrolling + + Auto-scroll + Automatisches Scrolling - - Copy selection - Auswahl kopieren + + Copy selection + Auswahl kopieren - - Copy all - Alles kopieren + + Copy all + Alles kopieren - - Clear - Löschen + + Clear + Löschen - - + + EELEditor - - EEL Scripting IDE - EEL Scripting IDE + + EEL Scripting IDE + EEL Scripting IDE - - File - Datei + + File + Datei - - Edit - Bearbeiten + + Edit + Bearbeiten - - Navigation - Navigation + + Navigation + Navigation - - View - Ansicht + + View + Ansicht - - Help - Hilfe + + Help + Hilfe - - Open - Öffnen + + Open + Öffnen - - Open script - Skript öffnen + + Open script + Skript öffnen - - Ctrl+O - Strg+O + + Ctrl+O + Strg+O - - - Close file - Datei schließen + + + Close file + Datei schließen - - Ctrl+Shift+W - Strg+Umschalt+W + + Ctrl+Shift+W + Strg+Umschalt+W - - Save - Speichern + + Save + Speichern - - Ctrl+S - Strg+S + + Ctrl+S + Strg+S - - Save as... - Speichern unter... + + Save as... + Speichern unter... - - Ctrl+Shift+S - Strg+Shift+S + + Ctrl+Shift+S + Strg+Shift+S - - Undo - Rückgängig + + Undo + Rückgängig - - Ctrl+Z - Strg+Z + + Ctrl+Z + Strg+Z - - Redo - Wiederherstellen + + Redo + Wiederherstellen - - Ctrl+Shift+Z - Strg+Umschalt+Z + + Ctrl+Shift+Z + Strg+Umschalt+Z - - Find/Replace... - Suchen/Ersetzen... + + Find/Replace... + Suchen/Ersetzen... - - Ctrl+F - Strg+F + + Ctrl+F + Strg+F - - - Go to line... - Gehe zu Zeile... + + + Go to line... + Gehe zu Zeile... - - Go to line - Gehe zu Zeile + + Go to line + Gehe zu Zeile - - Ctrl+L - Strg+L + + Ctrl+L + Strg+L - - - Jump to function... - Springe zur Funktion... + + + Jump to function... + Springe zur Funktion... - - Ctrl+M - Strg+M + + Ctrl+M + Strg+M - - Go to @init - Gehe zu @init + + Go to @init + Gehe zu @init - - F2 - F2 + + F2 + F2 - - Go to @sample - Gehe zu @sample + + Go to @sample + Gehe zu @sample - - F3 - F3 + + F3 + F3 - - Automatic Parentheses - Automatische Klammern + + Automatic Parentheses + Automatische Klammern - - Replace Tabs with Spaces - Tabs durch Leerzeichen ersetzen + + Replace Tabs with Spaces + Tabs durch Leerzeichen ersetzen - - EEL2 documentation - EEL2-Dokumentation + + EEL2 documentation + EEL2-Dokumentation - - F1 - F1 + + F1 + F1 - - Run code - Code ausführen + + Run code + Code ausführen - - F5 - F5 + + F5 + F5 - - New - Neu + + New + Neu - - New script wizard - Neues Skript Assistent + + New script wizard + Neues Skript Assistent - - Ctrl+N - Strg+N + + Ctrl+N + Strg+N - - - Freeze - Einfrieren + + + Freeze + Einfrieren - - F6 - F6 + + F6 + F6 - - Loaded projects - Geöffnete Projekte + + Loaded projects + Geöffnete Projekte - - Code outline - Codeumriss + + Code outline + Codeumriss - - Variable view - Variablen-Ansicht + + Variable view + Variablen-Ansicht - - Console output - Konsolenausgabe + + Console output + Konsolenausgabe - - '%1' started compiling at %2 - '%1' begann um %2 zu kompilieren + + '%1' started compiling at %2 + '%1' begann um %2 zu kompilieren - - <br>Compilation stopped at %2 - <br>Kompilation gestoppt um %2 + + <br>Compilation stopped at %2 + <br>Kompilation gestoppt um %2 - - Script initialization took %1ms - Skript-Initialisierung benötigte %1ms + + Script initialization took %1ms + Skript-Initialisierung benötigte %1ms - - Error - Fehler + + Error + Fehler - - Cannot write file - Kann Datei nicht schreiben + + Cannot write file + Kann Datei nicht schreiben - - Open EEL script - EEL-Skript öffnen + + Open EEL script + EEL-Skript öffnen - - EEL2 Script (*.eel) - EEL2 Script (*.eel) + + EEL2 Script (*.eel) + EEL2 Script (*.eel) - - Save as - Speichern unter + + Save as + Speichern unter - - Cannot execute - Kann nicht ausführen + + Cannot execute + Kann nicht ausführen - - No script file opened. Please open one first and try again. - Keine Skriptdatei geöffnet. Bitte öffne zuerst eine und versuche es nochmal. + + No script file opened. Please open one first and try again. + Keine Skriptdatei geöffnet. Bitte öffne zuerst eine und versuche es nochmal. - - Enter line number: - Zeile eingeben: + + Enter line number: + Zeile eingeben: - - Enter function name: - Funktionsname eingeben: + + Enter function name: + Funktionsname eingeben: - - + + EmptyView - - No project loaded - Kein Projekt geladen + + No project loaded + Kein Projekt geladen - - + + FileDownloaderDialog - - Package manager - Paket-Manager + + Package manager + Paket-Manager - - Downloading package... - Paket wird heruntergeladen... + + Downloading package... + Paket wird heruntergeladen... - - + + FileSelectionWidget - - Refresh - Aktualisieren + + Refresh + Aktualisieren - - Bookmark - Merken + + Bookmark + Merken - - Rename - Umbenennen + + Rename + Umbenennen - - Remove - Entfernen + + Remove + Entfernen - - No supported files found - Keine unterstützten Dateien gefunden + + No supported files found + Keine unterstützten Dateien gefunden - - + + FindReplaceForm - - Form - Form + + Form + Form - - &Find: - &Finden: + + &Find: + &Finden: - - R&eplace with: - &Ersetzen mit: + + R&eplace with: + &Ersetzen mit: - - Previous - Vorheriges + + Previous + Vorheriges - - Next - Nächstes + + Next + Nächstes - - &Options - &Optionen + + &Options + &Optionen - - R&egular expression - R&egulärer Ausdruck + + R&egular expression + R&egulärer Ausdruck - - &Whole words - Ganze &Wörter + + &Whole words + Ganze &Wörter - - &Case sensitive - &Groß-/Kleinschreibung + + &Case sensitive + &Groß-/Kleinschreibung - - &Close - &Schließen + + &Close + &Schließen - - &Replace - &Ersetzen + + &Replace + &Ersetzen - - Replace &All - &Alle ersetzen + + Replace &All + &Alle ersetzen - - no match found - Keine Übereinstimmung gefunden + + no match found + Keine Übereinstimmung gefunden - - Replaced %1 occurrence(s) - Ersetzte %1 Vorkommen(e) + + Replaced %1 occurrence(s) + Ersetzte %1 Vorkommen(e) - - + + FirstLaunchWizard - - Welcome! - Willkommen! + + Welcome! + Willkommen! - - Thank you for installing this app! + + Thank you for installing this app! However, before you can begin playing around with JamesDSP for Linux, we'll need to make some adjustments in order to ensure the best possible experience with JDSP. - Vielen Dank, dass du diese App installiert hast! + Vielen Dank, dass du diese App installiert hast! Doch bevor du JamesDSP für Linux testen kannst, müssen wir einige Anpassungen vornehmen, um die bestmögliche Erfahrung mit JDSP zu gewährleisten. - - - - Next > - Weiter > + + + + Next > + Weiter > - - Run in background? - Im Hintergrund ausführen? + + Run in background? + Im Hintergrund ausführen? - - No, don't apply effects in background - Nein, keine Effekte im Hintergrund anwenden + + No, don't apply effects in background + Nein, keine Effekte im Hintergrund anwenden - - Yes, minimize to tray icon - Ja, zum Tray-Symbol minimieren + + Yes, minimize to tray icon + Ja, zum Tray-Symbol minimieren - - Start minimized on boot - Beim Booten minimiert starten + + Start minimized on boot + Beim Booten minimiert starten - - That's it! - Fertig! + + That's it! + Fertig! - - You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! - Einrichtung fertig! Gehe zu den Einstellungen, falls du weitere Anpassungen zu tätigen willst. + + You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! + Einrichtung fertig! Gehe zu den Einstellungen, falls du weitere Anpassungen zu tätigen willst. Besuche unsere Telegram-Community für Support und Updates! - - Telegram - Telegram + + Telegram + Telegram - - Close - Schließen + + Close + Schließen - - + + FlatTabWidget - - FlatTabWidget - FlatTabWidget + + FlatTabWidget + FlatTabWidget - - + + GraphicEQFilterGUI - - Enable Graphic EQ - Grafik-EQ aktivieren + + Enable Graphic EQ + Grafik-EQ aktivieren - - Freq. - Freq. + + Freq. + Freq. - - Gain - Verstärkung + + Gain + Verstärkung - - AutoEQ database... - AutoEQ-Datenbank... + + AutoEQ database... + AutoEQ-Datenbank... - - 15-band - 15-Band + + 15-band + 15-Band - - 31-band - 31-Band + + 31-band + 31-Band - - variable - variabel + + variable + variabel - - Import - Importieren + + Import + Importieren - - Export - Exportieren + + Export + Exportieren - - Invert response - Antwort invertieren + + Invert response + Antwort invertieren - - Normalize response - Antwort normalisieren + + Normalize response + Antwort normalisieren - - Reset response - Antwort zurücksetzen + + Reset response + Antwort zurücksetzen - - - Import EqualizerAPO settings - EqualizerAPO-Einstellungen importieren + + + Import EqualizerAPO settings + EqualizerAPO-Einstellungen importieren - - Import frequency response - Frequenzantwort importieren + + Import frequency response + Frequenzantwort importieren - - - CSV frequency response (*.csv) - CSV-Frequenzantwort (*.csv) + + + CSV frequency response (*.csv) + CSV-Frequenzantwort (*.csv) - - - - All files (*.*) - Alle Dateien (*.*) + + + + All files (*.*) + Alle Dateien (*.*) - - Import EqualizerAPO graphic EQ preset - EqualizerAPO Grafik-EQ-Preset importieren + + Import EqualizerAPO graphic EQ preset + EqualizerAPO Grafik-EQ-Preset importieren - - EqualizerAPO GraphicEQ (*.txt) - EqualizerAPO GraphicEQ (*.txt) + + EqualizerAPO GraphicEQ (*.txt) + EqualizerAPO GraphicEQ (*.txt) - - Export frequency response - Frequenzantwort exportieren + + Export frequency response + Frequenzantwort exportieren - - + + GzipDownloaderDialog - - Error - Fehler + + Error + Fehler - - %1MB of %2MB downloaded - %1MB von %2MB heruntergeladen + + %1MB of %2MB downloaded + %1MB von %2MB heruntergeladen - - Decompressing package... - Entpacke Paket... + + Decompressing package... + Entpacke Paket... - - + + LiveprogSelectionWidget - - - No script has been loaded - Kein Skript wurde geladen + + + No script has been loaded + Kein Skript wurde geladen - - Enable - Aktivieren + + Enable + Aktivieren - - Reset - Reset + + Reset + Reset - - - Create new script - Neues Script erstellen + + + Create new script + Neues Script erstellen - - - Error - Fehler + + + Error + Fehler - - Cannot restore defaults. + + Cannot restore defaults. No EEL file is currently loaded. - Standardeinstellungen können nicht wiederhergestellt werden. + Standardeinstellungen können nicht wiederhergestellt werden. Derzeit ist keine EEL-Datei geladen. - - Selected EEL file does not exist anymore. + + Selected EEL file does not exist anymore. Please select another one - Ausgewählte EEL-Datei existiert nicht mehr. + Ausgewählte EEL-Datei existiert nicht mehr. Bitte wählen Sie eine andere - - Edit script - Skript bearbeiten + + Edit script + Skript bearbeiten - - No customizable parameters - Keine anpassbaren Parameter + + No customizable parameters + Keine anpassbaren Parameter - - + + MainWindow - - JamesDSP for Linux - JamesDSP für Linux + + JamesDSP for Linux + JamesDSP für Linux - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamischer Bass Boost</span></p><p>Frequenzabhängiger Bass-Boost. Setzt automatisch eigene Parameter, wie Verstärkung, Bandbreite, und Abschaltfrequenz durch Analyse des eingehenden Audio-Streams</p><p><span style=" text-decoration: underline;">Maximale Verstärkung:</span> passt die Stärke des dynamischen Bass-Boost Effekt an.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamischer Bass Boost</span></p><p>Frequenzabhängiger Bass-Boost. Setzt automatisch eigene Parameter, wie Verstärkung, Bandbreite, und Abschaltfrequenz durch Analyse des eingehenden Audio-Streams</p><p><span style=" text-decoration: underline;">Maximale Verstärkung:</span> passt die Stärke des dynamischen Bass-Boost Effekt an.</p></body></html> - - Dynamic bass boost - Dynamischer Bass-Boost + + Dynamic bass boost + Dynamischer Bass-Boost - - Maximum gain - Maximale Verstärkung + + Maximum gain + Maximale Verstärkung - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analoge Modellierung</span></p><p>Übergesampelte analoge Modellierung ist ein aliasing-freier harmonischer Generator.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analoge Modellierung</span></p><p>Übergesampelte analoge Modellierung ist ein aliasing-freier harmonischer Generator.</p></body></html> - - Analog modelling - Analoge Modellierung + + Analog modelling + Analoge Modellierung - - Preamp (Harmonics) - Vorverstärkung (Harmonik) + + Preamp (Harmonics) + Vorverstärkung (Harmonik) - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Begrenzer</span></p><p>Dieser Ausgabebegrenzer versucht das Clipping von Ausgängen zu vermeiden (verursacht durch DSP, das versucht, den ganzen Ton lauter als zuvor zu spielen, wenn der Eingabewert bereits annähernd maximal ist). </p><p><span style=" text-decoration: underline;">Schwellenwert:</span> Dieser Wert sollte auf 0 gesetzt werden, es sei denn, das Audio wird aus irgendeinem Grund vor dem digitalen Clipping abgeschnitten. In diesem Fall kannst du ihn auf niedrigere Werte einstellen.</p><p><span style=" text-decoration: underline;">Release-Zeit:</span> Die Limitierung ist nur solange wirksam, wie die Release-Zeit gesetzt ist. Kurze Zeiten werden zu hörbaren Verzerrungen des begrenzten Klanges, insbesondere der niedrigen Frequenzen, führen; ein erweitertes Release wird normalerweise bevorzugt, reduziert aber das Volumen, das etwas erreicht werden kann. </p><p><span style=" text-decoration: underline;">Nachverstärkung:</span> Lautstärkeregler der sich auf alle Effekte auswirkt, nachdem sie angewendet wurden, aber bevor der Ton den Begrenzer erreicht.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Begrenzer</span></p><p>Dieser Ausgabebegrenzer versucht das Clipping von Ausgängen zu vermeiden (verursacht durch DSP, das versucht, den ganzen Ton lauter als zuvor zu spielen, wenn der Eingabewert bereits annähernd maximal ist). </p><p><span style=" text-decoration: underline;">Schwellenwert:</span> Dieser Wert sollte auf 0 gesetzt werden, es sei denn, das Audio wird aus irgendeinem Grund vor dem digitalen Clipping abgeschnitten. In diesem Fall kannst du ihn auf niedrigere Werte einstellen.</p><p><span style=" text-decoration: underline;">Release-Zeit:</span> Die Limitierung ist nur solange wirksam, wie die Release-Zeit gesetzt ist. Kurze Zeiten werden zu hörbaren Verzerrungen des begrenzten Klanges, insbesondere der niedrigen Frequenzen, führen; ein erweitertes Release wird normalerweise bevorzugt, reduziert aber das Volumen, das etwas erreicht werden kann. </p><p><span style=" text-decoration: underline;">Nachverstärkung:</span> Lautstärkeregler der sich auf alle Effekte auswirkt, nachdem sie angewendet wurden, aber bevor der Ton den Begrenzer erreicht.</p></body></html> - - Limiter/Master - Begrenzer/Master + + Limiter/Master + Begrenzer/Master - - Threshold - Schwellenwert + + Threshold + Schwellenwert - - Release - Release-Zeit + + Release + Release-Zeit - - Post gain - Nachverstärkung + + Post gain + Nachverstärkung - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamikbereich-Kompander</span></p><p>Aktiviert/deaktiviert den Dynamikbereich-Kompander.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamikbereich-Kompander</span></p><p>Aktiviert/deaktiviert den Dynamikbereich-Kompander.</p></body></html> - - Dynamic range compander - Dynamikbereich-Kompander + + Dynamic range compander + Dynamikbereich-Kompander - - Time constant - Zeitkonstante + + Time constant + Zeitkonstante - - Granularity - Granularität + + Granularity + Granularität - - Time-frequency transforms - Zeit-Frequenz Transformationen + + Time-frequency transforms + Zeit-Frequenz Transformationen - - Uniform (Short-time Fourier) - Uniform (Kurzzeit-Fourier) + + Uniform (Short-time Fourier) + Uniform (Kurzzeit-Fourier) - - Multiresolution (Continuous wavelet) - Multiresolution (Kontinuierliches Wavelet) + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>beinhaltet den traditionellen BS2B (Bauer stereophonic-to-binaural DSP) Modus und einen fortschrittlicheren konvolutionbasierten HRTF-Ansatz.</p></body></html> - - Multiresolution (Time domain) - Multiresolution (Zeitdomäne) + + + Crossfeed + Crossfeed - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>beinhaltet den traditionellen BS2B (Bauer stereophonic-to-binaural DSP) Modus und einen fortschrittlicheren konvolutionbasierten HRTF-Ansatz.</p></body></html> + + Mode + Modus - - - Crossfeed - Crossfeed + + Custom BS2B parameters + Benutzerdefinierte BS2B-Parameter - - Mode - Modus + + Cut frequency + Schnittfrequenz - - Custom BS2B parameters - Benutzerdefinierte BS2B-Parameter + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Weite der Klangbühne</span></p><p>Ein Algorithmus, der Stereo-Phasenbezug in verschiedenen Spektralregionen erkennt und die Stereo-Klangbühne verbessert, ohne die Stimmintegrität zu beeinträchtigen.</p></body></html> - - Cut frequency - Schnittfrequenz + + Soundstage wideness + Weite der Klangbühne - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Weite der Klangbühne</span></p><p>Ein Algorithmus, der Stereo-Phasenbezug in verschiedenen Spektralregionen erkennt und die Stereo-Klangbühne verbessert, ohne die Stimmintegrität zu beeinträchtigen.</p></body></html> + + Widen level + Erweiterungsstufe - - Soundstage wideness - Weite der Klangbühne + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Virtueller Raumklang</span></p><p>Komplexes Hall IIR Netzwerk (Progenitor 2)</p></body></html> - - Widen level - Erweiterungsstufe + + Enable reverberation + Virtueller Raumklang aktivieren - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Virtueller Raumklang</span></p><p>Komplexes Hall IIR Netzwerk (Progenitor 2)</p></body></html> + + Presets + Voreinstellungen - - Enable reverberation - Virtueller Raumklang aktivieren + + + ... + ... - - Presets - Voreinstellungen + + Oversampling factor + Oversampling-Faktor - - - ... - ... + + Early reflection factor + Frühzeitiger Reflexionsfaktor - - Oversampling factor - Oversampling-Faktor + + Early reflection amount + Frühzeitige Reflexionsmenge - - Early reflection factor - Frühzeitiger Reflexionsfaktor + + Early reflection width + Breite der frühzeitigen Reflexion - - Early reflection amount - Frühzeitige Reflexionsmenge + + Lowpass cutoff (Input) + Lowpass-Abschnitt (Eingabe) - - Early reflection width - Breite der frühzeitigen Reflexion + + Lowpass cutoff (Bass) + Lowpass-Abschnitt (Bass) - - Lowpass cutoff (Input) - Lowpass-Abschnitt (Eingabe) + + Lowpass cutoff (Damp) + Lowpass-Abschnitt (Dämpfung) - - Lowpass cutoff (Bass) - Lowpass-Abschnitt (Bass) + + Lowpass cutoff (Output) + Lowpass-Abschnitt (Ausgabe) - - Lowpass cutoff (Damp) - Lowpass-Abschnitt (Dämpfung) + + Final wet mix + Finaler Effektmix - - Lowpass cutoff (Output) - Lowpass-Abschnitt (Ausgabe) + + Final dry mix + Finaler Trockenmix - - Final wet mix - Finaler Effektmix + + Reverb wetness + Effektstärke - - Final dry mix - Finaler Trockenmix + + Width L/R mix + Weite L/R Mix - - Reverb wetness - Effektstärke + + LFO wander amount + LFO Wanderbetrag - - Width L/R mix - Weite L/R Mix + + LFO spin amount + LFO-Drehbetrag - - LFO wander amount - LFO Wanderbetrag + + Time decay + Zeitverfall - - LFO spin amount - LFO-Drehbetrag + + Delay + Verzögerung - - Time decay - Zeitverfall + + Bass boost + Bassverstärkung - - Delay - Verzögerung + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodaler Equalizer</span></p><p>Aktiviert/deaktiviert den multimodalen Equalizer.</p><p><span style=" text-decoration: underline;">Filtertyp:</span> Der multimodale Equalizer unterstützt sowohl FIR (Minimale Phase) als auch mehrere IIR-Filtermodi.</p></body></html> - - Bass boost - Bassverstärkung + + FIR Minimum phase + FIR Minimale Phase - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodaler Equalizer</span></p><p>Aktiviert/deaktiviert den multimodalen Equalizer.</p><p><span style=" text-decoration: underline;">Filtertyp:</span> Der multimodale Equalizer unterstützt sowohl FIR (Minimale Phase) als auch mehrere IIR-Filtermodi.</p></body></html> + + IIR 4 order + IIR 4. Ordnung - - FIR Minimum phase - FIR Minimale Phase + + IIR 6 order + IIR 6. Ordnung - - IIR 4 order - IIR 4. Ordnung + + IIR 8 order + IIR 8. Ordnung - - IIR 6 order - IIR 6. Ordnung + + IIR 10 order + IIR 10. Ordnung - - IIR 8 order - IIR 8. Ordnung + + IIR 12 order + IIR 12. Ordnung - - IIR 10 order - IIR 10. Ordnung + + Enable EQ + EQ aktivieren - - IIR 12 order - IIR 12. Ordnung + + Multiresolution (Continuous wavelet, incomplete dual frame) + Multiresolution (kontinuierlicher Wellengang, unvollständiges doppeltes Frame) - - Enable EQ - EQ aktivieren + + Pseudo multiresolution (Undersampling frame) + Pseudo-Multiresolution (Undersampling-Frame) - - Presets... - Voreinstellungen... + + Pseudo multiresolution (Time domain, zero latency) + Pseudo-Multiresolution (Zeitdomäne, keine Latenz) - - Filter type - Filtertyp + + Presets... + Voreinstellungen... - - Interpolator - Interpolator + + Filter type + Filtertyp - - <html><head/><body><p>Interpolation mode</p></body></html> - <html><head/><body><p>Interpolationsmodus</p></body></html> + + Interpolator + Interpolator - - Piecewise Cubic Hermite Interpolating Polynomial - Stückweise kubische Hermite-Interpolation Polynomiale + + <html><head/><body><p>Interpolation mode</p></body></html> + <html><head/><body><p>Interpolationsmodus</p></body></html> - - Modified Hiroshi Akima spline - Modifizierte Hiroshi Akima-Spline + + Piecewise Cubic Hermite Interpolating Polynomial + Stückweise kubische Hermite-Interpolation Polynomiale - - Reset EQ - EQ zurücksetzen + + Modified Hiroshi Akima spline + Modifizierte Hiroshi Akima-Spline - - Fixed bands - Feste Bänder + + Reset EQ + EQ zurücksetzen - - Flexible bands - Flexible Bänder + + Fixed bands + Feste Bänder - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitionierter Convolver (Auto-Segmentierung-Convolution). Der Convolver nimmt die Signaleigenschaften der Impulsantwort auf und wendet diese in Echtzeit auf den eingehenden Ton an.</p><p>Unterstützt mono, stereo, full/true Stereo (LL, LR, RL, RR) Impulsantworten.</p><p><span style=" text-decoration: underline;">Optimierung der Impulsantwort:</span></p><p>Dieser Parameter versucht, die Länge der Impulsantwort so weit wie möglich zu verringern; es geht darum, die Latenz so weit wie möglich zu reduzieren und möglicherweise den Stromverbrauch zu verringern.</p></body></html> + + Flexible bands + Flexible Bänder - - - Filesystem - Dateisystem + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitionierter Convolver (Auto-Segmentierung-Convolution). Der Convolver nimmt die Signaleigenschaften der Impulsantwort auf und wendet diese in Echtzeit auf den eingehenden Ton an.</p><p>Unterstützt mono, stereo, full/true Stereo (LL, LR, RL, RR) Impulsantworten.</p><p><span style=" text-decoration: underline;">Optimierung der Impulsantwort:</span></p><p>Dieser Parameter versucht, die Länge der Impulsantwort so weit wie möglich zu verringern; es geht darum, die Latenz so weit wie möglich zu reduzieren und möglicherweise den Stromverbrauch zu verringern.</p></body></html> - - Bookmarks - Lesezeichen + + + Filesystem + Dateisystem - - Enable convolver - Convolver aktivieren + + Bookmarks + Lesezeichen - - IR optimization - IR-Optimierung + + Enable convolver + Convolver aktivieren - - Original - Original + + IR optimization + IR-Optimierung - - Shrink - Schrumpfen + + Original + Original - - Minimum phase transform and shrink - Minimale Phasenumwandlung und Schrumpfen + + Shrink + Schrumpfen - - Adv. waveform editing - Erw. Wellenform-Bearb. + + Minimum phase transform and shrink + Minimale Phasenumwandlung und Schrumpfen - - Edit - Bearbeiten + + Adv. waveform editing + Erw. Wellenform-Bearb. - - Channels: - Kanäle: + + Edit + Bearbeiten - - Samples: - Samples: + + Channels: + Kanäle: - - No selection - Keine Auswahl + + Samples: + Samples: - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Wendet einen parametrischen EQ auf das Audiosignal an. Dabeio muss der Benutzer jedoch eine .vdc Datei, die DDCToolbox generieren kann, auswählen.</p><p>ViPER-DDC in jDSP ist eine generalisierte Implementierung von Sektionsfiltern zweiter Ordnung, was sich leicht von der Implementierung in Viper4Android unterscheidet. V4A unterstützt nur Peaking parametric; der Grund dafür ist, dass V4A einen 'share coefficient property' des Peaking Filters verwendet. Im Gegensatz dazu hat jDSP keine derartige Annahme.</p></body></html> + + No selection + Keine Auswahl - - Database - Datenbank + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Wendet einen parametrischen EQ auf das Audiosignal an. Dabeio muss der Benutzer jedoch eine .vdc Datei, die DDCToolbox generieren kann, auswählen.</p><p>ViPER-DDC in jDSP ist eine generalisierte Implementierung von Sektionsfiltern zweiter Ordnung, was sich leicht von der Implementierung in Viper4Android unterscheidet. V4A unterstützt nur Peaking parametric; der Grund dafür ist, dass V4A einen 'share coefficient property' des Peaking Filters verwendet. Im Gegensatz dazu hat jDSP keine derartige Annahme.</p></body></html> - - Create - Erstellen + + Database + Datenbank - - Create your custom DDC files using DDCToolbox - Erstelle deine eigenen DDC-Dateien mit DDCToolbox + + Create + Erstellen - - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + + Create your custom DDC files using DDCToolbox + Erstelle deine eigenen DDC-Dateien mit DDCToolbox - - View installation instructions - Zur Installationsanleitung + + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - - Enable ViPER-DDC - ViPER-DDC aktivieren + + View installation instructions + Zur Installationsanleitung - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmierbare DSP</span></p><p>Dies ist eine virtuelle Maschine, die ein .eel-Skript als Eingabe kompiliert und ausführt. In einfachen Worten erlaubt es Benutzern, ihre eigenen Audio-Effekte zu programmieren.</p><p>Die Anzahl der unterstützten Operationen ist enorm. Schaue dir die offizielle Dokumentation an: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github. om/james34602/EEL_VM</span></a></p><p>Drücke 'Skript bearbeiten' um eine eingebaute Skripting-Umgebung für EEL-Codedateien zu starten.</p></body></html> + + Enable ViPER-DDC + ViPER-DDC aktivieren - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbiträrer Response Equalizer</span></p><p>Auch bekannt als GraphicEQ von EqualizerAPO.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmierbare DSP</span></p><p>Dies ist eine virtuelle Maschine, die ein .eel-Skript als Eingabe kompiliert und ausführt. In einfachen Worten erlaubt es Benutzern, ihre eigenen Audio-Effekte zu programmieren.</p><p>Die Anzahl der unterstützten Operationen ist enorm. Schaue dir die offizielle Dokumentation an: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github. om/james34602/EEL_VM</span></a></p><p>Drücke 'Skript bearbeiten' um eine eingebaute Skripting-Umgebung für EEL-Codedateien zu starten.</p></body></html> - - Custom Presets - Benutzerdefinierte Voreinstellungen + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbiträrer Response Equalizer</span></p><p>Auch bekannt als GraphicEQ von EqualizerAPO.</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Benutzerdefinierte Voreinstellungen</span></p><p>Benutzerdefinierte Voreinstellungen anlegen und verwalten</p></body></html> + + Custom Presets + Benutzerdefinierte Voreinstellungen - - Settings - Einstellungen + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Benutzerdefinierte Voreinstellungen</span></p><p>Benutzerdefinierte Voreinstellungen anlegen und verwalten</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Einstellungen</span></p><p>Diese Anwendung konfigurieren</p></body></html> + + Settings + Einstellungen - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Sonstige</span></p><p>Verschiedene Aktionen, die weniger häufig verwendet werden</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Einstellungen</span></p><p>Diese Anwendung konfigurieren</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Deaktivieren</span></p><p>Diese Option legt fest, ob Soundeffekte aktiviert oder deaktiviert werden sollen.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Sonstige</span></p><p>Verschiedene Aktionen, die weniger häufig verwendet werden</p></body></html> - - Bypass - Deaktivieren + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Deaktivieren</span></p><p>Diese Option legt fest, ob Soundeffekte aktiviert oder deaktiviert werden sollen.</p></body></html> - - %1 connected - Preset loaded automatically - %1 verbunden - Voreinstellung automatisch geladen + + Bypass + Deaktivieren - - Cannot execute script - Skript kann nicht ausgeführt werden + + %1 connected - Preset loaded automatically + %1 verbunden - Voreinstellung automatisch geladen - - The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - Die aktuelle EEL-Datei (bei '%1') existiert nicht mehr auf dem Dateisystem. Bitte öffnen Sie die Datei manuell erneut. + + Cannot execute script + Skript kann nicht ausgeführt werden - - Apps - Apps + + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. + Die aktuelle EEL-Datei (bei '%1') existiert nicht mehr auf dem Dateisystem. Bitte öffnen Sie die Datei manuell erneut. - - Driver status - Treiberstatus + + Apps + Apps - - Relink audio pipeline - Audio-Pipeline neu laden + + Driver status + Treiberstatus - - Reset to defaults - Auf Standard zurücksetzen + + Relink audio pipeline + Audio-Pipeline neu laden - - Load from file - Aus Datei laden + + Reset to defaults + Auf Standard zurücksetzen - - Save to file - In Datei speichern + + Load from file + Aus Datei laden - - Open LiveprogIDE - LiveprogIDE öffnen + + Save to file + In Datei speichern - - What's this... (Select UI element) - Was ist das? (UI-Element wählen) + + Open LiveprogIDE + LiveprogIDE öffnen - - Bass/Misc - Bass/Sonstiges + + What's this... (Select UI element) + Was ist das? (UI-Element wählen) - - Sound Positioning - Sound Positioning + + Bass/Misc + Bass/Sonstiges - - Reverb - Raumklang + + Sound Positioning + Sound Positioning - - Equalizer - Equalizer + + Reverb + Raumklang - - Convolver - Convolver + + Equalizer + Equalizer - - DDC - DDC + + Convolver + Convolver - - Liveprog - Liveprog + + DDC + DDC - - Graphic EQ - Graphic EQ + + Liveprog + Liveprog - - Launch application - Anwendung starten + + Graphic EQ + Graphic EQ - - Reset Configuration - Konfiguration zurücksetzen + + Launch application + Anwendung starten - - Are you sure? - Bist du dir sicher? + + Reset Configuration + Konfiguration zurücksetzen - - Load custom audio.conf - Benutzerdefinierte audio.conf laden + + Are you sure? + Bist du dir sicher? - - Save current audio.conf - Aktuelle audio.conf speichern + + Load custom audio.conf + Benutzerdefinierte audio.conf laden - - Very low - Sehr niedrig + + Save current audio.conf + Aktuelle audio.conf speichern - - Low - Niedrig + + Very low + Sehr niedrig - - Medium - Medium + + Low + Niedrig - - High - Hoch + + Medium + Medium - - Extreme - Extrem + + High + Hoch - - Advanced waveform editing - Erweiterte Wellenform-Bearbeitung + + Extreme + Extrem - - Advanced waveform editing (default: -80;-100;0;0;0;0) + + Advanced waveform editing + Erweiterte Wellenform-Bearbeitung + + + + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. This setting is only in effect if IR optimization is enabled. @@ -1657,7 +1662,7 @@ This setting is only in effect if IR optimization is enabled. 5th value: Channel 3 delay (samples) 6th value: Channel 4 delay (samples) - Erweiterte Wellenformbearbeitung (Standard: -80;-100;0;0;0;0;0) + Erweiterte Wellenformbearbeitung (Standard: -80;-100;0;0;0;0;0) Lege den Schwellenwert für Auto-IR-Zuschneidungen fest und fügen Sie Verzögerung zu einem chopped/minimal-Phasen-transformierten IR hinzu. Diese Einstellung ist nur wirksam, wenn die IR-Optimierung aktiviert ist. @@ -1670,1218 +1675,1290 @@ Diese Einstellung ist nur wirksam, wenn die IR-Optimierung aktiviert ist. 6. Wert: Kanal 4 Verzögerung (Samples) - - + + NewFileWizard - - Create new script - Neues Script erstellen + + Create new script + Neues Script erstellen - - New script - Neues Skript + + New script + Neues Skript - - Define and generate a basic script template - Erstellen Sie eine einfache Skriptvorlage + + Define and generate a basic script template + Erstellen Sie eine einfache Skriptvorlage - - Workspace directory - Arbeitsverzeichnis + + Workspace directory + Arbeitsverzeichnis - - File name - Dateiname + + File name + Dateiname - - Description - Beschreibung + + Description + Beschreibung - - Untitled script - Unbenanntes Skript + + Untitled script + Unbenanntes Skript - - Select directory - Verzeichnis auswählen + + Select directory + Verzeichnis auswählen - - - - Error - Fehler + + + + Error + Fehler - - Workspace directory does not exist - Arbeitsverzeichnis existiert nicht + + Workspace directory does not exist + Arbeitsverzeichnis existiert nicht - - A file with the same name already exists at this loction - Eine Datei mit dem gleichen Namen existiert bereits an diesem Ort + + A file with the same name already exists at this loction + Eine Datei mit dem gleichen Namen existiert bereits an diesem Ort - - File name is empty or contains illegal characters - Dateiname ist leer oder enthält ungültige Zeichen + + File name is empty or contains illegal characters + Dateiname ist leer oder enthält ungültige Zeichen - - + + OverlayMsgProxy - - - - Close - Schließen + + + + Close + Schließen - - + + PaletteEditor - - Palette editor - Paletten-Editor + + Palette editor + Paletten-Editor - - - - - - Select... - Auswählen... + + + + + + Select... + Auswählen... - - Base Color - Basisfarbe + + Base Color + Basisfarbe - - Background Color - Hintergrundfarbe + + Background Color + Hintergrundfarbe - - Foreground Color - Vordergrundfarbe + + Foreground Color + Vordergrundfarbe - - Close - Schließen + + Close + Schließen - - Reset - Zurücksetzen + + Reset + Zurücksetzen - - White Icons - Weiße Symbole + + White Icons + Weiße Symbole - - Selection Color - Auswahlfarbe + + Selection Color + Auswahlfarbe - - Disabled Color - Deaktivierte-Farbe + + Disabled Color + Deaktivierte-Farbe - - + + PresetAddRuleFragment - - Add new rule... - Neue Regel hinzufügen... + + Add new rule... + Neue Regel hinzufügen... - - If - Falls + + If + Falls - - is connected, then load preset - ist verbunden, dann lade Preset + + is connected, then load preset + ist verbunden, dann lade Preset - - + + PresetDialog - - Presets - Voreinstellungen + + Presets + Voreinstellungen - - Preset name - Name + + Preset name + Name - - Adds current config as a preset - Fügt aktuelle Konfiguration als Voreinstellung hinzu + + Adds current config as a preset + Fügt aktuelle Konfiguration als Voreinstellung hinzu - - Save - Speichern + + Save + Speichern - - Rules... - Regeln... + + Rules... + Regeln... - - Remove - Entfernen + + Remove + Entfernen - - Load - Laden + + Load + Laden - - + + PresetFragment - - No presets saved - Keine Voreinstellungen gefunden + + No presets saved + Keine Voreinstellungen gefunden - - Cannot load preset - Kann Voreinstellung nicht laden + + Cannot load preset + Kann Voreinstellung nicht laden - - Selected file does not exist anymore - Die ausgewählte Datei existiert nicht mehr + + Selected file does not exist anymore + Die ausgewählte Datei existiert nicht mehr - - Overwrite - Überschreiben + + Overwrite + Überschreiben - - Save - Speichern + + Save + Speichern - - Rename - Umbenennen + + Rename + Umbenennen - - Delete - Löschen + + Delete + Löschen - - Rename preset - Preset umbenennen + + Rename preset + Preset umbenennen - - Enter new name - Neuen Namen eingeben + + Enter new name + Neuen Namen eingeben - - + + PresetRuleDialog - - Preset auto-switch rules - Auto-Voreinstellung Regeln + + Preset auto-switch rules + Auto-Voreinstellung Regeln - - Auto-switch rules - Auto-Voreinstellung Regeln + + Auto-switch rules + Auto-Voreinstellung Regeln - - Add new rule... - Neue Regel hinzufügen... + + Add new rule... + Neue Regel hinzufügen... - - Delete selection - Auswahl löschen + + Delete selection + Auswahl löschen - - No rules defined - Keine Regeln definiert + + No rules defined + Keine Regeln definiert - - - Cannot add new rule - Kann neue Regel nicht hinzufügen + + + Cannot add new rule + Kann neue Regel nicht hinzufügen - - All connected audio devices have already a rule defined. + + All connected audio devices have already a rule defined. You can only create one rule per device. - Alle verbundenen Audiogeräte haben bereits eine Regel definiert. + Alle verbundenen Audiogeräte haben bereits eine Regel definiert. Du kannst pro Gerät nur eine Regel erstellen. - - You have no presets saved. + + You have no presets saved. Please create one first before adding a new rule. - Du hast keine Voreinstellungen gespeichert. + Du hast keine Voreinstellungen gespeichert. Bitte erstelle zuerst eine vor dem Hinzufügen einer neuen Regel. - - + + PresetRuleTableModel - - Device - Gerät + + Device + Gerät - - Assigned preset - Zugewiesene Voreinstellung + + Assigned preset + Zugewiesene Voreinstellung - - + + QObject - - List All Tabs - Alle Tabs anzeigen + + List All Tabs + Alle Tabs anzeigen - - Detach Group - Gruppe lösen + + Detach Group + Gruppe lösen - - Close Active Tab - Aktiven Tab schließen + + Close Active Tab + Aktiven Tab schließen - - Close Group - Gruppe schließen + + Close Group + Gruppe schließen - - Close Tab - Tab schließen + + Close Tab + Tab schließen - - Something went wrong - Etwas ist schiefgelaufen + + Something went wrong + Etwas ist schiefgelaufen - - Failed to open URL with default browser. + + Failed to open URL with default browser. Please copy this URL manually: - Fehler beim Öffnen der URL mit Standard-Browser. + Fehler beim Öffnen der URL mit Standard-Browser. Bitte kopieren Sie diese URL manuell: - - Flat - Flach + + Flat + Flach - - Pop - Pop + + Pop + Pop - - Rock - Rock + + Rock + Rock - - Jazz - Jazz + + Jazz + Jazz - - Classic - Klassik + + Classic + Klassik - - Bass - Bass + + Bass + Bass - - Clear - Klar + + Clear + Klar - - Hip-Hop - Hip-Hop + + Hip-Hop + Hip-Hop - - Dubstep - Dubstep + + Dubstep + Dubstep - - Movie - Film + + Movie + Film - - Metal - Metal + + Metal + Metal - - Vocal Booster - Stimmenverstärker + + Vocal Booster + Stimmenverstärker - - Hardstyle - Hardstyle + + Hardstyle + Hardstyle - - Acoustic - Akustik + + Acoustic + Akustik - - R&B - R&B + + R&B + R&B - - Electronic - Elektro + + Electronic + Elektro - - Deep Bass - Tiefer Bass + + Deep Bass + Tiefer Bass - - Beats - Beats + + Beats + Beats - - BS2B Custom - BS2B Benutzerdefiniert + + BS2B Custom + BS2B Benutzerdefiniert - - BS2B Weak - BS2B Schwach + + BS2B Weak + BS2B Schwach - - BS2B Strong - BS2B Stark + + BS2B Strong + BS2B Stark - - Out of head - Außerhalb des Kopfes + + Out of head + Außerhalb des Kopfes - - Surround 1 - Surround 1 + + Surround 1 + Surround 1 - - Surround 2 - Surround 2 + + Surround 2 + Surround 2 - - Joe0Bloggs Realistic surround - Joe0Bloggs Realistischer Surround + + Joe0Bloggs Realistic surround + Joe0Bloggs Realistischer Surround - - Default - Standard + + Default + Standard - - Small hall 1 - Kleine Halle 1 + + Small hall 1 + Kleine Halle 1 - - Small hall 2 - Kleine Halle 2 + + Small hall 2 + Kleine Halle 2 - - Medium hall 1 - Mittelgroße Halle 1 + + Medium hall 1 + Mittelgroße Halle 1 - - Medium hall 2 - Mittelgroße Halle 2 + + Medium hall 2 + Mittelgroße Halle 2 - - Large hall 1 - Große Halle 1 + + Large hall 1 + Große Halle 1 - - Large hall 2 - Große Halle 2 + + Large hall 2 + Große Halle 2 - - Small room 1 - Kleiner Raum 1 + + Small room 1 + Kleiner Raum 1 - - Small room 2 - Kleiner Raum 2 + + Small room 2 + Kleiner Raum 2 - - Medium room 1 - Mittelgroßer Raum 1 + + Medium room 1 + Mittelgroßer Raum 1 - - Medium room 2 - Mittelgroßer Raum 2 + + Medium room 2 + Mittelgroßer Raum 2 - - Large room 1 - Großer Raum 1 + + Large room 1 + Großer Raum 1 - - Large room 2 - Großer Raum 2 + + Large room 2 + Großer Raum 2 - - Medium ER 1 - Mittelgroßer ER 1 + + Medium ER 1 + Mittelgroßer ER 1 - - Medium ER 2 - Mittelgroßer ER 2 + + Medium ER 2 + Mittelgroßer ER 2 - - Plate high - Platte hoch + + Plate high + Platte hoch - - Plate low - Platte tief + + Plate low + Platte tief - - Long reverb 1 - Langer Hall 1 + + Long reverb 1 + Langer Hall 1 - - Long reverb 2 - Langer Hall 2 + + Long reverb 2 + Langer Hall 2 - - error - Fehler + + error + Fehler - - creating - wird erstellt + + creating + wird erstellt - - suspended - unterbrochen + + suspended + unterbrochen - - - idle - inaktiv + + + idle + inaktiv - - - running - aktiv + + + running + aktiv - - not connected - nicht verbunden + + not connected + nicht verbunden - - JamesDSP is an advanced audio processing engine available for Linux and Android systems. - JamesDSP ist eine erweiterte Audioverarbeitungs-Engine für Linux und Android-Systeme. + + JamesDSP is an advanced audio processing engine available for Linux and Android systems. + JamesDSP ist eine erweiterte Audioverarbeitungs-Engine für Linux und Android-Systeme. - - Auto-start permission has been denied - Autostart-Berechtigung wurde verweigert + + Auto-start permission has been denied + Autostart-Berechtigung wurde verweigert - - Please run 'flatpak permission-reset %1' and reenable auto-start. - Bitte führe 'flatpak permission-reset %1' aus und aktiviere die Autostart-Einstellung erneut. + + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. + Bitte führe 'flatpak permission-set background background %1 yes' aus und aktiviere die Autostart-Einstellung erneut. - - Unknown error - Unbekannter Fehler + + Unknown error + Unbekannter Fehler - - Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 - Bitte stellen sicher, dass eine XDG Background Portal Implementierung verfügbar und aktiv ist, um Autostart zu nutzen. %1 + + Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 + Bitte stellen sicher, dass eine XDG Background Portal Implementierung verfügbar und aktiv ist, um Autostart zu nutzen. %1 - - + + SettingsFragment - - Settings - Einstellungen + + Settings + Einstellungen + + + + Category + Kategorie + + + + Interface + Benutzeroberfläche + + + + Audio processing + Audioverarbeitung + + + + Default paths + Standardpfad + + + + Devices + Geräte + + + + Network + Netzwerk + + + + Tray icon + Taskleistensymbol + + + + Context menu + Kontextmenü + + + + Theme + Erscheinungsbild + + + + Edit + Bearbeiten - - Category - Kategorie + + Color scheme + Farbschema - - Interface - Benutzeroberfläche + + Equalizer + Equalizer - - Default paths - Standardpfad + + Always display handles + Griffe immer anzeigen - - Devices - Geräte + + Convolver benchmarking + Convolver-Benchmarking - - Network - Netzwerk + + Benchmark now + Benchmark starten - - Tray icon - Taskleistensymbol + + Clear cached data + Cache löschen - - Context menu - Kontextmenü + + Enable benchmarking on boot + Benchmarking beim Start aktivieren - - Theme - Erscheinungsbild + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + - - Edit - Bearbeiten + + Workarounds + - - Color scheme - Farbschema + + Allow volume control of the virtual sink device + - - Equalizer - Equalizer + + Restart required to apply changes. May cause audio loss in some cases. + - - Always display handles - Griffe immer anzeigen + + Impluse responses + Impulsantworten - - Impluse responses - Impulsantworten + + VDCs + VDCs - - VDCs - VDCs + + Liveprog scripts + Liveprog-Skripte - - Liveprog scripts - Liveprog-Skripte + + Save + Speichern - - Save - Speichern + + Built-in assets + Integrierte Assets - - Built-in assets - Integrierte Assets + + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> + <html><head/><body><p>Diese Option wird bei jedem Start überprüfen, ob eines der vorinstallierten EEL-Skripte fehlt. Wenn dies der Fall ist, werden die fehlenden Datei(en) automatisch aus den Ressourcen wiederhergestellt. (Es wird sie nicht überschreiben, wenn sie bereits existieren!)</p></body></html> - - <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - <html><head/><body><p>Diese Option wird bei jedem Start überprüfen, ob eines der vorinstallierten EEL-Skripte fehlt. Wenn dies der Fall ist, werden die fehlenden Datei(en) automatisch aus den Ressourcen wiederhergestellt. (Es wird sie nicht überschreiben, wenn sie bereits existieren!)</p></body></html> + + Extract bundled assets on startup + Entpacke gebündelte Assets beim Start - - Extract bundled assets on startup - Entpacke gebündelte Assets beim Start + + Extract now + Jetzt entpacken - - Extract now - Jetzt entpacken + + Select sink/device to be processed + Wählen Sink/Gerät zum Verarbeiten aus - - Select sink/device to be processed - Wählen Sink/Gerät zum Verarbeiten aus + + Use default output device (recommended) + Standard-Ausgabegerät verwenden (empfohlen) - - Use default output device (recommended) - Standard-Ausgabegerät verwenden (empfohlen) + + Manually select device + Gerät manuell auswählen - - Manually select device - Gerät manuell auswählen + + Device + Gerät - - Device - Gerät + + Blocklisted apps + Blockierte Apps - - Blocklisted apps - Blockierte Apps + + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. + Der Abschnitt 'Apps' ist über das Drei-Punkte-Menü im Hauptfenster zugänglich, womit du Apps blockieren kannst, die von JamesDSP nicht verarbeitet werden sollen. - - In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - Der Abschnitt 'Apps' ist über das Drei-Punkte-Menü im Hauptfenster zugänglich, womit du Apps blockieren kannst, die von JamesDSP nicht verarbeitet werden sollen. + + Allowlist mode (apps need to be explicitly enabled instead) + Erlaubnisliste-Modus (Apps müssen stattdessen explizit aktiviert werden) - - Allowlist mode (apps need to be explicitly enabled instead) - Erlaubnisliste-Modus (Apps müssen stattdessen explizit aktiviert werden) + + Clear list + Liste leeren - - Clear list - Liste leeren + + AutoEQ database + AutoEQ-Datenbank - - AutoEQ database - AutoEQ-Datenbank + + Status: + Status: - - Status: - Status: + + unknown + unbekannt - - unknown - unbekannt + + Manage local database + Lokale Datenbank verwalten - - Manage local database - Lokale Datenbank verwalten + + Run in background (tray icon) + Im Hintergrund ausführen (Tray-Symbol) - - Run in background (tray icon) - Im Hintergrund ausführen (Tray-Symbol) + + No, shutdown audio effects when closing app + Nein, Audio-Effekte beim Schließen der App stoppen - - No, shutdown audio effects when closing app - Nein, Audio-Effekte beim Schließen der App stoppen + + Yes, minimize to tray icon when closing app + Ja, zum Tray-Symbol minimieren, wenn die App geschlossen wird - - Yes, minimize to tray icon when closing app - Ja, zum Tray-Symbol minimieren, wenn die App geschlossen wird + + Auto-start + Autostart - - Auto-start - Autostart + + Start minimized on boot + Beim Booten minimiert starten - - Start minimized on boot - Beim Booten minimiert starten + + Systray not supported on this system + Systray wird nicht von diesem System unterstützt - - Systray not supported on this system - Systray wird nicht von diesem System unterstützt + + Visit Github repo + Github-Repo besuchen - - Visit Github repo - Github-Repo besuchen + + Run setup wizard + Setup-Assistent ausführen - - Run setup wizard - Setup-Assistent ausführen + + Close + Schließen - - Close - Schließen + + + benchmark data loaded + Benchmark-Daten geladen - - Unknown (%1) - Unbekannt (%1) + + Unknown (%1) + Unbekannt (%1) - - installed - installiert + + installed + installiert - - not installed - nicht installiert + + not installed + nicht installiert - - Override liveprog scripts? - Liveprog-Skripte überschreiben? + + + no benchmark data stored + Keine Benchmark-Daten gespeichert - - Do you want to override existing default liveprog scripts? + + Override liveprog scripts? + Liveprog-Skripte überschreiben? + + + + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - Möchtest du bestehende Liveprog-Standardskripte überschreiben? + Möchtest du bestehende Liveprog-Standardskripte überschreiben? Wenn sie geändert wurden, werden sie zurückgesetzt. - - Extract assets - Assets extrahieren + + Extract assets + Assets extrahieren - - %1 files have been restored - %1 Dateien wurden exportiert + + %1 files have been restored + %1 Dateien wurden exportiert - - You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. + + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - Du bist dabei, den Erlaubnislisten-Modus zu aktivieren. JamesDSP wird alle Anwendungen standardmäßig nicht mehr verarbeiten, solange dieser Modus aktiv ist. Sie müssen Apps explizit im Menü 'Apps' zulassen. + Du bist dabei, den Erlaubnislisten-Modus zu aktivieren. JamesDSP wird alle Anwendungen standardmäßig nicht mehr verarbeiten, solange dieser Modus aktiv ist. Sie müssen Apps explizit im Menü 'Apps' zulassen. - - Are you sure? - Bist du dir sicher? + + Are you sure? + Bist du dir sicher? + + + + This action will reset your current blocklist or allowlist. Do you want to continue? + Diese Aktion wird deine aktuelle Sperrliste oder Erlaubnisliste zurücksetzen. Möchtest du fortfahren? + + + + Warning + Warnung + + + + Do you really want to restore the default menu layout? + Möchtest du das Standard-Menülayout wirklich wiederherstellen? - - This action will reset your current blocklist or allowlist. Do you want to continue? - Diese Aktion wird deine aktuelle Sperrliste oder Erlaubnisliste zurücksetzen. Möchtest du fortfahren? + + waiting for result... + Warten auf Ergebnisse... - - Warning - Warnung + + Cache cleared + Cache geleert - - Do you really want to restore the default menu layout? - Möchtest du das Standard-Menülayout wirklich wiederherstellen? + + Benchmark data has been cleared. Restart this app to fully apply the changes. + Benchmark-Daten wurden gelöscht. Starte diese App neu, um die Änderungen vollständig zu übernehmen. - - + + SingleInstanceMonitor - - Another instance of JamesDSP is already active and has been put in the foreground. - Eine weitere Instanz von JamesDSP ist bereits aktiv und wurde in den Vordergrund gestellt. + + Another instance of JamesDSP is already active and has been put in the foreground. + Eine weitere Instanz von JamesDSP ist bereits aktiv und wurde in den Vordergrund gestellt. - - + + StatusDialog - - Status - Status + + Status + Status - - Application version - Anwendungsversion + + Application version + Anwendungsversion - - JamesDSP core version - JamesDSP-Core Version + + JamesDSP core version + JamesDSP-Core Version - - Processing state - Verarbeitungsstatus + + Processing state + Verarbeitungsstatus - - Audio format - Audio-Format + + Audio format + Audio-Format - - Sampling rate - Abtastrate + + Sampling rate + Abtastrate - - + + StatusFragment - - Processing - Verarbeitet + + Processing + Verarbeitet - - Not processing - Wird nicht verarbeitet + + Not processing + Wird nicht verarbeitet - - + + TrayIcon - - &Bypass - &Deaktivieren + + &Bypass + &Deaktivieren - - &Presets - &Voreinstellungen + + &Presets + &Voreinstellungen - - &Convolver bookmarks - &Convolver-Lesezeichen + + &Convolver bookmarks + &Convolver-Lesezeichen - - JamesDSP for Linux - JamesDSP für Linux + + JamesDSP for Linux + JamesDSP für Linux - - No presets found - Keine Voreinstellungen gefunden + + No presets found + Keine Voreinstellungen gefunden - - No impulse responses found - Keine Impulsantworten gefunden + + No impulse responses found + Keine Impulsantworten gefunden - - &Reload JamesDSP - &JamesDSP neu laden + + &Reload JamesDSP + &JamesDSP neu laden - - - &Quit - &Beenden + + + &Quit + &Beenden - - - &Show/hide window - Fenster ein-/au&sblenden + + + &Show/hide window + Fenster ein-/au&sblenden - - Re&verberation presets - Raum&klang-Voreinstellungen + + Re&verberation presets + Raum&klang-Voreinstellungen - - Off - Aus + + Off + Aus - - &Equalizer presets - &Equalizer-Voreinstellungen + + &Equalizer presets + &Equalizer-Voreinstellungen - - &Crossfeed - &Crossfeed + + &Crossfeed + &Crossfeed - - + + VariableItemModel - - Parameter - Parameter + + Parameter + Parameter - - Value - Wert + + Value + Wert - - + + VariableWatchWidget - - Form - Form + + Form + Form - - ms - ms + + ms + ms - - Refresh every - Aktualisiere alle + + Refresh every + Aktualisiere alle - - Click a variable to manipulate its value. - Klicke auf eine Variable, um den Wert zu manipulieren. + + Click a variable to manipulate its value. + Klicke auf eine Variable, um den Wert zu manipulieren. - - - Error - Fehler + + + Error + Fehler - - This variable is a string. Currently only numerical value types can be modified. - Diese Variable ist eine Zeichenkette. Momentan können nur numerische Typen modifiziert werden. + + This variable is a string. Currently only numerical value types can be modified. + Diese Variable ist eine Zeichenkette. Momentan können nur numerische Typen modifiziert werden. - - Manipulate variable - Variable manipulieren + + Manipulate variable + Variable manipulieren - - Enter a new value for variable '%1': - Neuen Wert für Variable '%1' eingeben: + + Enter a new value for variable '%1': + Neuen Wert für Variable '%1' eingeben: - - Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. - Konnte Variable '%1' nicht manipulieren. Entweder existiert sie nicht mehr oder sie kann nicht verändert werden. + + Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. + Konnte Variable '%1' nicht manipulieren. Entweder existiert sie nicht mehr oder sie kann nicht verändert werden. - - + + VdcDatabaseModel - - Company - Firma + + Company + Firma - - Model - Modell + + Model + Modell - - + + ads::CDockAreaTitleBar - - Detach Group - Gruppe lösen + + Detach Group + Gruppe lösen - - Close Group - Gruppe schließen + + Close Group + Gruppe schließen - - Close Other Groups - Andere Gruppen schließen + + Close Other Groups + Andere Gruppen schließen - - + + ads::CDockManager - - Show View - Ansicht anzeigen + + Show View + Ansicht anzeigen - - + + ads::CDockWidgetTab - - Detach - Trennen + + Detach + Trennen - - Close - Schließen + + Close + Schließen - - Close Others - Andere schließen + + Close Others + Andere schließen - - + + menueditor - - Available entries - Verfügbare Einträge + + Available entries + Verfügbare Einträge - - Move Up - Nach oben bewegen + + Move Up + Nach oben bewegen - - Moves the selected toolbar item up - Verschiebt das ausgewählte Element der Symbolleiste nach oben + + Moves the selected toolbar item up + Verschiebt das ausgewählte Element der Symbolleiste nach oben - - &Up - H&och + + &Up + H&och - - Move Down - Nach unten bewegen + + Move Down + Nach unten bewegen - - moves the selected toolbar item down - Verschiebt das ausgewählte Element der Symbolleiste nach unten + + moves the selected toolbar item down + Verschiebt das ausgewählte Element der Symbolleiste nach unten - - &Down - R&unter + + &Down + R&unter - - Insert - Einfügen + + Insert + Einfügen - - Adds the selected menu action to the toolbar - Fügt die ausgewählte Menü-Aktion zur Symbolleiste hinzu + + Adds the selected menu action to the toolbar + Fügt die ausgewählte Menü-Aktion zur Symbolleiste hinzu - - &Add - &Hinzufügen + + &Add + &Hinzufügen - - Remove - Entfernen + + Remove + Entfernen - - Removes the selected item from the active toolbar - Entfernt das ausgewählte Element aus der aktiven Symbolleiste + + Removes the selected item from the active toolbar + Entfernt das ausgewählte Element aus der aktiven Symbolleiste - - &Del - &Entf + + &Del + &Entf - - - Reset - Zurücksetzen + + + Reset + Zurücksetzen - - Context menu contents - Einträge des Kontextmenüs + + Context menu contents + Einträge des Kontextmenüs - + diff --git a/resources/translations/jamesdsp_el.ts b/resources/translations/jamesdsp_el.ts index 18b3b365..09b8bcaa 100644 --- a/resources/translations/jamesdsp_el.ts +++ b/resources/translations/jamesdsp_el.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_en.ts b/resources/translations/jamesdsp_en.ts index db9a2c32..10ea060b 100644 --- a/resources/translations/jamesdsp_en.ts +++ b/resources/translations/jamesdsp_en.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_es.qm b/resources/translations/jamesdsp_es.qm index 6f52e68f..d3222ad3 100644 Binary files a/resources/translations/jamesdsp_es.qm and b/resources/translations/jamesdsp_es.qm differ diff --git a/resources/translations/jamesdsp_es.ts b/resources/translations/jamesdsp_es.ts index 142c179b..0569b52a 100644 --- a/resources/translations/jamesdsp_es.ts +++ b/resources/translations/jamesdsp_es.ts @@ -1,1645 +1,1650 @@ - + AeqItemDelegate - - 2nd choice - 2ª opción + + 2nd choice + 2ª opción - - 3rd choice - 3ª opción + + 3rd choice + 3ª opción - - %1th choice - + + %1th choice + - - + + AeqPreviewPlot - - Frequency (Hz) - Frecuencia (Hz) + + Frequency (Hz) + Frecuencia (Hz) - - Amplitude (dBr) - Amplitud (dB) + + Amplitude (dBr) + Amplitud (dB) - - Target - Destino + + Target + Destino - - Raw (smoothed) - + + Raw (smoothed) + - - Error (smoothed) - + + Error (smoothed) + - - Equalization - Equalización + + Equalization + Equalización - - Raw - + + Raw + - - Error - Error + + Error + Error - - Equalized - + + Equalized + - - Equalization (normalized) - Equalización (normalizado) + + Equalization (normalized) + Equalización (normalizado) - - Move to top left - Mover arriba a la izquierda + + Move to top left + Mover arriba a la izquierda - - Move to top center - Mover al centro superior + + Move to top center + Mover al centro superior - - Move to top right - Mover arriba a la derecha + + Move to top right + Mover arriba a la derecha - - Move to bottom right - Mover abajo a la derecha + + Move to bottom right + Mover abajo a la derecha - - Move to bottom left - Mover abajo a la izquierda + + Move to bottom left + Mover abajo a la izquierda - - + + AeqSelector - - AutoEQ Database - + + AutoEQ Database + - - Filter... - Filtro... + + Filter... + Filtro... - - Local database version - Versión de la base de datos de archivos + + Local database version + Versión de la base de datos de archivos - - Checked out at commit: - Verificado en commit: + + Checked out at commit: + Verificado en commit: - - Last commit created at: - Último commit creado en: + + Last commit created at: + Último commit creado en: - - Package generated at: - Paquete generado en: + + Package generated at: + Paquete generado en: - - Display settings - Ajustes de pantalla + + Display settings + Ajustes de pantalla - - Dark mode - Modo oscuro + + Dark mode + Modo oscuro - - Update database - Actualizar base de datos + + Update database + Actualizar base de datos - - Download latest AutoEQ package - + + Download latest AutoEQ package + - - Delete database - Borrar base de datos + + Delete database + Borrar base de datos - - Cleanup local database and exit - Limpiar base de datos local y salir + + Cleanup local database and exit + Limpiar base de datos local y salir - - No measurement selected - Sin datos de medición + + No measurement selected + Sin datos de medición - - Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. + + Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. This will override your current GraphicEQ configuration. - + - - - Manage database - Administrar base de datos + + + Manage database + Administrar base de datos - - No measurements found - No hay módulo de medición + + No measurements found + No hay módulo de medición - - AutoEQ database - + + AutoEQ database + - - Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. + + Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. An internet connection is required during this step. Do you want to continue and enable this feature? - Antes de usar la integración AutoEQ, necesita descargar una versión minimizada de su base de datos de compensación para auriculares (~50MB) a su disco duro. + Antes de usar la integración AutoEQ, necesita descargar una versión minimizada de su base de datos de compensación para auriculares (~50MB) a su disco duro. Se requiere una conexión a Internet durante este paso. ¿Desea continuar y habilitar esta característica? - - - Failed to retrieve version information - Error al recuperar la información + + + Failed to retrieve version information + Error al recuperar la información - - - Failed to retrieve package information from the remote repository: + + + Failed to retrieve package information from the remote repository: Status code: %0 Reason: %1 - + - - Return to database - + + Return to database + - - No new updates available - No hay actualizaciones disponibles + + No new updates available + No hay actualizaciones disponibles - - The local database is currently up-to-date; no new updates are available at this time. + + The local database is currently up-to-date; no new updates are available at this time. It may take up to 24 hours for new changes in the AutoEQ upstream repo to become available for download here. Packages are generated at 4am UTC daily. Do you want to re-install the latest database update anyway? - La base de datos local está actualizada actualmente; no hay nuevas actualizaciones disponibles en este momento. + La base de datos local está actualizada actualmente; no hay nuevas actualizaciones disponibles en este momento. Puede tardar hasta 24 horas en que los nuevos cambios en el repositorio principal de AutoEQ estén disponibles para su descarga aquí. Los paquetes se generan a las 4am UTC diariamente. ¿Desea volver a instalar la última actualización de la base de datos de todos modos? - - Database cleared - + + Database cleared + - - The database has been removed from your hard disk - La base de datos ha sido eliminada del disco duro + + The database has been removed from your hard disk + La base de datos ha sido eliminada del disco duro - - Error - Error + + Error + Error - - Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. - No se puede recuperar el archivo correspondiente de la base de datos. Por favor, actualice la base de datos local, ya que parece estar incompleta. + + Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. + No se puede recuperar el archivo correspondiente de la base de datos. Por favor, actualice la base de datos local, ya que parece estar incompleta. - - + + AppItem - - (unset) - + + (unset) + - - - - Add to blocklist - Añadir a la lista negra + + + + Add to blocklist + Añadir a la lista negra - - - Add to allowlist - + + + Add to allowlist + - - Rate: %1Hz - + + Rate: %1Hz + - - Latency: %1ms - + + Latency: %1ms + - - Format: %1 - + + Format: %1 + - - + + AppManagerFragment - - Active apps - + + Active apps + - - No apps are playing audio - + + No apps are playing audio + - - + + AutostartManager - - Manage auto-start permission for JamesDSP - + + Manage auto-start permission for JamesDSP + - - + + CodeOutline - - Annotations - + + Annotations + - - Functions - + + Functions + - - + + ConsoleOutput - - Auto-scroll - + + Auto-scroll + - - Copy selection - + + Copy selection + - - Copy all - + + Copy all + - - Clear - + + Clear + - - + + EELEditor - - EEL Scripting IDE - + + EEL Scripting IDE + - - File - + + File + - - Edit - + + Edit + - - Navigation - + + Navigation + - - View - + + View + - - Help - + + Help + - - Open - + + Open + - - Open script - + + Open script + - - Ctrl+O - + + Ctrl+O + - - - Close file - + + + Close file + - - Ctrl+Shift+W - Ctrl+Mayús+W + + Ctrl+Shift+W + Ctrl+Mayús+W - - Save - Guardar + + Save + Guardar - - Ctrl+S - Ctrl+S + + Ctrl+S + Ctrl+S - - Save as... - Guardar como... + + Save as... + Guardar como... - - Ctrl+Shift+S - Ctrl+Mayús+S + + Ctrl+Shift+S + Ctrl+Mayús+S - - Undo - Deshacer + + Undo + Deshacer - - Ctrl+Z - Ctrl+Z + + Ctrl+Z + Ctrl+Z - - Redo - Rehacer + + Redo + Rehacer - - Ctrl+Shift+Z - Ctrl+Mayús+Z + + Ctrl+Shift+Z + Ctrl+Mayús+Z - - Find/Replace... - Buscar/Reemplazar... + + Find/Replace... + Buscar/Reemplazar... - - Ctrl+F - Ctrl+F + + Ctrl+F + Ctrl+F - - - Go to line... - Ir a la línea... + + + Go to line... + Ir a la línea... - - Go to line - Ir a la línea + + Go to line + Ir a la línea - - Ctrl+L - + + Ctrl+L + - - - Jump to function... - + + + Jump to function... + - - Ctrl+M - + + Ctrl+M + - - Go to @init - + + Go to @init + - - F2 - F2 + + F2 + - - Go to @sample - + + Go to @sample + - - F3 - F3 + + F3 + - - Automatic Parentheses - + + Automatic Parentheses + - - Replace Tabs with Spaces - Reemplazar tabuladores por espacios + + Replace Tabs with Spaces + Reemplazar tabuladores por espacios - - EEL2 documentation - + + EEL2 documentation + - - F1 - F1 + + F1 + - - Run code - + + Run code + - - F5 - F5 + + F5 + - - New - Nuevo + + New + Nuevo - - New script wizard - + + New script wizard + - - Ctrl+N - Ctrl+N + + Ctrl+N + Ctrl+N - - - Freeze - Congelar + + + Freeze + Congelar - - F6 - F6 + + F6 + F6 - - Loaded projects - + + Loaded projects + - - Code outline - + + Code outline + - - Variable view - + + Variable view + - - Console output - Salida de la consola + + Console output + Salida de la consola - - '%1' started compiling at %2 - + + '%1' started compiling at %2 + - - <br>Compilation stopped at %2 - + + <br>Compilation stopped at %2 + - - Script initialization took %1ms - + + Script initialization took %1ms + - - Error - Error + + Error + Error - - Cannot write file - No se puede escribir archivo + + Cannot write file + No se puede escribir archivo - - Open EEL script - + + Open EEL script + - - EEL2 Script (*.eel) - EEL2 Script (*.eel) + + EEL2 Script (*.eel) + EEL2 Script (*.eel) - - Save as - Guardar como + + Save as + Guardar como - - Cannot execute - No se puede ejecutar + + Cannot execute + No se puede ejecutar - - No script file opened. Please open one first and try again. - No se ha abierto ningún archivo de script. Por favor, abra uno primero y vuelva a intentarlo. + + No script file opened. Please open one first and try again. + No se ha abierto ningún archivo de script. Por favor, abra uno primero y vuelva a intentarlo. - - Enter line number: - + + Enter line number: + - - Enter function name: - + + Enter function name: + - - + + EmptyView - - No project loaded - + + No project loaded + - - + + FileDownloaderDialog - - Package manager - Gestor de paquetes + + Package manager + Gestor de paquetes - - Downloading package... - Descargando paquetes... + + Downloading package... + Descargando paquetes... - - + + FileSelectionWidget - - Refresh - Actualizar + + Refresh + Actualizar - - Bookmark - Marcador + + Bookmark + Marcador - - Rename - Renombrar + + Rename + Renombrar - - Remove - Eliminar + + Remove + Eliminar - - No supported files found - + + No supported files found + - - + + FindReplaceForm - - Form - + + Form + - - &Find: - + + &Find: + - - R&eplace with: - + + R&eplace with: + - - Previous - Anterior + + Previous + Anterior - - Next - Siguiente + + Next + Siguiente - - &Options - &Opciones + + &Options + &Opciones - - R&egular expression - + + R&egular expression + - - &Whole words - + + &Whole words + - - &Case sensitive - + + &Case sensitive + - - &Close - + + &Close + - - &Replace - + + &Replace + - - Replace &All - + + Replace &All + - - no match found - + + no match found + - - Replaced %1 occurrence(s) - + + Replaced %1 occurrence(s) + - - + + FirstLaunchWizard - - Welcome! - ¡Bienvenido! + + Welcome! + ¡Bienvenido! - - Thank you for installing this app! + + Thank you for installing this app! However, before you can begin playing around with JamesDSP for Linux, we'll need to make some adjustments in order to ensure the best possible experience with JDSP. - + - - - - Next > - + + + + Next > + - - Run in background? - ¿Ejecutar en segundo plano? + + Run in background? + ¿Ejecutar en segundo plano? - - No, don't apply effects in background - + + No, don't apply effects in background + - - Yes, minimize to tray icon - Sí, minimizar al icono de la bandeja + + Yes, minimize to tray icon + Sí, minimizar al icono de la bandeja - - Start minimized on boot - Iniciar minimizado al arrancar + + Start minimized on boot + Iniciar minimizado al arrancar - - That's it! - + + That's it! + - - You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! - + + You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! + - - Telegram - Telegram + + Telegram + Telegram - - Close - Cerrar + + Close + Cerrar - - + + FlatTabWidget - - FlatTabWidget - + + FlatTabWidget + - - + + GraphicEQFilterGUI - - Enable Graphic EQ - + + Enable Graphic EQ + - - Freq. - + + Freq. + - - Gain - + + Gain + - - AutoEQ database... - + + AutoEQ database... + - - 15-band - + + 15-band + - - 31-band - + + 31-band + - - variable - variable + + variable + variable - - Import - Importar + + Import + Importar - - Export - Exportar + + Export + Exportar - - Invert response - + + Invert response + - - Normalize response - + + Normalize response + - - Reset response - + + Reset response + - - - Import EqualizerAPO settings - + + + Import EqualizerAPO settings + - - Import frequency response - + + Import frequency response + - - - CSV frequency response (*.csv) - + + + CSV frequency response (*.csv) + - - - - All files (*.*) - + + + + All files (*.*) + - - Import EqualizerAPO graphic EQ preset - + + Import EqualizerAPO graphic EQ preset + - - EqualizerAPO GraphicEQ (*.txt) - + + EqualizerAPO GraphicEQ (*.txt) + - - Export frequency response - + + Export frequency response + - - + + GzipDownloaderDialog - - Error - Error + + Error + Error - - %1MB of %2MB downloaded - + + %1MB of %2MB downloaded + - - Decompressing package... - + + Decompressing package... + - - + + LiveprogSelectionWidget - - - No script has been loaded - + + + No script has been loaded + - - Enable - Habilitar + + Enable + Habilitar - - Reset - Reiniciar + + Reset + Reiniciar - - - Create new script - Crear nuevo script + + + Create new script + Crear nuevo script - - - Error - Error + + + Error + Error - - Cannot restore defaults. + + Cannot restore defaults. No EEL file is currently loaded. - No se pueden restaurar los valores predeterminados. + No se pueden restaurar los valores predeterminados. No hay archivo EEL actualmente cargado. - - Selected EEL file does not exist anymore. + + Selected EEL file does not exist anymore. Please select another one - El archivo EEL seleccionado ya no existe. + El archivo EEL seleccionado ya no existe. Por favor, seleccione otro - - Edit script - Editar script + + Edit script + Editar script - - No customizable parameters - No hay parámetros personalizables + + No customizable parameters + No hay parámetros personalizables - - + + MainWindow - - JamesDSP for Linux - JamesDSP para Linux + + JamesDSP for Linux + JamesDSP para Linux - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> + - - Dynamic bass boost - Refuerzo de bajos dinámico + + Dynamic bass boost + Refuerzo de bajos dinámico - - Maximum gain - Ganancia máxima + + Maximum gain + Ganancia máxima - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> + - - Analog modelling - Modelo analógico + + Analog modelling + Modelo analógico - - Preamp (Harmonics) - + + Preamp (Harmonics) + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> + - - Limiter/Master - Limitador/Maestro + + Limiter/Master + Limitador/Maestro - - Threshold - Umbral + + Threshold + Umbral - - Release - + + Release + - - Post gain - + + Post gain + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> + - - Dynamic range compander - + + Dynamic range compander + - - Time constant - + + Time constant + - - Granularity - + + Granularity + - - Time-frequency transforms - + + Time-frequency transforms + - - Uniform (Short-time Fourier) - + + Uniform (Short-time Fourier) + - - Multiresolution (Continuous wavelet) - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> + - - Multiresolution (Time domain) - + + + Crossfeed + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - + + Mode + - - - Crossfeed - + + Custom BS2B parameters + - - Mode - + + Cut frequency + - - Custom BS2B parameters - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> + - - Cut frequency - + + Soundstage wideness + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + + Widen level + - - Soundstage wideness - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> + - - Widen level - + + Enable reverberation + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + + Presets + - - Enable reverberation - + + + ... + - - Presets - + + Oversampling factor + - - - ... - + + Early reflection factor + - - Oversampling factor - + + Early reflection amount + - - Early reflection factor - + + Early reflection width + - - Early reflection amount - + + Lowpass cutoff (Input) + - - Early reflection width - + + Lowpass cutoff (Bass) + - - Lowpass cutoff (Input) - + + Lowpass cutoff (Damp) + - - Lowpass cutoff (Bass) - + + Lowpass cutoff (Output) + - - Lowpass cutoff (Damp) - + + Final wet mix + - - Lowpass cutoff (Output) - + + Final dry mix + - - Final wet mix - + + Reverb wetness + - - Final dry mix - + + Width L/R mix + - - Reverb wetness - + + LFO wander amount + - - Width L/R mix - + + LFO spin amount + - - LFO wander amount - + + Time decay + - - LFO spin amount - + + Delay + Retraso - - Time decay - + + Bass boost + Refuerzo de graves - - Delay - Retraso + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> + - - Bass boost - Refuerzo de graves + + FIR Minimum phase + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + + IIR 4 order + - - FIR Minimum phase - + + IIR 6 order + - - IIR 4 order - + + IIR 8 order + - - IIR 6 order - + + IIR 10 order + - - IIR 8 order - + + IIR 12 order + - - IIR 10 order - + + Enable EQ + Activar EQ - - IIR 12 order - + + Multiresolution (Continuous wavelet, incomplete dual frame) + - - Enable EQ - Activar EQ + + Pseudo multiresolution (Undersampling frame) + - - Presets... - + + Pseudo multiresolution (Time domain, zero latency) + - - Filter type - Tipo de filtro + + Presets... + - - Interpolator - + + Filter type + Tipo de filtro - - <html><head/><body><p>Interpolation mode</p></body></html> - + + Interpolator + - - Piecewise Cubic Hermite Interpolating Polynomial - + + <html><head/><body><p>Interpolation mode</p></body></html> + - - Modified Hiroshi Akima spline - Curva modificada de Hiroshi Akima + + Piecewise Cubic Hermite Interpolating Polynomial + - - Reset EQ - + + Modified Hiroshi Akima spline + Curva modificada de Hiroshi Akima - - Fixed bands - + + Reset EQ + - - Flexible bands - + + Fixed bands + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - + + Flexible bands + - - - Filesystem - Sistema de archivos + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> + - - Bookmarks - Marcadores + + + Filesystem + Sistema de archivos - - Enable convolver - Habilitar convolver + + Bookmarks + Marcadores - - IR optimization - + + Enable convolver + Habilitar convolver - - Original - + + IR optimization + - - Shrink - + + Original + - - Minimum phase transform and shrink - + + Shrink + - - Adv. waveform editing - + + Minimum phase transform and shrink + - - Edit - + + Adv. waveform editing + - - Channels: - Canales: + + Edit + - - Samples: - + + Channels: + Canales: - - No selection - + + Samples: + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + + No selection + - - Database - Base de datos + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> + - - Create - Crear + + Database + Base de datos - - Create your custom DDC files using DDCToolbox - Crea tus archivos DDC personalizados usando DDCToolbox + + Create + Crear - - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + + Create your custom DDC files using DDCToolbox + Crea tus archivos DDC personalizados usando DDCToolbox - - View installation instructions - Ver instrucciones de instalación + + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + - - Enable ViPER-DDC - Activar ViPER-DDC + + View installation instructions + Ver instrucciones de instalación - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + + Enable ViPER-DDC + Activar ViPER-DDC - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> + - - Custom Presets - Preajustes Personalizados + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + + Custom Presets + Preajustes Personalizados - - Settings - Ajustes + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + + Settings + Ajustes - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> + - - Bypass - By-pass + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> + - - %1 connected - Preset loaded automatically - + + Bypass + By-pass - - Cannot execute script - No se puede ejecutar script + + %1 connected - Preset loaded automatically + - - The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + + Cannot execute script + No se puede ejecutar script - - Apps - + + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. + - - Driver status - Estado del driver + + Apps + - - Relink audio pipeline - Volver a enlazar tubería de audio + + Driver status + Estado del driver - - Reset to defaults - + + Relink audio pipeline + Volver a enlazar tubería de audio - - Load from file - + + Reset to defaults + - - Save to file - + + Load from file + - - Open LiveprogIDE - + + Save to file + - - What's this... (Select UI element) - + + Open LiveprogIDE + - - Bass/Misc - + + What's this... (Select UI element) + - - Sound Positioning - + + Bass/Misc + - - Reverb - + + Sound Positioning + - - Equalizer - + + Reverb + - - Convolver - + + Equalizer + - - DDC - + + Convolver + - - Liveprog - + + DDC + - - Graphic EQ - + + Liveprog + - - Launch application - + + Graphic EQ + - - Reset Configuration - + + Launch application + - - Are you sure? - ¿Estás seguro? + + Reset Configuration + - - Load custom audio.conf - + + Are you sure? + - - Save current audio.conf - + + Load custom audio.conf + - - Very low - + + Save current audio.conf + - - Low - + + Very low + - - Medium - + + Low + - - High - + + Medium + - - Extreme - + + High + - - Advanced waveform editing - + + Extreme + - - Advanced waveform editing (default: -80;-100;0;0;0;0) + + Advanced waveform editing + + + + + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. This setting is only in effect if IR optimization is enabled. @@ -1651,1216 +1656,1288 @@ This setting is only in effect if IR optimization is enabled. 5th value: Channel 3 delay (samples) 6th value: Channel 4 delay (samples) - + - - + + NewFileWizard - - Create new script - Crear nuevo script + + Create new script + - - New script - + + New script + - - Define and generate a basic script template - + + Define and generate a basic script template + - - Workspace directory - + + Workspace directory + - - File name - + + File name + - - Description - + + Description + - - Untitled script - + + Untitled script + - - Select directory - + + Select directory + - - - - Error - Error + + + + Error + - - Workspace directory does not exist - + + Workspace directory does not exist + - - A file with the same name already exists at this loction - + + A file with the same name already exists at this loction + - - File name is empty or contains illegal characters - + + File name is empty or contains illegal characters + - - + + OverlayMsgProxy - - - - Close - Cerrar + + + + Close + - - + + PaletteEditor - - Palette editor - + + Palette editor + - - - - - - Select... - + + + + + + Select... + - - Base Color - + + Base Color + - - Background Color - + + Background Color + - - Foreground Color - + + Foreground Color + - - Close - Cerrar + + Close + - - Reset - Reiniciar + + Reset + - - White Icons - + + White Icons + - - Selection Color - + + Selection Color + - - Disabled Color - + + Disabled Color + - - + + PresetAddRuleFragment - - Add new rule... - + + Add new rule... + - - If - + + If + - - is connected, then load preset - + + is connected, then load preset + - - + + PresetDialog - - Presets - + + Presets + - - Preset name - + + Preset name + - - Adds current config as a preset - + + Adds current config as a preset + - - Save - Guardar + + Save + - - Rules... - + + Rules... + - - Remove - Eliminar + + Remove + - - Load - + + Load + - - + + PresetFragment - - No presets saved - + + No presets saved + - - Cannot load preset - + + Cannot load preset + - - Selected file does not exist anymore - + + Selected file does not exist anymore + - - Overwrite - + + Overwrite + - - Save - Guardar + + Save + - - Rename - Renombrar + + Rename + - - Delete - + + Delete + - - Rename preset - + + Rename preset + - - Enter new name - + + Enter new name + - - + + PresetRuleDialog - - Preset auto-switch rules - + + Preset auto-switch rules + - - Auto-switch rules - + + Auto-switch rules + - - Add new rule... - + + Add new rule... + - - Delete selection - + + Delete selection + - - No rules defined - + + No rules defined + - - - Cannot add new rule - + + + Cannot add new rule + - - All connected audio devices have already a rule defined. + + All connected audio devices have already a rule defined. You can only create one rule per device. - + - - You have no presets saved. + + You have no presets saved. Please create one first before adding a new rule. - + - - + + PresetRuleTableModel - - Device - Dispositivo + + Device + - - Assigned preset - + + Assigned preset + - - + + QObject - - List All Tabs - + + List All Tabs + - - Detach Group - + + Detach Group + - - Close Active Tab - + + Close Active Tab + - - Close Group - + + Close Group + - - Close Tab - + + Close Tab + - - Something went wrong - + + Something went wrong + - - Failed to open URL with default browser. + + Failed to open URL with default browser. Please copy this URL manually: - + - - Flat - + + Flat + - - Pop - + + Pop + - - Rock - + + Rock + - - Jazz - + + Jazz + - - Classic - + + Classic + - - Bass - + + Bass + - - Clear - + + Clear + - - Hip-Hop - + + Hip-Hop + - - Dubstep - + + Dubstep + - - Movie - + + Movie + - - Metal - + + Metal + - - Vocal Booster - + + Vocal Booster + - - Hardstyle - + + Hardstyle + - - Acoustic - + + Acoustic + - - R&B - + + R&B + - - Electronic - + + Electronic + - - Deep Bass - + + Deep Bass + - - Beats - + + Beats + - - BS2B Custom - + + BS2B Custom + - - BS2B Weak - + + BS2B Weak + - - BS2B Strong - + + BS2B Strong + - - Out of head - + + Out of head + - - Surround 1 - + + Surround 1 + - - Surround 2 - + + Surround 2 + - - Joe0Bloggs Realistic surround - + + Joe0Bloggs Realistic surround + - - Default - + + Default + - - Small hall 1 - + + Small hall 1 + - - Small hall 2 - + + Small hall 2 + - - Medium hall 1 - + + Medium hall 1 + - - Medium hall 2 - + + Medium hall 2 + - - Large hall 1 - + + Large hall 1 + - - Large hall 2 - + + Large hall 2 + - - Small room 1 - + + Small room 1 + - - Small room 2 - + + Small room 2 + - - Medium room 1 - + + Medium room 1 + - - Medium room 2 - + + Medium room 2 + - - Large room 1 - + + Large room 1 + - - Large room 2 - + + Large room 2 + - - Medium ER 1 - + + Medium ER 1 + - - Medium ER 2 - + + Medium ER 2 + - - Plate high - + + Plate high + - - Plate low - + + Plate low + - - Long reverb 1 - + + Long reverb 1 + - - Long reverb 2 - + + Long reverb 2 + - - error - + + error + - - creating - + + creating + - - suspended - + + suspended + - - - idle - + + + idle + - - - running - + + + running + - - not connected - + + not connected + - - JamesDSP is an advanced audio processing engine available for Linux and Android systems. - + + JamesDSP is an advanced audio processing engine available for Linux and Android systems. + - - Auto-start permission has been denied - + + Auto-start permission has been denied + - - Please run 'flatpak permission-reset %1' and reenable auto-start. - + + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. + - - Unknown error - + + Unknown error + - - Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 - + + Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 + - - + + SettingsFragment - - Settings - Ajustes + + Settings + + + + + Category + + + + + Interface + + + + + Audio processing + + + + + Default paths + + + + + Devices + + + + + Network + + + + + Tray icon + + + + + Context menu + + + + + Theme + + + + + Edit + - - Category - + + Color scheme + - - Interface - + + Equalizer + - - Default paths - + + Always display handles + - - Devices - + + Convolver benchmarking + - - Network - + + Benchmark now + - - Tray icon - + + Clear cached data + - - Context menu - + + Enable benchmarking on boot + - - Theme - + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + - - Edit - + + Workarounds + - - Color scheme - + + Allow volume control of the virtual sink device + - - Equalizer - + + Restart required to apply changes. May cause audio loss in some cases. + - - Always display handles - + + Impluse responses + - - Impluse responses - + + VDCs + - - VDCs - + + Liveprog scripts + - - Liveprog scripts - + + Save + Guardar - - Save - Guardar + + Built-in assets + - - Built-in assets - + + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> + - - <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + + Extract bundled assets on startup + Extraer activos empaquetados al iniciar - - Extract bundled assets on startup - Extraer activos empaquetados al iniciar + + Extract now + Extraer ahora - - Extract now - Extraer ahora + + Select sink/device to be processed + Seleccione sink/dispositivo a procesar - - Select sink/device to be processed - Seleccione sink/dispositivo a procesar + + Use default output device (recommended) + Usar dispositivo de salida por defecto (recomendado) - - Use default output device (recommended) - Usar dispositivo de salida por defecto (recomendado) + + Manually select device + Seleccionar dispositivo manualmente - - Manually select device - Seleccionar dispositivo manualmente + + Device + Dispositivo - - Device - Dispositivo + + Blocklisted apps + Apps bloqueadas - - Blocklisted apps - Apps bloqueadas + + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. + - - In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + + Allowlist mode (apps need to be explicitly enabled instead) + Modo de lista permitida (las aplicaciones deben estar explícitamente habilitadas en su lugar) - - Allowlist mode (apps need to be explicitly enabled instead) - Modo de lista permitida (las aplicaciones deben estar explícitamente habilitadas en su lugar) + + Clear list + Borrar lista - - Clear list - Borrar lista + + AutoEQ database + - - AutoEQ database - + + Status: + Estado: - - Status: - Estado: + + unknown + desconocido - - unknown - desconocido + + Manage local database + Administrar base de datos - - Manage local database - Administrar base de datos + + Run in background (tray icon) + Ejecutar en segundo plano (icono de la bandeja) - - Run in background (tray icon) - Ejecutar en segundo plano (icono de la bandeja) + + No, shutdown audio effects when closing app + No, apagar efectos de audio al cerrar la aplicación - - No, shutdown audio effects when closing app - No, apagar efectos de audio al cerrar la aplicación + + Yes, minimize to tray icon when closing app + Sí, minimizar el icono de la bandeja al cerrar la aplicación - - Yes, minimize to tray icon when closing app - Sí, minimizar el icono de la bandeja al cerrar la aplicación + + Auto-start + Autoiniciar - - Auto-start - Autoiniciar + + Start minimized on boot + Iniciar minimizado al arrancar - - Start minimized on boot - Iniciar minimizado al arrancar + + Systray not supported on this system + Systray no soportado en este sistema - - Systray not supported on this system - Systray no soportado en este sistema + + Visit Github repo + Visitar el repositorio de Github - - Visit Github repo - Visitar el repositorio de Github + + Run setup wizard + Ejecutar el Asistente de Configuración - - Run setup wizard - Ejecutar el Asistente de Configuración + + Close + Cerrar - - Close - Cerrar + + + benchmark data loaded + - - Unknown (%1) - Desconocido (%1) + + Unknown (%1) + Desconocido (%1) - - installed - + + installed + - - not installed - + + not installed + - - Override liveprog scripts? - + + + no benchmark data stored + - - Do you want to override existing default liveprog scripts? + + Override liveprog scripts? + + + + + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + - - Extract assets - + + Extract assets + - - %1 files have been restored - + + %1 files have been restored + - - You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. + + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - Está a punto de activar el modo listas permitidas. JamesDSP no procesará todas las aplicaciones por defecto mientras este modo esté activo. Necesitas permitir explícitamente que cada aplicación se procese en el menú 'Aplicaciones'. + Está a punto de activar el modo listas permitidas. JamesDSP no procesará todas las aplicaciones por defecto mientras este modo esté activo. Necesitas permitir explícitamente que cada aplicación se procese en el menú 'Aplicaciones'. - - Are you sure? - ¿Estás seguro? + + Are you sure? + ¿Estás seguro? + + + + This action will reset your current blocklist or allowlist. Do you want to continue? + Esta acción restablecerá su actual lista de bloqueos o lista permitida. ¿Desea continuar? + + + + Warning + Advertencia + + + + Do you really want to restore the default menu layout? + ¿Seguro que quieres volver a la configuración por defecto? - - This action will reset your current blocklist or allowlist. Do you want to continue? - Esta acción restablecerá su actual lista de bloqueos o lista permitida. ¿Desea continuar? + + waiting for result... + - - Warning - Advertencia + + Cache cleared + - - Do you really want to restore the default menu layout? - ¿Seguro que quieres volver a la configuración por defecto? + + Benchmark data has been cleared. Restart this app to fully apply the changes. + - - + + SingleInstanceMonitor - - Another instance of JamesDSP is already active and has been put in the foreground. - Otra instancia de JamesDSP ya está activa y se ha puesto en primer plano. + + Another instance of JamesDSP is already active and has been put in the foreground. + Otra instancia de JamesDSP ya está activa y se ha puesto en primer plano. - - + + StatusDialog - - Status - Estado + + Status + Estado - - Application version - Versión de la aplicación + + Application version + Versión de la aplicación - - JamesDSP core version - + + JamesDSP core version + - - Processing state - + + Processing state + - - Audio format - + + Audio format + - - Sampling rate - + + Sampling rate + - - + + StatusFragment - - Processing - + + Processing + - - Not processing - + + Not processing + - - + + TrayIcon - - &Bypass - + + &Bypass + - - &Presets - + + &Presets + - - &Convolver bookmarks - + + &Convolver bookmarks + - - JamesDSP for Linux - JamesDSP para Linux + + JamesDSP for Linux + - - No presets found - + + No presets found + - - No impulse responses found - + + No impulse responses found + - - &Reload JamesDSP - + + &Reload JamesDSP + - - - &Quit - &Salir + + + &Quit + &Salir - - - &Show/hide window - + + + &Show/hide window + - - Re&verberation presets - + + Re&verberation presets + - - Off - Apagado + + Off + Apagado - - &Equalizer presets - + + &Equalizer presets + - - &Crossfeed - + + &Crossfeed + - - + + VariableItemModel - - Parameter - Parámetro + + Parameter + Parámetro - - Value - + + Value + - - + + VariableWatchWidget - - Form - + + Form + - - ms - ms + + ms + ms - - Refresh every - Actualizar cada + + Refresh every + Actualizar cada - - Click a variable to manipulate its value. - Haz clic en una variable para manipular su valor. + + Click a variable to manipulate its value. + Haz clic en una variable para manipular su valor. - - - Error - Error + + + Error + Error - - This variable is a string. Currently only numerical value types can be modified. - Esta variable es una cadena. Actualmente sólo se pueden modificar los tipos de valores numéricos. + + This variable is a string. Currently only numerical value types can be modified. + Esta variable es una cadena. Actualmente sólo se pueden modificar los tipos de valores numéricos. - - Manipulate variable - Modificar variable + + Manipulate variable + Modificar variable - - Enter a new value for variable '%1': - Introduzca un nuevo valor para la variable '%1': + + Enter a new value for variable '%1': + Introduzca un nuevo valor para la variable '%1': - - Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. - Error al manipular la variable '%1'. Ya no existe o no se puede cambiar. + + Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. + Error al manipular la variable '%1'. Ya no existe o no se puede cambiar. - - + + VdcDatabaseModel - - Company - + + Company + - - Model - Modelo + + Model + Modelo - - + + ads::CDockAreaTitleBar - - Detach Group - + + Detach Group + - - Close Group - + + Close Group + - - Close Other Groups - Cerrar Otros Grupos + + Close Other Groups + Cerrar Otros Grupos - - + + ads::CDockManager - - Show View - Mostrar vista + + Show View + Mostrar vista - - + + ads::CDockWidgetTab - - Detach - Desconectar + + Detach + Desconectar - - Close - Cerrar + + Close + Cerrar - - Close Others - Cerrar los demás + + Close Others + Cerrar los demás - - + + menueditor - - Available entries - Entradas disponibles + + Available entries + Entradas disponibles - - Move Up - Mover hacia arriba + + Move Up + Mover hacia arriba - - Moves the selected toolbar item up - + + Moves the selected toolbar item up + - - &Up - &Subir + + &Up + &Subir - - Move Down - Mover hacia abajo + + Move Down + Mover hacia abajo - - moves the selected toolbar item down - mueve abajo el elemento de la barra de herramientas + + moves the selected toolbar item down + mueve abajo el elemento de la barra de herramientas - - &Down - &Bajar + + &Down + &Bajar - - Insert - Insertar + + Insert + Insertar - - Adds the selected menu action to the toolbar - Añade la acción del menú seleccionado a la barra de herramientas + + Adds the selected menu action to the toolbar + Añade la acción del menú seleccionado a la barra de herramientas - - &Add - &Agregar + + &Add + &Agregar - - Remove - Eliminar + + Remove + Eliminar - - Removes the selected item from the active toolbar - Elimina el elemento seleccionado de la barra de herramientas activa + + Removes the selected item from the active toolbar + Elimina el elemento seleccionado de la barra de herramientas activa - - &Del - + + &Del + - - - Reset - Reiniciar + + + Reset + Reiniciar - - Context menu contents - Elementos de menú contextual + + Context menu contents + Elementos de menú contextual - + diff --git a/resources/translations/jamesdsp_fi.ts b/resources/translations/jamesdsp_fi.ts index 8820b305..9d446e33 100644 --- a/resources/translations/jamesdsp_fi.ts +++ b/resources/translations/jamesdsp_fi.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_fr.qm b/resources/translations/jamesdsp_fr.qm index f80401d2..4882d672 100644 Binary files a/resources/translations/jamesdsp_fr.qm and b/resources/translations/jamesdsp_fr.qm differ diff --git a/resources/translations/jamesdsp_fr.ts b/resources/translations/jamesdsp_fr.ts index cca41160..fced094e 100644 --- a/resources/translations/jamesdsp_fr.ts +++ b/resources/translations/jamesdsp_fr.ts @@ -1,1636 +1,1641 @@ - + AeqItemDelegate - - 2nd choice - 2ème choix + + 2nd choice + 2ème choix - - 3rd choice - 3ème choix + + 3rd choice + 3ème choix - - %1th choice - %1ème choix + + %1th choice + %1ème choix - - + + AeqPreviewPlot - - Frequency (Hz) - Fréquence (Hz) + + Frequency (Hz) + Fréquence (Hz) - - Amplitude (dBr) - Amplitude (dBr) + + Amplitude (dBr) + Amplitude (dBr) - - Target - Cible + + Target + Cible - - Raw (smoothed) - + + Raw (smoothed) + - - Error (smoothed) - + + Error (smoothed) + - - Equalization - + + Equalization + - - Raw - Brut + + Raw + Brut - - Error - Erreur + + Error + Erreur - - Equalized - + + Equalized + - - Equalization (normalized) - + + Equalization (normalized) + - - Move to top left - Déplacer en haut à gauche + + Move to top left + Déplacer en haut à gauche - - Move to top center - Déplacer en haut au centre + + Move to top center + Déplacer en haut au centre - - Move to top right - Déplacer en haut à droite + + Move to top right + Déplacer en haut à droite - - Move to bottom right - Déplacer en bas à droite + + Move to bottom right + Déplacer en bas à droite - - Move to bottom left - Déplacer en bas à gauche + + Move to bottom left + Déplacer en bas à gauche - - + + AeqSelector - - AutoEQ Database - + + AutoEQ Database + - - Filter... - Filtrer... + + Filter... + Filtrer... - - Local database version - + + Local database version + - - Checked out at commit: - + + Checked out at commit: + - - Last commit created at: - + + Last commit created at: + - - Package generated at: - + + Package generated at: + - - Display settings - Paramètres d'affichage + + Display settings + Paramètres d'affichage - - Dark mode - + + Dark mode + - - Update database - + + Update database + - - Download latest AutoEQ package - + + Download latest AutoEQ package + - - Delete database - Supprimer la base de données + + Delete database + Supprimer la base de données - - Cleanup local database and exit - + + Cleanup local database and exit + - - No measurement selected - + + No measurement selected + - - Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. + + Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. This will override your current GraphicEQ configuration. - + - - - Manage database - + + + Manage database + - - No measurements found - Aucune mesure trouvée + + No measurements found + Aucune mesure trouvée - - AutoEQ database - Base de données AutoEQ + + AutoEQ database + Base de données AutoEQ - - Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. + + Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. An internet connection is required during this step. Do you want to continue and enable this feature? - + - - - Failed to retrieve version information - + + + Failed to retrieve version information + - - - Failed to retrieve package information from the remote repository: + + + Failed to retrieve package information from the remote repository: Status code: %0 Reason: %1 - + - - Return to database - Retour à la base de données + + Return to database + Retour à la base de données - - No new updates available - + + No new updates available + - - The local database is currently up-to-date; no new updates are available at this time. + + The local database is currently up-to-date; no new updates are available at this time. It may take up to 24 hours for new changes in the AutoEQ upstream repo to become available for download here. Packages are generated at 4am UTC daily. Do you want to re-install the latest database update anyway? - + - - Database cleared - + + Database cleared + - - The database has been removed from your hard disk - + + The database has been removed from your hard disk + - - Error - Erreur + + Error + Erreur - - Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. - + + Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. + - - + + AppItem - - (unset) - (non défini) + + (unset) + (non défini) - - - - Add to blocklist - Ajouter à la liste noire + + + + Add to blocklist + Ajouter à la liste noire - - - Add to allowlist - Aouter à la liste blanche + + + Add to allowlist + Aouter à la liste blanche - - Rate: %1Hz - Taux: %1Hz + + Rate: %1Hz + Taux: %1Hz - - Latency: %1ms - Latence: %1ms + + Latency: %1ms + Latence: %1ms - - Format: %1 - Format: %1 + + Format: %1 + Format: %1 - - + + AppManagerFragment - - Active apps - Applications actives + + Active apps + Applications actives - - No apps are playing audio - Aucune application ne joue de l'audio + + No apps are playing audio + Aucune application ne joue de l'audio - - + + AutostartManager - - Manage auto-start permission for JamesDSP - Gérer la permission de démarrage automatique pour JamesDSP + + Manage auto-start permission for JamesDSP + Gérer la permission de démarrage automatique pour JamesDSP - - + + CodeOutline - - Annotations - Annotations + + Annotations + Annotations - - Functions - Fonctions + + Functions + Fonctions - - + + ConsoleOutput - - Auto-scroll - Défilement automatique + + Auto-scroll + Défilement automatique - - Copy selection - Copier la sélection + + Copy selection + Copier la sélection - - Copy all - Tout copier + + Copy all + Tout copier - - Clear - Effacer + + Clear + Effacer - - + + EELEditor - - EEL Scripting IDE - + + EEL Scripting IDE + - - File - + + File + - - Edit - + + Edit + - - Navigation - + + Navigation + - - View - + + View + - - Help - + + Help + - - Open - + + Open + - - Open script - + + Open script + - - Ctrl+O - + + Ctrl+O + - - - Close file - + + + Close file + - - Ctrl+Shift+W - + + Ctrl+Shift+W + - - Save - + + Save + - - Ctrl+S - + + Ctrl+S + - - Save as... - + + Save as... + - - Ctrl+Shift+S - + + Ctrl+Shift+S + - - Undo - + + Undo + - - Ctrl+Z - + + Ctrl+Z + - - Redo - + + Redo + - - Ctrl+Shift+Z - + + Ctrl+Shift+Z + - - Find/Replace... - + + Find/Replace... + - - Ctrl+F - + + Ctrl+F + - - - Go to line... - + + + Go to line... + - - Go to line - + + Go to line + - - Ctrl+L - + + Ctrl+L + - - - Jump to function... - + + + Jump to function... + - - Ctrl+M - Ctrl+M + + Ctrl+M + Ctrl+M - - Go to @init - + + Go to @init + - - F2 - F2 + + F2 + F2 - - Go to @sample - + + Go to @sample + - - F3 - F3 + + F3 + F3 - - Automatic Parentheses - + + Automatic Parentheses + - - Replace Tabs with Spaces - + + Replace Tabs with Spaces + - - EEL2 documentation - Documentation EEL2 + + EEL2 documentation + Documentation EEL2 - - F1 - F1 + + F1 + F1 - - Run code - Exécuter le code + + Run code + Exécuter le code - - F5 - F5 + + F5 + F5 - - New - Nouveau + + New + Nouveau - - New script wizard - + + New script wizard + - - Ctrl+N - Ctrl+N + + Ctrl+N + Ctrl+N - - - Freeze - + + + Freeze + - - F6 - F6 + + F6 + F6 - - Loaded projects - + + Loaded projects + - - Code outline - + + Code outline + - - Variable view - + + Variable view + - - Console output - + + Console output + - - '%1' started compiling at %2 - + + '%1' started compiling at %2 + - - <br>Compilation stopped at %2 - + + <br>Compilation stopped at %2 + - - Script initialization took %1ms - + + Script initialization took %1ms + - - Error - Erreur + + Error + Erreur - - Cannot write file - + + Cannot write file + - - Open EEL script - Ouvrir le script EEL + + Open EEL script + Ouvrir le script EEL - - EEL2 Script (*.eel) - + + EEL2 Script (*.eel) + - - Save as - Enregistrer sous + + Save as + Enregistrer sous - - Cannot execute - + + Cannot execute + - - No script file opened. Please open one first and try again. - + + No script file opened. Please open one first and try again. + - - Enter line number: - + + Enter line number: + - - Enter function name: - + + Enter function name: + - - + + EmptyView - - No project loaded - + + No project loaded + - - + + FileDownloaderDialog - - Package manager - Gestionnaire de paquets + + Package manager + Gestionnaire de paquets - - Downloading package... - + + Downloading package... + - - + + FileSelectionWidget - - Refresh - + + Refresh + - - Bookmark - + + Bookmark + - - Rename - Renommer + + Rename + Renommer - - Remove - Supprimer + + Remove + Supprimer - - No supported files found - Aucun fichier supporté trouvé + + No supported files found + Aucun fichier supporté trouvé - - + + FindReplaceForm - - Form - Formulaire + + Form + Formulaire - - &Find: - + + &Find: + - - R&eplace with: - Remplacer par: + + R&eplace with: + Remplacer par: - - Previous - Précédent + + Previous + Précédent - - Next - Suivant + + Next + Suivant - - &Options - + + &Options + - - R&egular expression - + + R&egular expression + - - &Whole words - + + &Whole words + - - &Case sensitive - + + &Case sensitive + - - &Close - + + &Close + - - &Replace - + + &Replace + - - Replace &All - + + Replace &All + - - no match found - + + no match found + - - Replaced %1 occurrence(s) - + + Replaced %1 occurrence(s) + - - + + FirstLaunchWizard - - Welcome! - + + Welcome! + - - Thank you for installing this app! + + Thank you for installing this app! However, before you can begin playing around with JamesDSP for Linux, we'll need to make some adjustments in order to ensure the best possible experience with JDSP. - + - - - - Next > - + + + + Next > + - - Run in background? - + + Run in background? + - - No, don't apply effects in background - + + No, don't apply effects in background + - - Yes, minimize to tray icon - + + Yes, minimize to tray icon + - - Start minimized on boot - + + Start minimized on boot + - - That's it! - + + That's it! + - - You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! - + + You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! + - - Telegram - + + Telegram + - - Close - + + Close + - - + + FlatTabWidget - - FlatTabWidget - + + FlatTabWidget + - - + + GraphicEQFilterGUI - - Enable Graphic EQ - + + Enable Graphic EQ + - - Freq. - + + Freq. + - - Gain - + + Gain + - - AutoEQ database... - + + AutoEQ database... + - - 15-band - + + 15-band + - - 31-band - + + 31-band + - - variable - + + variable + - - Import - + + Import + - - Export - + + Export + - - Invert response - + + Invert response + - - Normalize response - + + Normalize response + - - Reset response - + + Reset response + - - - Import EqualizerAPO settings - + + + Import EqualizerAPO settings + - - Import frequency response - + + Import frequency response + - - - CSV frequency response (*.csv) - + + + CSV frequency response (*.csv) + - - - - All files (*.*) - + + + + All files (*.*) + - - Import EqualizerAPO graphic EQ preset - + + Import EqualizerAPO graphic EQ preset + - - EqualizerAPO GraphicEQ (*.txt) - + + EqualizerAPO GraphicEQ (*.txt) + - - Export frequency response - + + Export frequency response + - - + + GzipDownloaderDialog - - Error - Erreur + + Error + - - %1MB of %2MB downloaded - + + %1MB of %2MB downloaded + - - Decompressing package... - + + Decompressing package... + - - + + LiveprogSelectionWidget - - - No script has been loaded - + + + No script has been loaded + - - Enable - + + Enable + - - Reset - + + Reset + - - - Create new script - + + + Create new script + - - - Error - Erreur + + + Error + - - Cannot restore defaults. + + Cannot restore defaults. No EEL file is currently loaded. - + - - Selected EEL file does not exist anymore. + + Selected EEL file does not exist anymore. Please select another one - + - - Edit script - + + Edit script + - - No customizable parameters - + + No customizable parameters + - - + + MainWindow - - JamesDSP for Linux - + + JamesDSP for Linux + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> + - - Dynamic bass boost - + + Dynamic bass boost + - - Maximum gain - + + Maximum gain + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> + - - Analog modelling - + + Analog modelling + - - Preamp (Harmonics) - + + Preamp (Harmonics) + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> + - - Limiter/Master - + + Limiter/Master + - - Threshold - + + Threshold + - - Release - + + Release + - - Post gain - + + Post gain + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> + - - Dynamic range compander - + + Dynamic range compander + - - Time constant - + + Time constant + - - Granularity - + + Granularity + - - Time-frequency transforms - + + Time-frequency transforms + - - Uniform (Short-time Fourier) - + + Uniform (Short-time Fourier) + - - Multiresolution (Continuous wavelet) - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> + - - Multiresolution (Time domain) - + + + Crossfeed + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - + + Mode + - - - Crossfeed - + + Custom BS2B parameters + - - Mode - + + Cut frequency + - - Custom BS2B parameters - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> + - - Cut frequency - + + Soundstage wideness + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + + Widen level + - - Soundstage wideness - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> + - - Widen level - + + Enable reverberation + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + + Presets + - - Enable reverberation - + + + ... + - - Presets - + + Oversampling factor + - - - ... - + + Early reflection factor + - - Oversampling factor - + + Early reflection amount + - - Early reflection factor - + + Early reflection width + - - Early reflection amount - + + Lowpass cutoff (Input) + - - Early reflection width - + + Lowpass cutoff (Bass) + - - Lowpass cutoff (Input) - + + Lowpass cutoff (Damp) + - - Lowpass cutoff (Bass) - + + Lowpass cutoff (Output) + - - Lowpass cutoff (Damp) - + + Final wet mix + - - Lowpass cutoff (Output) - + + Final dry mix + - - Final wet mix - + + Reverb wetness + - - Final dry mix - + + Width L/R mix + - - Reverb wetness - + + LFO wander amount + - - Width L/R mix - + + LFO spin amount + - - LFO wander amount - + + Time decay + - - LFO spin amount - + + Delay + - - Time decay - + + Bass boost + - - Delay - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> + - - Bass boost - + + FIR Minimum phase + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + + IIR 4 order + - - FIR Minimum phase - + + IIR 6 order + - - IIR 4 order - + + IIR 8 order + - - IIR 6 order - + + IIR 10 order + - - IIR 8 order - + + IIR 12 order + - - IIR 10 order - + + Enable EQ + - - IIR 12 order - + + Multiresolution (Continuous wavelet, incomplete dual frame) + - - Enable EQ - + + Pseudo multiresolution (Undersampling frame) + - - Presets... - + + Pseudo multiresolution (Time domain, zero latency) + - - Filter type - + + Presets... + - - Interpolator - + + Filter type + - - <html><head/><body><p>Interpolation mode</p></body></html> - + + Interpolator + - - Piecewise Cubic Hermite Interpolating Polynomial - + + <html><head/><body><p>Interpolation mode</p></body></html> + - - Modified Hiroshi Akima spline - + + Piecewise Cubic Hermite Interpolating Polynomial + - - Reset EQ - + + Modified Hiroshi Akima spline + - - Fixed bands - + + Reset EQ + - - Flexible bands - + + Fixed bands + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - + + Flexible bands + - - - Filesystem - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> + - - Bookmarks - + + + Filesystem + - - Enable convolver - + + Bookmarks + - - IR optimization - + + Enable convolver + - - Original - + + IR optimization + - - Shrink - + + Original + - - Minimum phase transform and shrink - + + Shrink + - - Adv. waveform editing - + + Minimum phase transform and shrink + - - Edit - + + Adv. waveform editing + - - Channels: - + + Edit + - - Samples: - + + Channels: + - - No selection - + + Samples: + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + + No selection + - - Database - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> + - - Create - + + Database + - - Create your custom DDC files using DDCToolbox - + + Create + - - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + + Create your custom DDC files using DDCToolbox + - - View installation instructions - + + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + - - Enable ViPER-DDC - + + View installation instructions + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + + Enable ViPER-DDC + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> + - - Custom Presets - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + + Custom Presets + - - Settings - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + + Settings + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> + - - Bypass - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> + - - %1 connected - Preset loaded automatically - + + Bypass + - - Cannot execute script - + + %1 connected - Preset loaded automatically + - - The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + + Cannot execute script + - - Apps - + + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. + - - Driver status - + + Apps + - - Relink audio pipeline - + + Driver status + - - Reset to defaults - + + Relink audio pipeline + - - Load from file - + + Reset to defaults + - - Save to file - + + Load from file + - - Open LiveprogIDE - + + Save to file + - - What's this... (Select UI element) - + + Open LiveprogIDE + - - Bass/Misc - + + What's this... (Select UI element) + - - Sound Positioning - + + Bass/Misc + - - Reverb - + + Sound Positioning + - - Equalizer - + + Reverb + - - Convolver - + + Equalizer + - - DDC - + + Convolver + - - Liveprog - + + DDC + - - Graphic EQ - + + Liveprog + - - Launch application - + + Graphic EQ + - - Reset Configuration - + + Launch application + - - Are you sure? - + + Reset Configuration + - - Load custom audio.conf - + + Are you sure? + - - Save current audio.conf - + + Load custom audio.conf + - - Very low - + + Save current audio.conf + - - Low - + + Very low + - - Medium - + + Low + - - High - + + Medium + - - Extreme - + + High + - - Advanced waveform editing - + + Extreme + - - Advanced waveform editing (default: -80;-100;0;0;0;0) + + Advanced waveform editing + + + + + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. This setting is only in effect if IR optimization is enabled. @@ -1642,1215 +1647,1287 @@ This setting is only in effect if IR optimization is enabled. 5th value: Channel 3 delay (samples) 6th value: Channel 4 delay (samples) - + - - + + NewFileWizard - - Create new script - + + Create new script + - - New script - + + New script + - - Define and generate a basic script template - + + Define and generate a basic script template + - - Workspace directory - + + Workspace directory + - - File name - + + File name + - - Description - + + Description + - - Untitled script - + + Untitled script + - - Select directory - + + Select directory + - - - - Error - Erreur + + + + Error + - - Workspace directory does not exist - + + Workspace directory does not exist + - - A file with the same name already exists at this loction - + + A file with the same name already exists at this loction + - - File name is empty or contains illegal characters - + + File name is empty or contains illegal characters + - - + + OverlayMsgProxy - - - - Close - + + + + Close + - - + + PaletteEditor - - Palette editor - + + Palette editor + - - - - - - Select... - + + + + + + Select... + - - Base Color - + + Base Color + - - Background Color - + + Background Color + - - Foreground Color - + + Foreground Color + - - Close - + + Close + - - Reset - + + Reset + - - White Icons - + + White Icons + - - Selection Color - + + Selection Color + - - Disabled Color - + + Disabled Color + - - + + PresetAddRuleFragment - - Add new rule... - + + Add new rule... + - - If - + + If + - - is connected, then load preset - + + is connected, then load preset + - - + + PresetDialog - - Presets - + + Presets + - - Preset name - + + Preset name + - - Adds current config as a preset - + + Adds current config as a preset + - - Save - + + Save + - - Rules... - + + Rules... + - - Remove - Supprimer + + Remove + - - Load - + + Load + - - + + PresetFragment - - No presets saved - + + No presets saved + - - Cannot load preset - + + Cannot load preset + - - Selected file does not exist anymore - + + Selected file does not exist anymore + - - Overwrite - + + Overwrite + - - Save - + + Save + - - Rename - Renommer + + Rename + - - Delete - + + Delete + - - Rename preset - + + Rename preset + - - Enter new name - + + Enter new name + - - + + PresetRuleDialog - - Preset auto-switch rules - + + Preset auto-switch rules + - - Auto-switch rules - + + Auto-switch rules + - - Add new rule... - + + Add new rule... + - - Delete selection - + + Delete selection + - - No rules defined - + + No rules defined + - - - Cannot add new rule - + + + Cannot add new rule + - - All connected audio devices have already a rule defined. + + All connected audio devices have already a rule defined. You can only create one rule per device. - + - - You have no presets saved. + + You have no presets saved. Please create one first before adding a new rule. - + - - + + PresetRuleTableModel - - Device - + + Device + - - Assigned preset - + + Assigned preset + - - + + QObject - - List All Tabs - + + List All Tabs + - - Detach Group - + + Detach Group + - - Close Active Tab - + + Close Active Tab + - - Close Group - + + Close Group + - - Close Tab - + + Close Tab + - - Something went wrong - + + Something went wrong + - - Failed to open URL with default browser. + + Failed to open URL with default browser. Please copy this URL manually: - + - - Flat - + + Flat + - - Pop - + + Pop + - - Rock - + + Rock + - - Jazz - + + Jazz + - - Classic - + + Classic + - - Bass - + + Bass + - - Clear - Effacer + + Clear + - - Hip-Hop - + + Hip-Hop + - - Dubstep - + + Dubstep + - - Movie - + + Movie + - - Metal - + + Metal + - - Vocal Booster - + + Vocal Booster + - - Hardstyle - + + Hardstyle + - - Acoustic - + + Acoustic + - - R&B - + + R&B + - - Electronic - + + Electronic + - - Deep Bass - + + Deep Bass + - - Beats - + + Beats + - - BS2B Custom - + + BS2B Custom + - - BS2B Weak - + + BS2B Weak + - - BS2B Strong - + + BS2B Strong + - - Out of head - + + Out of head + - - Surround 1 - + + Surround 1 + - - Surround 2 - + + Surround 2 + - - Joe0Bloggs Realistic surround - + + Joe0Bloggs Realistic surround + - - Default - + + Default + - - Small hall 1 - + + Small hall 1 + - - Small hall 2 - + + Small hall 2 + - - Medium hall 1 - + + Medium hall 1 + - - Medium hall 2 - + + Medium hall 2 + - - Large hall 1 - + + Large hall 1 + - - Large hall 2 - + + Large hall 2 + - - Small room 1 - + + Small room 1 + - - Small room 2 - + + Small room 2 + - - Medium room 1 - + + Medium room 1 + - - Medium room 2 - + + Medium room 2 + - - Large room 1 - + + Large room 1 + - - Large room 2 - + + Large room 2 + - - Medium ER 1 - + + Medium ER 1 + - - Medium ER 2 - + + Medium ER 2 + - - Plate high - + + Plate high + - - Plate low - + + Plate low + - - Long reverb 1 - + + Long reverb 1 + - - Long reverb 2 - + + Long reverb 2 + - - error - + + error + - - creating - + + creating + - - suspended - + + suspended + - - - idle - + + + idle + - - - running - + + + running + - - not connected - + + not connected + - - JamesDSP is an advanced audio processing engine available for Linux and Android systems. - + + JamesDSP is an advanced audio processing engine available for Linux and Android systems. + - - Auto-start permission has been denied - + + Auto-start permission has been denied + - - Please run 'flatpak permission-reset %1' and reenable auto-start. - + + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. + - - Unknown error - + + Unknown error + - - Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 - + + Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 + - - + + SettingsFragment - - Settings - + + Settings + + + + + Category + + + + + Interface + + + + + Audio processing + + + + + Default paths + + + + + Devices + + + + + Network + + + + + Tray icon + + + + + Context menu + + + + + Theme + + + + + Edit + - - Category - + + Color scheme + - - Interface - + + Equalizer + - - Default paths - + + Always display handles + - - Devices - + + Convolver benchmarking + - - Network - + + Benchmark now + - - Tray icon - + + Clear cached data + - - Context menu - + + Enable benchmarking on boot + - - Theme - + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + - - Edit - + + Workarounds + - - Color scheme - + + Allow volume control of the virtual sink device + - - Equalizer - + + Restart required to apply changes. May cause audio loss in some cases. + - - Always display handles - + + Impluse responses + - - Impluse responses - + + VDCs + - - VDCs - + + Liveprog scripts + - - Liveprog scripts - + + Save + - - Save - + + Built-in assets + - - Built-in assets - + + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> + - - <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + + Extract bundled assets on startup + - - Extract bundled assets on startup - + + Extract now + - - Extract now - + + Select sink/device to be processed + - - Select sink/device to be processed - + + Use default output device (recommended) + - - Use default output device (recommended) - + + Manually select device + - - Manually select device - + + Device + - - Device - + + Blocklisted apps + - - Blocklisted apps - + + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. + - - In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + + Allowlist mode (apps need to be explicitly enabled instead) + - - Allowlist mode (apps need to be explicitly enabled instead) - + + Clear list + - - Clear list - + + AutoEQ database + - - AutoEQ database - Base de données AutoEQ + + Status: + - - Status: - + + unknown + - - unknown - + + Manage local database + - - Manage local database - + + Run in background (tray icon) + - - Run in background (tray icon) - + + No, shutdown audio effects when closing app + - - No, shutdown audio effects when closing app - + + Yes, minimize to tray icon when closing app + - - Yes, minimize to tray icon when closing app - + + Auto-start + - - Auto-start - + + Start minimized on boot + - - Start minimized on boot - + + Systray not supported on this system + - - Systray not supported on this system - + + Visit Github repo + - - Visit Github repo - + + Run setup wizard + - - Run setup wizard - + + Close + - - Close - + + + benchmark data loaded + - - Unknown (%1) - + + Unknown (%1) + - - installed - + + installed + - - not installed - + + not installed + - - Override liveprog scripts? - + + + no benchmark data stored + - - Do you want to override existing default liveprog scripts? + + Override liveprog scripts? + + + + + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + - - Extract assets - + + Extract assets + - - %1 files have been restored - + + %1 files have been restored + - - You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. + + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + + + + + Are you sure? + + + + + This action will reset your current blocklist or allowlist. Do you want to continue? + + + + + Warning + - - Are you sure? - + + Do you really want to restore the default menu layout? + - - This action will reset your current blocklist or allowlist. Do you want to continue? - + + waiting for result... + - - Warning - + + Cache cleared + - - Do you really want to restore the default menu layout? - + + Benchmark data has been cleared. Restart this app to fully apply the changes. + - - + + SingleInstanceMonitor - - Another instance of JamesDSP is already active and has been put in the foreground. - + + Another instance of JamesDSP is already active and has been put in the foreground. + - - + + StatusDialog - - Status - + + Status + - - Application version - + + Application version + - - JamesDSP core version - + + JamesDSP core version + - - Processing state - + + Processing state + - - Audio format - + + Audio format + - - Sampling rate - + + Sampling rate + - - + + StatusFragment - - Processing - + + Processing + - - Not processing - + + Not processing + - - + + TrayIcon - - &Bypass - + + &Bypass + - - &Presets - + + &Presets + - - &Convolver bookmarks - + + &Convolver bookmarks + - - JamesDSP for Linux - + + JamesDSP for Linux + - - No presets found - + + No presets found + - - No impulse responses found - + + No impulse responses found + - - &Reload JamesDSP - + + &Reload JamesDSP + - - - &Quit - + + + &Quit + - - - &Show/hide window - + + + &Show/hide window + - - Re&verberation presets - + + Re&verberation presets + - - Off - + + Off + - - &Equalizer presets - + + &Equalizer presets + - - &Crossfeed - + + &Crossfeed + - - + + VariableItemModel - - Parameter - + + Parameter + - - Value - + + Value + - - + + VariableWatchWidget - - Form - Formulaire + + Form + - - ms - + + ms + - - Refresh every - + + Refresh every + - - Click a variable to manipulate its value. - + + Click a variable to manipulate its value. + - - - Error - Erreur + + + Error + - - This variable is a string. Currently only numerical value types can be modified. - + + This variable is a string. Currently only numerical value types can be modified. + - - Manipulate variable - + + Manipulate variable + - - Enter a new value for variable '%1': - + + Enter a new value for variable '%1': + - - Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. - + + Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. + - - + + VdcDatabaseModel - - Company - + + Company + - - Model - + + Model + - - + + ads::CDockAreaTitleBar - - Detach Group - + + Detach Group + - - Close Group - + + Close Group + - - Close Other Groups - + + Close Other Groups + - - + + ads::CDockManager - - Show View - + + Show View + - - + + ads::CDockWidgetTab - - Detach - + + Detach + - - Close - + + Close + - - Close Others - + + Close Others + - - + + menueditor - - Available entries - + + Available entries + - - Move Up - + + Move Up + - - Moves the selected toolbar item up - + + Moves the selected toolbar item up + - - &Up - + + &Up + - - Move Down - + + Move Down + - - moves the selected toolbar item down - + + moves the selected toolbar item down + - - &Down - + + &Down + - - Insert - + + Insert + - - Adds the selected menu action to the toolbar - + + Adds the selected menu action to the toolbar + - - &Add - + + &Add + - - Remove - Supprimer + + Remove + - - Removes the selected item from the active toolbar - + + Removes the selected item from the active toolbar + - - &Del - + + &Del + - - - Reset - + + + Reset + - - Context menu contents - + + Context menu contents + - + diff --git a/resources/translations/jamesdsp_he.ts b/resources/translations/jamesdsp_he.ts index d045b305..cdd2b244 100644 --- a/resources/translations/jamesdsp_he.ts +++ b/resources/translations/jamesdsp_he.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_hi.ts b/resources/translations/jamesdsp_hi.ts index f1a68dc0..82c9e607 100644 --- a/resources/translations/jamesdsp_hi.ts +++ b/resources/translations/jamesdsp_hi.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_hu.ts b/resources/translations/jamesdsp_hu.ts index a7eb0116..815fe1c7 100644 --- a/resources/translations/jamesdsp_hu.ts +++ b/resources/translations/jamesdsp_hu.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_id.ts b/resources/translations/jamesdsp_id.ts index 271a8ede..deda0425 100644 --- a/resources/translations/jamesdsp_id.ts +++ b/resources/translations/jamesdsp_id.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_it.ts b/resources/translations/jamesdsp_it.ts index 481cad0f..d0611d66 100644 --- a/resources/translations/jamesdsp_it.ts +++ b/resources/translations/jamesdsp_it.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_ja.ts b/resources/translations/jamesdsp_ja.ts index f8cdd0ca..89e61538 100644 --- a/resources/translations/jamesdsp_ja.ts +++ b/resources/translations/jamesdsp_ja.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_ko.ts b/resources/translations/jamesdsp_ko.ts index abd0cc99..701db83f 100644 --- a/resources/translations/jamesdsp_ko.ts +++ b/resources/translations/jamesdsp_ko.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_nl.ts b/resources/translations/jamesdsp_nl.ts index 56a0032a..5732441f 100644 --- a/resources/translations/jamesdsp_nl.ts +++ b/resources/translations/jamesdsp_nl.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_no.ts b/resources/translations/jamesdsp_no.ts index ebcef56c..ef5387de 100644 --- a/resources/translations/jamesdsp_no.ts +++ b/resources/translations/jamesdsp_no.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_pl.qm b/resources/translations/jamesdsp_pl.qm index 385e86fe..c4a83732 100644 Binary files a/resources/translations/jamesdsp_pl.qm and b/resources/translations/jamesdsp_pl.qm differ diff --git a/resources/translations/jamesdsp_pl.ts b/resources/translations/jamesdsp_pl.ts index da323b63..e10ef451 100644 --- a/resources/translations/jamesdsp_pl.ts +++ b/resources/translations/jamesdsp_pl.ts @@ -1,1650 +1,1655 @@ - + AeqItemDelegate - - 2nd choice - Druga opcja + + 2nd choice + Druga opcja - - 3rd choice - Trzecia opcja + + 3rd choice + Trzecia opcja - - %1th choice - %1 opcja + + %1th choice + %1 opcja - - + + AeqPreviewPlot - - Frequency (Hz) - Częstotliwość (Hz) + + Frequency (Hz) + Częstotliwość (Hz) - - Amplitude (dBr) - Amplituda (dBr) + + Amplitude (dBr) + Amplituda (dBr) - - Target - Cel + + Target + Cel - - Raw (smoothed) - Surowy (wygładzony) + + Raw (smoothed) + Surowy (wygładzony) - - Error (smoothed) - Błąd (wygładzony) + + Error (smoothed) + Błąd (wygładzony) - - Equalization - Korekcja + + Equalization + Korekcja - - Raw - Surowy + + Raw + Surowy - - Error - Błąd + + Error + Błąd - - Equalized - Wykorektowany + + Equalized + Wykorektowany - - Equalization (normalized) - Korekcja (znormalizowana) + + Equalization (normalized) + Korekcja (znormalizowana) - - Move to top left - Przenieś w lewy górny róg + + Move to top left + Przenieś w lewy górny róg - - Move to top center - Przenieś do górnego środka + + Move to top center + Przenieś do górnego środka - - Move to top right - Przenieś w prawy górny róg + + Move to top right + Przenieś w prawy górny róg - - Move to bottom right - Przenieś w prawy dolny róg + + Move to bottom right + Przenieś w prawy dolny róg - - Move to bottom left - Przenieś w lewy dolny róg + + Move to bottom left + Przenieś w lewy dolny róg - - + + AeqSelector - - AutoEQ Database - Baza danych AutoEQ + + AutoEQ Database + Baza danych AutoEQ - - Filter... - Filtr... + + Filter... + Filtr... - - Local database version - Wersja lokalnej bazy danych + + Local database version + Wersja lokalnej bazy danych - - Checked out at commit: - Sprawdzone w commicie: + + Checked out at commit: + Sprawdzone w commicie: - - Last commit created at: - Ostatni commit utworzony: + + Last commit created at: + Ostatni commit utworzony: - - Package generated at: - Pakiet wygenerowany: + + Package generated at: + Pakiet wygenerowany: - - Display settings - Ustawienia wyświetlania + + Display settings + Ustawienia wyświetlania - - Dark mode - Tryb ciemny + + Dark mode + Tryb ciemny - - Update database - Aktualizuj bazę danych + + Update database + Aktualizuj bazę danych - - Download latest AutoEQ package - Pobierz najnowszy pakiet AutoEQ + + Download latest AutoEQ package + Pobierz najnowszy pakiet AutoEQ - - Delete database - Usuń bazę danych + + Delete database + Usuń bazę danych - - Cleanup local database and exit - Wyczyść lokalną bazę danych i wyjdź + + Cleanup local database and exit + Wyczyść lokalną bazę danych i wyjdź - - No measurement selected - Nie wybrano pomiaru + + No measurement selected + Nie wybrano pomiaru - - Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. + + Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. This will override your current GraphicEQ configuration. - Użyj pola wyszukiwania po lewej stronie, aby znaleźć odpowiedni pomiar dla swoich słuchawek. Naciśnij 'OK', aby załadować dane korekcji do silnika audio. + Użyj pola wyszukiwania po lewej stronie, aby znaleźć odpowiedni pomiar dla swoich słuchawek. Naciśnij 'OK', aby załadować dane korekcji do silnika audio. Spowoduje to zastąpienie bieżącej konfiguracji korektora graficznego. - - - Manage database - Zarządzaj bazą danych + + + Manage database + Zarządzaj bazą danych - - No measurements found - Nie znaleziono pomiaru + + No measurements found + Nie znaleziono pomiaru - - AutoEQ database - Baza danych AutoEQ + + AutoEQ database + Baza danych AutoEQ - - Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. + + Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. An internet connection is required during this step. Do you want to continue and enable this feature? - Przed skorzystaniem z integracji AutoEQ należy pobrać zminimalizowaną wersję bazy danych kompensacji słuchawek (~50 MB) na dysk twardy. + Przed skorzystaniem z integracji AutoEQ należy pobrać zminimalizowaną wersję bazy danych kompensacji słuchawek (~50 MB) na dysk twardy. Na tym etapie wymagane jest połączenie z internetem. Czy chcesz kontynuować i włączyć tę funkcję? - - - Failed to retrieve version information - Nie udało się pobrać informacji o wersji + + + Failed to retrieve version information + Nie udało się pobrać informacji o wersji - - - Failed to retrieve package information from the remote repository: + + + Failed to retrieve package information from the remote repository: Status code: %0 Reason: %1 - Nie udało się pobrać informacji o pakiecie ze zdalnego repozytorium: + Nie udało się pobrać informacji o pakiecie ze zdalnego repozytorium: Kod statusu: %0 Powód: %1 - - Return to database - Wróć do bazy danych + + Return to database + Wróć do bazy danych - - No new updates available - Brak dostępnych aktualizacji + + No new updates available + Brak dostępnych aktualizacji - - The local database is currently up-to-date; no new updates are available at this time. + + The local database is currently up-to-date; no new updates are available at this time. It may take up to 24 hours for new changes in the AutoEQ upstream repo to become available for download here. Packages are generated at 4am UTC daily. Do you want to re-install the latest database update anyway? - Lokalna baza danych jest obecnie aktualna; w tej chwili nie są dostępne żadne nowe aktualizacje. + Lokalna baza danych jest obecnie aktualna; w tej chwili nie są dostępne żadne nowe aktualizacje. Nowe zmiany w repozytorium upstream AutoEQ mogą zająć do 24 godzin, zanim staną się dostępne do pobrania tutaj. Paczki są generowane codziennie o godzinie 4:00 czasu UTC. Czy mimo to chcesz ponownie zainstalować najnowszą aktualizację bazy danych? - - Database cleared - Baza danych wyczyszczona + + Database cleared + Baza danych wyczyszczona - - The database has been removed from your hard disk - Baza danych została usunięta z dysku twardego + + The database has been removed from your hard disk + Baza danych została usunięta z dysku twardego - - Error - Błąd + + Error + Błąd - - Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. - Nie można pobrać odpowiedniego pliku z bazy danych. Zaktualizuj lokalną bazę danych, ponieważ wydaje się być niekompletna. + + Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. + Nie można pobrać odpowiedniego pliku z bazy danych. Zaktualizuj lokalną bazę danych, ponieważ wydaje się być niekompletna. - - + + AppItem - - (unset) - (nieustawione) + + (unset) + (nieustawione) - - - - Add to blocklist - Dodaj do listy blokowanych + + + + Add to blocklist + Dodaj do listy blokowanych - - - Add to allowlist - Dodaj do listy dozwolonych + + + Add to allowlist + Dodaj do listy dozwolonych - - Rate: %1Hz - Częstotliwość: %1Hz + + Rate: %1Hz + Częstotliwość: %1Hz - - Latency: %1ms - Opóźnienie: %1ms + + Latency: %1ms + Opóźnienie: %1ms - - Format: %1 - Format: %1 + + Format: %1 + Format: %1 - - + + AppManagerFragment - - Active apps - Aktywne aplikacje + + Active apps + Aktywne aplikacje - - No apps are playing audio - Żadna aplikacja nie odtwarza dźwięku + + No apps are playing audio + Żadna aplikacja nie odtwarza dźwięku - - + + AutostartManager - - Manage auto-start permission for JamesDSP - Zarządzaj uprawnieniami automatycznego uruchamiania dla JamesDSP + + Manage auto-start permission for JamesDSP + Zarządzaj uprawnieniami automatycznego uruchamiania dla JamesDSP - - + + CodeOutline - - Annotations - Adnotacje + + Annotations + Adnotacje - - Functions - Funkcje + + Functions + Funkcje - - + + ConsoleOutput - - Auto-scroll - Automatyczne przewijanie + + Auto-scroll + Automatyczne przewijanie - - Copy selection - Kopiuj zaznaczenie + + Copy selection + Kopiuj zaznaczenie - - Copy all - Kopiuj wszystko + + Copy all + Kopiuj wszystko - - Clear - Wyczyść + + Clear + Wyczyść - - + + EELEditor - - EEL Scripting IDE - IDE skryptów EEL + + EEL Scripting IDE + IDE skryptów EEL - - File - Plik + + File + Plik - - Edit - Edytuj + + Edit + Edytuj - - Navigation - Nawigacja + + Navigation + Nawigacja - - View - Widok + + View + Widok - - Help - Pomoc + + Help + Pomoc - - Open - Otwórz + + Open + Otwórz - - Open script - Otwórz skrypt + + Open script + Otwórz skrypt - - Ctrl+O - Ctrl+O + + Ctrl+O + Ctrl+O - - - Close file - Zamknij plik + + + Close file + Zamknij plik - - Ctrl+Shift+W - Ctrl+Shift+W + + Ctrl+Shift+W + Ctrl+Shift+W - - Save - Zapisz + + Save + Zapisz - - Ctrl+S - Ctrl+S + + Ctrl+S + Ctrl+S - - Save as... - Zapisz jako... + + Save as... + Zapisz jako... - - Ctrl+Shift+S - Ctrl+Shift+S + + Ctrl+Shift+S + Ctrl+Shift+S - - Undo - Cofnij + + Undo + Cofnij - - Ctrl+Z - Ctrl+Z + + Ctrl+Z + Ctrl+Z - - Redo - Ponów + + Redo + Ponów - - Ctrl+Shift+Z - Ctrl+Shift+Z + + Ctrl+Shift+Z + Ctrl+Shift+Z - - Find/Replace... - Znajdź i zamień... + + Find/Replace... + Znajdź i zamień... - - Ctrl+F - Ctrl+F + + Ctrl+F + Ctrl+F - - - Go to line... - Przejdź do wiersza... + + + Go to line... + Przejdź do wiersza... - - Go to line - Przejdź do wiersza + + Go to line + Przejdź do wiersza - - Ctrl+L - Ctrl+L + + Ctrl+L + Ctrl+L - - - Jump to function... - Przejdź do funkcji... + + + Jump to function... + Przejdź do funkcji... - - Ctrl+M - Ctrl+M + + Ctrl+M + Ctrl+M - - Go to @init - Przejdź do @init + + Go to @init + Przejdź do @init - - F2 - F2 + + F2 + F2 - - Go to @sample - Przejdź do @sample + + Go to @sample + Przejdź do @sample - - F3 - F3 + + F3 + F3 - - Automatic Parentheses - Zamykaj nawiasy + + Automatic Parentheses + Zamykaj nawiasy - - Replace Tabs with Spaces - Zastąp tabulatory spacjami + + Replace Tabs with Spaces + Zastąp tabulatory spacjami - - EEL2 documentation - Dokumentacja EEL2 + + EEL2 documentation + Dokumentacja EEL2 - - F1 - F1 + + F1 + F1 - - Run code - Wykonaj kod + + Run code + Wykonaj kod - - F5 - F5 + + F5 + F5 - - New - Nowy + + New + Nowy - - New script wizard - Kreator nowego skryptu + + New script wizard + Kreator nowego skryptu - - Ctrl+N - Ctrl+N + + Ctrl+N + Ctrl+N - - - Freeze - Zamróź + + + Freeze + Zamróź - - F6 - F6 + + F6 + F6 - - Loaded projects - Załadowane projekty + + Loaded projects + Załadowane projekty - - Code outline - Konspekt kodu + + Code outline + Konspekt kodu - - Variable view - Widok zmiennych + + Variable view + Widok zmiennych - - Console output - Dane wyjściowe konsoli + + Console output + Dane wyjściowe konsoli - - '%1' started compiling at %2 - Kompilacja '%1' rozpoczęła się o %2 + + '%1' started compiling at %2 + Kompilacja '%1' rozpoczęła się o %2 - - <br>Compilation stopped at %2 - <br>Kompilacja zatrzymała się o %2 + + <br>Compilation stopped at %2 + <br>Kompilacja zatrzymała się o %2 - - Script initialization took %1ms - Inicjalizacja skryptu zajęła %1ms + + Script initialization took %1ms + Inicjalizacja skryptu zajęła %1ms - - Error - Błąd + + Error + Błąd - - Cannot write file - Nie można zapisać pliku + + Cannot write file + Nie można zapisać pliku - - Open EEL script - Otwórz skrypt EEL + + Open EEL script + Otwórz skrypt EEL - - EEL2 Script (*.eel) - Skrypt EEL2 (*.eel) + + EEL2 Script (*.eel) + Skrypt EEL2 (*.eel) - - Save as - Zapisz jako + + Save as + Zapisz jako - - Cannot execute - Nie można wykonać + + Cannot execute + Nie można wykonać - - No script file opened. Please open one first and try again. - Nie otwarto pliku skryptu. Proszę najpierw otworzyć plik i spróbować ponownie. + + No script file opened. Please open one first and try again. + Nie otwarto pliku skryptu. Proszę najpierw otworzyć plik i spróbować ponownie. - - Enter line number: - Wprowadź numer wiersza: + + Enter line number: + Wprowadź numer wiersza: - - Enter function name: - Wprowadź nazwę funkcji: + + Enter function name: + Wprowadź nazwę funkcji: - - + + EmptyView - - No project loaded - Nie załadowano projektu + + No project loaded + Nie załadowano projektu - - + + FileDownloaderDialog - - Package manager - Menedżer pakietów + + Package manager + Menedżer pakietów - - Downloading package... - Pobieranie pakietu... + + Downloading package... + Pobieranie pakietu... - - + + FileSelectionWidget - - Refresh - Odśwież + + Refresh + Odśwież - - Bookmark - Dodaj do zakładek + + Bookmark + Dodaj do zakładek - - Rename - Zmień nazwę + + Rename + Zmień nazwę - - Remove - Usuń + + Remove + Usuń - - No supported files found - Nie znaleziono obsługiwanych plików + + No supported files found + Nie znaleziono obsługiwanych plików - - + + FindReplaceForm - - Form - Formularz + + Form + Formularz - - &Find: - &Znajdź: + + &Find: + &Znajdź: - - R&eplace with: - Z&astąp: + + R&eplace with: + Z&astąp: - - Previous - Przejdź do poprzedniego + + Previous + Przejdź do poprzedniego - - Next - Przejdź do następnego + + Next + Przejdź do następnego - - &Options - &Opcje + + &Options + &Opcje - - R&egular expression - Wyraż&enie regularne + + R&egular expression + Wyraż&enie regularne - - &Whole words - Całe sło&wa + + &Whole words + Całe sło&wa - - &Case sensitive - &Rozróżniaj wielkość liter + + &Case sensitive + &Rozróżniaj wielkość liter - - &Close - &Zamknij + + &Close + &Zamknij - - &Replace - &Zastąp + + &Replace + &Zastąp - - Replace &All - Zastąp wsz&ystko + + Replace &All + Zastąp wsz&ystko - - no match found - nie znaleziono dopasowania + + no match found + nie znaleziono dopasowania - - Replaced %1 occurrence(s) - Wykonano %1 zastąpień + + Replaced %1 occurrence(s) + Wykonano %1 zastąpień - - + + FirstLaunchWizard - - Welcome! - Witaj! + + Welcome! + Witaj! - - Thank you for installing this app! + + Thank you for installing this app! However, before you can begin playing around with JamesDSP for Linux, we'll need to make some adjustments in order to ensure the best possible experience with JDSP. - Dziękujemy za instalację tej aplikacji! + Dziękujemy za instalację tej aplikacji! Jednak zanim zaczniesz korzystać z JamesDSP dla Linuxa, będziemy musieli wprowadzić pewne poprawki, aby zapewnić najlepsze możliwe wrażenia z JDSP. - - - - Next > - Dalej > + + + + Next > + Dalej > - - Run in background? - Uruchamiać w tle? + + Run in background? + Uruchamiać w tle? - - No, don't apply effects in background - Nie, nie stosuj efektów w tle + + No, don't apply effects in background + Nie, nie stosuj efektów w tle - - Yes, minimize to tray icon - Tak, minimalizuj ikonę do zasobnika + + Yes, minimize to tray icon + Tak, minimalizuj ikonę do zasobnika - - Start minimized on boot - Uruchom zminimalizowany przy starcie + + Start minimized on boot + Uruchom zminimalizowany przy starcie - - That's it! - To jest to! + + That's it! + To jest to! - - You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! - Wszystko jest gotowe! Możesz zmienić wszystkie te opcje w sekcji ustawień. Przejrzyj ustawienia, aby uzyskać dalsze opcje dostosowywania. Odwiedź naszą społeczność Telegram, aby uzyskać wsparcie i aktualizacje! + + You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! + Wszystko jest gotowe! Możesz zmienić wszystkie te opcje w sekcji ustawień. Przejrzyj ustawienia, aby uzyskać dalsze opcje dostosowywania. Odwiedź naszą społeczność Telegram, aby uzyskać wsparcie i aktualizacje! - - Telegram - Telegram + + Telegram + Telegram - - Close - Zamknij + + Close + Zamknij - - + + FlatTabWidget - - FlatTabWidget - FlatTabWidget + + FlatTabWidget + FlatTabWidget - - + + GraphicEQFilterGUI - - Enable Graphic EQ - Włącz korektor graficzny + + Enable Graphic EQ + Włącz korektor graficzny - - Freq. - Częstotliwość + + Freq. + Częstotliwość - - Gain - Wzmocnienie + + Gain + Wzmocnienie - - AutoEQ database... - Baza danych AutoEQ... + + AutoEQ database... + Baza danych AutoEQ... - - 15-band - 15-pasmowy + + 15-band + 15-pasmowy - - 31-band - 31-pasmowy + + 31-band + 31-pasmowy - - variable - zmienna + + variable + zmienna - - Import - Importuj + + Import + Importuj - - Export - Eksportuj + + Export + Eksportuj - - Invert response - Odwróć wyjście + + Invert response + Odwróć wyjście - - Normalize response - Normalizuj wyjście + + Normalize response + Normalizuj wyjście - - Reset response - Zresetuj wyjście + + Reset response + Zresetuj wyjście - - - Import EqualizerAPO settings - Importuj ustawienia EqualizerAPO + + + Import EqualizerAPO settings + Importuj ustawienia EqualizerAPO - - Import frequency response - Importuj reakcję na częstotliwość + + Import frequency response + Importuj reakcję na częstotliwość - - - CSV frequency response (*.csv) - Reakcja na częstotliwość CSV (*.csv) + + + CSV frequency response (*.csv) + Reakcja na częstotliwość CSV (*.csv) - - - - All files (*.*) - Wszystkie pliki (*.*) + + + + All files (*.*) + Wszystkie pliki (*.*) - - Import EqualizerAPO graphic EQ preset - Zaimportuj profil korektora graficznego EqualizerAPO + + Import EqualizerAPO graphic EQ preset + Zaimportuj profil korektora graficznego EqualizerAPO - - EqualizerAPO GraphicEQ (*.txt) - Ustawienie korektora graficznego EqualizerAPO (*.txt) + + EqualizerAPO GraphicEQ (*.txt) + Ustawienie korektora graficznego EqualizerAPO (*.txt) - - Export frequency response - Eksportuj reakcję na częstotliwość + + Export frequency response + Eksportuj reakcję na częstotliwość - - + + GzipDownloaderDialog - - Error - Błąd + + Error + Błąd - - %1MB of %2MB downloaded - Pobrano %1MB z %2MB + + %1MB of %2MB downloaded + Pobrano %1MB z %2MB - - Decompressing package... - Rozpakowywanie pakietu... + + Decompressing package... + Rozpakowywanie pakietu... - - + + LiveprogSelectionWidget - - - No script has been loaded - Nie załadowano żadnego skryptu + + + No script has been loaded + Nie załadowano żadnego skryptu - - Enable - Włącz + + Enable + Włącz - - Reset - Zresetuj + + Reset + Zresetuj - - - Create new script - Utwórz nowy skrypt + + + Create new script + Utwórz nowy skrypt - - - Error - Błąd + + + Error + Błąd - - Cannot restore defaults. + + Cannot restore defaults. No EEL file is currently loaded. - Nie można przywrócić wartości domyślnych. + Nie można przywrócić wartości domyślnych. Żaden plik EEL nie jest załadowany. - - Selected EEL file does not exist anymore. + + Selected EEL file does not exist anymore. Please select another one - Wybrany plik EEL już nie istnieje. + Wybrany plik EEL już nie istnieje. Proszę wybrać inny plik - - Edit script - Edytuj skrypt + + Edit script + Edytuj skrypt - - No customizable parameters - Brak konfigurowalnych opcji + + No customizable parameters + Brak konfigurowalnych opcji - - + + MainWindow - - JamesDSP for Linux - JamesDSP dla Linuxa + + JamesDSP for Linux + JamesDSP dla Linuxa - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamiczne wzmocnienie basów</span></p><p>Wzmocnienie basów z wykrywaniem częstotliwości. Automatycznie ustawia własne parametry, takie jak wzmocnienie, szerokość pasma i częstotliwość odcięcia, analizując przychodzący strumień audio</p><p><span style=" text-decoration: underline;">Maksymalne wzmocnienie:</span> dostosowuje ilość dynamicznych efektów wzmocnienia basów.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamiczne wzmocnienie basów</span></p><p>Wzmocnienie basów z wykrywaniem częstotliwości. Automatycznie ustawia własne parametry, takie jak wzmocnienie, szerokość pasma i częstotliwość odcięcia, analizując przychodzący strumień audio</p><p><span style=" text-decoration: underline;">Maksymalne wzmocnienie:</span> dostosowuje ilość dynamicznych efektów wzmocnienia basów.</p></body></html> - - Dynamic bass boost - Dynamiczne wzmocnienie basów + + Dynamic bass boost + Dynamiczne wzmocnienie basów - - Maximum gain - Maksymalne wzmocnienie + + Maximum gain + Maksymalne wzmocnienie - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Modelowanie analogowe</span></p><p>Nadpróbkowane modelowanie analogowe to wolny od aliasingu generator równych składowych harmonicznych.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Modelowanie analogowe</span></p><p>Nadpróbkowane modelowanie analogowe to wolny od aliasingu generator równych składowych harmonicznych.</p></body></html> - - Analog modelling - Modelowanie analogowe + + Analog modelling + Modelowanie analogowe - - Preamp (Harmonics) - Przedwzmacniacz (składowych harmonicznych) + + Preamp (Harmonics) + Przedwzmacniacz (składowych harmonicznych) - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>Ten limiter wyjściowy próbuje uniknąć obcinania sygnału wyjściowego (spowodowanego przez procesor DSP, który próbuje sprawić, by część lub całość dźwięku była głośniejsza niż wcześniej, jeśli wejście jest już bliskie maksimum). </p><p><span style=" text-decoration: underline;">Próg limitera:</span> Powinno to być ustawione na -0.1, chyba że z jakiegoś powodu dźwięk jest przycinany przed obcinaniem cyfrowym, w takim przypadku można ustawić niższe wartości.</p><p><span style=" text-decoration: underline;">Uwolnienie limitera:</span> Limiter działa tylko wtedy, gdy ustawiony jest czas uwolnienia. Krótki czas uwolnienia spowoduje do słyszalnego zniekształcenia ograniczonego dźwięku, zwłaszcza dźwięków o niskich częstotliwościach; przedłużone uwolnienie jest zwykle preferowane, ale zmniejsza nieco objętość, którą można osiągnąć. Jeśli &quot;pompowanie&quot; (znikanie ograniczonego dźwięku i powracanie do niego z czasem) staje się niepożądane, dłuższe lub krótsze uwolnienie może sprawić, że efekt będzie mniej zauważalny.</p><p><span style=" text-decoration: underline;">Wzmocnienie po przetwarzaniu:</span> Wzmocnienie po przetwarzaniu działa jak cyfrowy suwak głośności dla wszystkich efektów, po ich zastosowaniu, ale zanim dźwięk dotrze do limitera.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>Ten limiter wyjściowy próbuje uniknąć obcinania sygnału wyjściowego (spowodowanego przez procesor DSP, który próbuje sprawić, by część lub całość dźwięku była głośniejsza niż wcześniej, jeśli wejście jest już bliskie maksimum). </p><p><span style=" text-decoration: underline;">Próg limitera:</span> Powinno to być ustawione na -0.1, chyba że z jakiegoś powodu dźwięk jest przycinany przed obcinaniem cyfrowym, w takim przypadku można ustawić niższe wartości.</p><p><span style=" text-decoration: underline;">Uwolnienie limitera:</span> Limiter działa tylko wtedy, gdy ustawiony jest czas uwolnienia. Krótki czas uwolnienia spowoduje do słyszalnego zniekształcenia ograniczonego dźwięku, zwłaszcza dźwięków o niskich częstotliwościach; przedłużone uwolnienie jest zwykle preferowane, ale zmniejsza nieco objętość, którą można osiągnąć. Jeśli &quot;pompowanie&quot; (znikanie ograniczonego dźwięku i powracanie do niego z czasem) staje się niepożądane, dłuższe lub krótsze uwolnienie może sprawić, że efekt będzie mniej zauważalny.</p><p><span style=" text-decoration: underline;">Wzmocnienie po przetwarzaniu:</span> Wzmocnienie po przetwarzaniu działa jak cyfrowy suwak głośności dla wszystkich efektów, po ich zastosowaniu, ale zanim dźwięk dotrze do limitera.</p></body></html> - - Limiter/Master - Limiter/master + + Limiter/Master + Limiter/master - - Threshold - Próg + + Threshold + Próg - - Release - Uwolnienie + + Release + Uwolnienie - - Post gain - Wzmocnienie po przetwarzaniu + + Post gain + Wzmocnienie po przetwarzaniu - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Kompandor dynamiki</span></p><p>Włącza/wyłącza kompandor zakresu dynamicznego.</p></body></html> - - Dynamic range compander - + + Dynamic range compander + Kompandor dynamiki - - Time constant - + + Time constant + Stała czasowa - - Granularity - + + Granularity + Stopień szczegółowości - - Time-frequency transforms - + + Time-frequency transforms + Przekształcenia czasowo-częstotliwościowe - - Uniform (Short-time Fourier) - + + Uniform (Short-time Fourier) + Jednolity (krótkotrwały Fourier) - - Multiresolution (Continuous wavelet) - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Obejmuje tradycyjny tryb BS2B (DSP stereofoniczny na binauralny Bauera) oraz bardziej zaawansowane, oparte na splocie, podejście HRTF.</p></body></html> - - Multiresolution (Time domain) - + + + Crossfeed + Crossfeed - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Obejmuje tradycyjny tryb BS2B (DSP stereofoniczny na binauralny Bauera) oraz bardziej zaawansowane, oparte na splocie, podejście HRTF.</p></body></html> + + Mode + Tryb - - - Crossfeed - Crossfeed + + Custom BS2B parameters + Własne parametry BS2B - - Mode - Tryb + + Cut frequency + Częstotliwość cięcia - - Custom BS2B parameters - Własne parametry BS2B + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Rozpiętość dźwięku</span></p><p>Algorytm, który wykrywa stereofoniczną zależność fazową w kilku obszarach widmowych i poprawia stereofoniczną scenę dźwiękową bez wpływu na integralność wokalu.</p></body></html> - - Cut frequency - Częstotliwość cięcia + + Soundstage wideness + Rozpiętość dźwięku - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Rozpiętość dźwięku</span></p><p>Algorytm, który wykrywa stereofoniczną zależność fazową w kilku obszarach widmowych i poprawia stereofoniczną scenę dźwiękową bez wpływu na integralność wokalu.</p></body></html> + + Widen level + Poszerz poziom - - Soundstage wideness - Rozpiętość dźwięku + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Pogłos</span></p><p>Zaawansowana sieć pogłosowa IIR (Progenitor 2)</p></body></html> - - Widen level - Poszerz poziom + + Enable reverberation + Włącz pogłos - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Pogłos</span></p><p>Zaawansowana sieć pogłosowa IIR (Progenitor 2)</p></body></html> + + Presets + Profil ustawień - - Enable reverberation - Włącz pogłos + + + ... + ... - - Presets - Profil ustawień + + Oversampling factor + Współczynnik nadpróbkowania - - - ... - ... + + Early reflection factor + Współczynnik wczesnego odbicia - - Oversampling factor - Współczynnik nadpróbkowania + + Early reflection amount + Ilość wczesnych odbić - - Early reflection factor - Współczynnik wczesnego odbicia + + Early reflection width + Szerokość wczesnego odbicia - - Early reflection amount - Ilość wczesnych odbić + + Lowpass cutoff (Input) + Odcięcie dolnoprzepustowe (wejścia) - - Early reflection width - Szerokość wczesnego odbicia + + Lowpass cutoff (Bass) + Odcięcie dolnoprzepustowe (basu) - - Lowpass cutoff (Input) - Odcięcie dolnoprzepustowe (wejścia) + + Lowpass cutoff (Damp) + Odcięcie dolnoprzepustowe (tłumienia) - - Lowpass cutoff (Bass) - Odcięcie dolnoprzepustowe (basu) + + Lowpass cutoff (Output) + Odcięcie dolnoprzepustowe (wyjścia) - - Lowpass cutoff (Damp) - Odcięcie dolnoprzepustowe (tłumienia) + + Final wet mix + Końcowy mokry miks - - Lowpass cutoff (Output) - Odcięcie dolnoprzepustowe (wyjścia) + + Final dry mix + Końcowy suchy miks - - Final wet mix - Końcowy mokry miks + + Reverb wetness + Wilgotność pogłosu - - Final dry mix - Końcowy suchy miks + + Width L/R mix + Szerokość miksu L/R - - Reverb wetness - Wilgotność pogłosu + + LFO wander amount + Wielkość fluktuacji LFO - - Width L/R mix - Szerokość miksu L/R + + LFO spin amount + Wielkość wirowania LFO - - LFO wander amount - Wielkość fluktuacji LFO + + Time decay + Czas zaniku - - LFO spin amount - Wielkość wirowania LFO + + Delay + Opóźnienie - - Time decay - Czas zaniku + + Bass boost + Wzmocnienie basu - - Delay - Opóźnienie + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Korektor wielomodalny</span></p><p>Włącza/wyłącza korektor wielomodalny.</p><p><span style=" text-decoration: underline;">Typ filtra:</span> Korektor wielomodalny obsługuje zarówno FIR (faza minimalna), jak i kilka trybów filtrowania IIR.</p></body></html> - - Bass boost - Wzmocnienie basu + + FIR Minimum phase + Faza minimalna FIR - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + + IIR 4 order + IIR 4 rzędu - - FIR Minimum phase - + + IIR 6 order + IIR 6 rzędu - - IIR 4 order - + + IIR 8 order + IIR 8 rzędu - - IIR 6 order - + + IIR 10 order + IIR 10 rzędu - - IIR 8 order - + + IIR 12 order + IIR 12 rzędu - - IIR 10 order - + + Enable EQ + Włącz korektor - - IIR 12 order - + + Multiresolution (Continuous wavelet, incomplete dual frame) + - - Enable EQ - Włącz korektor + + Pseudo multiresolution (Undersampling frame) + - - Presets... - Profil ustawień... + + Pseudo multiresolution (Time domain, zero latency) + - - Filter type - Typ filtra + + Presets... + Profil ustawień... - - Interpolator - Interpolator + + Filter type + Typ filtra - - <html><head/><body><p>Interpolation mode</p></body></html> - <html><head/><body><p>Tryb interpolacji</p></body></html> + + Interpolator + Interpolator - - Piecewise Cubic Hermite Interpolating Polynomial - Kawałkowy sześcienny interpolujący wielomian Hermite'a + + <html><head/><body><p>Interpolation mode</p></body></html> + <html><head/><body><p>Tryb interpolacji</p></body></html> - - Modified Hiroshi Akima spline - Zmodyfikowany splajn Hiroshi Akima + + Piecewise Cubic Hermite Interpolating Polynomial + Kawałkowy sześcienny interpolujący wielomian Hermite'a - - Reset EQ - Zresetuj korektor + + Modified Hiroshi Akima spline + Zmodyfikowany splajn Hiroshi Akima - - Fixed bands - Ustalone pasma + + Reset EQ + Zresetuj korektor - - Flexible bands - Elastyczne pasma + + Fixed bands + Ustalone pasma - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Konwolwer</span></p><p>Podzielony na partycje konwolwer (konwolwer z automatyczną segmentacją). Wybierz plik odpowiedzi impulsowej, który ma zostać spleciony. Pobiera charakterystykę sygnału odpowiedzi impulsowej i stosuje ją do przychodzącego dźwięku w czasie rzeczywistym.</p><p>Obsługuje odpowiedzi impulsowe mono, stereo, pełne/prawdziwe stereo (LL, LR, RL, RR).</p><p><span style=" text-decoration: underline;">Optymalizacja odpowiedzi impulsowej:</span></p><p>Ta opcja ma na celu maksymalne skrócenie długości odpowiedzi impulsowej; chodzi o to, aby maksymalnie zmniejszyć opóźnienie, prawdopodobnie zmniejszając zużycie energii.</p></body></html> + + Flexible bands + Elastyczne pasma - - - Filesystem - System plików + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Konwolwer</span></p><p>Podzielony na partycje konwolwer (konwolwer z automatyczną segmentacją). Wybierz plik odpowiedzi impulsowej, który ma zostać spleciony. Pobiera charakterystykę sygnału odpowiedzi impulsowej i stosuje ją do przychodzącego dźwięku w czasie rzeczywistym.</p><p>Obsługuje odpowiedzi impulsowe mono, stereo, pełne/prawdziwe stereo (LL, LR, RL, RR).</p><p><span style=" text-decoration: underline;">Optymalizacja odpowiedzi impulsowej:</span></p><p>Ta opcja ma na celu maksymalne skrócenie długości odpowiedzi impulsowej; chodzi o to, aby maksymalnie zmniejszyć opóźnienie, prawdopodobnie zmniejszając zużycie energii.</p></body></html> - - Bookmarks - Zakładki + + + Filesystem + System plików - - Enable convolver - Włącz konwolwer + + Bookmarks + Zakładki - - IR optimization - Optymalizacja IR + + Enable convolver + Włącz konwolwer - - Original - Oryginalny + + IR optimization + Optymalizacja IR - - Shrink - Zmniejsz + + Original + Oryginalny - - Minimum phase transform and shrink - Przekształć układ minimalnofazowy i zmniejsz + + Shrink + Zmniejsz - - Adv. waveform editing - Zaaw. edycja kształtu fali + + Minimum phase transform and shrink + Przekształć układ minimalnofazowy i zmniejsz - - Edit - Edytuj + + Adv. waveform editing + Zaaw. edycja kształtu fali - - Channels: - Kanały: + + Edit + Edytuj - - Samples: - Próbki: + + Channels: + Kanały: - - No selection - Brak wyboru + + Samples: + Próbki: - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Głównym celem jest wykonanie korekcji parametrycznej dźwięku, jednak wymaga to od użytkownika dostarczenia pliku .vdc, który generuje DDCToolbox.</p><p>ViPER-DDC w jDSP to uogólniona implementacja filtrów sekcji drugiego rzędu, która różni się nieco od implementacji w Viper4Android. V4A obsługuje tylko szczytowy filtr parametryczny; powodem jest to, że V4A używa właściwości współczynnika udziału filtra szczytowego. Natomiast jDSP nie ma takiego założenia.</p></body></html> + + No selection + Brak wyboru - - Database - Baza danych + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Głównym celem jest wykonanie korekcji parametrycznej dźwięku, jednak wymaga to od użytkownika dostarczenia pliku .vdc, który generuje DDCToolbox.</p><p>ViPER-DDC w jDSP to uogólniona implementacja filtrów sekcji drugiego rzędu, która różni się nieco od implementacji w Viper4Android. V4A obsługuje tylko szczytowy filtr parametryczny; powodem jest to, że V4A używa właściwości współczynnika udziału filtra szczytowego. Natomiast jDSP nie ma takiego założenia.</p></body></html> - - Create - Utwórz + + Database + Baza danych - - Create your custom DDC files using DDCToolbox - Utwórz własne pliki DDC za pomocą DDCToolbox + + Create + Utwórz - - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + + Create your custom DDC files using DDCToolbox + Utwórz własne pliki DDC za pomocą DDCToolbox - - View installation instructions - Pokaż instrukcje instalacji + + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - - Enable ViPER-DDC - Włącz ViPER-DDC + + View installation instructions + Pokaż instrukcje instalacji - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Programowalny DSP na żywo</span></p><p>Jest to maszyna wirtualna, która kompiluje plik kodu .eel jako dane wejściowe i uruchamia instrukcje; w prostych słowach pozwala użytkownikom programować własne efekty dźwiękowe.</p><p>Liczba obsługiwanych operacji jest ogromna; sprawdź oficjalną dokumentację: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Naciśnij 'Edytuj skrypt', aby uruchomić wbudowane środowisko skryptowe dla plików kodu EEL.</p></body></html> + + Enable ViPER-DDC + Włącz ViPER-DDC - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Korektor odpowiedzi samowolnej</span></p><p>Znany również jako GraphicEQ z EqualizerAPO.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Programowalny DSP na żywo</span></p><p>Jest to maszyna wirtualna, która kompiluje plik kodu .eel jako dane wejściowe i uruchamia instrukcje; w prostych słowach pozwala użytkownikom programować własne efekty dźwiękowe.</p><p>Liczba obsługiwanych operacji jest ogromna; sprawdź oficjalną dokumentację: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Naciśnij 'Edytuj skrypt', aby uruchomić wbudowane środowisko skryptowe dla plików kodu EEL.</p></body></html> - - Custom Presets - Profili użytkownika + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Korektor odpowiedzi samowolnej</span></p><p>Znany również jako GraphicEQ z EqualizerAPO.</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Profili użytkownika</span></p><p>Twórz własne profili użytkownika i zarządzaj nimi</p></body></html> + + Custom Presets + Profili użytkownika - - Settings - Ustawienia + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Profili użytkownika</span></p><p>Twórz własne profili użytkownika i zarządzaj nimi</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Ustawienia</span></p><p>Skonfiguruj tę aplikację</p></body></html> + + Settings + Ustawienia - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reszta</span></p><p>Różne akcje, które są używane rzadziej</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Ustawienia</span></p><p>Skonfiguruj tę aplikację</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Pomiń filtry</span></p><p>Ta opcja określa, czy efekty dźwiękowe mają być włączone, czy wyłączone.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reszta</span></p><p>Różne akcje, które są używane rzadziej</p></body></html> - - Bypass - Pomiń filtry + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Pomiń filtry</span></p><p>Ta opcja określa, czy efekty dźwiękowe mają być włączone, czy wyłączone.</p></body></html> - - %1 connected - Preset loaded automatically - %1 podłączone - profil użytkownika został załadowany samoczynnie + + Bypass + Pomiń filtry - - Cannot execute script - Nie można wykonać skryptu + + %1 connected - Preset loaded automatically + %1 podłączone - profil użytkownika został załadowany samoczynnie - - The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - Bieżący plik EEL (w '%1') nie istnieje już w systemie plików. Proszę ponownie otworzyć plik ręcznie. + + Cannot execute script + Nie można wykonać skryptu - - Apps - Aplikacje + + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. + Bieżący plik EEL (w '%1') nie istnieje już w systemie plików. Proszę ponownie otworzyć plik ręcznie. - - Driver status - Stan sterownika + + Apps + Aplikacje - - Relink audio pipeline - Połącz potok audio ponownie + + Driver status + Stan sterownika - - Reset to defaults - Przywróć domyślne + + Relink audio pipeline + Połącz potok audio ponownie - - Load from file - Załaduj z pliku + + Reset to defaults + Przywróć domyślne - - Save to file - Zapisz do pliku + + Load from file + Załaduj z pliku - - Open LiveprogIDE - Otwórz LiveprogIDE + + Save to file + Zapisz do pliku - - What's this... (Select UI element) - Co to jest... (Wybierz element UI) + + Open LiveprogIDE + Otwórz LiveprogIDE - - Bass/Misc - Bas/różne + + What's this... (Select UI element) + Co to jest... (Wybierz element UI) - - Sound Positioning - Pozycjonowanie dźwięku + + Bass/Misc + Bas/różne - - Reverb - Pogłos + + Sound Positioning + Pozycjonowanie dźwięku - - Equalizer - Korektor + + Reverb + Pogłos - - Convolver - Konwolwer + + Equalizer + Korektor - - DDC - DDC + + Convolver + Konwolwer - - Liveprog - Liveprog + + DDC + DDC - - Graphic EQ - Korektor graficzny + + Liveprog + Liveprog - - Launch application - Uruchom aplikację + + Graphic EQ + Korektor graficzny - - Reset Configuration - Zresetuj konfigurację + + Launch application + Uruchom aplikację - - Are you sure? - Na pewno? + + Reset Configuration + Zresetuj konfigurację - - Load custom audio.conf - Wczytaj własne audio.conf + + Are you sure? + Na pewno? - - Save current audio.conf - Zapisz bieżący audio.conf + + Load custom audio.conf + Wczytaj własne audio.conf - - Very low - + + Save current audio.conf + Zapisz bieżący audio.conf - - Low - + + Very low + Bardzo niski - - Medium - + + Low + Niski - - High - + + Medium + Średni - - Extreme - + + High + Wysoki - - Advanced waveform editing - Zaawansowana edycja kształtu fali + + Extreme + Ekstremalny - - Advanced waveform editing (default: -80;-100;0;0;0;0) + + Advanced waveform editing + Zaawansowana edycja kształtu fali + + + + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. This setting is only in effect if IR optimization is enabled. @@ -1656,7 +1661,7 @@ This setting is only in effect if IR optimization is enabled. 5th value: Channel 3 delay (samples) 6th value: Channel 4 delay (samples) - Zaawansowana edycja przebiegów (domyślnie: -80;-100;0;0;0;0) + Zaawansowana edycja przebiegów (domyślnie: -80;-100;0;0;0;0) Ustaw próg automatycznego przycinania IR i dodaj opóźnienie do pociętego IR/przekształconego w układ minimalnofazowy. To ustawienie działa tylko wtedy, gdy włączona jest optymalizacja IR. @@ -1669,1218 +1674,1290 @@ Wartość 5: opóźnienie kanału 3 (próbki) Wartość 6: opóźnienie kanału 4 (próbki) - - + + NewFileWizard - - Create new script - Utwórz nowy skrypt + + Create new script + Utwórz nowy skrypt - - New script - Nowy skrypt + + New script + Nowy skrypt - - Define and generate a basic script template - Zdefiniuj i wygeneruj podstawowy szablon skryptu + + Define and generate a basic script template + Zdefiniuj i wygeneruj podstawowy szablon skryptu - - Workspace directory - Katalog projektu + + Workspace directory + Katalog projektu - - File name - Nazwa pliku + + File name + Nazwa pliku - - Description - Opis + + Description + Opis - - Untitled script - Skrypt bez nazwy + + Untitled script + Skrypt bez nazwy - - Select directory - Wybierz katalog + + Select directory + Wybierz katalog - - - - Error - Błąd + + + + Error + Błąd - - Workspace directory does not exist - Katalog projektu nie istnieje + + Workspace directory does not exist + Katalog projektu nie istnieje - - A file with the same name already exists at this loction - Plik o tej samej nazwie już istnieje w tej lokalizacji + + A file with the same name already exists at this loction + Plik o tej samej nazwie już istnieje w tej lokalizacji - - File name is empty or contains illegal characters - Nazwa pliku jest pusta lub zawiera niedozwolone znaki + + File name is empty or contains illegal characters + Nazwa pliku jest pusta lub zawiera niedozwolone znaki - - + + OverlayMsgProxy - - - - Close - Zamknij + + + + Close + Zamknij - - + + PaletteEditor - - Palette editor - Edytor palet + + Palette editor + Edytor palet - - - - - - Select... - Wybierz... + + + + + + Select... + Wybierz... - - Base Color - Kolor podstawowy + + Base Color + Kolor podstawowy - - Background Color - Kolor tła + + Background Color + Kolor tła - - Foreground Color - Kolor pierwszoplanowy + + Foreground Color + Kolor pierwszoplanowy - - Close - Zamknij + + Close + Zamknij - - Reset - Zresetuj + + Reset + Zresetuj - - White Icons - Białe ikony + + White Icons + Białe ikony - - Selection Color - Kolor zaznaczenia + + Selection Color + Kolor zaznaczenia - - Disabled Color - Kolor nieaktywnego elementu + + Disabled Color + Kolor nieaktywnego elementu - - + + PresetAddRuleFragment - - Add new rule... - Dodaj nową zasadę... + + Add new rule... + Dodaj nową zasadę... - - If - Jeśli + + If + Jeśli - - is connected, then load preset - jest połączone, załaduj profil + + is connected, then load preset + jest połączone, załaduj profil - - + + PresetDialog - - Presets - Profile ustawień + + Presets + Profile ustawień - - Preset name - Nazwa profilu + + Preset name + Nazwa profilu - - Adds current config as a preset - Dodaje bieżącą konfigurację jako profil + + Adds current config as a preset + Dodaje bieżącą konfigurację jako profil - - Save - Zapisz + + Save + Zapisz - - Rules... - Zasady... + + Rules... + Zasady... - - Remove - Usuń + + Remove + Usuń - - Load - Załaduj + + Load + Załaduj - - + + PresetFragment - - No presets saved - Brak zapisanych profili + + No presets saved + Brak zapisanych profili - - Cannot load preset - Nie można wczytać profilu + + Cannot load preset + Nie można wczytać profilu - - Selected file does not exist anymore - Wybrany plik już nie istnieje + + Selected file does not exist anymore + Wybrany plik już nie istnieje - - Overwrite - Nadpisz + + Overwrite + Nadpisz - - Save - Zapisz + + Save + Zapisz - - Rename - Zmień nazwę + + Rename + Zmień nazwę - - Delete - Usuń + + Delete + Usuń - - Rename preset - Zmień nazwę profilu + + Rename preset + Zmień nazwę profilu - - Enter new name - Wpisz nową nazwę + + Enter new name + Wpisz nową nazwę - - + + PresetRuleDialog - - Preset auto-switch rules - Zasady samo-przełączania profili + + Preset auto-switch rules + Zasady samo-przełączania profili - - Auto-switch rules - Zasady samo-przełączania + + Auto-switch rules + Zasady samo-przełączania - - Add new rule... - Dodaj nową zasadę... + + Add new rule... + Dodaj nową zasadę... - - Delete selection - Usuń wybrane + + Delete selection + Usuń wybrane - - No rules defined - Nie ustalono żadnych zasad + + No rules defined + Nie ustalono żadnych zasad - - - Cannot add new rule - Nie można dodać nowej zasady + + + Cannot add new rule + Nie można dodać nowej zasady - - All connected audio devices have already a rule defined. + + All connected audio devices have already a rule defined. You can only create one rule per device. - Wszystkie podłączone urządzenia audio mają już ustaloną zasadę. + Wszystkie podłączone urządzenia audio mają już ustaloną zasadę. Możesz utworzyć tylko jedną zasadę na urządzenie. - - You have no presets saved. + + You have no presets saved. Please create one first before adding a new rule. - Nie masz zapisanych profili. + Nie masz zapisanych profili. Utwórz profil, zanim dodasz nową regułę. - - + + PresetRuleTableModel - - Device - Urządzenie + + Device + Urządzenie - - Assigned preset - Przypisany profil + + Assigned preset + Przypisany profil - - + + QObject - - List All Tabs - Wyświetl listę wszystkich kart + + List All Tabs + Wyświetl listę wszystkich kart - - Detach Group - Odłącz grupę + + Detach Group + Odłącz grupę - - Close Active Tab - Zamknij aktywną kartę + + Close Active Tab + Zamknij aktywną kartę - - Close Group - Zamknij grupę + + Close Group + Zamknij grupę - - Close Tab - Zamknij kartę + + Close Tab + Zamknij kartę - - Something went wrong - Coś poszło nie tak + + Something went wrong + Coś poszło nie tak - - Failed to open URL with default browser. + + Failed to open URL with default browser. Please copy this URL manually: - Nie udało się otworzyć adresu URL w domyślnej przeglądarce. + Nie udało się otworzyć adresu URL w domyślnej przeglądarce. Skopiuj ten adres URL ręcznie: - - Flat - Płaski + + Flat + Płaski - - Pop - Pop + + Pop + Pop - - Rock - Rock + + Rock + Rock - - Jazz - Jazz + + Jazz + Jazz - - Classic - Klasyka + + Classic + Klasyka - - Bass - Bas + + Bass + Bas - - Clear - Czysty + + Clear + Czysty - - Hip-Hop - Hip-hop + + Hip-Hop + Hip-hop - - Dubstep - Dubstep + + Dubstep + Dubstep - - Movie - Film + + Movie + Film - - Metal - Metal + + Metal + Metal - - Vocal Booster - Wzmocnienie wokalu + + Vocal Booster + Wzmocnienie wokalu - - Hardstyle - Hardstyle + + Hardstyle + Hardstyle - - Acoustic - Akustyka + + Acoustic + Akustyka - - R&B - R&B + + R&B + R&B - - Electronic - Muzyka elektroniczna + + Electronic + Muzyka elektroniczna - - Deep Bass - Głęboki bas + + Deep Bass + Głęboki bas - - Beats - Beats + + Beats + Beats - - BS2B Custom - Własny BS2B + + BS2B Custom + Własny BS2B - - BS2B Weak - Słaby BS2B + + BS2B Weak + Słaby BS2B - - BS2B Strong - Silny BS2B + + BS2B Strong + Silny BS2B - - Out of head - Poza głową + + Out of head + Poza głową - - Surround 1 - Dźwięk przestrzenny 1 + + Surround 1 + Dźwięk przestrzenny 1 - - Surround 2 - Dźwięk przestrzenny 2 + + Surround 2 + Dźwięk przestrzenny 2 - - Joe0Bloggs Realistic surround - Realistyczny dźwięk przestrzenny Joe0Bloggs + + Joe0Bloggs Realistic surround + Realistyczny dźwięk przestrzenny Joe0Bloggs - - Default - Domyślne + + Default + Domyślne - - Small hall 1 - Mała hala 1 + + Small hall 1 + Mała hala 1 - - Small hall 2 - Mała hala 2 + + Small hall 2 + Mała hala 2 - - Medium hall 1 - Średnia hala 1 + + Medium hall 1 + Średnia hala 1 - - Medium hall 2 - Średnia hala 2 + + Medium hall 2 + Średnia hala 2 - - Large hall 1 - Duża hala 1 + + Large hall 1 + Duża hala 1 - - Large hall 2 - Duża hala 2 + + Large hall 2 + Duża hala 2 - - Small room 1 - Mały pokój 1 + + Small room 1 + Mały pokój 1 - - Small room 2 - Mały pokój 2 + + Small room 2 + Mały pokój 2 - - Medium room 1 - Średni pokój 1 + + Medium room 1 + Średni pokój 1 - - Medium room 2 - Średni pokój 2 + + Medium room 2 + Średni pokój 2 - - Large room 1 - Duży pokój 1 + + Large room 1 + Duży pokój 1 - - Large room 2 - Duży pokój 2 + + Large room 2 + Duży pokój 2 - - Medium ER 1 - Średni ER 1 + + Medium ER 1 + Średni ER 1 - - Medium ER 2 - Średni ER 2 + + Medium ER 2 + Średni ER 2 - - Plate high - Wysoka płyta + + Plate high + Wysoka płyta - - Plate low - Niska płyta + + Plate low + Niska płyta - - Long reverb 1 - Długi pogłos 1 + + Long reverb 1 + Długi pogłos 1 - - Long reverb 2 - Długi pogłos 2 + + Long reverb 2 + Długi pogłos 2 - - error - błąd + + error + błąd - - creating - tworzenie + + creating + tworzenie - - suspended - zawieszony + + suspended + zawieszony - - - idle - bezczynny + + + idle + bezczynny - - - running - uruchomiony + + + running + uruchomiony - - not connected - nie połączony + + not connected + nie połączony - - JamesDSP is an advanced audio processing engine available for Linux and Android systems. - JamesDSP to zaawansowany silnik przetwarzania dźwięku dostępny dla systemów Linux i Android. + + JamesDSP is an advanced audio processing engine available for Linux and Android systems. + JamesDSP to zaawansowany silnik przetwarzania dźwięku dostępny dla systemów Linux i Android. - - Auto-start permission has been denied - Odmowa dostępu do automatycznego uruchamiania + + Auto-start permission has been denied + Odmowa dostępu do automatycznego uruchamiania - - Please run 'flatpak permission-reset %1' and reenable auto-start. - Uruchom 'flatpak permission-reset %1' i włącz automatyczne uruchamianie ponownie. + + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. + Proszę wykonać polecenie 'flatpak permission-set background background %1 yes' i ponownie włączyć opcję samouruchamiania. - - Unknown error - Nieznany błąd + + Unknown error + Nieznany błąd - - Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 - Upewnij się, że implementacja portalu XDG w tle jest dostępna i aktywna, aby korzystać z funkcji automatycznego uruchamiania. %1 + + Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 + Upewnij się, że implementacja portalu XDG w tle jest dostępna i aktywna, aby korzystać z funkcji automatycznego uruchamiania. %1 - - + + SettingsFragment - - Settings - Ustawienia + + Settings + Ustawienia + + + + Category + Kategoria + + + + Interface + Interfejs + + + + Audio processing + Przetwarzanie audio + + + + Default paths + Domyślne ścieżki + + + + Devices + Urządzenia + + + + Network + Sieć + + + + Tray icon + Ikona w zasobniku systemowym + + + + Context menu + Menu kontekstowe + + + + Theme + Motyw + + + + Edit + Edytuj - - Category - Kategoria + + Color scheme + Schemat kolorów - - Interface - Interfejs + + Equalizer + Korektor - - Default paths - Domyślne ścieżki + + Always display handles + Zawsze wyświetlaj uchwyty - - Devices - Urządzenia + + Convolver benchmarking + Benchmarking konwolwera - - Network - Sieć + + Benchmark now + - - Tray icon - Ikona w zasobniku systemowym + + Clear cached data + - - Context menu - Menu kontekstowe + + Enable benchmarking on boot + Włącz benchmarking przy starcie - - Theme - Motyw + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + - - Edit - Edytuj + + Workarounds + - - Color scheme - Schemat kolorów + + Allow volume control of the virtual sink device + - - Equalizer - Korektor + + Restart required to apply changes. May cause audio loss in some cases. + - - Always display handles - Zawsze wyświetlaj uchwyty + + Impluse responses + Odpowiedzi impulsowe - - Impluse responses - Odpowiedzi impulsowe + + VDCs + VDC - - VDCs - VDC + + Liveprog scripts + Skrypty Liveprog - - Liveprog scripts - Skrypty Liveprog + + Save + Zapisz - - Save - Zapisz + + Built-in assets + Wbudowane zasoby - - Built-in assets - Wbudowane zasoby + + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> + <html><head/><body><p>Ta opcja sprawdzi przy każdym uruchomieniu, czy brakuje jednego z domyślnych skryptów EEL. W takim przypadku brakujące pliki zostaną automatycznie przywrócone z zasobów. (Nie zastąpi ich, jeśli już istnieją!)</p></body></html> - - <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - <html><head/><body><p>Ta opcja sprawdzi przy każdym uruchomieniu, czy brakuje jednego z domyślnych skryptów EEL. W takim przypadku brakujące pliki zostaną automatycznie przywrócone z zasobów. (Nie zastąpi ich, jeśli już istnieją!)</p></body></html> + + Extract bundled assets on startup + Rozpakuj pakiety zasobów podczas uruchamiania - - Extract bundled assets on startup - Rozpakuj pakiety zasobów podczas uruchamiania + + Extract now + Rozpakuj teraz - - Extract now - Rozpakuj teraz + + Select sink/device to be processed + Wybierz sink/urządzenie do przetworzenia - - Select sink/device to be processed - Wybierz sink/urządzenie do przetworzenia + + Use default output device (recommended) + Użyj domyślnego urządzenia wyjściowego (zalecane) - - Use default output device (recommended) - Użyj domyślnego urządzenia wyjściowego (zalecane) + + Manually select device + Wybierz urządzenie ręcznie - - Manually select device - Wybierz urządzenie ręcznie + + Device + Urządzenie - - Device - Urządzenie + + Blocklisted apps + Zablokowane aplikacje - - Blocklisted apps - Zablokowane aplikacje + + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. + W sekcji 'Aplikacje', dostępnej w menu z trzema kropkami w oknie głównym, możesz zablokować aplikacje odtwarzające dźwięk przed przetwarzaniem przez JamesDSP. - - In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - W sekcji 'Aplikacje', dostępnej w menu z trzema kropkami w oknie głównym, możesz zablokować aplikacje odtwarzające dźwięk przed przetwarzaniem przez JamesDSP. + + Allowlist mode (apps need to be explicitly enabled instead) + Tryb listy dozwolonych (w zamian aplikacje muszą być konkretnie włączone) - - Allowlist mode (apps need to be explicitly enabled instead) - Tryb listy dozwolonych (w zamian aplikacje muszą być konkretnie włączone) + + Clear list + Wyczyść listę - - Clear list - Wyczyść listę + + AutoEQ database + Baza danych AutoEQ - - AutoEQ database - Baza danych AutoEQ + + Status: + Stan: - - Status: - Stan: + + unknown + nieznane - - unknown - nieznane + + Manage local database + Zarządzaj lokalną bazą danych - - Manage local database - Zarządzaj lokalną bazą danych + + Run in background (tray icon) + Uruchom w tle (ikona w zasobniku) - - Run in background (tray icon) - Uruchom w tle (ikona w zasobniku) + + No, shutdown audio effects when closing app + Nie, wyłącz efekty dźwiękowe po zamknięciu aplikacji - - No, shutdown audio effects when closing app - Nie, wyłącz efekty dźwiękowe po zamknięciu aplikacji + + Yes, minimize to tray icon when closing app + Tak, zminimalizuj do ikony w zasobniku po zamknięciu aplikacji - - Yes, minimize to tray icon when closing app - Tak, zminimalizuj do ikony w zasobniku po zamknięciu aplikacji + + Auto-start + Samouruchamianie - - Auto-start - Samouruchamianie + + Start minimized on boot + Uruchom zminimalizowane przy starcie - - Start minimized on boot - Uruchom zminimalizowane przy starcie + + Systray not supported on this system + Zasobnik systemowy nie jest obsługiwany w tym systemie - - Systray not supported on this system - Zasobnik systemowy nie jest obsługiwany w tym systemie + + Visit Github repo + Odwiedź repozytorium Github - - Visit Github repo - Odwiedź repozytorium Github + + Run setup wizard + Uruchom kreatora konfiguracji - - Run setup wizard - Uruchom kreatora konfiguracji + + Close + Zamknij - - Close - Zamknij + + + benchmark data loaded + - - Unknown (%1) - Nieznane (%1) + + Unknown (%1) + Nieznane (%1) - - installed - zainstalowano + + installed + zainstalowano - - not installed - nie zainstalowano + + not installed + nie zainstalowano - - Override liveprog scripts? - Zastąpić skrypty liveprog? + + + no benchmark data stored + - - Do you want to override existing default liveprog scripts? + + Override liveprog scripts? + Zastąpić skrypty liveprog? + + + + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - Czy chcesz zastąpić istniejące domyślne skrypty liveprog? + Czy chcesz zastąpić istniejące domyślne skrypty liveprog? Jeśli zostały zmodyfikowane, zostaną zresetowane. - - Extract assets - Rozpakuj zasoby + + Extract assets + Rozpakuj zasoby - - %1 files have been restored - %1 plików zostało przywróconych + + %1 files have been restored + %1 plików zostało przywróconych - - You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. + + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - Zamierzasz włączyć tryb listy dozwolonych. JamesDSP nie będzie domyślnie przetwarzać wszystkich aplikacji, gdy ten tryb jest aktywny. Musisz konkretnie zezwolić na przetwarzanie każdej aplikacji w menu 'Aplikacje'. + Zamierzasz włączyć tryb listy dozwolonych. JamesDSP nie będzie domyślnie przetwarzać wszystkich aplikacji, gdy ten tryb jest aktywny. Musisz konkretnie zezwolić na przetwarzanie każdej aplikacji w menu 'Aplikacje'. - - Are you sure? - Na pewno? + + Are you sure? + Na pewno? + + + + This action will reset your current blocklist or allowlist. Do you want to continue? + Spowoduje to zresetowanie bieżącej listy zablokowanych lub dozwolonych. Czy chcesz kontynuować? + + + + Warning + Uwaga + + + + Do you really want to restore the default menu layout? + Czy na pewno chcesz przywrócić domyślny układ menu? - - This action will reset your current blocklist or allowlist. Do you want to continue? - Spowoduje to zresetowanie bieżącej listy zablokowanych lub dozwolonych. Czy chcesz kontynuować? + + waiting for result... + - - Warning - Uwaga + + Cache cleared + - - Do you really want to restore the default menu layout? - Czy na pewno chcesz przywrócić domyślny układ menu? + + Benchmark data has been cleared. Restart this app to fully apply the changes. + - - + + SingleInstanceMonitor - - Another instance of JamesDSP is already active and has been put in the foreground. - Inna instancja JamesDSP jest już aktywna i została umieszczona na pierwszym planie. + + Another instance of JamesDSP is already active and has been put in the foreground. + Inna instancja JamesDSP jest już aktywna i została umieszczona na pierwszym planie. - - + + StatusDialog - - Status - Stan + + Status + Stan - - Application version - Wersja aplikacji + + Application version + Wersja aplikacji - - JamesDSP core version - Wersja jądra JamesDSP + + JamesDSP core version + Wersja jądra JamesDSP - - Processing state - Stan przetwarzania + + Processing state + Stan przetwarzania - - Audio format - Format audio + + Audio format + Format audio - - Sampling rate - Częstotliwość próbkowania + + Sampling rate + Częstotliwość próbkowania - - + + StatusFragment - - Processing - Przetwarzane + + Processing + Przetwarzane - - Not processing - Nie przetwarzane + + Not processing + Nie przetwarzane - - + + TrayIcon - - &Bypass - P&omiń filtry + + &Bypass + P&omiń filtry - - &Presets - &Profile ustawień + + &Presets + &Profile ustawień - - &Convolver bookmarks - Za&kładki konwolweru + + &Convolver bookmarks + Za&kładki konwolweru - - JamesDSP for Linux - JamesDSP dla Linuxa + + JamesDSP for Linux + JamesDSP dla Linuxa - - No presets found - Nie znaleziono profili + + No presets found + Nie znaleziono profili - - No impulse responses found - Nie znaleziono odpowiedzi impulsowych + + No impulse responses found + Nie znaleziono odpowiedzi impulsowych - - &Reload JamesDSP - &Załaduj ponownie JamesDSP + + &Reload JamesDSP + &Załaduj ponownie JamesDSP - - - &Quit - &Wyjdź + + + &Quit + &Wyjdź - - - &Show/hide window - &Pokaż/ukryj okno + + + &Show/hide window + &Pokaż/ukryj okno - - Re&verberation presets - P&rofile pogłosu + + Re&verberation presets + P&rofile pogłosu - - Off - Wyłączone + + Off + Wyłączone - - &Equalizer presets - Pr&ofile korektora + + &Equalizer presets + Pr&ofile korektora - - &Crossfeed - &Crossfeed + + &Crossfeed + &Crossfeed - - + + VariableItemModel - - Parameter - Parametr + + Parameter + Parametr - - Value - Wartość + + Value + Wartość - - + + VariableWatchWidget - - Form - Formularz + + Form + Formularz - - ms - ms + + ms + ms - - Refresh every - Odźwieżaj co + + Refresh every + Odźwieżaj co - - Click a variable to manipulate its value. - Kliknij zmienną, aby manipulować jej wartością. + + Click a variable to manipulate its value. + Kliknij zmienną, aby manipulować jej wartością. - - - Error - Błąd + + + Error + Błąd - - This variable is a string. Currently only numerical value types can be modified. - Ta zmienna jest ciągiem znaków. Obecnie tylko typy wartości numerycznych mogą być modyfikowane. + + This variable is a string. Currently only numerical value types can be modified. + Ta zmienna jest ciągiem znaków. Obecnie tylko typy wartości numerycznych mogą być modyfikowane. - - Manipulate variable - Manipuluj zmienną + + Manipulate variable + Manipuluj zmienną - - Enter a new value for variable '%1': - Wprowadź nową wartość dla zmiennej '%1': + + Enter a new value for variable '%1': + Wprowadź nową wartość dla zmiennej '%1': - - Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. - Nie udało się manipulować zmienną '%1'. Albo już nie istnieje, albo nie da się jej zmienić. + + Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. + Nie udało się manipulować zmienną '%1'. Albo już nie istnieje, albo nie da się jej zmienić. - - + + VdcDatabaseModel - - Company - Firma + + Company + Firma - - Model - Model + + Model + Model - - + + ads::CDockAreaTitleBar - - Detach Group - Odłącz grupę + + Detach Group + Odłącz grupę - - Close Group - Zamknij grupę + + Close Group + Zamknij grupę - - Close Other Groups - Zamknij pozostałe grupy + + Close Other Groups + Zamknij pozostałe grupy - - + + ads::CDockManager - - Show View - Pokaż widok + + Show View + Pokaż widok - - + + ads::CDockWidgetTab - - Detach - Odłącz + + Detach + Odłącz - - Close - Zamknij + + Close + Zamknij - - Close Others - Zamknij pozostałe + + Close Others + Zamknij pozostałe - - + + menueditor - - Available entries - Dostępne wpisy + + Available entries + Dostępne wpisy - - Move Up - Przesuń w górę + + Move Up + Przesuń w górę - - Moves the selected toolbar item up - Przesuwa wybrany element paska narzędzi w górę + + Moves the selected toolbar item up + Przesuwa wybrany element paska narzędzi w górę - - &Up - W &górę + + &Up + W &górę - - Move Down - Przesuń w dół + + Move Down + Przesuń w dół - - moves the selected toolbar item down - przesuwa wybrany element paska narzędzi w dół + + moves the selected toolbar item down + przesuwa wybrany element paska narzędzi w dół - - &Down - W &dół + + &Down + W &dół - - Insert - Wstaw + + Insert + Wstaw - - Adds the selected menu action to the toolbar - Dodaje wybraną akcję menu do paska narzędzi + + Adds the selected menu action to the toolbar + Dodaje wybraną akcję menu do paska narzędzi - - &Add - Dod&aj + + &Add + Dod&aj - - Remove - Usuń + + Remove + Usuń - - Removes the selected item from the active toolbar - Usuwa wybrany element z aktywnego paska narzędzi + + Removes the selected item from the active toolbar + Usuwa wybrany element z aktywnego paska narzędzi - - &Del - &Usuń + + &Del + &Usuń - - - Reset - Zresetuj + + + Reset + Zresetuj - - Context menu contents - Zawartość menu kontekstowego + + Context menu contents + Zawartość menu kontekstowego - + diff --git a/resources/translations/jamesdsp_pt.ts b/resources/translations/jamesdsp_pt.ts index b333d060..e46c9b28 100644 --- a/resources/translations/jamesdsp_pt.ts +++ b/resources/translations/jamesdsp_pt.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_pt_BR.ts b/resources/translations/jamesdsp_pt_BR.ts index acc49e30..0e21c3bc 100644 --- a/resources/translations/jamesdsp_pt_BR.ts +++ b/resources/translations/jamesdsp_pt_BR.ts @@ -1,1650 +1,1655 @@ - + AeqItemDelegate - - 2nd choice - 2.ª escolha + + 2nd choice + 2.ª escolha - - 3rd choice - 3.ª escolha + + 3rd choice + 3.ª escolha - - %1th choice - %1.ª escolha + + %1th choice + %1.ª escolha - - + + AeqPreviewPlot - - Frequency (Hz) - Frequência (Hz) + + Frequency (Hz) + Frequência (Hz) - - Amplitude (dBr) - Amplitude (dBr) + + Amplitude (dBr) + Amplitude (dBr) - - Target - Alvo + + Target + Alvo - - Raw (smoothed) - Bruto (suavizado) + + Raw (smoothed) + Bruto (suavizado) - - Error (smoothed) - Erro (suavizado) + + Error (smoothed) + Erro (suavizado) - - Equalization - Equalização + + Equalization + Equalização - - Raw - Bruto + + Raw + Bruto - - Error - Erro + + Error + Erro - - Equalized - Equalizado + + Equalized + Equalizado - - Equalization (normalized) - Equalização (normalizada) + + Equalization (normalized) + Equalização (normalizada) - - Move to top left - Mover para o canto superior esquerdo + + Move to top left + Mover para o canto superior esquerdo - - Move to top center - Mover para o centro superior + + Move to top center + Mover para o centro superior - - Move to top right - Mover para o canto superior direito + + Move to top right + Mover para o canto superior direito - - Move to bottom right - Mover para o canto inferior direito + + Move to bottom right + Mover para o canto inferior direito - - Move to bottom left - Mover para o canto inferior esquerdo + + Move to bottom left + Mover para o canto inferior esquerdo - - + + AeqSelector - - AutoEQ Database - Banco de dados do AutoEQ + + AutoEQ Database + Banco de dados do AutoEQ - - Filter... - Filtrar... + + Filter... + Filtrar... - - Local database version - Versão do banco de dados local + + Local database version + Versão do banco de dados local - - Checked out at commit: - Verificado no commit: + + Checked out at commit: + Verificado no commit: - - Last commit created at: - Último commit criado em: + + Last commit created at: + Último commit criado em: - - Package generated at: - Pacote gerado em: + + Package generated at: + Pacote gerado em: - - Display settings - Configurações de exibição + + Display settings + Configurações de exibição - - Dark mode - Modo escuro + + Dark mode + Modo escuro - - Update database - Atualizar banco de dados + + Update database + Atualizar banco de dados - - Download latest AutoEQ package - Baixar o pacote mais recente do AutoEQ + + Download latest AutoEQ package + Baixar o pacote mais recente do AutoEQ - - Delete database - Excluir banco de dados + + Delete database + Excluir banco de dados - - Cleanup local database and exit - Limpar o banco de dados local e sair + + Cleanup local database and exit + Limpar o banco de dados local e sair - - No measurement selected - Nenhuma medida selecionada + + No measurement selected + Nenhuma medida selecionada - - Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. + + Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. This will override your current GraphicEQ configuration. - Use a caixa de busca no lado esquerdo para achar uma medida adequada para seus fones de ouvido. Pressione 'OK' para carregar os dados de equalização para o motor de áudio. + Use a caixa de busca no lado esquerdo para achar uma medida adequada para seus fones de ouvido. Pressione 'OK' para carregar os dados de equalização para o motor de áudio. Isto anulará sua configuração atual do GraphicEQ. - - - Manage database - Gerenciar banco de dados + + + Manage database + Gerenciar banco de dados - - No measurements found - Nenhuma medida encontrada + + No measurements found + Nenhuma medida encontrada - - AutoEQ database - Banco de dados do AutoEQ + + AutoEQ database + Banco de dados do AutoEQ - - Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. + + Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. An internet connection is required during this step. Do you want to continue and enable this feature? - Antes de usar a integração do AutoEQ, você tem de baixar uma versão minificada do banco de dados de compensação de fones de ouvido (~50 MB) para seu disco duro. + Antes de usar a integração do AutoEQ, você tem de baixar uma versão minificada do banco de dados de compensação de fones de ouvido (~50 MB) para seu disco duro. É precisa uma conexão com a internet durante esta etapa. Você quer continuar e ativar este recurso? - - - Failed to retrieve version information - Erro ao recuperar informações da versão + + + Failed to retrieve version information + Erro ao recuperar informações da versão - - - Failed to retrieve package information from the remote repository: + + + Failed to retrieve package information from the remote repository: Status code: %0 Reason: %1 - Erro ao recuperar informações de pacotes do repositório remoto: + Erro ao recuperar informações de pacotes do repositório remoto: Código de estado: %0 Razão: %1 - - Return to database - Voltar ao banco de dados + + Return to database + Voltar ao banco de dados - - No new updates available - Nenhuma atualização disponível + + No new updates available + Nenhuma atualização disponível - - The local database is currently up-to-date; no new updates are available at this time. + + The local database is currently up-to-date; no new updates are available at this time. It may take up to 24 hours for new changes in the AutoEQ upstream repo to become available for download here. Packages are generated at 4am UTC daily. Do you want to re-install the latest database update anyway? - O banco de dados local está atualmente atualizado; nenhuma nova atualização está disponível no momento. + O banco de dados local está atualmente atualizado; nenhuma nova atualização está disponível no momento. Pode levar até 24 horas para que novas mudanças no repositório upstream do AutoEQ fiquem disponíveis para baixar aqui. Os pacotes são gerados às 4 h UTC diariamente. Você quer reinstalar a última atualização do banco de dados mesmo assim? - - Database cleared - Banco de dados limpo + + Database cleared + Banco de dados limpo - - The database has been removed from your hard disk - O banco de dados foi removido do seu disco duro + + The database has been removed from your hard disk + O banco de dados foi removido do seu disco duro - - Error - Erro + + Error + Erro - - Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. - Impossível recuperar o arquivo correspondente do banco de dados. Atualize o banco de dados local, pois ele parece estar incompleto. + + Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. + Impossível recuperar o arquivo correspondente do banco de dados. Atualize o banco de dados local, pois ele parece estar incompleto. - - + + AppItem - - (unset) - (não definido) + + (unset) + (não definido) - - - - Add to blocklist - Adicionar à lista de bloqueio + + + + Add to blocklist + Adicionar à lista de bloqueio - - - Add to allowlist - Adicionar à lista de permissão + + + Add to allowlist + Adicionar à lista de permissão - - Rate: %1Hz - Taxa: %1 Hz + + Rate: %1Hz + Taxa: %1 Hz - - Latency: %1ms - Latência: %1 ms + + Latency: %1ms + Latência: %1 ms - - Format: %1 - Formato: %1 + + Format: %1 + Formato: %1 - - + + AppManagerFragment - - Active apps - Aplicativos ativos + + Active apps + Aplicativos ativos - - No apps are playing audio - Nenhum aplicativo está tocando áudio + + No apps are playing audio + Nenhum aplicativo está tocando áudio - - + + AutostartManager - - Manage auto-start permission for JamesDSP - + + Manage auto-start permission for JamesDSP + - - + + CodeOutline - - Annotations - Anotações + + Annotations + Anotações - - Functions - Funções + + Functions + Funções - - + + ConsoleOutput - - Auto-scroll - Auto-rolagem + + Auto-scroll + Auto-rolagem - - Copy selection - Copiar seleção + + Copy selection + Copiar seleção - - Copy all - Copiar tudo + + Copy all + Copiar tudo - - Clear - Limpar + + Clear + Limpar - - + + EELEditor - - EEL Scripting IDE - IDE de scripting EEL + + EEL Scripting IDE + IDE de scripting EEL - - File - Arquivo + + File + Arquivo - - Edit - Editar + + Edit + Editar - - Navigation - Navegação + + Navigation + Navegação - - View - Ver + + View + Ver - - Help - Ajuda + + Help + Ajuda - - Open - Abrir + + Open + Abrir - - Open script - Abrir script + + Open script + Abrir script - - Ctrl+O - Ctrl+O + + Ctrl+O + Ctrl+O - - - Close file - Fechar arquivo + + + Close file + Fechar arquivo - - Ctrl+Shift+W - Ctrl+Shift+W + + Ctrl+Shift+W + Ctrl+Shift+W - - Save - Salvar + + Save + Salvar - - Ctrl+S - Ctrl+S + + Ctrl+S + Ctrl+S - - Save as... - Salvar como... + + Save as... + Salvar como... - - Ctrl+Shift+S - Ctrl+Shift+S + + Ctrl+Shift+S + Ctrl+Shift+S - - Undo - Desfazer + + Undo + Desfazer - - Ctrl+Z - Ctrl+Z + + Ctrl+Z + Ctrl+Z - - Redo - Refazer + + Redo + Refazer - - Ctrl+Shift+Z - Ctrl+Shift+Z + + Ctrl+Shift+Z + Ctrl+Shift+Z - - Find/Replace... - Localizar/Substituir... + + Find/Replace... + Localizar/Substituir... - - Ctrl+F - Ctrl+F + + Ctrl+F + Ctrl+F - - - Go to line... - Ir à linha... + + + Go to line... + Ir à linha... - - Go to line - Ir à linha + + Go to line + Ir à linha - - Ctrl+L - Ctrl+L + + Ctrl+L + Ctrl+L - - - Jump to function... - Ir à função... + + + Jump to function... + Ir à função... - - Ctrl+M - Ctrl+M + + Ctrl+M + Ctrl+M - - Go to @init - Ir a @init + + Go to @init + Ir a @init - - F2 - F2 + + F2 + F2 - - Go to @sample - Ir a @sample + + Go to @sample + Ir a @sample - - F3 - F3 + + F3 + F3 - - Automatic Parentheses - Parênteses automáticos + + Automatic Parentheses + Parênteses automáticos - - Replace Tabs with Spaces - Substituir abas por espaços + + Replace Tabs with Spaces + Substituir abas por espaços - - EEL2 documentation - Documentação de EEL2 + + EEL2 documentation + Documentação de EEL2 - - F1 - F1 + + F1 + F1 - - Run code - Executar código + + Run code + Executar código - - F5 - F5 + + F5 + F5 - - New - Novo + + New + Novo - - New script wizard - Novo assistente de script + + New script wizard + Novo assistente de script - - Ctrl+N - Ctrl+N + + Ctrl+N + Ctrl+N - - - Freeze - Congelar + + + Freeze + Congelar - - F6 - F6 + + F6 + F6 - - Loaded projects - Projetos carregados + + Loaded projects + Projetos carregados - - Code outline - Contorno do código + + Code outline + Contorno do código - - Variable view - Vista da variável + + Variable view + Vista da variável - - Console output - Saída do console + + Console output + Saída do console - - '%1' started compiling at %2 - '%1' começou a compilar em %2 + + '%1' started compiling at %2 + '%1' começou a compilar em %2 - - <br>Compilation stopped at %2 - <br>Compilação parou em %2 + + <br>Compilation stopped at %2 + <br>Compilação parou em %2 - - Script initialization took %1ms - Inicialização de script levou %1 ms + + Script initialization took %1ms + Inicialização de script levou %1 ms - - Error - Erro + + Error + Erro - - Cannot write file - Impossível gravar arquivo + + Cannot write file + Impossível gravar arquivo - - Open EEL script - Abrir script EEL + + Open EEL script + Abrir script EEL - - EEL2 Script (*.eel) - Script EEL2 (*.eel) + + EEL2 Script (*.eel) + Script EEL2 (*.eel) - - Save as - Salvar como + + Save as + Salvar como - - Cannot execute - Impossível executar + + Cannot execute + Impossível executar - - No script file opened. Please open one first and try again. - Nenhum arquivo de script foi aberto. Abra um primeiro e tente de novo. + + No script file opened. Please open one first and try again. + Nenhum arquivo de script foi aberto. Abra um primeiro e tente de novo. - - Enter line number: - Insira o número da linha: + + Enter line number: + Insira o número da linha: - - Enter function name: - Insira o nome da função: + + Enter function name: + Insira o nome da função: - - + + EmptyView - - No project loaded - Nenhum projeto carregado + + No project loaded + Nenhum projeto carregado - - + + FileDownloaderDialog - - Package manager - Gerenciador de pacotes + + Package manager + Gerenciador de pacotes - - Downloading package... - Baixando pacote... + + Downloading package... + Baixando pacote... - - + + FileSelectionWidget - - Refresh - Atualizar + + Refresh + Atualizar - - Bookmark - Marcar + + Bookmark + Marcar - - Rename - Renomear + + Rename + Renomear - - Remove - Remover + + Remove + Remover - - No supported files found - Nenhum arquivo suportado achado + + No supported files found + Nenhum arquivo suportado achado - - + + FindReplaceForm - - Form - Forma + + Form + Forma - - &Find: - &Localizar: + + &Find: + &Localizar: - - R&eplace with: - &Substituir por: + + R&eplace with: + &Substituir por: - - Previous - Voltar + + Previous + Voltar - - Next - Avançar + + Next + Avançar - - &Options - &Opções + + &Options + &Opções - - R&egular expression - Expressão r&egular + + R&egular expression + Expressão r&egular - - &Whole words - &Palavras inteiras + + &Whole words + &Palavras inteiras - - &Case sensitive - &Sensível à maiúsculas e minúsculas + + &Case sensitive + &Sensível à maiúsculas e minúsculas - - &Close - &Fechar + + &Close + &Fechar - - &Replace - &Substituir + + &Replace + &Substituir - - Replace &All - Substituir &tudo + + Replace &All + Substituir &tudo - - no match found - Nenhuma correspondência achada + + no match found + Nenhuma correspondência achada - - Replaced %1 occurrence(s) - %1 ocorrência(s) substituída(s) + + Replaced %1 occurrence(s) + %1 ocorrência(s) substituída(s) - - + + FirstLaunchWizard - - Welcome! - Bem-vindo(a)! + + Welcome! + Bem-vindo(a)! - - Thank you for installing this app! + + Thank you for installing this app! However, before you can begin playing around with JamesDSP for Linux, we'll need to make some adjustments in order to ensure the best possible experience with JDSP. - Obrigado por instalar este aplicativo! + Obrigado por instalar este aplicativo! Contudo, antes de começar a brincar com JamesDSP para Linux, teremos de fazer alguns ajustes a fim de garantir a melhor experiência possível com JDSP. - - - - Next > - Próximo > + + + + Next > + Próximo > - - Run in background? - Executar em segundo plano? + + Run in background? + Executar em segundo plano? - - No, don't apply effects in background - Não, don't aplicar efeitos em segundo plano + + No, don't apply effects in background + Não, don't aplicar efeitos em segundo plano - - Yes, minimize to tray icon - Sim, minimizar para ícone da bandeja + + Yes, minimize to tray icon + Sim, minimizar para ícone da bandeja - - Start minimized on boot - Iniciar minimizado na inicialização + + Start minimized on boot + Iniciar minimizado na inicialização - - That's it! - É isso! + + That's it! + É isso! - - You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! - Você está pronto(a) para começar! Você pode mudar qualquer escolha que acabou de fazer na seção de configurações. Confira-a para mais opções de customização. Visite nossa comunidade no Telegram para suporte e atualizações! + + You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! + Você está pronto(a) para começar! Você pode mudar qualquer escolha que acabou de fazer na seção de configurações. Confira-a para mais opções de customização. Visite nossa comunidade no Telegram para suporte e atualizações! - - Telegram - Telegram + + Telegram + Telegram - - Close - Fechar + + Close + Fechar - - + + FlatTabWidget - - FlatTabWidget - FlatTabWidget + + FlatTabWidget + FlatTabWidget - - + + GraphicEQFilterGUI - - Enable Graphic EQ - Ativar EQ gráfico + + Enable Graphic EQ + Ativar EQ gráfico - - Freq. - Freq. + + Freq. + Freq. - - Gain - Ganho + + Gain + Ganho - - AutoEQ database... - Banco de dados do AutoEQ... + + AutoEQ database... + Banco de dados do AutoEQ... - - 15-band - 15 bandas + + 15-band + 15 bandas - - 31-band - 31 bandas + + 31-band + 31 bandas - - variable - variável + + variable + variável - - Import - Importar + + Import + Importar - - Export - Exportar + + Export + Exportar - - Invert response - Inverter resposta + + Invert response + Inverter resposta - - Normalize response - Normalizar resposta + + Normalize response + Normalizar resposta - - Reset response - Redefinir resposta + + Reset response + Redefinir resposta - - - Import EqualizerAPO settings - Importar configurações do EqualizerAPO + + + Import EqualizerAPO settings + Importar configurações do EqualizerAPO - - Import frequency response - Importar resposta de frequência + + Import frequency response + Importar resposta de frequência - - - CSV frequency response (*.csv) - Resposta de frequência CSV (*.csv) + + + CSV frequency response (*.csv) + Resposta de frequência CSV (*.csv) - - - - All files (*.*) - Todo arquivo (*.*) + + + + All files (*.*) + Todo arquivo (*.*) - - Import EqualizerAPO graphic EQ preset - Importar predefinição do equalizador gráfico EqualizerAPO + + Import EqualizerAPO graphic EQ preset + Importar predefinição do equalizador gráfico EqualizerAPO - - EqualizerAPO GraphicEQ (*.txt) - EqualizerAPO GraphicEQ (*.txt) + + EqualizerAPO GraphicEQ (*.txt) + EqualizerAPO GraphicEQ (*.txt) - - Export frequency response - Exportar resposta de frequência + + Export frequency response + Exportar resposta de frequência - - + + GzipDownloaderDialog - - Error - Erro + + Error + Erro - - %1MB of %2MB downloaded - %1MB de %2MB baixados + + %1MB of %2MB downloaded + %1MB de %2MB baixados - - Decompressing package... - Descompactando pacote... + + Decompressing package... + Descompactando pacote... - - + + LiveprogSelectionWidget - - - No script has been loaded - Nenhum script foi carregado + + + No script has been loaded + Nenhum script foi carregado - - Enable - Ativar + + Enable + Ativar - - Reset - Redefinir + + Reset + Redefinir - - - Create new script - Criar novo script + + + Create new script + Criar novo script - - - Error - Erro + + + Error + Erro - - Cannot restore defaults. + + Cannot restore defaults. No EEL file is currently loaded. - Impossível restaurar os padrões. + Impossível restaurar os padrões. Nenhum arquivo EEL está carregado. - - Selected EEL file does not exist anymore. + + Selected EEL file does not exist anymore. Please select another one - O arquivo EEL selecionado já não existe. + O arquivo EEL selecionado já não existe. Selecione outro - - Edit script - Editar script + + Edit script + Editar script - - No customizable parameters - Nenhum parâmetro customizável + + No customizable parameters + Nenhum parâmetro customizável - - + + MainWindow - - JamesDSP for Linux - JamesDSP para Linux + + JamesDSP for Linux + JamesDSP para Linux - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reforço dinâmico de graves</span></p><p>Reforço de graves detector de frequência. Define automaticamente seus próprios parâmetros, como ganho, largura de banda e frequência de corte, analisando o fluxo de áudio recebido</p><p><span style=" text-decoration: underline;">Ganho máximo:</span> Ajusta a quantidade de efeitos de reforço de graves dinâmico.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reforço dinâmico de graves</span></p><p>Reforço de graves detector de frequência. Define automaticamente seus próprios parâmetros, como ganho, largura de banda e frequência de corte, analisando o fluxo de áudio recebido</p><p><span style=" text-decoration: underline;">Ganho máximo:</span> Ajusta a quantidade de efeitos de reforço de graves dinâmico.</p></body></html> - - Dynamic bass boost - Reforço dinâmico de graves + + Dynamic bass boost + Reforço dinâmico de graves - - Maximum gain - Ganho máximo + + Maximum gain + Ganho máximo - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Modelagem analógica</span></p><p>A modelagem analógica por excesso de amostra é um gerador de harmônicas sem serrilhado.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Modelagem analógica</span></p><p>A modelagem analógica por excesso de amostra é um gerador de harmônicas sem serrilhado.</p></body></html> - - Analog modelling - Modelagem analógica + + Analog modelling + Modelagem analógica - - Preamp (Harmonics) - Preamplificador (Harmonia) + + Preamp (Harmonics) + Preamplificador (Harmonia) - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limitador</span></p><p>Este limitador de saída tenta evitar o corte da saída (causado pelo DSP que tenta fazer parte de ou todo o áudio mais alto do que antes se a entrada já estiver perto do máximo). </p><p><span style=" text-decoration: underline;">Limiar do limitador:</span> Isto deveria ser -0,1 a menos que, por algum motivo, seu áudio esteja sendo cortado antes do corte digital, caso em que você pode o ajustar para valores mais baixos</p><p><span style=" text-decoration: underline;">Liberação do limitador:</span> O limitador só será eficaz se o tempo de liberação for definido. Tempos curtos de liberação levarão a distorções audíveis do som limitado, especialmente em frequências baixas; uma liberação longa é geralmente preferível, mas reduz um pouco o volume que pode ser alcançado. Se o &quot;bombeamento&quot; (abaixar o som limitado e voltar com o tempo) se tornar questionável, tornar a liberação mais longa OU mais curta pode ajudar a tornar o efeito menos perceptível.</p><p><span style=" text-decoration: underline;">Pós-ganho:</span> O pós-ganho atua como um botão de volume digital para todo efeito, após serem aplicados, mas antes de o som alcançar o limitador.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limitador</span></p><p>Este limitador de saída tenta evitar o corte da saída (causado pelo DSP que tenta fazer parte de ou todo o áudio mais alto do que antes se a entrada já estiver perto do máximo). </p><p><span style=" text-decoration: underline;">Limiar do limitador:</span> Isto deveria ser -0,1 a menos que, por algum motivo, seu áudio esteja sendo cortado antes do corte digital, caso em que você pode o ajustar para valores mais baixos</p><p><span style=" text-decoration: underline;">Liberação do limitador:</span> O limitador só será eficaz se o tempo de liberação for definido. Tempos curtos de liberação levarão a distorções audíveis do som limitado, especialmente em frequências baixas; uma liberação longa é geralmente preferível, mas reduz um pouco o volume que pode ser alcançado. Se o &quot;bombeamento&quot; (abaixar o som limitado e voltar com o tempo) se tornar questionável, tornar a liberação mais longa OU mais curta pode ajudar a tornar o efeito menos perceptível.</p><p><span style=" text-decoration: underline;">Pós-ganho:</span> O pós-ganho atua como um botão de volume digital para todo efeito, após serem aplicados, mas antes de o som alcançar o limitador.</p></body></html> - - Limiter/Master - Limitador/Mestre + + Limiter/Master + Limitador/Mestre - - Threshold - Limite + + Threshold + Limite - - Release - + + Release + - - Post gain - Pós-ganho + + Post gain + Pós-ganho - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> + - - Dynamic range compander - + + Dynamic range compander + - - Time constant - + + Time constant + - - Granularity - + + Granularity + - - Time-frequency transforms - + + Time-frequency transforms + - - Uniform (Short-time Fourier) - + + Uniform (Short-time Fourier) + - - Multiresolution (Continuous wavelet) - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Crossfeed Inclui o modo tradicional BS2B (DSP Bauer estereofónico a binaural) e uma abordagem mais avançada de HRTF baseada na convolução.</p></body></html> - - Multiresolution (Time domain) - + + + Crossfeed + Crossfeed - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Crossfeed Inclui o modo tradicional BS2B (DSP Bauer estereofónico a binaural) e uma abordagem mais avançada de HRTF baseada na convolução.</p></body></html> + + Mode + Modo - - - Crossfeed - Crossfeed + + Custom BS2B parameters + Parâmetros BS2B customizados - - Mode - Modo + + Cut frequency + Frequência de corte - - Custom BS2B parameters - Parâmetros BS2B customizados + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Amplitude do palco sonoro</span></p><p>Um algoritmo que detecta a relação de fase estéreo em várias regiões espectrais e melhora o som estéreo sem afetar a integridade vocal.</p></body></html> - - Cut frequency - Frequência de corte + + Soundstage wideness + Amplitude do palco sonoro - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Amplitude do palco sonoro</span></p><p>Um algoritmo que detecta a relação de fase estéreo em várias regiões espectrais e melhora o som estéreo sem afetar a integridade vocal.</p></body></html> + + Widen level + Nível da ampliação - - Soundstage wideness - Amplitude do palco sonoro + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberação</span></p><p>Rede IIR complexa (Progenitor 2)</p></body></html> - - Widen level - Nível da ampliação + + Enable reverberation + Ativar reverberação - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberação</span></p><p>Rede IIR complexa (Progenitor 2)</p></body></html> + + Presets + Predefinições - - Enable reverberation - Ativar reverberação + + + ... + ... - - Presets - Predefinições + + Oversampling factor + Fator de sobreamostragem - - - ... - ... + + Early reflection factor + Fator de reflexão precoce - - Oversampling factor - Fator de sobreamostragem + + Early reflection amount + Quantidade de reflexão precoce - - Early reflection factor - Fator de reflexão precoce + + Early reflection width + Amplitude da reflexão precoce - - Early reflection amount - Quantidade de reflexão precoce + + Lowpass cutoff (Input) + Corte de passa-baixo (entrada) - - Early reflection width - Amplitude da reflexão precoce + + Lowpass cutoff (Bass) + Corte de passa-baixo (graves) - - Lowpass cutoff (Input) - Corte de passa-baixo (entrada) + + Lowpass cutoff (Damp) + Corte de passa-baixo (umidade) - - Lowpass cutoff (Bass) - Corte de passa-baixo (graves) + + Lowpass cutoff (Output) + Corte de passa-baixo (saída) - - Lowpass cutoff (Damp) - Corte de passa-baixo (umidade) + + Final wet mix + Mistura úmida final - - Lowpass cutoff (Output) - Corte de passa-baixo (saída) + + Final dry mix + Mistura seca final - - Final wet mix - Mistura úmida final + + Reverb wetness + Umidade da reverberação - - Final dry mix - Mistura seca final + + Width L/R mix + Mistura de amplitude L/R - - Reverb wetness - Umidade da reverberação + + LFO wander amount + Quantidade de LFO vagando - - Width L/R mix - Mistura de amplitude L/R + + LFO spin amount + Quantidade de rotação de LFO - - LFO wander amount - Quantidade de LFO vagando + + Time decay + Decomposição do tempo - - LFO spin amount - Quantidade de rotação de LFO + + Delay + Atraso - - Time decay - Decomposição do tempo + + Bass boost + Reforço de graves - - Delay - Atraso + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> + - - Bass boost - Reforço de graves + + FIR Minimum phase + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + + IIR 4 order + - - FIR Minimum phase - + + IIR 6 order + - - IIR 4 order - + + IIR 8 order + - - IIR 6 order - + + IIR 10 order + - - IIR 8 order - + + IIR 12 order + - - IIR 10 order - + + Enable EQ + Ativar EQ - - IIR 12 order - + + Multiresolution (Continuous wavelet, incomplete dual frame) + - - Enable EQ - Ativar EQ + + Pseudo multiresolution (Undersampling frame) + - - Presets... - Predefinições... + + Pseudo multiresolution (Time domain, zero latency) + - - Filter type - Tipo de filtro + + Presets... + Predefinições... - - Interpolator - Interpolador + + Filter type + Tipo de filtro - - <html><head/><body><p>Interpolation mode</p></body></html> - <html><head/><body><p>Modo de interpolação</p></body></html> + + Interpolator + Interpolador - - Piecewise Cubic Hermite Interpolating Polynomial - Polinomial Interpolador de Hermite Cúbico + + <html><head/><body><p>Interpolation mode</p></body></html> + <html><head/><body><p>Modo de interpolação</p></body></html> - - Modified Hiroshi Akima spline - Spline de Hiroshi Akima modificada + + Piecewise Cubic Hermite Interpolating Polynomial + Polinomial Interpolador de Hermite Cúbico - - Reset EQ - Redefinir EQ + + Modified Hiroshi Akima spline + Spline de Hiroshi Akima modificada - - Fixed bands - Bandas fixas + + Reset EQ + Redefinir EQ - - Flexible bands - Bandas flexíveis + + Fixed bands + Bandas fixas - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Convolver particionado (convolução de segmentação automática). Selecione seu arquivo de resposta de impulsos para ser convolvido. Ele toma as características do sinal da resposta de impulso e as aplica ao áudio recebido em tempo real.</p><p>Suporta respostas de impulso mono, estéreo e estéreo completo/verdadeiro (LL, LR, RL, RR).</p><p><span style=" text-decoration: underline;">Otimização de resposta de impulso:</span></p><p>Este parâmetro tenta reduzir ao máximo a duração da resposta de impulso; o objetivo é reduzir ao máximo a latência, possivelmente reduzindo o consumo de energia..</p></body></html> + + Flexible bands + Bandas flexíveis - - - Filesystem - Sistema de arquivos + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Convolver particionado (convolução de segmentação automática). Selecione seu arquivo de resposta de impulsos para ser convolvido. Ele toma as características do sinal da resposta de impulso e as aplica ao áudio recebido em tempo real.</p><p>Suporta respostas de impulso mono, estéreo e estéreo completo/verdadeiro (LL, LR, RL, RR).</p><p><span style=" text-decoration: underline;">Otimização de resposta de impulso:</span></p><p>Este parâmetro tenta reduzir ao máximo a duração da resposta de impulso; o objetivo é reduzir ao máximo a latência, possivelmente reduzindo o consumo de energia..</p></body></html> - - Bookmarks - Marcadores + + + Filesystem + Sistema de arquivos - - Enable convolver - Ativar convolver + + Bookmarks + Marcadores - - IR optimization - Otimização de IR + + Enable convolver + Ativar convolver - - Original - Original + + IR optimization + Otimização de IR - - Shrink - Reduzir + + Original + Original - - Minimum phase transform and shrink - Mínimo de transformação e encolhimento de fase + + Shrink + Reduzir - - Adv. waveform editing - Edição avançada de formas de onda + + Minimum phase transform and shrink + Mínimo de transformação e encolhimento de fase - - Edit - Editar + + Adv. waveform editing + Edição avançada de formas de onda - - Channels: - Canais: + + Edit + Editar - - Samples: - Amostras: + + Channels: + Canais: - - No selection - Nenhuma seleção + + Samples: + Amostras: - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Seu trabalho principal é equalizar o áudio parametricamente, mas requer que o usuário forneça um arquivo .vdc que o DDCToolbox gera.</p><p>ViPER-DDC no jDSP é uma implementação generalizada de filtros de seção de segunda ordem, que é um pouco diferente da implementação no Viper4Android. O V4A só suporta o Peaking paramétrico; a razão é que o V4A usa uma propriedade de coeficiente de ação do filtro Peaking. O jDSP já não tem tal suposição.</p></body></html> + + No selection + Nenhuma seleção - - Database - Banco de dados + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Seu trabalho principal é equalizar o áudio parametricamente, mas requer que o usuário forneça um arquivo .vdc que o DDCToolbox gera.</p><p>ViPER-DDC no jDSP é uma implementação generalizada de filtros de seção de segunda ordem, que é um pouco diferente da implementação no Viper4Android. O V4A só suporta o Peaking paramétrico; a razão é que o V4A usa uma propriedade de coeficiente de ação do filtro Peaking. O jDSP já não tem tal suposição.</p></body></html> - - Create - Criar + + Database + Banco de dados - - Create your custom DDC files using DDCToolbox - Crie seus arquivos DDC customizados usando DDCToolbox + + Create + Criar - - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + + Create your custom DDC files using DDCToolbox + Crie seus arquivos DDC customizados usando DDCToolbox - - View installation instructions - Ver instruções da instalação + + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - - Enable ViPER-DDC - Ativar ViPER-DDC + + View installation instructions + Ver instruções da instalação - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">DSP programável ao vivo</span></p><p>Esta é uma máquina virtual que compila um arquivo de código EEL como entrada e executa as instruções; em palavras simples, ela permite que os usuários programem seus próprios efeitos de áudio.</p><p>O número de operações suportadas é enorme; considere verificar a documentação oficial: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Clique em 'Editar script' para iniciar um ambiente integrado de script para arquivos de código EEL.</p></body></html> + + Enable ViPER-DDC + Ativar ViPER-DDC - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Equalizador de resposta arbitrária</span></p><p>Também conhecido como GraphicEQ do EqualizerAPO.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">DSP programável ao vivo</span></p><p>Esta é uma máquina virtual que compila um arquivo de código EEL como entrada e executa as instruções; em palavras simples, ela permite que os usuários programem seus próprios efeitos de áudio.</p><p>O número de operações suportadas é enorme; considere verificar a documentação oficial: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Clique em 'Editar script' para iniciar um ambiente integrado de script para arquivos de código EEL.</p></body></html> - - Custom Presets - Predefinições customizadas + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Equalizador de resposta arbitrária</span></p><p>Também conhecido como GraphicEQ do EqualizerAPO.</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Predefinições customizadas</span></p><p>Criar e gerenciar predefinições customizadas</p></body></html> + + Custom Presets + Predefinições customizadas - - Settings - Configurações + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Predefinições customizadas</span></p><p>Criar e gerenciar predefinições customizadas</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Configurações</span></p><p>Configurar este aplicativo</p></body></html> + + Settings + Configurações - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Outras</span></p><p>Várias ações usadas com menos frequência</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Configurações</span></p><p>Configurar este aplicativo</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passado</span></p><p>Esta opção define se quer ativar ou desativar efeitos sonoros.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Outras</span></p><p>Várias ações usadas com menos frequência</p></body></html> - - Bypass - Ignorar + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passado</span></p><p>Esta opção define se quer ativar ou desativar efeitos sonoros.</p></body></html> - - %1 connected - Preset loaded automatically - %1 conectado - Predefinição carregada automaticamente + + Bypass + Ignorar - - Cannot execute script - Impossível executar script + + %1 connected - Preset loaded automatically + %1 conectado - Predefinição carregada automaticamente - - The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - O arquivo EEL atual (em '%1') já não existe no sistema de arquivos. Reabra o arquivo manualmente. + + Cannot execute script + Impossível executar script - - Apps - Aplicativos + + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. + O arquivo EEL atual (em '%1') já não existe no sistema de arquivos. Reabra o arquivo manualmente. - - Driver status - Estado do driver + + Apps + Aplicativos - - Relink audio pipeline - Reconectar pipeline de áudio + + Driver status + Estado do driver - - Reset to defaults - Redefinir para padrões + + Relink audio pipeline + Reconectar pipeline de áudio - - Load from file - Carregar do arquivo + + Reset to defaults + Redefinir para padrões - - Save to file - Salvar em arquivo + + Load from file + Carregar do arquivo - - Open LiveprogIDE - Abrir LiveprogIDE + + Save to file + Salvar em arquivo - - What's this... (Select UI element) - O que é isto... (selecione elemento da IU) + + Open LiveprogIDE + Abrir LiveprogIDE - - Bass/Misc - Grave/Diversos + + What's this... (Select UI element) + O que é isto... (selecione elemento da IU) - - Sound Positioning - Posicionamento de som + + Bass/Misc + Grave/Diversos - - Reverb - Reverberação + + Sound Positioning + Posicionamento de som - - Equalizer - Equalizador + + Reverb + Reverberação - - Convolver - Convolver + + Equalizer + Equalizador - - DDC - DDC + + Convolver + Convolver - - Liveprog - Liveprog + + DDC + DDC - - Graphic EQ - EQ Gráfico + + Liveprog + Liveprog - - Launch application - Iniciar aplicativo + + Graphic EQ + EQ Gráfico - - Reset Configuration - Redefinir configuração + + Launch application + Iniciar aplicativo - - Are you sure? - Você tem certeza? + + Reset Configuration + Redefinir configuração - - Load custom audio.conf - Carregar audio.conf customizado + + Are you sure? + Você tem certeza? - - Save current audio.conf - Salvar audio.conf atual + + Load custom audio.conf + Carregar audio.conf customizado - - Very low - + + Save current audio.conf + Salvar audio.conf atual - - Low - + + Very low + - - Medium - + + Low + - - High - + + Medium + - - Extreme - + + High + - - Advanced waveform editing - Edição avançada de formas de onda + + Extreme + - - Advanced waveform editing (default: -80;-100;0;0;0;0) + + Advanced waveform editing + Edição avançada de formas de onda + + + + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. This setting is only in effect if IR optimization is enabled. @@ -1656,7 +1661,7 @@ This setting is only in effect if IR optimization is enabled. 5th value: Channel 3 delay (samples) 6th value: Channel 4 delay (samples) - Edição avançada de formas de onda (padrão: -80;-100;0;0;0;0) + Edição avançada de formas de onda (padrão: -80;-100;0;0;0;0) Define o limite de corte automático de IR e adiciona atraso a uma fase cortada/mínima transformada pelo IR. Esta configuração só terá efeito se a otimização de IR estiver ativada. @@ -1669,1218 +1674,1290 @@ Esta configuração só terá efeito se a otimização de IR estiver ativada. 6.º valor: Atraso no canal 4 (amostras) - - + + NewFileWizard - - Create new script - Criar novo script + + Create new script + Criar novo script - - New script - Novo script + + New script + Novo script - - Define and generate a basic script template - Definir e gerar um modelo de script básico + + Define and generate a basic script template + Definir e gerar um modelo de script básico - - Workspace directory - Pasta do espaço de trabalho + + Workspace directory + Pasta do espaço de trabalho - - File name - Nome do arquivo + + File name + Nome do arquivo - - Description - Descrição + + Description + Descrição - - Untitled script - Script sem título + + Untitled script + Script sem título - - Select directory - Selecionar diretório + + Select directory + Selecionar diretório - - - - Error - Erro + + + + Error + Erro - - Workspace directory does not exist - Diretório do espaço de trabalho não existe + + Workspace directory does not exist + Diretório do espaço de trabalho não existe - - A file with the same name already exists at this loction - Já existe um arquivo com o mesmo nome neste local + + A file with the same name already exists at this loction + Já existe um arquivo com o mesmo nome neste local - - File name is empty or contains illegal characters - O nome do arquivo está vazio ou contém caracteres ilegais + + File name is empty or contains illegal characters + O nome do arquivo está vazio ou contém caracteres ilegais - - + + OverlayMsgProxy - - - - Close - Fechar + + + + Close + Fechar - - + + PaletteEditor - - Palette editor - Editor de paleta + + Palette editor + Editor de paleta - - - - - - Select... - Selecionar... + + + + + + Select... + Selecionar... - - Base Color - Cor principal + + Base Color + Cor principal - - Background Color - Cor do plano de fundo + + Background Color + Cor do plano de fundo - - Foreground Color - Cor do primeiro plano + + Foreground Color + Cor do primeiro plano - - Close - Fechar + + Close + Fechar - - Reset - Redefinir + + Reset + Redefinir - - White Icons - Ícones brancos + + White Icons + Ícones brancos - - Selection Color - Seleção de cor + + Selection Color + Seleção de cor - - Disabled Color - Cor desativada + + Disabled Color + Cor desativada - - + + PresetAddRuleFragment - - Add new rule... - Adicionar nova regra... + + Add new rule... + Adicionar nova regra... - - If - Se + + If + Se - - is connected, then load preset - está conectado, então carregue predefinição + + is connected, then load preset + está conectado, então carregue predefinição - - + + PresetDialog - - Presets - Predefinições + + Presets + Predefinições - - Preset name - Nome da predefinição + + Preset name + Nome da predefinição - - Adds current config as a preset - Adiciona a configuração atual como uma predefinição + + Adds current config as a preset + Adiciona a configuração atual como uma predefinição - - Save - Salvar + + Save + Salvar - - Rules... - Regras... + + Rules... + Regras... - - Remove - Remover + + Remove + Remover - - Load - Carregar + + Load + Carregar - - + + PresetFragment - - No presets saved - Nenhuma predefinição salva + + No presets saved + Nenhuma predefinição salva - - Cannot load preset - Impossível carregar predefinição + + Cannot load preset + Impossível carregar predefinição - - Selected file does not exist anymore - O arquivo selecionado já não existe + + Selected file does not exist anymore + O arquivo selecionado já não existe - - Overwrite - Substituir + + Overwrite + Substituir - - Save - Salvar + + Save + Salvar - - Rename - Renomear + + Rename + Renomear - - Delete - Excluir + + Delete + Excluir - - Rename preset - Renomear predefinição + + Rename preset + Renomear predefinição - - Enter new name - Insira um nome novo + + Enter new name + Insira um nome novo - - + + PresetRuleDialog - - Preset auto-switch rules - Regras de troca automática da predefinição + + Preset auto-switch rules + Regras de troca automática da predefinição - - Auto-switch rules - Regras de troca automática + + Auto-switch rules + Regras de troca automática - - Add new rule... - Adicionar nova regra... + + Add new rule... + Adicionar nova regra... - - Delete selection - Excluir seleção + + Delete selection + Excluir seleção - - No rules defined - Nenhuma regra definida + + No rules defined + Nenhuma regra definida - - - Cannot add new rule - Impossível adicionar nova regra + + + Cannot add new rule + Impossível adicionar nova regra - - All connected audio devices have already a rule defined. + + All connected audio devices have already a rule defined. You can only create one rule per device. - Todo dispositivo de áudio conectado já tem uma regra definida. + Todo dispositivo de áudio conectado já tem uma regra definida. Você só pode criar uma regra por dispositivo. - - You have no presets saved. + + You have no presets saved. Please create one first before adding a new rule. - Você não tem predefinições salvas. + Você não tem predefinições salvas. Crie uma primeiro antes de adicionar uma nova regra. - - + + PresetRuleTableModel - - Device - Dispositivo + + Device + Dispositivo - - Assigned preset - Predefinição atribuída + + Assigned preset + Predefinição atribuída - - + + QObject - - List All Tabs - Listar toda aba + + List All Tabs + Listar toda aba - - Detach Group - Desanexar grupo + + Detach Group + Desanexar grupo - - Close Active Tab - Fechar aba ativa + + Close Active Tab + Fechar aba ativa - - Close Group - Fechar grupo + + Close Group + Fechar grupo - - Close Tab - Fechar aba + + Close Tab + Fechar aba - - Something went wrong - Algo deu errado + + Something went wrong + Algo deu errado - - Failed to open URL with default browser. + + Failed to open URL with default browser. Please copy this URL manually: - Falha ao abrir a URL com o navegador padrão. + Falha ao abrir a URL com o navegador padrão. Por favor, copie esta URL manualmente: - - Flat - Plano + + Flat + Plano - - Pop - Pop + + Pop + Pop - - Rock - Rock + + Rock + Rock - - Jazz - Jazz + + Jazz + Jazz - - Classic - Clássico + + Classic + Clássico - - Bass - Grave + + Bass + Grave - - Clear - Nítido + + Clear + Nítido - - Hip-Hop - Hip Hop + + Hip-Hop + Hip Hop - - Dubstep - Dubstep + + Dubstep + Dubstep - - Movie - Filme + + Movie + Filme - - Metal - Metal + + Metal + Metal - - Vocal Booster - Intensificador de voz + + Vocal Booster + Intensificador de voz - - Hardstyle - Hardstyle + + Hardstyle + Hardstyle - - Acoustic - Acústico + + Acoustic + Acústico - - R&B - R&B + + R&B + R&B - - Electronic - Eletrônica + + Electronic + Eletrônica - - Deep Bass - Grave profundo + + Deep Bass + Grave profundo - - Beats - Batidas + + Beats + Batidas - - BS2B Custom - BS2B customizado + + BS2B Custom + BS2B customizado - - BS2B Weak - BS2B fraco + + BS2B Weak + BS2B fraco - - BS2B Strong - BS2B forte + + BS2B Strong + BS2B forte - - Out of head - Fora da cabeça + + Out of head + Fora da cabeça - - Surround 1 - Surround 1 + + Surround 1 + Surround 1 - - Surround 2 - Surround 2 + + Surround 2 + Surround 2 - - Joe0Bloggs Realistic surround - Surround realista de Joe0Bloggs + + Joe0Bloggs Realistic surround + Surround realista de Joe0Bloggs - - Default - Padrão + + Default + Padrão - - Small hall 1 - Salão pequeno 1 + + Small hall 1 + Salão pequeno 1 - - Small hall 2 - Salão pequeno 2 + + Small hall 2 + Salão pequeno 2 - - Medium hall 1 - Salão médio 1 + + Medium hall 1 + Salão médio 1 - - Medium hall 2 - Salão médio 2 + + Medium hall 2 + Salão médio 2 - - Large hall 1 - Salão grande 1 + + Large hall 1 + Salão grande 1 - - Large hall 2 - Salão grande 2 + + Large hall 2 + Salão grande 2 - - Small room 1 - Sala pequena 1 + + Small room 1 + Sala pequena 1 - - Small room 2 - Sala pequena 2 + + Small room 2 + Sala pequena 2 - - Medium room 1 - Sala média 1 + + Medium room 1 + Sala média 1 - - Medium room 2 - Sala média 2 + + Medium room 2 + Sala média 2 - - Large room 1 - Sala grande 1 + + Large room 1 + Sala grande 1 - - Large room 2 - Sala grande 2 + + Large room 2 + Sala grande 2 - - Medium ER 1 - ER médio 1 + + Medium ER 1 + ER médio 1 - - Medium ER 2 - ER médio 2 + + Medium ER 2 + ER médio 2 - - Plate high - Placa alta + + Plate high + Placa alta - - Plate low - Placa baixa + + Plate low + Placa baixa - - Long reverb 1 - Reverberação longa 1 + + Long reverb 1 + Reverberação longa 1 - - Long reverb 2 - Reverberação longa 2 + + Long reverb 2 + Reverberação longa 2 - - error - erro + + error + erro - - creating - criando + + creating + criando - - suspended - suspendido + + suspended + suspendido - - - idle - inativo + + + idle + inativo - - - running - executando + + + running + executando - - not connected - não conectado + + not connected + não conectado - - JamesDSP is an advanced audio processing engine available for Linux and Android systems. - JamesDSP é um mecanismo avançado de processamento de áudio disponível para sistemas Linux e Android. + + JamesDSP is an advanced audio processing engine available for Linux and Android systems. + JamesDSP é um mecanismo avançado de processamento de áudio disponível para sistemas Linux e Android. - - Auto-start permission has been denied - + + Auto-start permission has been denied + - - Please run 'flatpak permission-reset %1' and reenable auto-start. - + + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. + - - Unknown error - + + Unknown error + - - Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 - + + Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 + - - + + SettingsFragment - - Settings - Configurações + + Settings + Configurações + + + + Category + Categoria + + + + Interface + Interface + + + + Audio processing + + + + + Default paths + Caminhos padrão + + + + Devices + Dispositivos + + + + Network + Rede + + + + Tray icon + Ícone de bandeja + + + + Context menu + Menu de Contexto + + + + Theme + Tema + + + + Edit + Editar - - Category - Categoria + + Color scheme + Esquema de cor - - Interface - Interface + + Equalizer + Equalizador - - Default paths - Caminhos padrão + + Always display handles + Sempre exibir manipuladores - - Devices - Dispositivos + + Convolver benchmarking + - - Network - Rede + + Benchmark now + - - Tray icon - Ícone de bandeja + + Clear cached data + - - Context menu - Menu de Contexto + + Enable benchmarking on boot + - - Theme - Tema + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + - - Edit - Editar + + Workarounds + - - Color scheme - Esquema de cor + + Allow volume control of the virtual sink device + - - Equalizer - Equalizador + + Restart required to apply changes. May cause audio loss in some cases. + - - Always display handles - Sempre exibir manipuladores + + Impluse responses + Respostas implícitas - - Impluse responses - Respostas implícitas + + VDCs + VDCs - - VDCs - VDCs + + Liveprog scripts + Scripts do Liveprog - - Liveprog scripts - Scripts do Liveprog + + Save + Salvar - - Save - Salvar + + Built-in assets + Recursos integrados - - Built-in assets - Recursos integrados + + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> + <html><head/><body><p>Esta opção verificará a cada inicialização se um dos scripts EEL padrão está faltando. Se este for o caso, o(s) arquivo(s) faltando(s) será(ão) automaticamente restaurado(s) dos recursos (isto não o(s) substituirá se ele(s) já existe(m)!).</p></body></html> - - <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - <html><head/><body><p>Esta opção verificará a cada inicialização se um dos scripts EEL padrão está faltando. Se este for o caso, o(s) arquivo(s) faltando(s) será(ão) automaticamente restaurado(s) dos recursos (isto não o(s) substituirá se ele(s) já existe(m)!).</p></body></html> + + Extract bundled assets on startup + Extrair recursos agregados na inicialização - - Extract bundled assets on startup - Extrair recursos agregados na inicialização + + Extract now + Extrair agora - - Extract now - Extrair agora + + Select sink/device to be processed + Selecione o sink/dispositivo a ser processado - - Select sink/device to be processed - Selecione o sink/dispositivo a ser processado + + Use default output device (recommended) + Usar o dispositivo de saída padrão (recomendado) - - Use default output device (recommended) - Usar o dispositivo de saída padrão (recomendado) + + Manually select device + Selecionar dispositivo manualmente - - Manually select device - Selecionar dispositivo manualmente + + Device + Dispositivo - - Device - Dispositivo + + Blocklisted apps + Aplicativos bloqueados - - Blocklisted apps - Aplicativos bloqueados + + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. + Na seção 'Aplicativos' seção acessível usando o menu de três pontos na janela principal, você pode bloquear aplicativos que estão tocando som no fundo de serem processados pelo JamesDSP. - - In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - Na seção 'Aplicativos' seção acessível usando o menu de três pontos na janela principal, você pode bloquear aplicativos que estão tocando som no fundo de serem processados pelo JamesDSP. + + Allowlist mode (apps need to be explicitly enabled instead) + Modo de lista de permissão (aplicativos têm de ser explicitamente ativados) - - Allowlist mode (apps need to be explicitly enabled instead) - Modo de lista de permissão (aplicativos têm de ser explicitamente ativados) + + Clear list + Limpar lista - - Clear list - Limpar lista + + AutoEQ database + Banco de dados do AutoEQ - - AutoEQ database - Banco de dados do AutoEQ + + Status: + Estado: - - Status: - Estado: + + unknown + desconhecido - - unknown - desconhecido + + Manage local database + Gerenciar banco de dados local - - Manage local database - Gerenciar banco de dados local + + Run in background (tray icon) + Executar em segundo plano (ícone da bandeja) - - Run in background (tray icon) - Executar em segundo plano (ícone da bandeja) + + No, shutdown audio effects when closing app + Não, desligar efeitos de áudio ao fechar o aplicativo - - No, shutdown audio effects when closing app - Não, desligar efeitos de áudio ao fechar o aplicativo + + Yes, minimize to tray icon when closing app + Sim, minimizar para ícone da bandeja ao fechar o aplicativo - - Yes, minimize to tray icon when closing app - Sim, minimizar para ícone da bandeja ao fechar o aplicativo + + Auto-start + Auto-iniciar - - Auto-start - Auto-iniciar + + Start minimized on boot + Iniciar minimizado na inicialização - - Start minimized on boot - Iniciar minimizado na inicialização + + Systray not supported on this system + Systray não suportado neste sistema - - Systray not supported on this system - Systray não suportado neste sistema + + Visit Github repo + Visitar repositório do GitHub - - Visit Github repo - Visitar repositório do GitHub + + Run setup wizard + Executar assistente de configuração - - Run setup wizard - Executar assistente de configuração + + Close + Fechar - - Close - Fechar + + + benchmark data loaded + - - Unknown (%1) - Desconhecido (%1) + + Unknown (%1) + Desconhecido (%1) - - installed - Instalado + + installed + Instalado - - not installed - Não instalado + + not installed + Não instalado - - Override liveprog scripts? - Substituir scripts do liveprog? + + + no benchmark data stored + - - Do you want to override existing default liveprog scripts? + + Override liveprog scripts? + Substituir scripts do liveprog? + + + + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - Você quer substituir os scripts padrão do liveprog existentes? + Você quer substituir os scripts padrão do liveprog existentes? Se eles foram modificados, eles serão redefinidos. - - Extract assets - Extrair recursos + + Extract assets + Extrair recursos - - %1 files have been restored - %1 arquivos foram restaurados + + %1 files have been restored + %1 arquivos foram restaurados - - You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. + + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - Você está prestes a ativar o modo de lista de permissões. O JamesDSP não processará todo aplicativo por padrão enquanto este modo estiver ativo. Você tem de permitir explicitamente que cada aplicativo seja processado no menu de 'Aplicativos'. + Você está prestes a ativar o modo de lista de permissões. O JamesDSP não processará todo aplicativo por padrão enquanto este modo estiver ativo. Você tem de permitir explicitamente que cada aplicativo seja processado no menu de 'Aplicativos'. - - Are you sure? - Você tem certeza? + + Are you sure? + Você tem certeza? + + + + This action will reset your current blocklist or allowlist. Do you want to continue? + Esta ação redefinirá a sua lista de bloqueio atual ou lista de permissões. Você quer continuar? + + + + Warning + Aviso + + + + Do you really want to restore the default menu layout? + Você realmente quer restaurar a disposição padrão do menu? - - This action will reset your current blocklist or allowlist. Do you want to continue? - Esta ação redefinirá a sua lista de bloqueio atual ou lista de permissões. Você quer continuar? + + waiting for result... + - - Warning - Aviso + + Cache cleared + - - Do you really want to restore the default menu layout? - Você realmente quer restaurar a disposição padrão do menu? + + Benchmark data has been cleared. Restart this app to fully apply the changes. + - - + + SingleInstanceMonitor - - Another instance of JamesDSP is already active and has been put in the foreground. - Outra instância do JamesDSP já está em atividade e foi posta em primeiro plano. + + Another instance of JamesDSP is already active and has been put in the foreground. + Outra instância do JamesDSP já está em atividade e foi posta em primeiro plano. - - + + StatusDialog - - Status - Estado + + Status + Estado - - Application version - Versão do aplicativo + + Application version + Versão do aplicativo - - JamesDSP core version - Versão do núcleo do JamesDSP + + JamesDSP core version + Versão do núcleo do JamesDSP - - Processing state - Estado de processamento + + Processing state + Estado de processamento - - Audio format - Formato de áudio + + Audio format + Formato de áudio - - Sampling rate - Taxa de amostragem + + Sampling rate + Taxa de amostragem - - + + StatusFragment - - Processing - Processando + + Processing + Processando - - Not processing - Não processando + + Not processing + Não processando - - + + TrayIcon - - &Bypass - &Ignorar + + &Bypass + &Ignorar - - &Presets - &Predefinições + + &Presets + &Predefinições - - &Convolver bookmarks - Marcadores de &convolver + + &Convolver bookmarks + Marcadores de &convolver - - JamesDSP for Linux - JamesDSP para Linux + + JamesDSP for Linux + JamesDSP para Linux - - No presets found - Nenhuma predefinição encontrada + + No presets found + Nenhuma predefinição encontrada - - No impulse responses found - Nenhuma resposta de impulso encontrada + + No impulse responses found + Nenhuma resposta de impulso encontrada - - &Reload JamesDSP - &Recarregar JamesDSP + + &Reload JamesDSP + &Recarregar JamesDSP - - - &Quit - &Sair + + + &Quit + &Sair - - - &Show/hide window - &Exibir/ocultar janela + + + &Show/hide window + &Exibir/ocultar janela - - Re&verberation presets - Predefinições de re&verberação + + Re&verberation presets + Predefinições de re&verberação - - Off - Desligado + + Off + Desligado - - &Equalizer presets - Predefinições do &equalizador + + &Equalizer presets + Predefinições do &equalizador - - &Crossfeed - &Crossfeed + + &Crossfeed + &Crossfeed - - + + VariableItemModel - - Parameter - Parâmetro + + Parameter + Parâmetro - - Value - Valor + + Value + Valor - - + + VariableWatchWidget - - Form - Forma + + Form + Forma - - ms - ms + + ms + ms - - Refresh every - Atuaizar a cada + + Refresh every + Atuaizar a cada - - Click a variable to manipulate its value. - Clique numa variável para manipular seu valor. + + Click a variable to manipulate its value. + Clique numa variável para manipular seu valor. - - - Error - Erro + + + Error + Erro - - This variable is a string. Currently only numerical value types can be modified. - Esta variável é uma string. Atualmente, só tipos de valor numérico podem ser modificados. + + This variable is a string. Currently only numerical value types can be modified. + Esta variável é uma string. Atualmente, só tipos de valor numérico podem ser modificados. - - Manipulate variable - Manipular variável + + Manipulate variable + Manipular variável - - Enter a new value for variable '%1': - Digite um novo valor para a variável '%1': + + Enter a new value for variable '%1': + Digite um novo valor para a variável '%1': - - Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. - Falha ao manipular a variável '%1'. Ela já não existe ou não pode ser mudada. + + Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. + Falha ao manipular a variável '%1'. Ela já não existe ou não pode ser mudada. - - + + VdcDatabaseModel - - Company - Empresa + + Company + Empresa - - Model - Modelo + + Model + Modelo - - + + ads::CDockAreaTitleBar - - Detach Group - Desanexar grupo + + Detach Group + Desanexar grupo - - Close Group - Fechar grupo + + Close Group + Fechar grupo - - Close Other Groups - Fechar outros grupos + + Close Other Groups + Fechar outros grupos - - + + ads::CDockManager - - Show View - Exibir vista + + Show View + Exibir vista - - + + ads::CDockWidgetTab - - Detach - Desanexar + + Detach + Desanexar - - Close - Fechar + + Close + Fechar - - Close Others - Fechar outros + + Close Others + Fechar outros - - + + menueditor - - Available entries - Entradas disponíveis + + Available entries + Entradas disponíveis - - Move Up - Mover para cima + + Move Up + Mover para cima - - Moves the selected toolbar item up - Move o item da barra de ferramentas selecionada para cima + + Moves the selected toolbar item up + Move o item da barra de ferramentas selecionada para cima - - &Up - &Cima + + &Up + &Cima - - Move Down - Mover para baixo + + Move Down + Mover para baixo - - moves the selected toolbar item down - Move o item da barra de ferramentas selecionada para baixo + + moves the selected toolbar item down + Move o item da barra de ferramentas selecionada para baixo - - &Down - &Baixo + + &Down + &Baixo - - Insert - Inserir + + Insert + Inserir - - Adds the selected menu action to the toolbar - Adiciona a ação do menu selecionada à barra de ferramentas + + Adds the selected menu action to the toolbar + Adiciona a ação do menu selecionada à barra de ferramentas - - &Add - &Adicionar + + &Add + &Adicionar - - Remove - Remover + + Remove + Remover - - Removes the selected item from the active toolbar - Remove o item selecionado da barra de ferramentas ativa + + Removes the selected item from the active toolbar + Remove o item selecionado da barra de ferramentas ativa - - &Del - &Excluir + + &Del + &Excluir - - - Reset - Redefinir + + + Reset + Redefinir - - Context menu contents - Conteúdo do menu de contexto + + Context menu contents + Conteúdo do menu de contexto - + diff --git a/resources/translations/jamesdsp_ro.ts b/resources/translations/jamesdsp_ro.ts index 0d3dea6c..2f0b29a3 100644 --- a/resources/translations/jamesdsp_ro.ts +++ b/resources/translations/jamesdsp_ro.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,318 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_ru.ts b/resources/translations/jamesdsp_ru.ts index cffc90ee..fc66e956 100644 --- a/resources/translations/jamesdsp_ru.ts +++ b/resources/translations/jamesdsp_ru.ts @@ -1,1650 +1,1655 @@ - + AeqItemDelegate - - 2nd choice - 2-й вариант + + 2nd choice + 2-й вариант - - 3rd choice - 3-й вариант + + 3rd choice + 3-й вариант - - %1th choice - %1 -ый вариант + + %1th choice + %1 -ый вариант - - + + AeqPreviewPlot - - Frequency (Hz) - Частота (Гц) + + Frequency (Hz) + Частота (Гц) - - Amplitude (dBr) - Амплитуда (dBr) + + Amplitude (dBr) + Амплитуда (dBr) - - Target - Цель + + Target + Цель - - Raw (smoothed) - Сырость (сглаженная) + + Raw (smoothed) + Сырость (сглаженная) - - Error (smoothed) - Ошибка (сглаженная) + + Error (smoothed) + Ошибка (сглаженная) - - Equalization - Эквализация + + Equalization + Эквализация - - Raw - + + Raw + - - Error - Ошибка + + Error + Ошибка - - Equalized - Выровнено + + Equalized + Выровнено - - Equalization (normalized) - Эквализация (нормализовано) + + Equalization (normalized) + Эквализация (нормализовано) - - Move to top left - Переместить вверх влево + + Move to top left + Переместить вверх влево - - Move to top center - Переместить вверх по центру + + Move to top center + Переместить вверх по центру - - Move to top right - Переместить вверх справа + + Move to top right + Переместить вверх справа - - Move to bottom right - Переместить справа вниз + + Move to bottom right + Переместить справа вниз - - Move to bottom left - Переместить слева вниз + + Move to bottom left + Переместить слева вниз - - + + AeqSelector - - AutoEQ Database - База данных AutoEQ + + AutoEQ Database + База данных AutoEQ - - Filter... - Фильтр... + + Filter... + Фильтр... - - Local database version - Версия локальной базы + + Local database version + Версия локальной базы - - Checked out at commit: - Проверено на коммите: + + Checked out at commit: + Проверено на коммите: - - Last commit created at: - Последний коммит создан в: + + Last commit created at: + Последний коммит создан в: - - Package generated at: - Пакет сформирован на: + + Package generated at: + Пакет сформирован на: - - Display settings - Настройки отображения + + Display settings + Настройки отображения - - Dark mode - Тёмный режим + + Dark mode + Тёмный режим - - Update database - Обновить базу данных + + Update database + Обновить базу данных - - Download latest AutoEQ package - Загрузите последнюю версию пакета AutoEQ + + Download latest AutoEQ package + Загрузите последнюю версию пакета AutoEQ - - Delete database - Удалить базу данных + + Delete database + Удалить базу данных - - Cleanup local database and exit - Очистить локальную базу данных и выйти + + Cleanup local database and exit + Очистить локальную базу данных и выйти - - No measurement selected - Измерение не выбрано + + No measurement selected + Измерение не выбрано - - Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. + + Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. This will override your current GraphicEQ configuration. - Используйте поле поиска слева, чтобы найти подходящее измерение для ваших наушников. Нажмите 'OK', чтобы загрузить данные эквалайзера в аудиосистему. + Используйте поле поиска слева, чтобы найти подходящее измерение для ваших наушников. Нажмите 'OK', чтобы загрузить данные эквалайзера в аудиосистему. Это отменит текущую конфигурацию GraphicEQ. - - - Manage database - Управлять базой данных + + + Manage database + Управлять базой данных - - No measurements found - Измерения не найдены + + No measurements found + Измерения не найдены - - AutoEQ database - База данных AutoEQ + + AutoEQ database + База данных AutoEQ - - Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. + + Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. An internet connection is required during this step. Do you want to continue and enable this feature? - Перед использованием интеграции AutoEQ вам необходимо загрузить уменьшенную версию их базы данных компенсации для наушников (~ 50 МБ) на свой жесткий диск. + Перед использованием интеграции AutoEQ вам необходимо загрузить уменьшенную версию их базы данных компенсации для наушников (~ 50 МБ) на свой жесткий диск. На этом этапе требуется подключение к Интернету. Вы хотите продолжить и включить эту функцию? - - - Failed to retrieve version information - Не удалось получить информацию о версии + + + Failed to retrieve version information + Не удалось получить информацию о версии - - - Failed to retrieve package information from the remote repository: + + + Failed to retrieve package information from the remote repository: Status code: %0 Reason: %1 - Не удалось получить информацию о пакете из удаленного репозитория: + Не удалось получить информацию о пакете из удаленного репозитория: Код состояния: %0 Причина: %1 - - Return to database - Вернуться к базе данных + + Return to database + Вернуться к базе данных - - No new updates available - Нет новых обновлений + + No new updates available + Нет новых обновлений - - The local database is currently up-to-date; no new updates are available at this time. + + The local database is currently up-to-date; no new updates are available at this time. It may take up to 24 hours for new changes in the AutoEQ upstream repo to become available for download here. Packages are generated at 4am UTC daily. Do you want to re-install the latest database update anyway? - Локальная база данных в настоящее время обновлена; на данный момент никаких новых обновлений не доступно. + Локальная база данных в настоящее время обновлена; на данный момент никаких новых обновлений не доступно. Может потребоваться до 24 часов, чтобы новые изменения в репозитории Auto EQ upstream стали доступны для загрузки. Пакеты генерируются ежедневно в 4 утра по Гринвичу. Вы все равно хотите переустановить последнее обновление базы данных? - - Database cleared - База данных очищена + + Database cleared + База данных очищена - - The database has been removed from your hard disk - База данных была удалена с жесткого диска + + The database has been removed from your hard disk + База данных была удалена с жесткого диска - - Error - Ошибка + + Error + Ошибка - - Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. - Невозможно получить соответствующий файл из базы данных. Пожалуйста, обновите локальную базу данных, поскольку она кажется неполной. + + Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. + Невозможно получить соответствующий файл из базы данных. Пожалуйста, обновите локальную базу данных, поскольку она кажется неполной. - - + + AppItem - - (unset) - (не задано) + + (unset) + (не задано) - - - - Add to blocklist - Добавить в список блокировки + + + + Add to blocklist + Добавить в список блокировки - - - Add to allowlist - Добавить в список разрешенных + + + Add to allowlist + Добавить в список разрешенных - - Rate: %1Hz - Частота: %1Hz + + Rate: %1Hz + Частота: %1Hz - - Latency: %1ms - Задержка: %1ms + + Latency: %1ms + Задержка: %1ms - - Format: %1 - Формат: %1 + + Format: %1 + Формат: %1 - - + + AppManagerFragment - - Active apps - Активные приложения + + Active apps + Активные приложения - - No apps are playing audio - Ни одно приложение не воспроизводит звук + + No apps are playing audio + Ни одно приложение не воспроизводит звук - - + + AutostartManager - - Manage auto-start permission for JamesDSP - + + Manage auto-start permission for JamesDSP + - - + + CodeOutline - - Annotations - Примечания + + Annotations + Примечания - - Functions - Функции + + Functions + Функции - - + + ConsoleOutput - - Auto-scroll - Автопрокрутка + + Auto-scroll + Автопрокрутка - - Copy selection - Копировать выбранное + + Copy selection + Копировать выбранное - - Copy all - Копировать все + + Copy all + Копировать все - - Clear - Очистить + + Clear + Очистить - - + + EELEditor - - EEL Scripting IDE - EEL Scripting IDE + + EEL Scripting IDE + EEL Scripting IDE - - File - Файл + + File + Файл - - Edit - Правка + + Edit + Правка - - Navigation - Навигация + + Navigation + Навигация - - View - Вид + + View + Вид - - Help - Справка + + Help + Справка - - Open - Открыть + + Open + Открыть - - Open script - Открыть сценарий + + Open script + Открыть сценарий - - Ctrl+O - Ctrl+O + + Ctrl+O + Ctrl+O - - - Close file - Закрыть файл + + + Close file + Закрыть файл - - Ctrl+Shift+W - Ctrl+Shift+W + + Ctrl+Shift+W + Ctrl+Shift+W - - Save - Сохранить + + Save + Сохранить - - Ctrl+S - Ctrl+S + + Ctrl+S + Ctrl+S - - Save as... - Сохранить как... + + Save as... + Сохранить как... - - Ctrl+Shift+S - Ctrl+Shift+S + + Ctrl+Shift+S + Ctrl+Shift+S - - Undo - Отменить + + Undo + Отменить - - Ctrl+Z - Ctrl+Z + + Ctrl+Z + Ctrl+Z - - Redo - Повторить + + Redo + Повторить - - Ctrl+Shift+Z - Ctrl+Shift+Z + + Ctrl+Shift+Z + Ctrl+Shift+Z - - Find/Replace... - Найти/Заменить... + + Find/Replace... + Найти/Заменить... - - Ctrl+F - Ctrl+F + + Ctrl+F + Ctrl+F - - - Go to line... - Перейти к строке... + + + Go to line... + Перейти к строке... - - Go to line - Перейти к строке + + Go to line + Перейти к строке - - Ctrl+L - Ctrl+L + + Ctrl+L + Ctrl+L - - - Jump to function... - Перейти к функции... + + + Jump to function... + Перейти к функции... - - Ctrl+M - Ctrl+M + + Ctrl+M + Ctrl+M - - Go to @init - Перейти к @init + + Go to @init + Перейти к @init - - F2 - F2 + + F2 + F2 - - Go to @sample - Перейти к @sample + + Go to @sample + Перейти к @sample - - F3 - F3 + + F3 + F3 - - Automatic Parentheses - Автоматические скобки + + Automatic Parentheses + Автоматические скобки - - Replace Tabs with Spaces - Заменить табуляцию на пробелы + + Replace Tabs with Spaces + Заменить табуляцию на пробелы - - EEL2 documentation - Руководство по EEL2 + + EEL2 documentation + Руководство по EEL2 - - F1 - F1 + + F1 + F1 - - Run code - Выполнить код + + Run code + Выполнить код - - F5 - F5 + + F5 + F5 - - New - Новый + + New + Новый - - New script wizard - Мастер новых сценариев + + New script wizard + Мастер новых сценариев - - Ctrl+N - Ctrl+N + + Ctrl+N + Ctrl+N - - - Freeze - Заморозить + + + Freeze + Заморозить - - F6 - F6 + + F6 + F6 - - Loaded projects - Загруженные проекты + + Loaded projects + Загруженные проекты - - Code outline - Схема кода + + Code outline + Схема кода - - Variable view - Изменяемый вид + + Variable view + Изменяемый вид - - Console output - Консольный вывод + + Console output + Консольный вывод - - '%1' started compiling at %2 - '%1' начал компиляцию в %2 + + '%1' started compiling at %2 + '%1' начал компиляцию в %2 - - <br>Compilation stopped at %2 - <br> Компиляция остановлена на %2 + + <br>Compilation stopped at %2 + <br> Компиляция остановлена на %2 - - Script initialization took %1ms - Инициализация сценария заняла %1 мс + + Script initialization took %1ms + Инициализация сценария заняла %1 мс - - Error - Ошибка + + Error + Ошибка - - Cannot write file - Не удается записать файл + + Cannot write file + Не удается записать файл - - Open EEL script - Открыть EEL сценарий + + Open EEL script + Открыть EEL сценарий - - EEL2 Script (*.eel) - Сценарий EEL2 (*.eel) + + EEL2 Script (*.eel) + Сценарий EEL2 (*.eel) - - Save as - Сохранить как + + Save as + Сохранить как - - Cannot execute - Не удается выполнить + + Cannot execute + Не удается выполнить - - No script file opened. Please open one first and try again. - Файл скрипта не открыт. Пожалуйста, сначала откройте один из них и попробуйте еще раз. + + No script file opened. Please open one first and try again. + Файл скрипта не открыт. Пожалуйста, сначала откройте один из них и попробуйте еще раз. - - Enter line number: - Введите номер строки: + + Enter line number: + Введите номер строки: - - Enter function name: - Введите название функции: + + Enter function name: + Введите название функции: - - + + EmptyView - - No project loaded - Проект не загружен + + No project loaded + Проект не загружен - - + + FileDownloaderDialog - - Package manager - Менеджер пакетов + + Package manager + Менеджер пакетов - - Downloading package... - Загрузка пакета... + + Downloading package... + Загрузка пакета... - - + + FileSelectionWidget - - Refresh - Обновить + + Refresh + Обновить - - Bookmark - Закладка + + Bookmark + Закладка - - Rename - Переименовать + + Rename + Переименовать - - Remove - Удалить + + Remove + Удалить - - No supported files found - Поддерживаемых файлов не найдено + + No supported files found + Поддерживаемых файлов не найдено - - + + FindReplaceForm - - Form - Form + + Form + Form - - &Find: - &Найти: + + &Find: + &Найти: - - R&eplace with: - З&аменить на: + + R&eplace with: + З&аменить на: - - Previous - Предыдущий + + Previous + Предыдущий - - Next - Следующий + + Next + Следующий - - &Options - &Параметры + + &Options + &Параметры - - R&egular expression - Р&егулярные выражения + + R&egular expression + Р&егулярные выражения - - &Whole words - &Целые слова + + &Whole words + &Целые слова - - &Case sensitive - &С учетом регистра + + &Case sensitive + &С учетом регистра - - &Close - &Закрыть + + &Close + &Закрыть - - &Replace - &Заменить + + &Replace + &Заменить - - Replace &All - Заменить &все + + Replace &All + Заменить &все - - no match found - совпадений не найдено + + no match found + совпадений не найдено - - Replaced %1 occurrence(s) - Заменено %1 совпадение(я) + + Replaced %1 occurrence(s) + Заменено %1 совпадение(я) - - + + FirstLaunchWizard - - Welcome! - Приветствуем! + + Welcome! + Приветствуем! - - Thank you for installing this app! + + Thank you for installing this app! However, before you can begin playing around with JamesDSP for Linux, we'll need to make some adjustments in order to ensure the best possible experience with JDSP. - Спасибо, что установили это приложение! + Спасибо, что установили это приложение! Однако, прежде чем вы сможете начать пользоваться JamesDSP для Linux, нам необходимо внести некоторые уточнения, чтобы обеспечить максимально эффективную работу с JDSP. - - - - Next > - Далее > + + + + Next > + Далее > - - Run in background? - Запускать в фоновом режиме? + + Run in background? + Запускать в фоновом режиме? - - No, don't apply effects in background - Нет, не применять эффекты в фоновом режиме + + No, don't apply effects in background + Нет, не применять эффекты в фоновом режиме - - Yes, minimize to tray icon - Да, свернуть в значок в трее + + Yes, minimize to tray icon + Да, свернуть в значок в трее - - Start minimized on boot - Запускать свёрнутым при загрузке + + Start minimized on boot + Запускать свёрнутым при загрузке - - That's it! - Это все! + + That's it! + Это все! - - You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! - Вы готовы к работе! Вы можете изменить любой выбор, который вы только что сделали, в разделе настроек программы. Ознакомьтесь с ними, чтобы узнать о дальнейших возможностях настройки. Посетите наше сообщество Telegram для получения поддержки и обновлений! + + You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! + Вы готовы к работе! Вы можете изменить любой выбор, который вы только что сделали, в разделе настроек программы. Ознакомьтесь с ними, чтобы узнать о дальнейших возможностях настройки. Посетите наше сообщество Telegram для получения поддержки и обновлений! - - Telegram - Telegram + + Telegram + Telegram - - Close - Закрыть + + Close + Закрыть - - + + FlatTabWidget - - FlatTabWidget - + + FlatTabWidget + - - + + GraphicEQFilterGUI - - Enable Graphic EQ - Включить Graphic EQ + + Enable Graphic EQ + Включить Graphic EQ - - Freq. - Частота. + + Freq. + Частота. - - Gain - Усиление + + Gain + Усиление - - AutoEQ database... - База данных AutoEQ... + + AutoEQ database... + База данных AutoEQ... - - 15-band - 15-полосный + + 15-band + 15-полосный - - 31-band - 31-полосный + + 31-band + 31-полосный - - variable - изменяемый + + variable + изменяемый - - Import - Импорт + + Import + Импорт - - Export - Экспорт + + Export + Экспорт - - Invert response - Инвертировать + + Invert response + Инвертировать - - Normalize response - Нормализовать + + Normalize response + Нормализовать - - Reset response - Сбросить + + Reset response + Сбросить - - - Import EqualizerAPO settings - Импорт параметров EqualizerAPO + + + Import EqualizerAPO settings + Импорт параметров EqualizerAPO - - Import frequency response - Импорт частотных характеристик + + Import frequency response + Импорт частотных характеристик - - - CSV frequency response (*.csv) - Частотная характеристика CSV (*.csv) + + + CSV frequency response (*.csv) + Частотная характеристика CSV (*.csv) - - - - All files (*.*) - Все файлы (*.*) + + + + All files (*.*) + Все файлы (*.*) - - Import EqualizerAPO graphic EQ preset - Импорт предустановки графического эквалайзера EqualizerAPO + + Import EqualizerAPO graphic EQ preset + Импорт предустановки графического эквалайзера EqualizerAPO - - EqualizerAPO GraphicEQ (*.txt) - Графический эквалайзер EqualizerAPO (*.txt) + + EqualizerAPO GraphicEQ (*.txt) + Графический эквалайзер EqualizerAPO (*.txt) - - Export frequency response - Экспорт частотных характеристик + + Export frequency response + Экспорт частотных характеристик - - + + GzipDownloaderDialog - - Error - Ошибка + + Error + Ошибка - - %1MB of %2MB downloaded - %1МБ из %2МБ загружено + + %1MB of %2MB downloaded + %1МБ из %2МБ загружено - - Decompressing package... - Распаковка пакета... + + Decompressing package... + Распаковка пакета... - - + + LiveprogSelectionWidget - - - No script has been loaded - Нет активных сценариев + + + No script has been loaded + Нет активных сценариев - - Enable - Включить + + Enable + Включить - - Reset - Сбросить + + Reset + Сбросить - - - Create new script - Создать новый сценарий + + + Create new script + Создать новый сценарий - - - Error - Ошибка + + + Error + Ошибка - - Cannot restore defaults. + + Cannot restore defaults. No EEL file is currently loaded. - Невозможно восстановить значения по умолчанию. + Невозможно восстановить значения по умолчанию. В настоящее время не загружен файл EEL. - - Selected EEL file does not exist anymore. + + Selected EEL file does not exist anymore. Please select another one - Выбранный файл EEL больше не существует. + Выбранный файл EEL больше не существует. Пожалуйста, выберите другой - - Edit script - Редактировать сценарий + + Edit script + Редактировать сценарий - - No customizable parameters - Нет настраиваемых параметров + + No customizable parameters + Нет настраиваемых параметров - - + + MainWindow - - JamesDSP for Linux - JamesDSP для Linux + + JamesDSP for Linux + JamesDSP для Linux - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Динамическое усиление низких частот</span></p><p>Частотно-определяемое усиление басов. Автоматически устанавливает собственные параметры, такие как усиление, полоса пропускания и частота среза, анализируя входящий аудиопоток</p><p><span style=" text-decoration: underline;">Максимальное усиление:</span> регулирует величину динамического эффекта усиления баса.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Динамическое усиление низких частот</span></p><p>Частотно-определяемое усиление басов. Автоматически устанавливает собственные параметры, такие как усиление, полоса пропускания и частота среза, анализируя входящий аудиопоток</p><p><span style=" text-decoration: underline;">Максимальное усиление:</span> регулирует величину динамического эффекта усиления баса.</p></body></html> - - Dynamic bass boost - Динамическое усиление низких частот + + Dynamic bass boost + Динамическое усиление низких частот - - Maximum gain - Максимальное усиление + + Maximum gain + Максимальное усиление - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Аналоговое моделирование</span></p><p>Аналоговое моделирование с передискретизацией - генератор ровных гармоник без искажений.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Аналоговое моделирование</span></p><p>Аналоговое моделирование с передискретизацией - генератор ровных гармоник без искажений.</p></body></html> - - Analog modelling - Аналоговое моделирование + + Analog modelling + Аналоговое моделирование - - Preamp (Harmonics) - Предусилитель (гармоники) + + Preamp (Harmonics) + Предусилитель (гармоники) - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> + - - Limiter/Master - Лимит/Мастер + + Limiter/Master + Лимит/Мастер - - Threshold - Порог + + Threshold + Порог - - Release - Релиз + + Release + Релиз - - Post gain - Пост-усиление + + Post gain + Пост-усиление - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> + - - Dynamic range compander - + + Dynamic range compander + - - Time constant - + + Time constant + - - Granularity - + + Granularity + - - Time-frequency transforms - + + Time-frequency transforms + - - Uniform (Short-time Fourier) - + + Uniform (Short-time Fourier) + - - Multiresolution (Continuous wavelet) - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> + - - Multiresolution (Time domain) - + + + Crossfeed + Кроссфид - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - + + Mode + Режим - - - Crossfeed - Кроссфид + + Custom BS2B parameters + Пользовательские параметры BS2B - - Mode - Режим + + Cut frequency + Срез частоты - - Custom BS2B parameters - Пользовательские параметры BS2B + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> + - - Cut frequency - Срез частоты + + Soundstage wideness + Ширина звуковой сцены - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + + Widen level + Расширение уровня - - Soundstage wideness - Ширина звуковой сцены + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> + - - Widen level - Расширение уровня + + Enable reverberation + Включить реверберацию - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + + Presets + Предустановки - - Enable reverberation - Включить реверберацию + + + ... + ... - - Presets - Предустановки + + Oversampling factor + - - - ... - ... + + Early reflection factor + - - Oversampling factor - + + Early reflection amount + - - Early reflection factor - + + Early reflection width + - - Early reflection amount - + + Lowpass cutoff (Input) + - - Early reflection width - + + Lowpass cutoff (Bass) + - - Lowpass cutoff (Input) - + + Lowpass cutoff (Damp) + - - Lowpass cutoff (Bass) - + + Lowpass cutoff (Output) + - - Lowpass cutoff (Damp) - + + Final wet mix + - - Lowpass cutoff (Output) - + + Final dry mix + - - Final wet mix - + + Reverb wetness + Глубина отражения - - Final dry mix - + + Width L/R mix + - - Reverb wetness - Глубина отражения + + LFO wander amount + - - Width L/R mix - + + LFO spin amount + - - LFO wander amount - + + Time decay + Время затухания - - LFO spin amount - + + Delay + Задержка - - Time decay - Время затухания + + Bass boost + Усиление басов - - Delay - Задержка + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> + - - Bass boost - Усиление басов + + FIR Minimum phase + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + + IIR 4 order + - - FIR Minimum phase - + + IIR 6 order + - - IIR 4 order - + + IIR 8 order + - - IIR 6 order - + + IIR 10 order + - - IIR 8 order - + + IIR 12 order + - - IIR 10 order - + + Enable EQ + Включить - - IIR 12 order - + + Multiresolution (Continuous wavelet, incomplete dual frame) + - - Enable EQ - Включить + + Pseudo multiresolution (Undersampling frame) + - - Presets... - Предустановки... + + Pseudo multiresolution (Time domain, zero latency) + - - Filter type - Тип фильтра + + Presets... + Предустановки... - - Interpolator - Интерполятор + + Filter type + Тип фильтра - - <html><head/><body><p>Interpolation mode</p></body></html> - + + Interpolator + Интерполятор - - Piecewise Cubic Hermite Interpolating Polynomial - + + <html><head/><body><p>Interpolation mode</p></body></html> + - - Modified Hiroshi Akima spline - + + Piecewise Cubic Hermite Interpolating Polynomial + - - Reset EQ - Сбросить эквалайзер + + Modified Hiroshi Akima spline + - - Fixed bands - Фикс. диапазоны + + Reset EQ + Сбросить эквалайзер - - Flexible bands - Гибкие диапазоны + + Fixed bands + Фикс. диапазоны - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - + + Flexible bands + Гибкие диапазоны - - - Filesystem - Файловая система + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> + - - Bookmarks - Закладки + + + Filesystem + Файловая система - - Enable convolver - Включить конвольвер + + Bookmarks + Закладки - - IR optimization - + + Enable convolver + Включить конвольвер - - Original - + + IR optimization + - - Shrink - + + Original + - - Minimum phase transform and shrink - + + Shrink + - - Adv. waveform editing - Расширенное редактирование формы сигнала + + Minimum phase transform and shrink + - - Edit - Правка + + Adv. waveform editing + Расширенное редактирование формы сигнала - - Channels: - Каналы: + + Edit + Правка - - Samples: - Сэмплы: + + Channels: + Каналы: - - No selection - Не выбрано + + Samples: + Сэмплы: - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + + No selection + Не выбрано - - Database - База данных + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> + - - Create - Создание + + Database + База данных - - Create your custom DDC files using DDCToolbox - Создание пользовательских файлов DDC с помощью DDCToolbox + + Create + Создание - - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + + Create your custom DDC files using DDCToolbox + Создание пользовательских файлов DDC с помощью DDCToolbox - - View installation instructions - Посмотреть инструкцию по установке + + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - - Enable ViPER-DDC - Включить ViPER-DDC + + View installation instructions + Посмотреть инструкцию по установке - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + + Enable ViPER-DDC + Включить ViPER-DDC - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Эквалайзер с произвольными характеристиками </span></p><p>Также известен как GraphicEQ от EqualizerAPO.</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> + - - Custom Presets - Пользовательские предустановки + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Эквалайзер с произвольными характеристиками </span></p><p>Также известен как GraphicEQ от EqualizerAPO.</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Пользовательские предустановки</span></p><p>Создание и управление пользовательскими предустановками</p></body></html> + + Custom Presets + Пользовательские предустановки - - Settings - Настройки + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Пользовательские предустановки</span></p><p>Создание и управление пользовательскими предустановками</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Настройки</span></p><p>Настройки этого приложения</p></body></html> + + Settings + Настройки - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Прочее</span></p><p>Различные действия, которые используются реже</p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Настройки</span></p><p>Настройки этого приложения</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Байпас</span></p><p>Это функция, позволяющая выполнить коммутацию входного сигнала непосредственно на выход, минуя все функциональные блоки. Другими словами этот параметр определяет, включать или отключать звуковые эффекты. </p></body></html> + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Прочее</span></p><p>Различные действия, которые используются реже</p></body></html> - - Bypass - Байпас + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Байпас</span></p><p>Это функция, позволяющая выполнить коммутацию входного сигнала непосредственно на выход, минуя все функциональные блоки. Другими словами этот параметр определяет, включать или отключать звуковые эффекты. </p></body></html> - - %1 connected - Preset loaded automatically - %1 подключен - предустановка загружается автоматически + + Bypass + Байпас - - Cannot execute script - Невозможно выполнить сценарий + + %1 connected - Preset loaded automatically + %1 подключен - предустановка загружается автоматически - - The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - Текущий файл EEL (по адресу '%1') больше не существует в файловой системе. Пожалуйста, откройте файл заново вручную. + + Cannot execute script + Невозможно выполнить сценарий - - Apps - Приложения + + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. + Текущий файл EEL (по адресу '%1') больше не существует в файловой системе. Пожалуйста, откройте файл заново вручную. - - Driver status - Статус драйвера + + Apps + Приложения - - Relink audio pipeline - Перелинковка аудиоканала + + Driver status + Статус драйвера - - Reset to defaults - Сброс к значениям по умолчанию + + Relink audio pipeline + Перелинковка аудиоканала - - Load from file - Загрузить из файла + + Reset to defaults + Сброс к значениям по умолчанию - - Save to file - Сохранить в файл + + Load from file + Загрузить из файла - - Open LiveprogIDE - Открыть LiveprogIDE + + Save to file + Сохранить в файл - - What's this... (Select UI element) - Что это... (Выберите элемент пользовательского интерфейса) + + Open LiveprogIDE + Открыть LiveprogIDE - - Bass/Misc - Басы/Прочее + + What's this... (Select UI element) + Что это... (Выберите элемент пользовательского интерфейса) - - Sound Positioning - Позиционирование звука + + Bass/Misc + Басы/Прочее - - Reverb - Реверберация + + Sound Positioning + Позиционирование звука - - Equalizer - Эквалайзер + + Reverb + Реверберация - - Convolver - Конвольвер + + Equalizer + Эквалайзер - - DDC - DDC + + Convolver + Конвольвер - - Liveprog - Liveprog + + DDC + DDC - - Graphic EQ - Graphic EQ + + Liveprog + Liveprog - - Launch application - Запуск приложения + + Graphic EQ + Graphic EQ - - Reset Configuration - Сброс конфигурации + + Launch application + Запуск приложения - - Are you sure? - Вы уверены? + + Reset Configuration + Сброс конфигурации - - Load custom audio.conf - Загрузка пользовательского audio.conf + + Are you sure? + Вы уверены? - - Save current audio.conf - Сохраните текущий файл audio.conf + + Load custom audio.conf + Загрузка пользовательского audio.conf - - Very low - + + Save current audio.conf + Сохраните текущий файл audio.conf - - Low - + + Very low + - - Medium - + + Low + - - High - + + Medium + - - Extreme - + + High + - - Advanced waveform editing - Расширенное редактирование формы сигнала + + Extreme + - - Advanced waveform editing (default: -80;-100;0;0;0;0) + + Advanced waveform editing + Расширенное редактирование формы сигнала + + + + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. This setting is only in effect if IR optimization is enabled. @@ -1656,1220 +1661,1292 @@ This setting is only in effect if IR optimization is enabled. 5th value: Channel 3 delay (samples) 6th value: Channel 4 delay (samples) - + - - + + NewFileWizard - - Create new script - Создание нового сценария + + Create new script + Создание нового сценария - - New script - Новый сценарий + + New script + Новый сценарий - - Define and generate a basic script template - Определение и создание базового шаблона сценария + + Define and generate a basic script template + Определение и создание базового шаблона сценария - - Workspace directory - Рабочий каталог + + Workspace directory + Рабочий каталог - - File name - Имя файла + + File name + Имя файла - - Description - Описание + + Description + Описание - - Untitled script - Сценарий без названия + + Untitled script + Сценарий без названия - - Select directory - Выберите каталог + + Select directory + Выберите каталог - - - - Error - Ошибка + + + + Error + Ошибка - - Workspace directory does not exist - Рабочий каталог не существует + + Workspace directory does not exist + Рабочий каталог не существует - - A file with the same name already exists at this loction - Файл с таким же именем уже существует + + A file with the same name already exists at this loction + Файл с таким же именем уже существует - - File name is empty or contains illegal characters - Имя файла пустое или содержит недопустимые символы + + File name is empty or contains illegal characters + Имя файла пустое или содержит недопустимые символы - - + + OverlayMsgProxy - - - - Close - Закрыть + + + + Close + Закрыть - - + + PaletteEditor - - Palette editor - Редактор палитры + + Palette editor + Редактор палитры - - - - - - Select... - Выбрать... + + + + + + Select... + Выбрать... - - Base Color - Основной цвет + + Base Color + Основной цвет - - Background Color - Цвет фона + + Background Color + Цвет фона - - Foreground Color - Цвет переднего плана + + Foreground Color + Цвет переднего плана - - Close - Закрыть + + Close + Закрыть - - Reset - Сбросить + + Reset + Сбросить - - White Icons - Белые иконки + + White Icons + Белые иконки - - Selection Color - Цвет выделения + + Selection Color + Цвет выделения - - Disabled Color - Цвет неактивных элементов + + Disabled Color + Цвет неактивных элементов - - + + PresetAddRuleFragment - - Add new rule... - Добавить новое правило... + + Add new rule... + Добавить новое правило... - - If - если + + If + если - - is connected, then load preset - подключен, то загрузить предустановку + + is connected, then load preset + подключен, то загрузить предустановку - - + + PresetDialog - - Presets - Предустановки + + Presets + Предустановки - - Preset name - Название + + Preset name + Название - - Adds current config as a preset - Добавляет текущую конфигурацию в качестве предустановки + + Adds current config as a preset + Добавляет текущую конфигурацию в качестве предустановки - - Save - Сохранить + + Save + Сохранить - - Rules... - Правила... + + Rules... + Правила... - - Remove - Удалить + + Remove + Удалить - - Load - Загрузить + + Load + Загрузить - - + + PresetFragment - - No presets saved - Предустановки не сохранены + + No presets saved + Предустановки не сохранены - - Cannot load preset - Невозможно загрузить предустановку + + Cannot load preset + Невозможно загрузить предустановку - - Selected file does not exist anymore - Выбранный файл больше не существует + + Selected file does not exist anymore + Выбранный файл больше не существует - - Overwrite - Перезаписать + + Overwrite + Перезаписать - - Save - Сохранить + + Save + Сохранить - - Rename - Переименовать + + Rename + Переименовать - - Delete - Удалить + + Delete + Удалить - - Rename preset - Переименовать предустановку + + Rename preset + Переименовать предустановку - - Enter new name - Ввести новое имя + + Enter new name + Ввести новое имя - - + + PresetRuleDialog - - Preset auto-switch rules - Предустановленные правила автопереключения + + Preset auto-switch rules + Предустановленные правила автопереключения - - Auto-switch rules - Правила автопереключения + + Auto-switch rules + Правила автопереключения - - Add new rule... - Добавить новое правило... + + Add new rule... + Добавить новое правило... - - Delete selection - Удалить выбранное + + Delete selection + Удалить выбранное - - No rules defined - Правила не определены + + No rules defined + Правила не определены - - - Cannot add new rule - Невозможно добавить новое правило + + + Cannot add new rule + Невозможно добавить новое правило - - All connected audio devices have already a rule defined. + + All connected audio devices have already a rule defined. You can only create one rule per device. - Для всех подключенных аудиоустройств уже определено правило. + Для всех подключенных аудиоустройств уже определено правило. Для каждого устройства можно создать только одно правило. - - You have no presets saved. + + You have no presets saved. Please create one first before adding a new rule. - У вас нет сохраненных предустановок. + У вас нет сохраненных предустановок. Перед добавлением нового правила создайте его. - - + + PresetRuleTableModel - - Device - Устройство + + Device + Устройство - - Assigned preset - Назначенная предустановка + + Assigned preset + Назначенная предустановка - - + + QObject - - List All Tabs - Список всех вкладок + + List All Tabs + Список всех вкладок - - Detach Group - Открепить группу + + Detach Group + Открепить группу - - Close Active Tab - Закрыть активную вкладку + + Close Active Tab + Закрыть активную вкладку - - Close Group - Закрыть группу + + Close Group + Закрыть группу - - Close Tab - Закрыть вкладку + + Close Tab + Закрыть вкладку - - Something went wrong - Что-то пошло не так + + Something went wrong + Что-то пошло не так - - Failed to open URL with default browser. + + Failed to open URL with default browser. Please copy this URL manually: - Не удалось открыть URL в браузере по умолчанию. + Не удалось открыть URL в браузере по умолчанию. Пожалуйста, скопируйте этот URL вручную: - - Flat - Обычный + + Flat + Обычный - - Pop - Поп + + Pop + Поп - - Rock - Рок + + Rock + Рок - - Jazz - Джаз + + Jazz + Джаз - - Classic - Классика + + Classic + Классика - - Bass - Басы + + Bass + Басы - - Clear - Чистый + + Clear + Чистый - - Hip-Hop - Хип-хоп + + Hip-Hop + Хип-хоп - - Dubstep - Дабстеп + + Dubstep + Дабстеп - - Movie - Фильм + + Movie + Фильм - - Metal - Металл + + Metal + Металл - - Vocal Booster - Усиление вокала + + Vocal Booster + Усиление вокала - - Hardstyle - Жесткий стиль + + Hardstyle + Жесткий стиль - - Acoustic - Акустика + + Acoustic + Акустика - - R&B - R&B + + R&B + R&B - - Electronic - Электронная музыка + + Electronic + Электронная музыка - - Deep Bass - Глубокий Бас + + Deep Bass + Глубокий Бас - - Beats - Биты + + Beats + Биты - - BS2B Custom - Настраиваемый BS2B + + BS2B Custom + Настраиваемый BS2B - - BS2B Weak - Слабый BS2B + + BS2B Weak + Слабый BS2B - - BS2B Strong - Сильный BS2B + + BS2B Strong + Сильный BS2B - - Out of head - + + Out of head + - - Surround 1 - Объемное звучание 1 + + Surround 1 + Объемное звучание 1 - - Surround 2 - Объемное звучание 2 + + Surround 2 + Объемное звучание 2 - - Joe0Bloggs Realistic surround - + + Joe0Bloggs Realistic surround + - - Default - По умолчанию + + Default + По умолчанию - - Small hall 1 - Малый холл 1 + + Small hall 1 + Малый холл 1 - - Small hall 2 - Малый холл 2 + + Small hall 2 + Малый холл 2 - - Medium hall 1 - Средний холл 1 + + Medium hall 1 + Средний холл 1 - - Medium hall 2 - Средний холл 2 + + Medium hall 2 + Средний холл 2 - - Large hall 1 - Большой холл 1 + + Large hall 1 + Большой холл 1 - - Large hall 2 - Большой холл 2 + + Large hall 2 + Большой холл 2 - - Small room 1 - Маленькая комната 1 + + Small room 1 + Маленькая комната 1 - - Small room 2 - Маленькая комната 2 + + Small room 2 + Маленькая комната 2 - - Medium room 1 - Средняя комната 1 + + Medium room 1 + Средняя комната 1 - - Medium room 2 - Средняя комната 2 + + Medium room 2 + Средняя комната 2 - - Large room 1 - Большая комната 1 + + Large room 1 + Большая комната 1 - - Large room 2 - Большая комната 2 + + Large room 2 + Большая комната 2 - - Medium ER 1 - Средний ER 1 + + Medium ER 1 + Средний ER 1 - - Medium ER 2 - Средний ER 2 + + Medium ER 2 + Средний ER 2 - - Plate high - Плоские высокие + + Plate high + Плоские высокие - - Plate low - Плоские низкие + + Plate low + Плоские низкие - - Long reverb 1 - Длинная реверберация 1 + + Long reverb 1 + Длинная реверберация 1 - - Long reverb 2 - Длинная реверберация 2 + + Long reverb 2 + Длинная реверберация 2 - - error - ошибка + + error + ошибка - - creating - создание + + creating + создание - - suspended - приостановлено + + suspended + приостановлено - - - idle - бездействует + + + idle + бездействует - - - running - работает + + + running + работает - - not connected - не подключено + + not connected + не подключено - - JamesDSP is an advanced audio processing engine available for Linux and Android systems. - + + JamesDSP is an advanced audio processing engine available for Linux and Android systems. + - - Auto-start permission has been denied - + + Auto-start permission has been denied + - - Please run 'flatpak permission-reset %1' and reenable auto-start. - + + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. + - - Unknown error - + + Unknown error + - - Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 - + + Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 + - - + + SettingsFragment - - Settings - Настройки + + Settings + Настройки + + + + Category + Категории + + + + Interface + Внешний вид + + + + Audio processing + + + + + Default paths + Пути по умолчанию + + + + Devices + Устройства + + + + Network + Сеть + + + + Tray icon + Значёк в трее + + + + Context menu + Контекстное меню + + + + Theme + Тема + + + + Edit + Правка - - Category - Категории + + Color scheme + Цветовая схема - - Interface - Внешний вид + + Equalizer + Эквалайзер - - Default paths - Пути по умолчанию + + Always display handles + Всегда отображать маркеры управления - - Devices - Устройства + + Convolver benchmarking + - - Network - Сеть + + Benchmark now + - - Tray icon - Значёк в трее + + Clear cached data + - - Context menu - Контекстное меню + + Enable benchmarking on boot + - - Theme - Тема + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + - - Edit - Правка + + Workarounds + - - Color scheme - Цветовая схема + + Allow volume control of the virtual sink device + - - Equalizer - Эквалайзер + + Restart required to apply changes. May cause audio loss in some cases. + - - Always display handles - Всегда отображать маркеры управления + + Impluse responses + Пульсирующие отклики - - Impluse responses - Пульсирующие отклики + + VDCs + VDC - - VDCs - VDC + + Liveprog scripts + Liveprog скрипты - - Liveprog scripts - Liveprog скрипты + + Save + Сохранить - - Save - Сохранить + + Built-in assets + Встроенные ресурсы - - Built-in assets - Встроенные ресурсы + + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> + <html><head/><body><p>Эта опция будет проверять при каждом запуске, не отсутствует ли один из скриптов EEL по умолчанию. Если это так, то отсутствующий файл(ы) будет автоматически восстановлен(ы) из ресурсов. (Он не будет перезаписывать их, если они уже существуют!).</p></body></html> - - <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - <html><head/><body><p>Эта опция будет проверять при каждом запуске, не отсутствует ли один из скриптов EEL по умолчанию. Если это так, то отсутствующий файл(ы) будет автоматически восстановлен(ы) из ресурсов. (Он не будет перезаписывать их, если они уже существуют!).</p></body></html> + + Extract bundled assets on startup + Извлечение связанных ресурсов при запуске - - Extract bundled assets on startup - Извлечение связанных ресурсов при запуске + + Extract now + Извлечь - - Extract now - Извлечь + + Select sink/device to be processed + Выбор устройства для обработки - - Select sink/device to be processed - Выбор устройства для обработки + + Use default output device (recommended) + Использовать устройство по умолчанию - - Use default output device (recommended) - Использовать устройство по умолчанию + + Manually select device + Ручной выбор устройства - - Manually select device - Ручной выбор устройства + + Device + Устройство - - Device - Устройство + + Blocklisted apps + Заблокированные приложения - - Blocklisted apps - Заблокированные приложения + + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. + В разделе «Приложения», доступном с помощью трехточечного меню в главном окне, вы можете заблокировать приложения, которые воспроизводят звук, от обработки с помощью JamesDSP. - - In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - В разделе «Приложения», доступном с помощью трехточечного меню в главном окне, вы можете заблокировать приложения, которые воспроизводят звук, от обработки с помощью JamesDSP. + + Allowlist mode (apps need to be explicitly enabled instead) + Режим белого списка (приложения из списка будут разрешены) - - Allowlist mode (apps need to be explicitly enabled instead) - Режим белого списка (приложения из списка будут разрешены) + + Clear list + Создать список - - Clear list - Создать список + + AutoEQ database + База данных AutoEQ - - AutoEQ database - База данных AutoEQ + + Status: + Статус: - - Status: - Статус: + + unknown + неизвестно - - unknown - неизвестно + + Manage local database + Управлять локальной базой данных - - Manage local database - Управлять локальной базой данных + + Run in background (tray icon) + Запускать в фоновом режиме(иконка в трее) - - Run in background (tray icon) - Запускать в фоновом режиме(иконка в трее) + + No, shutdown audio effects when closing app + Нет, отключать звуковые эффекты при закрытии приложения - - No, shutdown audio effects when closing app - Нет, отключать звуковые эффекты при закрытии приложения + + Yes, minimize to tray icon when closing app + Да, сворачивать в значок в трее при закрытии приложения - - Yes, minimize to tray icon when closing app - Да, сворачивать в значок в трее при закрытии приложения + + Auto-start + Автозапуск - - Auto-start - Автозапуск + + Start minimized on boot + Запускать свёрнутым при загрузке - - Start minimized on boot - Запускать свёрнутым при загрузке + + Systray not supported on this system + Эта система не поддерживает системный трей - - Systray not supported on this system - Эта система не поддерживает системный трей + + Visit Github repo + Проект на Github - - Visit Github repo - Проект на Github + + Run setup wizard + Запустить мастер настройки - - Run setup wizard - Запустить мастер настройки + + Close + Закрыть - - Close - Закрыть + + + benchmark data loaded + - - Unknown (%1) - Неизвестно (%1) + + Unknown (%1) + Неизвестно (%1) - - installed - установлено + + installed + установлено - - not installed - не установлен + + not installed + не установлен - - Override liveprog scripts? - Переопределить скрипты LiveProg? + + + no benchmark data stored + - - Do you want to override existing default liveprog scripts? + + Override liveprog scripts? + Переопределить скрипты LiveProg? + + + + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - Вы хотите отменить существующие сценарии liveprog по умолчанию? + Вы хотите отменить существующие сценарии liveprog по умолчанию? Если они были изменены, они будут сброшены. - - Extract assets - Извлечь ресурсы + + Extract assets + Извлечь ресурсы - - %1 files have been restored - %1 файл(ов) были восстановлены + + %1 files have been restored + %1 файл(ов) были восстановлены - - You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. + + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - Вы собираетесь включить режим белого списка. JamesDSP не будет обрабатывать все приложения по умолчанию, пока этот режим активен. Вам необходимо явно разрешить обработку каждого приложения в меню «Приложения». + Вы собираетесь включить режим белого списка. JamesDSP не будет обрабатывать все приложения по умолчанию, пока этот режим активен. Вам необходимо явно разрешить обработку каждого приложения в меню «Приложения». - - Are you sure? - Вы уверены? + + Are you sure? + Вы уверены? + + + + This action will reset your current blocklist or allowlist. Do you want to continue? + Это действие сбросит ваш текущий черный или белый список. Вы хотите продолжать? + + + + Warning + Внимание + + + + Do you really want to restore the default menu layout? + Вы действительно хотите восстановить структуру меню по умолчанию? - - This action will reset your current blocklist or allowlist. Do you want to continue? - Это действие сбросит ваш текущий черный или белый список. Вы хотите продолжать? + + waiting for result... + - - Warning - Внимание + + Cache cleared + - - Do you really want to restore the default menu layout? - Вы действительно хотите восстановить структуру меню по умолчанию? + + Benchmark data has been cleared. Restart this app to fully apply the changes. + - - + + SingleInstanceMonitor - - Another instance of JamesDSP is already active and has been put in the foreground. - Еще один экземпляр JamesDSP уже активен и работает в фоновом режиме. + + Another instance of JamesDSP is already active and has been put in the foreground. + Еще один экземпляр JamesDSP уже активен и работает в фоновом режиме. - - + + StatusDialog - - Status - Статус + + Status + Статус - - Application version - Версия приложения + + Application version + Версия приложения - - JamesDSP core version - Версия ядра JamesDSP + + JamesDSP core version + Версия ядра JamesDSP - - Processing state - Состояние процесса + + Processing state + Состояние процесса - - Audio format - Аудиоформат + + Audio format + Аудиоформат - - Sampling rate - Частота дискретизации + + Sampling rate + Частота дискретизации - - + + StatusFragment - - Processing - Обработка + + Processing + Обработка - - Not processing - Не обрабатывается + + Not processing + Не обрабатывается - - + + TrayIcon - - &Bypass - &Байпас + + &Bypass + &Байпас - - &Presets - &Пресеты + + &Presets + &Пресеты - - &Convolver bookmarks - &Закладки конвольвера + + &Convolver bookmarks + &Закладки конвольвера - - JamesDSP for Linux - JamesDSP для Linux + + JamesDSP for Linux + JamesDSP для Linux - - No presets found - Пресеты не найдены + + No presets found + Пресеты не найдены - - No impulse responses found - Импульсные ответы не обнаружены + + No impulse responses found + Импульсные ответы не обнаружены - - &Reload JamesDSP - &Перезагрузить JamesDSP + + &Reload JamesDSP + &Перезагрузить JamesDSP - - - &Quit - &Закрыть + + + &Quit + &Закрыть - - - &Show/hide window - &Показать/скрыть окно + + + &Show/hide window + &Показать/скрыть окно - - Re&verberation presets - Пресеты ре&вербации + + Re&verberation presets + Пресеты ре&вербации - - Off - Выкл + + Off + Выкл - - &Equalizer presets - &Пресеты эквалайзера + + &Equalizer presets + &Пресеты эквалайзера - - &Crossfeed - &Кроссфид + + &Crossfeed + &Кроссфид - - + + VariableItemModel - - Parameter - Параметр + + Parameter + Параметр - - Value - Значение + + Value + Значение - - + + VariableWatchWidget - - Form - Form + + Form + Form - - ms - мс + + ms + мс - - Refresh every - Обновляйте каждые + + Refresh every + Обновляйте каждые - - Click a variable to manipulate its value. - Щелкните переменную, чтобы изменить ее значение. + + Click a variable to manipulate its value. + Щелкните переменную, чтобы изменить ее значение. - - - Error - Ошибка + + + Error + Ошибка - - This variable is a string. Currently only numerical value types can be modified. - Эта переменная является строкой. В настоящее время можно изменять только числовые типы значений. + + This variable is a string. Currently only numerical value types can be modified. + Эта переменная является строкой. В настоящее время можно изменять только числовые типы значений. - - Manipulate variable - Управлять переменной + + Manipulate variable + Управлять переменной - - Enter a new value for variable '%1': - Введите новое значение для переменной '%1': + + Enter a new value for variable '%1': + Введите новое значение для переменной '%1': - - Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. - Не удалось воспользоваться переменной '%1'. Либо она больше не существует или она не может быть изменена. + + Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. + Не удалось воспользоваться переменной '%1'. Либо она больше не существует или она не может быть изменена. - - + + VdcDatabaseModel - - Company - Производитель + + Company + Производитель - - Model - Модель + + Model + Модель - - + + ads::CDockAreaTitleBar - - Detach Group - Открепить группу + + Detach Group + Открепить группу - - Close Group - Закрыть группу + + Close Group + Закрыть группу - - Close Other Groups - Закрыть другие группы + + Close Other Groups + Закрыть другие группы - - + + ads::CDockManager - - Show View - Показать просмотр + + Show View + Показать просмотр - - + + ads::CDockWidgetTab - - Detach - Открепить + + Detach + Открепить - - Close - Закрыть + + Close + Закрыть - - Close Others - Закрыть другие + + Close Others + Закрыть другие - - + + menueditor - - Available entries - Доступные элементы + + Available entries + Доступные элементы - - Move Up - Вверх + + Move Up + Вверх - - Moves the selected toolbar item up - Перемещает выбранный элемент панели инструментов вверх + + Moves the selected toolbar item up + Перемещает выбранный элемент панели инструментов вверх - - &Up - &Вверх + + &Up + &Вверх - - Move Down - Вниз + + Move Down + Вниз - - moves the selected toolbar item down - перемещает выбранный элемент панели инструментов вниз + + moves the selected toolbar item down + перемещает выбранный элемент панели инструментов вниз - - &Down - &Вниз + + &Down + &Вниз - - Insert - Вставить + + Insert + Вставить - - Adds the selected menu action to the toolbar - Добавляет выбранное действие меню на панель инструментов + + Adds the selected menu action to the toolbar + Добавляет выбранное действие меню на панель инструментов - - &Add - &Добавить + + &Add + &Добавить - - Remove - Удалить + + Remove + Удалить - - Removes the selected item from the active toolbar - Удаляет выбранный элемент с активной панели инструментов + + Removes the selected item from the active toolbar + Удаляет выбранный элемент с активной панели инструментов - - &Del - &Удалить + + &Del + &Удалить - - - Reset - Сбросить + + + Reset + Сбросить - - Context menu contents - Содержимое контекстного меню + + Context menu contents + Содержимое контекстного меню - + diff --git a/resources/translations/jamesdsp_sr.ts b/resources/translations/jamesdsp_sr.ts index dd6ace6b..bf28dd3a 100644 --- a/resources/translations/jamesdsp_sr.ts +++ b/resources/translations/jamesdsp_sr.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_sv.ts b/resources/translations/jamesdsp_sv.ts index 5f027fe5..3811b28c 100644 --- a/resources/translations/jamesdsp_sv.ts +++ b/resources/translations/jamesdsp_sv.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_th.ts b/resources/translations/jamesdsp_th.ts index 3e2482d9..e39fef8c 100644 --- a/resources/translations/jamesdsp_th.ts +++ b/resources/translations/jamesdsp_th.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_tr.ts b/resources/translations/jamesdsp_tr.ts index a8dfb9e4..ad54d2bd 100644 --- a/resources/translations/jamesdsp_tr.ts +++ b/resources/translations/jamesdsp_tr.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_uk.qm b/resources/translations/jamesdsp_uk.qm index 9af1514a..06abbb85 100644 Binary files a/resources/translations/jamesdsp_uk.qm and b/resources/translations/jamesdsp_uk.qm differ diff --git a/resources/translations/jamesdsp_uk.ts b/resources/translations/jamesdsp_uk.ts index 037afeb7..e7e8ed9c 100644 --- a/resources/translations/jamesdsp_uk.ts +++ b/resources/translations/jamesdsp_uk.ts @@ -1,1648 +1,1655 @@ - + AeqItemDelegate - - 2nd choice - Другий варіант + + 2nd choice + Другий варіант - - 3rd choice - Третій варіант + + 3rd choice + Третій варіант - - %1th choice - %1 варіант + + %1th choice + %1 варіант - - + + AeqPreviewPlot - - Frequency (Hz) - Частота (Гц) + + Frequency (Hz) + Частота (Гц) - - Amplitude (dBr) - Амплітуда (дБв) + + Amplitude (dBr) + Амплітуда (дБв) - - Target - Ціль + + Target + Ціль - - Raw (smoothed) - Неформатовані дані (згладжено) + + Raw (smoothed) + Неформатовані дані (згладжено) - - Error (smoothed) - Помилка (згладжена) + + Error (smoothed) + Помилка (згладжена) - - Equalization - Еквалайзер + + Equalization + Еквалайзер - - Raw - Неформатовані дані + + Raw + Неформатовані дані - - Error - Помилка + + Error + Помилка - - Equalized - Еквалізовано + + Equalized + Еквалізовано - - Equalization (normalized) - Еквалізація (нормалізована) + + Equalization (normalized) + Еквалізація (нормалізована) - - Move to top left - Перемістити ліворуч угору + + Move to top left + Перемістити ліворуч угору - - Move to top center - Перемістити ліворуч до центру + + Move to top center + Перемістити ліворуч до центру - - Move to top right - Перемістити праворуч угору + + Move to top right + Перемістити праворуч угору - - Move to bottom right - Перемістити праворуч униз + + Move to bottom right + Перемістити праворуч униз - - Move to bottom left - Перемістити ліворуч униз + + Move to bottom left + Перемістити ліворуч униз - - + + AeqSelector - - AutoEQ Database - База даних AutoEQ + + AutoEQ Database + База даних AutoEQ - - Filter... - Сортування... + + Filter... + Сортування... - - Local database version - Версія локальної бази даних + + Local database version + Версія локальної бази даних - - Checked out at commit: - Локальний коміт: + + Checked out at commit: + Локальний коміт: - - Last commit created at: - Останній коміт створено: + + Last commit created at: + Останній коміт створено: - - Package generated at: - Пакунок створено: + + Package generated at: + Пакунок створено: - - Display settings - Налаштування відображення + + Display settings + Налаштування відображення - - Dark mode - Темний режим + + Dark mode + Темний режим - - Update database - Оновити базу даних + + Update database + Оновити базу даних - - Download latest AutoEQ package - Завантажити останню версію AutoEQ + + Download latest AutoEQ package + Завантажити останню версію AutoEQ - - Delete database - Видалити базу даних + + Delete database + Видалити базу даних - - Cleanup local database and exit - Очистити локальну базу даних і вийти + + Cleanup local database and exit + Очистити локальну базу даних і вийти - - No measurement selected - Не обрано вимірювань + + No measurement selected + Не обрано вимірювань - - Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. + + Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. This will override your current GraphicEQ configuration. - Скористайтесь пошуковим полем зліва для знаходження відповідного вимірювання для навушників. Натисніть 'OK' для завантаження даних еквалайзер до аудіо двигуна. + Скористайтесь пошуковим полем зліва для знаходження відповідного вимірювання для навушників. Натисніть 'OK' для завантаження даних еквалайзер до аудіо двигуна. Це перевизначить поточну конфігурацію GraphicEQ. - - - Manage database - Керування базою даних + + + Manage database + Керування базою даних - - No measurements found - Вимірювання відсутні + + No measurements found + Вимірювання відсутні - - AutoEQ database - База даних AutoEQ + + AutoEQ database + База даних AutoEQ - - Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. + + Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. An internet connection is required during this step. Do you want to continue and enable this feature? - Перед використанням інтеграції з AutoEQ, вам потрібно завантажити мінімізовану версію бази компенсацій навушників (~50Мб) на жорсткий диск. + Перед використанням інтеграції з AutoEQ, вам потрібно завантажити мінімізовану версію бази компенсацій навушників (~50Мб) на жорсткий диск. Для цього кроку потрібне підключення до Інтернету. Продовжити та увімкнути цю функцію? - - - Failed to retrieve version information - Не вдалося отримати інформацію про версію + + + Failed to retrieve version information + Не вдалося отримати інформацію про версію - - - Failed to retrieve package information from the remote repository: + + + Failed to retrieve package information from the remote repository: Status code: %0 Reason: %1 - Не вдалося отримати інформацію про пакет із віддаленого сховища: + Не вдалося отримати інформацію про пакет із віддаленого сховища: Код стану: %0 Причина: %1 - - Return to database - Повернутися до бази даних + + Return to database + Повернутися до бази даних - - No new updates available - Немає нових оновлень + + No new updates available + Немає нових оновлень - - The local database is currently up-to-date; no new updates are available at this time. + + The local database is currently up-to-date; no new updates are available at this time. It may take up to 24 hours for new changes in the AutoEQ upstream repo to become available for download here. Packages are generated at 4am UTC daily. Do you want to re-install the latest database update anyway? - Локальна база даних наразі актуальна; зараз немає нових оновлень. + Локальна база даних наразі актуальна; зараз немає нових оновлень. Може знадобитися до 24-х годин для нових змін у репозиторії AutoEQ, щоб вони стали доступними для завантаження. Пакунки генеруються щодня о четвертій годині ранку по UTC. Все одно бажаєте перевстановити останнє оновлення бази даних? - - Database cleared - Базу даних очищено + + Database cleared + Базу даних очищено - - The database has been removed from your hard disk - База даних була видалена з жорсткого диску + + The database has been removed from your hard disk + База даних була видалена з жорсткого диску - - Error - Помилка + + Error + Помилка - - Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. - Не вдалося отримати відповідний файл з бази даних. Будь ласка, оновіть локальну базу даних, оскільки вона виглядає неповною. + + Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. + Не вдалося отримати відповідний файл з бази даних. Будь ласка, оновіть локальну базу даних, оскільки вона виглядає неповною. - - + + AppItem - - (unset) - (не встановлено) + + (unset) + (не встановлено) - - - - Add to blocklist - Додати до чорного списку + + + + Add to blocklist + Додати до чорного списку - - - Add to allowlist - Додати до списку дозволених + + + Add to allowlist + Додати до списку дозволених - - Rate: %1Hz - Швидкість: %1Гц + + Rate: %1Hz + Швидкість: %1Гц - - Latency: %1ms - Затримка: %1мс + + Latency: %1ms + Затримка: %1мс - - Format: %1 - Формат: %1 + + Format: %1 + Формат: %1 - - + + AppManagerFragment - - Active apps - Активні додатки + + Active apps + Активні додатки - - No apps are playing audio - Немає додатків, що відтворюють аудіо + + No apps are playing audio + Немає додатків, що відтворюють аудіо - - + + AutostartManager - - Manage auto-start permission for JamesDSP - Керування дозволом для автопочатку JamesDSP + + Manage auto-start permission for JamesDSP + Керування дозволом для автопочатку JamesDSP - - + + CodeOutline - - Annotations - Примітки + + Annotations + Примітки - - Functions - Функції + + Functions + Функції - - + + ConsoleOutput - - Auto-scroll - Автоматичне прокручування + + Auto-scroll + Автоматичне прокручування - - Copy selection - Копіювати виділене + + Copy selection + Копіювати виділене - - Copy all - Скопіювати все + + Copy all + Скопіювати все - - Clear - Очистити + + Clear + Очистити - - + + EELEditor - - EEL Scripting IDE - IDE сценаріїв EEL + + EEL Scripting IDE + IDE сценаріїв EEL - - File - Файл + + File + Файл - - Edit - Редагувати + + Edit + Редагувати - - Navigation - Навігація + + Navigation + Навігація - - View - Вигляд + + View + Вигляд - - Help - Довідка + + Help + Довідка - - Open - Відкрити + + Open + Відкрити - - Open script - Відкрити сценарій + + Open script + Відкрити сценарій - - Ctrl+O - Ctrl+O + + Ctrl+O + Ctrl+O - - - Close file - Закрити файл + + + Close file + Закрити файл - - Ctrl+Shift+W - Ctrl+Shift+W + + Ctrl+Shift+W + Ctrl+Shift+W - - Save - Зберегти + + Save + Зберегти - - Ctrl+S - Ctrl+S + + Ctrl+S + Ctrl+S - - Save as... - Зберегти як... + + Save as... + Зберегти як... - - Ctrl+Shift+S - Ctrl+Shift+S + + Ctrl+Shift+S + Ctrl+Shift+S - - Undo - Скасувати дію + + Undo + Скасувати дію - - Ctrl+Z - Ctrl+Z + + Ctrl+Z + Ctrl+Z - - Redo - Повторити дію + + Redo + Повторити дію - - Ctrl+Shift+Z - Ctrl+Shift+Z + + Ctrl+Shift+Z + Ctrl+Shift+Z - - Find/Replace... - Знайти/Замінити... + + Find/Replace... + Знайти/Замінити... - - Ctrl+F - Ctrl+F + + Ctrl+F + Ctrl+F - - - Go to line... - Перейти до рядка... + + + Go to line... + Перейти до рядка... - - Go to line - Перейти до рядка + + Go to line + Перейти до рядка - - Ctrl+L - Ctrl+L + + Ctrl+L + Ctrl+L - - - Jump to function... - Перейти до функції... + + + Jump to function... + Перейти до функції... - - Ctrl+M - Ctrl+M + + Ctrl+M + Ctrl+M - - Go to @init - Перейти до @init + + Go to @init + Перейти до @init - - F2 - F2 + + F2 + F2 - - Go to @sample - Перейти до @sample + + Go to @sample + Перейти до @sample - - F3 - F3 + + F3 + F3 - - Automatic Parentheses - Автоматичні дужки + + Automatic Parentheses + Автоматичні дужки - - Replace Tabs with Spaces - Замінювати табуляції пробілами + + Replace Tabs with Spaces + Замінювати табуляції пробілами - - EEL2 documentation - Документація EEL2 + + EEL2 documentation + Документація EEL2 - - F1 - F1 + + F1 + F1 - - Run code - Запустити код + + Run code + Запустити код - - F5 - F5 + + F5 + F5 - - New - Новий + + New + Новий - - New script wizard - Майстер нового сценарію + + New script wizard + Майстер нового сценарію - - Ctrl+N - Ctrl+N + + Ctrl+N + Ctrl+N - - - Freeze - Заморозити + + + Freeze + Заморозити - - F6 - F6 + + F6 + F6 - - Loaded projects - Завантажені проекти + + Loaded projects + Завантажені проекти - - Code outline - Контур коду + + Code outline + Контур коду - - Variable view - Змінний вигляд + + Variable view + Змінний вигляд - - Console output - Вивід з консолі + + Console output + Вивід з консолі - - '%1' started compiling at %2 - '%1' почали компілюватися о %2 + + '%1' started compiling at %2 + '%1' почали компілюватися о %2 - - <br>Compilation stopped at %2 - <br>Компіляція зупинилася о %2 + + <br>Compilation stopped at %2 + <br>Компіляція зупинилася о %2 - - Script initialization took %1ms - Ініціалізація сценарію забрала %1мс + + Script initialization took %1ms + Ініціалізація сценарію забрала %1мс - - Error - Помилка + + Error + Помилка - - Cannot write file - Не вдалося записати до файлу + + Cannot write file + Не вдалося записати до файлу - - Open EEL script - Відкрити EEL-сценарій + + Open EEL script + Відкрити EEL-сценарій - - EEL2 Script (*.eel) - EEL2 сценарій (*.eel) + + EEL2 Script (*.eel) + EEL2 сценарій (*.eel) - - Save as - Зберегти як + + Save as + Зберегти як - - Cannot execute - Неможливо виконати + + Cannot execute + Неможливо виконати - - No script file opened. Please open one first and try again. - Не відкрито жодного файлу сценарію. Відкрийте якийсь спочатку і повторіть спробу. + + No script file opened. Please open one first and try again. + Не відкрито жодного файлу сценарію. Відкрийте якийсь спочатку і повторіть спробу. - - Enter line number: - Введіть номер рядка: + + Enter line number: + Введіть номер рядка: - - Enter function name: - Введіть назву функції: + + Enter function name: + Введіть назву функції: - - + + EmptyView - - No project loaded - Немає завантаженого проекту + + No project loaded + Немає завантаженого проекту - - + + FileDownloaderDialog - - Package manager - Менеджер пакетів + + Package manager + Менеджер пакетів - - Downloading package... - Завантаження пакету... + + Downloading package... + Завантаження пакету... - - + + FileSelectionWidget - - Refresh - Оновити + + Refresh + Оновити - - Bookmark - Додати до обраного + + Bookmark + Додати до обраного - - Rename - Перейменувати + + Rename + Перейменувати - - Remove - Видалити + + Remove + Видалити - - No supported files found - Не знайдено підтримуваних файлів + + No supported files found + Не знайдено підтримуваних файлів - - + + FindReplaceForm - - Form - Форма + + Form + Форма - - &Find: - Знайти: + + &Find: + Знайти: - - R&eplace with: - Замінити: + + R&eplace with: + Замінити: - - Previous - Попередній + + Previous + Попередній - - Next - Далі + + Next + Далі - - &Options - Параметри + + &Options + Параметри - - R&egular expression - + + R&egular expression + Р&егулярний вираз - - &Whole words - + + &Whole words + &Цілі слова - - &Case sensitive - + + &Case sensitive + &Враховувати регістр - - &Close - + + &Close + &Закрити - - &Replace - + + &Replace + &Заміна - - Replace &All - + + Replace &All + Замінити &все - - no match found - + + no match found + збігів не знайдено - - Replaced %1 occurrence(s) - + + Replaced %1 occurrence(s) + Замінено %1 збіг(и) - - + + FirstLaunchWizard - - Welcome! - + + Welcome! + Вітаємо! - - Thank you for installing this app! + + Thank you for installing this app! However, before you can begin playing around with JamesDSP for Linux, we'll need to make some adjustments in order to ensure the best possible experience with JDSP. - Дякуємо, що встановили цей додаток! + Дякуємо, що встановили цей додаток! Проте, перед тим як ви зможете почати гратись з JamesDSP для Linux, ми повинні внести деякі корективи, щоб забезпечити найкращий можливий досвід з JDSP. - - - - Next > - Далі > + + + + Next > + Далі > - - Run in background? - Працювати у фоновому режимі? + + Run in background? + Працювати у фоновому режимі? - - No, don't apply effects in background - Ні, не застосовувати ефекти у фоновому режимі + + No, don't apply effects in background + Ні, не застосовувати ефекти у фоновому режимі - - Yes, minimize to tray icon - Так, згортати до системного лотка + + Yes, minimize to tray icon + Так, згортати до системного лотка - - Start minimized on boot - Запускати згорнутим при увімкненні комп'ютера + + Start minimized on boot + Запускати згорнутим при увімкненні комп'ютера - - That's it! - От і все! + + That's it! + От і все! - - You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! - Ви готові! Ви можете змінити будь-який вибір, який ви щойно зробили, у розділі налаштувань. Перегляньте його, щоб отримати додаткові параметри налаштування. Відвідайте нашу спільноту у Телеграмі, щоб отримати підтримку та першим дізнаватися про оновлення! + + You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! + Ви готові! Ви можете змінити будь-який вибір, який ви щойно зробили, у розділі налаштувань. Перегляньте його, щоб отримати додаткові параметри налаштування. Відвідайте нашу спільноту у Телеграмі, щоб отримати підтримку та першим дізнаватися про оновлення! - - Telegram - Телеграм + + Telegram + Телеграм - - Close - Закрити + + Close + Закрити - - + + FlatTabWidget - - FlatTabWidget - + + FlatTabWidget + FlatTabWidget - - + + GraphicEQFilterGUI - - Enable Graphic EQ - + + Enable Graphic EQ + Увімкнути графічний еквалайзер - - Freq. - + + Freq. + Част. - - Gain - + + Gain + Підсилення - - AutoEQ database... - + + AutoEQ database... + База даних AutoEQ... - - 15-band - + + 15-band + 15-діапазонний - - 31-band - + + 31-band + 31-діапазонний - - variable - + + variable + змінна - - Import - + + Import + Імпорт - - Export - + + Export + Експорт - - Invert response - + + Invert response + Інвертувати фазу - - Normalize response - + + Normalize response + Нормалізувати амплітудну-частотну характеристику - - Reset response - + + Reset response + Скинути амплітудну-частотну характеристику - - - Import EqualizerAPO settings - + + + Import EqualizerAPO settings + Імпорт параметрів EqualizerAPO - - Import frequency response - + + Import frequency response + Імпорт амплітудно-частотної характеристики - - - CSV frequency response (*.csv) - + + + CSV frequency response (*.csv) + CSV амплітудної-частотної характеристики (*.csv) - - - - All files (*.*) - + + + + All files (*.*) + Усі файли (*.*) - - Import EqualizerAPO graphic EQ preset - + + Import EqualizerAPO graphic EQ preset + Імпорт пресету графічного еквалайзера EqualizerAPO - - EqualizerAPO GraphicEQ (*.txt) - + + EqualizerAPO GraphicEQ (*.txt) + EqualizerAPO GraphicEQ (*.txt) - - Export frequency response - + + Export frequency response + Експорт амплітудно-частотної характеристики - - + + GzipDownloaderDialog - - Error - Помилка + + Error + Помилка - - %1MB of %2MB downloaded - + + %1MB of %2MB downloaded + %1МБ з %2МБ завантажено - - Decompressing package... - + + Decompressing package... + Розпакування пакунку... - - + + LiveprogSelectionWidget - - - No script has been loaded - + + + No script has been loaded + Не завантажено жодного скрипту - - Enable - + + Enable + Увімкнути - - Reset - + + Reset + Скинути - - - Create new script - + + + Create new script + Створити новий скрипт - - - Error - Помилка + + + Error + Помилка - - Cannot restore defaults. + + Cannot restore defaults. No EEL file is currently loaded. - + Неможливо відновити типові значення. +Зараз не завантажений файл EEL. - - Selected EEL file does not exist anymore. + + Selected EEL file does not exist anymore. Please select another one - + Обраний файл EEL більше не існує. +Будь ласка, виберіть інший - - Edit script - + + Edit script + Редагувати скрипт - - No customizable parameters - + + No customizable parameters + Немає змінних параметрів - - + + MainWindow - - JamesDSP for Linux - + + JamesDSP for Linux + JamesDSP для Linux - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Динамічне підсилення басу</span></p><p>Частотно-определяемое усиление басов. Підсилення низьких частот із визначенням частоти. Автоматично встановлює власні параметри, такі як посилення, пропускна здатність і частота зрізу, аналізуючи вхідний аудіопотік</p><p><span style=" text-decoration: underline;">Максимальне підсилення:</span> регулює величину ефекту динамічного підсилення басу.</p></body></html> - - Dynamic bass boost - + + Dynamic bass boost + Динамічне підсилення басів - - Maximum gain - + + Maximum gain + Максимальне підсилення - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Аналогове моделювання</span></p><p>Надсемплінг аналогового моделювання - це генератор рівних гармонік без згладжування.</p></body></html> - - Analog modelling - + + Analog modelling + Аналогове моделювання - - Preamp (Harmonics) - + + Preamp (Harmonics) + Підсилювач (Гармоніки) - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Лімітер</span></p><p>Цей вихідний обмежувач намагається уникнути обрізання вихідного сигналу (спричиненого DSP, який намагається зробити частину або весь звук гучніше, ніж раніше, якщо вхідний сигнал вже близький до максимального). </p><p><span style=" text-decoration: underline;">Поріг лімітера:</span> Це має бути виставлено на -0,1, якщо з якоїсь причини ваше аудіо не обрізається перед цифровим обрізанням, у такому випадку ви можете встановити нижчі значення.</p><p><span style=" text-decoration: underline;">Затухання лмітера:</span> Лімітер ефективний лише доти, доки встановлено час затухання. Короткий час випуску призведе до звукових спотворень обмеженого звуку, особливо низьких частот; Велике затухання зазвичай є кращим, але він дещо зменшує гучність, якого можна досягти. Якщо &quot;стрибки гучності&quot; (приглушення обмеженого звуку та відновлення з часом) стає небажаним, можна зробити затухання довшим АБО коротшим, що зробить ефект менш помітним. </p><p><span style=" text-decoration: underline;">Підсилення:</span> Підсилення діє як цифровий регулятор гучності для всіх ефектів після їх застосування, але до того, як звук досягне лімітера.</p></body></html> - - Limiter/Master - + + Limiter/Master + Лімітер/Мастер - - Threshold - + + Threshold + Поріг - - Release - + + Release + Затухання - - Post gain - + + Post gain + Рівень вихідного підсилення - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Компандер динамічного діапазону</span></p><p>Вмикає/вимикає компандер динамічного діапазону.</p></body></html> - - Dynamic range compander - + + Dynamic range compander + Компандер динамічного діапазону - - Time constant - + + Time constant + Постійна часу - - Granularity - + + Granularity + Деталізація - - Time-frequency transforms - + + Time-frequency transforms + Часово-частотне перетворення - - Uniform (Short-time Fourier) - + + Uniform (Short-time Fourier) + Рівномірне (короткочасне перетворення Фур'є) - - Multiresolution (Continuous wavelet) - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Перехресна подача</span></p><p>Включає традиційні BS2B (Бауер від стереофонічного до бінаурального DSP) режим і більш просунутий на основі згортки HRTF підхід.</p></body></html> - - Multiresolution (Time domain) - + + + Crossfeed + Кроссфід - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - + + Mode + Режим - - - Crossfeed - + + Custom BS2B parameters + Користувацькі BS2B параметри - - Mode - + + Cut frequency + Частотний зріз - - Custom BS2B parameters - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Ширина звукової сцени</span></p><p>Алгоритм, який виявляє стереофазове співвідношення в кількох спектральних областях і покращує стереозвук, не впливаючи на цілісність вокалу.</p></body></html> - - Cut frequency - + + Soundstage wideness + Широкість звукової сцени - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + + Widen level + Рівень ширини - - Soundstage wideness - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Ревербрація</span></p><p>Складна ревербераційна мережа IIR (Progenitor 2)</p></body></html> - - Widen level - + + Enable reverberation + Увімкнути реверберацію - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + + Presets + Пресети - - Enable reverberation - + + + ... + ... - - Presets - + + Oversampling factor + Коефіцієнт надсемплінгу - - - ... - + + Early reflection factor + Фактор раннього відбиття - - Oversampling factor - + + Early reflection amount + Кількість раннього відбиття - - Early reflection factor - + + Early reflection width + Ширина раннього відбиття - - Early reflection amount - + + Lowpass cutoff (Input) + Обрізання низьких частот (Вхід) - - Early reflection width - + + Lowpass cutoff (Bass) + Обрізання низьких частот (Баси) - - Lowpass cutoff (Input) - + + Lowpass cutoff (Damp) + Обрізання низьких частот (Згасання) - - Lowpass cutoff (Bass) - + + Lowpass cutoff (Output) + Обрізання низьких частот (Вихід) - - Lowpass cutoff (Damp) - + + Final wet mix + Остаточне мокре поєднання - - Lowpass cutoff (Output) - + + Final dry mix + Остаточне сухе поєднання - - Final wet mix - + + Reverb wetness + Вологості реверберації - - Final dry mix - + + Width L/R mix + Ширина Л/П поєднання - - Reverb wetness - + + LFO wander amount + Кількість блукань ГНЧ - - Width L/R mix - + + LFO spin amount + Кількість обертань ГНЧ - - LFO wander amount - + + Time decay + Час затухання - - LFO spin amount - + + Delay + Затримка - - Time decay - + + Bass boost + Підсилення басів - - Delay - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Мультирежимний еквалайзер</span></p><p>Увімкнути/вимкнути мультирежимний еквалайзер.</p><p><span style=" text-decoration: underline;">Тип фільтра:</span> Мультирежимний еквалайзер підтримує як FIR (мінімальна фаза), так і декілька IIR режимів фільтрації.</p></body></html> - - Bass boost - + + FIR Minimum phase + Мінімальна фаза FIR - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + + IIR 4 order + IIR 4-го порядку - - FIR Minimum phase - + + IIR 6 order + IIR 6-го порядку - - IIR 4 order - + + IIR 8 order + IIR 8-го порядку - - IIR 6 order - + + IIR 10 order + IIR 10-го порядку - - IIR 8 order - + + IIR 12 order + IIR 12-го порядку - - IIR 10 order - + + Enable EQ + Увімкнути еквалайзер - - IIR 12 order - + + Multiresolution (Continuous wavelet, incomplete dual frame) + - - Enable EQ - + + Pseudo multiresolution (Undersampling frame) + - - Presets... - + + Pseudo multiresolution (Time domain, zero latency) + - - Filter type - + + Presets... + Пресети... - - Interpolator - + + Filter type + Тип фільтра - - <html><head/><body><p>Interpolation mode</p></body></html> - + + Interpolator + Інтерполятор - - Piecewise Cubic Hermite Interpolating Polynomial - + + <html><head/><body><p>Interpolation mode</p></body></html> + <html><head/><body><p>Режим інтерполяції</p></body></html> - - Modified Hiroshi Akima spline - + + Piecewise Cubic Hermite Interpolating Polynomial + Кусково-кубічний інтерполяційний поліном Ерміта - - Reset EQ - + + Modified Hiroshi Akima spline + Модифікований сплайн Хіросі Акіма - - Fixed bands - + + Reset EQ + Скинути EQ - - Flexible bands - + + Fixed bands + Фіксовані діапазони - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - + + Flexible bands + Гнучкі діапазони - - - Filesystem - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Конвольвер</span></p><p>Розділений конвольвер (згортка з автоматичним сегментуванням). Виберіть файл імпульсної характеристики, який потрібно згорнути. Він бере характеристики сигналу імпульсної характеристики та застосовує їх до вхідного звуку в режимі реального часу.</p><p>Підтримує моно, стерео, повне/справжнє стерео (ЛЛ, ЛП, ПЛ, ПП) імпульсні характеристики.</p><p><span style=" text-decoration: underline;">Оптимізація імпульсної характеристики:</span></p><p>Цей параметр намагається якомога більше зменшити тривалість імпульсної характеристики; суть полягає в тому, щоб максимально зменшити затримку, можливо, зменшивши споживання енергії.</p></body></html> - - Bookmarks - + + + Filesystem + Файлова система - - Enable convolver - + + Bookmarks + Закладки - - IR optimization - + + Enable convolver + Увімкнути конвольвер - - Original - + + IR optimization + Оптимізація IR - - Shrink - + + Original + Оригінал - - Minimum phase transform and shrink - + + Shrink + Зменшити - - Adv. waveform editing - + + Minimum phase transform and shrink + Мінімальне фазове перетворення і зменшення - - Edit - Редагувати + + Adv. waveform editing + Розширене редагування форми хвиль - - Channels: - + + Edit + Редагувати - - Samples: - + + Channels: + Канали: - - No selection - + + Samples: + Семпли: - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + + No selection + Нічого не вибрано - - Database - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Його основна робота полягає у виконанні параметричного вирівнювання аудіо, однак вона вимагає від користувача надати .vdc файл який DDCToolbox генерує.</p><p>ViPER-DDC у jDSP — це узагальнена реалізація фільтрів секцій другого порядку, яка дещо відрізняється від реалізації в Viper4Android. V4A підтримує лише параметричне пікінгування; причина в тому, що V4A використовує властивість коефіцієнта частки пікового фільтра. У контрасті, jDSP не має такого припущення.</p></body></html> - - Create - + + Database + База даних - - Create your custom DDC files using DDCToolbox - + + Create + Створити - - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + + Create your custom DDC files using DDCToolbox + Створити свої власні файли DDC за допомогою DDCToolbox - - View installation instructions - + + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - - Enable ViPER-DDC - + + View installation instructions + Переглянути інструкції зі встановлення - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + + Enable ViPER-DDC + Увімкнути ViPER-DDC - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">DSP з програмуванням у реальному часі</span></p><p>Це віртуально машина, яка компілює файл коду .eel як вхід, котрий потім виконує як інструкції; говорячи простою мовою, це дозволяє користувачеві створювати свої власні звукові ефекти. </p><p>Кількість підтримуваних операцій незліченна; переглянути офіційну документацію: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Натисни 'Редагувати скрипт', для запуску вбудованого середовища сценаріїв для файлів коду EEL.</p></body></html> - - Custom Presets - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Еквалайзер довільної відповіді</span></p><p>Також відомий як GraphicEQ з EqualizerAPO.</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + + Custom Presets + Користувацькі пресети - - Settings - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Користувацькі пресети</span></p><p>Створення та керування користувацькими пресетами</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + + Settings + Налаштування - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Налаштування</span></p><p>Налаштуштування цього застосунку</p></body></html> - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Інше</span></p><p>Різні дії, які рідко використовуються</p></body></html> - - Bypass - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Обхід</span></p><p>Ця опція визначає чи увімкнені чи вимкнені звукові ефекти.</p></body></html> - - %1 connected - Preset loaded automatically - + + Bypass + Обхід - - Cannot execute script - + + %1 connected - Preset loaded automatically + %1 підключено - Пресет завантажено автоматично - - The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + + Cannot execute script + Не вдалося виконати скрипт - - Apps - + + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. + Поточний EEL файл (у '%1') більше не існує в файловій системі. Будь ласка, повторно відкрийте файл вручну. - - Driver status - + + Apps + Додатки - - Relink audio pipeline - + + Driver status + Статус драйвера - - Reset to defaults - + + Relink audio pipeline + Перепідключити аудіо потоки - - Load from file - + + Reset to defaults + Відновити типові налаштування - - Save to file - + + Load from file + Завантажити з файлу - - Open LiveprogIDE - + + Save to file + Зберегти до файлу - - What's this... (Select UI element) - + + Open LiveprogIDE + Відкрити LiveprogIDE - - Bass/Misc - + + What's this... (Select UI element) + Що це... (Оберіть елемент інтерфейсу користувача) - - Sound Positioning - + + Bass/Misc + Баси/Різне - - Reverb - + + Sound Positioning + Позиціювання звуку - - Equalizer - + + Reverb + Реверберація - - Convolver - + + Equalizer + Еквалайзер - - DDC - + + Convolver + Конвольвер - - Liveprog - + + DDC + DDC - - Graphic EQ - + + Liveprog + Liveprog - - Launch application - + + Graphic EQ + Графічний еквалайзер - - Reset Configuration - + + Launch application + Запустити застосунок - - Are you sure? - + + Reset Configuration + Скинути налаштування - - Load custom audio.conf - + + Are you sure? + Ви впевнені? - - Save current audio.conf - + + Load custom audio.conf + Завантажити користувацький audio.conf - - Very low - + + Save current audio.conf + Зберегти поточний audio.conf - - Low - + + Very low + Дуже низька - - Medium - + + Low + Низька - - High - + + Medium + Середня - - Extreme - + + High + Висока - - Advanced waveform editing - + + Extreme + Екстремальна - - Advanced waveform editing (default: -80;-100;0;0;0;0) + + Advanced waveform editing + Розширене редагування форми хвиль + + + + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. This setting is only in effect if IR optimization is enabled. @@ -1654,1215 +1661,1303 @@ This setting is only in effect if IR optimization is enabled. 5th value: Channel 3 delay (samples) 6th value: Channel 4 delay (samples) - - - - + Розширене редагування форми сигналу (за замовчуванням: -80;-100;0;0;0;0) + +Встановіть поріг автоматичного IR обрізання та додайте затримку до порізаного/мінімального фазового перетворення IR. +Цей параметр діє, лише якщо ввімкнено IR оптимізацію. + +1-е значення: Початкове порогового автоматичного обрізання (дБ) +2-е значення: Кінець порогового автоматичного обрізання (дБ) +3-є значення: затримка каналу 1 (семпли) +4-е значення: затримка каналу 2 (семпли) +5-е значення: затримка каналу 3 (семпли) +6-е значення: затримка каналу 4 (семпли) + + + + NewFileWizard - - Create new script - + + Create new script + Створити новий скрипт - - New script - + + New script + Новий скрипт - - Define and generate a basic script template - + + Define and generate a basic script template + Визначення та створення основного шаблону скриптів - - Workspace directory - + + Workspace directory + Директорія робочого простору - - File name - + + File name + Ім'я файлу - - Description - + + Description + Опис - - Untitled script - + + Untitled script + Скрипт без назви - - Select directory - + + Select directory + Виберіть каталог - - - - Error - Помилка + + + + Error + Помилка - - Workspace directory does not exist - + + Workspace directory does not exist + Директорія робочого простору не існує - - A file with the same name already exists at this loction - + + A file with the same name already exists at this loction + Файл з такою самою назвою вже існує у цій локації - - File name is empty or contains illegal characters - + + File name is empty or contains illegal characters + Ім'я файлу пусте або містить неприпустимі символи - - + + OverlayMsgProxy - - - - Close - Закрити + + + + Close + Закрити - - + + PaletteEditor - - Palette editor - + + Palette editor + Редактор палітри - - - - - - Select... - + + + + + + Select... + Обрати... - - Base Color - + + Base Color + Основний колір - - Background Color - + + Background Color + Колір тла - - Foreground Color - + + Foreground Color + Колір переднього плану - - Close - Закрити + + Close + Закрити - - Reset - + + Reset + Скинути - - White Icons - + + White Icons + Білі іконки - - Selection Color - + + Selection Color + Колір виділення - - Disabled Color - + + Disabled Color + Колір вимкнутого - - + + PresetAddRuleFragment - - Add new rule... - + + Add new rule... + Додати нове правило... - - If - + + If + Якщо - - is connected, then load preset - + + is connected, then load preset + під'єднано, потім завантажувати пресет - - + + PresetDialog - - Presets - + + Presets + Пресети - - Preset name - + + Preset name + Назва пресету - - Adds current config as a preset - + + Adds current config as a preset + Додає поточні налаштування як пресет - - Save - Зберегти + + Save + Зберегти - - Rules... - + + Rules... + Правила... - - Remove - Видалити + + Remove + Видалити - - Load - + + Load + Завантажити - - + + PresetFragment - - No presets saved - + + No presets saved + Немає збережених пресетів - - Cannot load preset - + + Cannot load preset + Не вдається завантажити пресет - - Selected file does not exist anymore - + + Selected file does not exist anymore + Обраний файл більше не існує - - Overwrite - + + Overwrite + Перезаписати - - Save - Зберегти + + Save + Зберегти - - Rename - Перейменувати + + Rename + Перейменувати - - Delete - + + Delete + Видалити - - Rename preset - + + Rename preset + Перейменувати пресет - - Enter new name - + + Enter new name + Введіть нове ім'я - - + + PresetRuleDialog - - Preset auto-switch rules - + + Preset auto-switch rules + Правила автоперемикання пресету - - Auto-switch rules - + + Auto-switch rules + Правила автоперемикання - - Add new rule... - + + Add new rule... + Додати нове правило... - - Delete selection - + + Delete selection + Видалити виділення - - No rules defined - + + No rules defined + Правила не визначені - - - Cannot add new rule - + + + Cannot add new rule + Не вдалося додати нове правило - - All connected audio devices have already a rule defined. + + All connected audio devices have already a rule defined. You can only create one rule per device. - + Усі під'єднані аудіопристрої вже мають визначене правило. +Ви можете створити лише одне правило на один пристрій. - - You have no presets saved. + + You have no presets saved. Please create one first before adding a new rule. - + Ще не має збережених пресетів. +Будь ласка, створіть хоча б один пресет перед тим як додавати нове правило. - - + + PresetRuleTableModel - - Device - + + Device + Пристрій - - Assigned preset - + + Assigned preset + Застосований пресет - - + + QObject - - List All Tabs - + + List All Tabs + Список усіх вкладок - - Detach Group - + + Detach Group + Відчепити групу - - Close Active Tab - + + Close Active Tab + Закрити активну вкладку - - Close Group - + + Close Group + Закрити групу - - Close Tab - + + Close Tab + Закрити вкладку - - Something went wrong - + + Something went wrong + Щось пішло не так - - Failed to open URL with default browser. + + Failed to open URL with default browser. Please copy this URL manually: - + Не вдалося відкрити URL у браузері за увмовчанням + Будь ласка, скопіюйте URL вручну: - - Flat - + + Flat + Плоский - - Pop - + + Pop + Поп - - Rock - + + Rock + Рок - - Jazz - + + Jazz + Джаз - - Classic - + + Classic + Класичний - - Bass - + + Bass + Баси - - Clear - Очистити + + Clear + Очистити - - Hip-Hop - + + Hip-Hop + Хіп-Хоп - - Dubstep - + + Dubstep + Дабстеп - - Movie - + + Movie + Фільм - - Metal - + + Metal + Метал - - Vocal Booster - + + Vocal Booster + Підсилення вокалу - - Hardstyle - + + Hardstyle + Хардстайл - - Acoustic - + + Acoustic + Акустика - - R&B - + + R&B + R&B - - Electronic - + + Electronic + Електронна - - Deep Bass - + + Deep Bass + Глибокий бас - - Beats - + + Beats + Біти - - BS2B Custom - + + BS2B Custom + Користувацький BS2B - - BS2B Weak - + + BS2B Weak + Слабкий BS2B - - BS2B Strong - + + BS2B Strong + Сильний BS2B - - Out of head - + + Out of head + Поза головою - - Surround 1 - + + Surround 1 + Об'ємний 1 - - Surround 2 - + + Surround 2 + Об'ємний 2 - - Joe0Bloggs Realistic surround - + + Joe0Bloggs Realistic surround + Реалістичний об'ємний звук Joe0Bloggs - - Default - + + Default + Типово - - Small hall 1 - + + Small hall 1 + Мала зал 1 - - Small hall 2 - + + Small hall 2 + Мала зал 2 - - Medium hall 1 - + + Medium hall 1 + Середня зала 1 - - Medium hall 2 - + + Medium hall 2 + Середня зала 2 - - Large hall 1 - + + Large hall 1 + Велика зала 1 - - Large hall 2 - + + Large hall 2 + Велика зала 2 - - Small room 1 - + + Small room 1 + Мала кімната 1 - - Small room 2 - + + Small room 2 + Мала кімната 2 - - Medium room 1 - + + Medium room 1 + Середня кімната 1 - - Medium room 2 - + + Medium room 2 + Середня кімната 2 - - Large room 1 - + + Large room 1 + Велика кімната 1 - - Large room 2 - + + Large room 2 + Велика кімната 2 - - Medium ER 1 - + + Medium ER 1 + Середній ER 1 - - Medium ER 2 - + + Medium ER 2 + Середній ER 2 - - Plate high - + + Plate high + Висока плита - - Plate low - + + Plate low + Низька плита - - Long reverb 1 - + + Long reverb 1 + Довга ревербрація 1 - - Long reverb 2 - + + Long reverb 2 + Довга ревербрація 2 - - error - + + error + помилка - - creating - + + creating + створення - - suspended - + + suspended + призупинено - - - idle - + + + idle + простій - - - running - + + + running + працює - - not connected - + + not connected + не під'єднано - - JamesDSP is an advanced audio processing engine available for Linux and Android systems. - + + JamesDSP is an advanced audio processing engine available for Linux and Android systems. + JamesDSP - це передовий двигун обробки звуку, доступний для систем Linux та Android. - - Auto-start permission has been denied - + + Auto-start permission has been denied + Дозвіл до автозапуску було відмовлено - - Please run 'flatpak permission-reset %1' and reenable auto-start. - + + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. + - - Unknown error - + + Unknown error + Невідома помилка - - Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 - + + Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 + Переконайтеся, що реалізація XDG фонового порталу доступна й активна, щоб використовувати автозапуск. %1 - - + + SettingsFragment - - Settings - + + Settings + Налаштування + + + + Category + Категорія + + + + Interface + Інтерфейс + + + + Audio processing + + + + + Default paths + Типові шляхи + + + + Devices + Пристрої + + + + Network + Мережа - - Category - + + Tray icon + Іконка в системному лотку - - Interface - + + Context menu + Контекстне меню - - Default paths - + + Theme + Тема - - Devices - + + Edit + Редагувати - - Network - + + Color scheme + Кольорова схема - - Tray icon - + + Equalizer + Еквалайзер - - Context menu - + + Always display handles + Завжди показувати елементи керування - - Theme - + + Convolver benchmarking + - - Edit - Редагувати + + Benchmark now + - - Color scheme - + + Clear cached data + - - Equalizer - + + Enable benchmarking on boot + - - Always display handles - + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + - - Impluse responses - + + Workarounds + - - VDCs - + + Allow volume control of the virtual sink device + - - Liveprog scripts - + + Restart required to apply changes. May cause audio loss in some cases. + - - Save - Зберегти + + Impluse responses + Відгуки імпульсу - - Built-in assets - + + VDCs + VDC - - <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + + Liveprog scripts + Liveprog скрипти - - Extract bundled assets on startup - + + Save + Зберегти - - Extract now - + + Built-in assets + Вбудовані ресурси - - Select sink/device to be processed - + + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> + <html><head/><body><p>Ця опція перевірятиме під час кожного запуску, чи відсутній один зі стандартних скриптів EEL. Якщо це так, відсутні файл(и) буде автоматично відновлено з ресурсів. (Це не перезапише їх, якщо вони вже існують!)</p></body></html> - - Use default output device (recommended) - + + Extract bundled assets on startup + Розпакування комплекту ресурсів під час запуску - - Manually select device - + + Extract now + Видобути зараз - - Device - + + Select sink/device to be processed + Виберіть джерело/пристрій для обробки - - Blocklisted apps - + + Use default output device (recommended) + Використовувати стандартний пристрій виводу (рекомендовано) - - In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + + Manually select device + Виберіть пристрій вручну - - Allowlist mode (apps need to be explicitly enabled instead) - + + Device + Пристрій - - Clear list - + + Blocklisted apps + Заблоковані додатки - - AutoEQ database - База даних AutoEQ + + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. + У розділі 'Програми', доступне в меню з трьома крапками в головному вікні, ви можете заблокувати обробку застосунків, що обробляються з допомоги JamesDSP. - - Status: - + + Allowlist mode (apps need to be explicitly enabled instead) + Режим списку дозволів (замість цього потрібно вмикати застосунки) - - unknown - + + Clear list + Очистити список - - Manage local database - + + AutoEQ database + База даних AutoEQ - - Run in background (tray icon) - + + Status: + Стан: - - No, shutdown audio effects when closing app - + + unknown + невідомо - - Yes, minimize to tray icon when closing app - + + Manage local database + Керування локальною базою даних - - Auto-start - + + Run in background (tray icon) + Запустити у фоновому режимі (іконка в системному лотку) - - Start minimized on boot - Запускати згорнутим при увімкненні комп'ютера + + No, shutdown audio effects when closing app + Ні, вимикати звукові ефекти під час закриття програми - - Systray not supported on this system - + + Yes, minimize to tray icon when closing app + Так, згорнути до системного лотка при закритті застосунку - - Visit Github repo - + + Auto-start + Автозапуск - - Run setup wizard - + + Start minimized on boot + Запускати згорнутим під час завантаження - - Close - Закрити + + Systray not supported on this system + Системний лоток не підтримується цією системою - - Unknown (%1) - + + Visit Github repo + Відвідати GitHub репозиторій - - installed - + + Run setup wizard + Запустити майстер налаштування - - not installed - + + Close + Закрити - - Override liveprog scripts? - + + + benchmark data loaded + - - Do you want to override existing default liveprog scripts? + + Unknown (%1) + Невідомо (%1) + + + + installed + встановлено + + + + not installed + не встановлено + + + + + no benchmark data stored + + + + + Override liveprog scripts? + Перевизначити скрипти liveprog? + + + + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Ви хочете перезаписати чинні за замовчуванням скрипти liveprog? +Якщо вони були змінені, вони будуть скинуті. - - Extract assets - + + Extract assets + Розпакувати ресурси - - %1 files have been restored - + + %1 files have been restored + %1 файлів було відновлено - - You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. + + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Ви збираєтеся увімкнути режим зі списком дозволів. JamesDSP не буде обробляти всі застосунки за замовчуванням, поки цей режим активний. Необхідно примусово дозволити кожному застосунку отримувати обробку в меню 'Застосунки'. + + + + + Are you sure? + Ви впевнені? + + + + This action will reset your current blocklist or allowlist. Do you want to continue? + Ця дія призведе до скидання поточного списку блокувань або дозволів. Ви хочете продовжити? + + + + Warning + Увага - - Are you sure? - + + Do you really want to restore the default menu layout? + Ви дійсно хочете відновити макет меню за замовчуванням? - - This action will reset your current blocklist or allowlist. Do you want to continue? - + + waiting for result... + - - Warning - + + Cache cleared + - - Do you really want to restore the default menu layout? - + + Benchmark data has been cleared. Restart this app to fully apply the changes. + - - + + SingleInstanceMonitor - - Another instance of JamesDSP is already active and has been put in the foreground. - + + Another instance of JamesDSP is already active and has been put in the foreground. + Інший екземпляр JamesDSP вже активний і розміщений на передньому плані. - - + + StatusDialog - - Status - + + Status + Стан - - Application version - + + Application version + Версія застосунку - - JamesDSP core version - + + JamesDSP core version + Версія ядра JamesDSP - - Processing state - + + Processing state + Стан обробки - - Audio format - + + Audio format + Формат аудіо - - Sampling rate - + + Sampling rate + Частота дискретизації - - + + StatusFragment - - Processing - + + Processing + Обробляється - - Not processing - + + Not processing + Не оброблюється - - + + TrayIcon - - &Bypass - + + &Bypass + &Обхід - - &Presets - + + &Presets + &Пресети - - &Convolver bookmarks - + + &Convolver bookmarks + Закладки &конвольвера - - JamesDSP for Linux - + + JamesDSP for Linux + JamesDSP для Linux - - No presets found - + + No presets found + Пресети не знайдено - - No impulse responses found - + + No impulse responses found + Не знайдено імпульсних відповідей - - &Reload JamesDSP - + + &Reload JamesDSP + &Перезавантажити JamesDSP - - - &Quit - + + + &Quit + &Вихід - - - &Show/hide window - + + + &Show/hide window + &Показати/сховати вікно - - Re&verberation presets - + + Re&verberation presets + Пресети ре&верберації - - Off - + + Off + Вимкнути - - &Equalizer presets - + + &Equalizer presets + Пресети &еквалайзера - - &Crossfeed - + + &Crossfeed + &Кроссфід - - + + VariableItemModel - - Parameter - + + Parameter + Параметр - - Value - + + Value + Значення - - + + VariableWatchWidget - - Form - Форма + + Form + Форма - - ms - + + ms + мс - - Refresh every - + + Refresh every + Оновлювати кожні - - Click a variable to manipulate its value. - + + Click a variable to manipulate its value. + Натисніть на змінну, щоб маніпулювати її значенням. - - - Error - Помилка + + + Error + Помилка - - This variable is a string. Currently only numerical value types can be modified. - + + This variable is a string. Currently only numerical value types can be modified. + Ця змінна є рядком. Наразі можна змінити лише числові типи значень. - - Manipulate variable - + + Manipulate variable + Маніпулювання змінною - - Enter a new value for variable '%1': - + + Enter a new value for variable '%1': + Введіть нове значення змінної '%1': - - Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. - + + Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. + Не вдалося змінити значення '%1'. Або воно не існує, або його не можна його змінити. - - + + VdcDatabaseModel - - Company - + + Company + Фірма - - Model - + + Model + Модель - - + + ads::CDockAreaTitleBar - - Detach Group - + + Detach Group + Від'єднати групу - - Close Group - + + Close Group + Закрити групу - - Close Other Groups - + + Close Other Groups + Закрити інші групи - - + + ads::CDockManager - - Show View - + + Show View + Показати вигляд - - + + ads::CDockWidgetTab - - Detach - + + Detach + Відчепити - - Close - Закрити + + Close + Закрити - - Close Others - + + Close Others + Закрити інші - - + + menueditor - - Available entries - + + Available entries + Доступні елементи - - Move Up - + + Move Up + Перемістити вгору - - Moves the selected toolbar item up - + + Moves the selected toolbar item up + Переміщує обрану панель інструментів вгору - - &Up - + + &Up + &Вгору - - Move Down - + + Move Down + Перемістити вниз - - moves the selected toolbar item down - + + moves the selected toolbar item down + пересуває вибрану панель інструментів вниз - - &Down - + + &Down + &Вниз - - Insert - + + Insert + Вставити - - Adds the selected menu action to the toolbar - + + Adds the selected menu action to the toolbar + Додає вибране меню з діями до панелі інструментів - - &Add - + + &Add + &Додати - - Remove - Видалити + + Remove + Видалити - - Removes the selected item from the active toolbar - + + Removes the selected item from the active toolbar + Видаляє обраний елемент з активної панелі інструментів - - &Del - + + &Del + &Видалити - - - Reset - + + + Reset + Скинути - - Context menu contents - + + Context menu contents + Вміст контекстного меню - + diff --git a/resources/translations/jamesdsp_vi.ts b/resources/translations/jamesdsp_vi.ts index 1e5f977e..50b989b4 100644 --- a/resources/translations/jamesdsp_vi.ts +++ b/resources/translations/jamesdsp_vi.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/resources/translations/jamesdsp_zh_CN.qm b/resources/translations/jamesdsp_zh_CN.qm index c10ea5b7..2d0c389f 100644 Binary files a/resources/translations/jamesdsp_zh_CN.qm and b/resources/translations/jamesdsp_zh_CN.qm differ diff --git a/resources/translations/jamesdsp_zh_CN.ts b/resources/translations/jamesdsp_zh_CN.ts index 96479e34..a4bf7245 100644 --- a/resources/translations/jamesdsp_zh_CN.ts +++ b/resources/translations/jamesdsp_zh_CN.ts @@ -1,1645 +1,1651 @@ - + AeqItemDelegate - - 2nd choice - + + 2nd choice + - - 3rd choice - + + 3rd choice + - - %1th choice - + + %1th choice + - - + + AeqPreviewPlot - - Frequency (Hz) - 频率 (Hz) + + Frequency (Hz) + 频率 (Hz) - - Amplitude (dBr) - + + Amplitude (dBr) + - - Target - + + Target + - - Raw (smoothed) - + + Raw (smoothed) + - - Error (smoothed) - + + Error (smoothed) + - - Equalization - + + Equalization + - - Raw - + + Raw + - - Error - 错误 + + Error + 错误 - - Equalized - + + Equalized + - - Equalization (normalized) - + + Equalization (normalized) + - - Move to top left - + + Move to top left + - - Move to top center - + + Move to top center + - - Move to top right - + + Move to top right + - - Move to bottom right - + + Move to bottom right + - - Move to bottom left - + + Move to bottom left + - - + + AeqSelector - - AutoEQ Database - + + AutoEQ Database + - - Filter... - + + Filter... + - - Local database version - + + Local database version + - - Checked out at commit: - + + Checked out at commit: + - - Last commit created at: - + + Last commit created at: + - - Package generated at: - + + Package generated at: + - - Display settings - 显示设置 + + Display settings + 显示设置 - - Dark mode - 暗色主题 + + Dark mode + 暗色主题 - - Update database - 更新数据库 + + Update database + 更新数据库 - - Download latest AutoEQ package - 下载最新的 AutoEQ 包 + + Download latest AutoEQ package + 下载最新的 AutoEQ 包 - - Delete database - 删除数据库 + + Delete database + 删除数据库 - - Cleanup local database and exit - 清除本地数据库并退出 + + Cleanup local database and exit + 清除本地数据库并退出 - - No measurement selected - + + No measurement selected + - - Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. + + Use the search box on the left-hand side to find a suitable measurement for your headphones. Press 'OK' to load the equalization data into the audio engine. This will override your current GraphicEQ configuration. - 使用左侧的搜索框为您的耳机找到合适的预设。 按 '确定' 将均衡器数据加载到音频引擎。 + 使用左侧的搜索框为您的耳机找到合适的预设。 按 '确定' 将均衡器数据加载到音频引擎。 这将覆盖您当前的 GraphicEQ 配置。 - - - Manage database - 管理数据库 + + + Manage database + 管理数据库 - - No measurements found - 未找到预设 + + No measurements found + 未找到预设 - - AutoEQ database - AutoEQ 数据库 + + AutoEQ database + AutoEQ 数据库 - - Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. + + Before using the AutoEQ integration, you need to download a minified version of their headphone compensation database (~50MB) to your hard drive. An internet connection is required during this step. Do you want to continue and enable this feature? - 在使用 AutoEQ 集成之前,您需要下载他们的耳机补偿数据库 (~50MB) 的简化版本到您的硬盘。 + 在使用 AutoEQ 集成之前,您需要下载他们的耳机补偿数据库 (~50MB) 的简化版本到您的硬盘。 此步骤需要互联网连接。 您想要继续并启用此功能吗? - - - Failed to retrieve version information - 获取版本信息失败 + + + Failed to retrieve version information + 获取版本信息失败 - - - Failed to retrieve package information from the remote repository: + + + Failed to retrieve package information from the remote repository: Status code: %0 Reason: %1 - 无法从远程仓库获取包信息: + 无法从远程仓库获取包信息: 状态代码: %0 原因: %1 - - Return to database - 返回至数据库 + + Return to database + 返回至数据库 - - No new updates available - 无可用更新 + + No new updates available + 无可用更新 - - The local database is currently up-to-date; no new updates are available at this time. + + The local database is currently up-to-date; no new updates are available at this time. It may take up to 24 hours for new changes in the AutoEQ upstream repo to become available for download here. Packages are generated at 4am UTC daily. Do you want to re-install the latest database update anyway? - + - - Database cleared - + + Database cleared + - - The database has been removed from your hard disk - + + The database has been removed from your hard disk + - - Error - 错误 + + Error + - - Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. - + + Unable to retrieve corresponding file from database. Please update the local database as it appears to be incomplete. + - - + + AppItem - - (unset) - + + (unset) + - - - - Add to blocklist - + + + + Add to blocklist + - - - Add to allowlist - + + + Add to allowlist + - - Rate: %1Hz - + + Rate: %1Hz + - - Latency: %1ms - + + Latency: %1ms + 延迟: %1毫秒 - - Format: %1 - + + Format: %1 + - - + + AppManagerFragment - - Active apps - + + Active apps + - - No apps are playing audio - + + No apps are playing audio + - - + + AutostartManager - - Manage auto-start permission for JamesDSP - + + Manage auto-start permission for JamesDSP + - - + + CodeOutline - - Annotations - + + Annotations + - - Functions - + + Functions + - - + + ConsoleOutput - - Auto-scroll - + + Auto-scroll + 自动滚屏 - - Copy selection - + + Copy selection + 复制选中项 - - Copy all - + + Copy all + 复制所有内容 - - Clear - + + Clear + - - + + EELEditor - - EEL Scripting IDE - + + EEL Scripting IDE + EEL 脚本开发环境 - - File - + + File + 文件 - - Edit - 编辑 + + Edit + 编辑 - - Navigation - + + Navigation + 导航 - - View - + + View + 视图 - - Help - 帮助 + + Help + 帮助 - - Open - + + Open + 打开 - - Open script - 打开脚本 + + Open script + 打开脚本 - - Ctrl+O - Ctrl+O + + Ctrl+O + Ctrl+O - - - Close file - 关闭文件 + + + Close file + 关闭文件 - - Ctrl+Shift+W - Ctrl+Shift+W + + Ctrl+Shift+W + Ctrl+Shift+W - - Save - 保存 + + Save + 保存 - - Ctrl+S - Ctrl+S + + Ctrl+S + Ctrl+S - - Save as... - 另存为... + + Save as... + 另存为... - - Ctrl+Shift+S - Ctrl+Shift+S + + Ctrl+Shift+S + Ctrl+Shift+S - - Undo - 撤销 + + Undo + 撤销 - - Ctrl+Z - Ctrl+Z + + Ctrl+Z + Ctrl+Z - - Redo - 恢复 + + Redo + 恢复 - - Ctrl+Shift+Z - Ctrl+Shift+Z + + Ctrl+Shift+Z + Ctrl+Shift+Z - - Find/Replace... - 查找/替换…... + + Find/Replace... + 查找/替换…... - - Ctrl+F - Ctrl+F + + Ctrl+F + Ctrl+F - - - Go to line... - 转到行… + + + Go to line... + 转到行… - - Go to line - 转到行 + + Go to line + 转到行 - - Ctrl+L - Ctrl+L + + Ctrl+L + Ctrl+L - - - Jump to function... - 跳转到函数... + + + Jump to function... + 跳转到函数... - - Ctrl+M - Ctrl+M + + Ctrl+M + Ctrl+M - - Go to @init - 转到@init + + Go to @init + 转到@init - - F2 - F2 + + F2 + F2 - - Go to @sample - 转到@sample + + Go to @sample + 转到@sample - - F3 - F3 + + F3 + F3 - - Automatic Parentheses - + + Automatic Parentheses + - - Replace Tabs with Spaces - 用空格替换制表符 + + Replace Tabs with Spaces + 用空格替换制表符 - - EEL2 documentation - EEL2文档 + + EEL2 documentation + EEL2文档 - - F1 - F1 + + F1 + F1 - - Run code - 运行代码 + + Run code + 运行代码 - - F5 - F5 + + F5 + F5 - - New - 新建 + + New + 新建 - - New script wizard - 新建脚本向导 + + New script wizard + 新建脚本向导 - - Ctrl+N - Ctrl+N + + Ctrl+N + Ctrl+N - - - Freeze - + + + Freeze + 冻结运行 - - F6 - F6 + + F6 + F6 - - Loaded projects - 加载项目 + + Loaded projects + 加载项目 - - Code outline - + + Code outline + 代码大纲 - - Variable view - 变量视图 + + Variable view + 变量视图 - - Console output - 控制台输出 + + Console output + 控制台输出 - - '%1' started compiling at %2 - + + '%1' started compiling at %2 + - - <br>Compilation stopped at %2 - + + <br>Compilation stopped at %2 + - - Script initialization took %1ms - 脚本初始化耗时 %1毫秒 + + Script initialization took %1ms + 脚本初始化耗时 %1毫秒 - - Error - 错误 + + Error + 错误 - - Cannot write file - 无法写入文件。 + + Cannot write file + 无法写入文件。 - - Open EEL script - 打开EEL脚本 + + Open EEL script + 打开EEL脚本 - - EEL2 Script (*.eel) - EEL2脚本 (*.eel) + + EEL2 Script (*.eel) + EEL2脚本 (*.eel) - - Save as - 另存为 + + Save as + 另存为 - - Cannot execute - 无法执行 + + Cannot execute + 无法执行 - - No script file opened. Please open one first and try again. - 没有脚本文件被打开。请先打开一个,然后重试。 + + No script file opened. Please open one first and try again. + 没有脚本文件被打开。请先打开一个,然后重试。 - - Enter line number: - 输入行号: + + Enter line number: + 输入行号: - - Enter function name: - 输入函数名称: + + Enter function name: + 输入函数名称: - - + + EmptyView - - No project loaded - + + No project loaded + - - + + FileDownloaderDialog - - Package manager - + + Package manager + - - Downloading package... - + + Downloading package... + - - + + FileSelectionWidget - - Refresh - + + Refresh + - - Bookmark - + + Bookmark + - - Rename - + + Rename + 重命名 - - Remove - + + Remove + 移除 - - No supported files found - + + No supported files found + - - + + FindReplaceForm - - Form - + + Form + - - &Find: - + + &Find: + 查找(&F): - - R&eplace with: - + + R&eplace with: + 替换为(&E): - - Previous - + + Previous + 查找上一个匹配项 - - Next - + + Next + 查找下一个匹配项 - - &Options - + + &Options + 选项(&O) - - R&egular expression - + + R&egular expression + 正则表达式(&E) - - &Whole words - + + &Whole words + 全字匹配(&W) - - &Case sensitive - + + &Case sensitive + 区分大小写(&C) - - &Close - + + &Close + 关闭(&C) - - &Replace - + + &Replace + 替换(&R) - - Replace &All - + + Replace &All + 全部替换(&A) - - no match found - + + no match found + 找不到指定的文字 - - Replaced %1 occurrence(s) - + + Replaced %1 occurrence(s) + - - + + FirstLaunchWizard - - Welcome! - + + Welcome! + 欢迎! - - Thank you for installing this app! + + Thank you for installing this app! However, before you can begin playing around with JamesDSP for Linux, we'll need to make some adjustments in order to ensure the best possible experience with JDSP. - + 感谢你安装这个应用程序! +但是,在你开始体验JamesDSP for Linux之前,我们需要做一些调整,旨在尽可能保证你使用JDSP的最佳体验。 - - - - Next > - + + + + Next > + - - Run in background? - + + Run in background? + 要在后台运行吗? - - No, don't apply effects in background - + + No, don't apply effects in background + - - Yes, minimize to tray icon - + + Yes, minimize to tray icon + 是的,最小化到系统托盘图标 - - Start minimized on boot - + + Start minimized on boot + 启动时最小化 - - That's it! - + + That's it! + 搞定,就这些了! - - You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! - + + You're good to go! You can change any choice you just made in the settings section. Check it out for further customization options. Visit our Telegram community for support and updates! + - - Telegram - + + Telegram + - - Close - + + Close + - - + + FlatTabWidget - - FlatTabWidget - + + FlatTabWidget + - - + + GraphicEQFilterGUI - - Enable Graphic EQ - + + Enable Graphic EQ + 启用图形均衡器 - - Freq. - + + Freq. + - - Gain - + + Gain + 增益 - - AutoEQ database... - + + AutoEQ database... + - - 15-band - + + 15-band + 15段均衡 - - 31-band - + + 31-band + 31段均衡 - - variable - + + variable + - - Import - + + Import + 导入 - - Export - + + Export + 导出 - - Invert response - + + Invert response + - - Normalize response - + + Normalize response + - - Reset response - 重置响应 + + Reset response + 重置响应 - - - Import EqualizerAPO settings - 导入均衡器APO设置 + + + Import EqualizerAPO settings + 导入均衡器APO设置 - - Import frequency response - 导入频率响应 + + Import frequency response + 导入频率响应 - - - CSV frequency response (*.csv) - CSV频率响应 (*.csv) + + + CSV frequency response (*.csv) + CSV频率响应 (*.csv) - - - - All files (*.*) - 所有文件 (*.*) + + + + All files (*.*) + 所有文件 (*.*) - - Import EqualizerAPO graphic EQ preset - + + Import EqualizerAPO graphic EQ preset + 导入 EqualizerAPO 图形均衡器预设 - - EqualizerAPO GraphicEQ (*.txt) - + + EqualizerAPO GraphicEQ (*.txt) + - - Export frequency response - 导出频率响应 + + Export frequency response + 导出频率响应 - - + + GzipDownloaderDialog - - Error - 错误 + + Error + 错误 - - %1MB of %2MB downloaded - 已下载%1MB,共需要下载%2MB + + %1MB of %2MB downloaded + 已下载%1MB,共需要下载%2MB - - Decompressing package... - 正在解压文件... + + Decompressing package... + 正在解压文件... - - + + LiveprogSelectionWidget - - - No script has been loaded - 未加载脚本 + + + No script has been loaded + 未加载脚本 - - Enable - 启用 + + Enable + 启用 - - Reset - 重置 + + Reset + 重置 - - - Create new script - 创建新脚本 + + + Create new script + 创建新脚本 - - - Error - 错误 + + + Error + 错误 - - Cannot restore defaults. + + Cannot restore defaults. No EEL file is currently loaded. - 无法恢复默认值。 + 无法恢复默认值。 当前没有加载EEL文件。 - - Selected EEL file does not exist anymore. + + Selected EEL file does not exist anymore. Please select another one - 所选EEL文件不再存在。 + 所选EEL文件不再存在。 请另选一个 - - Edit script - 编辑脚本 + + Edit script + 编辑脚本 - - No customizable parameters - 没有可自定义参数 + + No customizable parameters + 没有可自定义参数 - - + + MainWindow - - JamesDSP for Linux - JamesDSP for Linux + + JamesDSP for Linux + JamesDSP for Linux - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic bass boost</span></p><p>Frequency-detecting bass-boost. Automatically sets its own parameters, such as gain, bandwidth, and cut-off frequency by analysing the incoming audio stream</p><p><span style=" text-decoration: underline;">Max gain:</span> adjusts the amount of the dynamic bass boost effects.</p></body></html> + - - Dynamic bass boost - + + Dynamic bass boost + - - Maximum gain - + + Maximum gain + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Analog modelling</span></p><p>Oversampled analog modelling is an aliasing-free, even harmonic generator.</p></body></html> + - - Analog modelling - + + Analog modelling + - - Preamp (Harmonics) - + + Preamp (Harmonics) + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Limiter</span></p><p>This output limiter tries to avoid clipping of output (caused by DSP that tries to make part or all of the audio louder than before, if the input is already near maximum). </p><p><span style=" text-decoration: underline;">Limiter threshold:</span> This should be set to -0.1 unless, for some reason, your audio is clipping before digital clipping, in which case you can set it to lower values.</p><p><span style=" text-decoration: underline;">Limiter release:</span> The limiter is only as effective as long as the release time is set. Short release times will lead to audible distortion of the limited sound, especially of low frequencies; an extended release is usually preferred but reduces the volume that can be achieved somewhat. If &quot;pumping&quot; (ducking of limited sound and coming back up over time) becomes objectionable, making the release longer OR shorter can help make the effect less noticeable.</p><p><span style=" text-decoration: underline;">Post gain:</span> Post gain acts as a digital volume knob for all effects, after they have been applied but before the sound reaches the limiter.</p></body></html> + - - Limiter/Master - + + Limiter/Master + - - Threshold - + + Threshold + - - Release - + + Release + - - Post gain - + + Post gain + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Dynamic range compander</span></p><p>Enables/disables the dynamic range compander.</p></body></html> + - - Dynamic range compander - + + Dynamic range compander + - - Time constant - + + Time constant + - - Granularity - + + Granularity + - - Time-frequency transforms - + + Time-frequency transforms + - - Uniform (Short-time Fourier) - + + Uniform (Short-time Fourier) + - - Multiresolution (Continuous wavelet) - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> + - - Multiresolution (Time domain) - + + + Crossfeed + 交叉反馈 - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - + + Mode + - - - Crossfeed - + + Custom BS2B parameters + - - Mode - + + Cut frequency + - - Custom BS2B parameters - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> + - - Cut frequency - + + Soundstage wideness + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + + Widen level + - - Soundstage wideness - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> + - - Widen level - + + Enable reverberation + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + + Presets + 预设 - - Enable reverberation - + + + ... + ... - - Presets - 预设 + + Oversampling factor + 过采样系数: - - - ... - ... + + Early reflection factor + - - Oversampling factor - 过采样系数: + + Early reflection amount + - - Early reflection factor - + + Early reflection width + - - Early reflection amount - + + Lowpass cutoff (Input) + - - Early reflection width - + + Lowpass cutoff (Bass) + - - Lowpass cutoff (Input) - + + Lowpass cutoff (Damp) + - - Lowpass cutoff (Bass) - + + Lowpass cutoff (Output) + - - Lowpass cutoff (Damp) - + + Final wet mix + - - Lowpass cutoff (Output) - + + Final dry mix + - - Final wet mix - + + Reverb wetness + - - Final dry mix - + + Width L/R mix + - - Reverb wetness - + + LFO wander amount + - - Width L/R mix - + + LFO spin amount + - - LFO wander amount - + + Time decay + - - LFO spin amount - + + Delay + - - Time decay - + + Bass boost + - - Delay - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> + - - Bass boost - + + FIR Minimum phase + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + + IIR 4 order + - - FIR Minimum phase - + + IIR 6 order + - - IIR 4 order - + + IIR 8 order + - - IIR 6 order - + + IIR 10 order + - - IIR 8 order - + + IIR 12 order + - - IIR 10 order - + + Enable EQ + 启用 EQ - - IIR 12 order - + + Multiresolution (Continuous wavelet, incomplete dual frame) + - - Enable EQ - + + Pseudo multiresolution (Undersampling frame) + - - Presets... - + + Pseudo multiresolution (Time domain, zero latency) + - - Filter type - + + Presets... + 预设... - - Interpolator - + + Filter type + - - <html><head/><body><p>Interpolation mode</p></body></html> - + + Interpolator + 插值器 - - Piecewise Cubic Hermite Interpolating Polynomial - + + <html><head/><body><p>Interpolation mode</p></body></html> + - - Modified Hiroshi Akima spline - + + Piecewise Cubic Hermite Interpolating Polynomial + - - Reset EQ - + + Modified Hiroshi Akima spline + - - Fixed bands - + + Reset EQ + - - Flexible bands - + + Fixed bands + 固定频率 - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - + + Flexible bands + 可调频率 - - - Filesystem - 文件系统 + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> + - - Bookmarks - 收藏夹 + + + Filesystem + 文件系统 - - Enable convolver - + + Bookmarks + 收藏夹 - - IR optimization - IR优化 + + Enable convolver + 启用卷积器 - - Original - + + IR optimization + IR优化 - - Shrink - + + Original + - - Minimum phase transform and shrink - + + Shrink + - - Adv. waveform editing - + + Minimum phase transform and shrink + 最小相位变换以及长度剪枝 - - Edit - 编辑 + + Adv. waveform editing + - - Channels: - + + Edit + 编辑 - - Samples: - + + Channels: + - - No selection - + + Samples: + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + + No selection + - - Database - 数据库 + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> + - - Create - 创建 + + Database + 数据库 - - Create your custom DDC files using DDCToolbox - 使用DDCToolbox创建您的自定义DDC文件 + + Create + 创建 - - <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + + Create your custom DDC files using DDCToolbox + 使用DDCToolbox创建您的自定义DDC文件 - - View installation instructions - 查看安装说明 + + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> + - - Enable ViPER-DDC - + + View installation instructions + 查看安装说明 - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + + Enable ViPER-DDC + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> + - - Custom Presets - 自定义预设 + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + + Custom Presets + 自定义预设 - - Settings - 设置 + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + + Settings + 设置 - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> + - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> + - - Bypass - + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> + - - %1 connected - Preset loaded automatically - %1已连接 - 预设已自动加载 + + Bypass + 旁通 - - Cannot execute script - 无法执行脚本 + + %1 connected - Preset loaded automatically + %1已连接 - 预设已自动加载 - - The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - 当前EEL文件 ( '%1') 在文件系统中不再存在。请手动重新打开文件。 + + Cannot execute script + 无法执行脚本 - - Apps - + + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. + 当前EEL文件 ( '%1') 在文件系统中不再存在。请手动重新打开文件。 - - Driver status - 驱动程序状态 + + Apps + - - Relink audio pipeline - + + Driver status + 驱动程序状态 - - Reset to defaults - 重置为默认 + + Relink audio pipeline + - - Load from file - 从文件加载 + + Reset to defaults + 重置为默认 - - Save to file - 保存到文件 + + Load from file + 从文件加载 - - Open LiveprogIDE - 打开LiveprogIDE + + Save to file + 保存到文件 - - What's this... (Select UI element) - 这是什么。。。(选择UI元素) + + Open LiveprogIDE + 打开LiveprogIDE - - Bass/Misc - + + What's this... (Select UI element) + 这是什么。。。(选择UI元素) - - Sound Positioning - + + Bass/Misc + - - Reverb - + + Sound Positioning + 声音方位 - - Equalizer - + + Reverb + 混响 - - Convolver - + + Equalizer + 均衡器 - - DDC - + + Convolver + 脉冲反馈 - - Liveprog - + + DDC + - - Graphic EQ - + + Liveprog + 现场可编程处理器 - - Launch application - + + Graphic EQ + 图形均衡器 - - Reset Configuration - + + Launch application + - - Are you sure? - + + Reset Configuration + - - Load custom audio.conf - + + Are you sure? + 你确定吗? - - Save current audio.conf - + + Load custom audio.conf + - - Very low - + + Save current audio.conf + - - Low - + + Very low + - - Medium - + + Low + - - High - + + Medium + - - Extreme - + + High + - - Advanced waveform editing - + + Extreme + - - Advanced waveform editing (default: -80;-100;0;0;0;0) + + Advanced waveform editing + + + + + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. This setting is only in effect if IR optimization is enabled. @@ -1651,1215 +1657,1287 @@ This setting is only in effect if IR optimization is enabled. 5th value: Channel 3 delay (samples) 6th value: Channel 4 delay (samples) - + - - + + NewFileWizard - - Create new script - 创建新脚本 + + Create new script + 创建新脚本 - - New script - + + New script + 新脚本 - - Define and generate a basic script template - + + Define and generate a basic script template + - - Workspace directory - + + Workspace directory + 工作区目录 - - File name - + + File name + 文件名 - - Description - + + Description + 说明 - - Untitled script - + + Untitled script + 无名脚本 - - Select directory - + + Select directory + 选择目录 - - - - Error - 错误 + + + + Error + 错误 - - Workspace directory does not exist - + + Workspace directory does not exist + - - A file with the same name already exists at this loction - + + A file with the same name already exists at this loction + - - File name is empty or contains illegal characters - + + File name is empty or contains illegal characters + - - + + OverlayMsgProxy - - - - Close - + + + + Close + 关闭 - - + + PaletteEditor - - Palette editor - + + Palette editor + - - - - - - Select... - + + + + + + Select... + 选择... - - Base Color - + + Base Color + - - Background Color - + + Background Color + 背景颜色 - - Foreground Color - + + Foreground Color + - - Close - + + Close + - - Reset - 重置 + + Reset + - - White Icons - + + White Icons + - - Selection Color - + + Selection Color + - - Disabled Color - + + Disabled Color + - - + + PresetAddRuleFragment - - Add new rule... - + + Add new rule... + - - If - + + If + - - is connected, then load preset - + + is connected, then load preset + - - + + PresetDialog - - Presets - 预设 + + Presets + - - Preset name - + + Preset name + - - Adds current config as a preset - + + Adds current config as a preset + - - Save - 保存 + + Save + 保存 - - Rules... - + + Rules... + - - Remove - + + Remove + - - Load - + + Load + - - + + PresetFragment - - No presets saved - + + No presets saved + - - Cannot load preset - + + Cannot load preset + - - Selected file does not exist anymore - + + Selected file does not exist anymore + - - Overwrite - + + Overwrite + - - Save - 保存 + + Save + - - Rename - + + Rename + - - Delete - + + Delete + - - Rename preset - + + Rename preset + - - Enter new name - + + Enter new name + - - + + PresetRuleDialog - - Preset auto-switch rules - + + Preset auto-switch rules + - - Auto-switch rules - + + Auto-switch rules + - - Add new rule... - + + Add new rule... + - - Delete selection - + + Delete selection + - - No rules defined - + + No rules defined + - - - Cannot add new rule - + + + Cannot add new rule + - - All connected audio devices have already a rule defined. + + All connected audio devices have already a rule defined. You can only create one rule per device. - + - - You have no presets saved. + + You have no presets saved. Please create one first before adding a new rule. - + - - + + PresetRuleTableModel - - Device - + + Device + - - Assigned preset - + + Assigned preset + - - + + QObject - - List All Tabs - + + List All Tabs + 列出所有标签页 - - Detach Group - + + Detach Group + - - Close Active Tab - + + Close Active Tab + 关闭活动的标签页 - - Close Group - + + Close Group + 关闭分组 - - Close Tab - + + Close Tab + 关闭标签页 - - Something went wrong - + + Something went wrong + - - Failed to open URL with default browser. + + Failed to open URL with default browser. Please copy this URL manually: - + - - Flat - + + Flat + - - Pop - + + Pop + - - Rock - + + Rock + - - Jazz - + + Jazz + - - Classic - + + Classic + - - Bass - + + Bass + - - Clear - + + Clear + - - Hip-Hop - + + Hip-Hop + - - Dubstep - + + Dubstep + - - Movie - + + Movie + - - Metal - + + Metal + - - Vocal Booster - + + Vocal Booster + - - Hardstyle - + + Hardstyle + - - Acoustic - + + Acoustic + - - R&B - + + R&B + - - Electronic - + + Electronic + - - Deep Bass - + + Deep Bass + - - Beats - + + Beats + - - BS2B Custom - + + BS2B Custom + - - BS2B Weak - + + BS2B Weak + - - BS2B Strong - + + BS2B Strong + - - Out of head - + + Out of head + - - Surround 1 - + + Surround 1 + - - Surround 2 - + + Surround 2 + - - Joe0Bloggs Realistic surround - + + Joe0Bloggs Realistic surround + Joe0Blogs 现实环绕模式 - - Default - + + Default + - - Small hall 1 - + + Small hall 1 + - - Small hall 2 - + + Small hall 2 + - - Medium hall 1 - + + Medium hall 1 + - - Medium hall 2 - + + Medium hall 2 + - - Large hall 1 - + + Large hall 1 + - - Large hall 2 - + + Large hall 2 + - - Small room 1 - + + Small room 1 + - - Small room 2 - + + Small room 2 + - - Medium room 1 - + + Medium room 1 + - - Medium room 2 - + + Medium room 2 + - - Large room 1 - + + Large room 1 + - - Large room 2 - + + Large room 2 + - - Medium ER 1 - + + Medium ER 1 + - - Medium ER 2 - + + Medium ER 2 + - - Plate high - + + Plate high + - - Plate low - + + Plate low + - - Long reverb 1 - + + Long reverb 1 + - - Long reverb 2 - + + Long reverb 2 + - - error - + + error + - - creating - + + creating + - - suspended - + + suspended + - - - idle - + + + idle + - - - running - + + + running + - - not connected - + + not connected + - - JamesDSP is an advanced audio processing engine available for Linux and Android systems. - + + JamesDSP is an advanced audio processing engine available for Linux and Android systems. + JamesDSP 是 Linux 和 Android 系统可用的高级音频处理引擎。 - - Auto-start permission has been denied - + + Auto-start permission has been denied + 自动启动权限已被拒绝 - - Please run 'flatpak permission-reset %1' and reenable auto-start. - + + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. + - - Unknown error - + + Unknown error + - - Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 - + + Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1 + - - + + SettingsFragment - - Settings - 设置 + + Settings + 设置 + + + + Category + + + + + Interface + + + + + Audio processing + 音频处理 + + + + Default paths + 默认路径 + + + + Devices + + + + + Network + + + + + Tray icon + 托盘图标 + + + + Context menu + 右键菜单 + + + + Theme + + + + + Edit + - - Category - + + Color scheme + - - Interface - + + Equalizer + 均衡器 - - Default paths - + + Always display handles + - - Devices - + + Convolver benchmarking + 卷积器压力测试及计算速度优化 - - Network - + + Benchmark now + - - Tray icon - + + Clear cached data + - - Context menu - + + Enable benchmarking on boot + 开机时启用卷积器计算速度优化 - - Theme - + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + - - Edit - 编辑 + + Workarounds + - - Color scheme - + + Allow volume control of the virtual sink device + - - Equalizer - + + Restart required to apply changes. May cause audio loss in some cases. + - - Always display handles - + + Impluse responses + 冲激响应/滤波器 - - Impluse responses - + + VDCs + - - VDCs - + + Liveprog scripts + 现场可编程处理器脚本 - - Liveprog scripts - + + Save + 保存 - - Save - 保存 + + Built-in assets + - - Built-in assets - + + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> + - - <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + + Extract bundled assets on startup + 启动时解包自带资源文件 - - Extract bundled assets on startup - + + Extract now + 现在解包 - - Extract now - + + Select sink/device to be processed + - - Select sink/device to be processed - + + Use default output device (recommended) + - - Use default output device (recommended) - + + Manually select device + - - Manually select device - + + Device + - - Device - + + Blocklisted apps + - - Blocklisted apps - + + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. + - - In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + + Allowlist mode (apps need to be explicitly enabled instead) + - - Allowlist mode (apps need to be explicitly enabled instead) - + + Clear list + - - Clear list - + + AutoEQ database + - - AutoEQ database - AutoEQ 数据库 + + Status: + - - Status: - + + unknown + - - unknown - + + Manage local database + - - Manage local database - + + Run in background (tray icon) + - - Run in background (tray icon) - + + No, shutdown audio effects when closing app + - - No, shutdown audio effects when closing app - + + Yes, minimize to tray icon when closing app + - - Yes, minimize to tray icon when closing app - + + Auto-start + - - Auto-start - + + Start minimized on boot + - - Start minimized on boot - + + Systray not supported on this system + - - Systray not supported on this system - + + Visit Github repo + - - Visit Github repo - + + Run setup wizard + - - Run setup wizard - + + Close + - - Close - + + + benchmark data loaded + - - Unknown (%1) - + + Unknown (%1) + - - installed - + + installed + - - not installed - + + not installed + - - Override liveprog scripts? - + + + no benchmark data stored + - - Do you want to override existing default liveprog scripts? + + Override liveprog scripts? + + + + + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + - - Extract assets - + + Extract assets + - - %1 files have been restored - + + %1 files have been restored + - - You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. + + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + + + + + Are you sure? + 你确定吗? + + + + This action will reset your current blocklist or allowlist. Do you want to continue? + + + + + Warning + - - Are you sure? - + + Do you really want to restore the default menu layout? + 你真的确定要恢复默认的菜单布局吗? - - This action will reset your current blocklist or allowlist. Do you want to continue? - + + waiting for result... + - - Warning - + + Cache cleared + - - Do you really want to restore the default menu layout? - + + Benchmark data has been cleared. Restart this app to fully apply the changes. + - - + + SingleInstanceMonitor - - Another instance of JamesDSP is already active and has been put in the foreground. - + + Another instance of JamesDSP is already active and has been put in the foreground. + - - + + StatusDialog - - Status - + + Status + - - Application version - + + Application version + - - JamesDSP core version - + + JamesDSP core version + JamesDSP 核心版本 - - Processing state - + + Processing state + - - Audio format - + + Audio format + - - Sampling rate - + + Sampling rate + 采样率 - - + + StatusFragment - - Processing - + + Processing + - - Not processing - + + Not processing + - - + + TrayIcon - - &Bypass - + + &Bypass + - - &Presets - + + &Presets + - - &Convolver bookmarks - + + &Convolver bookmarks + - - JamesDSP for Linux - JamesDSP for Linux + + JamesDSP for Linux + - - No presets found - + + No presets found + - - No impulse responses found - + + No impulse responses found + - - &Reload JamesDSP - + + &Reload JamesDSP + - - - &Quit - + + + &Quit + - - - &Show/hide window - + + + &Show/hide window + - - Re&verberation presets - + + Re&verberation presets + - - Off - + + Off + - - &Equalizer presets - + + &Equalizer presets + &均衡器预置 - - &Crossfeed - + + &Crossfeed + - - + + VariableItemModel - - Parameter - + + Parameter + - - Value - + + Value + - - + + VariableWatchWidget - - Form - + + Form + - - ms - + + ms + - - Refresh every - + + Refresh every + - - Click a variable to manipulate its value. - + + Click a variable to manipulate its value. + - - - Error - 错误 + + + Error + - - This variable is a string. Currently only numerical value types can be modified. - + + This variable is a string. Currently only numerical value types can be modified. + - - Manipulate variable - + + Manipulate variable + - - Enter a new value for variable '%1': - + + Enter a new value for variable '%1': + - - Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. - + + Failed to manipulate variable '%1'. Either it does not exist anymore, or it cannot be changed. + - - + + VdcDatabaseModel - - Company - + + Company + - - Model - + + Model + - - + + ads::CDockAreaTitleBar - - Detach Group - + + Detach Group + - - Close Group - + + Close Group + - - Close Other Groups - + + Close Other Groups + - - + + ads::CDockManager - - Show View - + + Show View + - - + + ads::CDockWidgetTab - - Detach - + + Detach + - - Close - + + Close + - - Close Others - + + Close Others + - - + + menueditor - - Available entries - + + Available entries + - - Move Up - + + Move Up + - - Moves the selected toolbar item up - + + Moves the selected toolbar item up + - - &Up - + + &Up + - - Move Down - + + Move Down + - - moves the selected toolbar item down - + + moves the selected toolbar item down + - - &Down - + + &Down + - - Insert - + + Insert + - - Adds the selected menu action to the toolbar - + + Adds the selected menu action to the toolbar + - - &Add - + + &Add + - - Remove - + + Remove + - - Removes the selected item from the active toolbar - + + Removes the selected item from the active toolbar + - - &Del - + + &Del + - - - Reset - 重置 + + + Reset + - - Context menu contents - + + Context menu contents + - + diff --git a/resources/translations/jamesdsp_zh_TW.ts b/resources/translations/jamesdsp_zh_TW.ts index 89c0b2cd..accbb319 100644 --- a/resources/translations/jamesdsp_zh_TW.ts +++ b/resources/translations/jamesdsp_zh_TW.ts @@ -1086,550 +1086,555 @@ Please select another one - + Uniform (Short-time Fourier) - - Multiresolution (Continuous wavelet) - - - - - Multiresolution (Time domain) - - - - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Crossfeed</span></p><p>Includes the traditional BS2B (Bauer stereophonic-to-binaural DSP) mode and a more advanced convolution-based HRTF approach.</p></body></html> - - + + Crossfeed - + Mode - + Custom BS2B parameters - + Cut frequency - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Soundstage widthness</span></p><p>An algorithm that detects stereo phase relation in a several spectral regions, and enhances the stereo soundstage without affecting vocal integrity.</p></body></html> - + Soundstage wideness - + Widen level - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Reverberation</span></p><p>Complex reverberation IIR network (Progenitor 2)</p></body></html> - + Enable reverberation - + Presets - - + + ... - + Oversampling factor - + Early reflection factor - + Early reflection amount - + Early reflection width - + Lowpass cutoff (Input) - + Lowpass cutoff (Bass) - + Lowpass cutoff (Damp) - + Lowpass cutoff (Output) - + Final wet mix - + Final dry mix - + Reverb wetness - + Width L/R mix - + LFO wander amount - + LFO spin amount - + Time decay - + Delay - + Bass boost - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Multimodal Equalizer</span></p><p>Enables/disables the multimodal equalizer.</p><p><span style=" text-decoration: underline;">Filter type:</span> The multimodal equalizer supports both FIR (Minimal phase) and several IIR filtering modes.</p></body></html> - + FIR Minimum phase - + IIR 4 order - + IIR 6 order - + IIR 8 order - + IIR 10 order - + IIR 12 order - + Enable EQ - + + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) + + + + + Pseudo multiresolution (Time domain, zero latency) + + + + Presets... - + Filter type - + Interpolator - + <html><head/><body><p>Interpolation mode</p></body></html> - + Piecewise Cubic Hermite Interpolating Polynomial - + Modified Hiroshi Akima spline - + Reset EQ - + Fixed bands - + Flexible bands - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Convolver</span></p><p>Partitioned convolver (Auto segmenting convolution). Select your impulse response file to be convolved. It takes the signal characteristics of the impulse response and applies them to the incoming audio in real-time.</p><p>Supports mono, stereo, full/true stereo (LL, LR, RL, RR) impulse responses.</p><p><span style=" text-decoration: underline;">Impulse response optimization:</span></p><p>This parameter attempts to reduce the length of the impulse response as much as possible; the whole point is to reduce latency as much as possible, possibly reducing power consumption.</p></body></html> - - + + Filesystem - + Bookmarks - + Enable convolver - + IR optimization - + Original - + Shrink - + Minimum phase transform and shrink - + Adv. waveform editing - + Edit - + Channels: - + Samples: - + No selection - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">ViPER-DDC</span></p><p>Its main job is to perform parametric equalization on audio, however it requires the user to provide a .vdc file that DDCToolbox generates.</p><p>ViPER-DDC in jDSP is a generalized implementation of second-order section filters, which is slightly different from the implementation in Viper4Android. V4A supports only Peaking parametric; the reason is that V4A uses a share coefficient property of Peaking filter. In contrast, jDSP does not have such an assumption.</p></body></html> - + Database - + Create - + Create your custom DDC files using DDCToolbox - + <html><head/><body><p><a href="https://github.com/thepbone/DDCToolbox"><span style=" text-decoration: underline; color:#007af4;">https://github.com/thepbone/DDCToolbox</span></a></p></body></html> - + View installation instructions - + Enable ViPER-DDC - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Live programmable DSP</span></p><p>This is a virtual machine that compiles an .eel code file as input and runs the instructions; in simple words, it allows users to program their own audio effects.</p><p>The number of supported operations is enormous; consider checking out the official documentation: <a href="https://github.com/james34602/EEL_VM"><span style=" text-decoration: underline; color:#007af4;">https://github.com/james34602/EEL_VM</span></a></p><p>Press 'Edit script' to launch a built-in scripting environment for EEL code files.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Arbitrary response equalizer</span></p><p>Also known as GraphicEQ from EqualizerAPO.</p></body></html> - + Custom Presets - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Custom presets</span></p><p>Create and manage custom presets</p></body></html> - + Settings - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Settings</span></p><p>Configure this application</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Other</span></p><p>Various actions that are used less frequently</p></body></html> - + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Passthrough</span></p><p>This option defines whether to enable or disable sound effects.</p></body></html> - + Bypass - + %1 connected - Preset loaded automatically - + Cannot execute script - + The current EEL file (at '%1') does not exist anymore on the filesystem. Please reopen the file manually. - + Apps - + Driver status - + Relink audio pipeline - + Reset to defaults - + Load from file - + Save to file - + Open LiveprogIDE - + What's this... (Select UI element) - + Bass/Misc - + Sound Positioning - + Reverb - + Equalizer - + Convolver - + DDC - + Liveprog - + Graphic EQ - + Launch application - + Reset Configuration - + Are you sure? - + Load custom audio.conf - + Save current audio.conf - + Very low - + Low - + Medium - + High - + Extreme - + Advanced waveform editing - + Advanced waveform editing (default: -80;-100;0;0;0;0) Set threshold of auto-IR-cropping and add delay to a chopped/minimum phase transformed IR. @@ -2231,7 +2236,7 @@ Please create one first before adding a new rule. - + JamesDSP is an advanced audio processing engine available for Linux and Android systems. @@ -2242,7 +2247,7 @@ Please create one first before adding a new rule. - Please run 'flatpak permission-reset %1' and reenable auto-start. + Please run 'flatpak permission-set background background %1 yes' and reenable auto-start. @@ -2275,261 +2280,333 @@ Please create one first before adding a new rule. - Default paths + Audio processing - Devices + Default paths - Network + Devices + Network + + + + Tray icon - + Context menu - + Theme - + Edit - + Color scheme - + Equalizer - + Always display handles - + + Convolver benchmarking + + + + + Benchmark now + + + + + Clear cached data + + + + + Enable benchmarking on boot + + + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + + + Workarounds + + + + + Allow volume control of the virtual sink device + + + + + Restart required to apply changes. May cause audio loss in some cases. + + + + Impluse responses - + VDCs - + Liveprog scripts - + Save - + Built-in assets - + <html><head/><body><p>This option will check on every startup if one of the default EEL scripts is missing. If this is the case the missing file(s) will automatically be restored from the resources. (It will not overwrite them if they already exist!)</p></body></html> - + Extract bundled assets on startup - + Extract now - + Select sink/device to be processed - + Use default output device (recommended) - + Manually select device - + Device - + Blocklisted apps - + In the 'Apps' section accessible using the three-dot menu on the main window, you can block apps that are playing back sound from being processed by JamesDSP. - + Allowlist mode (apps need to be explicitly enabled instead) - + Clear list - + AutoEQ database - + Status: - + unknown - + Manage local database - + Run in background (tray icon) - + No, shutdown audio effects when closing app - + Yes, minimize to tray icon when closing app - + Auto-start - + Start minimized on boot - + Systray not supported on this system - + Visit Github repo - + Run setup wizard - + Close - + + + benchmark data loaded + + + + Unknown (%1) - + installed - + not installed - + + + no benchmark data stored + + + + Override liveprog scripts? - + Do you want to override existing default liveprog scripts? If they have been modified, they will be reset. - + Extract assets - + %1 files have been restored - + You are about to enable allowlist mode. JamesDSP will not process all applications by default while this mode is active. You need to explicitly allow each app to get processed in the 'Apps' menu. - + Are you sure? - + This action will reset your current blocklist or allowlist. Do you want to continue? - + Warning - + Do you really want to restore the default menu layout? + + + waiting for result... + + + + + Cache cleared + + + + + Benchmark data has been cleared. Restart this app to fully apply the changes. + + SingleInstanceMonitor diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 19b7d698..67cbaa03 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -137,11 +137,6 @@ MainWindow::MainWindow(bool statupInTray, // GraphicEQ ui->graphicEq->setEnableSwitchVisible(true); ui->graphicEq->setAutoEqAvailable(true); - - // Compander - // TODO remove this once the option is actually implemented in libjamesdsp - ui->label_5->setVisible(false); - ui->comp_tf_transforms->setVisible(false); } // Allocate pointers and init important variables diff --git a/src/MainWindow.ui b/src/MainWindow.ui index 2bcc5fd9..ed6fdebd 100644 --- a/src/MainWindow.ui +++ b/src/MainWindow.ui @@ -74,7 +74,7 @@ - 3 + 0 @@ -393,6 +393,15 @@ + + + 0 + 0 + + + + QComboBox::AdjustToMinimumContentsLengthWithIcon + Uniform (Short-time Fourier) @@ -400,12 +409,17 @@ - Multiresolution (Continuous wavelet) + Multiresolution (Continuous wavelet, incomplete dual frame) + + + + + Pseudo multiresolution (Undersampling frame) - Multiresolution (Time domain) + Pseudo multiresolution (Time domain, zero latency) diff --git a/src/audio/base/Base.pri b/src/audio/base/Base.pri index 117e8c7d..68e432cb 100755 --- a/src/audio/base/Base.pri +++ b/src/audio/base/Base.pri @@ -2,6 +2,7 @@ INCLUDEPATH += $$PWD HEADERS += \ $$PWD/AppNode.h \ + $$PWD/BenchmarkWorker.h \ $$PWD/DspHost.h \ $$PWD/DspStatus.h \ $$PWD/EelVariable.h \ @@ -13,5 +14,6 @@ HEADERS += \ $$PWD/Utils.h SOURCES += \ + $$PWD/BenchmarkWorker.cpp \ $$PWD/DspHost.cpp \ $$PWD/Utils.cpp diff --git a/src/audio/base/BenchmarkWorker.cpp b/src/audio/base/BenchmarkWorker.cpp new file mode 100644 index 00000000..50ade320 --- /dev/null +++ b/src/audio/base/BenchmarkWorker.cpp @@ -0,0 +1,35 @@ +#include "BenchmarkWorker.h" + +#include "config/AppConfig.h" +#include "utils/Log.h" + +extern "C" { +#include +} + +BenchmarkWorker::BenchmarkWorker(QObject *parent) : QObject{parent} {} + +void BenchmarkWorker::writeCache(int num, double* data) { + QString result = QString::number(data[0]); + + for(int i = 1; i < MAX_BENCHMARK; i++) + result.append(";" + QString::number(data[i])); + + AppConfig::instance().set(num == 0 ? AppConfig::BenchmarkCacheC0 : AppConfig::BenchmarkCacheC1, result); +} + +void BenchmarkWorker::process() { + Log::debug("Starting benchmark..."); + JamesDSP_Start_benchmark(); + + double* c0 = new double[MAX_BENCHMARK]; + double* c1 = new double[MAX_BENCHMARK]; + JamesDSP_Save_benchmark(c0, c1); + + writeCache(0, c0); + writeCache(1, c1); + delete[] c0; + delete[] c1; + + emit finished(); +} diff --git a/src/audio/base/BenchmarkWorker.h b/src/audio/base/BenchmarkWorker.h new file mode 100644 index 00000000..c31abe62 --- /dev/null +++ b/src/audio/base/BenchmarkWorker.h @@ -0,0 +1,22 @@ +#ifndef BENCHMARKWORKER_H +#define BENCHMARKWORKER_H + +#include + +class BenchmarkWorker : public QObject { + Q_OBJECT +public: + BenchmarkWorker(QObject *parent = nullptr); + +public slots: + void process(); + +signals: + void finished(); + +private: + void writeCache(int num, double *data); + +}; + +#endif // BENCHMARKWORKER_H diff --git a/src/audio/base/DspHost.cpp b/src/audio/base/DspHost.cpp index 1255f32d..5c0b9dee 100755 --- a/src/audio/base/DspHost.cpp +++ b/src/audio/base/DspHost.cpp @@ -1,6 +1,8 @@ #include "config/DspConfig.h" #include "Utils.h" +#include "BenchmarkWorker.h" +#include #include #include @@ -18,6 +20,7 @@ extern "C" { #include #include +#include #include #include #include @@ -26,33 +29,6 @@ extern "C" { inline JamesDSPLib* cast(void* raw){ return static_cast(raw); } -inline int32_t arySearch(int32_t *array, int32_t N, int32_t x) -{ - for (int32_t i = 0; i < N; i++) - { - if (array[i] == x) - return i; - } - return -1; -} -#define FLOIDX 20000 -inline void* GetStringForIndex(eel_string_context_state *st, float val, int32_t write) -{ - int32_t castedValue = (int32_t)(val + 0.5f); - if (castedValue < FLOIDX) - return 0; - int32_t idx = arySearch(st->map, st->slot, castedValue); - if (idx < 0) - return 0; - if (!write) - { - s_str *tmp = &st->m_literal_strings[idx]; - const char *s = s_str_c_str(tmp); - return (void*)s; - } - else - return (void*)&st->m_literal_strings[idx]; -} DspHost::DspHost(void* dspPtr, MessageHandlerFunc&& extraHandler) : _extraFunc(std::move(extraHandler)) { @@ -72,11 +48,82 @@ DspHost::DspHost(void* dspPtr, MessageHandlerFunc&& extraHandler) : _extraFunc(s _dsp = dsp; _cache = new DspConfig(); + + benchmarkThread = new QThread(); + benchmarkWorker = new BenchmarkWorker(); + + QObject::connect(benchmarkThread, &QThread::started, benchmarkWorker, &BenchmarkWorker::process); + QObject::connect(benchmarkWorker, &BenchmarkWorker::finished, benchmarkThread, &QThread::quit); + QObject::connect(benchmarkWorker, &BenchmarkWorker::finished, benchmarkThread, [this] { + dispatch(Message::BenchmarkDone, nullptr); + }); + + loadBenchmarkData(); + + if(AppConfig::instance().get(AppConfig::BenchmarkOnBoot)) + QTimer::singleShot(30000, [this]{ runBenchmarks(); }); } DspHost::~DspHost() { setStdOutHandler(NULL, NULL); + + _cache->deleteLater(); + benchmarkThread->deleteLater(); + benchmarkWorker->deleteLater(); + + _cache = nullptr; + benchmarkWorker = nullptr; + benchmarkThread = nullptr; +} + +void DspHost::runBenchmarks() +{ + if(benchmarkThread->isRunning()) { + Log::warning("Another benchmark is already active"); + return; + } + + benchmarkWorker->moveToThread(benchmarkThread); + benchmarkThread->start(); +} + +void DspHost::loadBenchmarkData() +{ + // Empty cache = no benchmark data stored + if(AppConfig::instance().get(AppConfig::BenchmarkCacheC0).isEmpty() && + AppConfig::instance().get(AppConfig::BenchmarkCacheC1).isEmpty()) + return; + + auto loadFromCache = [](int num, double* output){ + auto values = AppConfig::instance().get(num == 0 ? AppConfig::BenchmarkCacheC0 : AppConfig::BenchmarkCacheC1).split(';', Qt::SkipEmptyParts); + if(values.size() != MAX_BENCHMARK) + return false; + + for(int i = 0; i < values.size(); i++) { + bool ok = false; + output[i] = values[i].toDouble(&ok); + if(!ok) + return false; + } + return true; + }; + + double* c0 = new double[MAX_BENCHMARK]; + double* c1 = new double[MAX_BENCHMARK]; + + bool ok0 = loadFromCache(0, c0); + bool ok1 = loadFromCache(1, c1); + + if(!ok0 || !ok1) { + Log::error("Failed to parse cached benchmark data"); + return; + } + + JamesDSP_Load_benchmark(c0, c1); + + delete[] c0; + delete[] c1; } void DspHost::updateLimiter(DspConfig* config) @@ -227,7 +274,7 @@ void DspHost::updateCompander(DspConfig *config) param[i] = (double)std::stod(v[i]); } - CompressorSetParam(cast(this->_dsp), timeconstant, granularity, tftransforms); + CompressorSetParam(cast(this->_dsp), timeconstant, granularity, tftransforms, 0); CompressorSetGain(cast(this->_dsp), param, param + 7, 1); } @@ -583,6 +630,7 @@ bool DspHost::update(DspConfig *config, bool ignoreCache) StereoEnhancementEnable(cast(this->_dsp)); else StereoEnhancementDisable(cast(this->_dsp)); + StereoEnhancementSetParam(cast(this->_dsp), _cache->get(DspConfig::stereowide_level) / 100.0f); break; case DspConfig::stereowide_level: StereoEnhancementDisable(cast(this->_dsp)); @@ -746,16 +794,17 @@ std::vector DspHost::enumEelVariables() for (int j = 0; j < NSEEL_VARS_PER_BLOCK; j++) { EelVariable var; - char *valid = (char*)GetStringForIndex(ctx->m_string_context, ctx->varTable_Values[i][j], 0); - var.isString = valid; + // char *valid = (char*)GetStringForIndex(ctx->region_context, ctx->varTable_Values[i][j], 0); + // TODO fix string handling (broke after last libjamesdsp update) + var.isString = false; // = valid; if (ctx->varTable_Names[i][j]) { var.name = ctx->varTable_Names[i][j]; - if(var.isString) + /*if(var.isString) var.value = valid; - else - var.value = ctx->varTable_Values[i][j]; + else*/ + var.value = ctx->varTable_Values[i][j]; vars.push_back(var); } @@ -777,7 +826,8 @@ bool DspHost::manipulateEelVariable(const char* name, float value) continue; } - char *validString = (char*)GetStringForIndex(ctx->m_string_context, ctx->varTable_Values[i][j], 0); + // TODO fix string handling & detection + char *validString = nullptr;//(char*)GetStringForIndex(ctx->region_context, ctx->varTable_Values[i][j], 1); if(validString) { Log::error(QString("variable '%1' is a string; currently only numerical variables can be manipulated").arg(name)); diff --git a/src/audio/base/DspHost.h b/src/audio/base/DspHost.h index 691a8546..964b2eca 100644 --- a/src/audio/base/DspHost.h +++ b/src/audio/base/DspHost.h @@ -9,7 +9,9 @@ #include "EelVariable.h" #include "Utils.h" +class BenchmarkWorker; class DspConfig; +class QThread; class QVariant; class DspHost @@ -21,7 +23,8 @@ class DspHost EelCompilerResult, EelWriteOutputBuffer, ConvolverInfoChanged, - PrintfWriteOutputBuffer + PrintfWriteOutputBuffer, + BenchmarkDone }; typedef std::function MessageHandlerFunc; @@ -35,6 +38,9 @@ class DspHost std::vector enumEelVariables(); bool manipulateEelVariable(const char *name, float value); void freezeLiveprogExecution(bool freeze); + void runBenchmarks(); + void loadBenchmarkData(); + void dispatch(Message msg, std::any value); private: @@ -46,6 +52,9 @@ class DspHost void* _dsp; // JamesDSPLib* DspConfig* _cache; + QThread* benchmarkThread; + BenchmarkWorker* benchmarkWorker; + void updateLimiter(DspConfig *config); void updateFirEqualizer(DspConfig *config); void updateVdc(DspConfig *config); diff --git a/src/audio/base/IAudioService.h b/src/audio/base/IAudioService.h index 0039c1e7..e353f37b 100644 --- a/src/audio/base/IAudioService.h +++ b/src/audio/base/IAudioService.h @@ -32,6 +32,7 @@ public slots: void reloadLiveprog(); void enumerateLiveprogVariables(); + void runBenchmarks(); void handleMessage(DspHost::Message msg, std::any arg); @@ -43,6 +44,7 @@ public slots: void convolverInfoChanged(const ConvolverInfoEventArgs& args); void logOutputReceived(const QString& output); void outputDeviceChanged(const QString& deviceName, const QString& deviceId); + void benchmarkDone(); }; @@ -57,6 +59,11 @@ inline void IAudioService::enumerateLiveprogVariables() emit eelVariablesEnumerated(vars); } +inline void IAudioService::runBenchmarks() +{ + host()->runBenchmarks(); +} + inline void IAudioService::handleMessage(DspHost::Message msg, std::any value) { switch(msg) @@ -80,6 +87,9 @@ inline void IAudioService::handleMessage(DspHost::Message msg, std::any value) case DspHost::PrintfWriteOutputBuffer: emit logOutputReceived(std::any_cast(value)); break; + case DspHost::BenchmarkDone: + emit benchmarkDone(); + break; default: break; } diff --git a/src/audio/pipewire/PipewireAudioService.cpp b/src/audio/pipewire/PipewireAudioService.cpp index a31dbeb9..73dd2b04 100644 --- a/src/audio/pipewire/PipewireAudioService.cpp +++ b/src/audio/pipewire/PipewireAudioService.cpp @@ -14,7 +14,7 @@ PipewireAudioService::PipewireAudioService() { Glib::init(); - mgr = std::make_unique(); + mgr = std::make_unique(AppConfig::instance().get(AppConfig::AudioVirtualSinkForceMaxValue)); appMgr = std::make_unique(mgr.get()); plugin = new PwJamesDspPlugin(mgr.get(), this); effects = std::make_unique(mgr.get(), plugin, &AppConfig::instance()); diff --git a/src/audio/pipewire/PwPipelineManager.cpp b/src/audio/pipewire/PwPipelineManager.cpp index 08650097..d40cc6e3 100644 --- a/src/audio/pipewire/PwPipelineManager.cpp +++ b/src/audio/pipewire/PwPipelineManager.cpp @@ -1432,7 +1432,7 @@ const struct pw_registry_events registry_events = { } // namespace -PwPipelineManager::PwPipelineManager() : header_version(pw_get_headers_version()), library_version(pw_get_library_version()) { +PwPipelineManager::PwPipelineManager(bool sinkForceMaxVolume) : header_version(pw_get_headers_version()), library_version(pw_get_library_version()) { pw_init(nullptr, nullptr); spa_zero(core_listener); @@ -1494,7 +1494,7 @@ PwPipelineManager::PwPipelineManager() : header_version(pw_get_headers_version() pw_properties_set(props_sink, "factory.name", "support.null-audio-sink"); pw_properties_set(props_sink, PW_KEY_MEDIA_CLASS, tags::pipewire::media_class::sink); pw_properties_set(props_sink, "audio.position", "FL,FR"); - pw_properties_set(props_sink, "monitor.channel-volumes", "false"); + pw_properties_set(props_sink, "monitor.channel-volumes", !sinkForceMaxVolume ? "true" : "false"); proxy_stream_output_sink = static_cast( pw_core_create_object(core, "adapter", PW_TYPE_INTERFACE_Node, PW_VERSION_NODE, &props_sink->dict, 0)); diff --git a/src/audio/pipewire/PwPipelineManager.h b/src/audio/pipewire/PwPipelineManager.h index ff2d6f77..ee2bf77b 100644 --- a/src/audio/pipewire/PwPipelineManager.h +++ b/src/audio/pipewire/PwPipelineManager.h @@ -50,7 +50,7 @@ class PwPipelineManager { public: - PwPipelineManager(); + PwPipelineManager(bool sinkForceMaxVolume); PwPipelineManager(const PwPipelineManager&) = delete; auto operator=(const PwPipelineManager&) -> PwPipelineManager& = delete; PwPipelineManager(const PwPipelineManager&&) = delete; diff --git a/src/audio/pulseaudio/wrapper/gstjamesdsp.c b/src/audio/pulseaudio/wrapper/gstjamesdsp.c index c1151e00..e2ddb537 100644 --- a/src/audio/pulseaudio/wrapper/gstjamesdsp.c +++ b/src/audio/pulseaudio/wrapper/gstjamesdsp.c @@ -112,6 +112,7 @@ gst_jamesdsp_init(Gstjamesdsp *self) { self->dsp = malloc(sizeof(JamesDSPLib)); memset(self->dsp, 0, sizeof(JamesDSPLib)); + // TODO: Add benchmark toggle support to pulse version... JamesDSPGlobalMemoryAllocation(); JamesDSPInit(self->dsp, 128, 48000); diff --git a/src/config/AppConfig.cpp b/src/config/AppConfig.cpp index 4563d94d..a82209c0 100644 --- a/src/config/AppConfig.cpp +++ b/src/config/AppConfig.cpp @@ -42,6 +42,11 @@ AppConfig::AppConfig() DEFINE_KEY(AudioAppBlocklist, QStringList()); DEFINE_KEY(AudioAppBlocklistInvert, false); DEFINE_KEY(AudioInactivityTimeout, 10); + DEFINE_KEY(AudioVirtualSinkForceMaxValue, true); + + DEFINE_KEY(BenchmarkOnBoot, false); + DEFINE_KEY(BenchmarkCacheC0, ""); + DEFINE_KEY(BenchmarkCacheC1, ""); DEFINE_KEY(AeqPlotDarkMode, false); diff --git a/src/config/AppConfig.h b/src/config/AppConfig.h index 90670b52..293f6ef4 100644 --- a/src/config/AppConfig.h +++ b/src/config/AppConfig.h @@ -66,6 +66,11 @@ class AppConfig : AudioAppBlocklist, AudioAppBlocklistInvert, AudioInactivityTimeout, + AudioVirtualSinkForceMaxValue, + + BenchmarkOnBoot, + BenchmarkCacheC0, + BenchmarkCacheC1, AeqPlotDarkMode, @@ -178,4 +183,6 @@ private slots: ConfigContainer *_appconf; }; +Q_DECLARE_METATYPE(AppConfig::Key) + #endif // APPCONFIGWRAPPER_H diff --git a/src/config/DspConfig.h b/src/config/DspConfig.h index 7ffdd9ef..2b3e8ebb 100644 --- a/src/config/DspConfig.h +++ b/src/config/DspConfig.h @@ -315,4 +315,6 @@ private slots: QFileSystemWatcher *_watcher; }; +Q_DECLARE_METATYPE(DspConfig::Key) + #endif // DSPCONFIGWRAPPER_H diff --git a/src/interface/LiveprogSelectionWidget.cpp b/src/interface/LiveprogSelectionWidget.cpp index 76a2c04d..88c47d41 100644 --- a/src/interface/LiveprogSelectionWidget.cpp +++ b/src/interface/LiveprogSelectionWidget.cpp @@ -213,6 +213,7 @@ void LiveprogSelectionWidget::loadProperties(const QString& path) lbl->setText(prop->getDescription()); cbx->addItems(prop->getOptions()); + cbx->setCurrentIndex(prop->getValue()); cbx->setProperty("isCustomEELProperty", true); cbx->setObjectName(prop->getKey()); diff --git a/src/interface/fragment/SettingsFragment.cpp b/src/interface/fragment/SettingsFragment.cpp index d7b87aee..7938b6f0 100644 --- a/src/interface/fragment/SettingsFragment.cpp +++ b/src/interface/fragment/SettingsFragment.cpp @@ -41,9 +41,10 @@ SettingsFragment::SettingsFragment(TrayIcon *trayIcon, ui->setupUi(this); #ifdef USE_PULSEAUDIO - ui->selector->topLevelItem(2)->setHidden(true); // Hide devices + ui->selector->topLevelItem(3)->setHidden(true); // Hide devices ui->devices->setVisible(false); ui->blocklistBox->setVisible(false); + ui->benchmarkOnBoot->setEnabled(false); #endif _paletteEditor->setFixedSize(_paletteEditor->geometry().width(), _paletteEditor->geometry().height()); @@ -54,7 +55,7 @@ SettingsFragment::SettingsFragment(TrayIcon *trayIcon, ui->selector->setCurrentItem(ui->selector->topLevelItem(0)); ui->stackedWidget->setCurrentIndex(0); ui->stackedWidget->repaint(); - ui->selector->expandItem(ui->selector->topLevelItem(4)); // Expand tray-icon + ui->selector->expandItem(ui->selector->topLevelItem(5)); // Expand tray-icon connect(ui->selector, &QTreeWidget::currentItemChanged, this, &SettingsFragment::onTreeItemSelected); /* @@ -86,14 +87,23 @@ SettingsFragment::SettingsFragment(TrayIcon *trayIcon, connect(ui->menu_edit, &QMenuEditor::resetPressed, this, &SettingsFragment::onTrayEditorReset); ui->menu_edit->setSourceMenu(trayIcon->buildAvailableActions()); - /* + /* * Interface signals - */ + */ connect(ui->themeSelect, qOverload(&QComboBox::currentIndexChanged), this, &SettingsFragment::onThemeSelected); connect(ui->paletteSelect, qOverload(&QComboBox::currentIndexChanged), this, &SettingsFragment::onPaletteSelected); connect(ui->paletteConfig, &QPushButton::clicked, _paletteEditor, &PaletteEditor::show); connect(ui->eq_alwaysdrawhandles, &QCheckBox::clicked, this, &SettingsFragment::onEqualizerHandlesToggled); + /* + * Audio processing + */ + connect(ui->benchmarkOnBoot, &QCheckBox::clicked, this, &SettingsFragment::onBenchmarkOnBootToggled); + connect(ui->benchmarkNow, &QPushButton::clicked, this, &SettingsFragment::onBenchmarkRunClicked); + connect(ui->benchmarkClear, &QPushButton::clicked, this, &SettingsFragment::onBenchmarkClearClicked); + connect(ui->sinkAllowVolumeControl, &QCheckBox::clicked, this, &SettingsFragment::onSinkAllowVolumeControlClicked); + connect(_audioService, &IAudioService::benchmarkDone, this, [this]{ updateBenchmarkStatus(tr("benchmark data loaded")); }); + /* * Paths signals */ @@ -160,7 +170,12 @@ void SettingsFragment::onAppConfigUpdated(const AppConfig::Key &key, const QVari ui->systray_minOnBoot->setChecked(value.toBool()); default: break; - } + } +} + +void SettingsFragment::updateBenchmarkStatus(const QString &message) +{ + ui->benchmarkStatus->setText(QString("Status: %1").arg(message)); } void SettingsFragment::refreshDevices() @@ -252,13 +267,22 @@ void SettingsFragment::refreshAll() ui->eq_alwaysdrawhandles->setChecked(AppConfig::instance().get(AppConfig::EqualizerShowHandles)); + ui->benchmarkOnBoot->setChecked(AppConfig::instance().get(AppConfig::BenchmarkOnBoot)); + ui->sinkAllowVolumeControl->setChecked(!AppConfig::instance().get(AppConfig::AudioVirtualSinkForceMaxValue)); + ui->blocklistInvert->blockSignals(true); ui->blocklistInvert->setChecked(AppConfig::instance().get(AppConfig::AudioAppBlocklistInvert)); ui->blocklistInvert->blockSignals(false); ui->aeqStatus->setText(AeqPackageManager().isPackageInstalled() ? tr("installed") : tr("not installed")); - refreshDevices(); + if(AppConfig::instance().get(AppConfig::BenchmarkCacheC0).isEmpty() && + AppConfig::instance().get(AppConfig::BenchmarkCacheC1).isEmpty()) + updateBenchmarkStatus(tr("no benchmark data stored")); + else + updateBenchmarkStatus(tr("benchmark data loaded")); + + refreshDevices(); _lockslot = false; } @@ -313,9 +337,9 @@ void SettingsFragment::onTreeItemSelected(QTreeWidgetItem *cur, QTreeWidgetItem switch (topLevelIndex) { case -1: - if (ui->selector->indexOfTopLevelItem(cur->parent()) == 4 /* Tray-icon */) + if (ui->selector->indexOfTopLevelItem(cur->parent()) == 5 /* Tray-icon */) { - ui->stackedWidget->setCurrentIndex(5); // Context menu + ui->stackedWidget->setCurrentIndex(6); // Context menu } break; default: @@ -419,6 +443,30 @@ void SettingsFragment::onEqualizerHandlesToggled() AppConfig::instance().set(AppConfig::EqualizerShowHandles, ui->eq_alwaysdrawhandles->isChecked()); } +void SettingsFragment::onBenchmarkOnBootToggled() +{ + AppConfig::instance().set(AppConfig::BenchmarkOnBoot, ui->benchmarkOnBoot->isChecked()); +} + +void SettingsFragment::onBenchmarkRunClicked() +{ + _audioService->runBenchmarks(); + updateBenchmarkStatus(tr("waiting for result...")); +} + +void SettingsFragment::onBenchmarkClearClicked() +{ + AppConfig::instance().set(AppConfig::BenchmarkCacheC0, ""); + AppConfig::instance().set(AppConfig::BenchmarkCacheC1, ""); + QMessageBox::information(this, tr("Cache cleared"), tr("Benchmark data has been cleared. Restart this app to fully apply the changes.")); + updateBenchmarkStatus(tr("no benchmark data stored")); +} + +void SettingsFragment::onSinkAllowVolumeControlClicked() +{ + AppConfig::instance().set(AppConfig::AudioVirtualSinkForceMaxValue, !ui->sinkAllowVolumeControl->isChecked()); +} + void SettingsFragment::onLiveprogAutoExtractToggled() { AppConfig::instance().set(AppConfig::LiveprogAutoExtract, ui->liveprog_autoextract->isChecked()); diff --git a/src/interface/fragment/SettingsFragment.h b/src/interface/fragment/SettingsFragment.h index 4ed0d9e4..271bb5b3 100644 --- a/src/interface/fragment/SettingsFragment.h +++ b/src/interface/fragment/SettingsFragment.h @@ -66,11 +66,17 @@ private slots: void onTrayEditorCommitted(); void onTrayEditorReset(); void onEqualizerHandlesToggled(); + void onBenchmarkOnBootToggled(); + void onBenchmarkRunClicked(); + void onBenchmarkClearClicked(); + void onSinkAllowVolumeControlClicked(); void onLiveprogAutoExtractToggled(); void onGithubLinkClicked(); void onAeqDatabaseManageClicked(); void onAppConfigUpdated(const AppConfig::Key &key, const QVariant &value); + void updateBenchmarkStatus(const QString& message); + signals: void launchSetupWizard(); void reopenSettings(); diff --git a/src/interface/fragment/SettingsFragment.ui b/src/interface/fragment/SettingsFragment.ui index e3d9dd16..eb47bf7c 100644 --- a/src/interface/fragment/SettingsFragment.ui +++ b/src/interface/fragment/SettingsFragment.ui @@ -7,7 +7,7 @@ 0 0 685 - 365 + 400 @@ -88,6 +88,11 @@ Interface + + + Audio processing + + Default paths @@ -129,7 +134,7 @@ true - 3 + 1 @@ -286,6 +291,156 @@ + + + + + + Convolver benchmarking + + + + + + 0 + + + + + + 130 + 0 + + + + Benchmark now + + + + + + + + 130 + 0 + + + + Clear cached data + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Status: unknown + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 2 + + + + + + + + Enable benchmarking on boot + + + + + + + false + + + Benchmarking on boot may cause increased CPU usage for about one minute after launch. Generating benchmarking data for your system can improve the performance of the convolver modules. + + + true + + + + + + + + + + Workarounds + + + + + + + 0 + 0 + + + + Allow volume control of the virtual sink device + + + + + + + false + + + Restart required to apply changes. May cause audio loss in some cases. + + + true + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + true diff --git a/src/main.cpp b/src/main.cpp index ca5995a6..466d8bf6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,15 +18,15 @@ #include #include +static QTranslator* qtTranslator = nullptr; +static QTranslator* translator = nullptr; + #ifndef NO_CRASH_HANDLER #include "crash/airbag.h" #include "crash/stacktrace.h" static bool SPIN_ON_CRASH = false; -static QTranslator* qtTranslator = nullptr; -static QTranslator* translator = nullptr; - void onExceptionRaised(int fd) { Q_UNUSED(fd) @@ -148,6 +148,9 @@ int main(int argc, // Prepare crash handler if enabled bool lastSessionCrashed = initCrashHandler(exepath); + qRegisterMetaType(); + qRegisterMetaType(); + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true); QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true); diff --git a/src/src.pro b/src/src.pro index cda1d60c..fb734db1 100644 --- a/src/src.pro +++ b/src/src.pro @@ -13,6 +13,7 @@ TEMPLATE = app UI_DEBUG: DEFINES += UI_DEBUG DEBUG_FPE: DEFINES += DEBUG_FPE +DEBUG_ASAN: CONFIG += sanitizer sanitize_address USE_PULSEAUDIO: DEFINES += USE_PULSEAUDIO USE_PORTALS: DEFINES += USE_PORTALS NO_CRASH_HANDLER: DEFINES += NO_CRASH_HANDLER diff --git a/src/subprojects/GraphicEQWidget b/src/subprojects/GraphicEQWidget index 1c723779..739a016a 160000 --- a/src/subprojects/GraphicEQWidget +++ b/src/subprojects/GraphicEQWidget @@ -1 +1 @@ -Subproject commit 1c72377957c19f21faeccfef57dd5c46a31be7d9 +Subproject commit 739a016aa54ed8465133d3b70b687d67b326e1e1 diff --git a/src/utils/AutoStartManager.cpp b/src/utils/AutoStartManager.cpp index 7fd6c066..535806a1 100644 --- a/src/utils/AutoStartManager.cpp +++ b/src/utils/AutoStartManager.cpp @@ -32,10 +32,10 @@ static void onPortalBackgroundRequest(GObject *source_object, GAsyncResult *res, if (error != nullptr && error->code == 19) { reason = QObject::tr("Auto-start permission has been denied"); - explanation = QObject::tr("Please run 'flatpak permission-reset %1' and reenable auto-start.", FLATPAK_APP_ID); + explanation = QObject::tr("Please run 'flatpak permission-set background background %1 yes' and reenable auto-start.").arg(FLATPAK_APP_ID); } else { reason = QObject::tr("Unknown error"); - explanation = QObject::tr("Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1", (error) != nullptr ? error->message : ""); + explanation = QObject::tr("Please make sure a XDG Background Portal implementation is available and active to use auto-start. %1").arg((error) != nullptr ? error->message : ""); } Log::error(reason); diff --git a/src/utils/Log.cpp b/src/utils/Log.cpp index 7f037188..4c650076 100644 --- a/src/utils/Log.cpp +++ b/src/utils/Log.cpp @@ -120,6 +120,8 @@ void Log::write(const QString& msg, bool force, bool useStdErr, LoggingMode mode if(mode == LM_UNSPECIFIED) mode = loggingMode; + mutex.lock(); + QFile file(path()); if (mode == LM_ALL || mode == LM_FILE) { @@ -136,6 +138,8 @@ void Log::write(const QString& msg, bool force, bool useStdErr, LoggingMode mode (useStdErr ? err : out) << msg.toUtf8().constData() << Qt::endl; (useStdErr ? err : out).flush(); } + + mutex.unlock(); } QString Log::prepareDebugMessage(const QString& message, util::source_location location) diff --git a/src/utils/Log.h b/src/utils/Log.h index 3e6b90be..bc52e46f 100644 --- a/src/utils/Log.h +++ b/src/utils/Log.h @@ -18,6 +18,7 @@ #include #include #include +#include // TODO Move Utils.h out of AudioDrivers/Base into a common subproject #include "Utils.h" @@ -101,6 +102,7 @@ class Log LoggingMode loggingMode = LM_ALL; bool useSimpleFormat = false; Severity minSeverity = Debug; + QMutex mutex = QMutex(); }; #endif // LOG_H